1 #![allow(dead_code, clippy::unreadable_literal)] 2 3 pub const STATE_LEN: usize = 8; 4 pub const BLOCK_LEN: usize = 16; 5 6 /// Constants necessary for SHA-256 family of digests. 7 pub const K32: [u32; 64] = [ 8 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 9 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 10 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 11 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 12 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 13 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 14 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 15 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2, 16 ]; 17 18 /// Constants necessary for SHA-256 family of digests. 19 pub const K32X4: [[u32; 4]; 16] = [ 20 [K32[3], K32[2], K32[1], K32[0]], 21 [K32[7], K32[6], K32[5], K32[4]], 22 [K32[11], K32[10], K32[9], K32[8]], 23 [K32[15], K32[14], K32[13], K32[12]], 24 [K32[19], K32[18], K32[17], K32[16]], 25 [K32[23], K32[22], K32[21], K32[20]], 26 [K32[27], K32[26], K32[25], K32[24]], 27 [K32[31], K32[30], K32[29], K32[28]], 28 [K32[35], K32[34], K32[33], K32[32]], 29 [K32[39], K32[38], K32[37], K32[36]], 30 [K32[43], K32[42], K32[41], K32[40]], 31 [K32[47], K32[46], K32[45], K32[44]], 32 [K32[51], K32[50], K32[49], K32[48]], 33 [K32[55], K32[54], K32[53], K32[52]], 34 [K32[59], K32[58], K32[57], K32[56]], 35 [K32[63], K32[62], K32[61], K32[60]], 36 ]; 37 38 /// Constants necessary for SHA-512 family of digests. 39 pub const K64: [u64; 80] = [ 40 0x428a2f98d728ae22, 41 0x7137449123ef65cd, 42 0xb5c0fbcfec4d3b2f, 43 0xe9b5dba58189dbbc, 44 0x3956c25bf348b538, 45 0x59f111f1b605d019, 46 0x923f82a4af194f9b, 47 0xab1c5ed5da6d8118, 48 0xd807aa98a3030242, 49 0x12835b0145706fbe, 50 0x243185be4ee4b28c, 51 0x550c7dc3d5ffb4e2, 52 0x72be5d74f27b896f, 53 0x80deb1fe3b1696b1, 54 0x9bdc06a725c71235, 55 0xc19bf174cf692694, 56 0xe49b69c19ef14ad2, 57 0xefbe4786384f25e3, 58 0x0fc19dc68b8cd5b5, 59 0x240ca1cc77ac9c65, 60 0x2de92c6f592b0275, 61 0x4a7484aa6ea6e483, 62 0x5cb0a9dcbd41fbd4, 63 0x76f988da831153b5, 64 0x983e5152ee66dfab, 65 0xa831c66d2db43210, 66 0xb00327c898fb213f, 67 0xbf597fc7beef0ee4, 68 0xc6e00bf33da88fc2, 69 0xd5a79147930aa725, 70 0x06ca6351e003826f, 71 0x142929670a0e6e70, 72 0x27b70a8546d22ffc, 73 0x2e1b21385c26c926, 74 0x4d2c6dfc5ac42aed, 75 0x53380d139d95b3df, 76 0x650a73548baf63de, 77 0x766a0abb3c77b2a8, 78 0x81c2c92e47edaee6, 79 0x92722c851482353b, 80 0xa2bfe8a14cf10364, 81 0xa81a664bbc423001, 82 0xc24b8b70d0f89791, 83 0xc76c51a30654be30, 84 0xd192e819d6ef5218, 85 0xd69906245565a910, 86 0xf40e35855771202a, 87 0x106aa07032bbd1b8, 88 0x19a4c116b8d2d0c8, 89 0x1e376c085141ab53, 90 0x2748774cdf8eeb99, 91 0x34b0bcb5e19b48a8, 92 0x391c0cb3c5c95a63, 93 0x4ed8aa4ae3418acb, 94 0x5b9cca4f7763e373, 95 0x682e6ff3d6b2b8a3, 96 0x748f82ee5defb2fc, 97 0x78a5636f43172f60, 98 0x84c87814a1f0ab72, 99 0x8cc702081a6439ec, 100 0x90befffa23631e28, 101 0xa4506cebde82bde9, 102 0xbef9a3f7b2c67915, 103 0xc67178f2e372532b, 104 0xca273eceea26619c, 105 0xd186b8c721c0c207, 106 0xeada7dd6cde0eb1e, 107 0xf57d4f7fee6ed178, 108 0x06f067aa72176fba, 109 0x0a637dc5a2c898a6, 110 0x113f9804bef90dae, 111 0x1b710b35131c471b, 112 0x28db77f523047d84, 113 0x32caab7b40c72493, 114 0x3c9ebe0a15c9bebc, 115 0x431d67c49c100d4c, 116 0x4cc5d4becb3e42b6, 117 0x597f299cfc657e2a, 118 0x5fcb6fab3ad6faec, 119 0x6c44198c4a475817, 120 ]; 121 122 /// Constants necessary for SHA-512 family of digests. 123 pub const K64X2: [[u64; 2]; 40] = [ 124 [K64[1], K64[0]], 125 [K64[3], K64[2]], 126 [K64[5], K64[4]], 127 [K64[7], K64[6]], 128 [K64[9], K64[8]], 129 [K64[11], K64[10]], 130 [K64[13], K64[12]], 131 [K64[15], K64[14]], 132 [K64[17], K64[16]], 133 [K64[19], K64[18]], 134 [K64[21], K64[20]], 135 [K64[23], K64[22]], 136 [K64[25], K64[24]], 137 [K64[27], K64[26]], 138 [K64[29], K64[28]], 139 [K64[31], K64[30]], 140 [K64[33], K64[32]], 141 [K64[35], K64[34]], 142 [K64[37], K64[36]], 143 [K64[39], K64[38]], 144 [K64[41], K64[40]], 145 [K64[43], K64[42]], 146 [K64[45], K64[44]], 147 [K64[47], K64[46]], 148 [K64[49], K64[48]], 149 [K64[51], K64[50]], 150 [K64[53], K64[52]], 151 [K64[55], K64[54]], 152 [K64[57], K64[56]], 153 [K64[59], K64[58]], 154 [K64[61], K64[60]], 155 [K64[63], K64[62]], 156 [K64[65], K64[64]], 157 [K64[67], K64[66]], 158 [K64[69], K64[68]], 159 [K64[71], K64[70]], 160 [K64[73], K64[72]], 161 [K64[75], K64[74]], 162 [K64[77], K64[76]], 163 [K64[79], K64[78]], 164 ]; 165 166 pub static H224: [u32; STATE_LEN] = [ 167 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4, 168 ]; 169 170 pub static H256: [u32; STATE_LEN] = [ 171 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19, 172 ]; 173 174 pub static H384: [u64; STATE_LEN] = [ 175 0xcbbb9d5dc1059ed8, 176 0x629a292a367cd507, 177 0x9159015a3070dd17, 178 0x152fecd8f70e5939, 179 0x67332667ffc00b31, 180 0x8eb44a8768581511, 181 0xdb0c2e0d64f98fa7, 182 0x47b5481dbefa4fa4, 183 ]; 184 185 pub static H512: [u64; STATE_LEN] = [ 186 0x6a09e667f3bcc908, 187 0xbb67ae8584caa73b, 188 0x3c6ef372fe94f82b, 189 0xa54ff53a5f1d36f1, 190 0x510e527fade682d1, 191 0x9b05688c2b3e6c1f, 192 0x1f83d9abfb41bd6b, 193 0x5be0cd19137e2179, 194 ]; 195 196 pub static H512_TRUNC_224: [u64; STATE_LEN] = [ 197 0x8c3d37c819544da2, 198 0x73e1996689dcd4d6, 199 0x1dfab7ae32ff9c82, 200 0x679dd514582f9fcf, 201 0x0f6d2b697bd44da8, 202 0x77e36f7304c48942, 203 0x3f9d85a86a1d36c8, 204 0x1112e6ad91d692a1, 205 ]; 206 207 pub static H512_TRUNC_256: [u64; STATE_LEN] = [ 208 0x22312194fc2bf72c, 209 0x9f555fa3c84c64c2, 210 0x2393b86b6f53b151, 211 0x963877195940eabd, 212 0x96283ee2a88effe3, 213 0xbe5e1e2553863992, 214 0x2b0199fc2c85b8aa, 215 0x0eb72ddc81c52ca2, 216 ]; 217