From a0d4e9b887a6aa29911abc885091b758bee4bd1a Mon Sep 17 00:00:00 2001 From: Alessio Di Mauro Date: Wed, 25 Nov 2015 11:09:03 +0100 Subject: [PATCH] YKCS11: test mechanisms. --- ykcs11/tests/ykcs11_tests.c | 71 +++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/ykcs11/tests/ykcs11_tests.c b/ykcs11/tests/ykcs11_tests.c index 0bd4408..7cee7b9 100644 --- a/ykcs11/tests/ykcs11_tests.c +++ b/ykcs11/tests/ykcs11_tests.c @@ -99,6 +99,76 @@ static void test_token_info() { } +static void test_mechanism_list_and_info() { + + CK_MECHANISM_TYPE_PTR mechs; + CK_ULONG n_mechs; + CK_MECHANISM_INFO info; + CK_ULONG i; + + static const CK_MECHANISM_TYPE token_mechanisms[] = { + CKM_RSA_PKCS_KEY_PAIR_GEN, + CKM_RSA_PKCS, + CKM_RSA_PKCS_PSS, + CKM_RSA_X_509, + CKM_SHA1_RSA_PKCS, + CKM_SHA256_RSA_PKCS, + CKM_SHA384_RSA_PKCS, + CKM_SHA512_RSA_PKCS, + CKM_SHA1_RSA_PKCS_PSS, + CKM_SHA256_RSA_PKCS_PSS, + CKM_SHA384_RSA_PKCS_PSS, + CKM_SHA512_RSA_PKCS_PSS, + CKM_EC_KEY_PAIR_GEN, + CKM_ECDSA, + CKM_ECDSA_SHA1, + CKM_ECDSA_SHA256, + CKM_SHA_1, + CKM_SHA256, + CKM_SHA384, + CKM_SHA512 + }; + + static const CK_MECHANISM_INFO token_mechanism_infos[] = { // KEEP ALIGNED WITH token_mechanisms + {1024, 2048, CKF_HW | CKF_GENERATE_KEY_PAIR}, + {1024, 2048, CKF_HW | CKF_DECRYPT | CKF_SIGN}, + {1024, 2048, CKF_HW | CKF_SIGN}, + {1024, 2048, CKF_HW | CKF_DECRYPT | CKF_SIGN}, + {1024, 2048, CKF_HW | CKF_SIGN}, + {1024, 2048, CKF_HW | CKF_SIGN}, + {1024, 2048, CKF_HW | CKF_SIGN}, + {1024, 2048, CKF_HW | CKF_SIGN}, + {1024, 2048, CKF_HW | CKF_SIGN}, + {1024, 2048, CKF_HW | CKF_SIGN}, + {1024, 2048, CKF_HW | CKF_SIGN}, + {1024, 2048, CKF_HW | CKF_SIGN}, + {256, 384, CKF_HW | CKF_GENERATE_KEY_PAIR}, + {256, 384, CKF_HW | CKF_SIGN}, + {256, 384, CKF_HW | CKF_SIGN}, + {256, 384, CKF_HW | CKF_SIGN}, + {0, 0, CKF_DIGEST}, + {0, 0, CKF_DIGEST}, + {0, 0, CKF_DIGEST}, + {0, 0, CKF_DIGEST} +}; + + asrt(funcs->C_Initialize(NULL), CKR_OK, "INITIALIZE"); + + asrt(funcs->C_GetMechanismList(0, NULL, &n_mechs), CKR_OK, "GetMechanismList"); + + mechs = malloc(n_mechs * sizeof(CK_MECHANISM_TYPE)); + asrt(funcs->C_GetMechanismList(0, mechs, &n_mechs), CKR_OK, "GetMechanismList"); + + asrt(memcmp(token_mechanisms, mechs, sizeof(token_mechanisms)), 0, "CHECK MECHS"); + + for (i = 0; i < n_mechs; i++) { + asrt(funcs->C_GetMechanismInfo(0, mechs[i], &info), CKR_OK, "GET MECH INFO"); + asrt(memcmp(token_mechanism_infos + i, &info, sizeof(CK_MECHANISM_INFO)), 0, "CHECK MECH INFO"); + } + + asrt(funcs->C_Finalize(NULL), CKR_OK, "FINALIZE"); +} + int main(void) { get_functions(&funcs); @@ -108,6 +178,7 @@ int main(void) { #ifdef HW_TESTS test_initalize(); test_token_info(); + test_mechanism_list_and_info(); #endif return EXIT_SUCCESS;