diff options
Diffstat (limited to 'src/object.c')
-rw-r--r-- | src/object.c | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/object.c b/src/object.c index aee8363..4252bbc 100644 --- a/src/object.c +++ b/src/object.c @@ -396,6 +396,56 @@ p11t_object_tests(void) } } +int +p11t_object_generate_pair_bad (CK_SESSION_HANDLE session, CK_MECHANISM_TYPE mech) +{ + CK_OBJECT_CLASS pub_class = CKO_PUBLIC_KEY; + CK_OBJECT_CLASS priv_class = CKO_PRIVATE_KEY; + CK_ATTRIBUTE pub_attrs[1]; + CK_ATTRIBUTE priv_attrs[1]; + CK_MECHANISM mechanism; + CK_OBJECT_HANDLE pub_key, priv_key; + CK_RV rv; + + if (!p11t_test_unexpected) + return CONTINUE; + + /* An valid mechanism */ + mechanism.mechanism = mech; + mechanism.pParameter = NULL; + mechanism.ulParameterLen = 0; + + pub_attrs[0].type = CKA_CLASS; + pub_attrs[0].pValue = &pub_class; + pub_attrs[0].ulValueLen = sizeof (pub_class); + + priv_attrs[0].type = CKA_CLASS; + priv_attrs[0].pValue = &priv_class; + priv_attrs[0].ulValueLen = sizeof (priv_class); + + P11T_SECTION ("C_GenerateKeyPair"); + + rv = (p11t_module_funcs->C_GenerateKeyPair) ((CK_ULONG)-9, &mechanism, pub_attrs, 1, priv_attrs, 1, &pub_key, &priv_key); + P11T_CHECK_RV ("Invalid Session", rv, CKR_SESSION_HANDLE_INVALID); + + rv = (p11t_module_funcs->C_GenerateKeyPair) (session, NULL, pub_attrs, 1, priv_attrs, 1, &pub_key, &priv_key); + P11T_CHECK_RV ("Missing mechanism", rv, CKR_ARGUMENTS_BAD); + + rv = (p11t_module_funcs->C_GenerateKeyPair) (session, &mechanism, NULL, 1, priv_attrs, 1, &pub_key, &priv_key); + P11T_CHECK_RV ("Missing public attributes", rv, CKR_ARGUMENTS_BAD); + + rv = (p11t_module_funcs->C_GenerateKeyPair) (session, &mechanism, pub_attrs, 1, NULL, 1, &pub_key, &priv_key); + P11T_CHECK_RV ("Missing private attributes", rv, CKR_ARGUMENTS_BAD); + + rv = (p11t_module_funcs->C_GenerateKeyPair) (session, &mechanism, pub_attrs, 1, priv_attrs, 1, NULL, &priv_key); + P11T_CHECK_RV ("Missing public key handle", rv, CKR_ARGUMENTS_BAD); + + rv = (p11t_module_funcs->C_GenerateKeyPair) (session, &mechanism, pub_attrs, 1, priv_attrs, 1, &pub_key, NULL); + P11T_CHECK_RV ("Missing private key handle", rv, CKR_ARGUMENTS_BAD); + + return CONTINUE; +} + /* ---------------------------------------------------------------------------------- * METHODS */ |