Index: net/base/x509_certificate_nss.cc |
=================================================================== |
--- net/base/x509_certificate_nss.cc (revision 114571) |
+++ net/base/x509_certificate_nss.cc (working copy) |
@@ -1142,4 +1142,38 @@ |
cert_handle->derCert.len); |
} |
+// static |
+void X509Certificate::GetPublicKeyInfo(OSCertHandle cert_handle, |
+ size_t* size_bits, |
+ PublicKeyType* type) { |
+ // Since we might fail, set the output parameters to default values first. |
+ *type = kPublicKeyTypeUnknown; |
+ *size_bits = 0; |
+ |
+ SECKEYPublicKey* key = CERT_ExtractPublicKey(cert_handle); |
+ if (!key) |
+ return; |
+ |
+ *size_bits = SECKEY_PublicKeyStrengthInBits(key); |
+ |
+ switch (key->keyType) { |
+ case rsaKey: |
+ *type = kPublicKeyTypeRSA; |
+ break; |
+ case dsaKey: |
+ *type = kPublicKeyTypeDSA; |
+ break; |
+ case dhKey: |
+ *type = kPublicKeyTypeDH; |
+ break; |
+ case ecKey: |
+ *type = kPublicKeyTypeECDSA; |
+ break; |
+ default: |
+ *type = kPublicKeyTypeUnknown; |
+ *size_bits = 0; |
+ break; |
+ } |
Timur Iskhodzhanov
2011/12/16 08:35:39
forgotten to SECKEY_DestroyPublicKey(key) ?
|
+} |
+ |
} // namespace net |