| OLD | NEW | 
|    1 // Copyright 2014 The Chromium Authors. All rights reserved. |    1 // Copyright 2014 The Chromium Authors. All rights reserved. | 
|    2 // Use of this source code is governed by a BSD-style license that can be |    2 // Use of this source code is governed by a BSD-style license that can be | 
|    3 // found in the LICENSE file. |    3 // found in the LICENSE file. | 
|    4  |    4  | 
|    5 #include "content/child/webcrypto/webcrypto_util.h" |    5 #include "content/child/webcrypto/webcrypto_util.h" | 
|    6  |    6  | 
|    7 #include "base/base64.h" |    7 #include "base/base64.h" | 
|    8 #include "base/logging.h" |    8 #include "base/logging.h" | 
|    9 #include "base/strings/stringprintf.h" |    9 #include "base/strings/stringprintf.h" | 
|   10 #include "content/child/webcrypto/status.h" |   10 #include "content/child/webcrypto/status.h" | 
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  168 blink::WebCryptoAlgorithm CreateRsaHashedImportAlgorithm( |  168 blink::WebCryptoAlgorithm CreateRsaHashedImportAlgorithm( | 
|  169     blink::WebCryptoAlgorithmId id, |  169     blink::WebCryptoAlgorithmId id, | 
|  170     blink::WebCryptoAlgorithmId hash_id) { |  170     blink::WebCryptoAlgorithmId hash_id) { | 
|  171   DCHECK(IsHashAlgorithm(hash_id)); |  171   DCHECK(IsHashAlgorithm(hash_id)); | 
|  172   DCHECK(id == blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5 || |  172   DCHECK(id == blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5 || | 
|  173          id == blink::WebCryptoAlgorithmIdRsaOaep); |  173          id == blink::WebCryptoAlgorithmIdRsaOaep); | 
|  174   return blink::WebCryptoAlgorithm::adoptParamsAndCreate( |  174   return blink::WebCryptoAlgorithm::adoptParamsAndCreate( | 
|  175       id, new blink::WebCryptoRsaHashedImportParams(CreateAlgorithm(hash_id))); |  175       id, new blink::WebCryptoRsaHashedImportParams(CreateAlgorithm(hash_id))); | 
|  176 } |  176 } | 
|  177  |  177  | 
|  178 blink::WebCryptoAlgorithm CreateRsaSsaImportAlgorithm( |  | 
|  179     blink::WebCryptoAlgorithmId hash_id) { |  | 
|  180   return CreateRsaHashedImportAlgorithm( |  | 
|  181       blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, hash_id); |  | 
|  182 } |  | 
|  183  |  | 
|  184 blink::WebCryptoAlgorithm CreateRsaOaepImportAlgorithm( |  | 
|  185     blink::WebCryptoAlgorithmId hash_id) { |  | 
|  186   return CreateRsaHashedImportAlgorithm(blink::WebCryptoAlgorithmIdRsaOaep, |  | 
|  187                                         hash_id); |  | 
|  188 } |  | 
|  189  |  | 
|  190 unsigned int ShaBlockSizeBytes(blink::WebCryptoAlgorithmId hash_id) { |  | 
|  191   switch (hash_id) { |  | 
|  192     case blink::WebCryptoAlgorithmIdSha1: |  | 
|  193     case blink::WebCryptoAlgorithmIdSha256: |  | 
|  194       return 64; |  | 
|  195     case blink::WebCryptoAlgorithmIdSha384: |  | 
|  196     case blink::WebCryptoAlgorithmIdSha512: |  | 
|  197       return 128; |  | 
|  198     default: |  | 
|  199       NOTREACHED(); |  | 
|  200       return 0; |  | 
|  201   } |  | 
|  202 } |  | 
|  203  |  | 
|  204 bool CreateSecretKeyAlgorithm(const blink::WebCryptoAlgorithm& algorithm, |  178 bool CreateSecretKeyAlgorithm(const blink::WebCryptoAlgorithm& algorithm, | 
|  205                               unsigned int keylen_bytes, |  179                               unsigned int keylen_bytes, | 
|  206                               blink::WebCryptoKeyAlgorithm* key_algorithm) { |  180                               blink::WebCryptoKeyAlgorithm* key_algorithm) { | 
|  207   switch (algorithm.id()) { |  181   switch (algorithm.id()) { | 
|  208     case blink::WebCryptoAlgorithmIdHmac: { |  182     case blink::WebCryptoAlgorithmIdHmac: { | 
|  209       blink::WebCryptoAlgorithm hash = GetInnerHashAlgorithm(algorithm); |  183       blink::WebCryptoAlgorithm hash = GetInnerHashAlgorithm(algorithm); | 
|  210       if (hash.isNull()) |  184       if (hash.isNull()) | 
|  211         return false; |  185         return false; | 
|  212       if (keylen_bytes > UINT_MAX / 8) |  186       if (keylen_bytes > UINT_MAX / 8) | 
|  213         return false; |  187         return false; | 
|  214       *key_algorithm = |  188       *key_algorithm = | 
|  215           blink::WebCryptoKeyAlgorithm::createHmac(hash.id(), keylen_bytes * 8); |  189           blink::WebCryptoKeyAlgorithm::createHmac(hash.id(), keylen_bytes * 8); | 
|  216       return true; |  190       return true; | 
|  217     } |  191     } | 
|  218     case blink::WebCryptoAlgorithmIdAesKw: |  192     case blink::WebCryptoAlgorithmIdAesKw: | 
|  219     case blink::WebCryptoAlgorithmIdAesCbc: |  193     case blink::WebCryptoAlgorithmIdAesCbc: | 
|  220     case blink::WebCryptoAlgorithmIdAesCtr: |  194     case blink::WebCryptoAlgorithmIdAesCtr: | 
|  221     case blink::WebCryptoAlgorithmIdAesGcm: |  195     case blink::WebCryptoAlgorithmIdAesGcm: | 
|  222       *key_algorithm = blink::WebCryptoKeyAlgorithm::createAes( |  196       *key_algorithm = blink::WebCryptoKeyAlgorithm::createAes( | 
|  223           algorithm.id(), keylen_bytes * 8); |  197           algorithm.id(), keylen_bytes * 8); | 
|  224       return true; |  198       return true; | 
|  225     default: |  199     default: | 
|  226       return false; |  200       return false; | 
|  227   } |  201   } | 
|  228 } |  202 } | 
|  229  |  203  | 
|  230 }  // namespace webcrypto |  204 }  // namespace webcrypto | 
|  231  |  205  | 
|  232 }  // namespace content |  206 }  // namespace content | 
| OLD | NEW |