| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #include "net/cert/cert_verify_proc_openssl.h" | 5 #include "net/cert/cert_verify_proc_openssl.h" |
| 6 | 6 |
| 7 #include <openssl/x509v3.h> | 7 #include <openssl/x509v3.h> |
| 8 | 8 |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 94 // param directly. | 94 // param directly. |
| 95 void sk_X509_free_fn(STACK_OF(X509)* st) { | 95 void sk_X509_free_fn(STACK_OF(X509)* st) { |
| 96 sk_X509_free(st); | 96 sk_X509_free(st); |
| 97 } | 97 } |
| 98 | 98 |
| 99 void GetCertChainInfo(X509_STORE_CTX* store_ctx, | 99 void GetCertChainInfo(X509_STORE_CTX* store_ctx, |
| 100 CertVerifyResult* verify_result) { | 100 CertVerifyResult* verify_result) { |
| 101 STACK_OF(X509)* chain = X509_STORE_CTX_get_chain(store_ctx); | 101 STACK_OF(X509)* chain = X509_STORE_CTX_get_chain(store_ctx); |
| 102 X509* verified_cert = NULL; | 102 X509* verified_cert = NULL; |
| 103 std::vector<X509*> verified_chain; | 103 std::vector<X509*> verified_chain; |
| 104 for (int i = 0; i < sk_X509_num(chain); ++i) { | 104 for (size_t i = 0; i < sk_X509_num(chain); ++i) { |
| 105 X509* cert = sk_X509_value(chain, i); | 105 X509* cert = sk_X509_value(chain, i); |
| 106 if (i == 0) { | 106 if (i == 0) { |
| 107 verified_cert = cert; | 107 verified_cert = cert; |
| 108 } else { | 108 } else { |
| 109 verified_chain.push_back(cert); | 109 verified_chain.push_back(cert); |
| 110 } | 110 } |
| 111 | 111 |
| 112 // Only check the algorithm status for certificates that are not in the | 112 // Only check the algorithm status for certificates that are not in the |
| 113 // trust store. | 113 // trust store. |
| 114 if (i < store_ctx->last_untrusted) { | 114 if (i < static_cast<size_t>(store_ctx->last_untrusted)) { |
| 115 int sig_alg = OBJ_obj2nid(cert->sig_alg->algorithm); | 115 int sig_alg = OBJ_obj2nid(cert->sig_alg->algorithm); |
| 116 if (sig_alg == NID_md2WithRSAEncryption) { | 116 if (sig_alg == NID_md2WithRSAEncryption) { |
| 117 verify_result->has_md2 = true; | 117 verify_result->has_md2 = true; |
| 118 } else if (sig_alg == NID_md4WithRSAEncryption) { | 118 } else if (sig_alg == NID_md4WithRSAEncryption) { |
| 119 verify_result->has_md4 = true; | 119 verify_result->has_md4 = true; |
| 120 } else if (sig_alg == NID_md5WithRSAEncryption) { | 120 } else if (sig_alg == NID_md5WithRSAEncryption) { |
| 121 verify_result->has_md5 = true; | 121 verify_result->has_md5 = true; |
| 122 } | 122 } |
| 123 } | 123 } |
| 124 } | 124 } |
| (...skipping 19 matching lines...) Expand all Loading... |
| 144 TestRootCerts* root_certs = TestRootCerts::GetInstance(); | 144 TestRootCerts* root_certs = TestRootCerts::GetInstance(); |
| 145 if (root_certs->Contains(root)) | 145 if (root_certs->Contains(root)) |
| 146 verify_result->is_issued_by_known_root = false; | 146 verify_result->is_issued_by_known_root = false; |
| 147 } | 147 } |
| 148 } | 148 } |
| 149 } | 149 } |
| 150 | 150 |
| 151 void AppendPublicKeyHashes(X509_STORE_CTX* store_ctx, | 151 void AppendPublicKeyHashes(X509_STORE_CTX* store_ctx, |
| 152 HashValueVector* hashes) { | 152 HashValueVector* hashes) { |
| 153 STACK_OF(X509)* chain = X509_STORE_CTX_get_chain(store_ctx); | 153 STACK_OF(X509)* chain = X509_STORE_CTX_get_chain(store_ctx); |
| 154 for (int i = 0; i < sk_X509_num(chain); ++i) { | 154 for (size_t i = 0; i < sk_X509_num(chain); ++i) { |
| 155 X509* cert = sk_X509_value(chain, i); | 155 X509* cert = sk_X509_value(chain, i); |
| 156 | 156 |
| 157 std::string der_data; | 157 std::string der_data; |
| 158 if (!X509Certificate::GetDEREncoded(cert, &der_data)) | 158 if (!X509Certificate::GetDEREncoded(cert, &der_data)) |
| 159 continue; | 159 continue; |
| 160 | 160 |
| 161 base::StringPiece der_bytes(der_data); | 161 base::StringPiece der_bytes(der_data); |
| 162 base::StringPiece spki_bytes; | 162 base::StringPiece spki_bytes; |
| 163 if (!asn1::ExtractSPKIFromDERCert(der_bytes, &spki_bytes)) | 163 if (!asn1::ExtractSPKIFromDERCert(der_bytes, &spki_bytes)) |
| 164 continue; | 164 continue; |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 232 | 232 |
| 233 GetCertChainInfo(ctx.get(), verify_result); | 233 GetCertChainInfo(ctx.get(), verify_result); |
| 234 AppendPublicKeyHashes(ctx.get(), &verify_result->public_key_hashes); | 234 AppendPublicKeyHashes(ctx.get(), &verify_result->public_key_hashes); |
| 235 if (IsCertStatusError(verify_result->cert_status)) | 235 if (IsCertStatusError(verify_result->cert_status)) |
| 236 return MapCertStatusToNetError(verify_result->cert_status); | 236 return MapCertStatusToNetError(verify_result->cert_status); |
| 237 | 237 |
| 238 return OK; | 238 return OK; |
| 239 } | 239 } |
| 240 | 240 |
| 241 } // namespace net | 241 } // namespace net |
| OLD | NEW |