1253208Sandre/*- 2253208Sandre * Test Vectors from the SipHash reference C implementation: 3253208Sandre * 4253208Sandre * Written in 2012 by 5253208Sandre * Jean-Philippe Aumasson <jeanphilippe.aumasson@gmail.com> 6253208Sandre * Daniel J. Bernstein <djb@cr.yp.to> 7253208Sandre * 8253208Sandre * Adjusted by Andre Oppermann <andre@freebsd.org> to use function calls in 9253208Sandre * line with other hash implementations. 10253208Sandre * 11253208Sandre * To the extent possible under law, the author(s) have dedicated all copyright 12253208Sandre * and related and neighboring rights to this software to the public domain 13253208Sandre * worldwide. This software is distributed without any warranty. 14253208Sandre * 15253208Sandre * You should have received a copy of the CC0 Public Domain Dedication along with 16253208Sandre * this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>. 17253208Sandre * 18253208Sandre * SipHash-2-4 output with 19253208Sandre * k = 00 01 02 ... 20253208Sandre * and 21253208Sandre * in = (empty string) 22253208Sandre * in = 00 (1 byte) 23253208Sandre * in = 00 01 (2 bytes) 24253208Sandre * in = 00 01 02 (3 bytes) 25253208Sandre * ... 26253208Sandre * in = 00 01 02 ... 3e (63 bytes) 27253208Sandre */ 28253208Sandre#include <sys/cdefs.h> 29253208Sandre__FBSDID("$FreeBSD$"); 30253208Sandre 31253208Sandre#include <sys/param.h> 32253208Sandre#include <sys/types.h> 33253208Sandre#include <sys/systm.h> 34253208Sandre#include <sys/libkern.h> 35253208Sandre#include <sys/endian.h> 36253208Sandre 37253208Sandre#include <crypto/siphash/siphash.h> 38253208Sandre 39253208Sandreuint8_t vectors[64][8] = 40253208Sandre{ 41253208Sandre { 0x31, 0x0e, 0x0e, 0xdd, 0x47, 0xdb, 0x6f, 0x72, }, 42253208Sandre { 0xfd, 0x67, 0xdc, 0x93, 0xc5, 0x39, 0xf8, 0x74, }, 43253208Sandre { 0x5a, 0x4f, 0xa9, 0xd9, 0x09, 0x80, 0x6c, 0x0d, }, 44253208Sandre { 0x2d, 0x7e, 0xfb, 0xd7, 0x96, 0x66, 0x67, 0x85, }, 45253208Sandre { 0xb7, 0x87, 0x71, 0x27, 0xe0, 0x94, 0x27, 0xcf, }, 46253208Sandre { 0x8d, 0xa6, 0x99, 0xcd, 0x64, 0x55, 0x76, 0x18, }, 47253208Sandre { 0xce, 0xe3, 0xfe, 0x58, 0x6e, 0x46, 0xc9, 0xcb, }, 48253208Sandre { 0x37, 0xd1, 0x01, 0x8b, 0xf5, 0x00, 0x02, 0xab, }, 49253208Sandre { 0x62, 0x24, 0x93, 0x9a, 0x79, 0xf5, 0xf5, 0x93, }, 50253208Sandre { 0xb0, 0xe4, 0xa9, 0x0b, 0xdf, 0x82, 0x00, 0x9e, }, 51253208Sandre { 0xf3, 0xb9, 0xdd, 0x94, 0xc5, 0xbb, 0x5d, 0x7a, }, 52253208Sandre { 0xa7, 0xad, 0x6b, 0x22, 0x46, 0x2f, 0xb3, 0xf4, }, 53253208Sandre { 0xfb, 0xe5, 0x0e, 0x86, 0xbc, 0x8f, 0x1e, 0x75, }, 54253208Sandre { 0x90, 0x3d, 0x84, 0xc0, 0x27, 0x56, 0xea, 0x14, }, 55253208Sandre { 0xee, 0xf2, 0x7a, 0x8e, 0x90, 0xca, 0x23, 0xf7, }, 56253208Sandre { 0xe5, 0x45, 0xbe, 0x49, 0x61, 0xca, 0x29, 0xa1, }, 57253208Sandre { 0xdb, 0x9b, 0xc2, 0x57, 0x7f, 0xcc, 0x2a, 0x3f, }, 58253208Sandre { 0x94, 0x47, 0xbe, 0x2c, 0xf5, 0xe9, 0x9a, 0x69, }, 59253208Sandre { 0x9c, 0xd3, 0x8d, 0x96, 0xf0, 0xb3, 0xc1, 0x4b, }, 60253208Sandre { 0xbd, 0x61, 0x79, 0xa7, 0x1d, 0xc9, 0x6d, 0xbb, }, 61253208Sandre { 0x98, 0xee, 0xa2, 0x1a, 0xf2, 0x5c, 0xd6, 0xbe, }, 62253208Sandre { 0xc7, 0x67, 0x3b, 0x2e, 0xb0, 0xcb, 0xf2, 0xd0, }, 63253208Sandre { 0x88, 0x3e, 0xa3, 0xe3, 0x95, 0x67, 0x53, 0x93, }, 64253208Sandre { 0xc8, 0xce, 0x5c, 0xcd, 0x8c, 0x03, 0x0c, 0xa8, }, 65253208Sandre { 0x94, 0xaf, 0x49, 0xf6, 0xc6, 0x50, 0xad, 0xb8, }, 66253208Sandre { 0xea, 0xb8, 0x85, 0x8a, 0xde, 0x92, 0xe1, 0xbc, }, 67253208Sandre { 0xf3, 0x15, 0xbb, 0x5b, 0xb8, 0x35, 0xd8, 0x17, }, 68253208Sandre { 0xad, 0xcf, 0x6b, 0x07, 0x63, 0x61, 0x2e, 0x2f, }, 69253208Sandre { 0xa5, 0xc9, 0x1d, 0xa7, 0xac, 0xaa, 0x4d, 0xde, }, 70253208Sandre { 0x71, 0x65, 0x95, 0x87, 0x66, 0x50, 0xa2, 0xa6, }, 71253208Sandre { 0x28, 0xef, 0x49, 0x5c, 0x53, 0xa3, 0x87, 0xad, }, 72253208Sandre { 0x42, 0xc3, 0x41, 0xd8, 0xfa, 0x92, 0xd8, 0x32, }, 73253208Sandre { 0xce, 0x7c, 0xf2, 0x72, 0x2f, 0x51, 0x27, 0x71, }, 74253208Sandre { 0xe3, 0x78, 0x59, 0xf9, 0x46, 0x23, 0xf3, 0xa7, }, 75253208Sandre { 0x38, 0x12, 0x05, 0xbb, 0x1a, 0xb0, 0xe0, 0x12, }, 76253208Sandre { 0xae, 0x97, 0xa1, 0x0f, 0xd4, 0x34, 0xe0, 0x15, }, 77253208Sandre { 0xb4, 0xa3, 0x15, 0x08, 0xbe, 0xff, 0x4d, 0x31, }, 78253208Sandre { 0x81, 0x39, 0x62, 0x29, 0xf0, 0x90, 0x79, 0x02, }, 79253208Sandre { 0x4d, 0x0c, 0xf4, 0x9e, 0xe5, 0xd4, 0xdc, 0xca, }, 80253208Sandre { 0x5c, 0x73, 0x33, 0x6a, 0x76, 0xd8, 0xbf, 0x9a, }, 81253208Sandre { 0xd0, 0xa7, 0x04, 0x53, 0x6b, 0xa9, 0x3e, 0x0e, }, 82253208Sandre { 0x92, 0x59, 0x58, 0xfc, 0xd6, 0x42, 0x0c, 0xad, }, 83253208Sandre { 0xa9, 0x15, 0xc2, 0x9b, 0xc8, 0x06, 0x73, 0x18, }, 84253208Sandre { 0x95, 0x2b, 0x79, 0xf3, 0xbc, 0x0a, 0xa6, 0xd4, }, 85253208Sandre { 0xf2, 0x1d, 0xf2, 0xe4, 0x1d, 0x45, 0x35, 0xf9, }, 86253208Sandre { 0x87, 0x57, 0x75, 0x19, 0x04, 0x8f, 0x53, 0xa9, }, 87253208Sandre { 0x10, 0xa5, 0x6c, 0xf5, 0xdf, 0xcd, 0x9a, 0xdb, }, 88253208Sandre { 0xeb, 0x75, 0x09, 0x5c, 0xcd, 0x98, 0x6c, 0xd0, }, 89253208Sandre { 0x51, 0xa9, 0xcb, 0x9e, 0xcb, 0xa3, 0x12, 0xe6, }, 90253208Sandre { 0x96, 0xaf, 0xad, 0xfc, 0x2c, 0xe6, 0x66, 0xc7, }, 91253208Sandre { 0x72, 0xfe, 0x52, 0x97, 0x5a, 0x43, 0x64, 0xee, }, 92253208Sandre { 0x5a, 0x16, 0x45, 0xb2, 0x76, 0xd5, 0x92, 0xa1, }, 93253208Sandre { 0xb2, 0x74, 0xcb, 0x8e, 0xbf, 0x87, 0x87, 0x0a, }, 94253208Sandre { 0x6f, 0x9b, 0xb4, 0x20, 0x3d, 0xe7, 0xb3, 0x81, }, 95253208Sandre { 0xea, 0xec, 0xb2, 0xa3, 0x0b, 0x22, 0xa8, 0x7f, }, 96253208Sandre { 0x99, 0x24, 0xa4, 0x3c, 0xc1, 0x31, 0x57, 0x24, }, 97253208Sandre { 0xbd, 0x83, 0x8d, 0x3a, 0xaf, 0xbf, 0x8d, 0xb7, }, 98253208Sandre { 0x0b, 0x1a, 0x2a, 0x32, 0x65, 0xd5, 0x1a, 0xea, }, 99253208Sandre { 0x13, 0x50, 0x79, 0xa3, 0x23, 0x1c, 0xe6, 0x60, }, 100253208Sandre { 0x93, 0x2b, 0x28, 0x46, 0xe4, 0xd7, 0x06, 0x66, }, 101253208Sandre { 0xe1, 0x91, 0x5f, 0x5c, 0xb1, 0xec, 0xa4, 0x6c, }, 102253208Sandre { 0xf3, 0x25, 0x96, 0x5c, 0xa1, 0x6d, 0x62, 0x9f, }, 103253208Sandre { 0x57, 0x5f, 0xf2, 0x8e, 0x60, 0x38, 0x1b, 0xe5, }, 104253208Sandre { 0x72, 0x45, 0x06, 0xeb, 0x4c, 0x32, 0x8a, 0x95, } 105253208Sandre}; 106253208Sandre 107253208Sandre#define MAXLEN 64 108253208Sandre 109253208Sandreint 110253208SandreSipHash24_TestVectors(void) 111253208Sandre{ 112253208Sandre int i, fail = 0; 113253208Sandre uint8_t in[MAXLEN], out[8], k[16]; 114253208Sandre SIPHASH_CTX ctx; 115253208Sandre 116253208Sandre /* Initialize key. */ 117253208Sandre for (i = 0; i < 16; ++i) 118253208Sandre k[i] = i; 119253208Sandre 120253208Sandre /* Step through differnet length. */ 121253208Sandre for (i = 0; i < MAXLEN; ++i) { 122253208Sandre in[i] = i; 123253208Sandre 124253208Sandre SipHash24_Init(&ctx); 125253208Sandre SipHash_SetKey(&ctx, k); 126253208Sandre SipHash_Update(&ctx, in, i); 127253208Sandre SipHash_Final(out, &ctx); 128253208Sandre 129253208Sandre if (memcmp(out, vectors[i], 8)) 130253208Sandre#if 0 131253208Sandre printf("%i: test vector failed\n", i); 132253208Sandre else 133253208Sandre printf("%i: test vector correct\n", i); 134253208Sandre#else 135253208Sandre fail++; 136253208Sandre#endif 137253208Sandre } 138253208Sandre 139253208Sandre return ((fail == 0)); 140253208Sandre} 141