diff options
Diffstat (limited to 'regress/cred.c')
-rw-r--r-- | regress/cred.c | 78 |
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 | */ | ||
239 | const unsigned char aaguid[16] = { | ||
240 | 0xf8, 0xa0, 0x11, 0xf3, 0x8c, 0x0a, 0x4d, 0x15, | ||
241 | 0x80, 0x06, 0x17, 0x11, 0x1f, 0x9e, 0xdc, 0x7d, | ||
242 | }; | ||
243 | |||
234 | const char rp_id[] = "localhost"; | 244 | const char rp_id[] = "localhost"; |
235 | const char rp_name[] = "sweet home localhost"; | 245 | const 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 | |||
452 | no_authdata(void) | 472 | no_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 | ||
473 | static void | 500 | static 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 | ||
671 | static void | 719 | static 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 | |||
733 | invalid_type(void) | 785 | invalid_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 | ||
851 | static void | ||
852 | wrong_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 | |||
792 | int | 869 | int |
793 | main(void) | 870 | main(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 | } |