1 /*
2 * Copyright 2016-2024 The OpenSSL Project Authors. All Rights Reserved.
3 *
4 * Licensed under the Apache License 2.0 (the "License"). You may not use
5 * this file except in compliance with the License. You can obtain a copy
6 * in the file LICENSE in the source distribution or at
7 * https://www.openssl.org/source/license.html
8 */
9
10 /* Internal tests for the siphash module */
11
12 #include <stdio.h>
13 #include <string.h>
14
15 #include <openssl/bio.h>
16 #include "testutil.h"
17 #include "crypto/siphash.h"
18 #include "internal/nelem.h"
19
20 typedef struct {
21 size_t size;
22 unsigned char data[64];
23 } SIZED_DATA;
24
25 typedef struct {
26 int idx;
27 SIZED_DATA expected;
28 } TESTDATA;
29
30 /**********************************************************************
31 *
32 * Test of siphash internal functions
33 *
34 ***/
35
36 /* From C reference: https://131002.net/siphash/ */
37
38 static TESTDATA tests[] = {
39 { 0, { 8, {
40 0x31,
41 0x0e,
42 0x0e,
43 0xdd,
44 0x47,
45 0xdb,
46 0x6f,
47 0x72,
48 } } },
49 { 1, { 8, {
50 0xfd,
51 0x67,
52 0xdc,
53 0x93,
54 0xc5,
55 0x39,
56 0xf8,
57 0x74,
58 } } },
59 { 2, { 8, {
60 0x5a,
61 0x4f,
62 0xa9,
63 0xd9,
64 0x09,
65 0x80,
66 0x6c,
67 0x0d,
68 } } },
69 { 3, { 8, {
70 0x2d,
71 0x7e,
72 0xfb,
73 0xd7,
74 0x96,
75 0x66,
76 0x67,
77 0x85,
78 } } },
79 { 4, { 8, {
80 0xb7,
81 0x87,
82 0x71,
83 0x27,
84 0xe0,
85 0x94,
86 0x27,
87 0xcf,
88 } } },
89 { 5, { 8, {
90 0x8d,
91 0xa6,
92 0x99,
93 0xcd,
94 0x64,
95 0x55,
96 0x76,
97 0x18,
98 } } },
99 { 6, { 8, {
100 0xce,
101 0xe3,
102 0xfe,
103 0x58,
104 0x6e,
105 0x46,
106 0xc9,
107 0xcb,
108 } } },
109 { 7, { 8, {
110 0x37,
111 0xd1,
112 0x01,
113 0x8b,
114 0xf5,
115 0x00,
116 0x02,
117 0xab,
118 } } },
119 { 8, { 8, {
120 0x62,
121 0x24,
122 0x93,
123 0x9a,
124 0x79,
125 0xf5,
126 0xf5,
127 0x93,
128 } } },
129 { 9, { 8, {
130 0xb0,
131 0xe4,
132 0xa9,
133 0x0b,
134 0xdf,
135 0x82,
136 0x00,
137 0x9e,
138 } } },
139 { 10, { 8, {
140 0xf3,
141 0xb9,
142 0xdd,
143 0x94,
144 0xc5,
145 0xbb,
146 0x5d,
147 0x7a,
148 } } },
149 { 11, { 8, {
150 0xa7,
151 0xad,
152 0x6b,
153 0x22,
154 0x46,
155 0x2f,
156 0xb3,
157 0xf4,
158 } } },
159 { 12, { 8, {
160 0xfb,
161 0xe5,
162 0x0e,
163 0x86,
164 0xbc,
165 0x8f,
166 0x1e,
167 0x75,
168 } } },
169 { 13, { 8, {
170 0x90,
171 0x3d,
172 0x84,
173 0xc0,
174 0x27,
175 0x56,
176 0xea,
177 0x14,
178 } } },
179 { 14, { 8, {
180 0xee,
181 0xf2,
182 0x7a,
183 0x8e,
184 0x90,
185 0xca,
186 0x23,
187 0xf7,
188 } } },
189 { 15, { 8, {
190 0xe5,
191 0x45,
192 0xbe,
193 0x49,
194 0x61,
195 0xca,
196 0x29,
197 0xa1,
198 } } },
199 { 16, { 8, {
200 0xdb,
201 0x9b,
202 0xc2,
203 0x57,
204 0x7f,
205 0xcc,
206 0x2a,
207 0x3f,
208 } } },
209 { 17, { 8, {
210 0x94,
211 0x47,
212 0xbe,
213 0x2c,
214 0xf5,
215 0xe9,
216 0x9a,
217 0x69,
218 } } },
219 { 18, { 8, {
220 0x9c,
221 0xd3,
222 0x8d,
223 0x96,
224 0xf0,
225 0xb3,
226 0xc1,
227 0x4b,
228 } } },
229 { 19, { 8, {
230 0xbd,
231 0x61,
232 0x79,
233 0xa7,
234 0x1d,
235 0xc9,
236 0x6d,
237 0xbb,
238 } } },
239 { 20, { 8, {
240 0x98,
241 0xee,
242 0xa2,
243 0x1a,
244 0xf2,
245 0x5c,
246 0xd6,
247 0xbe,
248 } } },
249 { 21, { 8, {
250 0xc7,
251 0x67,
252 0x3b,
253 0x2e,
254 0xb0,
255 0xcb,
256 0xf2,
257 0xd0,
258 } } },
259 { 22, { 8, {
260 0x88,
261 0x3e,
262 0xa3,
263 0xe3,
264 0x95,
265 0x67,
266 0x53,
267 0x93,
268 } } },
269 { 23, { 8, {
270 0xc8,
271 0xce,
272 0x5c,
273 0xcd,
274 0x8c,
275 0x03,
276 0x0c,
277 0xa8,
278 } } },
279 { 24, { 8, {
280 0x94,
281 0xaf,
282 0x49,
283 0xf6,
284 0xc6,
285 0x50,
286 0xad,
287 0xb8,
288 } } },
289 { 25, { 8, {
290 0xea,
291 0xb8,
292 0x85,
293 0x8a,
294 0xde,
295 0x92,
296 0xe1,
297 0xbc,
298 } } },
299 { 26, { 8, {
300 0xf3,
301 0x15,
302 0xbb,
303 0x5b,
304 0xb8,
305 0x35,
306 0xd8,
307 0x17,
308 } } },
309 { 27, { 8, {
310 0xad,
311 0xcf,
312 0x6b,
313 0x07,
314 0x63,
315 0x61,
316 0x2e,
317 0x2f,
318 } } },
319 { 28, { 8, {
320 0xa5,
321 0xc9,
322 0x1d,
323 0xa7,
324 0xac,
325 0xaa,
326 0x4d,
327 0xde,
328 } } },
329 { 29, { 8, {
330 0x71,
331 0x65,
332 0x95,
333 0x87,
334 0x66,
335 0x50,
336 0xa2,
337 0xa6,
338 } } },
339 { 30, { 8, {
340 0x28,
341 0xef,
342 0x49,
343 0x5c,
344 0x53,
345 0xa3,
346 0x87,
347 0xad,
348 } } },
349 { 31, { 8, {
350 0x42,
351 0xc3,
352 0x41,
353 0xd8,
354 0xfa,
355 0x92,
356 0xd8,
357 0x32,
358 } } },
359 { 32, { 8, {
360 0xce,
361 0x7c,
362 0xf2,
363 0x72,
364 0x2f,
365 0x51,
366 0x27,
367 0x71,
368 } } },
369 { 33, { 8, {
370 0xe3,
371 0x78,
372 0x59,
373 0xf9,
374 0x46,
375 0x23,
376 0xf3,
377 0xa7,
378 } } },
379 { 34, { 8, {
380 0x38,
381 0x12,
382 0x05,
383 0xbb,
384 0x1a,
385 0xb0,
386 0xe0,
387 0x12,
388 } } },
389 { 35, { 8, {
390 0xae,
391 0x97,
392 0xa1,
393 0x0f,
394 0xd4,
395 0x34,
396 0xe0,
397 0x15,
398 } } },
399 { 36, { 8, {
400 0xb4,
401 0xa3,
402 0x15,
403 0x08,
404 0xbe,
405 0xff,
406 0x4d,
407 0x31,
408 } } },
409 { 37, { 8, {
410 0x81,
411 0x39,
412 0x62,
413 0x29,
414 0xf0,
415 0x90,
416 0x79,
417 0x02,
418 } } },
419 { 38, { 8, {
420 0x4d,
421 0x0c,
422 0xf4,
423 0x9e,
424 0xe5,
425 0xd4,
426 0xdc,
427 0xca,
428 } } },
429 { 39, { 8, {
430 0x5c,
431 0x73,
432 0x33,
433 0x6a,
434 0x76,
435 0xd8,
436 0xbf,
437 0x9a,
438 } } },
439 { 40, { 8, {
440 0xd0,
441 0xa7,
442 0x04,
443 0x53,
444 0x6b,
445 0xa9,
446 0x3e,
447 0x0e,
448 } } },
449 { 41, { 8, {
450 0x92,
451 0x59,
452 0x58,
453 0xfc,
454 0xd6,
455 0x42,
456 0x0c,
457 0xad,
458 } } },
459 { 42, { 8, {
460 0xa9,
461 0x15,
462 0xc2,
463 0x9b,
464 0xc8,
465 0x06,
466 0x73,
467 0x18,
468 } } },
469 { 43, { 8, {
470 0x95,
471 0x2b,
472 0x79,
473 0xf3,
474 0xbc,
475 0x0a,
476 0xa6,
477 0xd4,
478 } } },
479 { 44, { 8, {
480 0xf2,
481 0x1d,
482 0xf2,
483 0xe4,
484 0x1d,
485 0x45,
486 0x35,
487 0xf9,
488 } } },
489 { 45, { 8, {
490 0x87,
491 0x57,
492 0x75,
493 0x19,
494 0x04,
495 0x8f,
496 0x53,
497 0xa9,
498 } } },
499 { 46, { 8, {
500 0x10,
501 0xa5,
502 0x6c,
503 0xf5,
504 0xdf,
505 0xcd,
506 0x9a,
507 0xdb,
508 } } },
509 { 47, { 8, {
510 0xeb,
511 0x75,
512 0x09,
513 0x5c,
514 0xcd,
515 0x98,
516 0x6c,
517 0xd0,
518 } } },
519 { 48, { 8, {
520 0x51,
521 0xa9,
522 0xcb,
523 0x9e,
524 0xcb,
525 0xa3,
526 0x12,
527 0xe6,
528 } } },
529 { 49, { 8, {
530 0x96,
531 0xaf,
532 0xad,
533 0xfc,
534 0x2c,
535 0xe6,
536 0x66,
537 0xc7,
538 } } },
539 { 50, { 8, {
540 0x72,
541 0xfe,
542 0x52,
543 0x97,
544 0x5a,
545 0x43,
546 0x64,
547 0xee,
548 } } },
549 { 51, { 8, {
550 0x5a,
551 0x16,
552 0x45,
553 0xb2,
554 0x76,
555 0xd5,
556 0x92,
557 0xa1,
558 } } },
559 { 52, { 8, {
560 0xb2,
561 0x74,
562 0xcb,
563 0x8e,
564 0xbf,
565 0x87,
566 0x87,
567 0x0a,
568 } } },
569 { 53, { 8, {
570 0x6f,
571 0x9b,
572 0xb4,
573 0x20,
574 0x3d,
575 0xe7,
576 0xb3,
577 0x81,
578 } } },
579 { 54, { 8, {
580 0xea,
581 0xec,
582 0xb2,
583 0xa3,
584 0x0b,
585 0x22,
586 0xa8,
587 0x7f,
588 } } },
589 { 55, { 8, {
590 0x99,
591 0x24,
592 0xa4,
593 0x3c,
594 0xc1,
595 0x31,
596 0x57,
597 0x24,
598 } } },
599 { 56, { 8, {
600 0xbd,
601 0x83,
602 0x8d,
603 0x3a,
604 0xaf,
605 0xbf,
606 0x8d,
607 0xb7,
608 } } },
609 { 57, { 8, {
610 0x0b,
611 0x1a,
612 0x2a,
613 0x32,
614 0x65,
615 0xd5,
616 0x1a,
617 0xea,
618 } } },
619 { 58, { 8, {
620 0x13,
621 0x50,
622 0x79,
623 0xa3,
624 0x23,
625 0x1c,
626 0xe6,
627 0x60,
628 } } },
629 { 59, { 8, {
630 0x93,
631 0x2b,
632 0x28,
633 0x46,
634 0xe4,
635 0xd7,
636 0x06,
637 0x66,
638 } } },
639 { 60, { 8, {
640 0xe1,
641 0x91,
642 0x5f,
643 0x5c,
644 0xb1,
645 0xec,
646 0xa4,
647 0x6c,
648 } } },
649 { 61, { 8, {
650 0xf3,
651 0x25,
652 0x96,
653 0x5c,
654 0xa1,
655 0x6d,
656 0x62,
657 0x9f,
658 } } },
659 { 62, { 8, {
660 0x57,
661 0x5f,
662 0xf2,
663 0x8e,
664 0x60,
665 0x38,
666 0x1b,
667 0xe5,
668 } } },
669 { 63, { 8, {
670 0x72,
671 0x45,
672 0x06,
673 0xeb,
674 0x4c,
675 0x32,
676 0x8a,
677 0x95,
678 } } },
679 { 0, { 16, {
680 0xa3,
681 0x81,
682 0x7f,
683 0x04,
684 0xba,
685 0x25,
686 0xa8,
687 0xe6,
688 0x6d,
689 0xf6,
690 0x72,
691 0x14,
692 0xc7,
693 0x55,
694 0x02,
695 0x93,
696 } } },
697 { 1, { 16, {
698 0xda,
699 0x87,
700 0xc1,
701 0xd8,
702 0x6b,
703 0x99,
704 0xaf,
705 0x44,
706 0x34,
707 0x76,
708 0x59,
709 0x11,
710 0x9b,
711 0x22,
712 0xfc,
713 0x45,
714 } } },
715 { 2, { 16, {
716 0x81,
717 0x77,
718 0x22,
719 0x8d,
720 0xa4,
721 0xa4,
722 0x5d,
723 0xc7,
724 0xfc,
725 0xa3,
726 0x8b,
727 0xde,
728 0xf6,
729 0x0a,
730 0xff,
731 0xe4,
732 } } },
733 { 3, { 16, {
734 0x9c,
735 0x70,
736 0xb6,
737 0x0c,
738 0x52,
739 0x67,
740 0xa9,
741 0x4e,
742 0x5f,
743 0x33,
744 0xb6,
745 0xb0,
746 0x29,
747 0x85,
748 0xed,
749 0x51,
750 } } },
751 { 4, { 16, {
752 0xf8,
753 0x81,
754 0x64,
755 0xc1,
756 0x2d,
757 0x9c,
758 0x8f,
759 0xaf,
760 0x7d,
761 0x0f,
762 0x6e,
763 0x7c,
764 0x7b,
765 0xcd,
766 0x55,
767 0x79,
768 } } },
769 { 5, { 16, {
770 0x13,
771 0x68,
772 0x87,
773 0x59,
774 0x80,
775 0x77,
776 0x6f,
777 0x88,
778 0x54,
779 0x52,
780 0x7a,
781 0x07,
782 0x69,
783 0x0e,
784 0x96,
785 0x27,
786 } } },
787 { 6, { 16, {
788 0x14,
789 0xee,
790 0xca,
791 0x33,
792 0x8b,
793 0x20,
794 0x86,
795 0x13,
796 0x48,
797 0x5e,
798 0xa0,
799 0x30,
800 0x8f,
801 0xd7,
802 0xa1,
803 0x5e,
804 } } },
805 { 7, { 16, {
806 0xa1,
807 0xf1,
808 0xeb,
809 0xbe,
810 0xd8,
811 0xdb,
812 0xc1,
813 0x53,
814 0xc0,
815 0xb8,
816 0x4a,
817 0xa6,
818 0x1f,
819 0xf0,
820 0x82,
821 0x39,
822 } } },
823 { 8, { 16, {
824 0x3b,
825 0x62,
826 0xa9,
827 0xba,
828 0x62,
829 0x58,
830 0xf5,
831 0x61,
832 0x0f,
833 0x83,
834 0xe2,
835 0x64,
836 0xf3,
837 0x14,
838 0x97,
839 0xb4,
840 } } },
841 { 9, { 16, {
842 0x26,
843 0x44,
844 0x99,
845 0x06,
846 0x0a,
847 0xd9,
848 0xba,
849 0xab,
850 0xc4,
851 0x7f,
852 0x8b,
853 0x02,
854 0xbb,
855 0x6d,
856 0x71,
857 0xed,
858 } } },
859 { 10, { 16, {
860 0x00,
861 0x11,
862 0x0d,
863 0xc3,
864 0x78,
865 0x14,
866 0x69,
867 0x56,
868 0xc9,
869 0x54,
870 0x47,
871 0xd3,
872 0xf3,
873 0xd0,
874 0xfb,
875 0xba,
876 } } },
877 { 11, { 16, {
878 0x01,
879 0x51,
880 0xc5,
881 0x68,
882 0x38,
883 0x6b,
884 0x66,
885 0x77,
886 0xa2,
887 0xb4,
888 0xdc,
889 0x6f,
890 0x81,
891 0xe5,
892 0xdc,
893 0x18,
894 } } },
895 { 12, { 16, {
896 0xd6,
897 0x26,
898 0xb2,
899 0x66,
900 0x90,
901 0x5e,
902 0xf3,
903 0x58,
904 0x82,
905 0x63,
906 0x4d,
907 0xf6,
908 0x85,
909 0x32,
910 0xc1,
911 0x25,
912 } } },
913 { 13, { 16, {
914 0x98,
915 0x69,
916 0xe2,
917 0x47,
918 0xe9,
919 0xc0,
920 0x8b,
921 0x10,
922 0xd0,
923 0x29,
924 0x93,
925 0x4f,
926 0xc4,
927 0xb9,
928 0x52,
929 0xf7,
930 } } },
931 { 14, { 16, {
932 0x31,
933 0xfc,
934 0xef,
935 0xac,
936 0x66,
937 0xd7,
938 0xde,
939 0x9c,
940 0x7e,
941 0xc7,
942 0x48,
943 0x5f,
944 0xe4,
945 0x49,
946 0x49,
947 0x02,
948 } } },
949 { 15, { 16, {
950 0x54,
951 0x93,
952 0xe9,
953 0x99,
954 0x33,
955 0xb0,
956 0xa8,
957 0x11,
958 0x7e,
959 0x08,
960 0xec,
961 0x0f,
962 0x97,
963 0xcf,
964 0xc3,
965 0xd9,
966 } } },
967 { 16, { 16, {
968 0x6e,
969 0xe2,
970 0xa4,
971 0xca,
972 0x67,
973 0xb0,
974 0x54,
975 0xbb,
976 0xfd,
977 0x33,
978 0x15,
979 0xbf,
980 0x85,
981 0x23,
982 0x05,
983 0x77,
984 } } },
985 { 17, { 16, {
986 0x47,
987 0x3d,
988 0x06,
989 0xe8,
990 0x73,
991 0x8d,
992 0xb8,
993 0x98,
994 0x54,
995 0xc0,
996 0x66,
997 0xc4,
998 0x7a,
999 0xe4,
1000 0x77,
1001 0x40,
1002 } } },
1003 { 18, { 16, {
1004 0xa4,
1005 0x26,
1006 0xe5,
1007 0xe4,
1008 0x23,
1009 0xbf,
1010 0x48,
1011 0x85,
1012 0x29,
1013 0x4d,
1014 0xa4,
1015 0x81,
1016 0xfe,
1017 0xae,
1018 0xf7,
1019 0x23,
1020 } } },
1021 { 19, { 16, {
1022 0x78,
1023 0x01,
1024 0x77,
1025 0x31,
1026 0xcf,
1027 0x65,
1028 0xfa,
1029 0xb0,
1030 0x74,
1031 0xd5,
1032 0x20,
1033 0x89,
1034 0x52,
1035 0x51,
1036 0x2e,
1037 0xb1,
1038 } } },
1039 { 20, { 16, {
1040 0x9e,
1041 0x25,
1042 0xfc,
1043 0x83,
1044 0x3f,
1045 0x22,
1046 0x90,
1047 0x73,
1048 0x3e,
1049 0x93,
1050 0x44,
1051 0xa5,
1052 0xe8,
1053 0x38,
1054 0x39,
1055 0xeb,
1056 } } },
1057 { 21, { 16, {
1058 0x56,
1059 0x8e,
1060 0x49,
1061 0x5a,
1062 0xbe,
1063 0x52,
1064 0x5a,
1065 0x21,
1066 0x8a,
1067 0x22,
1068 0x14,
1069 0xcd,
1070 0x3e,
1071 0x07,
1072 0x1d,
1073 0x12,
1074 } } },
1075 { 22, { 16, {
1076 0x4a,
1077 0x29,
1078 0xb5,
1079 0x45,
1080 0x52,
1081 0xd1,
1082 0x6b,
1083 0x9a,
1084 0x46,
1085 0x9c,
1086 0x10,
1087 0x52,
1088 0x8e,
1089 0xff,
1090 0x0a,
1091 0xae,
1092 } } },
1093 { 23, { 16, {
1094 0xc9,
1095 0xd1,
1096 0x84,
1097 0xdd,
1098 0xd5,
1099 0xa9,
1100 0xf5,
1101 0xe0,
1102 0xcf,
1103 0x8c,
1104 0xe2,
1105 0x9a,
1106 0x9a,
1107 0xbf,
1108 0x69,
1109 0x1c,
1110 } } },
1111 { 24, { 16, {
1112 0x2d,
1113 0xb4,
1114 0x79,
1115 0xae,
1116 0x78,
1117 0xbd,
1118 0x50,
1119 0xd8,
1120 0x88,
1121 0x2a,
1122 0x8a,
1123 0x17,
1124 0x8a,
1125 0x61,
1126 0x32,
1127 0xad,
1128 } } },
1129 { 25, { 16, {
1130 0x8e,
1131 0xce,
1132 0x5f,
1133 0x04,
1134 0x2d,
1135 0x5e,
1136 0x44,
1137 0x7b,
1138 0x50,
1139 0x51,
1140 0xb9,
1141 0xea,
1142 0xcb,
1143 0x8d,
1144 0x8f,
1145 0x6f,
1146 } } },
1147 { 26, { 16, {
1148 0x9c,
1149 0x0b,
1150 0x53,
1151 0xb4,
1152 0xb3,
1153 0xc3,
1154 0x07,
1155 0xe8,
1156 0x7e,
1157 0xae,
1158 0xe0,
1159 0x86,
1160 0x78,
1161 0x14,
1162 0x1f,
1163 0x66,
1164 } } },
1165 { 27, { 16, {
1166 0xab,
1167 0xf2,
1168 0x48,
1169 0xaf,
1170 0x69,
1171 0xa6,
1172 0xea,
1173 0xe4,
1174 0xbf,
1175 0xd3,
1176 0xeb,
1177 0x2f,
1178 0x12,
1179 0x9e,
1180 0xeb,
1181 0x94,
1182 } } },
1183 { 28, { 16, {
1184 0x06,
1185 0x64,
1186 0xda,
1187 0x16,
1188 0x68,
1189 0x57,
1190 0x4b,
1191 0x88,
1192 0xb9,
1193 0x35,
1194 0xf3,
1195 0x02,
1196 0x73,
1197 0x58,
1198 0xae,
1199 0xf4,
1200 } } },
1201 { 29, { 16, {
1202 0xaa,
1203 0x4b,
1204 0x9d,
1205 0xc4,
1206 0xbf,
1207 0x33,
1208 0x7d,
1209 0xe9,
1210 0x0c,
1211 0xd4,
1212 0xfd,
1213 0x3c,
1214 0x46,
1215 0x7c,
1216 0x6a,
1217 0xb7,
1218 } } },
1219 { 30, { 16, {
1220 0xea,
1221 0x5c,
1222 0x7f,
1223 0x47,
1224 0x1f,
1225 0xaf,
1226 0x6b,
1227 0xde,
1228 0x2b,
1229 0x1a,
1230 0xd7,
1231 0xd4,
1232 0x68,
1233 0x6d,
1234 0x22,
1235 0x87,
1236 } } },
1237 { 31, { 16, {
1238 0x29,
1239 0x39,
1240 0xb0,
1241 0x18,
1242 0x32,
1243 0x23,
1244 0xfa,
1245 0xfc,
1246 0x17,
1247 0x23,
1248 0xde,
1249 0x4f,
1250 0x52,
1251 0xc4,
1252 0x3d,
1253 0x35,
1254 } } },
1255 { 32, { 16, {
1256 0x7c,
1257 0x39,
1258 0x56,
1259 0xca,
1260 0x5e,
1261 0xea,
1262 0xfc,
1263 0x3e,
1264 0x36,
1265 0x3e,
1266 0x9d,
1267 0x55,
1268 0x65,
1269 0x46,
1270 0xeb,
1271 0x68,
1272 } } },
1273 { 33, { 16, {
1274 0x77,
1275 0xc6,
1276 0x07,
1277 0x71,
1278 0x46,
1279 0xf0,
1280 0x1c,
1281 0x32,
1282 0xb6,
1283 0xb6,
1284 0x9d,
1285 0x5f,
1286 0x4e,
1287 0xa9,
1288 0xff,
1289 0xcf,
1290 } } },
1291 { 34, { 16, {
1292 0x37,
1293 0xa6,
1294 0x98,
1295 0x6c,
1296 0xb8,
1297 0x84,
1298 0x7e,
1299 0xdf,
1300 0x09,
1301 0x25,
1302 0xf0,
1303 0xf1,
1304 0x30,
1305 0x9b,
1306 0x54,
1307 0xde,
1308 } } },
1309 { 35, { 16, {
1310 0xa7,
1311 0x05,
1312 0xf0,
1313 0xe6,
1314 0x9d,
1315 0xa9,
1316 0xa8,
1317 0xf9,
1318 0x07,
1319 0x24,
1320 0x1a,
1321 0x2e,
1322 0x92,
1323 0x3c,
1324 0x8c,
1325 0xc8,
1326 } } },
1327 { 36, { 16, {
1328 0x3d,
1329 0xc4,
1330 0x7d,
1331 0x1f,
1332 0x29,
1333 0xc4,
1334 0x48,
1335 0x46,
1336 0x1e,
1337 0x9e,
1338 0x76,
1339 0xed,
1340 0x90,
1341 0x4f,
1342 0x67,
1343 0x11,
1344 } } },
1345 { 37, { 16, {
1346 0x0d,
1347 0x62,
1348 0xbf,
1349 0x01,
1350 0xe6,
1351 0xfc,
1352 0x0e,
1353 0x1a,
1354 0x0d,
1355 0x3c,
1356 0x47,
1357 0x51,
1358 0xc5,
1359 0xd3,
1360 0x69,
1361 0x2b,
1362 } } },
1363 { 38, { 16, {
1364 0x8c,
1365 0x03,
1366 0x46,
1367 0x8b,
1368 0xca,
1369 0x7c,
1370 0x66,
1371 0x9e,
1372 0xe4,
1373 0xfd,
1374 0x5e,
1375 0x08,
1376 0x4b,
1377 0xbe,
1378 0xe7,
1379 0xb5,
1380 } } },
1381 { 39, { 16, {
1382 0x52,
1383 0x8a,
1384 0x5b,
1385 0xb9,
1386 0x3b,
1387 0xaf,
1388 0x2c,
1389 0x9c,
1390 0x44,
1391 0x73,
1392 0xcc,
1393 0xe5,
1394 0xd0,
1395 0xd2,
1396 0x2b,
1397 0xd9,
1398 } } },
1399 { 40, { 16, {
1400 0xdf,
1401 0x6a,
1402 0x30,
1403 0x1e,
1404 0x95,
1405 0xc9,
1406 0x5d,
1407 0xad,
1408 0x97,
1409 0xae,
1410 0x0c,
1411 0xc8,
1412 0xc6,
1413 0x91,
1414 0x3b,
1415 0xd8,
1416 } } },
1417 { 41, { 16, {
1418 0x80,
1419 0x11,
1420 0x89,
1421 0x90,
1422 0x2c,
1423 0x85,
1424 0x7f,
1425 0x39,
1426 0xe7,
1427 0x35,
1428 0x91,
1429 0x28,
1430 0x5e,
1431 0x70,
1432 0xb6,
1433 0xdb,
1434 } } },
1435 { 42, { 16, {
1436 0xe6,
1437 0x17,
1438 0x34,
1439 0x6a,
1440 0xc9,
1441 0xc2,
1442 0x31,
1443 0xbb,
1444 0x36,
1445 0x50,
1446 0xae,
1447 0x34,
1448 0xcc,
1449 0xca,
1450 0x0c,
1451 0x5b,
1452 } } },
1453 { 43, { 16, {
1454 0x27,
1455 0xd9,
1456 0x34,
1457 0x37,
1458 0xef,
1459 0xb7,
1460 0x21,
1461 0xaa,
1462 0x40,
1463 0x18,
1464 0x21,
1465 0xdc,
1466 0xec,
1467 0x5a,
1468 0xdf,
1469 0x89,
1470 } } },
1471 { 44, { 16, {
1472 0x89,
1473 0x23,
1474 0x7d,
1475 0x9d,
1476 0xed,
1477 0x9c,
1478 0x5e,
1479 0x78,
1480 0xd8,
1481 0xb1,
1482 0xc9,
1483 0xb1,
1484 0x66,
1485 0xcc,
1486 0x73,
1487 0x42,
1488 } } },
1489 { 45, { 16, {
1490 0x4a,
1491 0x6d,
1492 0x80,
1493 0x91,
1494 0xbf,
1495 0x5e,
1496 0x7d,
1497 0x65,
1498 0x11,
1499 0x89,
1500 0xfa,
1501 0x94,
1502 0xa2,
1503 0x50,
1504 0xb1,
1505 0x4c,
1506 } } },
1507 { 46, { 16, {
1508 0x0e,
1509 0x33,
1510 0xf9,
1511 0x60,
1512 0x55,
1513 0xe7,
1514 0xae,
1515 0x89,
1516 0x3f,
1517 0xfc,
1518 0x0e,
1519 0x3d,
1520 0xcf,
1521 0x49,
1522 0x29,
1523 0x02,
1524 } } },
1525 { 47, { 16, {
1526 0xe6,
1527 0x1c,
1528 0x43,
1529 0x2b,
1530 0x72,
1531 0x0b,
1532 0x19,
1533 0xd1,
1534 0x8e,
1535 0xc8,
1536 0xd8,
1537 0x4b,
1538 0xdc,
1539 0x63,
1540 0x15,
1541 0x1b,
1542 } } },
1543 { 48, { 16, {
1544 0xf7,
1545 0xe5,
1546 0xae,
1547 0xf5,
1548 0x49,
1549 0xf7,
1550 0x82,
1551 0xcf,
1552 0x37,
1553 0x90,
1554 0x55,
1555 0xa6,
1556 0x08,
1557 0x26,
1558 0x9b,
1559 0x16,
1560 } } },
1561 { 49, { 16, {
1562 0x43,
1563 0x8d,
1564 0x03,
1565 0x0f,
1566 0xd0,
1567 0xb7,
1568 0xa5,
1569 0x4f,
1570 0xa8,
1571 0x37,
1572 0xf2,
1573 0xad,
1574 0x20,
1575 0x1a,
1576 0x64,
1577 0x03,
1578 } } },
1579 { 50, { 16, {
1580 0xa5,
1581 0x90,
1582 0xd3,
1583 0xee,
1584 0x4f,
1585 0xbf,
1586 0x04,
1587 0xe3,
1588 0x24,
1589 0x7e,
1590 0x0d,
1591 0x27,
1592 0xf2,
1593 0x86,
1594 0x42,
1595 0x3f,
1596 } } },
1597 { 51, { 16, {
1598 0x5f,
1599 0xe2,
1600 0xc1,
1601 0xa1,
1602 0x72,
1603 0xfe,
1604 0x93,
1605 0xc4,
1606 0xb1,
1607 0x5c,
1608 0xd3,
1609 0x7c,
1610 0xae,
1611 0xf9,
1612 0xf5,
1613 0x38,
1614 } } },
1615 { 52, { 16, {
1616 0x2c,
1617 0x97,
1618 0x32,
1619 0x5c,
1620 0xbd,
1621 0x06,
1622 0xb3,
1623 0x6e,
1624 0xb2,
1625 0x13,
1626 0x3d,
1627 0xd0,
1628 0x8b,
1629 0x3a,
1630 0x01,
1631 0x7c,
1632 } } },
1633 { 53, { 16, {
1634 0x92,
1635 0xc8,
1636 0x14,
1637 0x22,
1638 0x7a,
1639 0x6b,
1640 0xca,
1641 0x94,
1642 0x9f,
1643 0xf0,
1644 0x65,
1645 0x9f,
1646 0x00,
1647 0x2a,
1648 0xd3,
1649 0x9e,
1650 } } },
1651 { 54, { 16, {
1652 0xdc,
1653 0xe8,
1654 0x50,
1655 0x11,
1656 0x0b,
1657 0xd8,
1658 0x32,
1659 0x8c,
1660 0xfb,
1661 0xd5,
1662 0x08,
1663 0x41,
1664 0xd6,
1665 0x91,
1666 0x1d,
1667 0x87,
1668 } } },
1669 { 55, { 16, {
1670 0x67,
1671 0xf1,
1672 0x49,
1673 0x84,
1674 0xc7,
1675 0xda,
1676 0x79,
1677 0x12,
1678 0x48,
1679 0xe3,
1680 0x2b,
1681 0xb5,
1682 0x92,
1683 0x25,
1684 0x83,
1685 0xda,
1686 } } },
1687 { 56, { 16, {
1688 0x19,
1689 0x38,
1690 0xf2,
1691 0xcf,
1692 0x72,
1693 0xd5,
1694 0x4e,
1695 0xe9,
1696 0x7e,
1697 0x94,
1698 0x16,
1699 0x6f,
1700 0xa9,
1701 0x1d,
1702 0x2a,
1703 0x36,
1704 } } },
1705 { 57, { 16, {
1706 0x74,
1707 0x48,
1708 0x1e,
1709 0x96,
1710 0x46,
1711 0xed,
1712 0x49,
1713 0xfe,
1714 0x0f,
1715 0x62,
1716 0x24,
1717 0x30,
1718 0x16,
1719 0x04,
1720 0x69,
1721 0x8e,
1722 } } },
1723 { 58, { 16, {
1724 0x57,
1725 0xfc,
1726 0xa5,
1727 0xde,
1728 0x98,
1729 0xa9,
1730 0xd6,
1731 0xd8,
1732 0x00,
1733 0x64,
1734 0x38,
1735 0xd0,
1736 0x58,
1737 0x3d,
1738 0x8a,
1739 0x1d,
1740 } } },
1741 { 59, { 16, {
1742 0x9f,
1743 0xec,
1744 0xde,
1745 0x1c,
1746 0xef,
1747 0xdc,
1748 0x1c,
1749 0xbe,
1750 0xd4,
1751 0x76,
1752 0x36,
1753 0x74,
1754 0xd9,
1755 0x57,
1756 0x53,
1757 0x59,
1758 } } },
1759 { 60, { 16, {
1760 0xe3,
1761 0x04,
1762 0x0c,
1763 0x00,
1764 0xeb,
1765 0x28,
1766 0xf1,
1767 0x53,
1768 0x66,
1769 0xca,
1770 0x73,
1771 0xcb,
1772 0xd8,
1773 0x72,
1774 0xe7,
1775 0x40,
1776 } } },
1777 { 61, { 16, {
1778 0x76,
1779 0x97,
1780 0x00,
1781 0x9a,
1782 0x6a,
1783 0x83,
1784 0x1d,
1785 0xfe,
1786 0xcc,
1787 0xa9,
1788 0x1c,
1789 0x59,
1790 0x93,
1791 0x67,
1792 0x0f,
1793 0x7a,
1794 } } },
1795 { 62, { 16, {
1796 0x58,
1797 0x53,
1798 0x54,
1799 0x23,
1800 0x21,
1801 0xf5,
1802 0x67,
1803 0xa0,
1804 0x05,
1805 0xd5,
1806 0x47,
1807 0xa4,
1808 0xf0,
1809 0x47,
1810 0x59,
1811 0xbd,
1812 } } },
1813 { 63, { 16, {
1814 0x51,
1815 0x50,
1816 0xd1,
1817 0x77,
1818 0x2f,
1819 0x50,
1820 0x83,
1821 0x4a,
1822 0x50,
1823 0x3e,
1824 0x06,
1825 0x9a,
1826 0x97,
1827 0x3f,
1828 0xbd,
1829 0x7c,
1830 } } }
1831 };
1832
test_siphash(int idx)1833 static int test_siphash(int idx)
1834 {
1835 SIPHASH siphash = {
1836 0,
1837 };
1838 TESTDATA test = tests[idx];
1839 unsigned char key[SIPHASH_KEY_SIZE];
1840 unsigned char in[64];
1841 size_t inlen = test.idx;
1842 unsigned char *expected = test.expected.data;
1843 size_t expectedlen = test.expected.size;
1844 unsigned char out[SIPHASH_MAX_DIGEST_SIZE];
1845 size_t i;
1846
1847 if (expectedlen != SIPHASH_MIN_DIGEST_SIZE && expectedlen != SIPHASH_MAX_DIGEST_SIZE) {
1848 TEST_info("size %zu vs %d and %d", expectedlen,
1849 SIPHASH_MIN_DIGEST_SIZE, SIPHASH_MAX_DIGEST_SIZE);
1850 return 0;
1851 }
1852
1853 if (!TEST_int_le(inlen, sizeof(in)))
1854 return 0;
1855
1856 /* key and in data are 00 01 02 ... */
1857 for (i = 0; i < sizeof(key); i++)
1858 key[i] = (unsigned char)i;
1859
1860 for (i = 0; i < inlen; i++)
1861 in[i] = (unsigned char)i;
1862
1863 if (!TEST_true(SipHash_set_hash_size(&siphash, expectedlen))
1864 || !TEST_true(SipHash_Init(&siphash, key, 0, 0)))
1865 return 0;
1866 SipHash_Update(&siphash, in, inlen);
1867 if (!TEST_true(SipHash_Final(&siphash, out, expectedlen))
1868 || !TEST_mem_eq(out, expectedlen, expected, expectedlen))
1869 return 0;
1870
1871 if (inlen > 16) {
1872 if (!TEST_true(SipHash_set_hash_size(&siphash, expectedlen))
1873 || !TEST_true(SipHash_Init(&siphash, key, 0, 0)))
1874 return 0;
1875 SipHash_Update(&siphash, in, 1);
1876 SipHash_Update(&siphash, in + 1, inlen - 1);
1877 if (!TEST_true(SipHash_Final(&siphash, out, expectedlen)))
1878 return 0;
1879
1880 if (!TEST_mem_eq(out, expectedlen, expected, expectedlen)) {
1881 TEST_info("SipHash test #%d/1+(N-1) failed.", idx);
1882 return 0;
1883 }
1884 }
1885
1886 if (inlen > 32) {
1887 size_t half = inlen / 2;
1888
1889 if (!TEST_true(SipHash_set_hash_size(&siphash, expectedlen))
1890 || !TEST_true(SipHash_Init(&siphash, key, 0, 0)))
1891 return 0;
1892 SipHash_Update(&siphash, in, half);
1893 SipHash_Update(&siphash, in + half, inlen - half);
1894 if (!TEST_true(SipHash_Final(&siphash, out, expectedlen)))
1895 return 0;
1896
1897 if (!TEST_mem_eq(out, expectedlen, expected, expectedlen)) {
1898 TEST_info("SipHash test #%d/2 failed.", idx);
1899 return 0;
1900 }
1901
1902 for (half = 16; half < inlen; half += 16) {
1903 if (!TEST_true(SipHash_set_hash_size(&siphash, expectedlen))
1904 || !TEST_true(SipHash_Init(&siphash, key, 0, 0)))
1905 return 0;
1906 SipHash_Update(&siphash, in, half);
1907 SipHash_Update(&siphash, in + half, inlen - half);
1908 if (!TEST_true(SipHash_Final(&siphash, out, expectedlen)))
1909 return 0;
1910
1911 if (!TEST_mem_eq(out, expectedlen, expected, expectedlen)) {
1912 TEST_info("SipHash test #%d/%zu+%zu failed.",
1913 idx, half, inlen - half);
1914 return 0;
1915 }
1916 }
1917 }
1918
1919 return 1;
1920 }
1921
test_siphash_basic(void)1922 static int test_siphash_basic(void)
1923 {
1924 SIPHASH siphash = {
1925 0,
1926 };
1927 static const unsigned char key[SIPHASH_KEY_SIZE] = { 0 };
1928 unsigned char output[SIPHASH_MAX_DIGEST_SIZE];
1929
1930 /* Use invalid hash size */
1931 return TEST_int_eq(SipHash_set_hash_size(&siphash, 4), 0)
1932 && TEST_false(SipHash_Final(&siphash, output, 0))
1933 /* Use hash size = 8 */
1934 && TEST_true(SipHash_set_hash_size(&siphash, 8))
1935 && TEST_false(SipHash_Final(&siphash, output, 8))
1936 && TEST_true(SipHash_Init(&siphash, key, 0, 0))
1937 && TEST_true(SipHash_Final(&siphash, output, 8))
1938 && TEST_int_eq(SipHash_Final(&siphash, output, 16), 0)
1939
1940 /* Use hash size = 16 */
1941 && TEST_true(SipHash_set_hash_size(&siphash, 16))
1942 && TEST_true(SipHash_Init(&siphash, key, 0, 0))
1943 && TEST_int_eq(SipHash_Final(&siphash, output, 8), 0)
1944 && TEST_true(SipHash_Final(&siphash, output, 16))
1945
1946 /* Use hash size = 0 (default = 16) */
1947 && TEST_true(SipHash_set_hash_size(&siphash, 0))
1948 && TEST_true(SipHash_Init(&siphash, key, 0, 0))
1949 && TEST_int_eq(SipHash_Final(&siphash, output, 8), 0)
1950 && TEST_true(SipHash_Final(&siphash, output, 16));
1951 }
1952
setup_tests(void)1953 int setup_tests(void)
1954 {
1955 ADD_TEST(test_siphash_basic);
1956 ADD_ALL_TESTS(test_siphash, OSSL_NELEM(tests));
1957 return 1;
1958 }
1959