diff options
author | davidben@chromium.org <davidben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-25 22:44:48 +0000 |
---|---|---|
committer | davidben@chromium.org <davidben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-25 22:44:48 +0000 |
commit | 6913847c616758791214954dc3adc1492bdc688d (patch) | |
tree | 55bd2e7d5ab09a1f5c7d37e270c1c7bcb3392013 /net/third_party | |
parent | 8c94d63f7a6e071bdc90648d614f1825cea195d0 (diff) | |
download | chromium_src-6913847c616758791214954dc3adc1492bdc688d.zip chromium_src-6913847c616758791214954dc3adc1492bdc688d.tar.gz chromium_src-6913847c616758791214954dc3adc1492bdc688d.tar.bz2 |
Add a unit test to check KeygenHandler's thread-safety
We'll want some semblance of thread-safety when we make keygen asynchronous.
R=wtc,mattm
BUG=148
TEST=unit test
Review URL: http://codereview.chromium.org/2838010
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50903 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/third_party')
-rw-r--r-- | net/third_party/mozilla_security_manager/nsKeygenHandler.cpp | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/net/third_party/mozilla_security_manager/nsKeygenHandler.cpp b/net/third_party/mozilla_security_manager/nsKeygenHandler.cpp index 8be54a4..ffef66d 100644 --- a/net/third_party/mozilla_security_manager/nsKeygenHandler.cpp +++ b/net/third_party/mozilla_security_manager/nsKeygenHandler.cpp @@ -41,6 +41,7 @@ #include "net/third_party/mozilla_security_manager/nsKeygenHandler.h" #include <pk11pub.h> +#include <prerror.h> // PR_GetError() #include <secmod.h> #include <secder.h> // DER_Encode() #include <cryptohi.h> // SEC_DerSignData() @@ -152,13 +153,16 @@ std::string GenKeyAndSignChallenge(int key_size_in_bits, } LOG(INFO) << "Creating key pair..."; - privateKey = PK11_GenerateKeyPair(slot, - keyGenMechanism, - keyGenParams, - &publicKey, - PR_TRUE, // isPermanent? - PR_TRUE, // isSensitive? - NULL); + { + base::AutoNSSWriteLock lock; + privateKey = PK11_GenerateKeyPair(slot, + keyGenMechanism, + keyGenParams, + &publicKey, + PR_TRUE, // isPermanent? + PR_TRUE, // isSensitive? + NULL); + } LOG(INFO) << "done."; if (!privateKey) { @@ -227,7 +231,7 @@ std::string GenKeyAndSignChallenge(int key_size_in_bits, failure: if (!isSuccess) { - LOG(ERROR) << "SSL Keygen failed!"; + LOG(ERROR) << "SSL Keygen failed! (NSS error code " << PR_GetError() << ")"; } else { LOG(INFO) << "SSL Keygen succeeded!"; } @@ -237,6 +241,7 @@ std::string GenKeyAndSignChallenge(int key_size_in_bits, // On successful keygen we need to keep the private key, of course, // or we won't be able to use the client certificate. if (!isSuccess || !stores_key) { + base::AutoNSSWriteLock lock; PK11_DestroyTokenObject(privateKey->pkcs11Slot, privateKey->pkcs11ID); } SECKEY_DestroyPrivateKey(privateKey); @@ -244,6 +249,7 @@ std::string GenKeyAndSignChallenge(int key_size_in_bits, if (publicKey) { if (!isSuccess || !stores_key) { + base::AutoNSSWriteLock lock; PK11_DestroyTokenObject(publicKey->pkcs11Slot, publicKey->pkcs11ID); } SECKEY_DestroyPublicKey(publicKey); |