factored dbg traces

main
JP Aumasson 2014-11-19 15:59:29 +01:00
parent a81a6663ed
commit 76342eb3aa
1 changed files with 31 additions and 30 deletions

View File

@ -15,20 +15,21 @@
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
/* default: SipHash-2-4 */
#define cROUNDS 2 #define cROUNDS 2
#define dROUNDS 4 #define dROUNDS 4
#define ROTL(x,b) (uint64_t)( ((x) << (b)) | ( (x) >> (64 - (b))) ) #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)[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), (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)[0]) ) | \
((uint64_t)((p)[1]) << 8) | \ ((uint64_t)((p)[1]) << 8) | \
((uint64_t)((p)[2]) << 16) | \ ((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)[6]) << 48) | \
((uint64_t)((p)[7]) << 56)) ((uint64_t)((p)[7]) << 56))
#define SIPROUND \ #define SIPROUND \
do { \ do { \
v0 += v1; v1=ROTL(v1,13); v1 ^= v0; v0=ROTL(v0,32); \ v0 += v1; v1=ROTL(v1,13); v1 ^= v0; v0=ROTL(v0,32); \
v2 += v3; v3=ROTL(v3,16); v3 ^= v2; \ v2 += v3; v3=ROTL(v3,16); v3 ^= v2; \
v0 += v3; v3=ROTL(v3,21); v3 ^= v0; \ v0 += v3; v3=ROTL(v3,21); v3 ^= v0; \
v2 += v1; v1=ROTL(v1,17); v1 ^= v2; v2=ROTL(v2,32); \ v2 += v1; v1=ROTL(v1,17); v1 ^= v2; v2=ROTL(v2,32); \
} while(0) } 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 ) int siphash( uint8_t *out, const uint8_t *in, uint64_t inlen, const uint8_t *k )
{ {
/* "somepseudorandomlygeneratedbytes" */ /* "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 ) for ( ; in != end; in += 8 )
{ {
m = U8TO64_LE( in ); 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; v3 ^= m;
TRACE;
for( i=0; i<cROUNDS; ++i ) SIPROUND; for( i=0; i<cROUNDS; ++i ) SIPROUND;
v0 ^= m; 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; 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; v3 ^= b;
TRACE;
for( i=0; i<cROUNDS; ++i ) SIPROUND; for( i=0; i<cROUNDS; ++i ) SIPROUND;
v0 ^= b; 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 #ifndef DOUBLE
v2 ^= 0xff; v2 ^= 0xff;
@ -132,6 +131,7 @@ int siphash( uint8_t *out, const uint8_t *in, uint64_t inlen, const uint8_t *k
v2 ^= 0xee; v2 ^= 0xee;
#endif #endif
TRACE;
for( i=0; i<dROUNDS; ++i ) SIPROUND; for( i=0; i<dROUNDS; ++i ) SIPROUND;
b = v0 ^ v1 ^ v2 ^ v3; 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 #ifdef DOUBLE
v1 ^= 0xdd; v1 ^= 0xdd;
TRACE;
for( i=0; i<dROUNDS; ++i ) SIPROUND; for( i=0; i<dROUNDS; ++i ) SIPROUND;
b = v0 ^ v1 ^ v2 ^ v3; b = v0 ^ v1 ^ v2 ^ v3;