X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fbasic%2Fsiphash24.c;h=4bb41786c8b2a27b224ca9b9a0a682bde50e6fb8;hp=acf28967baa1260c4e89a5425fec76ab961c9c85;hb=9742b1e43855b1599bd52ff95af995d9a9d35eac;hpb=eaca07ccfdf5d7dabc50afc7e539c2413dd69d3e diff --git a/src/basic/siphash24.c b/src/basic/siphash24.c index acf28967b..4bb41786c 100644 --- a/src/basic/siphash24.c +++ b/src/basic/siphash24.c @@ -17,10 +17,11 @@ coding style) */ +#include + +#include "macro.h" #include "siphash24.h" -#include "sparse-endian.h" #include "unaligned.h" -#include "util.h" static inline uint64_t rotate_left(uint64_t x, uint8_t b) { assert(b < 64); @@ -57,7 +58,7 @@ void siphash24_init(struct siphash *state, const uint8_t k[16]) { k1 = unaligned_read_le64(k + 8); *state = (struct siphash) { - /* "somepseudorandomlygeneratedbytes" */ + /* "somepseudorandomlygeneratedbytes" */ .v0 = 0x736f6d6570736575ULL ^ k0, .v1 = 0x646f72616e646f6dULL ^ k1, .v2 = 0x6c7967656e657261ULL ^ k0, @@ -78,16 +79,16 @@ void siphash24_compress(const void *_in, size_t inlen, struct siphash *state) { assert(state); /* Update total length */ - state->inlen += inlen; + state->inlen += inlen; /* If padding exists, fill it out */ - if (left > 0) { - for ( ; in < end && left < 8; in ++, left ++ ) - state->padding |= ( ( uint64_t )*in ) << (left * 8); + if (left > 0) { + for ( ; in < end && left < 8; in ++, left ++) + state->padding |= ((uint64_t) *in) << (left * 8); - if (in == end && left < 8) + if (in == end && left < 8) /* We did not have enough input to fill out the padding completely */ - return; + return; #ifdef DEBUG printf("(%3zu) v0 %08x %08x\n", state->inlen, (uint32_t) (state->v0 >> 32), (uint32_t) state->v0); @@ -97,17 +98,17 @@ void siphash24_compress(const void *_in, size_t inlen, struct siphash *state) { printf("(%3zu) compress padding %08x %08x\n", state->inlen, (uint32_t) (state->padding >> 32), (uint32_t)state->padding); #endif - state->v3 ^= state->padding; + state->v3 ^= state->padding; sipround(state); sipround(state); - state->v0 ^= state->padding; + state->v0 ^= state->padding; - state->padding = 0; - } + state->padding = 0; + } - end -= ( state->inlen % sizeof (uint64_t) ); + end -= (state->inlen % sizeof(uint64_t)); - for ( ; in < end; in += 8 ) { + for ( ; in < end; in += 8) { m = unaligned_read_le64(in); #ifdef DEBUG printf("(%3zu) v0 %08x %08x\n", state->inlen, (uint32_t) (state->v0 >> 32), (uint32_t) state->v0); @@ -116,31 +117,38 @@ void siphash24_compress(const void *_in, size_t inlen, struct siphash *state) { printf("(%3zu) v3 %08x %08x\n", state->inlen, (uint32_t) (state->v3 >> 32), (uint32_t) state->v3); printf("(%3zu) compress %08x %08x\n", state->inlen, (uint32_t) (m >> 32), (uint32_t) m); #endif - state->v3 ^= m; + state->v3 ^= m; sipround(state); sipround(state); - state->v0 ^= m; - } + state->v0 ^= m; + } - left = state->inlen & 7; + left = state->inlen & 7; switch (left) { case 7: state->padding |= ((uint64_t) in[6]) << 48; + /* fall through */ case 6: state->padding |= ((uint64_t) in[5]) << 40; + /* fall through */ case 5: state->padding |= ((uint64_t) in[4]) << 32; + /* fall through */ case 4: state->padding |= ((uint64_t) in[3]) << 24; + /* fall through */ case 3: state->padding |= ((uint64_t) in[2]) << 16; + /* fall through */ case 2: state->padding |= ((uint64_t) in[1]) << 8; + /* fall through */ case 1: state->padding |= ((uint64_t) in[0]); + /* fall through */ case 0: break; - } + } } uint64_t siphash24_finalize(struct siphash *state) { @@ -148,20 +156,20 @@ uint64_t siphash24_finalize(struct siphash *state) { assert(state); - b = state->padding | (( ( uint64_t )state->inlen ) << 56); + b = state->padding | (((uint64_t) state->inlen) << 56); #ifdef DEBUG - printf("(%3zu) v0 %08x %08x\n", state->inlen, (uint32_t) (state->v0 >> 32), (uint32_t)state->v0); - printf("(%3zu) v1 %08x %08x\n", state->inlen, (uint32_t) (state->v1 >> 32), (uint32_t)state->v1); - printf("(%3zu) v2 %08x %08x\n", state->inlen, (uint32_t) (state->v2 >> 32), (uint32_t)state->v2); - printf("(%3zu) v3 %08x %08x\n", state->inlen, (uint32_t) (state->v3 >> 32), (uint32_t)state->v3); + printf("(%3zu) v0 %08x %08x\n", state->inlen, (uint32_t) (state->v0 >> 32), (uint32_t) state->v0); + printf("(%3zu) v1 %08x %08x\n", state->inlen, (uint32_t) (state->v1 >> 32), (uint32_t) state->v1); + printf("(%3zu) v2 %08x %08x\n", state->inlen, (uint32_t) (state->v2 >> 32), (uint32_t) state->v2); + printf("(%3zu) v3 %08x %08x\n", state->inlen, (uint32_t) (state->v3 >> 32), (uint32_t) state->v3); printf("(%3zu) padding %08x %08x\n", state->inlen, (uint32_t) (state->padding >> 32), (uint32_t) state->padding); #endif - state->v3 ^= b; + state->v3 ^= b; sipround(state); sipround(state); - state->v0 ^= b; + state->v0 ^= b; #ifdef DEBUG printf("(%3zu) v0 %08x %08x\n", state->inlen, (uint32_t) (state->v0 >> 32), (uint32_t) state->v0); @@ -169,7 +177,7 @@ uint64_t siphash24_finalize(struct siphash *state) { printf("(%3zu) v2 %08x %08x\n", state->inlen, (uint32_t) (state->v2 >> 32), (uint32_t) state->v2); printf("(%3zu) v3 %08x %08x\n", state->inlen, (uint32_t) (state->v3 >> 32), (uint32_t) state->v3); #endif - state->v2 ^= 0xff; + state->v2 ^= 0xff; sipround(state); sipround(state); @@ -180,7 +188,7 @@ uint64_t siphash24_finalize(struct siphash *state) { } uint64_t siphash24(const void *in, size_t inlen, const uint8_t k[16]) { - struct siphash state; + struct siphash state; assert(in); assert(k);