+test.ha (3349B)
1 // SPDX-License-Identifier: MPL-2.0 2 // (c) Hare authors <https://harelang.org> 3 4 use bytes; 5 use crypto::mac; 6 use crypto::sha1; 7 use crypto::sha256; 8 use hash; 9 use strings; 10 11 fn assert_hmac_sha1(keystr: str, vectors: [](str, [20]u8)) void = { 12 let key = strings::toutf8(keystr); 13 let h = sha1::sha1(); 14 let buf: [sha1::BLOCKSZ]u8 = [0x1...]; 15 16 for (let i = 0z; i < len(vectors); i += 1) { 17 hash::reset(&h); 18 let hmac = hmac(&h, key, buf); 19 defer mac::finish(&hmac); 20 21 const vector = vectors[i]; 22 23 mac::write(&hmac, strings::toutf8(vector.0)); 24 25 let sum: [sha1::SZ]u8 = [0...]; 26 mac::sum(&hmac, sum); 27 28 assert(bytes::equal(vector.1, sum)); 29 }; 30 }; 31 32 @test fn hmac_sha1_empty_key() void = { 33 const vectors: [_](str, [20]u8) = [ 34 ( 35 "", 36 [ 37 0xfb, 0xdb, 0x1d, 0x1b, 0x18, 0xaa, 0x6c, 0x08, 38 0x32, 0x4b, 0x7d, 0x64, 0xb7, 0x1f, 0xb7, 0x63, 39 0x70, 0x69, 0x0e, 0x1d, 40 ] 41 ), 42 ( 43 "abc", 44 [ 45 0x9b, 0x4a, 0x91, 0x8f, 0x39, 0x8d, 0x74, 0xd3, 46 0xe3, 0x67, 0x97, 0x0a, 0xba, 0x3c, 0xbe, 0x54, 47 0xe4, 0xd2, 0xb5, 0xd9, 48 ] 49 ), 50 ( 51 "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijkl" 52 "mnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopq" 53 "rstu", 54 [ 55 0xf4, 0x50, 0x13, 0xac, 0xc6, 0xa6, 0xa5, 0x3a, 56 0x49, 0xbf, 0xc0, 0x7b, 0x1e, 0xd8, 0xf5, 0x39, 57 0x5b, 0xf3, 0x9d, 0x96, 58 ] 59 ), 60 ]; 61 assert_hmac_sha1("", vectors); 62 }; 63 64 @test fn hmac_sha1() void = { 65 const vectors: [_](str, [20]u8) = [ 66 ( 67 "", 68 [ 69 0xc5, 0x89, 0xa2, 0x7a, 0xb0, 0xaf, 0x9f, 0xe7, 70 0xe0, 0x38, 0x68, 0x24, 0x73, 0x5d, 0x22, 0x0d, 71 0x04, 0x1b, 0x70, 0xf0, 72 ] 73 ), 74 ( 75 "abc", 76 [ 77 0x85, 0x2d, 0x02, 0xc6, 0xfd, 0x3b, 0x51, 0xdf, 78 0x64, 0x4a, 0xfb, 0x13, 0x81, 0x76, 0xb3, 0x07, 79 0x61, 0xca, 0x95, 0x27, 80 ] 81 ), 82 ( 83 "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijkl" 84 "mnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopq" 85 "rstu", 86 [ 87 0x41, 0x29, 0x43, 0xf0, 0x84, 0x0d, 0xc1, 0xa1, 88 0x33, 0x8a, 0x16, 0xec, 0x3d, 0x73, 0x0b, 0x76, 89 0x25, 0xac, 0xf0, 0xaa, 90 ] 91 ), 92 ]; 93 94 assert_hmac_sha1("trustno1", vectors); 95 }; 96 97 @test fn hmac_sha1_large_key() void = { 98 const vectors: [_](str, [20]u8) = [ 99 ( 100 "", 101 [ 102 0x24, 0xe4, 0x38, 0xcb, 0x07, 0x54, 0xef, 0x48, 103 0x97, 0x20, 0x05, 0x65, 0xd5, 0xf2, 0x7f, 0x6e, 104 0x62, 0x77, 0xfc, 0x95 105 ], 106 ), 107 ( 108 "abc", 109 [ 110 0xe3, 0x1a, 0x77, 0xff, 0xf1, 0x4b, 0xbf, 0xba, 111 0x5d, 0x2f, 0x8b, 0x44, 0xa6, 0x33, 0xd4, 0xc9, 112 0xfc, 0x8a, 0xd0, 0xe9, 113 ] 114 ), 115 ( 116 "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijkl" 117 "mnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopq" 118 "rstu", 119 [ 120 0x5a, 0x64, 0x69, 0x18, 0xa0, 0xe3, 0xaf, 0xe9, 121 0xab, 0x45, 0x1d, 0xf3, 0xcd, 0xdd, 0x1e, 0x7e, 122 0xb9, 0x19, 0xa7, 0x4b 123 ] 124 ), 125 ]; 126 127 let key = "xxabcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhi" 128 "jklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu"; 129 assert_hmac_sha1(key, vectors); 130 }; 131 132 @test fn sha256() void = { 133 const expected: [_]u8 = [ 134 0xb6, 0x13, 0x67, 0x9a, 0x08, 0x14, 0xd9, 0xec, 0x77, 0x2f, 135 0x95, 0xd7, 0x78, 0xc3, 0x5f, 0xc5, 0xff, 0x16, 0x97, 0xc4, 136 0x93, 0x71, 0x56, 0x53, 0xc6, 0xc7, 0x12, 0x14, 0x42, 0x92, 137 0xc5, 0xad, 138 ]; 139 140 let hmac = sha256([]); 141 defer mac::finish(&hmac); 142 143 let sum: [sha256::SZ]u8 = [0...]; 144 mac::sum(&hmac, sum); 145 146 assert(bytes::equal(expected, sum)); 147 };