summaryrefslogtreecommitdiffstats
path: root/net/third_party
diff options
context:
space:
mode:
authordavidben@chromium.org <davidben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-25 22:44:48 +0000
committerdavidben@chromium.org <davidben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-25 22:44:48 +0000
commit6913847c616758791214954dc3adc1492bdc688d (patch)
tree55bd2e7d5ab09a1f5c7d37e270c1c7bcb3392013 /net/third_party
parent8c94d63f7a6e071bdc90648d614f1825cea195d0 (diff)
downloadchromium_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.cpp22
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);