summaryrefslogtreecommitdiffstats
path: root/tests/symm_signatures.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/symm_signatures.c')
-rw-r--r--tests/symm_signatures.c93
1 files changed, 93 insertions, 0 deletions
diff --git a/tests/symm_signatures.c b/tests/symm_signatures.c
index 17ca560..003d19d 100644
--- a/tests/symm_signatures.c
+++ b/tests/symm_signatures.c
@@ -138,6 +138,99 @@ main (void)
for (j = 0; j < 2; j++)
{
+ struct ncr_symm_signature_session *clone;
+
+ res = ncr_symm_signature_sign_init (sess, key);
+ assert (res == CKR_OK);
+
+ res = ncr_symm_signature_sign_update (sess, tvs[i].input,
+ tvs[i].input_size / 2);
+ assert (res == CKR_OK);
+
+ res = ncr_symm_signature_clone (&clone, sess);
+ assert (res == CKR_OK);
+
+ res = ncr_symm_signature_sign_update (sess, "", 1);
+ assert (res == CKR_OK);
+
+ dest_size = sizeof (dest);
+ res = ncr_symm_signature_sign_final (sess, dest, &dest_size);
+ assert (res == CKR_OK);
+ assert (dest_size == tvs[i].output_size);
+ assert (memcmp (dest, tvs[i].output, dest_size) != 0);
+
+ res = ncr_symm_signature_sign_update (clone, tvs[i].input
+ + tvs[i].input_size / 2,
+ tvs[i].input_size
+ - tvs[i].input_size / 2);
+ assert (res == CKR_OK);
+
+ dest_size = sizeof (dest);
+ res = ncr_symm_signature_sign_final (clone, dest, &dest_size);
+ assert (res == CKR_OK);
+ assert (dest_size == tvs[i].output_size);
+ assert (memcmp (dest, tvs[i].output, dest_size) == 0);
+
+ res = ncr_symm_signature_free (clone);
+ assert (res == CKR_OK);
+
+ for (k = 0; k < 2; k++)
+ {
+ res = ncr_symm_signature_verify_init (sess, key);
+ assert (res == CKR_OK);
+
+ res = ncr_symm_signature_verify_update (sess, tvs[i].input,
+ tvs[i].input_size / 2);
+ assert (res == CKR_OK);
+
+ res = ncr_symm_signature_clone (&clone, sess);
+ assert (res == CKR_OK);
+
+ res = ncr_symm_signature_verify_update (sess, "", 1);
+ assert (res == CKR_OK);
+
+ res = ncr_symm_signature_verify_final (sess, tvs[i].output,
+ tvs[i].output_size);
+ assert (res == CKR_SIGNATURE_INVALID);
+
+ res = ncr_symm_signature_verify_update (clone, tvs[i].input
+ + tvs[i].input_size / 2,
+ tvs[i].input_size
+ - tvs[i].input_size / 2);
+ assert (res == CKR_OK);
+
+ memcpy (dest, tvs[i].output, tvs[i].output_size);
+ dest[0] += k;
+ res = ncr_symm_signature_verify_final (clone, dest,
+ tvs[i].output_size);
+ if (k == 0)
+ assert (res == CKR_OK);
+ else
+ assert (res == CKR_SIGNATURE_INVALID);
+
+ res = ncr_symm_signature_free (clone);
+ assert (res == CKR_OK);
+ }
+ }
+
+ res = ncr_symm_key_destroy (key);
+ assert (res == CKR_OK);
+
+ res = ncr_symm_signature_free (sess);
+ assert (res == CKR_OK);
+ }
+
+ for (i = 0; i < G_N_ELEMENTS (tvs); i++)
+ {
+ res = ncr_symm_signature_alloc (&sess, tvs[i].mech);
+ assert (res == CKR_OK);
+
+ res = ncr_symm_key_create (&key, CKK_GENERIC_SECRET, tvs[i].key,
+ tvs[i].key_size);
+ assert (res == CKR_OK);
+
+ for (j = 0; j < 2; j++)
+ {
res = ncr_symm_signature_sign_init (sess, key);
assert (res == CKR_OK);