Add DSA import-sign-verify test 07/318107/2
authorJakub Wlostowski <j.wlostowski@samsung.com>
Tue, 24 Sep 2024 13:05:04 +0000 (15:05 +0200)
committerJakub Wlostowski <j.wlostowski@samsung.com>
Mon, 30 Sep 2024 14:55:50 +0000 (16:55 +0200)
Change-Id: Ibe05f1602bf909ff607c588d646331ddbd440de4

src/ckm/unprivileged/sign-verify.cpp

index 693a8af10440865596e59c46b0af190344497e17..cdc966de7e406c5e2aeeba705de4442f449b2033 100644 (file)
@@ -514,6 +514,99 @@ RUNNER_TEST(TSV_0280_sign_verify_dsa_4096_pw)
 }
 #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)
 {