| 1 | // tests are taken from https://tools.ietf.org/html/rfc2202 |
| 2 | module hmac |
| 3 | |
| 4 | import crypto.md5 |
| 5 | import crypto.sha1 |
| 6 | import crypto.sha256 |
| 7 | import crypto.sha512 |
| 8 | import crypto.sha3 |
| 9 | import crypto.blake2s |
| 10 | import crypto.blake2b |
| 11 | import crypto.blake3 |
| 12 | |
| 13 | // not yet supported |
| 14 | // import crypto.md4 |
| 15 | // import crypto.md5sha1 |
| 16 | // import crypto.ripemd160 |
| 17 | |
| 18 | const keys = [ |
| 19 | [u8(0xb), 0xb, 0xb, 0xb, 0xb, 0xb, 0xb, 0xb, 0xb, 0xb, 0xb, 0xb, 0xb, 0xb, 0xb, 0xb], |
| 20 | 'Jefe'.bytes(), |
| 21 | [u8(0xAA), 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, |
| 22 | 0xAA], |
| 23 | [u8(0x01), 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, |
| 24 | 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19], |
| 25 | [u8(0x0c), 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, |
| 26 | 0x0c], |
| 27 | [u8(0xaa), 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, |
| 28 | 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, |
| 29 | 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, |
| 30 | 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, |
| 31 | 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, |
| 32 | 0xaa, 0xaa, 0xaa, 0xaa, 0xaa], |
| 33 | [u8(0xaa), 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, |
| 34 | 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, |
| 35 | 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, |
| 36 | 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, |
| 37 | 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, |
| 38 | 0xaa, 0xaa, 0xaa, 0xaa, 0xaa], |
| 39 | ] |
| 40 | const data = ['Hi There'.bytes(), 'what do ya want for nothing?'.bytes(), |
| 41 | [u8(0xDD), 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, |
| 42 | 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, |
| 43 | 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, |
| 44 | 0xDD, 0xDD, 0xDD, 0xDD, 0xDD], |
| 45 | [u8(0xcd), 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, |
| 46 | 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, |
| 47 | 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, |
| 48 | 0xcd, 0xcd, 0xcd, 0xcd, 0xcd], |
| 49 | 'Test With Truncation'.bytes(), 'Test Using Larger Than Block-Size Key - Hash Key First'.bytes(), |
| 50 | 'Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data'.bytes()] |
| 51 | |
| 52 | fn test_hmac_md5() { |
| 53 | md5_expected_results := [ |
| 54 | '9294727a3638bb1c13f48ef8158bfc9d', |
| 55 | '750c783e6ab0b503eaa86e310a5db738', |
| 56 | '56be34521d144c88dbb8c733f0e8b3f6', |
| 57 | '697eaf0aca3a3aea3a75164746ffaa79', |
| 58 | '56461ef2342edc00f9bab995690efd4c', |
| 59 | '6b1ab7fe4bd7bf8f0b62e6ce61b9d0cd', |
| 60 | '6f630fad67cda0ee1fb1f562db3aa53e', |
| 61 | ] |
| 62 | mut result := '' |
| 63 | for i, key in keys { |
| 64 | result = new(key, data[i], md5.sum, md5.block_size).hex() |
| 65 | assert result == md5_expected_results[i] |
| 66 | } |
| 67 | } |
| 68 | |
| 69 | fn test_hmac_sha1() { |
| 70 | sha1_expected_results := [ |
| 71 | '675b0b3a1b4ddf4e124872da6c2f632bfed957e9', |
| 72 | 'effcdf6ae5eb2fa2d27416d5f184df9c259a7c79', |
| 73 | 'd730594d167e35d5956fd8003d0db3d3f46dc7bb', |
| 74 | '4c9007f4026250c6bc8414f9bf50c86c2d7235da', |
| 75 | '37268b7e21e84da5720c53c4ba03ad1104039fa7', |
| 76 | 'aa4ae5e15272d00e95705637ce8a3b55ed402112', |
| 77 | 'e8e99d0f45237d786d6bbaa7965c7808bbff1a91', |
| 78 | ] |
| 79 | mut result := '' |
| 80 | for i, key in keys { |
| 81 | result = new(key, data[i], sha1.sum, sha1.block_size).hex() |
| 82 | assert result == sha1_expected_results[i] |
| 83 | } |
| 84 | } |
| 85 | |
| 86 | fn test_hmac_sha224() { |
| 87 | sha224_expected_results := [ |
| 88 | '4e841ce7a4ae83fbcf71e3cd64bfbf277f73a14680aae8c518ac7861', |
| 89 | 'a30e01098bc6dbbf45690f3a7e9e6d0f8bbea2a39e6148008fd05e44', |
| 90 | 'cbff7c2716bbaa7c77bed4f491d3e8456cb6c574e92f672b291acf5b', |
| 91 | '6c11506874013cac6a2abc1bb382627cec6a90d86efc012de7afec5a', |
| 92 | 'd812c97a5e1412f2eb08dc4d95548117780f2930fa4e0e553d985c68', |
| 93 | '9ed2eebc0ed23576efc815e9b5bc0d9257e36d13e4dd5d5f0c809b38', |
| 94 | '7358939e58683a448ac5065196d33191a1c1d33d4b8b0304dc60f5e0', |
| 95 | ] |
| 96 | mut result := '' |
| 97 | for i, key in keys { |
| 98 | result = new(key, data[i], sha256.sum224, sha256.block_size).hex() |
| 99 | assert result == sha224_expected_results[i] |
| 100 | } |
| 101 | } |
| 102 | |
| 103 | fn test_hmac_sha256() { |
| 104 | sha256_expected_results := [ |
| 105 | '492ce020fe2534a5789dc3848806c78f4f6711397f08e7e7a12ca5a4483c8aa6', |
| 106 | '5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843', |
| 107 | '7dda3cc169743a6484649f94f0eda0f9f2ff496a9733fb796ed5adb40a44c3c1', |
| 108 | '82558a389a443c0ea4cc819899f2083a85f0faa3e578f8077a2e3ff46729665b', |
| 109 | '2282475faa2def6936685d9c06566f2d782307ace7a27ada2037e6285efcb008', |
| 110 | '6953025ed96f0c09f80a96f78e6538dbe2e7b820e3dd970e7ddd39091b32352f', |
| 111 | '6355ac22e890d0a3c8481a5ca4825bc884d3e7a1ff98a2fc2ac7d8e064c3b2e6', |
| 112 | ] |
| 113 | mut result := '' |
| 114 | for i, key in keys { |
| 115 | result = new(key, data[i], sha256.sum, sha256.block_size).hex() |
| 116 | assert result == sha256_expected_results[i] |
| 117 | } |
| 118 | } |
| 119 | |
| 120 | fn test_hmac_sha384() { |
| 121 | sha384_expected_results := [ |
| 122 | '7afaa633e20d379b02395915fbc385ff8dc27dcd3885e1068ab942eeab52ec1f20ad382a92370d8b2e0ac8b83c4d53bf', |
| 123 | 'af45d2e376484031617f78d2b58a6b1b9c7ef464f5a01b47e42ec3736322445e8e2240ca5e69e2c78b3239ecfab21649', |
| 124 | '1383e82e28286b91f4cc7afbd13d5b5c6f887c05e7c4542484043a37a5fe45802a9470fb663bd7b6570fe2f503fc92f5', |
| 125 | '3e8a69b7783c25851933ab6290af6ca77a9981480850009cc5577c6e1f573b4e6801dd23c4a7d679ccf8a386c674cffb', |
| 126 | '10e0150a42d0ae6f9d3f55da7a8261c383b024c8d81b40e95d120acfd53fb018af5e77846ad99451059f0579cb9a718b', |
| 127 | '69d2e2f55de9f09878f04d23d8670d49cb734825cdb9cd9e72e446171a43540b90e17cf086e6fa3a599382a286c61340', |
| 128 | '34f065bdedc2487c30a634d9a49cf42116f78bb386ea4d498aea05c0077f05373cfdaa9b59a7b0481bced9e3f55016a9', |
| 129 | ] |
| 130 | mut result := '' |
| 131 | for i, key in keys { |
| 132 | result = new(key, data[i], sha512.sum384, sha512.block_size).hex() |
| 133 | assert result == sha384_expected_results[i] |
| 134 | } |
| 135 | } |
| 136 | |
| 137 | fn test_hmac_sha512() { |
| 138 | sha512_expected_results := [ |
| 139 | '7641c48a3b4aa8f887c07b3e83f96affb89c978fed8c96fcbbf4ad596eebfe496f9f16da6cd080ba393c6f365ad72b50d15c71bfb1d6b81f66a911786c6ce932', |
| 140 | '164b7a7bfcf819e2e395fbe73b56e0a387bd64222e831fd610270cd7ea2505549758bf75c05a994a6d034f65f8f0e6fdcaeab1a34d4a6b4b636e070a38bce737', |
| 141 | 'ad9b5c7de72693737cd5e9d9f41170d18841fec1201c1c1b02e05cae116718009f771cad9946ddbf7e3cde3e818d9ae85d91b2badae94172d096a44a79c91e86', |
| 142 | 'b0ba465637458c6990e5a8c5f61d4af7e576d97ff94b872de76f8050361ee3dba91ca5c11aa25eb4d679275cc5788063a5f19741120c4f2de2adebeb10a298dd', |
| 143 | 'da2c03a1f8d34ce536b246c9dc47281d7052d3f82a7b4f6dfe9ee9f5accdae02dd72f9b89324f25f9b8276a2e3d31c0a87b8b6c1dcefd7602cc881a7d120e3fd', |
| 144 | '132c9ebc32531071f6c4d9e8842291e9403e5940f813170a3ba3a0dd6c055c8b8ca587b24c56c47f3c1f2fb8ee8f9fbc8d92deed0f83426be3e8a2e9056778b3', |
| 145 | '09441cda584ed2f4d2f5b519c71baf3c79cce19dfc89a548e73b3bb382a9124d6e792b77bf57903ff5858e5d111d15f45d6fd118eea023f28d2eb234ebe62f85', |
| 146 | ] |
| 147 | mut result := '' |
| 148 | for i, key in keys { |
| 149 | result = new(key, data[i], sha512.sum512, sha512.block_size).hex() |
| 150 | assert result == sha512_expected_results[i] |
| 151 | } |
| 152 | } |
| 153 | |
| 154 | fn test_hmac_blake2s_256() { |
| 155 | blake2s_256_expected_results := [ |
| 156 | '139cd736b926dae4853aab90655120e0305c476fde978166e472c7c8698c21b1', |
| 157 | '90b6281e2f3038c9056af0b4a7e763cae6fe5d9eb4386a0ec95237890c104ff0', |
| 158 | '92394bc2486bea31db01c74be46332edd1499e9700ea41df0670df79fcc0f7c6', |
| 159 | '464434dcbece095d456a1d62d6ec56f898e625a39e5c52bdf94daf111bad83aa', |
| 160 | '97a771b4e4e2fd4d4d0fd8aca2a0663ad8ad4a463cabbf603bf837dd84dec050', |
| 161 | '41202b7be1fd03f84658f4c18a08b43ddbbd73eb012750c8d1ebc8601f1e064c', |
| 162 | '467201ef5997a3442932b318083488cf9aa1d89bef2146154b4816d34863e33d', |
| 163 | ] |
| 164 | mut result := '' |
| 165 | for i, key in keys { |
| 166 | result = new(key, data[i], blake2s.sum256, blake2s.block_size).hex() |
| 167 | assert result == blake2s_256_expected_results[i] |
| 168 | } |
| 169 | } |
| 170 | |
| 171 | fn test_hmac_blake2s_224() { |
| 172 | blake2s_224_expected_results := [ |
| 173 | 'c0f46dbc41ffafb1d0caf1756cfb19177c78571d0d187e83f8683b3b', |
| 174 | 'c33653634100f77a9359bfc4b3bd40a4a629766fb1da794dbb5cc45b', |
| 175 | 'eeff700c648c71f8648077862d2aeb5108e7887adc2aaa2ee25aefab', |
| 176 | '42c6a6688981f6f33c02ceafb0439a496748d45d99fdde22d95313ac', |
| 177 | 'fa78ffd75f2cdc6dc1304b874affd069783cfa8e6ae00dcb99de31f7', |
| 178 | '99d1e80dbc842755776ae32309e19020bbb54834c5c7d0c49fee7df2', |
| 179 | '17b9ebb1426a5a3dd6aa91567bd9cb9c19b3dc007adb726e55b98926', |
| 180 | ] |
| 181 | mut result := '' |
| 182 | for i, key in keys { |
| 183 | result = new(key, data[i], blake2s.sum224, blake2s.block_size).hex() |
| 184 | assert result == blake2s_224_expected_results[i] |
| 185 | } |
| 186 | } |
| 187 | |
| 188 | fn test_hmac_blake2s_160() { |
| 189 | blake2s_160_expected_results := [ |
| 190 | 'e53d35df4b62a18e0f9f65be35db58ffd84f4cf7', |
| 191 | '8356d437404c027ab98bf581190a96ca83ac7dc0', |
| 192 | 'f9631e19deb77bd9ac0761015b7fddfafe14af12', |
| 193 | '63a8d39896fa7c4c5dac8c82ac20c783d7865e0c', |
| 194 | '05db15418a3b7938fcab45bf760a88e842033556', |
| 195 | '580927d927e9279e3f3f95d19b1c79564a0d6326', |
| 196 | '6f3127fcba040fe6ea552b22c39b0fd83abca19a', |
| 197 | ] |
| 198 | mut result := '' |
| 199 | for i, key in keys { |
| 200 | result = new(key, data[i], blake2s.sum160, blake2s.block_size).hex() |
| 201 | assert result == blake2s_160_expected_results[i] |
| 202 | } |
| 203 | } |
| 204 | |
| 205 | fn test_hmac_blake2s_128() { |
| 206 | blake2s_128_expected_results := [ |
| 207 | '78a8c08a89de396ba4a75c543e6415f8', |
| 208 | '5edb7b76d61965470774a215034e8b18', |
| 209 | '77e6870fa0e9dd65751d29204086bed0', |
| 210 | 'b43e3298ab9be441dd3cd26c70208b4a', |
| 211 | '43f416bd5d0933b4ad35aeef9c6680a7', |
| 212 | '39c14a9cebb8e2d8d19594783aed29e4', |
| 213 | '96a72e3adf5e0b02d4e6d4e8a7342a77', |
| 214 | ] |
| 215 | mut result := '' |
| 216 | for i, key in keys { |
| 217 | result = new(key, data[i], blake2s.sum128, blake2s.block_size).hex() |
| 218 | assert result == blake2s_128_expected_results[i] |
| 219 | } |
| 220 | } |
| 221 | |
| 222 | fn test_hmac_blake2b_512() { |
| 223 | blake2b_512_expected_results := [ |
| 224 | 'be2c398cbd5eef033031f9cee2caba52b280604f4afabf86de21973398c821fd120de5277f08955234182989c68b640af7dfa8cb9228eef4b48ffe768ef595eb', |
| 225 | '6ff884f8ddc2a6586b3c98a4cd6ebdf14ec10204b6710073eb5865ade37a2643b8807c1335d107ecdb9ffeaeb6828c4625ba172c66379efcd222c2de11727ab4', |
| 226 | '548fc7c3d5bd5a0ac74c5fe582037a259c774b81fb791d6c86e675d03b361939e21ea0fb9c6401df22170ebf8017d908675bbcf65911025a1ab5d271a372f43f', |
| 227 | 'e5dbb6de2fee42a1caa06e4e7b84ce408ffa5c4a9de2632eca769cde8875014c72d0720feaf53f76e6a180357f528d7bf484fa3a14e8cc1f0f3bada717b43491', |
| 228 | '057f3bcc3511aa9627d96ab2ad02ec3dc86741514d19a3c9b10e539b0ca7c2587d9d04118636a67e18871633ecf8705a3ef6697cf6b64339f71b8cdffab89e34', |
| 229 | '368aba23ca42648157771936b436a0ecb3d83e5fe21e020fef2a08dc9e59739ea919a8d0f46c45b99491f426f1e7c62352d9d67c066571d74e191b69bedaf718', |
| 230 | 'f1c9b64e121330c512dc31e0d4a2fc84b7ca5be64e08934a7fc4640c4a1f5cc3c1f34d811c8079cc2df65a4e5d68baf833a1ec558546abeaa7d564840618db7b', |
| 231 | ] |
| 232 | mut result := '' |
| 233 | for i, key in keys { |
| 234 | result = new(key, data[i], blake2b.sum512, blake2b.block_size).hex() |
| 235 | assert result == blake2b_512_expected_results[i] |
| 236 | } |
| 237 | } |
| 238 | |
| 239 | fn test_hmac_blake2b_384() { |
| 240 | blake2b_384_expected_results := [ |
| 241 | 'ce5d294bf1a260a93d29d4380fb5b66ebff87bc5b5d97c8889c115848ac0c559ef5b257c7ea1af05e6794e540a07d29a', |
| 242 | 'e87f61624bc6c1db706a1efcc98e7e98c0ab8fea0978dbd87e2852406fdd313c87968c5b825847f3c04d975b8b88598d', |
| 243 | '9a24ae99bdddb091e966897c9ed3866d403c8d57bb99288aba05c0586304163ff1917420c746edaa327c99c419249799', |
| 244 | '123edcc587acf610f9f063c8873b94af1ca814e83b65abfd30bcfc4dbc2cc0bc6f1cd8460e5970cc375842bee91f0acb', |
| 245 | '08fb6e2930399c032169428b86c6799284fe3d42ac950698ecf61c08a1b40d7e84627ac578332947f661c2fe2e5f03c9', |
| 246 | '18666044866b52e2d76276a803222cdeb4ee18b41e8a535dca6b14723a7a5031c09463faa88a64d6a5e448220e20e676', |
| 247 | 'c9d0155de83454f0720b5310b4b891ddc9ab702b8260b15aa6f7291efec95b7e7a2c986019814b7c28c105c22f0ef961', |
| 248 | ] |
| 249 | mut result := '' |
| 250 | for i, key in keys { |
| 251 | result = new(key, data[i], blake2b.sum384, blake2b.block_size).hex() |
| 252 | assert result == blake2b_384_expected_results[i] |
| 253 | } |
| 254 | } |
| 255 | |
| 256 | fn test_hmac_blake2b_256() { |
| 257 | blake2b_256_expected_results := [ |
| 258 | '1a8becea07bab690945471ff79895bfbec032a3957bc9142a4778811915931ba', |
| 259 | '3cf096eeeb2202a250db168c4823a44ef4618ebabb225789386fed316131e3a0', |
| 260 | 'efa4e41fcd8c0f6a568d5d274121095ff9676e6c1eb04fdd679d9c119669d778', |
| 261 | '8cdc727af11f390abd2323aac291c11054ac64352cdd9b5218afcd3e8d6fab45', |
| 262 | '7fe6b268c08631ac118a149b92348e02c640d1804291cc695f89f41ff9aeaee6', |
| 263 | 'c093736a225e9f315fc3af8ca018f6e9b0a1c7c9974b116bfa63e2b7faf96a71', |
| 264 | 'dce7f41e3db51656ffc97259ca0ef3358cbfb41ac3e74e2dd9cd8639ab4996a0', |
| 265 | ] |
| 266 | mut result := '' |
| 267 | for i, key in keys { |
| 268 | result = new(key, data[i], blake2b.sum256, blake2b.block_size).hex() |
| 269 | assert result == blake2b_256_expected_results[i] |
| 270 | } |
| 271 | } |
| 272 | |
| 273 | fn test_hmac_blake2b_160() { |
| 274 | blake2b_160_expected_results := [ |
| 275 | '5e9e7dc73976e03bbb71ea70d4bebf692c49ecbe', |
| 276 | 'c4728ccc2f7600f89d9a480514910b9f5daf3dd6', |
| 277 | 'b178e2dfd75d74645c326fac538758d53e305d56', |
| 278 | '253d365a8930b7ff30ae85e862c464b7309056f8', |
| 279 | 'a41030927a208f3234251c8ca54731adc58c3c81', |
| 280 | 'e8f1b365fd6a63ca64e306901604aa33ea018c8b', |
| 281 | 'fc5fb8ec933174d97c7712fa8f8802467ac42b1e', |
| 282 | ] |
| 283 | mut result := '' |
| 284 | for i, key in keys { |
| 285 | result = new(key, data[i], blake2b.sum160, blake2b.block_size).hex() |
| 286 | assert result == blake2b_160_expected_results[i] |
| 287 | } |
| 288 | } |
| 289 | |
| 290 | fn test_hmac_blake3_256() { |
| 291 | blake3_256_expected_results := [ |
| 292 | 'e09d0600c83f2e8e7c6a3fd4758c95afa196dfab6adb9f408768349624779c52', |
| 293 | '732da99ccc24e277b2fec6c42e0f29f1093689ff0821de4df22f7faec5168776', |
| 294 | '93411058fa4acdbdb1661e487713cfa2b1196494360fdbe10759e1d632c8c52e', |
| 295 | 'ec84dec849126b9085c6e674d589d8eb830d9b892008cc60a2e91588c506876d', |
| 296 | '694fa508d2617fd490e80b0b5059df79811c4522e9d10d1fdf159fc75c80db2b', |
| 297 | 'b097a8fc0bcc3e23bcbaaa200c17d64f5823be05cc222544bfcc5113cda695fe', |
| 298 | 'dac8165b07656b282c5b9f2f2cf22569560778cb6240b11a383f2bf466f1ba36', |
| 299 | ] |
| 300 | mut result := '' |
| 301 | for i, key in keys { |
| 302 | result = new(key, data[i], blake3.sum256, blake3.block_size).hex() |
| 303 | assert result == blake3_256_expected_results[i] |
| 304 | } |
| 305 | } |
| 306 | |
| 307 | fn test_hmac_sha3_512() { |
| 308 | sha3_512_expected_results := [ |
| 309 | 'd2d9588c7e7886b08e09b56a7ac9d7e30a4badf13b37a041f5dfde34d87c086b5db1a7ec679bcfce81fa2eee982573c01dfb8d988e302f78d7b20d7d7ac2dfd7', |
| 310 | '5a4bfeab6166427c7a3647b747292b8384537cdb89afb3bf5665e4c5e709350b287baec921fd7ca0ee7a0c31d022a95e1fc92ba9d77df883960275beb4e62024', |
| 311 | 'f25055024a17dfe15a25d6c40b00f45e8548f641844f2288170430ba0b7889bfaf04d9398121d165375300fe813f3cb6db9639921dcfb712b9177b8f5261d474', |
| 312 | 'b27eab1d6e8d87461c29f7f5739dd58e98aa35f8e823ad38c5492a2088fa0281993bbfff9a0e9c6bf121ae9ec9bb09d84a5ebac817182ea974673fb133ca0d1d', |
| 313 | '69e9553223ede3637f08f9cc01ea9ded8f3b4202b5cc1feb60071e195a942f0ca0fa1cd70d3f1f9f24b2e18057b3001e7d5160e61eb6099f75ea4e0d6b849bd2', |
| 314 | 'eea495d39d9a07154b1266b028e233b9fd84de884ac8f0578e679f095ef14da96d0a355ed4738565884aec755c1b3f5ff09a918b437f6526e17dd8e77f425b95', |
| 315 | '1488670c683959b5304fa17c172bea81724a249b44981a3eb52cfc66ff0758b7cd1204745131b8adbc714db7fc4550ce26af5f2326067ad1e699f05cae8bb792', |
| 316 | ] |
| 317 | |
| 318 | mut result := '' |
| 319 | for i, key in keys { |
| 320 | result = new(key, data[i], sha3.sum512, sha3.rate_512).hex() |
| 321 | assert result == sha3_512_expected_results[i] |
| 322 | } |
| 323 | } |
| 324 | |
| 325 | fn test_hmac_sha3_384() { |
| 326 | sha3_384_expected_results := [ |
| 327 | 'b34fdb255dc7fb7f0c4bb2c1caeb0379b81ece60ec1b3cb2c5ec509141fcb77ca16d1e06f93049734be4948e24b932e3', |
| 328 | 'f1101f8cbf9766fd6764d2ed61903f21ca9b18f57cf3e1a23ca13508a93243ce48c045dc007f26a21b3f5e0e9df4c20a', |
| 329 | '5bd8a0b98f9f4201eaec41d01fd1e274c266a2517527c1879b0460a692e1a430aefb82f0c9aea33406582ffeeef0bba6', |
| 330 | '3a5d7a879702c086bc96d1dd8aa15d9c46446b95521311c606fdc4e308f4b984da2d0f9449b3ba8425ec7fb8c31bc136', |
| 331 | '0cdfc206fd95ca1f27e8e8bd443164814460ca50f8d34d776b18f9eb300231a3d5bace731f694a59faa84c2e4ae7e235', |
| 332 | '7172a2a2bb002c22669a2f85b8faaacfcc4e8a19d47ef5ee7a97f79bf21e1d89403ab3768b43929f12eded01e3ddd604', |
| 333 | '45081e207f796f372aff5a098249f52d045e350ed5c805b3445a79ad0d4931c4b86d41bd1bb2ac935d1b32c344d56709', |
| 334 | ] |
| 335 | |
| 336 | mut result := '' |
| 337 | for i, key in keys { |
| 338 | result = new(key, data[i], sha3.sum384, sha3.rate_384).hex() |
| 339 | assert result == sha3_384_expected_results[i] |
| 340 | } |
| 341 | } |
| 342 | |
| 343 | fn test_hmac_sha3_256() { |
| 344 | sha3_256_expected_results := [ |
| 345 | '874d1d4e6e8302439bf707052e5d787d92bffcf0715853784e30da740a81e198', |
| 346 | 'c7d4072e788877ae3596bbb0da73b887c9171f93095b294ae857fbe2645e1ba5', |
| 347 | 'b55008323817b4df9398f32fd09d3ce624a3ac2a4f329c3b750c47647990de2a', |
| 348 | '57366a45e2305321a4bc5aa5fe2ef8a921f6af8273d7fe7be6cfedb3f0aea6d7', |
| 349 | 'a0cd54f140b61480cd22120d600e30c2508c4ae0d335fd69770f2b4ddc80cd19', |
| 350 | '016a1a59d67944c350d992a9bc1e8e7f6d1ace9c9ff6be92eda103961fe897ab', |
| 351 | '415c2b5cde6b2aecd637fa2384aa87e5a0b0c5bc20d53550bbac5474b18769bf', |
| 352 | ] |
| 353 | |
| 354 | mut result := '' |
| 355 | for i, key in keys { |
| 356 | result = new(key, data[i], sha3.sum256, sha3.rate_256).hex() |
| 357 | assert result == sha3_256_expected_results[i] |
| 358 | } |
| 359 | } |
| 360 | |
| 361 | fn test_hmac_sha3_224() { |
| 362 | sha3_224_expected_results := [ |
| 363 | 'f68da7f7bf577de799bb1224b7acfef9e8de015a63475ed5904a4693', |
| 364 | '7fdb8dd88bd2f60d1b798634ad386811c2cfc85bfaf5d52bbace5e66', |
| 365 | '3c9b90dbbd88c2af888fb1b43ec9d424c7fbf0d2b9d0140952b110b5', |
| 366 | 'a9d7685a19c4e0dbd9df2556cc8a7d2a7733b67625ce594c78270eeb', |
| 367 | 'f865c4fe082e4dd1873a9d83e1ca3bf827c3256d91274574a8b66f13', |
| 368 | '852c3fb04b18a04df20c007e608027c44230fdd440cf7a50a0bc4fd9', |
| 369 | '14db797c7f4c69fd1d4c0ababeb9f90971fc62622cc7852dee156265', |
| 370 | ] |
| 371 | |
| 372 | mut result := '' |
| 373 | for i, key in keys { |
| 374 | result = new(key, data[i], sha3.sum224, sha3.rate_224).hex() |
| 375 | assert result == sha3_224_expected_results[i] |
| 376 | } |
| 377 | } |
| 378 | |
| 379 | fn test_hmac_equal() { |
| 380 | mac1_1 := |
| 381 | '7641c48a3b4aa8f887c07b3e83f96affb89c978fed8c96fcbbf4ad596eebfe496f9f16da6cd080ba393c6f365ad72b50d15c71bfb1d6b81f66a911786c6ce932'.bytes() |
| 382 | mac1_2 := |
| 383 | '7641c48a3b4aa8f887c07b3e83f96affb89c978fed8c96fcbbf4ad596eebfe496f9f16da6cd080ba393c6f365ad72b50d15c71bfb1d6b81f66a911786c6ce932'.bytes() |
| 384 | mac2_1 := |
| 385 | '164b7a7bfcf819e2e395fbe73b56e0a387bd64222e831fd610270cd7ea2505549758bf75c05a994a6d034f65f8f0e6fdcaeab1a34d4a6b4b636e070a38bce737'.bytes() |
| 386 | mac2_2 := |
| 387 | '164b7a7bfcf819e2e395fbe73b56e0a387bd64222e831fd610270cd7ea2505549758bf75c05a994a6d034f65f8f0e6fdcaeab1a34d4a6b4b636e070a38bce737'.bytes() |
| 388 | assert equal(mac1_1, mac1_2) |
| 389 | assert equal(mac2_1, mac2_2) |
| 390 | assert !equal(mac1_1, mac2_1) |
| 391 | assert !equal(mac1_1, mac2_2) |
| 392 | } |
| 393 | |