Index: webrtc/base/sslidentity.h |
diff --git a/webrtc/base/sslidentity.h b/webrtc/base/sslidentity.h |
index 263d0dcd039b9e2fbc29ec99ee2dba00d1f61ae9..1cedfa09c17cb4adffc04884e5626cdf13e86622 100644 |
--- a/webrtc/base/sslidentity.h |
+++ b/webrtc/base/sslidentity.h |
@@ -13,262 +13,9 @@ |
#ifndef WEBRTC_BASE_SSLIDENTITY_H_ |
#define WEBRTC_BASE_SSLIDENTITY_H_ |
-#include <algorithm> |
-#include <memory> |
-#include <string> |
-#include <vector> |
-#include "webrtc/base/buffer.h" |
-#include "webrtc/base/constructormagic.h" |
-#include "webrtc/base/messagedigest.h" |
-#include "webrtc/base/timeutils.h" |
- |
-namespace rtc { |
- |
-// Forward declaration due to circular dependency with SSLCertificate. |
-class SSLCertChain; |
- |
-struct SSLCertificateStats { |
- SSLCertificateStats(std::string&& fingerprint, |
- std::string&& fingerprint_algorithm, |
- std::string&& base64_certificate, |
- std::unique_ptr<SSLCertificateStats>&& issuer); |
- ~SSLCertificateStats(); |
- std::string fingerprint; |
- std::string fingerprint_algorithm; |
- std::string base64_certificate; |
- std::unique_ptr<SSLCertificateStats> issuer; |
-}; |
- |
-// Abstract interface overridden by SSL library specific |
-// implementations. |
- |
-// A somewhat opaque type used to encapsulate a certificate. |
-// Wraps the SSL library's notion of a certificate, with reference counting. |
-// The SSLCertificate object is pretty much immutable once created. |
-// (The OpenSSL implementation only does reference counting and |
-// possibly caching of intermediate results.) |
-class SSLCertificate { |
- public: |
- // Parses and builds a certificate from a PEM encoded string. |
- // Returns null on failure. |
- // The length of the string representation of the certificate is |
- // stored in *pem_length if it is non-null, and only if |
- // parsing was successful. |
- // Caller is responsible for freeing the returned object. |
- static SSLCertificate* FromPEMString(const std::string& pem_string); |
- virtual ~SSLCertificate() {} |
- |
- // Returns a new SSLCertificate object instance wrapping the same |
- // underlying certificate, including its chain if present. |
- // Caller is responsible for freeing the returned object. |
- virtual SSLCertificate* GetReference() const = 0; |
- |
- // Provides the cert chain, or null. The chain includes a copy of each |
- // certificate, excluding the leaf. |
- virtual std::unique_ptr<SSLCertChain> GetChain() const = 0; |
- |
- // Returns a PEM encoded string representation of the certificate. |
- virtual std::string ToPEMString() const = 0; |
- |
- // Provides a DER encoded binary representation of the certificate. |
- virtual void ToDER(Buffer* der_buffer) const = 0; |
- |
- // Gets the name of the digest algorithm that was used to compute this |
- // certificate's signature. |
- virtual bool GetSignatureDigestAlgorithm(std::string* algorithm) const = 0; |
- |
- // Compute the digest of the certificate given algorithm |
- virtual bool ComputeDigest(const std::string& algorithm, |
- unsigned char* digest, |
- size_t size, |
- size_t* length) const = 0; |
- |
- // Returns the time in seconds relative to epoch, 1970-01-01T00:00:00Z (UTC), |
- // or -1 if an expiration time could not be retrieved. |
- virtual int64_t CertificateExpirationTime() const = 0; |
- |
- // Gets information (fingerprint, etc.) about this certificate and its chain |
- // (if it has a certificate chain). This is used for certificate stats, see |
- // https://w3c.github.io/webrtc-stats/#certificatestats-dict*. |
- std::unique_ptr<SSLCertificateStats> GetStats() const; |
- |
- private: |
- std::unique_ptr<SSLCertificateStats> GetStats( |
- std::unique_ptr<SSLCertificateStats> issuer) const; |
-}; |
- |
-// SSLCertChain is a simple wrapper for a vector of SSLCertificates. It serves |
-// primarily to ensure proper memory management (especially deletion) of the |
-// SSLCertificate pointers. |
-class SSLCertChain { |
- public: |
- // These constructors copy the provided SSLCertificate(s), so the caller |
- // retains ownership. |
- explicit SSLCertChain(const std::vector<SSLCertificate*>& certs); |
- explicit SSLCertChain(const SSLCertificate* cert); |
- ~SSLCertChain(); |
- |
- // Vector access methods. |
- size_t GetSize() const { return certs_.size(); } |
- |
- // Returns a temporary reference, only valid until the chain is destroyed. |
- const SSLCertificate& Get(size_t pos) const { return *(certs_[pos]); } |
- |
- // Returns a new SSLCertChain object instance wrapping the same underlying |
- // certificate chain. Caller is responsible for freeing the returned object. |
- SSLCertChain* Copy() const { |
- return new SSLCertChain(certs_); |
- } |
- |
- private: |
- // Helper function for duplicating a vector of certificates. |
- static SSLCertificate* DupCert(const SSLCertificate* cert) { |
- return cert->GetReference(); |
- } |
- |
- // Helper function for deleting a vector of certificates. |
- static void DeleteCert(SSLCertificate* cert) { delete cert; } |
- |
- std::vector<SSLCertificate*> certs_; |
- |
- RTC_DISALLOW_COPY_AND_ASSIGN(SSLCertChain); |
-}; |
- |
-// KT_LAST is intended for vector declarations and loops over all key types; |
-// it does not represent any key type in itself. |
-// KT_DEFAULT is used as the default KeyType for KeyParams. |
-enum KeyType { KT_RSA, KT_ECDSA, KT_LAST, KT_DEFAULT = KT_ECDSA }; |
- |
-static const int kRsaDefaultModSize = 1024; |
-static const int kRsaDefaultExponent = 0x10001; // = 2^16+1 = 65537 |
-static const int kRsaMinModSize = 1024; |
-static const int kRsaMaxModSize = 8192; |
- |
-// Certificate default validity lifetime. |
-static const int kDefaultCertificateLifetimeInSeconds = |
- 60 * 60 * 24 * 30; // 30 days |
-// Certificate validity window. |
-// This is to compensate for slightly incorrect system clocks. |
-static const int kCertificateWindowInSeconds = -60 * 60 * 24; |
- |
-struct RSAParams { |
- unsigned int mod_size; |
- unsigned int pub_exp; |
-}; |
- |
-enum ECCurve { EC_NIST_P256, /* EC_FANCY, */ EC_LAST }; |
- |
-class KeyParams { |
- public: |
- // Generate a KeyParams object from a simple KeyType, using default params. |
- explicit KeyParams(KeyType key_type = KT_DEFAULT); |
- |
- // Generate a a KeyParams for RSA with explicit parameters. |
- static KeyParams RSA(int mod_size = kRsaDefaultModSize, |
- int pub_exp = kRsaDefaultExponent); |
- |
- // Generate a a KeyParams for ECDSA specifying the curve. |
- static KeyParams ECDSA(ECCurve curve = EC_NIST_P256); |
- |
- // Check validity of a KeyParams object. Since the factory functions have |
- // no way of returning errors, this function can be called after creation |
- // to make sure the parameters are OK. |
- bool IsValid() const; |
- |
- RSAParams rsa_params() const; |
- |
- ECCurve ec_curve() const; |
- |
- KeyType type() const { return type_; } |
- |
- private: |
- KeyType type_; |
- union { |
- RSAParams rsa; |
- ECCurve curve; |
- } params_; |
-}; |
- |
-// TODO(hbos): Remove once rtc::KeyType (to be modified) and |
-// blink::WebRTCKeyType (to be landed) match. By using this function in Chromium |
-// appropriately we can change KeyType enum -> class without breaking Chromium. |
-KeyType IntKeyTypeFamilyToKeyType(int key_type_family); |
- |
-// Parameters for generating a certificate. If |common_name| is non-empty, it |
-// will be used for the certificate's subject and issuer name, otherwise a |
-// random string will be used. |
-struct SSLIdentityParams { |
- std::string common_name; |
- time_t not_before; // Absolute time since epoch in seconds. |
- time_t not_after; // Absolute time since epoch in seconds. |
- KeyParams key_params; |
-}; |
- |
-// Our identity in an SSL negotiation: a keypair and certificate (both |
-// with the same public key). |
-// This too is pretty much immutable once created. |
-class SSLIdentity { |
- public: |
- // Generates an identity (keypair and self-signed certificate). If |
- // |common_name| is non-empty, it will be used for the certificate's subject |
- // and issuer name, otherwise a random string will be used. The key type and |
- // parameters are defined in |key_param|. The certificate's lifetime in |
- // seconds from the current time is defined in |certificate_lifetime|; it |
- // should be a non-negative number. |
- // Returns null on failure. |
- // Caller is responsible for freeing the returned object. |
- static SSLIdentity* GenerateWithExpiration(const std::string& common_name, |
- const KeyParams& key_param, |
- time_t certificate_lifetime); |
- static SSLIdentity* Generate(const std::string& common_name, |
- const KeyParams& key_param); |
- static SSLIdentity* Generate(const std::string& common_name, |
- KeyType key_type); |
- |
- // Generates an identity with the specified validity period. |
- // TODO(torbjorng): Now that Generate() accepts relevant params, make tests |
- // use that instead of this function. |
- static SSLIdentity* GenerateForTest(const SSLIdentityParams& params); |
- |
- // Construct an identity from a private key and a certificate. |
- static SSLIdentity* FromPEMStrings(const std::string& private_key, |
- const std::string& certificate); |
- |
- virtual ~SSLIdentity() {} |
- |
- // Returns a new SSLIdentity object instance wrapping the same |
- // identity information. |
- // Caller is responsible for freeing the returned object. |
- // TODO(hbos,torbjorng): Rename to a less confusing name. |
- virtual SSLIdentity* GetReference() const = 0; |
- |
- // Returns a temporary reference to the certificate. |
- virtual const SSLCertificate& certificate() const = 0; |
- virtual std::string PrivateKeyToPEMString() const = 0; |
- virtual std::string PublicKeyToPEMString() const = 0; |
- |
- // Helpers for parsing converting between PEM and DER format. |
- static bool PemToDer(const std::string& pem_type, |
- const std::string& pem_string, |
- std::string* der); |
- static std::string DerToPem(const std::string& pem_type, |
- const unsigned char* data, |
- size_t length); |
-}; |
- |
-bool operator==(const SSLIdentity& a, const SSLIdentity& b); |
-bool operator!=(const SSLIdentity& a, const SSLIdentity& b); |
- |
-// Convert from ASN1 time as restricted by RFC 5280 to seconds from 1970-01-01 |
-// 00.00 ("epoch"). If the ASN1 time cannot be read, return -1. The data at |
-// |s| is not 0-terminated; its char count is defined by |length|. |
-int64_t ASN1TimeToSec(const unsigned char* s, size_t length, bool long_format); |
- |
-extern const char kPemTypeCertificate[]; |
-extern const char kPemTypeRsaPrivateKey[]; |
-extern const char kPemTypeEcPrivateKey[]; |
- |
-} // namespace rtc |
+// This header is deprecated and is just left here temporarily during |
+// refactoring. See https://bugs.webrtc.org/7634 for more details. |
+#include "webrtc/rtc_base/sslidentity.h" |
#endif // WEBRTC_BASE_SSLIDENTITY_H_ |