chiark / gitweb /
siphash24: split out the finalization step
authorTom Gundersen <teg@jklm.no>
Sat, 3 Oct 2015 18:14:18 +0000 (20:14 +0200)
committerSven Eden <yamakuzure@gmx.net>
Wed, 29 Mar 2017 08:45:10 +0000 (10:45 +0200)
src/basic/siphash24.c

index 66e5a61..e7adfe4 100644 (file)
@@ -72,6 +72,16 @@ static void siphash_init(struct siphash *state, const uint8_t k[16]) {
   state->v3 = 0x7465646279746573ULL ^ k1;
 }
 
+static u64 siphash24_finalize(struct siphash *state) {
+  state->v2 ^= 0xff;
+  SIPROUND(state);
+  SIPROUND(state);
+  SIPROUND(state);
+  SIPROUND(state);
+
+  return state->v0 ^ state->v1 ^ state->v2  ^ state->v3;
+}
+
 /* SipHash-2-4 */
 void siphash24(uint8_t out[8], const void *_in, size_t inlen, const uint8_t k[16])
 {
@@ -137,11 +147,8 @@ void siphash24(uint8_t out[8], const void *_in, size_t inlen, const uint8_t k[16
   printf( "(%3d) v2 %08x %08x\n", ( int )inlen, ( u32 )( state.v2 >> 32 ), ( u32 )state.v2 );
   printf( "(%3d) v3 %08x %08x\n", ( int )inlen, ( u32 )( state.v3 >> 32 ), ( u32 )state.v3 );
 #endif
-  state.v2 ^= 0xff;
-  SIPROUND(&state);
-  SIPROUND(&state);
-  SIPROUND(&state);
-  SIPROUND(&state);
-  b = state.v0 ^ state.v1 ^ state.v2  ^ state.v3;
+
+  b = siphash24_finalize(&state);
+
   U64TO8_LE( out, b );
 }