Revert "Fix GCM IV length setting" 97/298697/2
authorKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Tue, 12 Sep 2023 10:36:11 +0000 (12:36 +0200)
committerKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Tue, 12 Sep 2023 15:19:37 +0000 (17:19 +0200)
This reverts commit 1e6e268703fc313a973f06581e21cf62c112e903.

Change-Id: Ibb87d42af732735413bdbffa9fadc15e7457eb59

src/manager/crypto/generic-backend/algo-validation.h
src/manager/crypto/sw-backend/crypto.h
src/manager/crypto/sw-backend/internals.cpp
unit-tests/test_crypto-logic.cpp
unit-tests/test_sw-backend.cpp

index 8946a35..dc14966 100644 (file)
@@ -98,21 +98,6 @@ struct Type {
        };
 };
 
-// Validates as true if parameter value is equal or greater than Min
-template <typename T, T Min>
-struct GreaterOrEqual {
-public:
-       static bool Check(const T &value)
-       {
-               return value >= Min;
-       }
-
-       static void Why(std::ostringstream &os)
-       {
-               os << "is smaller than " << static_cast<int>(Min);
-       }
-};
-
 template <typename T>
 struct Unsupported {
        static bool Check(const T &)
index 0b49afd..a129682 100644 (file)
@@ -99,25 +99,12 @@ public:
                        ThrowErr(Exc::Crypto::InternalError, "Wrong key size! Expected: ",
                                        EVP_CIPHER_key_length(type), " Get: ", key.size());
 
-               bool gcm  = (EVP_CIPHER_mode(type) == EVP_CIPH_GCM_MODE);
-               int iv_len = EVP_CIPHER_iv_length(type);
+               if (static_cast<int>(iv.size()) < EVP_CIPHER_iv_length(type))
+                       ThrowErr(Exc::Crypto::InternalError, "Wrong iv size! Expected: ",
+                                        EVP_CIPHER_iv_length(type), " Get: ", iv.size());
 
-               OPENSSL_ERROR_HANDLE(EVP_CipherInit_ex(m_ctx, type, NULL, NULL, NULL, encryption ? 1 : 0));
-
-               if (gcm) {
-                       if (iv.empty())
-                               ThrowErr(Exc::Crypto::InternalError, "Empty iv provided!");
-
-                       OPENSSL_ERROR_HANDLE(
-                               EVP_CIPHER_CTX_ctrl(m_ctx, EVP_CTRL_GCM_SET_IVLEN, iv.size(), NULL));
-               } else {
-                       if (static_cast<int>(iv.size()) != iv_len)
-                               ThrowErr(Exc::Crypto::InternalError, "Wrong iv size! Expected: ", iv_len, " Got: ",
-                                        iv.size());
-               }
-
-               OPENSSL_ERROR_HANDLE(
-                       EVP_CipherInit_ex(m_ctx, NULL, NULL, key.data(), iv.data(), encryption ? 1 : 0));
+               OPENSSL_ERROR_HANDLE(EVP_CipherInit_ex(m_ctx, type, NULL, key.data(), iv.data(),
+                                              encryption ? 1 : 0));
 
                EVP_CIPHER_CTX_set_padding(m_ctx, 1);
        }
index 75ba3e3..247b434 100644 (file)
@@ -115,8 +115,7 @@ typedef ParamCheck<ParamName::ED_CTR_LEN,
 typedef ParamCheck<ParamName::ED_IV,
                RawBuffer,
                true,
-               GreaterOrEqual<size_t, 1>,
-               BufferSizeGetter> GcmIvCheck;
+               DefaultValidator<RawBuffer>> GcmIvCheck;
 
 typedef ParamCheck<ParamName::ED_TAG_LEN,
                int,
index 62fdfd6..5c168a0 100644 (file)
@@ -185,6 +185,11 @@ NEGATIVE_TEST_CASE(row_encryption)
        BOOST_REQUIRE_NO_THROW(logic.removeKey(TEST_CLIENT));
        BOOST_REQUIRE_NO_THROW(logic.pushKey(TEST_CLIENT, TEST_KEY));
 
+       // short IV
+       row.iv = RawBuffer(4);
+       BOOST_REQUIRE_THROW(logic.encryptRow(row), Exc::InternalError);
+       row.iv.clear();
+
        // correct encryption
        DB::Row encryptedRow;
        BOOST_REQUIRE_NO_THROW(encryptedRow = logic.encryptRow(row));
index a2a9b4c..c4ae72c 100644 (file)
@@ -528,12 +528,6 @@ POSITIVE_TEST_CASE(symmetricEncryptDecrypt)
        ca.setParam(ParamName::ALGO_TYPE, AlgoType::AES_GCM);
        ca.setParam(ParamName::ED_AAD, createRandom(42));
        encryptDecrypt();
-       ca.setParam(ParamName::ED_IV, createRandom(11));
-       encryptDecrypt();
-       ca.setParam(ParamName::ED_IV, createRandom(1));
-       encryptDecrypt();
-       ca.setParam(ParamName::ED_IV, createRandom(99));
-       encryptDecrypt();
 }
 
 NEGATIVE_TEST_CASE(symmetricEncryptDecrypt)
@@ -604,6 +598,9 @@ NEGATIVE_TEST_CASE(symmetricEncryptDecryptGcm)
        // no iv
        BOOST_REQUIRE_THROW(key->encrypt(ca, data), Exc::Crypto::InputParam);
 
+       // short iv
+       ca.setParam(ParamName::ED_IV, RawBuffer(1));
+       BOOST_REQUIRE_THROW(key->encrypt(ca, data), Exc::Crypto::InternalError);
        ca.setParam(ParamName::ED_IV, iv);
 
        // short key
@@ -631,6 +628,9 @@ NEGATIVE_TEST_CASE(symmetricEncryptDecryptGcm)
        // no iv
        BOOST_REQUIRE_THROW(key->decrypt(ca2, encrypted), Exc::Crypto::InputParam);
 
+       // short iv
+       ca2.setParam(ParamName::ED_IV, RawBuffer(1));
+       BOOST_REQUIRE_THROW(key->decrypt(ca2, encrypted), Exc::Crypto::InternalError);
        ca2.setParam(ParamName::ED_IV, iv);
 
        // short key