package siphash_test; import hash.siphash; fn putstr(s: str, into: []u8, off: i32) i32 = { let i: i32 = 0; for (i < s.len) { into[off + i] = s[i]; i += 1; }; return off + s.len; }; @test fn refkey_msgN() void = { // Reference SipHash-2-4 vectors: key = 0x00..0x0F, message = // 0x00..0x{n-1}. The reference test suite ships 64 vectors; // we verify a representative sample (n in {0,1,4,7,8,9,15,16, // 23,32}) which exercises both the partial-block and whole- // block paths. let key: [16]u8; let i: i32 = 0; for (i < 16) { key[i] = i: u8; i += 1; }; let msg: [40]u8; let j: i32 = 0; for (j < 40) { msg[j] = j: u8; j += 1; }; assert(!(siphash.sum24(key[0:16], msg[0:0]) != 0x726FDB47DD0E0E31u64)); assert(!(siphash.sum24(key[0:16], msg[0:1]) != 0x74F839C593DC67FDu64)); assert(!(siphash.sum24(key[0:16], msg[0:4]) != 0xCF2794E0277187B7u64)); assert(!(siphash.sum24(key[0:16], msg[0:7]) != 0xAB0200F58B01D137u64)); assert(!(siphash.sum24(key[0:16], msg[0:8]) != 0x93F5F5799A932462u64)); assert(!(siphash.sum24(key[0:16], msg[0:9]) != 0x9E0082DF0BA9E4B0u64)); assert(!(siphash.sum24(key[0:16], msg[0:15]) != 0xA129CA6149BE45E5u64)); assert(!(siphash.sum24(key[0:16], msg[0:16]) != 0x3F2ACC7F57C29BDBu64)); assert(!(siphash.sum24(key[0:16], msg[0:23]) != 0xA80C038CCD5CCEC8u64)); assert(!(siphash.sum24(key[0:16], msg[0:32]) != 0x7127512F72F27CCEu64)); }; @test fn ascii() void = { let key: [16]u8; let kstr: str = "sixteen-bytkey!?"; let i: i32 = 0; for (i < 16) { key[i] = kstr[i]; i += 1; }; let buf: [128]u8; let n: i32 = 0; n = putstr("a", buf[0:128], 0); assert(!(siphash.sum24(key[0:16], buf[0:n]) != 0xFA7E197B2F4427D4u64)); n = putstr("abc", buf[0:128], 0); assert(!(siphash.sum24(key[0:16], buf[0:n]) != 0x133D3A92BB9CA86Bu64)); n = putstr("foobar", buf[0:128], 0); assert(!(siphash.sum24(key[0:16], buf[0:n]) != 0x84D2B5169DB6D3BFu64)); n = putstr("hello world", buf[0:128], 0); assert(!(siphash.sum24(key[0:16], buf[0:n]) != 0xB0417FA523CF7B36u64)); n = putstr("The quick brown fox jumps over the lazy dog", buf[0:128], 0); assert(!(siphash.sum24(key[0:16], buf[0:n]) != 0xA4CBBF0BDB704790u64)); }; @test fn empty() void = { let key: [16]u8; let kstr: str = "sixteen-bytkey!?"; let i: i32 = 0; for (i < 16) { key[i] = kstr[i]; i += 1; }; let empty: [1]u8; assert(!(siphash.sum24(key[0:16], empty[0:0]) != 0x2A51AE0682925836u64)); };