| /* |
| * Copyright 2004 The WebRTC Project Authors. All rights reserved. |
| * |
| * Use of this source code is governed by a BSD-style license |
| * that can be found in the LICENSE file in the root of the source |
| * tree. An additional intellectual property rights grant can be found |
| * in the file PATENTS. All contributing project authors may |
| * be found in the AUTHORS file in the root of the source tree. |
| */ |
| |
| #ifndef WEBRTC_BASE_NSSIDENTITY_H_ |
| #define WEBRTC_BASE_NSSIDENTITY_H_ |
| |
| #include <string> |
| |
| #include "cert.h" |
| #include "nspr.h" |
| #include "hasht.h" |
| #include "keythi.h" |
| |
| #include "webrtc/base/common.h" |
| #include "webrtc/base/logging.h" |
| #include "webrtc/base/scoped_ptr.h" |
| #include "webrtc/base/sslidentity.h" |
| |
| namespace rtc { |
| |
| class NSSKeyPair { |
| public: |
| NSSKeyPair(SECKEYPrivateKey* privkey, SECKEYPublicKey* pubkey) : |
| privkey_(privkey), pubkey_(pubkey) {} |
| ~NSSKeyPair(); |
| |
| // Generate a 1024-bit RSA key pair. |
| static NSSKeyPair* Generate(); |
| NSSKeyPair* GetReference(); |
| |
| SECKEYPrivateKey* privkey() const { return privkey_; } |
| SECKEYPublicKey * pubkey() const { return pubkey_; } |
| |
| private: |
| SECKEYPrivateKey* privkey_; |
| SECKEYPublicKey* pubkey_; |
| |
| DISALLOW_EVIL_CONSTRUCTORS(NSSKeyPair); |
| }; |
| |
| |
| class NSSCertificate : public SSLCertificate { |
| public: |
| static NSSCertificate* FromPEMString(const std::string& pem_string); |
| // The caller retains ownership of the argument to all the constructors, |
| // and the constructor makes a copy. |
| explicit NSSCertificate(CERTCertificate* cert); |
| explicit NSSCertificate(CERTCertList* cert_list); |
| virtual ~NSSCertificate() { |
| if (certificate_) |
| CERT_DestroyCertificate(certificate_); |
| } |
| |
| virtual NSSCertificate* GetReference() const; |
| |
| virtual std::string ToPEMString() const; |
| |
| virtual void ToDER(Buffer* der_buffer) const; |
| |
| virtual bool GetSignatureDigestAlgorithm(std::string* algorithm) const; |
| |
| virtual bool ComputeDigest(const std::string& algorithm, |
| unsigned char* digest, |
| size_t size, |
| size_t* length) const; |
| |
| virtual bool GetChain(SSLCertChain** chain) const; |
| |
| CERTCertificate* certificate() { return certificate_; } |
| |
| // Performs minimal checks to determine if the list is a valid chain. This |
| // only checks that each certificate certifies the preceding certificate, |
| // and ignores many other certificate features such as expiration dates. |
| static bool IsValidChain(const CERTCertList* cert_list); |
| |
| // Helper function to get the length of a digest |
| static bool GetDigestLength(const std::string& algorithm, size_t* length); |
| |
| // Comparison. Only the certificate itself is considered, not the chain. |
| bool Equals(const NSSCertificate* tocompare) const; |
| |
| private: |
| NSSCertificate(CERTCertificate* cert, SSLCertChain* chain); |
| static bool GetDigestObject(const std::string& algorithm, |
| const SECHashObject** hash_object); |
| |
| CERTCertificate* certificate_; |
| scoped_ptr<SSLCertChain> chain_; |
| |
| DISALLOW_EVIL_CONSTRUCTORS(NSSCertificate); |
| }; |
| |
| // Represents a SSL key pair and certificate for NSS. |
| class NSSIdentity : public SSLIdentity { |
| public: |
| static NSSIdentity* Generate(const std::string& common_name); |
| static NSSIdentity* GenerateForTest(const SSLIdentityParams& params); |
| static SSLIdentity* FromPEMStrings(const std::string& private_key, |
| const std::string& certificate); |
| virtual ~NSSIdentity() { |
| LOG(LS_INFO) << "Destroying NSS identity"; |
| } |
| |
| virtual NSSIdentity* GetReference() const; |
| virtual NSSCertificate& certificate() const; |
| |
| NSSKeyPair* keypair() const { return keypair_.get(); } |
| |
| private: |
| NSSIdentity(NSSKeyPair* keypair, NSSCertificate* cert) : |
| keypair_(keypair), certificate_(cert) {} |
| |
| static NSSIdentity* GenerateInternal(const SSLIdentityParams& params); |
| |
| rtc::scoped_ptr<NSSKeyPair> keypair_; |
| rtc::scoped_ptr<NSSCertificate> certificate_; |
| |
| DISALLOW_EVIL_CONSTRUCTORS(NSSIdentity); |
| }; |
| |
| } // namespace rtc |
| |
| #endif // WEBRTC_BASE_NSSIDENTITY_H_ |