Chromium Code Reviews| Index: chrome/common/net/x509_certificate_model_openssl.cc |
| diff --git a/chrome/common/net/x509_certificate_model_openssl.cc b/chrome/common/net/x509_certificate_model_openssl.cc |
| index 6dbd4cd4da98ae3a89e6823b2fda0f88c5625644..8a2ae24b0e8b75472da8602111d4cd014f49698f 100644 |
| --- a/chrome/common/net/x509_certificate_model_openssl.cc |
| +++ b/chrome/common/net/x509_certificate_model_openssl.cc |
| @@ -45,6 +45,13 @@ std::string ProcessRawAsn1Type(ASN1_TYPE* data) { |
| return ProcessRawBytes(buf.get(), len); |
| } |
| +std::string ProcessRawBignum(BIGNUM* n) { |
| + int len = BN_num_bytes(n); |
| + scoped_ptr<unsigned char[]> buf(new unsigned char[len]); |
| + BN_bn2bin(n, buf.get()); |
|
Ryan Sleevi
2014/07/07 19:53:42
nit: A bit of a code-smell to ignore a result. Tho
mattm
2014/07/07 21:32:55
Done.
|
| + return ProcessRawBytes(buf.get(), len); |
| +} |
| + |
| std::string Asn1StringToUTF8(ASN1_STRING* asn1_string) { |
| std::string rv; |
| unsigned char* buf = NULL; |
| @@ -1184,8 +1191,29 @@ std::string ProcessSecAlgorithmSignatureWrap( |
| std::string ProcessSubjectPublicKeyInfo( |
| net::X509Certificate::OSCertHandle cert_handle) { |
| - // TODO(bulach): implement me. |
| - return ""; |
| + std::string rv; |
| + crypto::ScopedOpenSSL<EVP_PKEY, EVP_PKEY_free> public_key( |
| + X509_get_pubkey(cert_handle)); |
| + if (!public_key.get()) |
| + return rv; |
| + switch (EVP_PKEY_type(public_key.get()->type)) { |
| + case EVP_PKEY_RSA: { |
| + crypto::ScopedOpenSSL<RSA, RSA_free> rsa_key( |
| + EVP_PKEY_get1_RSA(public_key.get())); |
| + if (!rsa_key.get()) |
| + return rv; |
| + rv = l10n_util::GetStringFUTF8( |
| + IDS_CERT_RSA_PUBLIC_KEY_DUMP_FORMAT, |
| + base::UintToString16(BN_num_bits(rsa_key.get()->n)), |
| + base::UTF8ToUTF16(ProcessRawBignum(rsa_key.get()->n)), |
| + base::UintToString16(BN_num_bits(rsa_key.get()->e)), |
| + base::UTF8ToUTF16(ProcessRawBignum(rsa_key.get()->e))); |
| + return rv; |
| + } |
| + default: |
| + rv = ProcessRawAsn1String(X509_get_X509_PUBKEY(cert_handle)->public_key); |
| + return rv; |
| + } |
| } |
| std::string ProcessRawBitsSignatureWrap( |