xref: /freebsd/crypto/openssl/test/siphash_internal_test.c (revision f25b8c9fb4f58cf61adb47d7570abe7caa6d385d)
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