var data = {lines:[ {"lineNum":" 1","line":"// Siphash"}, {"lineNum":" 2","line":"//"}, {"lineNum":" 3","line":"// SipHash is a moderately fast, non-cryptographic keyed hash function designed for resistance"}, {"lineNum":" 4","line":"// against hash flooding DoS attacks."}, {"lineNum":" 5","line":"//"}, {"lineNum":" 6","line":"// https://131002.net/siphash/"}, {"lineNum":" 7","line":""}, {"lineNum":" 8","line":"const std = @import(\"../std.zig\");"}, {"lineNum":" 9","line":"const assert = std.debug.assert;"}, {"lineNum":" 10","line":"const testing = std.testing;"}, {"lineNum":" 11","line":"const math = std.math;"}, {"lineNum":" 12","line":"const mem = std.mem;"}, {"lineNum":" 13","line":""}, {"lineNum":" 14","line":"const Endian = std.builtin.Endian;"}, {"lineNum":" 15","line":""}, {"lineNum":" 16","line":"pub fn SipHash64(comptime c_rounds: usize, comptime d_rounds: usize) type {"}, {"lineNum":" 17","line":" return SipHash(u64, c_rounds, d_rounds);"}, {"lineNum":" 18","line":"}"}, {"lineNum":" 19","line":""}, {"lineNum":" 20","line":"pub fn SipHash128(comptime c_rounds: usize, comptime d_rounds: usize) type {"}, {"lineNum":" 21","line":" return SipHash(u128, c_rounds, d_rounds);"}, {"lineNum":" 22","line":"}"}, {"lineNum":" 23","line":""}, {"lineNum":" 24","line":"fn SipHashStateless(comptime T: type, comptime c_rounds: usize, comptime d_rounds: usize) type {"}, {"lineNum":" 25","line":" assert(T == u64 or T == u128);"}, {"lineNum":" 26","line":" assert(c_rounds > 0 and d_rounds > 0);"}, {"lineNum":" 27","line":""}, {"lineNum":" 28","line":" return struct {"}, {"lineNum":" 29","line":" const Self = @This();"}, {"lineNum":" 30","line":" const digest_size = 64;"}, {"lineNum":" 31","line":" const block_size = 64;"}, {"lineNum":" 32","line":""}, {"lineNum":" 33","line":" v0: u64,"}, {"lineNum":" 34","line":" v1: u64,"}, {"lineNum":" 35","line":" v2: u64,"}, {"lineNum":" 36","line":" v3: u64,"}, {"lineNum":" 37","line":" msg_len: u8,"}, {"lineNum":" 38","line":""}, {"lineNum":" 39","line":" pub fn init(key: []const u8) Self {","class":"lineCov","hits":"2","order":"18666","possible_hits":"2",}, {"lineNum":" 40","line":" assert(key.len >= 16);","class":"lineCov","hits":"2","order":"18667","possible_hits":"2",}, {"lineNum":" 41","line":""}, {"lineNum":" 42","line":" const k0 = mem.readIntLittle(u64, key[0..8]);","class":"lineCov","hits":"2","order":"18668","possible_hits":"2",}, {"lineNum":" 43","line":" const k1 = mem.readIntLittle(u64, key[8..16]);","class":"lineCov","hits":"2","order":"18669","possible_hits":"2",}, {"lineNum":" 44","line":""}, {"lineNum":" 45","line":" var d = Self{"}, {"lineNum":" 46","line":" .v0 = k0 ^ 0x736f6d6570736575,","class":"lineCov","hits":"2","order":"18670","possible_hits":"2",}, {"lineNum":" 47","line":" .v1 = k1 ^ 0x646f72616e646f6d,","class":"lineCov","hits":"2","order":"18671","possible_hits":"2",}, {"lineNum":" 48","line":" .v2 = k0 ^ 0x6c7967656e657261,","class":"lineCov","hits":"2","order":"18672","possible_hits":"2",}, {"lineNum":" 49","line":" .v3 = k1 ^ 0x7465646279746573,","class":"lineCov","hits":"2","order":"18673","possible_hits":"2",}, {"lineNum":" 50","line":" .msg_len = 0,","class":"lineCov","hits":"2","order":"18674","possible_hits":"2",}, {"lineNum":" 51","line":" };"}, {"lineNum":" 52","line":""}, {"lineNum":" 53","line":" if (T == u128) {"}, {"lineNum":" 54","line":" d.v1 ^= 0xee;","class":"lineCov","hits":"1","order":"18719","possible_hits":"1",}, {"lineNum":" 55","line":" }"}, {"lineNum":" 56","line":""}, {"lineNum":" 57","line":" return d;","class":"lineCov","hits":"2","order":"18675","possible_hits":"2",}, {"lineNum":" 58","line":" }"}, {"lineNum":" 59","line":""}, {"lineNum":" 60","line":" pub fn update(self: *Self, b: []const u8) void {","class":"lineCov","hits":"2","order":"18747","possible_hits":"2",}, {"lineNum":" 61","line":" std.debug.assert(b.len % 8 == 0);","class":"linePartCov","hits":"4","order":"18677","possible_hits":"5",}, {"lineNum":" 62","line":""}, {"lineNum":" 63","line":" var off: usize = 0;","class":"lineCov","hits":"3","order":"18678","possible_hits":"3",}, {"lineNum":" 64","line":" while (off < b.len) : (off += 8) {","class":"lineCov","hits":"7","order":"18679","possible_hits":"7",}, {"lineNum":" 65","line":" @call(.{ .modifier = .always_inline }, self.round, .{b[off .. off + 8]});","class":"linePartCov","hits":"3","order":"18712","possible_hits":"4",}, {"lineNum":" 66","line":" }"}, {"lineNum":" 67","line":""}, {"lineNum":" 68","line":" self.msg_len +%= @truncate(u8, b.len);","class":"lineCov","hits":"3","order":"18680","possible_hits":"3",}, {"lineNum":" 69","line":" }"}, {"lineNum":" 70","line":""}, {"lineNum":" 71","line":" pub fn final(self: *Self, b: []const u8) T {","class":"lineCov","hits":"1","order":"18757","possible_hits":"1",}, {"lineNum":" 72","line":" std.debug.assert(b.len < 8);","class":"lineCov","hits":"3","order":"18682","possible_hits":"3",}, {"lineNum":" 73","line":""}, {"lineNum":" 74","line":" self.msg_len +%= @truncate(u8, b.len);","class":"lineCov","hits":"3","order":"18683","possible_hits":"3",}, {"lineNum":" 75","line":""}, {"lineNum":" 76","line":" var buf = [_]u8{0} ** 8;","class":"lineCov","hits":"3","order":"18684","possible_hits":"3",}, {"lineNum":" 77","line":" mem.copy(u8, buf[0..], b[0..]);","class":"lineCov","hits":"3","order":"18685","possible_hits":"3",}, {"lineNum":" 78","line":" buf[7] = self.msg_len;","class":"lineCov","hits":"3","order":"18686","possible_hits":"3",}, {"lineNum":" 79","line":" self.round(buf[0..]);","class":"lineCov","hits":"3","order":"18687","possible_hits":"3",}, {"lineNum":" 80","line":""}, {"lineNum":" 81","line":" if (T == u128) {"}, {"lineNum":" 82","line":" self.v2 ^= 0xee;","class":"lineCov","hits":"1","order":"18720","possible_hits":"1",}, {"lineNum":" 83","line":" } else {"}, {"lineNum":" 84","line":" self.v2 ^= 0xff;","class":"lineCov","hits":"2","order":"18708","possible_hits":"2",}, {"lineNum":" 85","line":" }"}, {"lineNum":" 86","line":""}, {"lineNum":" 87","line":" // TODO this is a workaround, should be able to supply the value without a separate variable"}, {"lineNum":" 88","line":" const inl = std.builtin.CallOptions{ .modifier = .always_inline };"}, {"lineNum":" 89","line":""}, {"lineNum":" 90","line":" comptime var i: usize = 0;"}, {"lineNum":" 91","line":" inline while (i < d_rounds) : (i += 1) {"}, {"lineNum":" 92","line":" @call(inl, sipRound, .{self});","class":"lineCov","hits":"12","order":"18709","possible_hits":"12",}, {"lineNum":" 93","line":" }"}, {"lineNum":" 94","line":""}, {"lineNum":" 95","line":" const b1 = self.v0 ^ self.v1 ^ self.v2 ^ self.v3;","class":"lineCov","hits":"3","order":"18710","possible_hits":"3",}, {"lineNum":" 96","line":" if (T == u64) {"}, {"lineNum":" 97","line":" return b1;","class":"lineCov","hits":"2","order":"18711","possible_hits":"2",}, {"lineNum":" 98","line":" }"}, {"lineNum":" 99","line":""}, {"lineNum":" 100","line":" self.v1 ^= 0xdd;","class":"lineCov","hits":"1","order":"18721","possible_hits":"1",}, {"lineNum":" 101","line":""}, {"lineNum":" 102","line":" comptime var j: usize = 0;"}, {"lineNum":" 103","line":" inline while (j < d_rounds) : (j += 1) {"}, {"lineNum":" 104","line":" @call(inl, sipRound, .{self});","class":"lineCov","hits":"4","order":"18722","possible_hits":"4",}, {"lineNum":" 105","line":" }"}, {"lineNum":" 106","line":""}, {"lineNum":" 107","line":" const b2 = self.v0 ^ self.v1 ^ self.v2 ^ self.v3;","class":"lineCov","hits":"1","order":"18723","possible_hits":"1",}, {"lineNum":" 108","line":" return (@as(u128, b2) << 64) | b1;","class":"lineCov","hits":"1","order":"18724","possible_hits":"1",}, {"lineNum":" 109","line":" }"}, {"lineNum":" 110","line":""}, {"lineNum":" 111","line":" fn round(self: *Self, b: []const u8) void {","class":"lineCov","hits":"4","order":"18688","possible_hits":"4",}, {"lineNum":" 112","line":" assert(b.len == 8);","class":"lineCov","hits":"5","order":"18689","possible_hits":"5",}, {"lineNum":" 113","line":""}, {"lineNum":" 114","line":" const m = mem.readIntLittle(u64, b[0..8]);","class":"lineCov","hits":"5","order":"18690","possible_hits":"5",}, {"lineNum":" 115","line":" self.v3 ^= m;","class":"lineCov","hits":"5","order":"18691","possible_hits":"5",}, {"lineNum":" 116","line":""}, {"lineNum":" 117","line":" // TODO this is a workaround, should be able to supply the value without a separate variable"}, {"lineNum":" 118","line":" const inl = std.builtin.CallOptions{ .modifier = .always_inline };"}, {"lineNum":" 119","line":" comptime var i: usize = 0;"}, {"lineNum":" 120","line":" inline while (i < c_rounds) : (i += 1) {"}, {"lineNum":" 121","line":" @call(inl, sipRound, .{self});","class":"lineCov","hits":"10","order":"18692","possible_hits":"10",}, {"lineNum":" 122","line":" }"}, {"lineNum":" 123","line":""}, {"lineNum":" 124","line":" self.v0 ^= m;","class":"lineCov","hits":"5","order":"18707","possible_hits":"5",}, {"lineNum":" 125","line":" }"}, {"lineNum":" 126","line":""}, {"lineNum":" 127","line":" fn sipRound(d: *Self) void {"}, {"lineNum":" 128","line":" d.v0 +%= d.v1;","class":"lineCov","hits":"26","order":"18693","possible_hits":"26",}, {"lineNum":" 129","line":" d.v1 = math.rotl(u64, d.v1, @as(u64, 13));","class":"lineCov","hits":"26","order":"18694","possible_hits":"26",}, {"lineNum":" 130","line":" d.v1 ^= d.v0;","class":"lineCov","hits":"26","order":"18695","possible_hits":"26",}, {"lineNum":" 131","line":" d.v0 = math.rotl(u64, d.v0, @as(u64, 32));","class":"lineCov","hits":"26","order":"18696","possible_hits":"26",}, {"lineNum":" 132","line":" d.v2 +%= d.v3;","class":"lineCov","hits":"26","order":"18697","possible_hits":"26",}, {"lineNum":" 133","line":" d.v3 = math.rotl(u64, d.v3, @as(u64, 16));","class":"lineCov","hits":"26","order":"18698","possible_hits":"26",}, {"lineNum":" 134","line":" d.v3 ^= d.v2;","class":"lineCov","hits":"26","order":"18699","possible_hits":"26",}, {"lineNum":" 135","line":" d.v0 +%= d.v3;","class":"lineCov","hits":"26","order":"18700","possible_hits":"26",}, {"lineNum":" 136","line":" d.v3 = math.rotl(u64, d.v3, @as(u64, 21));","class":"lineCov","hits":"26","order":"18701","possible_hits":"26",}, {"lineNum":" 137","line":" d.v3 ^= d.v0;","class":"lineCov","hits":"26","order":"18702","possible_hits":"26",}, {"lineNum":" 138","line":" d.v2 +%= d.v1;","class":"lineCov","hits":"26","order":"18703","possible_hits":"26",}, {"lineNum":" 139","line":" d.v1 = math.rotl(u64, d.v1, @as(u64, 17));","class":"lineCov","hits":"26","order":"18704","possible_hits":"26",}, {"lineNum":" 140","line":" d.v1 ^= d.v2;","class":"lineCov","hits":"26","order":"18705","possible_hits":"26",}, {"lineNum":" 141","line":" d.v2 = math.rotl(u64, d.v2, @as(u64, 32));","class":"lineCov","hits":"26","order":"18706","possible_hits":"26",}, {"lineNum":" 142","line":" }"}, {"lineNum":" 143","line":""}, {"lineNum":" 144","line":" pub fn hash(key: []const u8, input: []const u8) T {","class":"lineCov","hits":"2","order":"18663","possible_hits":"2",}, {"lineNum":" 145","line":" const aligned_len = input.len - (input.len % 8);","class":"lineCov","hits":"2","order":"18664","possible_hits":"2",}, {"lineNum":" 146","line":""}, {"lineNum":" 147","line":" var c = Self.init(key);","class":"lineCov","hits":"2","order":"18665","possible_hits":"2",}, {"lineNum":" 148","line":" @call(.{ .modifier = .always_inline }, c.update, .{input[0..aligned_len]});","class":"lineCov","hits":"2","order":"18676","possible_hits":"2",}, {"lineNum":" 149","line":" return @call(.{ .modifier = .always_inline }, c.final, .{input[aligned_len..]});","class":"lineCov","hits":"4","order":"18681","possible_hits":"4",}, {"lineNum":" 150","line":" }"}, {"lineNum":" 151","line":" };"}, {"lineNum":" 152","line":"}"}, {"lineNum":" 153","line":""}, {"lineNum":" 154","line":"pub fn SipHash(comptime T: type, comptime c_rounds: usize, comptime d_rounds: usize) type {"}, {"lineNum":" 155","line":" assert(T == u64 or T == u128);"}, {"lineNum":" 156","line":" assert(c_rounds > 0 and d_rounds > 0);"}, {"lineNum":" 157","line":""}, {"lineNum":" 158","line":" return struct {"}, {"lineNum":" 159","line":" const State = SipHashStateless(T, c_rounds, d_rounds);"}, {"lineNum":" 160","line":" const Self = @This();"}, {"lineNum":" 161","line":" const digest_size = 64;"}, {"lineNum":" 162","line":" const block_size = 64;"}, {"lineNum":" 163","line":""}, {"lineNum":" 164","line":" state: State,"}, {"lineNum":" 165","line":" buf: [8]u8,"}, {"lineNum":" 166","line":" buf_len: usize,"}, {"lineNum":" 167","line":""}, {"lineNum":" 168","line":" pub fn init(key: []const u8) Self {","class":"lineCov","hits":"2","order":"18733","possible_hits":"2",}, {"lineNum":" 169","line":" return Self{","class":"lineCov","hits":"1","order":"18737","possible_hits":"1",}, {"lineNum":" 170","line":" .state = State.init(key),","class":"lineCov","hits":"1","order":"18734","possible_hits":"1",}, {"lineNum":" 171","line":" .buf = undefined,","class":"lineCov","hits":"1","order":"18735","possible_hits":"1",}, {"lineNum":" 172","line":" .buf_len = 0,","class":"lineCov","hits":"1","order":"18736","possible_hits":"1",}, {"lineNum":" 173","line":" };"}, {"lineNum":" 174","line":" }"}, {"lineNum":" 175","line":""}, {"lineNum":" 176","line":" pub fn update(self: *Self, b: []const u8) void {","class":"lineCov","hits":"2","order":"18741","possible_hits":"2",}, {"lineNum":" 177","line":" var off: usize = 0;","class":"lineCov","hits":"1","order":"18742","possible_hits":"1",}, {"lineNum":" 178","line":""}, {"lineNum":" 179","line":" if (self.buf_len != 0 and self.buf_len + b.len >= 8) {","class":"linePartCov","hits":"3","order":"18743","possible_hits":"4",}, {"lineNum":" 180","line":" off += 8 - self.buf_len;","class":"linePartCov","hits":"1","order":"18750","possible_hits":"2",}, {"lineNum":" 181","line":" mem.copy(u8, self.buf[self.buf_len..], b[0..off]);","class":"lineCov","hits":"1","order":"18751","possible_hits":"1",}, {"lineNum":" 182","line":" self.state.update(self.buf[0..]);","class":"lineCov","hits":"1","order":"18752","possible_hits":"1",}, {"lineNum":" 183","line":" self.buf_len = 0;","class":"lineCov","hits":"1","order":"18753","possible_hits":"1",}, {"lineNum":" 184","line":" }"}, {"lineNum":" 185","line":""}, {"lineNum":" 186","line":" const remain_len = b.len - off;","class":"linePartCov","hits":"1","order":"18744","possible_hits":"2",}, {"lineNum":" 187","line":" const aligned_len = remain_len - (remain_len % 8);","class":"lineCov","hits":"1","order":"18745","possible_hits":"1",}, {"lineNum":" 188","line":" self.state.update(b[off .. off + aligned_len]);","class":"lineCov","hits":"1","order":"18746","possible_hits":"1",}, {"lineNum":" 189","line":""}, {"lineNum":" 190","line":" mem.copy(u8, self.buf[self.buf_len..], b[off + aligned_len ..]);","class":"lineCov","hits":"1","order":"18748","possible_hits":"1",}, {"lineNum":" 191","line":" self.buf_len += @intCast(u8, b[off + aligned_len ..].len);","class":"lineCov","hits":"1","order":"18749","possible_hits":"1",}, {"lineNum":" 192","line":" }"}, {"lineNum":" 193","line":""}, {"lineNum":" 194","line":" pub fn final(self: *Self) T {","class":"lineCov","hits":"1","order":"18755","possible_hits":"1",}, {"lineNum":" 195","line":" return self.state.final(self.buf[0..self.buf_len]);","class":"lineCov","hits":"1","order":"18756","possible_hits":"1",}, {"lineNum":" 196","line":" }"}, {"lineNum":" 197","line":""}, {"lineNum":" 198","line":" pub fn hash(key: []const u8, input: []const u8) T {","class":"lineCov","hits":"2","order":"18661","possible_hits":"2",}, {"lineNum":" 199","line":" return State.hash(key, input);","class":"lineCov","hits":"2","order":"18662","possible_hits":"2",}, {"lineNum":" 200","line":" }"}, {"lineNum":" 201","line":" };"}, {"lineNum":" 202","line":"}"}, {"lineNum":" 203","line":""}, {"lineNum":" 204","line":"// Test vectors from reference implementation."}, {"lineNum":" 205","line":"// https://github.com/veorq/SipHash/blob/master/vectors.h"}, {"lineNum":" 206","line":"const test_key = \"\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\x09\\x0a\\x0b\\x0c\\x0d\\x0e\\x0f\";"}, {"lineNum":" 207","line":""}, {"lineNum":" 208","line":"test \"siphash64-2-4 sanity\" {","class":"lineCov","hits":"2","order":"18655","possible_hits":"2",}, {"lineNum":" 209","line":" const vectors = [_][8]u8{"}, {"lineNum":" 210","line":" \"\\x31\\x0e\\x0e\\xdd\\x47\\xdb\\x6f\\x72\".*, // \"\""}, {"lineNum":" 211","line":" \"\\xfd\\x67\\xdc\\x93\\xc5\\x39\\xf8\\x74\".*, // \"\\x00\""}, {"lineNum":" 212","line":" \"\\x5a\\x4f\\xa9\\xd9\\x09\\x80\\x6c\\x0d\".*, // \"\\x00\\x01\" ... etc"}, {"lineNum":" 213","line":" \"\\x2d\\x7e\\xfb\\xd7\\x96\\x66\\x67\\x85\".*,"}, {"lineNum":" 214","line":" \"\\xb7\\x87\\x71\\x27\\xe0\\x94\\x27\\xcf\".*,"}, {"lineNum":" 215","line":" \"\\x8d\\xa6\\x99\\xcd\\x64\\x55\\x76\\x18\".*,"}, {"lineNum":" 216","line":" \"\\xce\\xe3\\xfe\\x58\\x6e\\x46\\xc9\\xcb\".*,"}, {"lineNum":" 217","line":" \"\\x37\\xd1\\x01\\x8b\\xf5\\x00\\x02\\xab\".*,"}, {"lineNum":" 218","line":" \"\\x62\\x24\\x93\\x9a\\x79\\xf5\\xf5\\x93\".*,"}, {"lineNum":" 219","line":" \"\\xb0\\xe4\\xa9\\x0b\\xdf\\x82\\x00\\x9e\".*,"}, {"lineNum":" 220","line":" \"\\xf3\\xb9\\xdd\\x94\\xc5\\xbb\\x5d\\x7a\".*,"}, {"lineNum":" 221","line":" \"\\xa7\\xad\\x6b\\x22\\x46\\x2f\\xb3\\xf4\".*,"}, {"lineNum":" 222","line":" \"\\xfb\\xe5\\x0e\\x86\\xbc\\x8f\\x1e\\x75\".*,"}, {"lineNum":" 223","line":" \"\\x90\\x3d\\x84\\xc0\\x27\\x56\\xea\\x14\".*,"}, {"lineNum":" 224","line":" \"\\xee\\xf2\\x7a\\x8e\\x90\\xca\\x23\\xf7\".*,"}, {"lineNum":" 225","line":" \"\\xe5\\x45\\xbe\\x49\\x61\\xca\\x29\\xa1\".*,"}, {"lineNum":" 226","line":" \"\\xdb\\x9b\\xc2\\x57\\x7f\\xcc\\x2a\\x3f\".*,"}, {"lineNum":" 227","line":" \"\\x94\\x47\\xbe\\x2c\\xf5\\xe9\\x9a\\x69\".*,"}, {"lineNum":" 228","line":" \"\\x9c\\xd3\\x8d\\x96\\xf0\\xb3\\xc1\\x4b\".*,"}, {"lineNum":" 229","line":" \"\\xbd\\x61\\x79\\xa7\\x1d\\xc9\\x6d\\xbb\".*,"}, {"lineNum":" 230","line":" \"\\x98\\xee\\xa2\\x1a\\xf2\\x5c\\xd6\\xbe\".*,"}, {"lineNum":" 231","line":" \"\\xc7\\x67\\x3b\\x2e\\xb0\\xcb\\xf2\\xd0\".*,"}, {"lineNum":" 232","line":" \"\\x88\\x3e\\xa3\\xe3\\x95\\x67\\x53\\x93\".*,"}, {"lineNum":" 233","line":" \"\\xc8\\xce\\x5c\\xcd\\x8c\\x03\\x0c\\xa8\".*,"}, {"lineNum":" 234","line":" \"\\x94\\xaf\\x49\\xf6\\xc6\\x50\\xad\\xb8\".*,"}, {"lineNum":" 235","line":" \"\\xea\\xb8\\x85\\x8a\\xde\\x92\\xe1\\xbc\".*,"}, {"lineNum":" 236","line":" \"\\xf3\\x15\\xbb\\x5b\\xb8\\x35\\xd8\\x17\".*,"}, {"lineNum":" 237","line":" \"\\xad\\xcf\\x6b\\x07\\x63\\x61\\x2e\\x2f\".*,"}, {"lineNum":" 238","line":" \"\\xa5\\xc9\\x1d\\xa7\\xac\\xaa\\x4d\\xde\".*,"}, {"lineNum":" 239","line":" \"\\x71\\x65\\x95\\x87\\x66\\x50\\xa2\\xa6\".*,"}, {"lineNum":" 240","line":" \"\\x28\\xef\\x49\\x5c\\x53\\xa3\\x87\\xad\".*,"}, {"lineNum":" 241","line":" \"\\x42\\xc3\\x41\\xd8\\xfa\\x92\\xd8\\x32\".*,"}, {"lineNum":" 242","line":" \"\\xce\\x7c\\xf2\\x72\\x2f\\x51\\x27\\x71\".*,"}, {"lineNum":" 243","line":" \"\\xe3\\x78\\x59\\xf9\\x46\\x23\\xf3\\xa7\".*,"}, {"lineNum":" 244","line":" \"\\x38\\x12\\x05\\xbb\\x1a\\xb0\\xe0\\x12\".*,"}, {"lineNum":" 245","line":" \"\\xae\\x97\\xa1\\x0f\\xd4\\x34\\xe0\\x15\".*,"}, {"lineNum":" 246","line":" \"\\xb4\\xa3\\x15\\x08\\xbe\\xff\\x4d\\x31\".*,"}, {"lineNum":" 247","line":" \"\\x81\\x39\\x62\\x29\\xf0\\x90\\x79\\x02\".*,"}, {"lineNum":" 248","line":" \"\\x4d\\x0c\\xf4\\x9e\\xe5\\xd4\\xdc\\xca\".*,"}, {"lineNum":" 249","line":" \"\\x5c\\x73\\x33\\x6a\\x76\\xd8\\xbf\\x9a\".*,"}, {"lineNum":" 250","line":" \"\\xd0\\xa7\\x04\\x53\\x6b\\xa9\\x3e\\x0e\".*,"}, {"lineNum":" 251","line":" \"\\x92\\x59\\x58\\xfc\\xd6\\x42\\x0c\\xad\".*,"}, {"lineNum":" 252","line":" \"\\xa9\\x15\\xc2\\x9b\\xc8\\x06\\x73\\x18\".*,"}, {"lineNum":" 253","line":" \"\\x95\\x2b\\x79\\xf3\\xbc\\x0a\\xa6\\xd4\".*,"}, {"lineNum":" 254","line":" \"\\xf2\\x1d\\xf2\\xe4\\x1d\\x45\\x35\\xf9\".*,"}, {"lineNum":" 255","line":" \"\\x87\\x57\\x75\\x19\\x04\\x8f\\x53\\xa9\".*,"}, {"lineNum":" 256","line":" \"\\x10\\xa5\\x6c\\xf5\\xdf\\xcd\\x9a\\xdb\".*,"}, {"lineNum":" 257","line":" \"\\xeb\\x75\\x09\\x5c\\xcd\\x98\\x6c\\xd0\".*,"}, {"lineNum":" 258","line":" \"\\x51\\xa9\\xcb\\x9e\\xcb\\xa3\\x12\\xe6\".*,"}, {"lineNum":" 259","line":" \"\\x96\\xaf\\xad\\xfc\\x2c\\xe6\\x66\\xc7\".*,"}, {"lineNum":" 260","line":" \"\\x72\\xfe\\x52\\x97\\x5a\\x43\\x64\\xee\".*,"}, {"lineNum":" 261","line":" \"\\x5a\\x16\\x45\\xb2\\x76\\xd5\\x92\\xa1\".*,"}, {"lineNum":" 262","line":" \"\\xb2\\x74\\xcb\\x8e\\xbf\\x87\\x87\\x0a\".*,"}, {"lineNum":" 263","line":" \"\\x6f\\x9b\\xb4\\x20\\x3d\\xe7\\xb3\\x81\".*,"}, {"lineNum":" 264","line":" \"\\xea\\xec\\xb2\\xa3\\x0b\\x22\\xa8\\x7f\".*,"}, {"lineNum":" 265","line":" \"\\x99\\x24\\xa4\\x3c\\xc1\\x31\\x57\\x24\".*,"}, {"lineNum":" 266","line":" \"\\xbd\\x83\\x8d\\x3a\\xaf\\xbf\\x8d\\xb7\".*,"}, {"lineNum":" 267","line":" \"\\x0b\\x1a\\x2a\\x32\\x65\\xd5\\x1a\\xea\".*,"}, {"lineNum":" 268","line":" \"\\x13\\x50\\x79\\xa3\\x23\\x1c\\xe6\\x60\".*,"}, {"lineNum":" 269","line":" \"\\x93\\x2b\\x28\\x46\\xe4\\xd7\\x06\\x66\".*,"}, {"lineNum":" 270","line":" \"\\xe1\\x91\\x5f\\x5c\\xb1\\xec\\xa4\\x6c\".*,"}, {"lineNum":" 271","line":" \"\\xf3\\x25\\x96\\x5c\\xa1\\x6d\\x62\\x9f\".*,"}, {"lineNum":" 272","line":" \"\\x57\\x5f\\xf2\\x8e\\x60\\x38\\x1b\\xe5\".*,"}, {"lineNum":" 273","line":" \"\\x72\\x45\\x06\\xeb\\x4c\\x32\\x8a\\x95\".*,"}, {"lineNum":" 274","line":" };"}, {"lineNum":" 275","line":""}, {"lineNum":" 276","line":" const siphash = SipHash64(2, 4);"}, {"lineNum":" 277","line":""}, {"lineNum":" 278","line":" var buffer: [64]u8 = undefined;","class":"lineCov","hits":"1","order":"18656","possible_hits":"1",}, {"lineNum":" 279","line":" for (vectors) |vector, i| {","class":"lineCov","hits":"2","order":"18657","possible_hits":"2",}, {"lineNum":" 280","line":" buffer[i] = @intCast(u8, i);","class":"linePartCov","hits":"1","order":"18658","possible_hits":"3",}, {"lineNum":" 281","line":""}, {"lineNum":" 282","line":" const expected = mem.readIntLittle(u64, &vector);","class":"lineCov","hits":"1","order":"18659","possible_hits":"1",}, {"lineNum":" 283","line":" testing.expectEqual(siphash.hash(test_key, buffer[0..i]), expected);","class":"linePartCov","hits":"1","order":"18660","possible_hits":"2",}, {"lineNum":" 284","line":" }"}, {"lineNum":" 285","line":"}"}, {"lineNum":" 286","line":""}, {"lineNum":" 287","line":"test \"siphash128-2-4 sanity\" {","class":"lineCov","hits":"2","order":"18713","possible_hits":"2",}, {"lineNum":" 288","line":" const vectors = [_][16]u8{"}, {"lineNum":" 289","line":" \"\\xa3\\x81\\x7f\\x04\\xba\\x25\\xa8\\xe6\\x6d\\xf6\\x72\\x14\\xc7\\x55\\x02\\x93\".*,"}, {"lineNum":" 290","line":" \"\\xda\\x87\\xc1\\xd8\\x6b\\x99\\xaf\\x44\\x34\\x76\\x59\\x11\\x9b\\x22\\xfc\\x45\".*,"}, {"lineNum":" 291","line":" \"\\x81\\x77\\x22\\x8d\\xa4\\xa4\\x5d\\xc7\\xfc\\xa3\\x8b\\xde\\xf6\\x0a\\xff\\xe4\".*,"}, {"lineNum":" 292","line":" \"\\x9c\\x70\\xb6\\x0c\\x52\\x67\\xa9\\x4e\\x5f\\x33\\xb6\\xb0\\x29\\x85\\xed\\x51\".*,"}, {"lineNum":" 293","line":" \"\\xf8\\x81\\x64\\xc1\\x2d\\x9c\\x8f\\xaf\\x7d\\x0f\\x6e\\x7c\\x7b\\xcd\\x55\\x79\".*,"}, {"lineNum":" 294","line":" \"\\x13\\x68\\x87\\x59\\x80\\x77\\x6f\\x88\\x54\\x52\\x7a\\x07\\x69\\x0e\\x96\\x27\".*,"}, {"lineNum":" 295","line":" \"\\x14\\xee\\xca\\x33\\x8b\\x20\\x86\\x13\\x48\\x5e\\xa0\\x30\\x8f\\xd7\\xa1\\x5e\".*,"}, {"lineNum":" 296","line":" \"\\xa1\\xf1\\xeb\\xbe\\xd8\\xdb\\xc1\\x53\\xc0\\xb8\\x4a\\xa6\\x1f\\xf0\\x82\\x39\".*,"}, {"lineNum":" 297","line":" \"\\x3b\\x62\\xa9\\xba\\x62\\x58\\xf5\\x61\\x0f\\x83\\xe2\\x64\\xf3\\x14\\x97\\xb4\".*,"}, {"lineNum":" 298","line":" \"\\x26\\x44\\x99\\x06\\x0a\\xd9\\xba\\xab\\xc4\\x7f\\x8b\\x02\\xbb\\x6d\\x71\\xed\".*,"}, {"lineNum":" 299","line":" \"\\x00\\x11\\x0d\\xc3\\x78\\x14\\x69\\x56\\xc9\\x54\\x47\\xd3\\xf3\\xd0\\xfb\\xba\".*,"}, {"lineNum":" 300","line":" \"\\x01\\x51\\xc5\\x68\\x38\\x6b\\x66\\x77\\xa2\\xb4\\xdc\\x6f\\x81\\xe5\\xdc\\x18\".*,"}, {"lineNum":" 301","line":" \"\\xd6\\x26\\xb2\\x66\\x90\\x5e\\xf3\\x58\\x82\\x63\\x4d\\xf6\\x85\\x32\\xc1\\x25\".*,"}, {"lineNum":" 302","line":" \"\\x98\\x69\\xe2\\x47\\xe9\\xc0\\x8b\\x10\\xd0\\x29\\x93\\x4f\\xc4\\xb9\\x52\\xf7\".*,"}, {"lineNum":" 303","line":" \"\\x31\\xfc\\xef\\xac\\x66\\xd7\\xde\\x9c\\x7e\\xc7\\x48\\x5f\\xe4\\x49\\x49\\x02\".*,"}, {"lineNum":" 304","line":" \"\\x54\\x93\\xe9\\x99\\x33\\xb0\\xa8\\x11\\x7e\\x08\\xec\\x0f\\x97\\xcf\\xc3\\xd9\".*,"}, {"lineNum":" 305","line":" \"\\x6e\\xe2\\xa4\\xca\\x67\\xb0\\x54\\xbb\\xfd\\x33\\x15\\xbf\\x85\\x23\\x05\\x77\".*,"}, {"lineNum":" 306","line":" \"\\x47\\x3d\\x06\\xe8\\x73\\x8d\\xb8\\x98\\x54\\xc0\\x66\\xc4\\x7a\\xe4\\x77\\x40\".*,"}, {"lineNum":" 307","line":" \"\\xa4\\x26\\xe5\\xe4\\x23\\xbf\\x48\\x85\\x29\\x4d\\xa4\\x81\\xfe\\xae\\xf7\\x23\".*,"}, {"lineNum":" 308","line":" \"\\x78\\x01\\x77\\x31\\xcf\\x65\\xfa\\xb0\\x74\\xd5\\x20\\x89\\x52\\x51\\x2e\\xb1\".*,"}, {"lineNum":" 309","line":" \"\\x9e\\x25\\xfc\\x83\\x3f\\x22\\x90\\x73\\x3e\\x93\\x44\\xa5\\xe8\\x38\\x39\\xeb\".*,"}, {"lineNum":" 310","line":" \"\\x56\\x8e\\x49\\x5a\\xbe\\x52\\x5a\\x21\\x8a\\x22\\x14\\xcd\\x3e\\x07\\x1d\\x12\".*,"}, {"lineNum":" 311","line":" \"\\x4a\\x29\\xb5\\x45\\x52\\xd1\\x6b\\x9a\\x46\\x9c\\x10\\x52\\x8e\\xff\\x0a\\xae\".*,"}, {"lineNum":" 312","line":" \"\\xc9\\xd1\\x84\\xdd\\xd5\\xa9\\xf5\\xe0\\xcf\\x8c\\xe2\\x9a\\x9a\\xbf\\x69\\x1c\".*,"}, {"lineNum":" 313","line":" \"\\x2d\\xb4\\x79\\xae\\x78\\xbd\\x50\\xd8\\x88\\x2a\\x8a\\x17\\x8a\\x61\\x32\\xad\".*,"}, {"lineNum":" 314","line":" \"\\x8e\\xce\\x5f\\x04\\x2d\\x5e\\x44\\x7b\\x50\\x51\\xb9\\xea\\xcb\\x8d\\x8f\\x6f\".*,"}, {"lineNum":" 315","line":" \"\\x9c\\x0b\\x53\\xb4\\xb3\\xc3\\x07\\xe8\\x7e\\xae\\xe0\\x86\\x78\\x14\\x1f\\x66\".*,"}, {"lineNum":" 316","line":" \"\\xab\\xf2\\x48\\xaf\\x69\\xa6\\xea\\xe4\\xbf\\xd3\\xeb\\x2f\\x12\\x9e\\xeb\\x94\".*,"}, {"lineNum":" 317","line":" \"\\x06\\x64\\xda\\x16\\x68\\x57\\x4b\\x88\\xb9\\x35\\xf3\\x02\\x73\\x58\\xae\\xf4\".*,"}, {"lineNum":" 318","line":" \"\\xaa\\x4b\\x9d\\xc4\\xbf\\x33\\x7d\\xe9\\x0c\\xd4\\xfd\\x3c\\x46\\x7c\\x6a\\xb7\".*,"}, {"lineNum":" 319","line":" \"\\xea\\x5c\\x7f\\x47\\x1f\\xaf\\x6b\\xde\\x2b\\x1a\\xd7\\xd4\\x68\\x6d\\x22\\x87\".*,"}, {"lineNum":" 320","line":" \"\\x29\\x39\\xb0\\x18\\x32\\x23\\xfa\\xfc\\x17\\x23\\xde\\x4f\\x52\\xc4\\x3d\\x35\".*,"}, {"lineNum":" 321","line":" \"\\x7c\\x39\\x56\\xca\\x5e\\xea\\xfc\\x3e\\x36\\x3e\\x9d\\x55\\x65\\x46\\xeb\\x68\".*,"}, {"lineNum":" 322","line":" \"\\x77\\xc6\\x07\\x71\\x46\\xf0\\x1c\\x32\\xb6\\xb6\\x9d\\x5f\\x4e\\xa9\\xff\\xcf\".*,"}, {"lineNum":" 323","line":" \"\\x37\\xa6\\x98\\x6c\\xb8\\x84\\x7e\\xdf\\x09\\x25\\xf0\\xf1\\x30\\x9b\\x54\\xde\".*,"}, {"lineNum":" 324","line":" \"\\xa7\\x05\\xf0\\xe6\\x9d\\xa9\\xa8\\xf9\\x07\\x24\\x1a\\x2e\\x92\\x3c\\x8c\\xc8\".*,"}, {"lineNum":" 325","line":" \"\\x3d\\xc4\\x7d\\x1f\\x29\\xc4\\x48\\x46\\x1e\\x9e\\x76\\xed\\x90\\x4f\\x67\\x11\".*,"}, {"lineNum":" 326","line":" \"\\x0d\\x62\\xbf\\x01\\xe6\\xfc\\x0e\\x1a\\x0d\\x3c\\x47\\x51\\xc5\\xd3\\x69\\x2b\".*,"}, {"lineNum":" 327","line":" \"\\x8c\\x03\\x46\\x8b\\xca\\x7c\\x66\\x9e\\xe4\\xfd\\x5e\\x08\\x4b\\xbe\\xe7\\xb5\".*,"}, {"lineNum":" 328","line":" \"\\x52\\x8a\\x5b\\xb9\\x3b\\xaf\\x2c\\x9c\\x44\\x73\\xcc\\xe5\\xd0\\xd2\\x2b\\xd9\".*,"}, {"lineNum":" 329","line":" \"\\xdf\\x6a\\x30\\x1e\\x95\\xc9\\x5d\\xad\\x97\\xae\\x0c\\xc8\\xc6\\x91\\x3b\\xd8\".*,"}, {"lineNum":" 330","line":" \"\\x80\\x11\\x89\\x90\\x2c\\x85\\x7f\\x39\\xe7\\x35\\x91\\x28\\x5e\\x70\\xb6\\xdb\".*,"}, {"lineNum":" 331","line":" \"\\xe6\\x17\\x34\\x6a\\xc9\\xc2\\x31\\xbb\\x36\\x50\\xae\\x34\\xcc\\xca\\x0c\\x5b\".*,"}, {"lineNum":" 332","line":" \"\\x27\\xd9\\x34\\x37\\xef\\xb7\\x21\\xaa\\x40\\x18\\x21\\xdc\\xec\\x5a\\xdf\\x89\".*,"}, {"lineNum":" 333","line":" \"\\x89\\x23\\x7d\\x9d\\xed\\x9c\\x5e\\x78\\xd8\\xb1\\xc9\\xb1\\x66\\xcc\\x73\\x42\".*,"}, {"lineNum":" 334","line":" \"\\x4a\\x6d\\x80\\x91\\xbf\\x5e\\x7d\\x65\\x11\\x89\\xfa\\x94\\xa2\\x50\\xb1\\x4c\".*,"}, {"lineNum":" 335","line":" \"\\x0e\\x33\\xf9\\x60\\x55\\xe7\\xae\\x89\\x3f\\xfc\\x0e\\x3d\\xcf\\x49\\x29\\x02\".*,"}, {"lineNum":" 336","line":" \"\\xe6\\x1c\\x43\\x2b\\x72\\x0b\\x19\\xd1\\x8e\\xc8\\xd8\\x4b\\xdc\\x63\\x15\\x1b\".*,"}, {"lineNum":" 337","line":" \"\\xf7\\xe5\\xae\\xf5\\x49\\xf7\\x82\\xcf\\x37\\x90\\x55\\xa6\\x08\\x26\\x9b\\x16\".*,"}, {"lineNum":" 338","line":" \"\\x43\\x8d\\x03\\x0f\\xd0\\xb7\\xa5\\x4f\\xa8\\x37\\xf2\\xad\\x20\\x1a\\x64\\x03\".*,"}, {"lineNum":" 339","line":" \"\\xa5\\x90\\xd3\\xee\\x4f\\xbf\\x04\\xe3\\x24\\x7e\\x0d\\x27\\xf2\\x86\\x42\\x3f\".*,"}, {"lineNum":" 340","line":" \"\\x5f\\xe2\\xc1\\xa1\\x72\\xfe\\x93\\xc4\\xb1\\x5c\\xd3\\x7c\\xae\\xf9\\xf5\\x38\".*,"}, {"lineNum":" 341","line":" \"\\x2c\\x97\\x32\\x5c\\xbd\\x06\\xb3\\x6e\\xb2\\x13\\x3d\\xd0\\x8b\\x3a\\x01\\x7c\".*,"}, {"lineNum":" 342","line":" \"\\x92\\xc8\\x14\\x22\\x7a\\x6b\\xca\\x94\\x9f\\xf0\\x65\\x9f\\x00\\x2a\\xd3\\x9e\".*,"}, {"lineNum":" 343","line":" \"\\xdc\\xe8\\x50\\x11\\x0b\\xd8\\x32\\x8c\\xfb\\xd5\\x08\\x41\\xd6\\x91\\x1d\\x87\".*,"}, {"lineNum":" 344","line":" \"\\x67\\xf1\\x49\\x84\\xc7\\xda\\x79\\x12\\x48\\xe3\\x2b\\xb5\\x92\\x25\\x83\\xda\".*,"}, {"lineNum":" 345","line":" \"\\x19\\x38\\xf2\\xcf\\x72\\xd5\\x4e\\xe9\\x7e\\x94\\x16\\x6f\\xa9\\x1d\\x2a\\x36\".*,"}, {"lineNum":" 346","line":" \"\\x74\\x48\\x1e\\x96\\x46\\xed\\x49\\xfe\\x0f\\x62\\x24\\x30\\x16\\x04\\x69\\x8e\".*,"}, {"lineNum":" 347","line":" \"\\x57\\xfc\\xa5\\xde\\x98\\xa9\\xd6\\xd8\\x00\\x64\\x38\\xd0\\x58\\x3d\\x8a\\x1d\".*,"}, {"lineNum":" 348","line":" \"\\x9f\\xec\\xde\\x1c\\xef\\xdc\\x1c\\xbe\\xd4\\x76\\x36\\x74\\xd9\\x57\\x53\\x59\".*,"}, {"lineNum":" 349","line":" \"\\xe3\\x04\\x0c\\x00\\xeb\\x28\\xf1\\x53\\x66\\xca\\x73\\xcb\\xd8\\x72\\xe7\\x40\".*,"}, {"lineNum":" 350","line":" \"\\x76\\x97\\x00\\x9a\\x6a\\x83\\x1d\\xfe\\xcc\\xa9\\x1c\\x59\\x93\\x67\\x0f\\x7a\".*,"}, {"lineNum":" 351","line":" \"\\x58\\x53\\x54\\x23\\x21\\xf5\\x67\\xa0\\x05\\xd5\\x47\\xa4\\xf0\\x47\\x59\\xbd\".*,"}, {"lineNum":" 352","line":" \"\\x51\\x50\\xd1\\x77\\x2f\\x50\\x83\\x4a\\x50\\x3e\\x06\\x9a\\x97\\x3f\\xbd\\x7c\".*,"}, {"lineNum":" 353","line":" };"}, {"lineNum":" 354","line":""}, {"lineNum":" 355","line":" const siphash = SipHash128(2, 4);"}, {"lineNum":" 356","line":""}, {"lineNum":" 357","line":" var buffer: [64]u8 = undefined;","class":"lineCov","hits":"1","order":"18714","possible_hits":"1",}, {"lineNum":" 358","line":" for (vectors) |vector, i| {","class":"lineCov","hits":"2","order":"18715","possible_hits":"2",}, {"lineNum":" 359","line":" buffer[i] = @intCast(u8, i);","class":"linePartCov","hits":"1","order":"18716","possible_hits":"3",}, {"lineNum":" 360","line":""}, {"lineNum":" 361","line":" const expected = mem.readIntLittle(u128, &vector);","class":"lineCov","hits":"1","order":"18717","possible_hits":"1",}, {"lineNum":" 362","line":" testing.expectEqual(siphash.hash(test_key, buffer[0..i]), expected);","class":"linePartCov","hits":"1","order":"18718","possible_hits":"2",}, {"lineNum":" 363","line":" }"}, {"lineNum":" 364","line":"}"}, {"lineNum":" 365","line":""}, {"lineNum":" 366","line":"test \"iterative non-divisible update\" {","class":"lineCov","hits":"2","order":"18725","possible_hits":"2",}, {"lineNum":" 367","line":" var buf: [1024]u8 = undefined;","class":"lineCov","hits":"1","order":"18726","possible_hits":"1",}, {"lineNum":" 368","line":" for (buf) |*e, i| {","class":"lineCov","hits":"2","order":"18727","possible_hits":"2",}, {"lineNum":" 369","line":" e.* = @truncate(u8, i);","class":"lineCov","hits":"1","order":"18728","possible_hits":"1",}, {"lineNum":" 370","line":" }"}, {"lineNum":" 371","line":""}, {"lineNum":" 372","line":" const key = \"0x128dad08f12307\";"}, {"lineNum":" 373","line":" const Siphash = SipHash64(2, 4);"}, {"lineNum":" 374","line":""}, {"lineNum":" 375","line":" var end: usize = 9;","class":"lineCov","hits":"1","order":"18729","possible_hits":"1",}, {"lineNum":" 376","line":" while (end < buf.len) : (end += 9) {","class":"linePartCov","hits":"2","order":"18730","possible_hits":"3",}, {"lineNum":" 377","line":" const non_iterative_hash = Siphash.hash(key, buf[0..end]);","class":"linePartCov","hits":"1","order":"18731","possible_hits":"2",}, {"lineNum":" 378","line":""}, {"lineNum":" 379","line":" var wy = Siphash.init(key);","class":"lineCov","hits":"1","order":"18732","possible_hits":"1",}, {"lineNum":" 380","line":" var i: usize = 0;","class":"lineCov","hits":"1","order":"18738","possible_hits":"1",}, {"lineNum":" 381","line":" while (i < end) : (i += 7) {","class":"lineCov","hits":"3","order":"18739","possible_hits":"3",}, {"lineNum":" 382","line":" wy.update(buf[i..std.math.min(i + 7, end)]);","class":"linePartCov","hits":"1","order":"18740","possible_hits":"2",}, {"lineNum":" 383","line":" }"}, {"lineNum":" 384","line":" const iterative_hash = wy.final();","class":"lineCov","hits":"1","order":"18754","possible_hits":"1",}, {"lineNum":" 385","line":""}, {"lineNum":" 386","line":" std.testing.expectEqual(iterative_hash, non_iterative_hash);","class":"lineCov","hits":"1","order":"18758","possible_hits":"1",}, {"lineNum":" 387","line":" }"}, {"lineNum":" 388","line":"}"}, ]}; var percent_low = 25;var percent_high = 75; var header = { "command" : "test", "date" : "2020-05-19 01:29:25", "instrumented" : 104, "covered" : 104,}; var merged_data = [];