diff options
-rw-r--r-- | .gitignore | 2 | ||||
-rw-r--r-- | halfsiphash.c | 23 | ||||
-rw-r--r-- | halfsiphash.h | 4 | ||||
-rw-r--r-- | siphash.c | 31 | ||||
-rw-r--r-- | siphash.h | 4 | ||||
-rw-r--r-- | test.c | 3 |
6 files changed, 36 insertions, 31 deletions
@@ -26,3 +26,5 @@ vectors /.code/ /.idea/ /.vs/ + +debug.dSYM/ diff --git a/halfsiphash.c b/halfsiphash.c index a797fa9..652f3cc 100644 --- a/halfsiphash.c +++ b/halfsiphash.c @@ -69,19 +69,22 @@ #define TRACE #endif -int halfsiphash(const uint8_t *in, const size_t inlen, const uint8_t *k, - uint8_t *out, const size_t outlen) { +int halfsiphash(const void *in, const size_t inlen, const void *k, uint8_t *out, + const size_t outlen) { + + const unsigned char *ni = (const unsigned char *)in; + const unsigned char *kk = (const unsigned char *)k; assert((outlen == 4) || (outlen == 8)); uint32_t v0 = 0; uint32_t v1 = 0; uint32_t v2 = UINT32_C(0x6c796765); uint32_t v3 = UINT32_C(0x74656462); - uint32_t k0 = U8TO32_LE(k); - uint32_t k1 = U8TO32_LE(k + 4); + uint32_t k0 = U8TO32_LE(kk); + uint32_t k1 = U8TO32_LE(kk + 4); uint32_t m; int i; - const uint8_t *end = in + inlen - (inlen % sizeof(uint32_t)); + const unsigned char *end = ni + inlen - (inlen % sizeof(uint32_t)); const int left = inlen & 3; uint32_t b = ((uint32_t)inlen) << 24; v3 ^= k1; @@ -92,8 +95,8 @@ int halfsiphash(const uint8_t *in, const size_t inlen, const uint8_t *k, if (outlen == 8) v1 ^= 0xee; - for (; in != end; in += 4) { - m = U8TO32_LE(in); + for (; ni != end; ni += 4) { + m = U8TO32_LE(ni); v3 ^= m; TRACE; @@ -105,11 +108,11 @@ int halfsiphash(const uint8_t *in, const size_t inlen, const uint8_t *k, switch (left) { case 3: - b |= ((uint32_t)in[2]) << 16; + b |= ((uint32_t)ni[2]) << 16; case 2: - b |= ((uint32_t)in[1]) << 8; + b |= ((uint32_t)ni[1]) << 8; case 1: - b |= ((uint32_t)in[0]); + b |= ((uint32_t)ni[0]); break; case 0: break; diff --git a/halfsiphash.h b/halfsiphash.h index f63e46d..a1af8cd 100644 --- a/halfsiphash.h +++ b/halfsiphash.h @@ -18,5 +18,5 @@ #include <inttypes.h> #include <string.h> -int halfsiphash(const uint8_t *in, const size_t inlen, const uint8_t *k, - uint8_t *out, const size_t outlen); +int halfsiphash(const void *in, const size_t inlen, const void *k, uint8_t *out, + const size_t outlen); @@ -76,19 +76,22 @@ #define TRACE #endif -int siphash(const uint8_t *in, const size_t inlen, const uint8_t *k, - uint8_t *out, const size_t outlen) { +int siphash(const void *in, const size_t inlen, const void *k, uint8_t *out, + const size_t outlen) { + + const unsigned char *ni = (const unsigned char *)in; + const unsigned char *kk = (const unsigned char *)k; assert((outlen == 8) || (outlen == 16)); uint64_t v0 = UINT64_C(0x736f6d6570736575); uint64_t v1 = UINT64_C(0x646f72616e646f6d); uint64_t v2 = UINT64_C(0x6c7967656e657261); uint64_t v3 = UINT64_C(0x7465646279746573); - uint64_t k0 = U8TO64_LE(k); - uint64_t k1 = U8TO64_LE(k + 8); + uint64_t k0 = U8TO64_LE(kk); + uint64_t k1 = U8TO64_LE(kk + 8); uint64_t m; int i; - const uint8_t *end = in + inlen - (inlen % sizeof(uint64_t)); + const unsigned char *end = ni + inlen - (inlen % sizeof(uint64_t)); const int left = inlen & 7; uint64_t b = ((uint64_t)inlen) << 56; v3 ^= k1; @@ -99,8 +102,8 @@ int siphash(const uint8_t *in, const size_t inlen, const uint8_t *k, if (outlen == 16) v1 ^= 0xee; - for (; in != end; in += 8) { - m = U8TO64_LE(in); + for (; ni != end; ni += 8) { + m = U8TO64_LE(ni); v3 ^= m; TRACE; @@ -112,19 +115,19 @@ int siphash(const uint8_t *in, const size_t inlen, const uint8_t *k, switch (left) { case 7: - b |= ((uint64_t)in[6]) << 48; + b |= ((uint64_t)ni[6]) << 48; case 6: - b |= ((uint64_t)in[5]) << 40; + b |= ((uint64_t)ni[5]) << 40; case 5: - b |= ((uint64_t)in[4]) << 32; + b |= ((uint64_t)ni[4]) << 32; case 4: - b |= ((uint64_t)in[3]) << 24; + b |= ((uint64_t)ni[3]) << 24; case 3: - b |= ((uint64_t)in[2]) << 16; + b |= ((uint64_t)ni[2]) << 16; case 2: - b |= ((uint64_t)in[1]) << 8; + b |= ((uint64_t)ni[1]) << 8; case 1: - b |= ((uint64_t)in[0]); + b |= ((uint64_t)ni[0]); break; case 0: break; @@ -18,5 +18,5 @@ #include <inttypes.h> #include <string.h> -int siphash(const uint8_t *in, const size_t inlen, const uint8_t *k, - uint8_t *out, const size_t outlen); +int siphash(const void *in, const size_t inlen, const void *k, uint8_t *out, + const size_t outlen); @@ -27,9 +27,6 @@ } \ printf("},\n"); -int halfsiphash(const uint8_t *in, const size_t inlen, const uint8_t *k, - uint8_t *out, const size_t outlen); - const char *functions[4] = { "const uint8_t vectors_sip64[64][8] =", "const uint8_t vectors_sip128[64][16] =", |