Index: net/cert/cert_verify_proc_mac.cc |
diff --git a/net/cert/cert_verify_proc_mac.cc b/net/cert/cert_verify_proc_mac.cc |
index 08f1b887f59dbcad6b8a2c2d304bce7117ed5e53..2290db04b69ecb48c8e983293daba26a76522552 100644 |
--- a/net/cert/cert_verify_proc_mac.cc |
+++ b/net/cert/cert_verify_proc_mac.cc |
@@ -215,47 +215,19 @@ void GetCertChainInfo(CFArrayRef cert_chain, |
continue; |
} |
- x509_util::CSSMCachedCertificate cached_cert; |
- OSStatus status = cached_cert.Init(chain_cert); |
- if (status) |
- continue; |
- x509_util::CSSMFieldValue signature_field; |
- status = cached_cert.GetField(&CSSMOID_X509V1SignatureAlgorithm, |
- &signature_field); |
- if (status || !signature_field.field()) |
- continue; |
- // Match the behaviour of OS X system tools and defensively check that |
- // sizes are appropriate. This would indicate a critical failure of the |
- // OS X certificate library, but based on history, it is best to play it |
- // safe. |
- const CSSM_X509_ALGORITHM_IDENTIFIER* sig_algorithm = |
- signature_field.GetAs<CSSM_X509_ALGORITHM_IDENTIFIER>(); |
- if (!sig_algorithm) |
- continue; |
- |
- const CSSM_OID* alg_oid = &sig_algorithm->algorithm; |
- if (CSSMOIDEqual(alg_oid, &CSSMOID_MD2WithRSA)) { |
- verify_result->has_md2 = true; |
- if (i == 0) |
- *leaf_is_weak = true; |
- } else if (CSSMOIDEqual(alg_oid, &CSSMOID_MD4WithRSA)) { |
- verify_result->has_md4 = true; |
- if (i == 0) |
- *leaf_is_weak = true; |
- } else if (CSSMOIDEqual(alg_oid, &CSSMOID_MD5WithRSA)) { |
- verify_result->has_md5 = true; |
- if (i == 0) |
- *leaf_is_weak = true; |
- } else if (CSSMOIDEqual(alg_oid, &CSSMOID_SHA1WithRSA) || |
- CSSMOIDEqual(alg_oid, &CSSMOID_SHA1WithRSA_OIW) || |
- CSSMOIDEqual(alg_oid, &CSSMOID_SHA1WithDSA) || |
- CSSMOIDEqual(alg_oid, &CSSMOID_SHA1WithDSA_CMS) || |
- CSSMOIDEqual(alg_oid, &CSSMOID_SHA1WithDSA_JDK) || |
- CSSMOIDEqual(alg_oid, &CSSMOID_ECDSA_WithSHA1)) { |
- verify_result->has_sha1 = true; |
- if (i == 0) { |
- verify_result->has_sha1_leaf = true; |
- *leaf_is_weak = true; |
+ bool is_leaf = i == 0; |
+ X509Certificate::SignatureHashAlgorithm hash_algorithm = |
+ FillCertVerifyResultWeakSignature(chain_cert, is_leaf, verify_result); |
+ if (is_leaf) { |
+ switch (hash_algorithm) { |
+ case X509Certificate::kSignatureHashAlgorithmMd2: |
+ case X509Certificate::kSignatureHashAlgorithmMd4: |
+ case X509Certificate::kSignatureHashAlgorithmMd5: |
+ case X509Certificate::kSignatureHashAlgorithmSha1: |
+ *leaf_is_weak = true; |
+ break; |
+ case X509Certificate::kSignatureHashAlgorithmOther: |
+ break; |
} |
} |
} |