#include <dpl/test/test_runner.h>
#include <ckm-common.h>
#include <ckmc/ckmc-manager.h>
+#include <ckmc/ckmc-extended.h>
#include <ckmc/ckmc-control.h>
using namespace CKM;
testImportExportValidArgs(RSA_OAEP_ALGO, 32, RSA_KEY_4096_PUB_ALIAS, nullptr, RSA_KEY_4096_PRV_ALIAS, nullptr, UNEXPORTABLE_PASS, KEY_PASSWORD);
#endif
}
+
+RUNNER_TEST(TKW_WRAP_CONCATENATED_DATA_EXPORTABLE)
+{
+ ParamListPtr params = getDefaultParams(RSA_OAEP_ALGO);
+ setParam(params, CKMC_PARAM_ED_OAEP_HASH, CKMC_HASH_SHA384);
+
+ AliasRemover removers[] = {"RSA_PRV", "RSA_PUB", "AES_KEY", "AES_KEY_IMP"};
+
+ assert_positive(ckmc_create_key_pair_rsa, 3072, "RSA_PRV", "RSA_PUB", EXPORTABLE, EXPORTABLE);
+ assert_positive(ckmc_create_key_aes, 256, "AES_KEY", EXPORTABLE);
+
+ ckmc_raw_buffer_s *data = createRandomBufferCAPI(32);
+ ckmc_raw_buffer_s *data_imp = nullptr;
+ ckmc_key_s *wrappedKey = nullptr;
+ ckmc_key_s *aesKey = nullptr;
+ ckmc_key_s *aesKeyImp = nullptr;
+
+ assert_positive(ckmc_wrap_concatenated_data,
+ params.get(),
+ "RSA_PUB",
+ nullptr,
+ "AES_KEY",
+ nullptr,
+ data,
+ &wrappedKey);
+
+ assert_positive(ckmc_unwrap_concatenated_data,
+ params.get(),
+ "RSA_PRV",
+ nullptr,
+ wrappedKey,
+ "AES_KEY_IMP",
+ 256,
+ EXPORTABLE,
+ &data_imp);
+
+ assert_positive(ckmc_get_key, "AES_KEY", nullptr, &aesKey);
+ assert_positive(ckmc_get_key, "AES_KEY_IMP", nullptr, &aesKeyImp);
+
+ assert_buffers_equal(data, data_imp);
+ assert_keys_equal(aesKey, aesKeyImp);
+
+ ckmc_buffer_free(data);
+ ckmc_buffer_free(data_imp);
+ ckmc_key_free(aesKey);
+ ckmc_key_free(aesKeyImp);
+ ckmc_key_free(wrappedKey);
+}
+
+RUNNER_TEST(TKW_WRAP_CONCATENATED_DATA_EXPORTABLE_PWD)
+{
+ ParamListPtr params = getDefaultParams(RSA_OAEP_ALGO);
+ setParam(params, CKMC_PARAM_ED_OAEP_HASH, CKMC_HASH_SHA256);
+
+ AliasRemover removers[] = {"RSA_PRV", "RSA_PUB", "AES_KEY", "AES_KEY_IMP"};
+
+ assert_positive(ckmc_create_key_pair_rsa, 2048, "RSA_PRV", "RSA_PUB", EXPORTABLE_PASS, EXPORTABLE_PASS);
+ assert_positive(ckmc_create_key_aes, 192, "AES_KEY", EXPORTABLE_PASS);
+
+ ckmc_raw_buffer_s *data = createRandomBufferCAPI(32);
+ ckmc_raw_buffer_s *data_imp = nullptr;
+ ckmc_key_s *wrappedKey = nullptr;
+ ckmc_key_s *aesKey = nullptr;
+ ckmc_key_s *aesKeyImp = nullptr;
+
+ assert_positive(ckmc_wrap_concatenated_data,
+ params.get(),
+ "RSA_PUB",
+ KEY_PASSWORD,
+ "AES_KEY",
+ KEY_PASSWORD,
+ data,
+ &wrappedKey);
+
+ assert_positive(ckmc_unwrap_concatenated_data,
+ params.get(),
+ "RSA_PRV",
+ KEY_PASSWORD,
+ wrappedKey,
+ "AES_KEY_IMP",
+ 192,
+ EXPORTABLE_PASS,
+ &data_imp);
+
+ assert_positive(ckmc_get_key, "AES_KEY", KEY_PASSWORD, &aesKey);
+ assert_positive(ckmc_get_key, "AES_KEY_IMP", KEY_PASSWORD, &aesKeyImp);
+
+ assert_buffers_equal(data, data_imp);
+ assert_keys_equal(aesKey, aesKeyImp);
+
+ ckmc_buffer_free(data);
+ ckmc_buffer_free(data_imp);
+ ckmc_key_free(aesKey);
+ ckmc_key_free(aesKeyImp);
+ ckmc_key_free(wrappedKey);
+}
+
+RUNNER_TEST(TKW_WRAP_CONCATENATED_DATA_UNEXPORTABLE)
+{
+ ParamListPtr params = getDefaultParams(RSA_OAEP_ALGO);
+ setParam(params, CKMC_PARAM_ED_OAEP_HASH, CKMC_HASH_SHA1);
+
+ AliasRemover removers[] = {"RSA_PRV", "RSA_PUB", "AES_KEY", "AES_KEY_IMP"};
+
+ assert_positive(ckmc_create_key_pair_rsa, 1024, "RSA_PRV", "RSA_PUB", UNEXPORTABLE, UNEXPORTABLE);
+ assert_positive(ckmc_create_key_aes, 128, "AES_KEY", UNEXPORTABLE);
+
+ ckmc_raw_buffer_s *data = createRandomBufferCAPI(32);
+ ckmc_raw_buffer_s *data_imp = nullptr;
+ ckmc_key_s *wrappedKey = nullptr;
+ ckmc_raw_buffer_s *encrypted = nullptr;
+ ckmc_raw_buffer_s *decrypted = nullptr;
+
+ assert_positive(ckmc_wrap_concatenated_data,
+ params.get(),
+ "RSA_PUB",
+ nullptr,
+ "AES_KEY",
+ nullptr,
+ data,
+ &wrappedKey);
+
+ assert_positive(ckmc_unwrap_concatenated_data,
+ params.get(),
+ "RSA_PRV",
+ nullptr,
+ wrappedKey,
+ "AES_KEY_IMP",
+ 128,
+ UNEXPORTABLE,
+ &data_imp);
+
+ assert_buffers_equal(data, data_imp);
+
+ params = getDefaultParams(AES_CBC_ALGO);
+ assert_positive(ckmc_encrypt_data,
+ params.get(),
+ "AES_KEY",
+ nullptr,
+ *data,
+ &encrypted);
+
+ assert_positive(ckmc_decrypt_data,
+ params.get(),
+ "AES_KEY_IMP",
+ nullptr,
+ *encrypted,
+ &decrypted);
+
+ assert_buffers_equal(data, decrypted);
+
+ ckmc_buffer_free(data);
+ ckmc_buffer_free(data_imp);
+ ckmc_buffer_free(encrypted);
+ ckmc_buffer_free(decrypted);
+ ckmc_key_free(wrappedKey);
+}
+
+RUNNER_TEST(TKW_WRAP_CONCATENATED_DATA_UNEXPORTABLE_PWD)
+{
+ ParamListPtr params = getDefaultParams(RSA_OAEP_ALGO);
+ setParam(params, CKMC_PARAM_ED_OAEP_HASH, CKMC_HASH_SHA512);
+
+ AliasRemover removers[] = {"RSA_PRV", "RSA_PUB", "AES_KEY", "AES_KEY_IMP"};
+
+ assert_positive(ckmc_create_key_pair_rsa, 4096, "RSA_PRV", "RSA_PUB", UNEXPORTABLE_PASS, UNEXPORTABLE_PASS);
+ assert_positive(ckmc_create_key_aes, 256, "AES_KEY", UNEXPORTABLE_PASS);
+
+ ckmc_raw_buffer_s *data = createRandomBufferCAPI(64);
+ ckmc_raw_buffer_s *data_imp = nullptr;
+ ckmc_key_s *wrappedKey = nullptr;
+ ckmc_raw_buffer_s *encrypted = nullptr;
+ ckmc_raw_buffer_s *decrypted = nullptr;
+
+ assert_positive(ckmc_wrap_concatenated_data,
+ params.get(),
+ "RSA_PUB",
+ KEY_PASSWORD,
+ "AES_KEY",
+ KEY_PASSWORD,
+ data,
+ &wrappedKey);
+
+ assert_positive(ckmc_unwrap_concatenated_data,
+ params.get(),
+ "RSA_PRV",
+ KEY_PASSWORD,
+ wrappedKey,
+ "AES_KEY_IMP",
+ 256,
+ UNEXPORTABLE,
+ &data_imp);
+
+ assert_buffers_equal(data, data_imp);
+
+ params = getDefaultParams(AES_CBC_ALGO);
+ assert_positive(ckmc_encrypt_data,
+ params.get(),
+ "AES_KEY",
+ KEY_PASSWORD,
+ *data,
+ &encrypted);
+
+ assert_positive(ckmc_decrypt_data,
+ params.get(),
+ "AES_KEY_IMP",
+ nullptr,
+ *encrypted,
+ &decrypted);
+
+ assert_buffers_equal(data, decrypted);
+
+ ckmc_buffer_free(data);
+ ckmc_buffer_free(data_imp);
+ ckmc_buffer_free(encrypted);
+ ckmc_buffer_free(decrypted);
+ ckmc_key_free(wrappedKey);
+}
\ No newline at end of file