Index: net/base/x509_certificate_mac.cc |
diff --git a/net/base/x509_certificate_mac.cc b/net/base/x509_certificate_mac.cc |
index 333cd821ef9d5158ad94b1c7e4ff78bbd13b1e84..a3734a2a6ee1e6a96c61b9848f3a25cb3a5b3b63 100644 |
--- a/net/base/x509_certificate_mac.cc |
+++ b/net/base/x509_certificate_mac.cc |
@@ -258,6 +258,17 @@ class CSSMCachedCertificate { |
CSSM_HANDLE cached_cert_handle_; |
}; |
+void GetDistinguishedName(const CSSMCachedCertificate& cached_cert, |
wtc
2011/12/21 01:10:08
Nit: GetDistinguishedName => GetCertDistinguishedN
|
+ const CSSM_OID* oid, |
+ CertPrincipal* result) { |
+ CSSMFieldValue distinguished_name; |
+ OSStatus status = cached_cert.GetField(oid, &distinguished_name); |
+ if (status || !distinguished_name.field()) |
wtc
2011/12/21 01:10:08
Can distinguished_name.field() be NULL when cached
Ryan Sleevi
2011/12/21 02:14:56
Judging by the Apple code, it is seen as a possibi
|
+ return; |
+ result->ParseDistinguishedName(distinguished_name.field()->Data, |
+ distinguished_name.field()->Length); |
+} |
+ |
void GetCertDateForOID(const CSSMCachedCertificate& cached_cert, |
const CSSM_OID* oid, |
Time* result) { |
@@ -677,17 +688,12 @@ void AppendPublicKeyHashes(CFArrayRef chain, |
} // namespace |
void X509Certificate::Initialize() { |
- const CSSM_X509_NAME* name; |
- OSStatus status = SecCertificateGetSubject(cert_handle_, &name); |
- if (!status) |
- subject_.Parse(name); |
- |
- status = SecCertificateGetIssuer(cert_handle_, &name); |
- if (!status) |
- issuer_.Parse(name); |
- |
CSSMCachedCertificate cached_cert; |
if (cached_cert.Init(cert_handle_) == CSSM_OK) { |
+ GetDistinguishedName(cached_cert, &CSSMOID_X509V1SubjectNameStd, |
+ &subject_); |
+ GetDistinguishedName(cached_cert, &CSSMOID_X509V1IssuerNameStd, |
+ &issuer_); |
GetCertDateForOID(cached_cert, &CSSMOID_X509V1ValidityNotBefore, |
&valid_start_); |
GetCertDateForOID(cached_cert, &CSSMOID_X509V1ValidityNotAfter, |