summaryrefslogtreecommitdiff
path: root/chromium/net/quic/crypto/aes_128_gcm_12_encrypter_openssl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/net/quic/crypto/aes_128_gcm_12_encrypter_openssl.cc')
-rw-r--r--chromium/net/quic/crypto/aes_128_gcm_12_encrypter_openssl.cc23
1 files changed, 20 insertions, 3 deletions
diff --git a/chromium/net/quic/crypto/aes_128_gcm_12_encrypter_openssl.cc b/chromium/net/quic/crypto/aes_128_gcm_12_encrypter_openssl.cc
index 166fd55cb7c..394971a7382 100644
--- a/chromium/net/quic/crypto/aes_128_gcm_12_encrypter_openssl.cc
+++ b/chromium/net/quic/crypto/aes_128_gcm_12_encrypter_openssl.cc
@@ -4,6 +4,7 @@
#include "net/quic/crypto/aes_128_gcm_12_encrypter.h"
+#include <openssl/err.h>
#include <openssl/evp.h>
#include <string.h>
@@ -19,15 +20,24 @@ const size_t kKeySize = 16;
const size_t kNoncePrefixSize = 4;
const size_t kAESNonceSize = 12;
+void ClearOpenSslErrors() {
+#ifdef NDEBUG
+ while (ERR_get_error()) {}
+#else
+ while (long error = ERR_get_error()) {
+ char buf[120];
+ ERR_error_string_n(error, buf, arraysize(buf));
+ DLOG(ERROR) << "OpenSSL error: " << buf;
+ }
+#endif
+}
+
} // namespace
Aes128Gcm12Encrypter::Aes128Gcm12Encrypter() {}
Aes128Gcm12Encrypter::~Aes128Gcm12Encrypter() {}
-// static
-bool Aes128Gcm12Encrypter::IsSupported() { return true; }
-
bool Aes128Gcm12Encrypter::SetKey(StringPiece key) {
DCHECK_EQ(key.size(), sizeof(key_));
if (key.size() != sizeof(key_)) {
@@ -38,12 +48,14 @@ bool Aes128Gcm12Encrypter::SetKey(StringPiece key) {
// Set the cipher type and the key.
if (EVP_EncryptInit_ex(ctx_.get(), EVP_aes_128_gcm(), NULL, key_,
NULL) == 0) {
+ ClearOpenSslErrors();
return false;
}
// Set the IV (nonce) length.
if (EVP_CIPHER_CTX_ctrl(ctx_.get(), EVP_CTRL_GCM_SET_IVLEN, kAESNonceSize,
NULL) == 0) {
+ ClearOpenSslErrors();
return false;
}
@@ -72,6 +84,7 @@ bool Aes128Gcm12Encrypter::Encrypt(StringPiece nonce,
if (EVP_EncryptInit_ex(
ctx_.get(), NULL, NULL, NULL,
reinterpret_cast<const unsigned char*>(nonce.data())) == 0) {
+ ClearOpenSslErrors();
return false;
}
@@ -85,6 +98,7 @@ bool Aes128Gcm12Encrypter::Encrypt(StringPiece nonce,
ctx_.get(), NULL, &unused_len,
reinterpret_cast<const unsigned char*>(associated_data.data()),
associated_data.size()) == 0) {
+ ClearOpenSslErrors();
return false;
}
}
@@ -94,17 +108,20 @@ bool Aes128Gcm12Encrypter::Encrypt(StringPiece nonce,
ctx_.get(), output, &len,
reinterpret_cast<const unsigned char*>(plaintext.data()),
plaintext.size()) == 0) {
+ ClearOpenSslErrors();
return false;
}
output += len;
if (EVP_EncryptFinal_ex(ctx_.get(), output, &len) == 0) {
+ ClearOpenSslErrors();
return false;
}
output += len;
if (EVP_CIPHER_CTX_ctrl(ctx_.get(), EVP_CTRL_GCM_GET_TAG, kAuthTagSize,
output) == 0) {
+ ClearOpenSslErrors();
return false;
}