aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--halfsiphash.c23
-rw-r--r--halfsiphash.h4
-rw-r--r--siphash.c31
-rw-r--r--siphash.h4
-rw-r--r--test.c3
6 files changed, 36 insertions, 31 deletions
diff --git a/.gitignore b/.gitignore
index a88eab8..17beb60 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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);
diff --git a/siphash.c b/siphash.c
index 065a593..f724058 100644
--- a/siphash.c
+++ b/siphash.c
@@ -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;
diff --git a/siphash.h b/siphash.h
index 851b326..3fbd378 100644
--- a/siphash.h
+++ b/siphash.h
@@ -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);
diff --git a/test.c b/test.c
index cd0cc1e..ce8fa7c 100644
--- a/test.c
+++ b/test.c
@@ -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] =",