factored dbg traces
parent
a81a6663ed
commit
76342eb3aa
61
siphash24.c
61
siphash24.c
|
@ -15,20 +15,21 @@
|
|||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
/* default: SipHash-2-4 */
|
||||
#define cROUNDS 2
|
||||
#define dROUNDS 4
|
||||
|
||||
#define ROTL(x,b) (uint64_t)( ((x) << (b)) | ( (x) >> (64 - (b))) )
|
||||
|
||||
#define U32TO8_LE(p, v) \
|
||||
#define U32TO8_LE(p, v) \
|
||||
(p)[0] = (uint8_t)((v) ); (p)[1] = (uint8_t)((v) >> 8); \
|
||||
(p)[2] = (uint8_t)((v) >> 16); (p)[3] = (uint8_t)((v) >> 24);
|
||||
(p)[2] = (uint8_t)((v) >> 16); (p)[3] = (uint8_t)((v) >> 24);
|
||||
|
||||
#define U64TO8_LE(p, v) \
|
||||
#define U64TO8_LE(p, v) \
|
||||
U32TO8_LE((p), (uint32_t)((v) )); \
|
||||
U32TO8_LE((p) + 4, (uint32_t)((v) >> 32));
|
||||
U32TO8_LE((p) + 4, (uint32_t)((v) >> 32));
|
||||
|
||||
#define U8TO64_LE(p) \
|
||||
#define U8TO64_LE(p) \
|
||||
(((uint64_t)((p)[0]) ) | \
|
||||
((uint64_t)((p)[1]) << 8) | \
|
||||
((uint64_t)((p)[2]) << 16) | \
|
||||
|
@ -38,15 +39,30 @@ U32TO8_LE((p) + 4, (uint32_t)((v) >> 32));
|
|||
((uint64_t)((p)[6]) << 48) | \
|
||||
((uint64_t)((p)[7]) << 56))
|
||||
|
||||
#define SIPROUND \
|
||||
do { \
|
||||
#define SIPROUND \
|
||||
do { \
|
||||
v0 += v1; v1=ROTL(v1,13); v1 ^= v0; v0=ROTL(v0,32); \
|
||||
v2 += v3; v3=ROTL(v3,16); v3 ^= v2; \
|
||||
v0 += v3; v3=ROTL(v3,21); v3 ^= v0; \
|
||||
v2 += v3; v3=ROTL(v3,16); v3 ^= v2; \
|
||||
v0 += v3; v3=ROTL(v3,21); v3 ^= v0; \
|
||||
v2 += v1; v1=ROTL(v1,17); v1 ^= v2; v2=ROTL(v2,32); \
|
||||
} while(0)
|
||||
|
||||
/* SipHash-2-4 */
|
||||
#ifdef DEBUG
|
||||
#define TRACE \
|
||||
do { \
|
||||
printf( "(%3d) v0 %08x %08x\n", \
|
||||
( int )inlen, ( uint32_t )( v0 >> 32 ), ( uint32_t )v0 ); \
|
||||
printf( "(%3d) v1 %08x %08x\n", ( int )inlen, \
|
||||
( uint32_t )( v1 >> 32 ), ( uint32_t )v1 ); \
|
||||
printf( "(%3d) v2 %08x %08x\n", \
|
||||
( int )inlen, ( uint32_t )( v2 >> 32 ), ( uint32_t )v2 ); \
|
||||
printf( "(%3d) v3 %08x %08x\n", \
|
||||
( int )inlen, ( uint32_t )( v3 >> 32 ), ( uint32_t )v3 ); \
|
||||
} while(0)
|
||||
#else
|
||||
#define TRACE
|
||||
#endif
|
||||
|
||||
int siphash( uint8_t *out, const uint8_t *in, uint64_t inlen, const uint8_t *k )
|
||||
{
|
||||
/* "somepseudorandomlygeneratedbytes" */
|
||||
|
@ -74,15 +90,9 @@ int siphash( uint8_t *out, const uint8_t *in, uint64_t inlen, const uint8_t *k
|
|||
for ( ; in != end; in += 8 )
|
||||
{
|
||||
m = U8TO64_LE( in );
|
||||
#ifdef DEBUG
|
||||
printf( "(%3d) v0 %08x %08x\n", ( int )inlen, ( uint32_t )( v0 >> 32 ), ( uint32_t )v0 );
|
||||
printf( "(%3d) v1 %08x %08x\n", ( int )inlen, ( uint32_t )( v1 >> 32 ), ( uint32_t )v1 );
|
||||
printf( "(%3d) v2 %08x %08x\n", ( int )inlen, ( uint32_t )( v2 >> 32 ), ( uint32_t )v2 );
|
||||
printf( "(%3d) v3 %08x %08x\n", ( int )inlen, ( uint32_t )( v3 >> 32 ), ( uint32_t )v3 );
|
||||
printf( "(%3d) compress %08x %08x\n", ( int )inlen, ( uint32_t )( m >> 32 ), ( uint32_t )m );
|
||||
#endif
|
||||
v3 ^= m;
|
||||
|
||||
TRACE;
|
||||
for( i=0; i<cROUNDS; ++i ) SIPROUND;
|
||||
|
||||
v0 ^= m;
|
||||
|
@ -107,24 +117,13 @@ int siphash( uint8_t *out, const uint8_t *in, uint64_t inlen, const uint8_t *k
|
|||
case 0: break;
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
printf( "(%3d) v0 %08x %08x\n", ( int )inlen, ( uint32_t )( v0 >> 32 ), ( uint32_t )v0 );
|
||||
printf( "(%3d) v1 %08x %08x\n", ( int )inlen, ( uint32_t )( v1 >> 32 ), ( uint32_t )v1 );
|
||||
printf( "(%3d) v2 %08x %08x\n", ( int )inlen, ( uint32_t )( v2 >> 32 ), ( uint32_t )v2 );
|
||||
printf( "(%3d) v3 %08x %08x\n", ( int )inlen, ( uint32_t )( v3 >> 32 ), ( uint32_t )v3 );
|
||||
printf( "(%3d) padding %08x %08x\n", ( int )inlen, ( uint32_t )( b >> 32 ), ( uint32_t )b );
|
||||
#endif
|
||||
|
||||
v3 ^= b;
|
||||
|
||||
TRACE;
|
||||
for( i=0; i<cROUNDS; ++i ) SIPROUND;
|
||||
|
||||
v0 ^= b;
|
||||
#ifdef DEBUG
|
||||
printf( "(%3d) v0 %08x %08x\n", ( int )inlen, ( uint32_t )( v0 >> 32 ), ( uint32_t )v0 );
|
||||
printf( "(%3d) v1 %08x %08x\n", ( int )inlen, ( uint32_t )( v1 >> 32 ), ( uint32_t )v1 );
|
||||
printf( "(%3d) v2 %08x %08x\n", ( int )inlen, ( uint32_t )( v2 >> 32 ), ( uint32_t )v2 );
|
||||
printf( "(%3d) v3 %08x %08x\n", ( int )inlen, ( uint32_t )( v3 >> 32 ), ( uint32_t )v3 );
|
||||
#endif
|
||||
|
||||
#ifndef DOUBLE
|
||||
v2 ^= 0xff;
|
||||
|
@ -132,6 +131,7 @@ int siphash( uint8_t *out, const uint8_t *in, uint64_t inlen, const uint8_t *k
|
|||
v2 ^= 0xee;
|
||||
#endif
|
||||
|
||||
TRACE;
|
||||
for( i=0; i<dROUNDS; ++i ) SIPROUND;
|
||||
|
||||
b = v0 ^ v1 ^ v2 ^ v3;
|
||||
|
@ -140,6 +140,7 @@ int siphash( uint8_t *out, const uint8_t *in, uint64_t inlen, const uint8_t *k
|
|||
#ifdef DOUBLE
|
||||
v1 ^= 0xdd;
|
||||
|
||||
TRACE;
|
||||
for( i=0; i<dROUNDS; ++i ) SIPROUND;
|
||||
|
||||
b = v0 ^ v1 ^ v2 ^ v3;
|
||||
|
|
Loading…
Reference in New Issue