| Index: content/renderer/webcrypto/jwk.cc
 | 
| diff --git a/content/renderer/webcrypto/jwk.cc b/content/renderer/webcrypto/jwk.cc
 | 
| index 8389f8675c615eddd1ebe6d49423138acf0ae5a7..920c271b1f19656c69c8343b72a90d84afe76389 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): delete
 | 
|  
 | 
|  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
 | 
|      }
 | 
| 
 |