Index: base/crypto/rsa_private_key_nss.cc |
diff --git a/base/crypto/rsa_private_key_nss.cc b/base/crypto/rsa_private_key_nss.cc |
index 77865217ba9256a7125fa8dba0adac922ccad6b2..3084636f382df3ef1a38fea9efd6c391cac9b36a 100644 |
--- a/base/crypto/rsa_private_key_nss.cc |
+++ b/base/crypto/rsa_private_key_nss.cc |
@@ -41,28 +41,11 @@ static bool ReadAttribute(SECKEYPrivateKey* key, |
namespace base { |
-// static |
-RSAPrivateKey* RSAPrivateKey::CreateWithParams(uint16 num_bits, |
- bool permanent, |
- bool sensitive) { |
- base::EnsureNSSInit(); |
- |
- scoped_ptr<RSAPrivateKey> result(new RSAPrivateKey); |
- |
- PK11SlotInfo *slot = GetDefaultNSSKeySlot(); |
- if (!slot) |
- return NULL; |
- |
- PK11RSAGenParams param; |
- param.keySizeInBits = num_bits; |
- param.pe = 65537L; |
- result->key_ = PK11_GenerateKeyPair(slot, CKM_RSA_PKCS_KEY_PAIR_GEN, ¶m, |
- &result->public_key_, permanent, sensitive, NULL); |
- PK11_FreeSlot(slot); |
- if (!result->key_) |
- return NULL; |
- |
- return result.release(); |
+RSAPrivateKey::~RSAPrivateKey() { |
+ if (key_) |
+ SECKEY_DestroyPrivateKey(key_); |
+ if (public_key_) |
+ SECKEY_DestroyPublicKey(public_key_); |
} |
// static |
@@ -80,41 +63,6 @@ RSAPrivateKey* RSAPrivateKey::CreateSensitive(uint16 num_bits) { |
} |
// static |
-RSAPrivateKey* RSAPrivateKey::CreateFromPrivateKeyInfoWithParams( |
- const std::vector<uint8>& input, bool permanent, bool sensitive) { |
- // This method currently leaks some memory. |
- // See http://crbug.com/34742. |
- ANNOTATE_SCOPED_MEMORY_LEAK; |
- base::EnsureNSSInit(); |
- |
- scoped_ptr<RSAPrivateKey> result(new RSAPrivateKey); |
- |
- PK11SlotInfo *slot = GetDefaultNSSKeySlot(); |
- if (!slot) |
- return NULL; |
- |
- SECItem der_private_key_info; |
- der_private_key_info.data = const_cast<unsigned char*>(&input.front()); |
- der_private_key_info.len = input.size(); |
- SECStatus rv = PK11_ImportDERPrivateKeyInfoAndReturnKey(slot, |
- &der_private_key_info, NULL, NULL, permanent, sensitive, |
- KU_DIGITAL_SIGNATURE, &result->key_, NULL); |
- PK11_FreeSlot(slot); |
- if (rv != SECSuccess) { |
- NOTREACHED(); |
- return NULL; |
- } |
- |
- result->public_key_ = SECKEY_ConvertToPublicKey(result->key_); |
- if (!result->public_key_) { |
- NOTREACHED(); |
- return NULL; |
- } |
- |
- return result.release(); |
-} |
- |
-// static |
RSAPrivateKey* RSAPrivateKey::CreateFromPrivateKeyInfo( |
const std::vector<uint8>& input) { |
return CreateFromPrivateKeyInfoWithParams(input, |
@@ -193,16 +141,6 @@ RSAPrivateKey* RSAPrivateKey::FindFromPublicKeyInfo( |
return result.release(); |
} |
-RSAPrivateKey::RSAPrivateKey() : key_(NULL), public_key_(NULL) { |
- EnsureNSSInit(); |
-} |
- |
-RSAPrivateKey::~RSAPrivateKey() { |
- if (key_) |
- SECKEY_DestroyPrivateKey(key_); |
- if (public_key_) |
- SECKEY_DestroyPublicKey(public_key_); |
-} |
bool RSAPrivateKey::ExportPrivateKey(std::vector<uint8>* output) { |
PrivateKeyInfoCodec private_key_info(true); |
@@ -240,4 +178,67 @@ bool RSAPrivateKey::ExportPublicKey(std::vector<uint8>* output) { |
return true; |
} |
+RSAPrivateKey::RSAPrivateKey() : key_(NULL), public_key_(NULL) { |
+ EnsureNSSInit(); |
+} |
+ |
+// static |
+RSAPrivateKey* RSAPrivateKey::CreateWithParams(uint16 num_bits, |
+ bool permanent, |
+ bool sensitive) { |
+ base::EnsureNSSInit(); |
+ |
+ scoped_ptr<RSAPrivateKey> result(new RSAPrivateKey); |
+ |
+ PK11SlotInfo *slot = GetDefaultNSSKeySlot(); |
+ if (!slot) |
+ return NULL; |
+ |
+ PK11RSAGenParams param; |
+ param.keySizeInBits = num_bits; |
+ param.pe = 65537L; |
+ result->key_ = PK11_GenerateKeyPair(slot, CKM_RSA_PKCS_KEY_PAIR_GEN, ¶m, |
+ &result->public_key_, permanent, sensitive, NULL); |
+ PK11_FreeSlot(slot); |
+ if (!result->key_) |
+ return NULL; |
+ |
+ return result.release(); |
+} |
+ |
+// static |
+RSAPrivateKey* RSAPrivateKey::CreateFromPrivateKeyInfoWithParams( |
+ const std::vector<uint8>& input, bool permanent, bool sensitive) { |
+ // This method currently leaks some memory. |
+ // See http://crbug.com/34742. |
+ ANNOTATE_SCOPED_MEMORY_LEAK; |
+ base::EnsureNSSInit(); |
+ |
+ scoped_ptr<RSAPrivateKey> result(new RSAPrivateKey); |
+ |
+ PK11SlotInfo *slot = GetDefaultNSSKeySlot(); |
+ if (!slot) |
+ return NULL; |
+ |
+ SECItem der_private_key_info; |
+ der_private_key_info.data = const_cast<unsigned char*>(&input.front()); |
+ der_private_key_info.len = input.size(); |
+ SECStatus rv = PK11_ImportDERPrivateKeyInfoAndReturnKey(slot, |
+ &der_private_key_info, NULL, NULL, permanent, sensitive, |
+ KU_DIGITAL_SIGNATURE, &result->key_, NULL); |
+ PK11_FreeSlot(slot); |
+ if (rv != SECSuccess) { |
+ NOTREACHED(); |
+ return NULL; |
+ } |
+ |
+ result->public_key_ = SECKEY_ConvertToPublicKey(result->key_); |
+ if (!result->public_key_) { |
+ NOTREACHED(); |
+ return NULL; |
+ } |
+ |
+ return result.release(); |
+} |
+ |
} // namespace base |