summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortb <>2021-05-03 14:48:10 +0000
committertb <>2021-05-03 14:48:10 +0000
commitd5cfe661a28de69d316d458e294a061d97873010 (patch)
treef40b30efe8feb24e81c868a2d75b21b1883dac4b
parentcd2367a1bdc3eb74bc0a48a3b281cc13c056dd24 (diff)
downloadopenbsd-d5cfe661a28de69d316d458e294a061d97873010.tar.gz
openbsd-d5cfe661a28de69d316d458e294a061d97873010.tar.bz2
openbsd-d5cfe661a28de69d316d458e294a061d97873010.zip
Exercise the point conversion bit for octet string representations
of points on secp256r1.
-rw-r--r--src/regress/lib/libcrypto/ec/ec_point_conversion.c280
1 files changed, 279 insertions, 1 deletions
diff --git a/src/regress/lib/libcrypto/ec/ec_point_conversion.c b/src/regress/lib/libcrypto/ec/ec_point_conversion.c
index 9e58018009..2c15f38135 100644
--- a/src/regress/lib/libcrypto/ec/ec_point_conversion.c
+++ b/src/regress/lib/libcrypto/ec/ec_point_conversion.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ec_point_conversion.c,v 1.2 2021/05/03 14:46:18 tb Exp $ */ 1/* $OpenBSD: ec_point_conversion.c,v 1.3 2021/05/03 14:48:10 tb Exp $ */
2/* 2/*
3 * Copyright (c) 2021 Theo Buehler <tb@openbsd.org> 3 * Copyright (c) 2021 Theo Buehler <tb@openbsd.org>
4 * Copyright (c) 2021 Joel Sing <jsing@openbsd.org> 4 * Copyright (c) 2021 Joel Sing <jsing@openbsd.org>
@@ -549,6 +549,284 @@ static const struct point_conversion {
549 .octets_len = 145, 549 .octets_len = 145,
550 .valid = 0, 550 .valid = 0,
551 }, 551 },
552
553 {
554 .description = "point at infinity on secp256r1",
555 .nid = NID_X9_62_prime256v1,
556 .octets = { 0x00 },
557 .octets_len = 1,
558 .valid = 1,
559 },
560 {
561 .description = "point at infinity on secp256r1 (flipped y_bit)",
562 .nid = NID_X9_62_prime256v1,
563 .octets = { 0x01 },
564 .octets_len = 1,
565 .valid = 0,
566 },
567 {
568 .description = "zero x compressed point on secp256r1",
569 .nid = NID_X9_62_prime256v1,
570 .octets = {
571 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
572 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
573 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
574 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
575 0x00,
576 },
577 .octets_len = 33,
578 .valid = 1,
579 },
580 {
581 .description =
582 "zero x compressed point on secp256r1 (flipped y_bit)",
583 .nid = NID_X9_62_prime256v1,
584 .octets = {
585 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
586 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
587 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
588 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
589 0x00,
590 },
591 .octets_len = 33,
592 .valid = 1,
593 },
594 {
595 .description = "generic compressed point on secp256r1",
596 .nid = NID_X9_62_prime256v1,
597 .octets = {
598 0x03, 0xa3, 0x96, 0xa0, 0x42, 0x73, 0x1a, 0x8b,
599 0x90, 0xd8, 0xcb, 0xae, 0xda, 0x1b, 0x23, 0x11,
600 0x77, 0x5f, 0x6a, 0x4c, 0xb4, 0x57, 0xbf, 0xe0,
601 0x65, 0xd4, 0x09, 0x11, 0x5f, 0x54, 0xe4, 0xee,
602 0xdd,
603 },
604 .octets_len = 33,
605 .valid = 1,
606 },
607 {
608 .description =
609 "generic compressed point on secp256r1 (flipped y_bit)",
610 .nid = NID_X9_62_prime256v1,
611 .octets = {
612 0x02, 0xa3, 0x96, 0xa0, 0x42, 0x73, 0x1a, 0x8b,
613 0x90, 0xd8, 0xcb, 0xae, 0xda, 0x1b, 0x23, 0x11,
614 0x77, 0x5f, 0x6a, 0x4c, 0xb4, 0x57, 0xbf, 0xe0,
615 0x65, 0xd4, 0x09, 0x11, 0x5f, 0x54, 0xe4, 0xee,
616 0xdd,
617 },
618 .octets_len = 33,
619 .valid = 1,
620 },
621 {
622 .description = "zero x uncompressed point #1 on secp256r1",
623 .nid = NID_X9_62_prime256v1,
624 .octets = {
625 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
626 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
627 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
628 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
629 0x00, 0x66, 0x48, 0x5c, 0x78, 0x0e, 0x2f, 0x83,
630 0xd7, 0x24, 0x33, 0xbd, 0x5d, 0x84, 0xa0, 0x6b,
631 0xb6, 0x54, 0x1c, 0x2a, 0xf3, 0x1d, 0xae, 0x87,
632 0x17, 0x28, 0xbf, 0x85, 0x6a, 0x17, 0x4f, 0x93,
633 0xf4,
634 },
635 .octets_len = 65,
636 .valid = 1,
637 },
638 {
639 .description =
640 "zero x uncompressed point #1 on secp256r1 (flipped y_bit)",
641 .nid = NID_X9_62_prime256v1,
642 .octets = {
643 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
644 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
645 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
646 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
647 0x00, 0x66, 0x48, 0x5c, 0x78, 0x0e, 0x2f, 0x83,
648 0xd7, 0x24, 0x33, 0xbd, 0x5d, 0x84, 0xa0, 0x6b,
649 0xb6, 0x54, 0x1c, 0x2a, 0xf3, 0x1d, 0xae, 0x87,
650 0x17, 0x28, 0xbf, 0x85, 0x6a, 0x17, 0x4f, 0x93,
651 0xf4,
652 },
653 .octets_len = 65,
654 .valid = 0,
655 },
656 {
657 .description = "zero x uncompressed point #2 on secp256r1",
658 .nid = NID_X9_62_prime256v1,
659 .octets = {
660 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
661 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
662 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
663 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
664 0x00, 0x99, 0xb7, 0xa3, 0x86, 0xf1, 0xd0, 0x7c,
665 0x29, 0xdb, 0xcc, 0x42, 0xa2, 0x7b, 0x5f, 0x94,
666 0x49, 0xab, 0xe3, 0xd5, 0x0d, 0xe2, 0x51, 0x78,
667 0xe8, 0xd7, 0x40, 0x7a, 0x95, 0xe8, 0xb0, 0x6c,
668 0x0b,
669 },
670 .octets_len = 65,
671 .valid = 1,
672 },
673 {
674 .description =
675 "zero x uncompressed point #2 on secp256r1 (flipped y_bit)",
676 .nid = NID_X9_62_prime256v1,
677 .octets = {
678 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
679 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
680 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
681 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
682 0x00, 0x99, 0xb7, 0xa3, 0x86, 0xf1, 0xd0, 0x7c,
683 0x29, 0xdb, 0xcc, 0x42, 0xa2, 0x7b, 0x5f, 0x94,
684 0x49, 0xab, 0xe3, 0xd5, 0x0d, 0xe2, 0x51, 0x78,
685 0xe8, 0xd7, 0x40, 0x7a, 0x95, 0xe8, 0xb0, 0x6c,
686 0x0b,
687 },
688 .octets_len = 65,
689 .valid = 0,
690 },
691 {
692 .description = "generic uncompressed point on secp256r1",
693 .nid = NID_X9_62_prime256v1,
694 .octets = {
695 0x04, 0x23, 0xe5, 0x85, 0xa5, 0x4b, 0xda, 0x34,
696 0x7e, 0xe5, 0x65, 0x53, 0x7f, 0x3b, 0xce, 0xe4,
697 0x54, 0xd8, 0xa4, 0x5a, 0x53, 0x4b, 0xb0, 0x4c,
698 0xb9, 0x31, 0x09, 0x29, 0xa2, 0x03, 0x4c, 0x73,
699 0x20, 0xd2, 0xc6, 0x17, 0xca, 0xe3, 0xcf, 0xc2,
700 0xd8, 0x31, 0xfe, 0xf1, 0x7c, 0x6f, 0x9d, 0x7a,
701 0x01, 0x7c, 0x34, 0x65, 0x42, 0x05, 0xaf, 0xcc,
702 0x04, 0xa3, 0x2f, 0x44, 0x14, 0xbe, 0xd8, 0xc2,
703 0x03,
704 },
705 .octets_len = 65,
706 .valid = 1,
707 },
708 {
709 .description =
710 "generic uncompressed point on secp256r1 (flipped y_bit)",
711 .nid = NID_X9_62_prime256v1,
712 .octets = {
713 0x05, 0x23, 0xe5, 0x85, 0xa5, 0x4b, 0xda, 0x34,
714 0x7e, 0xe5, 0x65, 0x53, 0x7f, 0x3b, 0xce, 0xe4,
715 0x54, 0xd8, 0xa4, 0x5a, 0x53, 0x4b, 0xb0, 0x4c,
716 0xb9, 0x31, 0x09, 0x29, 0xa2, 0x03, 0x4c, 0x73,
717 0x20, 0xd2, 0xc6, 0x17, 0xca, 0xe3, 0xcf, 0xc2,
718 0xd8, 0x31, 0xfe, 0xf1, 0x7c, 0x6f, 0x9d, 0x7a,
719 0x01, 0x7c, 0x34, 0x65, 0x42, 0x05, 0xaf, 0xcc,
720 0x04, 0xa3, 0x2f, 0x44, 0x14, 0xbe, 0xd8, 0xc2,
721 0x03,
722 },
723 .octets_len = 65,
724 .valid = 0,
725 },
726 {
727 .description = "zero x hybrid point #1 on secp256r1",
728 .nid = NID_X9_62_prime256v1,
729 .octets = {
730 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
731 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
732 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
733 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
734 0x00, 0x66, 0x48, 0x5c, 0x78, 0x0e, 0x2f, 0x83,
735 0xd7, 0x24, 0x33, 0xbd, 0x5d, 0x84, 0xa0, 0x6b,
736 0xb6, 0x54, 0x1c, 0x2a, 0xf3, 0x1d, 0xae, 0x87,
737 0x17, 0x28, 0xbf, 0x85, 0x6a, 0x17, 0x4f, 0x93,
738 0xf4,
739 },
740 .octets_len = 65,
741 .valid = 1,
742 },
743 {
744 .description =
745 "zero x hybrid point #1 on secp256r1 (flipped y_bit)",
746 .nid = NID_X9_62_prime256v1,
747 .octets = {
748 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
749 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
750 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
751 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
752 0x00, 0x66, 0x48, 0x5c, 0x78, 0x0e, 0x2f, 0x83,
753 0xd7, 0x24, 0x33, 0xbd, 0x5d, 0x84, 0xa0, 0x6b,
754 0xb6, 0x54, 0x1c, 0x2a, 0xf3, 0x1d, 0xae, 0x87,
755 0x17, 0x28, 0xbf, 0x85, 0x6a, 0x17, 0x4f, 0x93,
756 0xf4,
757 },
758 .octets_len = 65,
759 .valid = 0,
760 },
761 {
762 .description = "zero x hybrid point #2 on secp256r1",
763 .nid = NID_X9_62_prime256v1,
764 .octets = {
765 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
766 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
767 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
768 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
769 0x00, 0x99, 0xb7, 0xa3, 0x86, 0xf1, 0xd0, 0x7c,
770 0x29, 0xdb, 0xcc, 0x42, 0xa2, 0x7b, 0x5f, 0x94,
771 0x49, 0xab, 0xe3, 0xd5, 0x0d, 0xe2, 0x51, 0x78,
772 0xe8, 0xd7, 0x40, 0x7a, 0x95, 0xe8, 0xb0, 0x6c,
773 0x0b,
774 },
775 .octets_len = 65,
776 .valid = 1,
777 },
778 {
779 .description =
780 "zero x hybrid point #2 on secp256r1 (flipped y_bit)",
781 .nid = NID_X9_62_prime256v1,
782 .octets = {
783 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
784 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
785 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
786 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
787 0x00, 0x99, 0xb7, 0xa3, 0x86, 0xf1, 0xd0, 0x7c,
788 0x29, 0xdb, 0xcc, 0x42, 0xa2, 0x7b, 0x5f, 0x94,
789 0x49, 0xab, 0xe3, 0xd5, 0x0d, 0xe2, 0x51, 0x78,
790 0xe8, 0xd7, 0x40, 0x7a, 0x95, 0xe8, 0xb0, 0x6c,
791 0x0b,
792 },
793 .octets_len = 65,
794 .valid = 0,
795 },
796 {
797 .description = "generic hybrid point on secp256r1",
798 .nid = NID_X9_62_prime256v1,
799 .octets = {
800 0x07, 0x38, 0xb2, 0x98, 0x38, 0x21, 0x6b, 0xec,
801 0x87, 0xcf, 0x50, 0xbb, 0x65, 0x11, 0x96, 0x63,
802 0xf3, 0x90, 0x64, 0xc3, 0x5c, 0x59, 0xa5, 0x6f,
803 0xaf, 0x56, 0x2a, 0x0c, 0xc0, 0x3a, 0x9b, 0x92,
804 0x85, 0x95, 0x54, 0xf3, 0x08, 0x0f, 0x78, 0x59,
805 0xa2, 0x44, 0x2f, 0x19, 0x5d, 0xd5, 0xcd, 0xf6,
806 0xa5, 0xbe, 0x2f, 0x83, 0x70, 0x94, 0xf5, 0xcd,
807 0x8c, 0x40, 0x7f, 0xd8, 0x97, 0x92, 0x14, 0xf7,
808 0xc5,
809 },
810 .octets_len = 65,
811 .valid = 1,
812 },
813 {
814 .description = "generic hybrid point on secp256r1",
815 .nid = NID_X9_62_prime256v1,
816 .octets = {
817 0x06, 0x38, 0xb2, 0x98, 0x38, 0x21, 0x6b, 0xec,
818 0x87, 0xcf, 0x50, 0xbb, 0x65, 0x11, 0x96, 0x63,
819 0xf3, 0x90, 0x64, 0xc3, 0x5c, 0x59, 0xa5, 0x6f,
820 0xaf, 0x56, 0x2a, 0x0c, 0xc0, 0x3a, 0x9b, 0x92,
821 0x85, 0x95, 0x54, 0xf3, 0x08, 0x0f, 0x78, 0x59,
822 0xa2, 0x44, 0x2f, 0x19, 0x5d, 0xd5, 0xcd, 0xf6,
823 0xa5, 0xbe, 0x2f, 0x83, 0x70, 0x94, 0xf5, 0xcd,
824 0x8c, 0x40, 0x7f, 0xd8, 0x97, 0x92, 0x14, 0xf7,
825 0xc5,
826 },
827 .octets_len = 65,
828 .valid = 0,
829 },
552}; 830};
553 831
554static const size_t N_POINT_CONVERSIONS = 832static const size_t N_POINT_CONVERSIONS =