Patch is attached as a text file. Please let me know if the format needs
to be delivered in another way.
EC and DSA both received the addition of SHA1 mechanism sign/verify
tests.
The readme in the testcases/crypto directory was also edited to include
reasoning behind why EC and DSA are not currently able to use NIST/RFC
supplied test vectors rather than generated vectors.
Ian Davis
IBM LTC Security
From 65db1fc08d5fbc0b3cfa943aafde1dbe455ad1f2 Mon Sep 17 00:00:00 2001
From: Ian Davis <[email protected]>
Date: Mon, 3 Aug 2015 10:48:38 -0500
Subject: [PATCH] - Added SHA1 support for generated tests within EC and DSA
testcases - Added test vector incompatibility notes to README regarding
randomized variables in EC and DSA Signed-off-by: Ian Davis
<[email protected]>
---
testcases/crypto/README | 12 ++++++++++--
testcases/crypto/dsa_func.c | 31 ++++++++++++++++++++++++-------
testcases/crypto/ec_func.c | 38 ++++++++++++++++++++++++++++++--------
3 files changed, 64 insertions(+), 17 deletions(-)
diff --git a/testcases/crypto/README b/testcases/crypto/README
index 5ea4abe..0ec31b1 100644
--- a/testcases/crypto/README
+++ b/testcases/crypto/README
@@ -41,10 +41,18 @@ digest_tests
HMAC SHA1, HMAC SHA256, HMAC SHA512, HMAC MD5
dsa_tests
- TODO - To be tested.
+ Tests sign/verify with both non hashed and SHA1 mechanisms
+
+ Note: Published test vectors cannot be used to test the fucntionality
of DSA.
+ The public/private keys can be manually inserted, but a necessary value,
+ k, for the signature is randomly generated within the algorithm.
ec_tests
- Tests regular curves.
+ Tests regular curves. With both non hashed and SHA1 mechanisms
+
+ Note: Published test vectors cannot be used to test the fucntionality
of (EC)DSA.
+ The public/private keys can be manually inserted, but a necessary value,
+ k, for the signature is randomly generated within the algorithm.
rsa_tests
Tests RSA using published test vectors and generated test data.
diff --git a/testcases/crypto/dsa_func.c b/testcases/crypto/dsa_func.c
index 6e2b7f3..5a6c6ca 100644
--- a/testcases/crypto/dsa_func.c
+++ b/testcases/crypto/dsa_func.c
@@ -115,7 +115,7 @@ CK_RV do_GenerateDSAKeyPair( void )
// the generic DSA mechanism assumes that the data to be signed has already
// been hashed by SHA-1. so the input data length must be 20 bytes
//
-CK_RV do_SignDSA( void )
+CK_RV do_SignDSA(CK_BBOOL sha1_flag)
{
CK_BYTE data1[20];
CK_BYTE signature[256];
@@ -136,8 +136,10 @@ CK_RV do_SignDSA( void )
{CKA_SUBPRIME, DSA_PUBL_SUBPRIME, sizeof(DSA_PUBL_SUBPRIME) },
{CKA_BASE, DSA_PUBL_BASE, sizeof(DSA_PUBL_BASE) }
};
-
- printf("do_SignDSA...\n");
+ if(!sha1_flag)
+ printf("do_SignDSA using CKM_DSA.\n");
+ else
+ printf("do_SignDSA using CKM_DSA_SHA1.\n");
slot_id = SLOT_ID;
flags = CKF_SERIAL_SESSION | CKF_RW_SESSION;
@@ -179,7 +181,10 @@ CK_RV do_SignDSA( void )
for (i=0; i < len1; i++)
data1[i] = i % 255;
- mech.mechanism = CKM_DSA;
+ if(!sha1_flag)
+ mech.mechanism = CKM_DSA;
+ else
+ mech.mechanism = CKM_DSA_SHA1;
mech.ulParameterLen = 0;
mech.pParameter = NULL;
@@ -227,7 +232,7 @@ CK_RV do_SignDSA( void )
} else
rc = CKR_OK;
- printf("Looks okay...\n");
+ printf("No problems encountered.\n");
session_close:
@@ -261,10 +266,22 @@ CK_RV dsa_functions()
GetSystemTime(&t2);
process_time( t1, t2 );
+ CK_BBOOL sha1_flag = 1;
+
+ GetSystemTime(&t1);
+ rc = do_SignDSA(!sha1_flag);
+ if (rc) {
+ PRINT_ERR("ERROR do_SignDSA using CKM_DSA failed, rc =
0x%lx\n", rc);
+ if (!no_stop)
+ return rc;
+ }
+ GetSystemTime(&t2);
+ process_time( t1, t2 );
+
GetSystemTime(&t1);
- rc = do_SignDSA();
+ rc = do_SignDSA(sha1_flag);
if (rc) {
- PRINT_ERR("ERROR do_SignDSA failed, rc = 0x%lx\n", rc);
+ PRINT_ERR("ERROR do_SignDSA using CKM_DSA_SHA1 failed, rc =
0x%lx\n", rc);
if (!no_stop)
return rc;
}
diff --git a/testcases/crypto/ec_func.c b/testcases/crypto/ec_func.c
index 8e30a8a..381578a 100644
--- a/testcases/crypto/ec_func.c
+++ b/testcases/crypto/ec_func.c
@@ -142,6 +142,13 @@ _signVerifyParam signVerifyInput[] = {
{ CKM_ECDSA, 64 }
};
+_signVerifyParam signVerifyInputSHA1[] = {
+ { CKM_ECDSA_SHA1, 20 },
+ { CKM_ECDSA_SHA1, 32 },
+ { CKM_ECDSA_SHA1, 48 },
+ { CKM_ECDSA_SHA1, 64 }
+};
+
CK_RV
run_GenerateSignVerifyECC(CK_SESSION_HANDLE session, CK_MECHANISM_TYPE
mechType, CK_ULONG inputlen, CK_OBJECT_HANDLE priv_key, CK_OBJECT_HANDLE
publ_key)
{
@@ -252,7 +259,7 @@ run_GenerateSignVerifyECC(CK_SESSION_HANDLE session,
CK_MECHANISM_TYPE mechType,
}
CK_RV
-run_GenerateECCKeyPairSignVerify()
+run_GenerateECCKeyPairSignVerify(CK_BBOOL sha1_flag)
{
CK_MECHANISM mech;
CK_OBJECT_HANDLE publ_key, priv_key;
@@ -310,14 +317,25 @@ run_GenerateECCKeyPairSignVerify()
}
testcase_pass("*Generate supported key pair index=%lu passed.",
i);
+ /* Note that the sizeof(signVerifyInput) =
sizeof(signVerifyInputSHA1) */
for (j = 0; j < (sizeof(signVerifyInput) /
sizeof(_signVerifyParam)); j++) {
testcase_new_assertion();
- rc = run_GenerateSignVerifyECC(
- session,
- signVerifyInput[j].mechtype,
- signVerifyInput[j].inputlen,
- priv_key,
- publ_key);
+ if(!sha1_flag){
+ rc = run_GenerateSignVerifyECC(
+ session,
+ signVerifyInput[j].mechtype,
+ signVerifyInput[j].inputlen,
+ priv_key,
+ publ_key);
+ }
+ else{
+ rc = run_GenerateSignVerifyECC(
+ session,
+ signVerifyInputSHA1[j].mechtype,
+ signVerifyInputSHA1[j].inputlen,
+ priv_key,
+ publ_key);
+ }
if (rc != 0) {
testcase_fail("run_GenerateSignVerifyECC failed
index=%lu.", j);
goto testcase_cleanup;
@@ -390,7 +408,11 @@ main(int argc, char **argv)
testcase_setup(total_assertions);
- rv = run_GenerateECCKeyPairSignVerify();
+ CK_BBOOL sha1_flag = 1;
+
+ rv = run_GenerateECCKeyPairSignVerify(!sha1_flag);
+
+ rv = run_GenerateECCKeyPairSignVerify(sha1_flag);
testcase_print_result();
------------------------------------------------------------------------------
_______________________________________________
Opencryptoki-tech mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opencryptoki-tech