Index: content/child/webcrypto/platform_crypto_openssl.cc |
diff --git a/content/child/webcrypto/platform_crypto_openssl.cc b/content/child/webcrypto/platform_crypto_openssl.cc |
index 83140538d86cfc8a96ba3c36f418b300d2bcd10d..89212ea55b201472c878c2e6edfe1431ed913223 100644 |
--- a/content/child/webcrypto/platform_crypto_openssl.cc |
+++ b/content/child/webcrypto/platform_crypto_openssl.cc |
@@ -53,10 +53,12 @@ class SymKey : public Key { |
namespace { |
const EVP_CIPHER* GetAESCipherByKeyLength(unsigned int key_length_bytes) { |
- // OpenSSL supports AES CBC ciphers for only 2 key lengths: 128, 256 bits |
+ // OpenSSL supports AES CBC ciphers for only 3 key lengths: 128, 192, 256 bits |
switch (key_length_bytes) { |
case 16: |
return EVP_aes_128_cbc(); |
+ case 24: |
+ return EVP_aes_192_cbc(); |
case 32: |
return EVP_aes_256_cbc(); |
default: |
@@ -437,8 +439,7 @@ Status EncryptDecryptAesGcm(EncryptOrDecrypt mode, |
crypto::ScopedOpenSSL<EVP_AEAD_CTX, EVP_AEAD_CTX_cleanup>::Type ctx_cleanup( |
&ctx); |
- size_t len; |
- int ok; |
+ ssize_t len; |
if (mode == DECRYPT) { |
if (data.byte_length() < tag_length_bytes) |
@@ -446,34 +447,32 @@ Status EncryptDecryptAesGcm(EncryptOrDecrypt mode, |
buffer->resize(data.byte_length() - tag_length_bytes); |
- ok = EVP_AEAD_CTX_open(&ctx, |
- Uint8VectorStart(buffer), |
- &len, |
- buffer->size(), |
- iv.bytes(), |
- iv.byte_length(), |
- data.bytes(), |
- data.byte_length(), |
- additional_data.bytes(), |
- additional_data.byte_length()); |
+ len = EVP_AEAD_CTX_open(&ctx, |
+ Uint8VectorStart(buffer), |
+ buffer->size(), |
+ iv.bytes(), |
+ iv.byte_length(), |
+ data.bytes(), |
+ data.byte_length(), |
+ additional_data.bytes(), |
+ additional_data.byte_length()); |
} else { |
// No need to check for unsigned integer overflow here (seal fails if |
// the output buffer is too small). |
buffer->resize(data.byte_length() + tag_length_bytes); |
- ok = EVP_AEAD_CTX_seal(&ctx, |
- Uint8VectorStart(buffer), |
- &len, |
- buffer->size(), |
- iv.bytes(), |
- iv.byte_length(), |
- data.bytes(), |
- data.byte_length(), |
- additional_data.bytes(), |
- additional_data.byte_length()); |
+ len = EVP_AEAD_CTX_seal(&ctx, |
+ Uint8VectorStart(buffer), |
+ buffer->size(), |
+ iv.bytes(), |
+ iv.byte_length(), |
+ data.bytes(), |
+ data.byte_length(), |
+ additional_data.bytes(), |
+ additional_data.byte_length()); |
} |
- if (!ok) |
+ if (len < 0) |
return Status::OperationError(); |
buffer->resize(len); |
return Status::Success(); |