Add checking return value 96/237096/1 accepted/tizen_5.5_unified tizen_5.5 accepted/tizen/5.5/unified/20201004.234019 submit/tizen_5.5/20200928.013521
authorJaemin Ryu <jm77.ryu@samsung.com>
Thu, 25 Jun 2020 04:33:08 +0000 (13:33 +0900)
committerJaemin Ryu <jm77.ryu@samsung.com>
Thu, 25 Jun 2020 04:33:08 +0000 (13:33 +0900)
Change-Id: I1ef2de5b337a42c48aa3244d1a07ddc3b9e6390d
Signed-off-by: Jaemin Ryu <jm77.ryu@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;
 }