summaryrefslogtreecommitdiff
path: root/src/object.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/object.c')
-rw-r--r--src/object.c50
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
*/