Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef NET_BASE_X509_CERTIFICATE_H_ | 5 #ifndef NET_BASE_X509_CERTIFICATE_H_ |
| 6 #define NET_BASE_X509_CERTIFICATE_H_ | 6 #define NET_BASE_X509_CERTIFICATE_H_ |
| 7 #pragma once | 7 #pragma once |
| 8 | 8 |
| 9 #include <string.h> | 9 #include <string.h> |
| 10 | 10 |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 24 #elif defined(OS_MACOSX) | 24 #elif defined(OS_MACOSX) |
| 25 #include <CoreFoundation/CFArray.h> | 25 #include <CoreFoundation/CFArray.h> |
| 26 #include <Security/SecBase.h> | 26 #include <Security/SecBase.h> |
| 27 | 27 |
| 28 #include "base/synchronization/lock.h" | 28 #include "base/synchronization/lock.h" |
| 29 #elif defined(USE_OPENSSL) | 29 #elif defined(USE_OPENSSL) |
| 30 // Forward declaration; real one in <x509.h> | 30 // Forward declaration; real one in <x509.h> |
| 31 typedef struct x509_st X509; | 31 typedef struct x509_st X509; |
| 32 typedef struct x509_store_st X509_STORE; | 32 typedef struct x509_store_st X509_STORE; |
| 33 #elif defined(USE_NSS) | 33 #elif defined(USE_NSS) |
| 34 #include <net/base/cert_type.h> | |
|
wtc
2011/11/29 23:13:57
This should be
#include "net/base/cert_type.h"
Greg Spencer (Chromium)
2011/12/02 18:50:07
Whoops, yeah, I know that. :) Fixed.
| |
| 34 // Forward declaration; real one in <cert.h> | 35 // Forward declaration; real one in <cert.h> |
| 35 struct CERTCertificateStr; | 36 struct CERTCertificateStr; |
| 36 #endif | 37 #endif |
| 37 | 38 |
| 38 class Pickle; | 39 class Pickle; |
| 39 | 40 |
| 40 namespace crypto { | 41 namespace crypto { |
| 41 class StringPiece; | 42 class StringPiece; |
| 42 class RSAPrivateKey; | 43 class RSAPrivateKey; |
| 43 } // namespace crypto | 44 } // namespace crypto |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 121 // |intermediate_ca_certificates_| at the time it was serialized. | 122 // |intermediate_ca_certificates_| at the time it was serialized. |
| 122 PICKLETYPE_CERTIFICATE_CHAIN, | 123 PICKLETYPE_CERTIFICATE_CHAIN, |
| 123 }; | 124 }; |
| 124 | 125 |
| 125 // Creates a X509Certificate from the ground up. Used by tests that simulate | 126 // Creates a X509Certificate from the ground up. Used by tests that simulate |
| 126 // SSL connections. | 127 // SSL connections. |
| 127 X509Certificate(const std::string& subject, const std::string& issuer, | 128 X509Certificate(const std::string& subject, const std::string& issuer, |
| 128 base::Time start_date, base::Time expiration_date); | 129 base::Time start_date, base::Time expiration_date); |
| 129 | 130 |
| 130 // Create an X509Certificate from a handle to the certificate object in the | 131 // Create an X509Certificate from a handle to the certificate object in the |
| 131 // underlying crypto library. The returned pointer must be stored in a | 132 // underlying crypto library. The returned pointer MUST be stored in a |
|
wtc
2011/11/29 23:13:57
Nit: we don't have a convention of capitalizing MU
Greg Spencer (Chromium)
2011/12/02 18:50:07
OK, fixed.
| |
| 132 // scoped_refptr<X509Certificate>. | 133 // scoped_refptr<X509Certificate>. |
| 133 static X509Certificate* CreateFromHandle(OSCertHandle cert_handle, | 134 static X509Certificate* CreateFromHandle(OSCertHandle cert_handle, |
| 134 const OSCertHandles& intermediates); | 135 const OSCertHandles& intermediates); |
| 135 | 136 |
| 136 // Create an X509Certificate from a chain of DER encoded certificates. The | 137 // Create an X509Certificate from a chain of DER encoded certificates. The |
| 137 // first certificate in the chain is the end-entity certificate to which a | 138 // first certificate in the chain is the end-entity certificate to which a |
| 138 // handle is returned. The other certificates in the chain are intermediate | 139 // handle is returned. The other certificates in the chain are intermediate |
| 139 // certificates. The returned pointer must be stored in a | 140 // certificates. The returned pointer MUST be stored in a |
| 140 // scoped_refptr<X509Certificate>. | 141 // scoped_refptr<X509Certificate>. |
| 141 static X509Certificate* CreateFromDERCertChain( | 142 static X509Certificate* CreateFromDERCertChain( |
| 142 const std::vector<base::StringPiece>& der_certs); | 143 const std::vector<base::StringPiece>& der_certs); |
| 143 | 144 |
| 144 // Create an X509Certificate from the DER-encoded representation. | 145 // Create an X509Certificate from the DER-encoded representation. |
| 145 // Returns NULL on failure. | 146 // Returns NULL on failure. |
| 146 // | 147 // |
| 147 // The returned pointer must be stored in a scoped_refptr<X509Certificate>. | 148 // The returned pointer MUST be stored in a scoped_refptr<X509Certificate>. |
| 148 static X509Certificate* CreateFromBytes(const char* data, int length); | 149 static X509Certificate* CreateFromBytes(const char* data, int length); |
| 149 | 150 |
| 151 #if defined(USE_NSS) | |
| 152 // Create an X509Certificate from the DER-encoded representation. | |
| 153 // |nickname| can be NULL if an auto-generated nickname is desired. | |
| 154 // Returns NULL on failure. | |
| 155 // | |
| 156 // The returned pointer MUST be stored in a scoped_refptr<X509Certificate>. | |
| 157 static X509Certificate* CreateFromBytesWithNickname(const char* data, | |
|
wtc
2011/11/29 23:13:57
It would be nice to point out the difference betwe
Greg Spencer (Chromium)
2011/12/02 18:50:07
Done.
| |
| 158 int length, | |
| 159 const char* nickname); | |
| 160 #endif | |
| 161 | |
| 150 // Create an X509Certificate from the representation stored in the given | 162 // Create an X509Certificate from the representation stored in the given |
| 151 // pickle. The data for this object is found relative to the given | 163 // pickle. The data for this object is found relative to the given |
| 152 // pickle_iter, which should be passed to the pickle's various Read* methods. | 164 // pickle_iter, which should be passed to the pickle's various Read* methods. |
| 153 // Returns NULL on failure. | 165 // Returns NULL on failure. |
| 154 // | 166 // |
| 155 // The returned pointer must be stored in a scoped_refptr<X509Certificate>. | 167 // The returned pointer MUST be stored in a scoped_refptr<X509Certificate>. |
| 156 static X509Certificate* CreateFromPickle(const Pickle& pickle, | 168 static X509Certificate* CreateFromPickle(const Pickle& pickle, |
| 157 void** pickle_iter, | 169 void** pickle_iter, |
| 158 PickleType type); | 170 PickleType type); |
| 159 | 171 |
| 160 // Parses all of the certificates possible from |data|. |format| is a | 172 // Parses all of the certificates possible from |data|. |format| is a |
| 161 // bit-wise OR of Format, indicating the possible formats the | 173 // bit-wise OR of Format, indicating the possible formats the |
| 162 // certificates may have been serialized as. If an error occurs, an empty | 174 // certificates may have been serialized as. If an error occurs, an empty |
| 163 // collection will be returned. | 175 // collection will be returned. |
| 164 static CertificateList CreateCertificateListFromBytes(const char* data, | 176 static CertificateList CreateCertificateListFromBytes(const char* data, |
| 165 int length, | 177 int length, |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 192 void Persist(Pickle* pickle); | 204 void Persist(Pickle* pickle); |
| 193 | 205 |
| 194 // The subject of the certificate. For HTTPS server certificates, this | 206 // The subject of the certificate. For HTTPS server certificates, this |
| 195 // represents the web server. The common name of the subject should match | 207 // represents the web server. The common name of the subject should match |
| 196 // the host name of the web server. | 208 // the host name of the web server. |
| 197 const CertPrincipal& subject() const { return subject_; } | 209 const CertPrincipal& subject() const { return subject_; } |
| 198 | 210 |
| 199 // The issuer of the certificate. | 211 // The issuer of the certificate. |
| 200 const CertPrincipal& issuer() const { return issuer_; } | 212 const CertPrincipal& issuer() const { return issuer_; } |
| 201 | 213 |
| 214 #if defined(USE_NSS) | |
| 215 // Set/get the label of this certificate (the equivalent of NSS's | |
|
wtc
2011/11/29 23:13:57
Nit: Set/get => Sets/gets
NSS's => PKCS #11's
Greg Spencer (Chromium)
2011/12/02 18:50:07
Done.
| |
| 216 // CKA_LABEL attribute, which is the nickname or friendly name of | |
| 217 // the certificate). | |
| 218 bool SetLabel(const std::string& label); | |
| 219 std::string GetLabel(); | |
|
wtc
2011/11/29 23:13:57
I believe GetLabel() can be 'const':
std::string
Greg Spencer (Chromium)
2011/12/02 18:50:07
Yes, it should be. But I've moved these functions
| |
| 220 | |
| 221 // Gets the type of certificate this is, based on the certificate's | |
| 222 // properties. | |
| 223 CertType GetCertificateType() const; | |
|
wtc
2011/11/29 23:13:57
Nit: GetCertificateType => GetCertType
Greg Spencer (Chromium)
2011/12/02 18:50:07
Done.
| |
| 224 #endif // defined(USE_NSS) | |
| 225 | |
| 202 // Time period during which the certificate is valid. More precisely, this | 226 // Time period during which the certificate is valid. More precisely, this |
| 203 // certificate is invalid before the |valid_start| date and invalid after | 227 // certificate is invalid before the |valid_start| date and invalid after |
| 204 // the |valid_expiry| date. | 228 // the |valid_expiry| date. |
| 205 // If we were unable to parse either date from the certificate (or if the cert | 229 // If we were unable to parse either date from the certificate (or if the cert |
| 206 // lacks either date), the date will be null (i.e., is_null() will be true). | 230 // lacks either date), the date will be null (i.e., is_null() will be true). |
| 207 const base::Time& valid_start() const { return valid_start_; } | 231 const base::Time& valid_start() const { return valid_start_; } |
| 208 const base::Time& valid_expiry() const { return valid_expiry_; } | 232 const base::Time& valid_expiry() const { return valid_expiry_; } |
| 209 | 233 |
| 210 // The fingerprint of this certificate. | 234 // The fingerprint of this certificate. |
| 211 const SHA1Fingerprint& fingerprint() const { return fingerprint_; } | 235 const SHA1Fingerprint& fingerprint() const { return fingerprint_; } |
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 407 // Returns the OSCertHandle of this object. Because of caching, this may | 431 // Returns the OSCertHandle of this object. Because of caching, this may |
| 408 // differ from the OSCertHandle originally supplied during initialization. | 432 // differ from the OSCertHandle originally supplied during initialization. |
| 409 // Note: On Windows, CryptoAPI may return unexpected results if this handle | 433 // Note: On Windows, CryptoAPI may return unexpected results if this handle |
| 410 // is used across multiple threads. For more details, see | 434 // is used across multiple threads. For more details, see |
| 411 // CreateOSCertChainForCert(). | 435 // CreateOSCertChainForCert(). |
| 412 OSCertHandle os_cert_handle() const { return cert_handle_; } | 436 OSCertHandle os_cert_handle() const { return cert_handle_; } |
| 413 | 437 |
| 414 // Returns true if two OSCertHandles refer to identical certificates. | 438 // Returns true if two OSCertHandles refer to identical certificates. |
| 415 static bool IsSameOSCert(OSCertHandle a, OSCertHandle b); | 439 static bool IsSameOSCert(OSCertHandle a, OSCertHandle b); |
| 416 | 440 |
| 417 // Creates an OS certificate handle from the BER-encoded representation. | 441 // Creates an OS certificate handle from the DER-encoded representation. |
| 418 // Returns NULL on failure. | 442 // Returns NULL on failure. |
| 419 static OSCertHandle CreateOSCertHandleFromBytes(const char* data, | 443 static OSCertHandle CreateOSCertHandleFromBytes(const char* data, |
| 420 int length); | 444 int length); |
| 421 | 445 |
| 446 #if defined(USE_NSS) | |
| 447 // Creates an OS certificate handle from the DER-encoded representation, | |
| 448 // with the given nickname. NULL nickname will do the same thing as | |
| 449 // CreateOSCertHandleFromBytes. Returns NULL on failure. | |
| 450 static OSCertHandle CreateOSCertHandleFromBytesWithNickname( | |
| 451 const char* data, int length, const char* nickname); | |
|
wtc
2011/11/29 23:13:57
Nit: List one parameter on each line. See
http://
Greg Spencer (Chromium)
2011/12/02 18:50:07
OK, done. Thanks, I had forgotten that rule, and
| |
| 452 #endif | |
| 453 | |
| 422 // Creates all possible OS certificate handles from |data| encoded in a | 454 // Creates all possible OS certificate handles from |data| encoded in a |
| 423 // specific |format|. Returns an empty collection on failure. | 455 // specific |format|. Returns an empty collection on failure. |
| 424 static OSCertHandles CreateOSCertHandlesFromBytes( | 456 static OSCertHandles CreateOSCertHandlesFromBytes( |
| 425 const char* data, int length, Format format); | 457 const char* data, int length, Format format); |
| 426 | 458 |
| 427 // Duplicates (or adds a reference to) an OS certificate handle. | 459 // Duplicates (or adds a reference to) an OS certificate handle. |
| 428 static OSCertHandle DupOSCertHandle(OSCertHandle cert_handle); | 460 static OSCertHandle DupOSCertHandle(OSCertHandle cert_handle); |
| 429 | 461 |
| 430 // Frees (or releases a reference to) an OS certificate handle. | 462 // Frees (or releases a reference to) an OS certificate handle. |
| 431 static void FreeOSCertHandle(OSCertHandle cert_handle); | 463 static void FreeOSCertHandle(OSCertHandle cert_handle); |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 559 // (Marked mutable because it's used in a const method.) | 591 // (Marked mutable because it's used in a const method.) |
| 560 mutable base::Lock verification_lock_; | 592 mutable base::Lock verification_lock_; |
| 561 #endif | 593 #endif |
| 562 | 594 |
| 563 DISALLOW_COPY_AND_ASSIGN(X509Certificate); | 595 DISALLOW_COPY_AND_ASSIGN(X509Certificate); |
| 564 }; | 596 }; |
| 565 | 597 |
| 566 } // namespace net | 598 } // namespace net |
| 567 | 599 |
| 568 #endif // NET_BASE_X509_CERTIFICATE_H_ | 600 #endif // NET_BASE_X509_CERTIFICATE_H_ |
| OLD | NEW |