Chromium Code Reviews| 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, |
|
Ryan Sleevi
2014/08/27 17:14:09
Is the assumption that |rsa_algorithm| holds label
eroman
2014/08/27 17:27:38
The containing function (CreateRsaHashedPublicKeyA
|
| + 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; |