| Index: crypto/symmetric_key_openssl.cc
|
| diff --git a/crypto/symmetric_key_openssl.cc b/crypto/symmetric_key_openssl.cc
|
| index e1c6fb7edede4026561ac121128416dd0398de23..e268a1d0f98c1f3d85ed4b2b8915646211f83d5c 100644
|
| --- a/crypto/symmetric_key_openssl.cc
|
| +++ b/crypto/symmetric_key_openssl.cc
|
| @@ -24,6 +24,13 @@ SymmetricKey::~SymmetricKey() {
|
| SymmetricKey* SymmetricKey::GenerateRandomKey(Algorithm algorithm,
|
| size_t key_size_in_bits) {
|
| DCHECK_EQ(AES, algorithm);
|
| +
|
| + // Whitelist supported key sizes to avoid accidentaly relying on
|
| + // algorithms available in NSS but not BoringSSL and vice
|
| + // versa. Note that BoringSSL does not support AES-192.
|
| + if (key_size_in_bits != 128 && key_size_in_bits != 256)
|
| + return NULL;
|
| +
|
| size_t key_size_in_bytes = key_size_in_bits / 8;
|
| DCHECK_EQ(key_size_in_bits, key_size_in_bytes * 8);
|
|
|
| @@ -46,6 +53,15 @@ SymmetricKey* SymmetricKey::DeriveKeyFromPassword(Algorithm algorithm,
|
| size_t iterations,
|
| size_t key_size_in_bits) {
|
| DCHECK(algorithm == AES || algorithm == HMAC_SHA1);
|
| +
|
| + if (algorithm == AES) {
|
| + // Whitelist supported key sizes to avoid accidentaly relying on
|
| + // algorithms available in NSS but not BoringSSL and vice
|
| + // versa. Note that BoringSSL does not support AES-192.
|
| + if (key_size_in_bits != 128 && key_size_in_bits != 256)
|
| + return NULL;
|
| + }
|
| +
|
| size_t key_size_in_bytes = key_size_in_bits / 8;
|
| DCHECK_EQ(key_size_in_bits, key_size_in_bytes * 8);
|
|
|
| @@ -67,6 +83,14 @@ SymmetricKey* SymmetricKey::DeriveKeyFromPassword(Algorithm algorithm,
|
| // static
|
| SymmetricKey* SymmetricKey::Import(Algorithm algorithm,
|
| const std::string& raw_key) {
|
| + if (algorithm == AES) {
|
| + // Whitelist supported key sizes to avoid accidentaly relying on
|
| + // algorithms available in NSS but not BoringSSL and vice
|
| + // versa. Note that BoringSSL does not support AES-192.
|
| + if (raw_key.size() != 128/8 && raw_key.size() != 256/8)
|
| + return NULL;
|
| + }
|
| +
|
| scoped_ptr<SymmetricKey> key(new SymmetricKey);
|
| key->key_ = raw_key;
|
| return key.release();
|
|
|