}
#endif
+RUNNER_TEST(TSV_0290_import_sign_verify_dsa)
+{
+ std::string pub = "-----BEGIN PUBLIC KEY-----\n"
+ "MIIBtzCCASwGByqGSM44BAEwggEfAoGBALeveaD/EheW+ws1YuW77f344+brkEzm\n"
+ "BVfFYHr7t+jwu6nQe341SoESJG+PCgrrhy76KNDCfveiwEoWufVHnI4bYBU/ClzP\n"
+ "A3amf6c5yud45ZR/b6OiAuew6ohY0mQGnzqeio8BaCsZaJ6EziCSlkdIDJisSfPg\n"
+ "nlWHqf4AwHVdAhUA7I1JQ7sBFJ+N19w3Omu+aO8EG08CgYEAldagy/Ccxhh43cZu\n"
+ "AZQxgJLCcp1jg6NdPMdkZ2TcSijvaVxBu+gjEGOqN5Os2V6UF7S/k/rjHYmcX9ux\n"
+ "gpjkC31yTNrKyERIAFIYZtG2K7LVBUZq5Fgm7I83QBVchJ2PA7mBaugJFEhNjbhK\n"
+ "NRip5UH38le1YDZ/IiA+svFOpeoDgYQAAoGAPT91aEgwFdulzmHlvr3k+GBCE9z+\n"
+ "hq0c3FGUCtGbVOqg2KPqMBgwSb4MC0msQys4DTVZhLJI+C5eIPEHgfBMqY1ZNJdO\n"
+ "OSCQciDXnRfSqKbT6tjDTgR5jmh5bG1Q8QFeBTHCDsQHoQYWgx0nyu12lASN80rC\n"
+ "YMYCBhubtrVaLmc=\n"
+ "-----END PUBLIC KEY-----";
+
+ std::string priv = "-----BEGIN DSA PRIVATE KEY-----\n"
+ "MIIBvAIBAAKBgQC3r3mg/xIXlvsLNWLlu+39+OPm65BM5gVXxWB6+7fo8Lup0Ht+\n"
+ "NUqBEiRvjwoK64cu+ijQwn73osBKFrn1R5yOG2AVPwpczwN2pn+nOcrneOWUf2+j\n"
+ "ogLnsOqIWNJkBp86noqPAWgrGWiehM4gkpZHSAyYrEnz4J5Vh6n+AMB1XQIVAOyN\n"
+ "SUO7ARSfjdfcNzprvmjvBBtPAoGBAJXWoMvwnMYYeN3GbgGUMYCSwnKdY4OjXTzH\n"
+ "ZGdk3Eoo72lcQbvoIxBjqjeTrNlelBe0v5P64x2JnF/bsYKY5At9ckzayshESABS\n"
+ "GGbRtiuy1QVGauRYJuyPN0AVXISdjwO5gWroCRRITY24SjUYqeVB9/JXtWA2fyIg\n"
+ "PrLxTqXqAoGAPT91aEgwFdulzmHlvr3k+GBCE9z+hq0c3FGUCtGbVOqg2KPqMBgw\n"
+ "Sb4MC0msQys4DTVZhLJI+C5eIPEHgfBMqY1ZNJdOOSCQciDXnRfSqKbT6tjDTgR5\n"
+ "jmh5bG1Q8QFeBTHCDsQHoQYWgx0nyu12lASN80rCYMYCBhubtrVaLmcCFQC0IB4m\n"
+ "u1roOuaPY+Hl19BlTE2qdw==\n"
+ "-----END DSA PRIVATE KEY-----";
+
+ ckmc_raw_buffer_s msg_buff = prepare_message_buffer("message test");
+
+ CKM::Alias pub_alias = "dsa-pub1";
+ CKM::Alias prv_alias = "dsa-prv1";
+ ckmc_hash_algo_e hash_algo = CKMC_HASH_SHA1;
+ ckmc_rsa_padding_algo_e pad_algo = CKMC_PKCS1_PADDING;
+ ckmc_raw_buffer_s *signature = NULL;
+
+ ckmc_key_s pubkey;
+ pubkey.raw_key = reinterpret_cast<unsigned char *>(pub.data());
+ pubkey.key_size = pub.size();
+ pubkey.key_type = CKMC_KEY_DSA_PUBLIC;
+ pubkey.password = NULL;
+
+ ckmc_key_s prvkey;
+ prvkey.raw_key = reinterpret_cast<unsigned char *>(priv.data());
+ prvkey.key_size = priv.size();
+ prvkey.key_type = CKMC_KEY_DSA_PRIVATE;
+ prvkey.password = NULL;
+
+ /*
+ Check three scenarios:
+ - sign in TZ, verify in TZ
+ - sign in TZ, verify in SW
+ - sign in SW, verify in TZ
+ */
+ std::array<std::pair<bool, bool>, 3> policyCombinations = {{
+ {false, false}, {false, true}, {true, false}
+ }};
+
+ for (const auto& policyPair : policyCombinations)
+ {
+ ckmc_policy_s pubPolicy = {nullptr, policyPair.first};
+ ckmc_policy_s prvPolicy = {nullptr, policyPair.second};
+
+ AliasRemover removers[] = {prv_alias.c_str(), pub_alias.c_str()};
+
+ int ret = ckmc_save_key(pub_alias.c_str(), pubkey, pubPolicy);
+ RUNNER_ASSERT_MSG(ret == CKMC_ERROR_NONE, CKMCReadableError(ret));
+
+ ret = ckmc_save_key(prv_alias.c_str(), prvkey, prvPolicy);
+ RUNNER_ASSERT_MSG(ret == CKMC_ERROR_NONE, CKMCReadableError(ret));
+
+ ret = ckmc_create_signature(
+ prv_alias.c_str(),
+ nullptr,
+ msg_buff,
+ hash_algo,
+ pad_algo,
+ &signature);
+
+ RUNNER_ASSERT_MSG(ret == CKMC_ERROR_NONE, CKMCReadableError(ret));
+
+ ret = ckmc_verify_signature(
+ pub_alias.c_str(),
+ nullptr,
+ msg_buff,
+ *signature,
+ hash_algo,
+ pad_algo);
+
+ RUNNER_ASSERT_MSG(ret == CKMC_ERROR_NONE, CKMCReadableError(ret));
+ }
+}
+
// ECDSA
RUNNER_TEST(TSV_0310_sign_verify_ecdsa_PRIME192V1)
{