MCPcopy Create free account
hub / github.com/Snapchat/KeyDB / siphash_nocase

Function siphash_nocase

src/siphash.c:175–233  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

173}
174
175uint64_t siphash_nocase(const uint8_t *in, const size_t inlen, const uint8_t *k)
176{
177#ifndef UNALIGNED_LE_CPU
178 uint64_t hash;
179 uint8_t *out = (uint8_t*) &hash;
180#endif
181 uint64_t v0 = 0x736f6d6570736575ULL;
182 uint64_t v1 = 0x646f72616e646f6dULL;
183 uint64_t v2 = 0x6c7967656e657261ULL;
184 uint64_t v3 = 0x7465646279746573ULL;
185 uint64_t k0 = U8TO64_LE(k);
186 uint64_t k1 = U8TO64_LE(k + 8);
187 uint64_t m;
188 const uint8_t *end = in + inlen - (inlen % sizeof(uint64_t));
189 const int left = inlen & 7;
190 uint64_t b = ((uint64_t)inlen) << 56;
191 v3 ^= k1;
192 v2 ^= k0;
193 v1 ^= k1;
194 v0 ^= k0;
195
196 for (; in != end; in += 8) {
197 m = U8TO64_LE_NOCASE(in);
198 v3 ^= m;
199
200 SIPROUND;
201
202 v0 ^= m;
203 }
204
205 switch (left) {
206 case 7: b |= ((uint64_t)siptlw(in[6])) << 48; /* fall-thru */
207 case 6: b |= ((uint64_t)siptlw(in[5])) << 40; /* fall-thru */
208 case 5: b |= ((uint64_t)siptlw(in[4])) << 32; /* fall-thru */
209 case 4: b |= ((uint64_t)siptlw(in[3])) << 24; /* fall-thru */
210 case 3: b |= ((uint64_t)siptlw(in[2])) << 16; /* fall-thru */
211 case 2: b |= ((uint64_t)siptlw(in[1])) << 8; /* fall-thru */
212 case 1: b |= ((uint64_t)siptlw(in[0])); break;
213 case 0: break;
214 }
215
216 v3 ^= b;
217
218 SIPROUND;
219
220 v0 ^= b;
221 v2 ^= 0xff;
222
223 SIPROUND;
224 SIPROUND;
225
226 b = v0 ^ v1 ^ v2 ^ v3;
227#ifndef UNALIGNED_LE_CPU
228 U64TO8_LE(out, b);
229 return hash;
230#else
231 return b;
232#endif

Callers 2

dictGenCaseHashFunctionFunction · 0.85
siphash_testFunction · 0.85

Calls 1

siptlwFunction · 0.85

Tested by

no test coverage detected