Index: content/child/webcrypto/nss/rsa_key_nss.cc |
diff --git a/content/child/webcrypto/nss/rsa_key_nss.cc b/content/child/webcrypto/nss/rsa_key_nss.cc |
index 99c32bc3d336f681c2f98a225a022b25787729a3..5f11801b41c2667bb43c1d11ad93a07a33fcaf36 100644 |
--- a/content/child/webcrypto/nss/rsa_key_nss.cc |
+++ b/content/child/webcrypto/nss/rsa_key_nss.cc |
@@ -21,39 +21,6 @@ namespace webcrypto { |
namespace { |
-bool CreatePublicKeyAlgorithm(const blink::WebCryptoAlgorithm& algorithm, |
- SECKEYPublicKey* key, |
- blink::WebCryptoKeyAlgorithm* key_algorithm) { |
- // TODO(eroman): What about other key types rsaPss, rsaOaep. |
- if (!key || key->keyType != rsaKey) |
- return false; |
- |
- unsigned int modulus_length_bits = SECKEY_PublicKeyStrength(key) * 8; |
- CryptoData public_exponent(key->u.rsa.publicExponent.data, |
- key->u.rsa.publicExponent.len); |
- |
- switch (algorithm.paramsType()) { |
- case blink::WebCryptoAlgorithmParamsTypeRsaHashedImportParams: |
- case blink::WebCryptoAlgorithmParamsTypeRsaHashedKeyGenParams: |
- *key_algorithm = blink::WebCryptoKeyAlgorithm::createRsaHashed( |
- algorithm.id(), |
- modulus_length_bits, |
- public_exponent.bytes(), |
- public_exponent.byte_length(), |
- GetInnerHashAlgorithm(algorithm).id()); |
- return true; |
- default: |
- return false; |
- } |
-} |
- |
-bool CreatePrivateKeyAlgorithm(const blink::WebCryptoAlgorithm& algorithm, |
- SECKEYPrivateKey* key, |
- blink::WebCryptoKeyAlgorithm* key_algorithm) { |
- crypto::ScopedSECKEYPublicKey public_key(SECKEY_ConvertToPublicKey(key)); |
- return CreatePublicKeyAlgorithm(algorithm, public_key.get(), key_algorithm); |
-} |
- |
#if defined(USE_NSS) && !defined(OS_CHROMEOS) |
Status ErrorRsaPrivateKeyImportNotSupported() { |
return Status::ErrorUnsupported( |
@@ -95,7 +62,8 @@ Status NssSupportsRsaPrivateKeyImport() { |
#endif |
bool CreateRsaHashedPublicKeyAlgorithm( |
- const blink::WebCryptoAlgorithm& algorithm, |
+ blink::WebCryptoAlgorithmId rsa_algorithm, |
+ blink::WebCryptoAlgorithmId hash_algorithm, |
SECKEYPublicKey* key, |
blink::WebCryptoKeyAlgorithm* key_algorithm) { |
// TODO(eroman): What about other key types rsaPss, rsaOaep. |
@@ -106,30 +74,25 @@ bool CreateRsaHashedPublicKeyAlgorithm( |
CryptoData public_exponent(key->u.rsa.publicExponent.data, |
key->u.rsa.publicExponent.len); |
- switch (algorithm.paramsType()) { |
- case blink::WebCryptoAlgorithmParamsTypeRsaHashedImportParams: |
- case blink::WebCryptoAlgorithmParamsTypeRsaHashedKeyGenParams: |
- *key_algorithm = blink::WebCryptoKeyAlgorithm::createRsaHashed( |
- algorithm.id(), |
- modulus_length_bits, |
- public_exponent.bytes(), |
- public_exponent.byte_length(), |
- GetInnerHashAlgorithm(algorithm).id()); |
- return true; |
- default: |
- return false; |
- } |
+ *key_algorithm = blink::WebCryptoKeyAlgorithm::createRsaHashed( |
+ rsa_algorithm, |
+ modulus_length_bits, |
+ public_exponent.bytes(), |
+ public_exponent.byte_length(), |
+ hash_algorithm); |
+ return true; |
} |
bool CreateRsaHashedPrivateKeyAlgorithm( |
- const blink::WebCryptoAlgorithm& algorithm, |
+ blink::WebCryptoAlgorithmId rsa_algorithm, |
+ blink::WebCryptoAlgorithmId hash_algorithm, |
SECKEYPrivateKey* key, |
blink::WebCryptoKeyAlgorithm* key_algorithm) { |
crypto::ScopedSECKEYPublicKey public_key(SECKEY_ConvertToPublicKey(key)); |
if (!public_key) |
return false; |
return CreateRsaHashedPublicKeyAlgorithm( |
- algorithm, public_key.get(), key_algorithm); |
+ rsa_algorithm, hash_algorithm, public_key.get(), key_algorithm); |
} |
// From PKCS#1 [http://tools.ietf.org/html/rfc3447]: |
@@ -425,8 +388,13 @@ Status ImportRsaPrivateKey(const blink::WebCryptoAlgorithm& algorithm, |
return Status::OperationError(); |
blink::WebCryptoKeyAlgorithm key_algorithm; |
- if (!CreatePrivateKeyAlgorithm(algorithm, private_key.get(), &key_algorithm)) |
+ if (!CreateRsaHashedPrivateKeyAlgorithm( |
+ algorithm.id(), |
+ algorithm.rsaHashedImportParams()->hash().id(), |
+ private_key.get(), |
+ &key_algorithm)) { |
return Status::ErrorUnexpected(); |
+ } |
std::vector<uint8_t> pkcs8_data; |
status = ExportKeyPkcs8Nss(private_key.get(), &pkcs8_data); |
@@ -511,8 +479,13 @@ Status ImportRsaPublicKey(const blink::WebCryptoAlgorithm& algorithm, |
return Status::OperationError(); |
blink::WebCryptoKeyAlgorithm key_algorithm; |
- if (!CreatePublicKeyAlgorithm(algorithm, pubkey.get(), &key_algorithm)) |
+ if (!CreateRsaHashedPublicKeyAlgorithm( |
+ algorithm.id(), |
+ algorithm.rsaHashedImportParams()->hash().id(), |
+ pubkey.get(), |
+ &key_algorithm)) { |
return Status::ErrorUnexpected(); |
+ } |
std::vector<uint8_t> spki_data; |
Status status = ExportKeySpkiNss(pubkey.get(), &spki_data); |
@@ -594,8 +567,13 @@ Status RsaHashedAlgorithm::GenerateKeyPair( |
return Status::OperationError(); |
blink::WebCryptoKeyAlgorithm key_algorithm; |
- if (!CreatePublicKeyAlgorithm(algorithm, sec_public_key, &key_algorithm)) |
+ if (!CreateRsaHashedPublicKeyAlgorithm( |
+ algorithm.id(), |
+ algorithm.rsaHashedKeyGenParams()->hash().id(), |
+ sec_public_key, |
+ &key_algorithm)) { |
return Status::ErrorUnexpected(); |
+ } |
std::vector<uint8_t> spki_data; |
status = ExportKeySpkiNss(sec_public_key, &spki_data); |
@@ -682,8 +660,12 @@ Status RsaHashedAlgorithm::ImportKeyPkcs8( |
blink::WebCryptoKeyAlgorithm key_algorithm; |
if (!CreateRsaHashedPrivateKeyAlgorithm( |
- algorithm, private_key.get(), &key_algorithm)) |
+ algorithm.id(), |
+ algorithm.rsaHashedImportParams()->hash().id(), |
+ private_key.get(), |
+ &key_algorithm)) { |
return Status::ErrorUnexpected(); |
+ } |
// TODO(eroman): This is probably going to be the same as the input. |
std::vector<uint8_t> pkcs8_data; |
@@ -731,8 +713,12 @@ Status RsaHashedAlgorithm::ImportKeySpki( |
blink::WebCryptoKeyAlgorithm key_algorithm; |
if (!CreateRsaHashedPublicKeyAlgorithm( |
- algorithm, sec_public_key.get(), &key_algorithm)) |
+ algorithm.id(), |
+ algorithm.rsaHashedImportParams()->hash().id(), |
+ sec_public_key.get(), |
+ &key_algorithm)) { |
return Status::ErrorUnexpected(); |
+ } |
// TODO(eroman): This is probably going to be the same as the input. |
std::vector<uint8_t> spki_data; |