summaryrefslogtreecommitdiff
path: root/regress/cred.c
diff options
context:
space:
mode:
Diffstat (limited to 'regress/cred.c')
-rw-r--r--regress/cred.c78
1 files changed, 78 insertions, 0 deletions
diff --git a/regress/cred.c b/regress/cred.c
index f8c08a4..74236e3 100644
--- a/regress/cred.c
+++ b/regress/cred.c
@@ -231,6 +231,16 @@ const unsigned char id[64] = {
231 0x34, 0xe3, 0x83, 0xe7, 0xd1, 0xbd, 0x9f, 0x25, 231 0x34, 0xe3, 0x83, 0xe7, 0xd1, 0xbd, 0x9f, 0x25,
232}; 232};
233 233
234/*
235 * Security Key By Yubico
236 * 5.1.X
237 * f8a011f3-8c0a-4d15-8006-17111f9edc7d
238*/
239const unsigned char aaguid[16] = {
240 0xf8, 0xa0, 0x11, 0xf3, 0x8c, 0x0a, 0x4d, 0x15,
241 0x80, 0x06, 0x17, 0x11, 0x1f, 0x9e, 0xdc, 0x7d,
242};
243
234const char rp_id[] = "localhost"; 244const char rp_id[] = "localhost";
235const char rp_name[] = "sweet home localhost"; 245const char rp_name[] = "sweet home localhost";
236 246
@@ -323,6 +333,7 @@ empty_cred(void)
323 assert(fido_cred_fmt(c) == NULL); 333 assert(fido_cred_fmt(c) == NULL);
324 assert(fido_cred_id_len(c) == 0); 334 assert(fido_cred_id_len(c) == 0);
325 assert(fido_cred_id_ptr(c) == NULL); 335 assert(fido_cred_id_ptr(c) == NULL);
336 assert(fido_cred_prot(c) == 0);
326 assert(fido_cred_pubkey_len(c) == 0); 337 assert(fido_cred_pubkey_len(c) == 0);
327 assert(fido_cred_pubkey_ptr(c) == NULL); 338 assert(fido_cred_pubkey_ptr(c) == NULL);
328 assert(fido_cred_rp_id(c) == NULL); 339 assert(fido_cred_rp_id(c) == NULL);
@@ -374,10 +385,13 @@ valid_cred(void)
374 assert(fido_cred_set_sig(c, sig, sizeof(sig)) == FIDO_OK); 385 assert(fido_cred_set_sig(c, sig, sizeof(sig)) == FIDO_OK);
375 assert(fido_cred_set_fmt(c, "packed") == FIDO_OK); 386 assert(fido_cred_set_fmt(c, "packed") == FIDO_OK);
376 assert(fido_cred_verify(c) == FIDO_OK); 387 assert(fido_cred_verify(c) == FIDO_OK);
388 assert(fido_cred_prot(c) == 0);
377 assert(fido_cred_pubkey_len(c) == sizeof(pubkey)); 389 assert(fido_cred_pubkey_len(c) == sizeof(pubkey));
378 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0); 390 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0);
379 assert(fido_cred_id_len(c) == sizeof(id)); 391 assert(fido_cred_id_len(c) == sizeof(id));
380 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0); 392 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0);
393 assert(fido_cred_aaguid_len(c) == sizeof(aaguid));
394 assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0);
381 free_cred(c); 395 free_cred(c);
382} 396}
383 397
@@ -400,6 +414,8 @@ no_cdh(void)
400 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0); 414 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0);
401 assert(fido_cred_id_len(c) == sizeof(id)); 415 assert(fido_cred_id_len(c) == sizeof(id));
402 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0); 416 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0);
417 assert(fido_cred_aaguid_len(c) == sizeof(aaguid));
418 assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0);
403 free_cred(c); 419 free_cred(c);
404} 420}
405 421
@@ -422,6 +438,8 @@ no_rp_id(void)
422 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0); 438 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0);
423 assert(fido_cred_id_len(c) == sizeof(id)); 439 assert(fido_cred_id_len(c) == sizeof(id));
424 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0); 440 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0);
441 assert(fido_cred_aaguid_len(c) == sizeof(aaguid));
442 assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0);
425 free_cred(c); 443 free_cred(c);
426} 444}
427 445
@@ -445,6 +463,8 @@ no_rp_name(void)
445 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0); 463 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0);
446 assert(fido_cred_id_len(c) == sizeof(id)); 464 assert(fido_cred_id_len(c) == sizeof(id));
447 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0); 465 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0);
466 assert(fido_cred_aaguid_len(c) == sizeof(aaguid));
467 assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0);
448 free_cred(c); 468 free_cred(c);
449} 469}
450 470
@@ -452,6 +472,10 @@ static void
452no_authdata(void) 472no_authdata(void)
453{ 473{
454 fido_cred_t *c; 474 fido_cred_t *c;
475 unsigned char *unset;
476
477 unset = calloc(1, sizeof(aaguid));
478 assert(unset != NULL);
455 479
456 c = alloc_cred(); 480 c = alloc_cred();
457 assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK); 481 assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK);
@@ -467,7 +491,10 @@ no_authdata(void)
467 assert(fido_cred_pubkey_ptr(c) == NULL); 491 assert(fido_cred_pubkey_ptr(c) == NULL);
468 assert(fido_cred_id_len(c) == 0); 492 assert(fido_cred_id_len(c) == 0);
469 assert(fido_cred_id_ptr(c) == NULL); 493 assert(fido_cred_id_ptr(c) == NULL);
494 assert(fido_cred_aaguid_len(c) == sizeof(aaguid));
495 assert(memcmp(fido_cred_aaguid_ptr(c), unset, sizeof(aaguid)) == 0);
470 free_cred(c); 496 free_cred(c);
497 free(unset);
471} 498}
472 499
473static void 500static void
@@ -489,6 +516,8 @@ no_x509(void)
489 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0); 516 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0);
490 assert(fido_cred_id_len(c) == sizeof(id)); 517 assert(fido_cred_id_len(c) == sizeof(id));
491 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0); 518 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0);
519 assert(fido_cred_aaguid_len(c) == sizeof(aaguid));
520 assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0);
492 free_cred(c); 521 free_cred(c);
493} 522}
494 523
@@ -511,6 +540,8 @@ no_sig(void)
511 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0); 540 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0);
512 assert(fido_cred_id_len(c) == sizeof(id)); 541 assert(fido_cred_id_len(c) == sizeof(id));
513 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0); 542 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0);
543 assert(fido_cred_aaguid_len(c) == sizeof(aaguid));
544 assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0);
514 free_cred(c); 545 free_cred(c);
515} 546}
516 547
@@ -533,6 +564,8 @@ no_fmt(void)
533 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0); 564 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0);
534 assert(fido_cred_id_len(c) == sizeof(id)); 565 assert(fido_cred_id_len(c) == sizeof(id));
535 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0); 566 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0);
567 assert(fido_cred_aaguid_len(c) == sizeof(aaguid));
568 assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0);
536 free_cred(c); 569 free_cred(c);
537} 570}
538 571
@@ -556,6 +589,8 @@ wrong_options(void)
556 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0); 589 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0);
557 assert(fido_cred_id_len(c) == sizeof(id)); 590 assert(fido_cred_id_len(c) == sizeof(id));
558 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0); 591 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0);
592 assert(fido_cred_aaguid_len(c) == sizeof(aaguid));
593 assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0);
559 free_cred(c); 594 free_cred(c);
560} 595}
561 596
@@ -585,6 +620,8 @@ junk_cdh(void)
585 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0); 620 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0);
586 assert(fido_cred_id_len(c) == sizeof(id)); 621 assert(fido_cred_id_len(c) == sizeof(id));
587 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0); 622 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0);
623 assert(fido_cred_aaguid_len(c) == sizeof(aaguid));
624 assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0);
588 free_cred(c); 625 free_cred(c);
589 free(junk); 626 free(junk);
590} 627}
@@ -609,6 +646,8 @@ junk_rp_id(void)
609 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0); 646 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0);
610 assert(fido_cred_id_len(c) == sizeof(id)); 647 assert(fido_cred_id_len(c) == sizeof(id));
611 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0); 648 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0);
649 assert(fido_cred_aaguid_len(c) == sizeof(aaguid));
650 assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0);
612 free_cred(c); 651 free_cred(c);
613} 652}
614 653
@@ -632,6 +671,8 @@ junk_rp_name(void)
632 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0); 671 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0);
633 assert(fido_cred_id_len(c) == sizeof(id)); 672 assert(fido_cred_id_len(c) == sizeof(id));
634 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0); 673 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0);
674 assert(fido_cred_aaguid_len(c) == sizeof(aaguid));
675 assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0);
635 free_cred(c); 676 free_cred(c);
636} 677}
637 678
@@ -640,12 +681,16 @@ junk_authdata(void)
640{ 681{
641 fido_cred_t *c; 682 fido_cred_t *c;
642 unsigned char *junk; 683 unsigned char *junk;
684 unsigned char *unset;
643 685
644 junk = malloc(sizeof(authdata)); 686 junk = malloc(sizeof(authdata));
645 assert(junk != NULL); 687 assert(junk != NULL);
646 memcpy(junk, authdata, sizeof(authdata)); 688 memcpy(junk, authdata, sizeof(authdata));
647 junk[0] = ~junk[0]; 689 junk[0] = ~junk[0];
648 690
691 unset = calloc(1, sizeof(aaguid));
692 assert(unset != NULL);
693
649 c = alloc_cred(); 694 c = alloc_cred();
650 assert(fido_cred_set_authdata(c, junk, 695 assert(fido_cred_set_authdata(c, junk,
651 sizeof(authdata)) == FIDO_ERR_INVALID_ARGUMENT); 696 sizeof(authdata)) == FIDO_ERR_INVALID_ARGUMENT);
@@ -663,9 +708,12 @@ junk_authdata(void)
663 assert(fido_cred_sig_ptr(c) == NULL); 708 assert(fido_cred_sig_ptr(c) == NULL);
664 assert(fido_cred_x5c_len(c) == 0); 709 assert(fido_cred_x5c_len(c) == 0);
665 assert(fido_cred_x5c_ptr(c) == NULL); 710 assert(fido_cred_x5c_ptr(c) == NULL);
711 assert(fido_cred_aaguid_len(c) == sizeof(aaguid));
712 assert(memcmp(fido_cred_aaguid_ptr(c), unset, sizeof(aaguid)) == 0);
666 assert(fido_cred_verify(c) == FIDO_ERR_INVALID_ARGUMENT); 713 assert(fido_cred_verify(c) == FIDO_ERR_INVALID_ARGUMENT);
667 free_cred(c); 714 free_cred(c);
668 free(junk); 715 free(junk);
716 free(unset);
669} 717}
670 718
671static void 719static void
@@ -694,6 +742,8 @@ junk_sig(void)
694 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0); 742 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0);
695 assert(fido_cred_id_len(c) == sizeof(id)); 743 assert(fido_cred_id_len(c) == sizeof(id));
696 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0); 744 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0);
745 assert(fido_cred_aaguid_len(c) == sizeof(aaguid));
746 assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0);
697 free_cred(c); 747 free_cred(c);
698 free(junk); 748 free(junk);
699} 749}
@@ -724,6 +774,8 @@ junk_x509(void)
724 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0); 774 assert(memcmp(fido_cred_pubkey_ptr(c), pubkey, sizeof(pubkey)) == 0);
725 assert(fido_cred_id_len(c) == sizeof(id)); 775 assert(fido_cred_id_len(c) == sizeof(id));
726 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0); 776 assert(memcmp(fido_cred_id_ptr(c), id, sizeof(id)) == 0);
777 assert(fido_cred_aaguid_len(c) == sizeof(aaguid));
778 assert(memcmp(fido_cred_aaguid_ptr(c), aaguid, sizeof(aaguid)) == 0);
727 free_cred(c); 779 free_cred(c);
728 free(junk); 780 free(junk);
729} 781}
@@ -733,6 +785,10 @@ static void
733invalid_type(void) 785invalid_type(void)
734{ 786{
735 fido_cred_t *c; 787 fido_cred_t *c;
788 unsigned char *unset;
789
790 unset = calloc(1, sizeof(aaguid));
791 assert(unset != NULL);
736 792
737 c = alloc_cred(); 793 c = alloc_cred();
738 assert(fido_cred_set_type(c, COSE_RS256) == FIDO_OK); 794 assert(fido_cred_set_type(c, COSE_RS256) == FIDO_OK);
@@ -749,7 +805,10 @@ invalid_type(void)
749 assert(fido_cred_pubkey_ptr(c) == NULL); 805 assert(fido_cred_pubkey_ptr(c) == NULL);
750 assert(fido_cred_id_len(c) == 0); 806 assert(fido_cred_id_len(c) == 0);
751 assert(fido_cred_id_ptr(c) == NULL); 807 assert(fido_cred_id_ptr(c) == NULL);
808 assert(fido_cred_aaguid_len(c) == sizeof(aaguid));
809 assert(memcmp(fido_cred_aaguid_ptr(c), unset, sizeof(aaguid)) == 0);
752 free_cred(c); 810 free_cred(c);
811 free(unset);
753} 812}
754 813
755/* cbor_serialize_alloc misuse */ 814/* cbor_serialize_alloc misuse */
@@ -789,6 +848,24 @@ unsorted_keys(void)
789 free_cred(c); 848 free_cred(c);
790} 849}
791 850
851static void
852wrong_credprot(void)
853{
854 fido_cred_t *c;
855
856 c = alloc_cred();
857 assert(fido_cred_set_type(c, COSE_ES256) == FIDO_OK);
858 assert(fido_cred_set_clientdata_hash(c, cdh, sizeof(cdh)) == FIDO_OK);
859 assert(fido_cred_set_rp(c, rp_id, rp_name) == FIDO_OK);
860 assert(fido_cred_set_x509(c, x509, sizeof(x509)) == FIDO_OK);
861 assert(fido_cred_set_sig(c, sig, sizeof(sig)) == FIDO_OK);
862 assert(fido_cred_set_fmt(c, "packed") == FIDO_OK);
863 assert(fido_cred_set_prot(c, FIDO_CRED_PROT_UV_OPTIONAL_WITH_ID) == FIDO_OK);
864 assert(fido_cred_set_authdata(c, authdata, sizeof(authdata)) == FIDO_OK);
865 assert(fido_cred_verify(c) == FIDO_ERR_INVALID_PARAM);
866 free_cred(c);
867}
868
792int 869int
793main(void) 870main(void)
794{ 871{
@@ -814,6 +891,7 @@ main(void)
814 bad_cbor_serialize(); 891 bad_cbor_serialize();
815 duplicate_keys(); 892 duplicate_keys();
816 unsorted_keys(); 893 unsorted_keys();
894 wrong_credprot();
817 895
818 exit(0); 896 exit(0);
819} 897}