| Index: content/child/webcrypto/openssl/aes_gcm_openssl.cc
|
| diff --git a/content/child/webcrypto/openssl/aes_gcm_openssl.cc b/content/child/webcrypto/openssl/aes_gcm_openssl.cc
|
| index de47dd8026dd019ccad32c6b4806f77c4761f4dc..0bc927bafb161498be7844a9013f9be6b0ed34b7 100644
|
| --- a/content/child/webcrypto/openssl/aes_gcm_openssl.cc
|
| +++ b/content/child/webcrypto/openssl/aes_gcm_openssl.cc
|
| @@ -71,7 +71,8 @@ Status AesGcmEncryptDecrypt(EncryptOrDecrypt mode,
|
| crypto::ScopedOpenSSL<EVP_AEAD_CTX, EVP_AEAD_CTX_cleanup>::Type ctx_cleanup(
|
| &ctx);
|
|
|
| - ssize_t len;
|
| + size_t len;
|
| + int ok;
|
|
|
| if (mode == DECRYPT) {
|
| if (data.byte_length() < tag_length_bytes)
|
| @@ -79,32 +80,34 @@ Status AesGcmEncryptDecrypt(EncryptOrDecrypt mode,
|
|
|
| buffer->resize(data.byte_length() - tag_length_bytes);
|
|
|
| - 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());
|
| + 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());
|
| } 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);
|
|
|
| - 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());
|
| + 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());
|
| }
|
|
|
| - if (len < 0)
|
| + if (!ok)
|
| return Status::OperationError();
|
| buffer->resize(len);
|
| return Status::Success();
|
|
|