From 36d658bcef06b4add776ea6f5a02212dd67b7ad9 Mon Sep 17 00:00:00 2001 From: "yeji01.kim" Date: Thu, 30 Jan 2020 17:32:10 +0900 Subject: [PATCH] Fix coverity issue - add return value check Change-Id: I92a56325afd4ec623c84579d437bd67239677663 Signed-off-by: yeji01.kim --- server/key-manager/key-generator.cpp | 42 +++++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/server/key-manager/key-generator.cpp b/server/key-manager/key-generator.cpp index 2e2abc0..eeb04fc 100644 --- a/server/key-manager/key-generator.cpp +++ b/server/key-manager/key-generator.cpp @@ -64,9 +64,10 @@ BinaryData PBKDF(const BinaryData& pass, { BinaryData ret(resultSize, 0); - ::PKCS5_PBKDF2_HMAC((char *)pass.data(), pass.size(), + if (::PKCS5_PBKDF2_HMAC((char *)pass.data(), pass.size(), salt.data(), salt.size(), iteration, - EVP_sha256(), resultSize, ret.data()); + EVP_sha256(), resultSize, ret.data()) != 1) + throw runtime::Exception("PBKDF failed"); return ret; } @@ -83,13 +84,23 @@ BinaryData AESEncrypt(const BinaryData& in, if (ctx == nullptr) throw runtime::Exception("Failed to allocate memory for chipher context"); - ::EVP_EncryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key.data(), iv.data()); + if (::EVP_EncryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key.data(), iv.data()) != 1) { + ::EVP_CIPHER_CTX_free(ctx); + throw runtime::Exception("Failed to initialize AES encryption"); + } ::EVP_CIPHER_CTX_set_padding(ctx, 0); - ::EVP_EncryptUpdate(ctx, ret.data(), &len, in.data(), in.size()); + + if (::EVP_EncryptUpdate(ctx, ret.data(), &len, in.data(), in.size()) != 1) { + ::EVP_CIPHER_CTX_free(ctx); + throw runtime::Exception("Failed to update AES encryption"); + } outLen = len; - ::EVP_EncryptFinal_ex(ctx, &ret[len], &len); + if (::EVP_EncryptFinal_ex(ctx, &ret[len], &len) != 1) { + ::EVP_CIPHER_CTX_free(ctx); + throw runtime::Exception("Failed to finalize AES encryption"); + } outLen += len; ::EVP_CIPHER_CTX_free(ctx); @@ -110,13 +121,23 @@ BinaryData AESDecrypt(const BinaryData& in, if (ctx == nullptr) throw runtime::Exception("Failed to allocate memory for chipher context"); - ::EVP_DecryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key.data(), iv.data()); + if (::EVP_DecryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key.data(), iv.data()) != 1) { + ::EVP_CIPHER_CTX_free(ctx); + throw runtime::Exception("Failed to initialize AES decryption"); + } + ::EVP_CIPHER_CTX_set_padding(ctx, 0); - ::EVP_DecryptUpdate(ctx, ret.data(), &len, in.data(), in.size()); + if (::EVP_DecryptUpdate(ctx, ret.data(), &len, in.data(), in.size()) != 1) { + ::EVP_CIPHER_CTX_free(ctx); + throw runtime::Exception("Failed to update AES decryption"); + } len1 = len; - ::EVP_DecryptFinal_ex(ctx, &ret[len], &len); + if (::EVP_DecryptFinal_ex(ctx, &ret[len], &len) != 1) { + ::EVP_CIPHER_CTX_free(ctx); + throw runtime::Exception("Failed to finalize AES decryption"); + } len1 += len; ::EVP_CIPHER_CTX_free(ctx); @@ -129,8 +150,9 @@ BinaryData HMAC(const BinaryData& key, const BinaryData& in) BinaryData ret(256 / 8); unsigned int md_len; - ::HMAC(EVP_sha256(), key.data(), key.size(), in.data(), in.size(), - ret.data(), &md_len); + if (::HMAC(EVP_sha256(), key.data(), key.size(), in.data(), in.size(), + ret.data(), &md_len) == nullptr) + throw runtime::Exception("HMAC failed"); return ret; } -- 2.7.4