Fix coverity issue 94/223494/2 accepted/tizen_6.0_unified accepted/tizen_6.0_unified_hotfix accepted/tizen_6.5_unified accepted/tizen_7.0_unified accepted/tizen_7.0_unified_hotfix tizen_6.0 tizen_6.0_hotfix tizen_6.5 tizen_7.0 tizen_7.0_hotfix accepted/tizen/6.0/unified/20201030.115225 accepted/tizen/6.0/unified/hotfix/20201103.003217 accepted/tizen/6.5/unified/20211028.124112 accepted/tizen/7.0/unified/20221110.061133 accepted/tizen/7.0/unified/hotfix/20221116.105622 accepted/tizen/unified/20200212.125818 submit/tizen/20200211.063228 submit/tizen_6.0/20201029.205104 submit/tizen_6.0_hotfix/20201102.192504 submit/tizen_6.0_hotfix/20201103.114804 submit/tizen_6.5/20211028.162401 tizen_6.0.m2_release tizen_6.5.m2_release tizen_7.0_m2_release
authoryeji01.kim <yeji01.kim@samsung.com>
Thu, 30 Jan 2020 08:32:10 +0000 (17:32 +0900)
committeryeji01.kim <yeji01.kim@samsung.com>
Thu, 30 Jan 2020 08:41:31 +0000 (17:41 +0900)
- add return value check

Change-Id: I92a56325afd4ec623c84579d437bd67239677663
Signed-off-by: yeji01.kim <yeji01.kim@samsung.com>
server/key-manager/key-generator.cpp

index 2e2abc0..eeb04fc 100644 (file)
@@ -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;
 }