Chromium Code Reviews| Index: net/base/x509_certificate_openssl.cc |
| =================================================================== |
| --- net/base/x509_certificate_openssl.cc (revision 114041) |
| +++ net/base/x509_certificate_openssl.cc (working copy) |
| @@ -662,6 +662,36 @@ |
| der_cache.data_length); |
| } |
| +// static |
| +void X509Certificate::GetPublicKeyInfo(OSCertHandle cert_handle, |
| + size_t* size_bits, |
| + PublicKeyType* type) { |
| + EVP_PKEY* key = X509_get_pubkey(cert_handle); |
| + CHECK(key); |
| + |
| + switch (key->type) { |
| + case EVP_PKEY_RSA: |
| + *type = kPublicKeyTypeRSA; |
| + *size_bits = EVP_PKEY_size(key) * 8; |
| + break; |
| + case EVP_PKEY_DSA: |
| + *type = kPublicKeyTypeDSA; |
| + *size_bits = EVP_PKEY_size(key) * 8; |
| + break; |
| + case EVP_PKEY_EC: |
| + *type = kPublicKeyTypeECDSA; |
| + *size_bits = EVP_PKEY_size(key); |
|
wtc
2011/12/13 21:56:18
It seems strange that EVP_PKEY_size returns a key
|
| + break; |
| + case EVP_PKEY_DH: |
| + *type = kPublicKeyTypeDH; |
| + *size_bits = EVP_PKEY_size(key) * 8; |
| + break; |
| + default: |
| + *type = kPublicKeyTypeUnknown; |
| + *size_bits = 0; |
| + } |
| +} |
| + |
| #if defined(OS_ANDROID) |
| void X509Certificate::GetChainDEREncodedBytes( |
| std::vector<std::string>* chain_bytes) const { |