Index: content/renderer/webcrypto/jwk.cc |
diff --git a/content/renderer/webcrypto/jwk.cc b/content/renderer/webcrypto/jwk.cc |
index 8389f8675c615eddd1ebe6d49423138acf0ae5a7..d581d7387945689ee0394b4523710738d72ed75e 100644 |
--- a/content/renderer/webcrypto/jwk.cc |
+++ b/content/renderer/webcrypto/jwk.cc |
@@ -15,6 +15,7 @@ |
#include "content/renderer/webcrypto/platform_crypto.h" |
#include "content/renderer/webcrypto/shared_crypto.h" |
#include "content/renderer/webcrypto/webcrypto_util.h" |
+#include "third_party/WebKit/public/platform/WebCrypto.h" // TODO(eroman): |
Ryan Sleevi
2014/02/25 22:26:26
What's the TODO?
eroman
2014/02/25 23:26:47
Done.
The todo is for me to delete that line. Add
|
namespace content { |
@@ -41,7 +42,7 @@ class JwkAlgorithmInfo { |
DCHECK((required_key_length_bits % 8) == 0); |
} |
- bool CreateAlgorithm(blink::WebCryptoAlgorithm* algorithm) const { |
+ bool CreateImportAlgorithm(blink::WebCryptoAlgorithm* algorithm) const { |
*algorithm = creation_func_(); |
return !algorithm->isNull(); |
} |
@@ -71,28 +72,28 @@ class JwkAlgorithmRegistry { |
// says HMAC with SHA-2 should have a key size at least as large as the |
// hash output. |
alg_to_info_["HS256"] = |
- JwkAlgorithmInfo(&BindAlgorithmId<CreateHmacAlgorithmByHashId, |
+ JwkAlgorithmInfo(&BindAlgorithmId<CreateHmacImportAlgorithm, |
blink::WebCryptoAlgorithmIdSha256>); |
alg_to_info_["HS384"] = |
- JwkAlgorithmInfo(&BindAlgorithmId<CreateHmacAlgorithmByHashId, |
+ JwkAlgorithmInfo(&BindAlgorithmId<CreateHmacImportAlgorithm, |
blink::WebCryptoAlgorithmIdSha384>); |
alg_to_info_["HS512"] = |
- JwkAlgorithmInfo(&BindAlgorithmId<CreateHmacAlgorithmByHashId, |
+ JwkAlgorithmInfo(&BindAlgorithmId<CreateHmacImportAlgorithm, |
blink::WebCryptoAlgorithmIdSha512>); |
alg_to_info_["RS256"] = |
- JwkAlgorithmInfo(&BindAlgorithmId<CreateRsaSsaAlgorithm, |
+ JwkAlgorithmInfo(&BindAlgorithmId<CreateRsaSsaImportAlgorithm, |
blink::WebCryptoAlgorithmIdSha256>); |
alg_to_info_["RS384"] = |
- JwkAlgorithmInfo(&BindAlgorithmId<CreateRsaSsaAlgorithm, |
+ JwkAlgorithmInfo(&BindAlgorithmId<CreateRsaSsaImportAlgorithm, |
blink::WebCryptoAlgorithmIdSha384>); |
alg_to_info_["RS512"] = |
- JwkAlgorithmInfo(&BindAlgorithmId<CreateRsaSsaAlgorithm, |
+ JwkAlgorithmInfo(&BindAlgorithmId<CreateRsaSsaImportAlgorithm, |
blink::WebCryptoAlgorithmIdSha512>); |
alg_to_info_["RSA1_5"] = JwkAlgorithmInfo( |
&BindAlgorithmId<CreateAlgorithm, |
blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5>); |
alg_to_info_["RSA-OAEP"] = |
- JwkAlgorithmInfo(&BindAlgorithmId<CreateRsaOaepAlgorithm, |
+ JwkAlgorithmInfo(&BindAlgorithmId<CreateRsaOaepImportAlgorithm, |
blink::WebCryptoAlgorithmIdSha1>); |
// TODO(padolph): The Web Crypto spec does not enumerate AES-KW 128 yet |
alg_to_info_["A128KW"] = |
@@ -141,8 +142,31 @@ class JwkAlgorithmRegistry { |
base::LazyInstance<JwkAlgorithmRegistry> jwk_alg_registry = |
LAZY_INSTANCE_INITIALIZER; |
-bool WebCryptoAlgorithmsConsistent(const blink::WebCryptoAlgorithm& alg1, |
- const blink::WebCryptoAlgorithm& alg2) { |
+#ifdef WEBCRYPTO_HAS_KEY_ALGORITHM |
+bool ImportAlgorithmsConsistent(const blink::WebCryptoAlgorithm& alg1, |
+ const blink::WebCryptoAlgorithm& alg2) { |
+ DCHECK(!alg1.isNull()); |
+ DCHECK(!alg2.isNull()); |
+ if (alg1.id() != alg2.id()) |
+ return false; |
+ if (alg1.paramsType() != alg2.paramsType()) |
+ return false; |
+ switch (alg1.paramsType()) { |
+ case blink::WebCryptoAlgorithmParamsTypeNone: |
+ return true; |
+ case blink::WebCryptoAlgorithmParamsTypeRsaHashedImportParams: |
+ return ImportAlgorithmsConsistent(alg1.rsaHashedImportParams()->hash(), |
+ alg2.rsaHashedImportParams()->hash()); |
+ case blink::WebCryptoAlgorithmParamsTypeHmacImportParams: |
+ return ImportAlgorithmsConsistent(alg1.hmacImportParams()->hash(), |
+ alg2.hmacImportParams()->hash()); |
+ default: |
+ return false; |
+ } |
+} |
+#else |
+bool ImportAlgorithmsConsistent(const blink::WebCryptoAlgorithm& alg1, |
+ const blink::WebCryptoAlgorithm& alg2) { |
DCHECK(!alg1.isNull()); |
DCHECK(!alg2.isNull()); |
if (alg1.id() != alg2.id()) |
@@ -151,8 +175,8 @@ bool WebCryptoAlgorithmsConsistent(const blink::WebCryptoAlgorithm& alg1, |
case blink::WebCryptoAlgorithmIdHmac: |
case blink::WebCryptoAlgorithmIdRsaOaep: |
case blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5: |
- if (WebCryptoAlgorithmsConsistent(GetInnerHashAlgorithm(alg1), |
- GetInnerHashAlgorithm(alg2))) { |
+ if (ImportAlgorithmsConsistent(GetInnerHashAlgorithm(alg1), |
+ GetInnerHashAlgorithm(alg2))) { |
return true; |
} |
break; |
@@ -172,6 +196,7 @@ bool WebCryptoAlgorithmsConsistent(const blink::WebCryptoAlgorithm& alg1, |
} |
return false; |
} |
+#endif |
// Extracts the required string property with key |path| from |dict| and saves |
// the result to |*result|. If the property does not exist or is not a string, |
@@ -448,7 +473,8 @@ Status ImportKeyJwk(const CryptoData& key_data, |
blink::WebCryptoAlgorithm jwk_algorithm = |
blink::WebCryptoAlgorithm::createNull(); |
algorithm_info = jwk_alg_registry.Get().GetAlgorithmInfo(jwk_alg_value); |
- if (!algorithm_info || !algorithm_info->CreateAlgorithm(&jwk_algorithm)) |
+ if (!algorithm_info || |
+ !algorithm_info->CreateImportAlgorithm(&jwk_algorithm)) |
return Status::ErrorJwkUnrecognizedAlgorithm(); // case 1 |
// JWK alg valid |
@@ -457,7 +483,7 @@ Status ImportKeyJwk(const CryptoData& key_data, |
algorithm = jwk_algorithm; // case 2 |
} else { |
// input algorithm specified |
- if (!WebCryptoAlgorithmsConsistent(jwk_algorithm, algorithm_or_null)) |
+ if (!ImportAlgorithmsConsistent(jwk_algorithm, algorithm_or_null)) |
return Status::ErrorJwkAlgorithmInconsistent(); // case 3 |
algorithm = algorithm_or_null; // case 4 |
} |