Make IV const in privacy_crypto

Merged from https://widevine-internal-review.googlesource.com/188677

Change-Id: I17346b54259ca1929ef40a8d61aef38969800159
This commit is contained in:
Jacob Trimble
2023-11-30 23:27:55 +00:00
committed by Robert Shih
parent 8429693866
commit a457c2a14d
4 changed files with 14 additions and 18 deletions

View File

@@ -37,7 +37,7 @@ class AesCbcKey {
~AesCbcKey(); ~AesCbcKey();
bool Init(const std::string& key); bool Init(const std::string& key);
bool Encrypt(const std::string& in, std::string* out, std::string* iv); bool Encrypt(const std::string& in, const std::string& iv, std::string* out);
private: private:
std::string key_; std::string key_;

View File

@@ -89,18 +89,14 @@ bool AesCbcKey::Init(const std::string& key) {
return true; return true;
} }
bool AesCbcKey::Encrypt(const std::string& in, std::string* out, bool AesCbcKey::Encrypt(const std::string& in, const std::string& iv,
std::string* iv) { std::string* out) {
if (in.empty()) { if (in.empty()) {
LOGE("No cleartext provided"); LOGE("No cleartext provided");
return false; return false;
} }
if (iv == nullptr) { if (iv.size() != AES_BLOCK_SIZE) {
LOGE("Initialization vector output parameter |iv| not provided"); LOGE("Invalid IV size: %zu", iv.size());
return false;
}
if (iv->size() != AES_BLOCK_SIZE) {
LOGE("Invalid IV size: %zu", iv->size());
return false; return false;
} }
if (out == nullptr) { if (out == nullptr) {
@@ -114,8 +110,8 @@ bool AesCbcKey::Encrypt(const std::string& in, std::string* out,
EVP_CIPHER_CTX* evp_cipher_ctx = EVP_CIPHER_CTX_new(); EVP_CIPHER_CTX* evp_cipher_ctx = EVP_CIPHER_CTX_new();
if (EVP_EncryptInit(evp_cipher_ctx, EVP_aes_128_cbc(), if (EVP_EncryptInit(evp_cipher_ctx, EVP_aes_128_cbc(),
reinterpret_cast<uint8_t*>(&key_[0]), reinterpret_cast<const uint8_t*>(&key_[0]),
reinterpret_cast<uint8_t*>(&(*iv)[0])) == 0) { reinterpret_cast<const uint8_t*>(&iv[0])) == 0) {
LOGE("AES CBC setup failure: %s", LOGE("AES CBC setup failure: %s",
ERR_error_string(ERR_get_error(), nullptr)); ERR_error_string(ERR_get_error(), nullptr));
EVP_CIPHER_CTX_free(evp_cipher_ctx); EVP_CIPHER_CTX_free(evp_cipher_ctx);
@@ -124,10 +120,10 @@ bool AesCbcKey::Encrypt(const std::string& in, std::string* out,
out->resize(in.size() + AES_BLOCK_SIZE); out->resize(in.size() + AES_BLOCK_SIZE);
int out_length = static_cast<int>(out->size()); int out_length = static_cast<int>(out->size());
if (EVP_EncryptUpdate( if (EVP_EncryptUpdate(evp_cipher_ctx, reinterpret_cast<uint8_t*>(&(*out)[0]),
evp_cipher_ctx, reinterpret_cast<uint8_t*>(&(*out)[0]), &out_length, &out_length,
reinterpret_cast<uint8_t*>(const_cast<char*>(in.data())), reinterpret_cast<const uint8_t*>(in.data()),
static_cast<int>(in.size())) == 0) { static_cast<int>(in.size())) == 0) {
LOGE("AES CBC encryption failure: %s", LOGE("AES CBC encryption failure: %s",
ERR_error_string(ERR_get_error(), nullptr)); ERR_error_string(ERR_get_error(), nullptr));
EVP_CIPHER_CTX_free(evp_cipher_ctx); EVP_CIPHER_CTX_free(evp_cipher_ctx);

View File

@@ -29,8 +29,8 @@ AesCbcKey::~AesCbcKey() {}
bool AesCbcKey::Init(const std::string& key) { return false; } bool AesCbcKey::Init(const std::string& key) { return false; }
bool AesCbcKey::Encrypt(const std::string& in, std::string* out, bool AesCbcKey::Encrypt(const std::string& in, const std::string& iv,
std::string* iv) { std::string* out) {
return false; return false;
} }

View File

@@ -251,7 +251,7 @@ CdmResponseType ServiceCertificate::EncryptClientId(
AesCbcKey aes; AesCbcKey aes;
if (!aes.Init(key)) return CdmResponseType(CLIENT_ID_AES_INIT_ERROR); if (!aes.Init(key)) return CdmResponseType(CLIENT_ID_AES_INIT_ERROR);
if (!aes.Encrypt(id, &enc_id, &iv)) if (!aes.Encrypt(id, iv, &enc_id))
return CdmResponseType(CLIENT_ID_AES_ENCRYPT_ERROR); return CdmResponseType(CLIENT_ID_AES_ENCRYPT_ERROR);
CdmResponseType encrypt_result = EncryptRsaOaep(key, &enc_key); CdmResponseType encrypt_result = EncryptRsaOaep(key, &enc_key);