| 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/renderer/webcrypto/shared_crypto.h" | 5 #include "content/renderer/webcrypto/shared_crypto.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "content/renderer/webcrypto/crypto_data.h" | 8 #include "content/renderer/webcrypto/crypto_data.h" |
| 9 #include "content/renderer/webcrypto/platform_crypto.h" | 9 #include "content/renderer/webcrypto/platform_crypto.h" |
| 10 #include "content/renderer/webcrypto/webcrypto_util.h" | 10 #include "content/renderer/webcrypto/webcrypto_util.h" |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 43 | 43 |
| 44 Status ToPlatformPublicKey(const blink::WebCryptoKey& key, | 44 Status ToPlatformPublicKey(const blink::WebCryptoKey& key, |
| 45 platform::PublicKey** out) { | 45 platform::PublicKey** out) { |
| 46 *out = static_cast<platform::Key*>(key.handle())->AsPublicKey(); | 46 *out = static_cast<platform::Key*>(key.handle())->AsPublicKey(); |
| 47 if (!*out) | 47 if (!*out) |
| 48 return Status::ErrorUnexpectedKeyType(); | 48 return Status::ErrorUnexpectedKeyType(); |
| 49 return Status::Success(); | 49 return Status::Success(); |
| 50 } | 50 } |
| 51 | 51 |
| 52 Status ToPlatformPrivateKey(const blink::WebCryptoKey& key, | 52 Status ToPlatformPrivateKey(const blink::WebCryptoKey& key, |
| 53 platform::PrivateKey** out) { | 53 platform::PrivateKey** out) { |
| 54 *out = static_cast<platform::Key*>(key.handle())->AsPrivateKey(); | 54 *out = static_cast<platform::Key*>(key.handle())->AsPrivateKey(); |
| 55 if (!*out) | 55 if (!*out) |
| 56 return Status::ErrorUnexpectedKeyType(); | 56 return Status::ErrorUnexpectedKeyType(); |
| 57 return Status::Success(); | 57 return Status::Success(); |
| 58 } | 58 } |
| 59 | 59 |
| 60 const size_t kAesBlockSizeBytes = 16; | 60 const size_t kAesBlockSizeBytes = 16; |
| 61 | 61 |
| 62 Status EncryptDecryptAesCbc(EncryptOrDecrypt mode, | 62 Status EncryptDecryptAesCbc(EncryptOrDecrypt mode, |
| 63 const blink::WebCryptoAlgorithm& algorithm, | 63 const blink::WebCryptoAlgorithm& algorithm, |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 96 | 96 |
| 97 // TODO(eroman): The spec doesn't define the default value. Assume 128 for now | 97 // TODO(eroman): The spec doesn't define the default value. Assume 128 for now |
| 98 // since that is the maximum tag length: | 98 // since that is the maximum tag length: |
| 99 // http://www.w3.org/2012/webcrypto/track/issues/46 | 99 // http://www.w3.org/2012/webcrypto/track/issues/46 |
| 100 unsigned int tag_length_bits = 128; | 100 unsigned int tag_length_bits = 128; |
| 101 if (params->hasTagLengthBits()) | 101 if (params->hasTagLengthBits()) |
| 102 tag_length_bits = params->optionalTagLengthBits(); | 102 tag_length_bits = params->optionalTagLengthBits(); |
| 103 if (tag_length_bits > 128) | 103 if (tag_length_bits > 128) |
| 104 return Status::ErrorInvalidAesGcmTagLength(); | 104 return Status::ErrorInvalidAesGcmTagLength(); |
| 105 | 105 |
| 106 return platform::EncryptDecryptAesGcm(mode, sym_key, data, | 106 return platform::EncryptDecryptAesGcm( |
| 107 CryptoData(params->iv()), CryptoData(params->optionalAdditionalData()), | 107 mode, |
| 108 tag_length_bits, buffer); | 108 sym_key, |
| 109 data, |
| 110 CryptoData(params->iv()), |
| 111 CryptoData(params->optionalAdditionalData()), |
| 112 tag_length_bits, |
| 113 buffer); |
| 109 } | 114 } |
| 110 | 115 |
| 111 Status EncryptRsaEsPkcs1v1_5(const blink::WebCryptoAlgorithm& algorithm, | 116 Status EncryptRsaEsPkcs1v1_5(const blink::WebCryptoAlgorithm& algorithm, |
| 112 const blink::WebCryptoKey& key, | 117 const blink::WebCryptoKey& key, |
| 113 const CryptoData& data, | 118 const CryptoData& data, |
| 114 blink::WebArrayBuffer* buffer) { | 119 blink::WebArrayBuffer* buffer) { |
| 115 platform::PublicKey* public_key; | 120 platform::PublicKey* public_key; |
| 116 Status status = ToPlatformPublicKey(key, &public_key); | 121 Status status = ToPlatformPublicKey(key, &public_key); |
| 117 if (status.IsError()) | 122 if (status.IsError()) |
| 118 return status; | 123 return status; |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 245 return platform::ImportKeyRaw( | 250 return platform::ImportKeyRaw( |
| 246 algorithm_or_null, key_data, extractable, usage_mask, key); | 251 algorithm_or_null, key_data, extractable, usage_mask, key); |
| 247 | 252 |
| 248 default: | 253 default: |
| 249 return Status::ErrorUnsupported(); | 254 return Status::ErrorUnsupported(); |
| 250 } | 255 } |
| 251 } | 256 } |
| 252 | 257 |
| 253 } // namespace | 258 } // namespace |
| 254 | 259 |
| 255 void Init() { | 260 void Init() { platform::Init(); } |
| 256 platform::Init(); | |
| 257 } | |
| 258 | 261 |
| 259 Status Encrypt(const blink::WebCryptoAlgorithm& algorithm, | 262 Status Encrypt(const blink::WebCryptoAlgorithm& algorithm, |
| 260 const blink::WebCryptoKey& key, | 263 const blink::WebCryptoKey& key, |
| 261 const CryptoData& data, | 264 const CryptoData& data, |
| 262 blink::WebArrayBuffer* buffer) { | 265 blink::WebArrayBuffer* buffer) { |
| 263 if (!KeyUsageAllows(key, blink::WebCryptoKeyUsageEncrypt)) | 266 if (!KeyUsageAllows(key, blink::WebCryptoKeyUsageEncrypt)) |
| 264 return Status::ErrorUnexpected(); | 267 return Status::ErrorUnexpected(); |
| 265 if (algorithm.id() != key.algorithm().id()) | 268 if (algorithm.id() != key.algorithm().id()) |
| 266 return Status::ErrorUnexpected(); | 269 return Status::ErrorUnexpected(); |
| 267 | 270 |
| (...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 475 return VerifyRsaSsaPkcs1v1_5( | 478 return VerifyRsaSsaPkcs1v1_5( |
| 476 algorithm, key, signature, data, signature_match); | 479 algorithm, key, signature, data, signature_match); |
| 477 default: | 480 default: |
| 478 return Status::ErrorUnsupported(); | 481 return Status::ErrorUnsupported(); |
| 479 } | 482 } |
| 480 } | 483 } |
| 481 | 484 |
| 482 } // namespace webcrypto | 485 } // namespace webcrypto |
| 483 | 486 |
| 484 } // namespace content | 487 } // namespace content |
| OLD | NEW |