311
345
FAIL_RES (ret, error);
312
346
g_object_unref (result);
348
gp11_mechanism_unref (mech);
314
349
g_object_unref (key);
352
DEFINE_TEST(generate_key_pair)
354
GP11Attributes *pub_attrs, *prv_attrs;
356
GError *error = NULL;
357
GAsyncResult *result = NULL;
358
GP11Object *pub_key, *prv_key;
361
mech = gp11_mechanism_new_with_param (CKM_GENERATE, "generate", 9);
363
pub_attrs = gp11_attributes_new ();
364
gp11_attributes_add_ulong (pub_attrs, CKA_CLASS, CKO_PUBLIC_KEY);
365
prv_attrs = gp11_attributes_new ();
366
gp11_attributes_add_ulong (prv_attrs, CKA_CLASS, CKO_PRIVATE_KEY);
369
ret = gp11_session_generate_key_pair_full (session, mech, pub_attrs, prv_attrs,
370
&pub_key, &prv_key, NULL, &error);
371
SUCCESS_RES (ret, error);
372
g_object_unref (pub_key);
373
g_object_unref (prv_key);
377
pub_key = prv_key = NULL;
378
ret = gp11_session_generate_key_pair_full (session, mech, pub_attrs, prv_attrs,
379
&pub_key, &prv_key, NULL, &error);
380
FAIL_RES (ret, error);
381
g_assert (pub_key == NULL);
382
g_assert (prv_key == NULL);
384
/* Asynchronous one */
385
mech->type = CKM_GENERATE;
386
gp11_session_generate_key_pair_async (session, mech, pub_attrs, prv_attrs, NULL, fetch_async_result, &result);
388
g_assert (result != NULL);
389
ret = gp11_session_generate_key_pair_finish (session, result, &pub_key, &prv_key, &error);
390
SUCCESS_RES (ret, error);
391
g_object_unref (result);
392
g_object_unref (pub_key);
393
g_object_unref (prv_key);
395
/* Asynchronous failure */
398
pub_key = prv_key = NULL;
399
gp11_session_generate_key_pair_async (session, mech, pub_attrs, prv_attrs, NULL, fetch_async_result, &result);
401
g_assert (result != NULL);
402
ret = gp11_session_generate_key_pair_finish (session, result, &pub_key, &prv_key, &error);
403
FAIL_RES (ret, error);
404
g_object_unref (result);
405
g_assert (pub_key == NULL);
406
g_assert (prv_key == NULL);
408
gp11_mechanism_unref (mech);
409
gp11_attributes_unref (pub_attrs);
410
gp11_attributes_unref (prv_attrs);
413
DEFINE_TEST(wrap_key)
416
GError *error = NULL;
417
GAsyncResult *result = NULL;
418
GP11Object *wrapper, *wrapped;
422
mech = gp11_mechanism_new_with_param (CKM_WRAP, "wrap", 4);
423
wrapper = find_key (session, CKA_WRAP, 0);
424
wrapped = find_key_with_value (session, "value");
427
output = gp11_session_wrap_key (session, wrapper, CKM_WRAP, wrapped, &n_output, &error);
428
SUCCESS_RES (output, error);
430
g_assert_cmpsize (n_output, ==, 5);
431
g_assert (memcmp (output, "value", 5) == 0);
435
output = gp11_session_wrap_key_full (session, wrapper, mech, wrapped, &n_output, NULL, &error);
436
SUCCESS_RES (output, error);
437
g_assert_cmpsize (n_output, ==, 5);
438
g_assert (memcmp (output, "value", 5) == 0);
444
output = gp11_session_wrap_key_full (session, wrapper, mech, wrapped, &n_output, NULL, &error);
445
FAIL_RES (output, error);
446
g_assert_cmpsize (n_output, ==, 0);
448
/* Asynchronous one */
449
mech->type = CKM_WRAP;
450
gp11_session_wrap_key_async (session, wrapper, mech, wrapped, NULL, fetch_async_result, &result);
452
g_assert (result != NULL);
453
output = gp11_session_wrap_key_finish (session, result, &n_output, &error);
454
SUCCESS_RES (output, error);
455
g_assert_cmpsize (n_output, ==, 5);
456
g_assert (memcmp (output, "value", 5) == 0);
457
g_object_unref (result);
460
/* Asynchronous failure */
464
gp11_session_wrap_key_async (session, wrapper, mech, wrapped, NULL, fetch_async_result, &result);
466
g_assert (result != NULL);
467
output = gp11_session_wrap_key_finish (session, result, &n_output, &error);
468
FAIL_RES (output, error);
469
g_assert_cmpsize (n_output, ==, 0);
470
g_object_unref (result);
472
g_object_unref (wrapper);
473
g_object_unref (wrapped);
474
gp11_mechanism_unref (mech);
477
DEFINE_TEST(unwrap_key)
480
GError *error = NULL;
481
GAsyncResult *result = NULL;
482
GP11Object *wrapper, *unwrapped;
483
GP11Attributes *attrs;
485
mech = gp11_mechanism_new_with_param (CKM_WRAP, "wrap", 4);
486
wrapper = find_key (session, CKA_UNWRAP, 0);
487
attrs = gp11_attributes_newv (CKA_CLASS, GP11_ULONG, CKO_SECRET_KEY, GP11_INVALID);
490
unwrapped = gp11_session_unwrap_key (session, wrapper, CKM_WRAP, "special", 7, &error,
491
CKA_CLASS, GP11_ULONG, CKO_SECRET_KEY, GP11_INVALID);
492
SUCCESS_RES (unwrapped, error);
493
g_assert (GP11_IS_OBJECT (unwrapped));
494
check_key_with_value (session, unwrapped, CKO_SECRET_KEY, "special");
495
g_object_unref (unwrapped);
498
unwrapped = gp11_session_unwrap_key_full (session, wrapper, mech, "special", 7, attrs, NULL, &error);
499
SUCCESS_RES (unwrapped, error);
500
g_assert (GP11_IS_OBJECT (unwrapped));
501
check_key_with_value (session, unwrapped, CKO_SECRET_KEY, "special");
502
g_object_unref (unwrapped);
506
unwrapped = gp11_session_unwrap_key_full (session, wrapper, mech, "special", 7, attrs, NULL, &error);
507
FAIL_RES (unwrapped, error);
509
/* Asynchronous one */
510
mech->type = CKM_WRAP;
511
gp11_session_unwrap_key_async (session, wrapper, mech, "special", 7, attrs, NULL, fetch_async_result, &result);
513
g_assert (result != NULL);
514
unwrapped = gp11_session_unwrap_key_finish (session, result, &error);
515
SUCCESS_RES (unwrapped, error);
516
g_assert (GP11_IS_OBJECT (unwrapped));
517
check_key_with_value (session, unwrapped, CKO_SECRET_KEY, "special");
518
g_object_unref (unwrapped);
519
g_object_unref (result);
521
/* Asynchronous failure */
524
gp11_session_unwrap_key_async (session, wrapper, mech, "special", 6, attrs, NULL, fetch_async_result, &result);
526
g_assert (result != NULL);
527
unwrapped = gp11_session_unwrap_key_finish (session, result, &error);
528
FAIL_RES (unwrapped, error);
529
g_object_unref (result);
531
g_object_unref (wrapper);
532
gp11_attributes_unref (attrs);
533
gp11_mechanism_unref (mech);
536
DEFINE_TEST(derive_key)
539
GError *error = NULL;
540
GAsyncResult *result = NULL;
541
GP11Object *wrapper, *derived;
542
GP11Attributes *attrs;
544
mech = gp11_mechanism_new_with_param (CKM_DERIVE, "derive", 6);
545
wrapper = find_key (session, CKA_DERIVE, 0);
546
attrs = gp11_attributes_newv (CKA_CLASS, GP11_ULONG, CKO_SECRET_KEY, GP11_INVALID);
549
derived = gp11_session_derive_key (session, wrapper, CKM_DERIVE, &error,
550
CKA_CLASS, GP11_ULONG, CKO_SECRET_KEY, GP11_INVALID);
551
SUCCESS_RES (derived, error);
552
g_assert (GP11_IS_OBJECT (derived));
553
g_printerr ("derived is: %lu", gp11_object_get_handle (derived));
554
check_key_with_value (session, derived, CKO_SECRET_KEY, "derived");
555
g_object_unref (derived);
558
derived = gp11_session_derive_key_full (session, wrapper, mech, attrs, NULL, &error);
559
SUCCESS_RES (derived, error);
560
g_assert (GP11_IS_OBJECT (derived));
561
check_key_with_value (session, derived, CKO_SECRET_KEY, "derived");
562
g_object_unref (derived);
566
derived = gp11_session_derive_key_full (session, wrapper, mech, attrs, NULL, &error);
567
FAIL_RES (derived, error);
569
/* Asynchronous one */
570
mech->type = CKM_DERIVE;
571
gp11_session_derive_key_async (session, wrapper, mech, attrs, NULL, fetch_async_result, &result);
573
g_assert (result != NULL);
574
derived = gp11_session_derive_key_finish (session, result, &error);
575
SUCCESS_RES (derived, error);
576
g_assert (GP11_IS_OBJECT (derived));
577
check_key_with_value (session, derived, CKO_SECRET_KEY, "derived");
578
g_object_unref (derived);
579
g_object_unref (result);
581
/* Asynchronous failure */
584
gp11_session_derive_key_async (session, wrapper, mech, attrs, NULL, fetch_async_result, &result);
586
g_assert (result != NULL);
587
derived = gp11_session_derive_key_finish (session, result, &error);
588
FAIL_RES (derived, error);
589
g_object_unref (result);
591
g_object_unref (wrapper);
592
gp11_attributes_unref (attrs);
593
gp11_mechanism_unref (mech);