diff options
Diffstat (limited to 'tests/symm_signatures.c')
-rw-r--r-- | tests/symm_signatures.c | 93 |
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); |