From bf54d3bc7be151ee3de15e3cc9fabea68369008e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 31 Dec 2023 08:49:16 -0300 Subject: Rewrite code, but keeping the exact same semantic and behaviour - assert that the generated `siphash.o` code is identical to the original code, available at `tests/assert-identical.sh`; - remove unneeded `#define`s; - rewrite code with the correct indentation, spacing and formatting; - use C99 constructs over C89 (for loop variable declarations inside the parentheses); - fix the public API. --- .gitignore | 7 +- Makefile | 157 ++- deps.mk | 33 + halfsiphash.c | 166 --- halfsiphash.h | 22 - meta.capim | 7 + mkdeps.sh | 23 + siphash.c | 185 --- siphash.h | 22 - src/impl.c | 180 +++ src/impl.h | 8 + src/lib.c | 78 ++ src/lib.h | 15 + src/main.c | 12 + src/meta.h.in | 3 + src/siphash.h | 1 + test.c | 111 -- testmain.c | 3 - tests/assert-identical.sh | 25 + tests/cli-opts.sh | 2 + tests/fuzz/another.c | 17 + tests/fuzz/hello.c | 17 + tests/impl.c | 197 ++++ tests/lib.c | 101 ++ tests/resources/siphash.c | 185 +++ tests/resources/siphash.h | 22 + vectors.h | 2826 --------------------------------------------- 27 files changed, 1065 insertions(+), 3360 deletions(-) create mode 100644 deps.mk delete mode 100644 halfsiphash.c delete mode 100644 halfsiphash.h create mode 100644 meta.capim create mode 100755 mkdeps.sh delete mode 100644 siphash.c delete mode 100644 siphash.h create mode 100644 src/impl.c create mode 100644 src/impl.h create mode 100644 src/lib.c create mode 100644 src/lib.h create mode 100644 src/main.c create mode 100644 src/meta.h.in create mode 120000 src/siphash.h delete mode 100644 test.c delete mode 100644 testmain.c create mode 100755 tests/assert-identical.sh create mode 100755 tests/cli-opts.sh create mode 100644 tests/fuzz/another.c create mode 100644 tests/fuzz/hello.c create mode 100644 tests/impl.c create mode 100644 tests/lib.c create mode 100644 tests/resources/siphash.c create mode 100644 tests/resources/siphash.h delete mode 100644 vectors.h diff --git a/.gitignore b/.gitignore index 155dfbe..ad58f34 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,8 @@ -/*.o /*.a /*.bin +/src/meta.h +/src/*.o +/src/*.cat +/tests/*.o +/tests/*.a +/tests/*.bin diff --git a/Makefile b/Makefile index b8784b2..95d66de 100644 --- a/Makefile +++ b/Makefile @@ -1,44 +1,153 @@ .POSIX: -PREFIX = /usr -NAME = siphash -LIBDIR = $(PREFIX)/lib -INCLUDEDIR = $(PREFIX)/include -SRCDIR = $(PREFIX)/src/$(NAME) +DATE = 1970-01-01 +VERSION = 0.1.0 +NAME = siphash +NAME_UC = $(NAME) +## Installation prefix. Defaults to "/usr". +PREFIX = /usr +BINDIR = $(PREFIX)/bin +LIBDIR = $(PREFIX)/lib +INCLUDEDIR = $(PREFIX)/include +SRCDIR = $(PREFIX)/src/$(NAME) +SHAREDIR = $(PREFIX)/share +LOCALEDIR = $(SHAREDIR)/locale +MANDIR = $(SHAREDIR)/man +EXEC = ./ +## Where to store the installation. Empty by default. +DESTDIR = +LDLIBS = -all: lib$(NAME).a -lib$(NAME).a: lib$(NAME).a($(NAME).o) -lib$(NAME).a: lib$(NAME).a(halfsiphash.o) +.SUFFIXES: +.SUFFIXES: .in .c .o .a .bin .bin-check -$(NAME).o: $(NAME).h -halfsiphash.o: halfsiphash.h +.in: + sed \ + -e 's:@VERSION@:$(VERSION):g' \ + -e 's:@DATE@:$(DATE):g' \ + -e 's:@NAME@:$(NAME):g' \ + < $< > $@ + if [ -x $< ]; then chmod +x $@; fi +.c.o: + $(CC) $(CFLAGS) -o $@ -c $< -test.o: halfsiphash.h siphash.h vectors.h -test.bin: test.o testmain.o lib$(NAME).a - $(CC) $(LDFLAGS) -o $@ test.o testmain.o lib$(NAME).a $(LDLIBS) +.a.bin: + $(CC) $(LDFLAGS) -o $@ $< $(LDLIBS) -check: test.bin - ./test.bin +all: +include deps.mk + + +sources.h = $(sources.c:.c=.h) +sources.o = $(sources.c:.c=.o) +tests.o = $(tests.c:.c=.o) +tests.a = $(tests.c:.c=.a) +tests.bin = $(tests.c:.c=.bin) + +objects = \ + $(sources.o) \ + $(tests.o) \ + src/main.o \ + +archives = \ + lib$(NAME).a \ + $(tests.a) \ + $(NAME).a \ + +sources = \ + $(sources.c) \ + $(sources.h) \ + src/meta.h.in \ + src/meta.h \ + src/main.c \ + src/$(NAME).h \ + + +derived-assets = \ + $(objects) \ + $(archives) \ + src/meta.h \ + $(tests.bin) \ + $(NAME).bin \ + +side-assets = \ + + + +## Default target. Builds all artifacts required for testing +## and installation. +all: $(derived-assets) + + +lib$(NAME).a: $(sources.o) +$(NAME).a: $(sources.o) src/main.o +src/meta.h $(objects): Makefile deps.mk +src/main.o: src/$(NAME).h + + +$(archives): + $(AR) $(ARFLAGS) $@ $? + + + +tests.bin-check = $(tests.c:.c=.bin-check) +$(tests.bin-check): + $(EXEC)$*.bin + +check-unit: $(tests.bin-check) + + +integration-tests = \ + tests/cli-opts.sh \ + tests/assert-identical.sh \ + +$(integration-tests): $(NAME).bin ALWAYS + sh $@ $(EXEC)$(NAME).bin + +check-integration: $(integration-tests) + + +## Run all tests. Each test suite is isolated, so that a parallel +## build can run tests at the same time. The required artifacts +## are created if missing. +check: check-unit check-integration + + + +## Remove *all* derived artifacts produced during the build. +## A dedicated test asserts that this is always true. clean: - rm -f *.o *.a - rm -f test.bin + rm -rf $(derived-assets) $(side-assets) +## Installs into $(DESTDIR)$(PREFIX). Its dependency target +## ensures that all installable artifacts are crafted beforehand. install: all mkdir -p \ + '$(DESTDIR)$(BINDIR)' \ '$(DESTDIR)$(LIBDIR)' \ + '$(DESTDIR)$(SRCDIR)' \ '$(DESTDIR)$(INCLUDEDIR)' \ - '$(DESTDIR)$(SRCDIR)' - cp lib$(NAME).a '$(DESTDIR)$(LIBDIR)' - cp $(NAME).h '$(DESTDIR)$(INCLUDEDIR)' - cp $(NAME).h $(NAME).c '$(DESTDIR)$(SRCDIR)' + cp $(NAME).bin '$(DESTDIR)$(BINDIR)'/$(NAME) + cp lib$(NAME).a '$(DESTDIR)$(LIBDIR)' + cp src/$(NAME).h '$(DESTDIR)$(INCLUDEDIR)' + cp $(sources) '$(DESTDIR)$(SRCDIR)' + +## Uninstalls from $(DESTDIR)$(PREFIX). This is a perfect mirror +## of the "install" target, and removes *all* that was installed. +## A dedicated test asserts that this is always true. uninstall: rm -rf \ - '$(DESTDIR)$(LIBDIR)'/lib$(NAME).a \ - '$(DESTDIR)$(INCLUDEDIR)'/$(NAME).h \ - '$(DESTDIR)$(SRCDIR)' + '$(DESTDIR)$(BINDIR)'/$(NAME) \ + '$(DESTDIR)$(LIBDIR)'/lib$(NAME).a \ + '$(DESTDIR)$(INCLUDEDIR)'/$(NAME).h \ + '$(DESTDIR)$(SRCDIR)' \ + + + +ALWAYS: diff --git a/deps.mk b/deps.mk new file mode 100644 index 0000000..94e598b --- /dev/null +++ b/deps.mk @@ -0,0 +1,33 @@ +catalogs.en.msg = +catalogs.msg = $(catalogs.en.msg) + + +sources.c = \ + src/impl.c \ + src/lib.c \ + +tests.c = \ + tests/impl.c \ + tests/lib.c \ + +src/impl.o: src/impl.h +src/lib.o: src/lib.h + +tests/impl.o: src/impl.c src/impl.h +tests/lib.o: src/lib.c src/lib.h + +tests/impl.a: tests/impl.o +tests/lib.a: tests/lib.o + +tests/impl.bin-check: tests/impl.bin +tests/lib.bin-check: tests/lib.bin + + +src/impl.o: +src/lib.o: src/impl.h + +tests/impl.o: +tests/lib.o: src/impl.h + +tests/impl.a: +tests/lib.a: src/impl.o diff --git a/halfsiphash.c b/halfsiphash.c deleted file mode 100644 index 455c27c..0000000 --- a/halfsiphash.c +++ /dev/null @@ -1,166 +0,0 @@ - -/* - SipHash reference C implementation - - Copyright (c) 2016 Jean-Philippe Aumasson - - To the extent possible under law, the author(s) have dedicated all copyright - and related and neighboring rights to this software to the public domain - worldwide. This software is distributed without any warranty. - - You should have received a copy of the CC0 Public Domain Dedication along - with - this software. If not, see - . - */ -#include "halfsiphash.h" -#include -#include -#include - -/* default: SipHash-2-4 */ -#ifndef cROUNDS -#define cROUNDS 2 -#endif -#ifndef dROUNDS -#define dROUNDS 4 -#endif - -#define ROTL(x, b) (uint32_t)(((x) << (b)) | ((x) >> (32 - (b)))) - -#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); - -#define U8TO32_LE(p) \ - (((uint32_t)((p)[0])) | ((uint32_t)((p)[1]) << 8) | \ - ((uint32_t)((p)[2]) << 16) | ((uint32_t)((p)[3]) << 24)) - -#define SIPROUND \ - do { \ - v0 += v1; \ - v1 = ROTL(v1, 5); \ - v1 ^= v0; \ - v0 = ROTL(v0, 16); \ - v2 += v3; \ - v3 = ROTL(v3, 8); \ - v3 ^= v2; \ - v0 += v3; \ - v3 = ROTL(v3, 7); \ - v3 ^= v0; \ - v2 += v1; \ - v1 = ROTL(v1, 13); \ - v1 ^= v2; \ - v2 = ROTL(v2, 16); \ - } while (0) - - -#ifdef DEBUG_SIPHASH -#include - -#define TRACE \ - do { \ - printf("(%3zu) v0 %08" PRIx32 "\n", inlen, v0); \ - printf("(%3zu) v1 %08" PRIx32 "\n", inlen, v1); \ - printf("(%3zu) v2 %08" PRIx32 "\n", inlen, v2); \ - printf("(%3zu) v3 %08" PRIx32 "\n", inlen, v3); \ - } while (0) -#else -#define TRACE -#endif - -/* - Computes a SipHash value - *in: pointer to input data (read-only) - inlen: input data length in bytes (any size_t value) - *k: pointer to the key data (read-only), must be 8 bytes - *out: pointer to output data (write-only), outlen bytes must be allocated - outlen: length of the output in bytes, must be 4 or 8 -*/ -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(kk); - uint32_t k1 = U8TO32_LE(kk + 4); - uint32_t m; - int i; - const unsigned char *end = ni + inlen - (inlen % sizeof(uint32_t)); - const int left = inlen & 3; - uint32_t b = ((uint32_t)inlen) << 24; - v3 ^= k1; - v2 ^= k0; - v1 ^= k1; - v0 ^= k0; - - if (outlen == 8) - v1 ^= 0xee; - - for (; ni != end; ni += 4) { - m = U8TO32_LE(ni); - v3 ^= m; - - TRACE; - for (i = 0; i < cROUNDS; ++i) - SIPROUND; - - v0 ^= m; - } - - switch (left) { - case 3: - b |= ((uint32_t)ni[2]) << 16; - /* FALLTHRU */ - case 2: - b |= ((uint32_t)ni[1]) << 8; - /* FALLTHRU */ - case 1: - b |= ((uint32_t)ni[0]); - break; - case 0: - break; - } - - v3 ^= b; - - TRACE; - for (i = 0; i < cROUNDS; ++i) - SIPROUND; - - v0 ^= b; - - if (outlen == 8) - v2 ^= 0xee; - else - v2 ^= 0xff; - - TRACE; - for (i = 0; i < dROUNDS; ++i) - SIPROUND; - - b = v1 ^ v3; - U32TO8_LE(out, b); - - if (outlen == 4) - return 0; - - v1 ^= 0xdd; - - TRACE; - for (i = 0; i < dROUNDS; ++i) - SIPROUND; - - b = v1 ^ v3; - U32TO8_LE(out + 4, b); - - return 0; -} diff --git a/halfsiphash.h b/halfsiphash.h deleted file mode 100644 index a1af8cd..0000000 --- a/halfsiphash.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - SipHash reference C implementation - - Copyright (c) 2012-2021 Jean-Philippe Aumasson - - Copyright (c) 2012-2014 Daniel J. Bernstein - - To the extent possible under law, the author(s) have dedicated all copyright - and related and neighboring rights to this software to the public domain - worldwide. This software is distributed without any warranty. - - You should have received a copy of the CC0 Public Domain Dedication along - with - this software. If not, see - . - */ - -#include -#include - -int halfsiphash(const void *in, const size_t inlen, const void *k, uint8_t *out, - const size_t outlen); diff --git a/meta.capim b/meta.capim new file mode 100644 index 0000000..d9062b6 --- /dev/null +++ b/meta.capim @@ -0,0 +1,7 @@ +{ + :dependencies { + :build #{ + s + } + } +} diff --git a/mkdeps.sh b/mkdeps.sh new file mode 100755 index 0000000..822d44d --- /dev/null +++ b/mkdeps.sh @@ -0,0 +1,23 @@ +#!/bin/sh +set -eu + +export LANG=POSIX.UTF-8 + +varlist() { + printf '%s = \\\n' "$1" + sort | sed 's|^\(.*\)$|\t\1 \\|' + printf '\n' +} + +cfiles() { + find src/*.c -not -name 'main.c' +} + + +printf 'catalogs.en.msg = %s\n' "$(find src/ -name '*.en.msg')" +echo 'catalogs.msg = $(catalogs.en.msg)' +printf '\n\n' + +cfiles | varlist 'sources.c' +cfiles | sed 's|^src/|tests/|' | varlist 'tests.c' +ldev deps $(cfiles | sort) diff --git a/siphash.c b/siphash.c deleted file mode 100644 index c6d16e2..0000000 --- a/siphash.c +++ /dev/null @@ -1,185 +0,0 @@ -/* - SipHash reference C implementation - - Copyright (c) 2012-2022 Jean-Philippe Aumasson - - Copyright (c) 2012-2014 Daniel J. Bernstein - - To the extent possible under law, the author(s) have dedicated all copyright - and related and neighboring rights to this software to the public domain - worldwide. This software is distributed without any warranty. - - You should have received a copy of the CC0 Public Domain Dedication along - with - this software. If not, see - . - */ - -#include "siphash.h" -#include -#include -#include - -/* default: SipHash-2-4 */ -#ifndef cROUNDS -#define cROUNDS 2 -#endif -#ifndef dROUNDS -#define dROUNDS 4 -#endif - -#define ROTL(x, b) (uint64_t)(((x) << (b)) | ((x) >> (64 - (b)))) - -#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); - -#define U64TO8_LE(p, v) \ - U32TO8_LE((p), (uint32_t)((v))); \ - U32TO8_LE((p) + 4, (uint32_t)((v) >> 32)); - -#define U8TO64_LE(p) \ - (((uint64_t)((p)[0])) | ((uint64_t)((p)[1]) << 8) | \ - ((uint64_t)((p)[2]) << 16) | ((uint64_t)((p)[3]) << 24) | \ - ((uint64_t)((p)[4]) << 32) | ((uint64_t)((p)[5]) << 40) | \ - ((uint64_t)((p)[6]) << 48) | ((uint64_t)((p)[7]) << 56)) - -#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 += v1; \ - v1 = ROTL(v1, 17); \ - v1 ^= v2; \ - v2 = ROTL(v2, 32); \ - } while (0) - -#ifdef DEBUG_SIPHASH -#include - -#define TRACE \ - do { \ - printf("(%3zu) v0 %016" PRIx64 "\n", inlen, v0); \ - printf("(%3zu) v1 %016" PRIx64 "\n", inlen, v1); \ - printf("(%3zu) v2 %016" PRIx64 "\n", inlen, v2); \ - printf("(%3zu) v3 %016" PRIx64 "\n", inlen, v3); \ - } while (0) -#else -#define TRACE -#endif - -/* - Computes a SipHash value - *in: pointer to input data (read-only) - inlen: input data length in bytes (any size_t value) - *k: pointer to the key data (read-only), must be 16 bytes - *out: pointer to output data (write-only), outlen bytes must be allocated - outlen: length of the output in bytes, must be 8 or 16 -*/ -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(kk); - uint64_t k1 = U8TO64_LE(kk + 8); - uint64_t m; - int i; - const unsigned char *end = ni + inlen - (inlen % sizeof(uint64_t)); - const int left = inlen & 7; - uint64_t b = ((uint64_t)inlen) << 56; - v3 ^= k1; - v2 ^= k0; - v1 ^= k1; - v0 ^= k0; - - if (outlen == 16) - v1 ^= 0xee; - - for (; ni != end; ni += 8) { - m = U8TO64_LE(ni); - v3 ^= m; - - TRACE; - for (i = 0; i < cROUNDS; ++i) - SIPROUND; - - v0 ^= m; - } - - switch (left) { - case 7: - b |= ((uint64_t)ni[6]) << 48; - /* FALLTHRU */ - case 6: - b |= ((uint64_t)ni[5]) << 40; - /* FALLTHRU */ - case 5: - b |= ((uint64_t)ni[4]) << 32; - /* FALLTHRU */ - case 4: - b |= ((uint64_t)ni[3]) << 24; - /* FALLTHRU */ - case 3: - b |= ((uint64_t)ni[2]) << 16; - /* FALLTHRU */ - case 2: - b |= ((uint64_t)ni[1]) << 8; - /* FALLTHRU */ - case 1: - b |= ((uint64_t)ni[0]); - break; - case 0: - break; - } - - v3 ^= b; - - TRACE; - for (i = 0; i < cROUNDS; ++i) - SIPROUND; - - v0 ^= b; - - if (outlen == 16) - v2 ^= 0xee; - else - v2 ^= 0xff; - - TRACE; - for (i = 0; i < dROUNDS; ++i) - SIPROUND; - - b = v0 ^ v1 ^ v2 ^ v3; - U64TO8_LE(out, b); - - if (outlen == 8) - return 0; - - v1 ^= 0xdd; - - TRACE; - for (i = 0; i < dROUNDS; ++i) - SIPROUND; - - b = v0 ^ v1 ^ v2 ^ v3; - U64TO8_LE(out + 8, b); - - return 0; -} diff --git a/siphash.h b/siphash.h deleted file mode 100644 index 3fbd378..0000000 --- a/siphash.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - SipHash reference C implementation - - Copyright (c) 2012-2021 Jean-Philippe Aumasson - - Copyright (c) 2012-2014 Daniel J. Bernstein - - To the extent possible under law, the author(s) have dedicated all copyright - and related and neighboring rights to this software to the public domain - worldwide. This software is distributed without any warranty. - - You should have received a copy of the CC0 Public Domain Dedication along - with - this software. If not, see - . - */ - -#include -#include - -int siphash(const void *in, const size_t inlen, const void *k, uint8_t *out, - const size_t outlen); diff --git a/src/impl.c b/src/impl.c new file mode 100644 index 0000000..5ba4bde --- /dev/null +++ b/src/impl.c @@ -0,0 +1,180 @@ +#include + +#include +#include +#include + +#include "impl.h" + + + +static const int cROUNDS = 2; +static const int dROUNDS = 4; + + + +static inline uint64_t +ROTL(uint64_t x, uint64_t b) { + return (x << b) | (x >> (64 - b)); +} + +static inline void +U32TO8_LE(u8 *p, uint32_t v) { + p[0] = (u8)(v >> 0); + p[1] = (u8)(v >> 8); + p[2] = (u8)(v >> 16); + p[3] = (u8)(v >> 24); +} + +static inline void +U64TO8_LE(u8 *p, uint64_t v) { + U32TO8_LE(p + 0, (uint32_t)(v >> 0)); + U32TO8_LE(p + 4, (uint32_t)(v >> 32)); +} + +static inline uint64_t +U8TO64_LE(const u8 *p) { + return + (((uint64_t)p[0]) << 0) | + (((uint64_t)p[1]) << 8) | + (((uint64_t)p[2]) << 16) | + (((uint64_t)p[3]) << 24) | + (((uint64_t)p[4]) << 32) | + (((uint64_t)p[5]) << 40) | + (((uint64_t)p[6]) << 48) | + (((uint64_t)p[7]) << 56); +} + +static inline void +SIPROUND(uint64_t *v0, uint64_t *v1, uint64_t *v2, uint64_t *v3) { + *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 += *v1; + *v1 = ROTL(*v1, 17); + *v1 ^= *v2; + *v2 = ROTL(*v2, 32); +} + +/** + Computes a SipHash value: + + - *in: pointer to input data (read-only) + - inlen: input data length in bytes (any size_t value) + - *key: pointer to the key data (read-only), must be 16 bytes + - *out: pointer to output data (write-only), outlen bytes must be allocated + - outlen: length of the output in bytes, must be 8 or 16 +*/ +int +siphash_impl( + const void *const restrict in, + const size_t inlen, + const void *const restrict key, + u8 out[16U], + const size_t outlen +) { + const unsigned char *ni = (const unsigned char *)in; + const unsigned char *kk = (const unsigned char *)key; + + #line 95 + assert((outlen == 8) || (outlen == 16)); + #line 89 + uint64_t v0 = UINT64_C(0x736f6d6570736575); + uint64_t v1 = UINT64_C(0x646f72616e646f6d); + uint64_t v2 = UINT64_C(0x6c7967656e657261); + uint64_t v3 = UINT64_C(0x7465646279746573); + const uint64_t k0 = U8TO64_LE(kk); + const uint64_t k1 = U8TO64_LE(kk + 8); + const unsigned char *end = ni + inlen - (inlen % sizeof(uint64_t)); + const int left = inlen & 7; + uint64_t b = ((uint64_t)inlen) << 56; + v3 ^= k1; + v2 ^= k0; + v1 ^= k1; + v0 ^= k0; + + if (outlen == 16) { + v1 ^= 0xee; + } + + while (ni != end) { + uint64_t m = U8TO64_LE(ni); + v3 ^= m; + + for (int i = 0; i < cROUNDS; i++) { + SIPROUND(&v0, &v1, &v2, &v3); + } + + v0 ^= m; + ni += 8; + } + + switch (left) { + case 7: + b |= ((uint64_t)ni[6]) << 48; + // fallthrough + case 6: + b |= ((uint64_t)ni[5]) << 40; + // fallthrough + case 5: + b |= ((uint64_t)ni[4]) << 32; + // fallthrough + case 4: + b |= ((uint64_t)ni[3]) << 24; + // fallthrough + case 3: + b |= ((uint64_t)ni[2]) << 16; + // fallthrough + case 2: + b |= ((uint64_t)ni[1]) << 8; + // fallthrough + case 1: + b |= ((uint64_t)ni[0]); + break; + case 0: + break; + } + + v3 ^= b; + + for (int i = 0; i < cROUNDS; i++) { + SIPROUND(&v0, &v1, &v2, &v3); + } + + v0 ^= b; + + if (outlen == 16) { + v2 ^= 0xee; + } else { + v2 ^= 0xff; + } + + for (int i = 0; i < dROUNDS; i++) { + SIPROUND(&v0, &v1, &v2, &v3); + } + + b = v0 ^ v1 ^ v2 ^ v3; + U64TO8_LE(out, b); + + if (outlen == 8) { + return 0; + } + + v1 ^= 0xdd; + + for (int i = 0; i < dROUNDS; i++) { + SIPROUND(&v0, &v1, &v2, &v3); + } + + b = v0 ^ v1 ^ v2 ^ v3; + U64TO8_LE(out + 8, b); + + return 0; +} diff --git a/src/impl.h b/src/impl.h new file mode 100644 index 0000000..166ccae --- /dev/null +++ b/src/impl.h @@ -0,0 +1,8 @@ +int +siphash_impl( + const void *const restrict in, + const size_t inlen, + const void *const restrict key, + u8 out[16U], + const size_t outlen +); diff --git a/src/lib.c b/src/lib.c new file mode 100644 index 0000000..935ee26 --- /dev/null +++ b/src/lib.c @@ -0,0 +1,78 @@ +#include + +#include +#include +#include + +#include "impl.h" + +#include "lib.h" + + + +static int +usage(FILE *restrict stream, const char *const argv0) { + return fprintf(stream, "Usage: %s KEY DATA\n", argv0) < 0; +} + +void +siphash( + const u8 key[SIPHASH_KEY_LENGTH], + const size_t inlen, + const void *const restrict in, + u8 out[SIPHASH_OUTPUT_LENGTH] +) { + siphash_impl(in, inlen, key, out, SIPHASH_OUTPUT_LENGTH); +} + +int +siphash_main(int argc, char *argv[]) { + int rc = EXIT_USAGE; + + if (argc != 3) { + if (usage(stderr, argv[0])) { + rc = EXIT_FAILURE; + perror("usage()"); + goto out; + } + goto out; + } + + const char *const key = argv[1]; + const char *const data = argv[2]; + const size_t keylen = strlen(key); + const size_t datalen = strlen(data); + if (keylen < SIPHASH_KEY_LENGTH) { + if (fprintf( + stderr, + "KEY (%lu) is smaller than SIPHASH_KEY_LENGTH (%d).\n", + keylen, + SIPHASH_KEY_LENGTH + ) < 0) { + rc = EXIT_FAILURE; + perror("fprintf()"); + goto out; + } + goto out; + } + + u8 out[SIPHASH_OUTPUT_LENGTH]; + siphash((u8 *)key, datalen, data, out); + for (int i = 0; i < SIPHASH_OUTPUT_LENGTH; i++) { + const u8 c = out[i]; + if (printf("%x", c) < 0) { + rc = EXIT_FAILURE; + perror("printf()"); + goto out; + } + } + if (printf("\n") < 0) { + rc = EXIT_FAILURE; + perror("printf()"); + goto out; + } + + rc = EXIT_SUCCESS; +out: + return rc; +} diff --git a/src/lib.h b/src/lib.h new file mode 100644 index 0000000..ae16870 --- /dev/null +++ b/src/lib.h @@ -0,0 +1,15 @@ +enum { + SIPHASH_KEY_LENGTH = 16U, + SIPHASH_OUTPUT_LENGTH = 16U, +}; + +void +siphash( + const u8 key[SIPHASH_KEY_LENGTH], + const size_t inlen, + const void *const restrict in, + u8 out[SIPHASH_OUTPUT_LENGTH] +); + +int +siphash_main(int argc, char *argv[]); diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..c218d8f --- /dev/null +++ b/src/main.c @@ -0,0 +1,12 @@ +#include + +#include + +#include "siphash.h" + + + +int +main(int argc, char *argv[]) { + return siphash_main(argc, argv); +} diff --git a/src/meta.h.in b/src/meta.h.in new file mode 100644 index 0000000..9bd8c08 --- /dev/null +++ b/src/meta.h.in @@ -0,0 +1,3 @@ +#define VERSION "@VERSION@" +#define DATE "@DATE@" +#define NAME "@NAME@" diff --git a/src/siphash.h b/src/siphash.h new file mode 120000 index 0000000..a564cc1 --- /dev/null +++ b/src/siphash.h @@ -0,0 +1 @@ +lib.h \ No newline at end of file diff --git a/test.c b/test.c deleted file mode 100644 index ce8fa7c..0000000 --- a/test.c +++ /dev/null @@ -1,111 +0,0 @@ -/* - SipHash reference C implementation - Copyright (c) 2012-2021 Jean-Philippe Aumasson - Copyright (c) 2012 Daniel J. Bernstein - - - To the extent possible under law, the author(s) have dedicated all copyright - and related and neighboring rights to this software to the public domain - worldwide. This software is distributed without any warranty. - You should have received a copy of the CC0 Public Domain Dedication along - with this software. If not, see - . - */ - -#include "halfsiphash.h" -#include "siphash.h" -#include "vectors.h" -#include -#include -#include -#include - -#define PRINTHASH(n) \ - printf(" { "); \ - for (int j = 0; j < n; ++j) { \ - printf("0x%02x, ", out[j]); \ - } \ - printf("},\n"); - -const char *functions[4] = { - "const uint8_t vectors_sip64[64][8] =", - "const uint8_t vectors_sip128[64][16] =", - "const uint8_t vectors_hsip32[64][4] =", - "const uint8_t vectors_hsip64[64][8] =", -}; - -const char *labels[4] = { - "SipHash-2-4-64", - "SipHash-2-4-128", - "HalfSipHash-2-4-32", - "HalfSipHash-2-4-64", -}; - -size_t lengths[4] = {8, 16, 4, 8}; - -int siphash_test() { - uint8_t in[64], out[16], k[16]; - int i; - bool any_failed = false; -#ifndef GETVECTORS - int fails = 0; -#endif - - for (i = 0; i < 16; ++i) - k[i] = i; - - for (int version = 0; version < 4; ++version) { -#ifdef GETVECTORS - printf("%s\n{\n", functions[version]); -#else - printf("%s\n", labels[version]); -#endif - - for (i = 0; i < 64; ++i) { - in[i] = i; - int len = lengths[version]; - if (version < 2) - siphash(in, i, k, out, len); - else - halfsiphash(in, i, k, out, len); -#ifdef GETVECTORS - PRINTHASH(len); -#else - const uint8_t *v = NULL; - switch (version) { - case 0: - v = (uint8_t *)vectors_sip64; - break; - case 1: - v = (uint8_t *)vectors_sip128; - break; - case 2: - v = (uint8_t *)vectors_hsip32; - break; - case 3: - v = (uint8_t *)vectors_hsip64; - break; - default: - break; - } - - if (memcmp(out, v + (i * len), len)) { - printf("fail for %d bytes\n", i); - fails++; - any_failed = true; - } -#endif - } - -#ifdef GETVECTORS - printf("};\n"); -#else - if (!fails) - printf("OK\n"); - - fails = 0; -#endif - } - - return any_failed; -} diff --git a/testmain.c b/testmain.c deleted file mode 100644 index 6b46ed6..0000000 --- a/testmain.c +++ /dev/null @@ -1,3 +0,0 @@ -int siphash_test(); - -int main(void) { return siphash_test(); } diff --git a/tests/assert-identical.sh b/tests/assert-identical.sh new file mode 100755 index 0000000..69fa5ff --- /dev/null +++ b/tests/assert-identical.sh @@ -0,0 +1,25 @@ +#!/bin/sh +set -eu + +NAME='siphash' +CFLAGS='-O2' + +trap "rm -f tests/resources/impl.c src/impl.cmp.o tests/resources/impl.cmp.o" \ + EXIT + +( +cd src/ +gcc $CFLAGS -o impl.cmp.o -c impl.c +strip impl.cmp.o +) & + +( +cd tests/resources/ +sed 's/^int siphash(/int siphash_impl(/' < "$NAME".c > impl.c +gcc $CFLAGS -o impl.cmp.o -c impl.c +strip impl.cmp.o +) & + +wait + +cmp tests/resources/impl.cmp.o src/impl.cmp.o diff --git a/tests/cli-opts.sh b/tests/cli-opts.sh new file mode 100755 index 0000000..92b70ea --- /dev/null +++ b/tests/cli-opts.sh @@ -0,0 +1,2 @@ +#!/bin/sh +set -eu diff --git a/tests/fuzz/another.c b/tests/fuzz/another.c new file mode 100644 index 0000000..7fbfe07 --- /dev/null +++ b/tests/fuzz/another.c @@ -0,0 +1,17 @@ +#include +#include +#include + +static bool +fuzz_me(const uint8_t *const data, const size_t size) { + (void)data; + (void)size; + return true; +} + +int +LLVMFuzzerTestOneInput(const uint8_t *const data, const size_t size) { + int rc = 0; + fuzz_me(data, size); + return rc; +} diff --git a/tests/fuzz/hello.c b/tests/fuzz/hello.c new file mode 100644 index 0000000..7fbfe07 --- /dev/null +++ b/tests/fuzz/hello.c @@ -0,0 +1,17 @@ +#include +#include +#include + +static bool +fuzz_me(const uint8_t *const data, const size_t size) { + (void)data; + (void)size; + return true; +} + +int +LLVMFuzzerTestOneInput(const uint8_t *const data, const size_t size) { + int rc = 0; + fuzz_me(data, size); + return rc; +} diff --git a/tests/impl.c b/tests/impl.c new file mode 100644 index 0000000..8b65c6f --- /dev/null +++ b/tests/impl.c @@ -0,0 +1,197 @@ +#include "../src/impl.c" + +#include +#include + + + +static const uint8_t +VECTORS_SIP64[64][8] = { + { 0x31, 0x0e, 0x0e, 0xdd, 0x47, 0xdb, 0x6f, 0x72, }, + { 0xfd, 0x67, 0xdc, 0x93, 0xc5, 0x39, 0xf8, 0x74, }, + { 0x5a, 0x4f, 0xa9, 0xd9, 0x09, 0x80, 0x6c, 0x0d, }, + { 0x2d, 0x7e, 0xfb, 0xd7, 0x96, 0x66, 0x67, 0x85, }, + { 0xb7, 0x87, 0x71, 0x27, 0xe0, 0x94, 0x27, 0xcf, }, + { 0x8d, 0xa6, 0x99, 0xcd, 0x64, 0x55, 0x76, 0x18, }, + { 0xce, 0xe3, 0xfe, 0x58, 0x6e, 0x46, 0xc9, 0xcb, }, + { 0x37, 0xd1, 0x01, 0x8b, 0xf5, 0x00, 0x02, 0xab, }, + { 0x62, 0x24, 0x93, 0x9a, 0x79, 0xf5, 0xf5, 0x93, }, + { 0xb0, 0xe4, 0xa9, 0x0b, 0xdf, 0x82, 0x00, 0x9e, }, + { 0xf3, 0xb9, 0xdd, 0x94, 0xc5, 0xbb, 0x5d, 0x7a, }, + { 0xa7, 0xad, 0x6b, 0x22, 0x46, 0x2f, 0xb3, 0xf4, }, + { 0xfb, 0xe5, 0x0e, 0x86, 0xbc, 0x8f, 0x1e, 0x75, }, + { 0x90, 0x3d, 0x84, 0xc0, 0x27, 0x56, 0xea, 0x14, }, + { 0xee, 0xf2, 0x7a, 0x8e, 0x90, 0xca, 0x23, 0xf7, }, + { 0xe5, 0x45, 0xbe, 0x49, 0x61, 0xca, 0x29, 0xa1, }, + { 0xdb, 0x9b, 0xc2, 0x57, 0x7f, 0xcc, 0x2a, 0x3f, }, + { 0x94, 0x47, 0xbe, 0x2c, 0xf5, 0xe9, 0x9a, 0x69, }, + { 0x9c, 0xd3, 0x8d, 0x96, 0xf0, 0xb3, 0xc1, 0x4b, }, + { 0xbd, 0x61, 0x79, 0xa7, 0x1d, 0xc9, 0x6d, 0xbb, }, + { 0x98, 0xee, 0xa2, 0x1a, 0xf2, 0x5c, 0xd6, 0xbe, }, + { 0xc7, 0x67, 0x3b, 0x2e, 0xb0, 0xcb, 0xf2, 0xd0, }, + { 0x88, 0x3e, 0xa3, 0xe3, 0x95, 0x67, 0x53, 0x93, }, + { 0xc8, 0xce, 0x5c, 0xcd, 0x8c, 0x03, 0x0c, 0xa8, }, + { 0x94, 0xaf, 0x49, 0xf6, 0xc6, 0x50, 0xad, 0xb8, }, + { 0xea, 0xb8, 0x85, 0x8a, 0xde, 0x92, 0xe1, 0xbc, }, + { 0xf3, 0x15, 0xbb, 0x5b, 0xb8, 0x35, 0xd8, 0x17, }, + { 0xad, 0xcf, 0x6b, 0x07, 0x63, 0x61, 0x2e, 0x2f, }, + { 0xa5, 0xc9, 0x1d, 0xa7, 0xac, 0xaa, 0x4d, 0xde, }, + { 0x71, 0x65, 0x95, 0x87, 0x66, 0x50, 0xa2, 0xa6, }, + { 0x28, 0xef, 0x49, 0x5c, 0x53, 0xa3, 0x87, 0xad, }, + { 0x42, 0xc3, 0x41, 0xd8, 0xfa, 0x92, 0xd8, 0x32, }, + { 0xce, 0x7c, 0xf2, 0x72, 0x2f, 0x51, 0x27, 0x71, }, + { 0xe3, 0x78, 0x59, 0xf9, 0x46, 0x23, 0xf3, 0xa7, }, + { 0x38, 0x12, 0x05, 0xbb, 0x1a, 0xb0, 0xe0, 0x12, }, + { 0xae, 0x97, 0xa1, 0x0f, 0xd4, 0x34, 0xe0, 0x15, }, + { 0xb4, 0xa3, 0x15, 0x08, 0xbe, 0xff, 0x4d, 0x31, }, + { 0x81, 0x39, 0x62, 0x29, 0xf0, 0x90, 0x79, 0x02, }, + { 0x4d, 0x0c, 0xf4, 0x9e, 0xe5, 0xd4, 0xdc, 0xca, }, + { 0x5c, 0x73, 0x33, 0x6a, 0x76, 0xd8, 0xbf, 0x9a, }, + { 0xd0, 0xa7, 0x04, 0x53, 0x6b, 0xa9, 0x3e, 0x0e, }, + { 0x92, 0x59, 0x58, 0xfc, 0xd6, 0x42, 0x0c, 0xad, }, + { 0xa9, 0x15, 0xc2, 0x9b, 0xc8, 0x06, 0x73, 0x18, }, + { 0x95, 0x2b, 0x79, 0xf3, 0xbc, 0x0a, 0xa6, 0xd4, }, + { 0xf2, 0x1d, 0xf2, 0xe4, 0x1d, 0x45, 0x35, 0xf9, }, + { 0x87, 0x57, 0x75, 0x19, 0x04, 0x8f, 0x53, 0xa9, }, + { 0x10, 0xa5, 0x6c, 0xf5, 0xdf, 0xcd, 0x9a, 0xdb, }, + { 0xeb, 0x75, 0x09, 0x5c, 0xcd, 0x98, 0x6c, 0xd0, }, + { 0x51, 0xa9, 0xcb, 0x9e, 0xcb, 0xa3, 0x12, 0xe6, }, + { 0x96, 0xaf, 0xad, 0xfc, 0x2c, 0xe6, 0x66, 0xc7, }, + { 0x72, 0xfe, 0x52, 0x97, 0x5a, 0x43, 0x64, 0xee, }, + { 0x5a, 0x16, 0x45, 0xb2, 0x76, 0xd5, 0x92, 0xa1, }, + { 0xb2, 0x74, 0xcb, 0x8e, 0xbf, 0x87, 0x87, 0x0a, }, + { 0x6f, 0x9b, 0xb4, 0x20, 0x3d, 0xe7, 0xb3, 0x81, }, + { 0xea, 0xec, 0xb2, 0xa3, 0x0b, 0x22, 0xa8, 0x7f, }, + { 0x99, 0x24, 0xa4, 0x3c, 0xc1, 0x31, 0x57, 0x24, }, + { 0xbd, 0x83, 0x8d, 0x3a, 0xaf, 0xbf, 0x8d, 0xb7, }, + { 0x0b, 0x1a, 0x2a, 0x32, 0x65, 0xd5, 0x1a, 0xea, }, + { 0x13, 0x50, 0x79, 0xa3, 0x23, 0x1c, 0xe6, 0x60, }, + { 0x93, 0x2b, 0x28, 0x46, 0xe4, 0xd7, 0x06, 0x66, }, + { 0xe1, 0x91, 0x5f, 0x5c, 0xb1, 0xec, 0xa4, 0x6c, }, + { 0xf3, 0x25, 0x96, 0x5c, 0xa1, 0x6d, 0x62, 0x9f, }, + { 0x57, 0x5f, 0xf2, 0x8e, 0x60, 0x38, 0x1b, 0xe5, }, + { 0x72, 0x45, 0x06, 0xeb, 0x4c, 0x32, 0x8a, 0x95, }, +}; + +static const uint8_t +VECTORS_SIP128[64][16] = { + { 0xa3, 0x81, 0x7f, 0x04, 0xba, 0x25, 0xa8, 0xe6, 0x6d, 0xf6, 0x72, 0x14, 0xc7, 0x55, 0x02, 0x93, }, + { 0xda, 0x87, 0xc1, 0xd8, 0x6b, 0x99, 0xaf, 0x44, 0x34, 0x76, 0x59, 0x11, 0x9b, 0x22, 0xfc, 0x45, }, + { 0x81, 0x77, 0x22, 0x8d, 0xa4, 0xa4, 0x5d, 0xc7, 0xfc, 0xa3, 0x8b, 0xde, 0xf6, 0x0a, 0xff, 0xe4, }, + { 0x9c, 0x70, 0xb6, 0x0c, 0x52, 0x67, 0xa9, 0x4e, 0x5f, 0x33, 0xb6, 0xb0, 0x29, 0x85, 0xed, 0x51, }, + { 0xf8, 0x81, 0x64, 0xc1, 0x2d, 0x9c, 0x8f, 0xaf, 0x7d, 0x0f, 0x6e, 0x7c, 0x7b, 0xcd, 0x55, 0x79, }, + { 0x13, 0x68, 0x87, 0x59, 0x80, 0x77, 0x6f, 0x88, 0x54, 0x52, 0x7a, 0x07, 0x69, 0x0e, 0x96, 0x27, }, + { 0x14, 0xee, 0xca, 0x33, 0x8b, 0x20, 0x86, 0x13, 0x48, 0x5e, 0xa0, 0x30, 0x8f, 0xd7, 0xa1, 0x5e, }, + { 0xa1, 0xf1, 0xeb, 0xbe, 0xd8, 0xdb, 0xc1, 0x53, 0xc0, 0xb8, 0x4a, 0xa6, 0x1f, 0xf0, 0x82, 0x39, }, + { 0x3b, 0x62, 0xa9, 0xba, 0x62, 0x58, 0xf5, 0x61, 0x0f, 0x83, 0xe2, 0x64, 0xf3, 0x14, 0x97, 0xb4, }, + { 0x26, 0x44, 0x99, 0x06, 0x0a, 0xd9, 0xba, 0xab, 0xc4, 0x7f, 0x8b, 0x02, 0xbb, 0x6d, 0x71, 0xed, }, + { 0x00, 0x11, 0x0d, 0xc3, 0x78, 0x14, 0x69, 0x56, 0xc9, 0x54, 0x47, 0xd3, 0xf3, 0xd0, 0xfb, 0xba, }, + { 0x01, 0x51, 0xc5, 0x68, 0x38, 0x6b, 0x66, 0x77, 0xa2, 0xb4, 0xdc, 0x6f, 0x81, 0xe5, 0xdc, 0x18, }, + { 0xd6, 0x26, 0xb2, 0x66, 0x90, 0x5e, 0xf3, 0x58, 0x82, 0x63, 0x4d, 0xf6, 0x85, 0x32, 0xc1, 0x25, }, + { 0x98, 0x69, 0xe2, 0x47, 0xe9, 0xc0, 0x8b, 0x10, 0xd0, 0x29, 0x93, 0x4f, 0xc4, 0xb9, 0x52, 0xf7, }, + { 0x31, 0xfc, 0xef, 0xac, 0x66, 0xd7, 0xde, 0x9c, 0x7e, 0xc7, 0x48, 0x5f, 0xe4, 0x49, 0x49, 0x02, }, + { 0x54, 0x93, 0xe9, 0x99, 0x33, 0xb0, 0xa8, 0x11, 0x7e, 0x08, 0xec, 0x0f, 0x97, 0xcf, 0xc3, 0xd9, }, + { 0x6e, 0xe2, 0xa4, 0xca, 0x67, 0xb0, 0x54, 0xbb, 0xfd, 0x33, 0x15, 0xbf, 0x85, 0x23, 0x05, 0x77, }, + { 0x47, 0x3d, 0x06, 0xe8, 0x73, 0x8d, 0xb8, 0x98, 0x54, 0xc0, 0x66, 0xc4, 0x7a, 0xe4, 0x77, 0x40, }, + { 0xa4, 0x26, 0xe5, 0xe4, 0x23, 0xbf, 0x48, 0x85, 0x29, 0x4d, 0xa4, 0x81, 0xfe, 0xae, 0xf7, 0x23, }, + { 0x78, 0x01, 0x77, 0x31, 0xcf, 0x65, 0xfa, 0xb0, 0x74, 0xd5, 0x20, 0x89, 0x52, 0x51, 0x2e, 0xb1, }, + { 0x9e, 0x25, 0xfc, 0x83, 0x3f, 0x22, 0x90, 0x73, 0x3e, 0x93, 0x44, 0xa5, 0xe8, 0x38, 0x39, 0xeb, }, + { 0x56, 0x8e, 0x49, 0x5a, 0xbe, 0x52, 0x5a, 0x21, 0x8a, 0x22, 0x14, 0xcd, 0x3e, 0x07, 0x1d, 0x12, }, + { 0x4a, 0x29, 0xb5, 0x45, 0x52, 0xd1, 0x6b, 0x9a, 0x46, 0x9c, 0x10, 0x52, 0x8e, 0xff, 0x0a, 0xae, }, + { 0xc9, 0xd1, 0x84, 0xdd, 0xd5, 0xa9, 0xf5, 0xe0, 0xcf, 0x8c, 0xe2, 0x9a, 0x9a, 0xbf, 0x69, 0x1c, }, + { 0x2d, 0xb4, 0x79, 0xae, 0x78, 0xbd, 0x50, 0xd8, 0x88, 0x2a, 0x8a, 0x17, 0x8a, 0x61, 0x32, 0xad, }, + { 0x8e, 0xce, 0x5f, 0x04, 0x2d, 0x5e, 0x44, 0x7b, 0x50, 0x51, 0xb9, 0xea, 0xcb, 0x8d, 0x8f, 0x6f, }, + { 0x9c, 0x0b, 0x53, 0xb4, 0xb3, 0xc3, 0x07, 0xe8, 0x7e, 0xae, 0xe0, 0x86, 0x78, 0x14, 0x1f, 0x66, }, + { 0xab, 0xf2, 0x48, 0xaf, 0x69, 0xa6, 0xea, 0xe4, 0xbf, 0xd3, 0xeb, 0x2f, 0x12, 0x9e, 0xeb, 0x94, }, + { 0x06, 0x64, 0xda, 0x16, 0x68, 0x57, 0x4b, 0x88, 0xb9, 0x35, 0xf3, 0x02, 0x73, 0x58, 0xae, 0xf4, }, + { 0xaa, 0x4b, 0x9d, 0xc4, 0xbf, 0x33, 0x7d, 0xe9, 0x0c, 0xd4, 0xfd, 0x3c, 0x46, 0x7c, 0x6a, 0xb7, }, + { 0xea, 0x5c, 0x7f, 0x47, 0x1f, 0xaf, 0x6b, 0xde, 0x2b, 0x1a, 0xd7, 0xd4, 0x68, 0x6d, 0x22, 0x87, }, + { 0x29, 0x39, 0xb0, 0x18, 0x32, 0x23, 0xfa, 0xfc, 0x17, 0x23, 0xde, 0x4f, 0x52, 0xc4, 0x3d, 0x35, }, + { 0x7c, 0x39, 0x56, 0xca, 0x5e, 0xea, 0xfc, 0x3e, 0x36, 0x3e, 0x9d, 0x55, 0x65, 0x46, 0xeb, 0x68, }, + { 0x77, 0xc6, 0x07, 0x71, 0x46, 0xf0, 0x1c, 0x32, 0xb6, 0xb6, 0x9d, 0x5f, 0x4e, 0xa9, 0xff, 0xcf, }, + { 0x37, 0xa6, 0x98, 0x6c, 0xb8, 0x84, 0x7e, 0xdf, 0x09, 0x25, 0xf0, 0xf1, 0x30, 0x9b, 0x54, 0xde, }, + { 0xa7, 0x05, 0xf0, 0xe6, 0x9d, 0xa9, 0xa8, 0xf9, 0x07, 0x24, 0x1a, 0x2e, 0x92, 0x3c, 0x8c, 0xc8, }, + { 0x3d, 0xc4, 0x7d, 0x1f, 0x29, 0xc4, 0x48, 0x46, 0x1e, 0x9e, 0x76, 0xed, 0x90, 0x4f, 0x67, 0x11, }, + { 0x0d, 0x62, 0xbf, 0x01, 0xe6, 0xfc, 0x0e, 0x1a, 0x0d, 0x3c, 0x47, 0x51, 0xc5, 0xd3, 0x69, 0x2b, }, + { 0x8c, 0x03, 0x46, 0x8b, 0xca, 0x7c, 0x66, 0x9e, 0xe4, 0xfd, 0x5e, 0x08, 0x4b, 0xbe, 0xe7, 0xb5, }, + { 0x52, 0x8a, 0x5b, 0xb9, 0x3b, 0xaf, 0x2c, 0x9c, 0x44, 0x73, 0xcc, 0xe5, 0xd0, 0xd2, 0x2b, 0xd9, }, + { 0xdf, 0x6a, 0x30, 0x1e, 0x95, 0xc9, 0x5d, 0xad, 0x97, 0xae, 0x0c, 0xc8, 0xc6, 0x91, 0x3b, 0xd8, }, + { 0x80, 0x11, 0x89, 0x90, 0x2c, 0x85, 0x7f, 0x39, 0xe7, 0x35, 0x91, 0x28, 0x5e, 0x70, 0xb6, 0xdb, }, + { 0xe6, 0x17, 0x34, 0x6a, 0xc9, 0xc2, 0x31, 0xbb, 0x36, 0x50, 0xae, 0x34, 0xcc, 0xca, 0x0c, 0x5b, }, + { 0x27, 0xd9, 0x34, 0x37, 0xef, 0xb7, 0x21, 0xaa, 0x40, 0x18, 0x21, 0xdc, 0xec, 0x5a, 0xdf, 0x89, }, + { 0x89, 0x23, 0x7d, 0x9d, 0xed, 0x9c, 0x5e, 0x78, 0xd8, 0xb1, 0xc9, 0xb1, 0x66, 0xcc, 0x73, 0x42, }, + { 0x4a, 0x6d, 0x80, 0x91, 0xbf, 0x5e, 0x7d, 0x65, 0x11, 0x89, 0xfa, 0x94, 0xa2, 0x50, 0xb1, 0x4c, }, + { 0x0e, 0x33, 0xf9, 0x60, 0x55, 0xe7, 0xae, 0x89, 0x3f, 0xfc, 0x0e, 0x3d, 0xcf, 0x49, 0x29, 0x02, }, + { 0xe6, 0x1c, 0x43, 0x2b, 0x72, 0x0b, 0x19, 0xd1, 0x8e, 0xc8, 0xd8, 0x4b, 0xdc, 0x63, 0x15, 0x1b, }, + { 0xf7, 0xe5, 0xae, 0xf5, 0x49, 0xf7, 0x82, 0xcf, 0x37, 0x90, 0x55, 0xa6, 0x08, 0x26, 0x9b, 0x16, }, + { 0x43, 0x8d, 0x03, 0x0f, 0xd0, 0xb7, 0xa5, 0x4f, 0xa8, 0x37, 0xf2, 0xad, 0x20, 0x1a, 0x64, 0x03, }, + { 0xa5, 0x90, 0xd3, 0xee, 0x4f, 0xbf, 0x04, 0xe3, 0x24, 0x7e, 0x0d, 0x27, 0xf2, 0x86, 0x42, 0x3f, }, + { 0x5f, 0xe2, 0xc1, 0xa1, 0x72, 0xfe, 0x93, 0xc4, 0xb1, 0x5c, 0xd3, 0x7c, 0xae, 0xf9, 0xf5, 0x38, }, + { 0x2c, 0x97, 0x32, 0x5c, 0xbd, 0x06, 0xb3, 0x6e, 0xb2, 0x13, 0x3d, 0xd0, 0x8b, 0x3a, 0x01, 0x7c, }, + { 0x92, 0xc8, 0x14, 0x22, 0x7a, 0x6b, 0xca, 0x94, 0x9f, 0xf0, 0x65, 0x9f, 0x00, 0x2a, 0xd3, 0x9e, }, + { 0xdc, 0xe8, 0x50, 0x11, 0x0b, 0xd8, 0x32, 0x8c, 0xfb, 0xd5, 0x08, 0x41, 0xd6, 0x91, 0x1d, 0x87, }, + { 0x67, 0xf1, 0x49, 0x84, 0xc7, 0xda, 0x79, 0x12, 0x48, 0xe3, 0x2b, 0xb5, 0x92, 0x25, 0x83, 0xda, }, + { 0x19, 0x38, 0xf2, 0xcf, 0x72, 0xd5, 0x4e, 0xe9, 0x7e, 0x94, 0x16, 0x6f, 0xa9, 0x1d, 0x2a, 0x36, }, + { 0x74, 0x48, 0x1e, 0x96, 0x46, 0xed, 0x49, 0xfe, 0x0f, 0x62, 0x24, 0x30, 0x16, 0x04, 0x69, 0x8e, }, + { 0x57, 0xfc, 0xa5, 0xde, 0x98, 0xa9, 0xd6, 0xd8, 0x00, 0x64, 0x38, 0xd0, 0x58, 0x3d, 0x8a, 0x1d, }, + { 0x9f, 0xec, 0xde, 0x1c, 0xef, 0xdc, 0x1c, 0xbe, 0xd4, 0x76, 0x36, 0x74, 0xd9, 0x57, 0x53, 0x59, }, + { 0xe3, 0x04, 0x0c, 0x00, 0xeb, 0x28, 0xf1, 0x53, 0x66, 0xca, 0x73, 0xcb, 0xd8, 0x72, 0xe7, 0x40, }, + { 0x76, 0x97, 0x00, 0x9a, 0x6a, 0x83, 0x1d, 0xfe, 0xcc, 0xa9, 0x1c, 0x59, 0x93, 0x67, 0x0f, 0x7a, }, + { 0x58, 0x53, 0x54, 0x23, 0x21, 0xf5, 0x67, 0xa0, 0x05, 0xd5, 0x47, 0xa4, 0xf0, 0x47, 0x59, 0xbd, }, + { 0x51, 0x50, 0xd1, 0x77, 0x2f, 0x50, 0x83, 0x4a, 0x50, 0x3e, 0x06, 0x9a, 0x97, 0x3f, 0xbd, 0x7c, }, +}; + +static void +test_siphash(void) { + fprintf(stderr, "siphash():\n"); + + #define KEY_LEN 16 + uint8_t key[KEY_LEN]; + for (uint8_t i = 0; i < KEY_LEN; i++) { + key[i] = i; + } + + { + fprintf(stderr, "\033[0;33mtesting\033[0m: SipHash-2-4-64..."); + + #define LEN1 8 + uint8_t out[LEN1 * 2U]; + + #define ITERATIONS1 sizeof(VECTORS_SIP64)/sizeof(VECTORS_SIP64[0]) + uint8_t in[ITERATIONS1]; + + for (uint8_t i = 0; i < ITERATIONS1; i++) { + in[i] = i; + siphash_impl(in, i, key, out, LEN1); + + assert(memcmp(out, (uint8_t *)VECTORS_SIP64 + (i * LEN1), LEN1) == 0); + } + + fprintf(stderr, " \033[0;32mOK\033[0m\n"); + } + + { + fprintf(stderr, "\033[0;33mtesting\033[0m: SipHash-2-4-128..."); + + #define LEN2 16 + uint8_t out[LEN2]; + + #define ITERATIONS2 sizeof(VECTORS_SIP128)/sizeof(VECTORS_SIP128[0]) + uint8_t in[ITERATIONS2]; + + for (uint8_t i = 0; i < ITERATIONS2; i++) { + in[i] = i; + siphash_impl(in, i, key, out, LEN2); + + assert(memcmp(out, (uint8_t *)VECTORS_SIP128 + (i * LEN2), LEN2) == 0); + } + + fprintf(stderr, " \033[0;32mOK\033[0m\n"); + } +} + +int +main(void) { + test_siphash(); + return 0; +} diff --git a/tests/lib.c b/tests/lib.c new file mode 100644 index 0000000..acae834 --- /dev/null +++ b/tests/lib.c @@ -0,0 +1,101 @@ +#include "../src/lib.c" + +#include +#include + + +static int +test_hash(void) { + int rc = -1; + + fprintf(stderr, "hash():\n"); + + FILE *f = NULL; + size_t read_count; + + const size_t iterations = 100U; + u8 *input = NULL; + + f = fopen("/dev/urandom", "r"); + if (f == NULL) { + perror("fopen()"); + goto out; + } + + u8 key[SIPHASH_KEY_LENGTH]; + read_count = fread(key, sizeof(u8), sizeof(key), f); + if (ferror(f)) { + perror("fread()"); + goto out; + } + assert(read_count == sizeof(key)); + + time_t t = time(NULL); + if (t == (time_t)-1) { + perror("time(NULL)"); + } + srand((unsigned int)t); + + { + fprintf( + stderr, + "\033[0;33mtesting\033[0m: hash() === SipHash-2-4-128 %ld times...", + iterations + ); + + u8 given[SIPHASH_OUTPUT_LENGTH]; + u8 expected[SIPHASH_OUTPUT_LENGTH]; + for (u8 i = 0; i < iterations; i++) { + const size_t input_size = ((unsigned int)abs(rand())) % 256; + input = malloc(input_size); + if (input == NULL) { + perror("malloc()"); + goto out; + } + + read_count = fread(input, sizeof(u8), input_size, f); + if (ferror(f)) { + perror("fread()"); + goto out; + } + assert(read_count == input_size); + + siphash(key, input_size, input, given); + siphash_impl(input, input_size, key, expected, SIPHASH_OUTPUT_LENGTH); + + assert(memcmp(given, expected, SIPHASH_OUTPUT_LENGTH) == 0); + + free(input); + input = NULL; + } + + fprintf(stderr, " \033[0;32mOK\033[0m\n"); + } + + rc = 0; +out: + if (f != NULL) { + if (fclose(f)) { + perror("fclose(f)"); + rc = -1; + } + } + if (input != NULL) { + free(input); + } + return rc; +} + +int +main(void) { + int rc = -1; + + if (test_hash()) { + fprintf(stderr, "test_hash()\n"); + goto out; + } + + rc = 0; +out: + return !!rc; +} diff --git a/tests/resources/siphash.c b/tests/resources/siphash.c new file mode 100644 index 0000000..c6d16e2 --- /dev/null +++ b/tests/resources/siphash.c @@ -0,0 +1,185 @@ +/* + SipHash reference C implementation + + Copyright (c) 2012-2022 Jean-Philippe Aumasson + + Copyright (c) 2012-2014 Daniel J. Bernstein + + To the extent possible under law, the author(s) have dedicated all copyright + and related and neighboring rights to this software to the public domain + worldwide. This software is distributed without any warranty. + + You should have received a copy of the CC0 Public Domain Dedication along + with + this software. If not, see + . + */ + +#include "siphash.h" +#include +#include +#include + +/* default: SipHash-2-4 */ +#ifndef cROUNDS +#define cROUNDS 2 +#endif +#ifndef dROUNDS +#define dROUNDS 4 +#endif + +#define ROTL(x, b) (uint64_t)(((x) << (b)) | ((x) >> (64 - (b)))) + +#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); + +#define U64TO8_LE(p, v) \ + U32TO8_LE((p), (uint32_t)((v))); \ + U32TO8_LE((p) + 4, (uint32_t)((v) >> 32)); + +#define U8TO64_LE(p) \ + (((uint64_t)((p)[0])) | ((uint64_t)((p)[1]) << 8) | \ + ((uint64_t)((p)[2]) << 16) | ((uint64_t)((p)[3]) << 24) | \ + ((uint64_t)((p)[4]) << 32) | ((uint64_t)((p)[5]) << 40) | \ + ((uint64_t)((p)[6]) << 48) | ((uint64_t)((p)[7]) << 56)) + +#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 += v1; \ + v1 = ROTL(v1, 17); \ + v1 ^= v2; \ + v2 = ROTL(v2, 32); \ + } while (0) + +#ifdef DEBUG_SIPHASH +#include + +#define TRACE \ + do { \ + printf("(%3zu) v0 %016" PRIx64 "\n", inlen, v0); \ + printf("(%3zu) v1 %016" PRIx64 "\n", inlen, v1); \ + printf("(%3zu) v2 %016" PRIx64 "\n", inlen, v2); \ + printf("(%3zu) v3 %016" PRIx64 "\n", inlen, v3); \ + } while (0) +#else +#define TRACE +#endif + +/* + Computes a SipHash value + *in: pointer to input data (read-only) + inlen: input data length in bytes (any size_t value) + *k: pointer to the key data (read-only), must be 16 bytes + *out: pointer to output data (write-only), outlen bytes must be allocated + outlen: length of the output in bytes, must be 8 or 16 +*/ +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(kk); + uint64_t k1 = U8TO64_LE(kk + 8); + uint64_t m; + int i; + const unsigned char *end = ni + inlen - (inlen % sizeof(uint64_t)); + const int left = inlen & 7; + uint64_t b = ((uint64_t)inlen) << 56; + v3 ^= k1; + v2 ^= k0; + v1 ^= k1; + v0 ^= k0; + + if (outlen == 16) + v1 ^= 0xee; + + for (; ni != end; ni += 8) { + m = U8TO64_LE(ni); + v3 ^= m; + + TRACE; + for (i = 0; i < cROUNDS; ++i) + SIPROUND; + + v0 ^= m; + } + + switch (left) { + case 7: + b |= ((uint64_t)ni[6]) << 48; + /* FALLTHRU */ + case 6: + b |= ((uint64_t)ni[5]) << 40; + /* FALLTHRU */ + case 5: + b |= ((uint64_t)ni[4]) << 32; + /* FALLTHRU */ + case 4: + b |= ((uint64_t)ni[3]) << 24; + /* FALLTHRU */ + case 3: + b |= ((uint64_t)ni[2]) << 16; + /* FALLTHRU */ + case 2: + b |= ((uint64_t)ni[1]) << 8; + /* FALLTHRU */ + case 1: + b |= ((uint64_t)ni[0]); + break; + case 0: + break; + } + + v3 ^= b; + + TRACE; + for (i = 0; i < cROUNDS; ++i) + SIPROUND; + + v0 ^= b; + + if (outlen == 16) + v2 ^= 0xee; + else + v2 ^= 0xff; + + TRACE; + for (i = 0; i < dROUNDS; ++i) + SIPROUND; + + b = v0 ^ v1 ^ v2 ^ v3; + U64TO8_LE(out, b); + + if (outlen == 8) + return 0; + + v1 ^= 0xdd; + + TRACE; + for (i = 0; i < dROUNDS; ++i) + SIPROUND; + + b = v0 ^ v1 ^ v2 ^ v3; + U64TO8_LE(out + 8, b); + + return 0; +} diff --git a/tests/resources/siphash.h b/tests/resources/siphash.h new file mode 100644 index 0000000..3fbd378 --- /dev/null +++ b/tests/resources/siphash.h @@ -0,0 +1,22 @@ +/* + SipHash reference C implementation + + Copyright (c) 2012-2021 Jean-Philippe Aumasson + + Copyright (c) 2012-2014 Daniel J. Bernstein + + To the extent possible under law, the author(s) have dedicated all copyright + and related and neighboring rights to this software to the public domain + worldwide. This software is distributed without any warranty. + + You should have received a copy of the CC0 Public Domain Dedication along + with + this software. If not, see + . + */ + +#include +#include + +int siphash(const void *in, const size_t inlen, const void *k, uint8_t *out, + const size_t outlen); diff --git a/vectors.h b/vectors.h deleted file mode 100644 index 1a0ca04..0000000 --- a/vectors.h +++ /dev/null @@ -1,2826 +0,0 @@ -#include - -const uint8_t vectors_sip64[64][8] = { - { - 0x31, - 0x0e, - 0x0e, - 0xdd, - 0x47, - 0xdb, - 0x6f, - 0x72, - }, - { - 0xfd, - 0x67, - 0xdc, - 0x93, - 0xc5, - 0x39, - 0xf8, - 0x74, - }, - { - 0x5a, - 0x4f, - 0xa9, - 0xd9, - 0x09, - 0x80, - 0x6c, - 0x0d, - }, - { - 0x2d, - 0x7e, - 0xfb, - 0xd7, - 0x96, - 0x66, - 0x67, - 0x85, - }, - { - 0xb7, - 0x87, - 0x71, - 0x27, - 0xe0, - 0x94, - 0x27, - 0xcf, - }, - { - 0x8d, - 0xa6, - 0x99, - 0xcd, - 0x64, - 0x55, - 0x76, - 0x18, - }, - { - 0xce, - 0xe3, - 0xfe, - 0x58, - 0x6e, - 0x46, - 0xc9, - 0xcb, - }, - { - 0x37, - 0xd1, - 0x01, - 0x8b, - 0xf5, - 0x00, - 0x02, - 0xab, - }, - { - 0x62, - 0x24, - 0x93, - 0x9a, - 0x79, - 0xf5, - 0xf5, - 0x93, - }, - { - 0xb0, - 0xe4, - 0xa9, - 0x0b, - 0xdf, - 0x82, - 0x00, - 0x9e, - }, - { - 0xf3, - 0xb9, - 0xdd, - 0x94, - 0xc5, - 0xbb, - 0x5d, - 0x7a, - }, - { - 0xa7, - 0xad, - 0x6b, - 0x22, - 0x46, - 0x2f, - 0xb3, - 0xf4, - }, - { - 0xfb, - 0xe5, - 0x0e, - 0x86, - 0xbc, - 0x8f, - 0x1e, - 0x75, - }, - { - 0x90, - 0x3d, - 0x84, - 0xc0, - 0x27, - 0x56, - 0xea, - 0x14, - }, - { - 0xee, - 0xf2, - 0x7a, - 0x8e, - 0x90, - 0xca, - 0x23, - 0xf7, - }, - { - 0xe5, - 0x45, - 0xbe, - 0x49, - 0x61, - 0xca, - 0x29, - 0xa1, - }, - { - 0xdb, - 0x9b, - 0xc2, - 0x57, - 0x7f, - 0xcc, - 0x2a, - 0x3f, - }, - { - 0x94, - 0x47, - 0xbe, - 0x2c, - 0xf5, - 0xe9, - 0x9a, - 0x69, - }, - { - 0x9c, - 0xd3, - 0x8d, - 0x96, - 0xf0, - 0xb3, - 0xc1, - 0x4b, - }, - { - 0xbd, - 0x61, - 0x79, - 0xa7, - 0x1d, - 0xc9, - 0x6d, - 0xbb, - }, - { - 0x98, - 0xee, - 0xa2, - 0x1a, - 0xf2, - 0x5c, - 0xd6, - 0xbe, - }, - { - 0xc7, - 0x67, - 0x3b, - 0x2e, - 0xb0, - 0xcb, - 0xf2, - 0xd0, - }, - { - 0x88, - 0x3e, - 0xa3, - 0xe3, - 0x95, - 0x67, - 0x53, - 0x93, - }, - { - 0xc8, - 0xce, - 0x5c, - 0xcd, - 0x8c, - 0x03, - 0x0c, - 0xa8, - }, - { - 0x94, - 0xaf, - 0x49, - 0xf6, - 0xc6, - 0x50, - 0xad, - 0xb8, - }, - { - 0xea, - 0xb8, - 0x85, - 0x8a, - 0xde, - 0x92, - 0xe1, - 0xbc, - }, - { - 0xf3, - 0x15, - 0xbb, - 0x5b, - 0xb8, - 0x35, - 0xd8, - 0x17, - }, - { - 0xad, - 0xcf, - 0x6b, - 0x07, - 0x63, - 0x61, - 0x2e, - 0x2f, - }, - { - 0xa5, - 0xc9, - 0x1d, - 0xa7, - 0xac, - 0xaa, - 0x4d, - 0xde, - }, - { - 0x71, - 0x65, - 0x95, - 0x87, - 0x66, - 0x50, - 0xa2, - 0xa6, - }, - { - 0x28, - 0xef, - 0x49, - 0x5c, - 0x53, - 0xa3, - 0x87, - 0xad, - }, - { - 0x42, - 0xc3, - 0x41, - 0xd8, - 0xfa, - 0x92, - 0xd8, - 0x32, - }, - { - 0xce, - 0x7c, - 0xf2, - 0x72, - 0x2f, - 0x51, - 0x27, - 0x71, - }, - { - 0xe3, - 0x78, - 0x59, - 0xf9, - 0x46, - 0x23, - 0xf3, - 0xa7, - }, - { - 0x38, - 0x12, - 0x05, - 0xbb, - 0x1a, - 0xb0, - 0xe0, - 0x12, - }, - { - 0xae, - 0x97, - 0xa1, - 0x0f, - 0xd4, - 0x34, - 0xe0, - 0x15, - }, - { - 0xb4, - 0xa3, - 0x15, - 0x08, - 0xbe, - 0xff, - 0x4d, - 0x31, - }, - { - 0x81, - 0x39, - 0x62, - 0x29, - 0xf0, - 0x90, - 0x79, - 0x02, - }, - { - 0x4d, - 0x0c, - 0xf4, - 0x9e, - 0xe5, - 0xd4, - 0xdc, - 0xca, - }, - { - 0x5c, - 0x73, - 0x33, - 0x6a, - 0x76, - 0xd8, - 0xbf, - 0x9a, - }, - { - 0xd0, - 0xa7, - 0x04, - 0x53, - 0x6b, - 0xa9, - 0x3e, - 0x0e, - }, - { - 0x92, - 0x59, - 0x58, - 0xfc, - 0xd6, - 0x42, - 0x0c, - 0xad, - }, - { - 0xa9, - 0x15, - 0xc2, - 0x9b, - 0xc8, - 0x06, - 0x73, - 0x18, - }, - { - 0x95, - 0x2b, - 0x79, - 0xf3, - 0xbc, - 0x0a, - 0xa6, - 0xd4, - }, - { - 0xf2, - 0x1d, - 0xf2, - 0xe4, - 0x1d, - 0x45, - 0x35, - 0xf9, - }, - { - 0x87, - 0x57, - 0x75, - 0x19, - 0x04, - 0x8f, - 0x53, - 0xa9, - }, - { - 0x10, - 0xa5, - 0x6c, - 0xf5, - 0xdf, - 0xcd, - 0x9a, - 0xdb, - }, - { - 0xeb, - 0x75, - 0x09, - 0x5c, - 0xcd, - 0x98, - 0x6c, - 0xd0, - }, - { - 0x51, - 0xa9, - 0xcb, - 0x9e, - 0xcb, - 0xa3, - 0x12, - 0xe6, - }, - { - 0x96, - 0xaf, - 0xad, - 0xfc, - 0x2c, - 0xe6, - 0x66, - 0xc7, - }, - { - 0x72, - 0xfe, - 0x52, - 0x97, - 0x5a, - 0x43, - 0x64, - 0xee, - }, - { - 0x5a, - 0x16, - 0x45, - 0xb2, - 0x76, - 0xd5, - 0x92, - 0xa1, - }, - { - 0xb2, - 0x74, - 0xcb, - 0x8e, - 0xbf, - 0x87, - 0x87, - 0x0a, - }, - { - 0x6f, - 0x9b, - 0xb4, - 0x20, - 0x3d, - 0xe7, - 0xb3, - 0x81, - }, - { - 0xea, - 0xec, - 0xb2, - 0xa3, - 0x0b, - 0x22, - 0xa8, - 0x7f, - }, - { - 0x99, - 0x24, - 0xa4, - 0x3c, - 0xc1, - 0x31, - 0x57, - 0x24, - }, - { - 0xbd, - 0x83, - 0x8d, - 0x3a, - 0xaf, - 0xbf, - 0x8d, - 0xb7, - }, - { - 0x0b, - 0x1a, - 0x2a, - 0x32, - 0x65, - 0xd5, - 0x1a, - 0xea, - }, - { - 0x13, - 0x50, - 0x79, - 0xa3, - 0x23, - 0x1c, - 0xe6, - 0x60, - }, - { - 0x93, - 0x2b, - 0x28, - 0x46, - 0xe4, - 0xd7, - 0x06, - 0x66, - }, - { - 0xe1, - 0x91, - 0x5f, - 0x5c, - 0xb1, - 0xec, - 0xa4, - 0x6c, - }, - { - 0xf3, - 0x25, - 0x96, - 0x5c, - 0xa1, - 0x6d, - 0x62, - 0x9f, - }, - { - 0x57, - 0x5f, - 0xf2, - 0x8e, - 0x60, - 0x38, - 0x1b, - 0xe5, - }, - { - 0x72, - 0x45, - 0x06, - 0xeb, - 0x4c, - 0x32, - 0x8a, - 0x95, - }, -}; -const uint8_t vectors_sip128[64][16] = { - { - 0xa3, - 0x81, - 0x7f, - 0x04, - 0xba, - 0x25, - 0xa8, - 0xe6, - 0x6d, - 0xf6, - 0x72, - 0x14, - 0xc7, - 0x55, - 0x02, - 0x93, - }, - { - 0xda, - 0x87, - 0xc1, - 0xd8, - 0x6b, - 0x99, - 0xaf, - 0x44, - 0x34, - 0x76, - 0x59, - 0x11, - 0x9b, - 0x22, - 0xfc, - 0x45, - }, - { - 0x81, - 0x77, - 0x22, - 0x8d, - 0xa4, - 0xa4, - 0x5d, - 0xc7, - 0xfc, - 0xa3, - 0x8b, - 0xde, - 0xf6, - 0x0a, - 0xff, - 0xe4, - }, - { - 0x9c, - 0x70, - 0xb6, - 0x0c, - 0x52, - 0x67, - 0xa9, - 0x4e, - 0x5f, - 0x33, - 0xb6, - 0xb0, - 0x29, - 0x85, - 0xed, - 0x51, - }, - { - 0xf8, - 0x81, - 0x64, - 0xc1, - 0x2d, - 0x9c, - 0x8f, - 0xaf, - 0x7d, - 0x0f, - 0x6e, - 0x7c, - 0x7b, - 0xcd, - 0x55, - 0x79, - }, - { - 0x13, - 0x68, - 0x87, - 0x59, - 0x80, - 0x77, - 0x6f, - 0x88, - 0x54, - 0x52, - 0x7a, - 0x07, - 0x69, - 0x0e, - 0x96, - 0x27, - }, - { - 0x14, - 0xee, - 0xca, - 0x33, - 0x8b, - 0x20, - 0x86, - 0x13, - 0x48, - 0x5e, - 0xa0, - 0x30, - 0x8f, - 0xd7, - 0xa1, - 0x5e, - }, - { - 0xa1, - 0xf1, - 0xeb, - 0xbe, - 0xd8, - 0xdb, - 0xc1, - 0x53, - 0xc0, - 0xb8, - 0x4a, - 0xa6, - 0x1f, - 0xf0, - 0x82, - 0x39, - }, - { - 0x3b, - 0x62, - 0xa9, - 0xba, - 0x62, - 0x58, - 0xf5, - 0x61, - 0x0f, - 0x83, - 0xe2, - 0x64, - 0xf3, - 0x14, - 0x97, - 0xb4, - }, - { - 0x26, - 0x44, - 0x99, - 0x06, - 0x0a, - 0xd9, - 0xba, - 0xab, - 0xc4, - 0x7f, - 0x8b, - 0x02, - 0xbb, - 0x6d, - 0x71, - 0xed, - }, - { - 0x00, - 0x11, - 0x0d, - 0xc3, - 0x78, - 0x14, - 0x69, - 0x56, - 0xc9, - 0x54, - 0x47, - 0xd3, - 0xf3, - 0xd0, - 0xfb, - 0xba, - }, - { - 0x01, - 0x51, - 0xc5, - 0x68, - 0x38, - 0x6b, - 0x66, - 0x77, - 0xa2, - 0xb4, - 0xdc, - 0x6f, - 0x81, - 0xe5, - 0xdc, - 0x18, - }, - { - 0xd6, - 0x26, - 0xb2, - 0x66, - 0x90, - 0x5e, - 0xf3, - 0x58, - 0x82, - 0x63, - 0x4d, - 0xf6, - 0x85, - 0x32, - 0xc1, - 0x25, - }, - { - 0x98, - 0x69, - 0xe2, - 0x47, - 0xe9, - 0xc0, - 0x8b, - 0x10, - 0xd0, - 0x29, - 0x93, - 0x4f, - 0xc4, - 0xb9, - 0x52, - 0xf7, - }, - { - 0x31, - 0xfc, - 0xef, - 0xac, - 0x66, - 0xd7, - 0xde, - 0x9c, - 0x7e, - 0xc7, - 0x48, - 0x5f, - 0xe4, - 0x49, - 0x49, - 0x02, - }, - { - 0x54, - 0x93, - 0xe9, - 0x99, - 0x33, - 0xb0, - 0xa8, - 0x11, - 0x7e, - 0x08, - 0xec, - 0x0f, - 0x97, - 0xcf, - 0xc3, - 0xd9, - }, - { - 0x6e, - 0xe2, - 0xa4, - 0xca, - 0x67, - 0xb0, - 0x54, - 0xbb, - 0xfd, - 0x33, - 0x15, - 0xbf, - 0x85, - 0x23, - 0x05, - 0x77, - }, - { - 0x47, - 0x3d, - 0x06, - 0xe8, - 0x73, - 0x8d, - 0xb8, - 0x98, - 0x54, - 0xc0, - 0x66, - 0xc4, - 0x7a, - 0xe4, - 0x77, - 0x40, - }, - { - 0xa4, - 0x26, - 0xe5, - 0xe4, - 0x23, - 0xbf, - 0x48, - 0x85, - 0x29, - 0x4d, - 0xa4, - 0x81, - 0xfe, - 0xae, - 0xf7, - 0x23, - }, - { - 0x78, - 0x01, - 0x77, - 0x31, - 0xcf, - 0x65, - 0xfa, - 0xb0, - 0x74, - 0xd5, - 0x20, - 0x89, - 0x52, - 0x51, - 0x2e, - 0xb1, - }, - { - 0x9e, - 0x25, - 0xfc, - 0x83, - 0x3f, - 0x22, - 0x90, - 0x73, - 0x3e, - 0x93, - 0x44, - 0xa5, - 0xe8, - 0x38, - 0x39, - 0xeb, - }, - { - 0x56, - 0x8e, - 0x49, - 0x5a, - 0xbe, - 0x52, - 0x5a, - 0x21, - 0x8a, - 0x22, - 0x14, - 0xcd, - 0x3e, - 0x07, - 0x1d, - 0x12, - }, - { - 0x4a, - 0x29, - 0xb5, - 0x45, - 0x52, - 0xd1, - 0x6b, - 0x9a, - 0x46, - 0x9c, - 0x10, - 0x52, - 0x8e, - 0xff, - 0x0a, - 0xae, - }, - { - 0xc9, - 0xd1, - 0x84, - 0xdd, - 0xd5, - 0xa9, - 0xf5, - 0xe0, - 0xcf, - 0x8c, - 0xe2, - 0x9a, - 0x9a, - 0xbf, - 0x69, - 0x1c, - }, - { - 0x2d, - 0xb4, - 0x79, - 0xae, - 0x78, - 0xbd, - 0x50, - 0xd8, - 0x88, - 0x2a, - 0x8a, - 0x17, - 0x8a, - 0x61, - 0x32, - 0xad, - }, - { - 0x8e, - 0xce, - 0x5f, - 0x04, - 0x2d, - 0x5e, - 0x44, - 0x7b, - 0x50, - 0x51, - 0xb9, - 0xea, - 0xcb, - 0x8d, - 0x8f, - 0x6f, - }, - { - 0x9c, - 0x0b, - 0x53, - 0xb4, - 0xb3, - 0xc3, - 0x07, - 0xe8, - 0x7e, - 0xae, - 0xe0, - 0x86, - 0x78, - 0x14, - 0x1f, - 0x66, - }, - { - 0xab, - 0xf2, - 0x48, - 0xaf, - 0x69, - 0xa6, - 0xea, - 0xe4, - 0xbf, - 0xd3, - 0xeb, - 0x2f, - 0x12, - 0x9e, - 0xeb, - 0x94, - }, - { - 0x06, - 0x64, - 0xda, - 0x16, - 0x68, - 0x57, - 0x4b, - 0x88, - 0xb9, - 0x35, - 0xf3, - 0x02, - 0x73, - 0x58, - 0xae, - 0xf4, - }, - { - 0xaa, - 0x4b, - 0x9d, - 0xc4, - 0xbf, - 0x33, - 0x7d, - 0xe9, - 0x0c, - 0xd4, - 0xfd, - 0x3c, - 0x46, - 0x7c, - 0x6a, - 0xb7, - }, - { - 0xea, - 0x5c, - 0x7f, - 0x47, - 0x1f, - 0xaf, - 0x6b, - 0xde, - 0x2b, - 0x1a, - 0xd7, - 0xd4, - 0x68, - 0x6d, - 0x22, - 0x87, - }, - { - 0x29, - 0x39, - 0xb0, - 0x18, - 0x32, - 0x23, - 0xfa, - 0xfc, - 0x17, - 0x23, - 0xde, - 0x4f, - 0x52, - 0xc4, - 0x3d, - 0x35, - }, - { - 0x7c, - 0x39, - 0x56, - 0xca, - 0x5e, - 0xea, - 0xfc, - 0x3e, - 0x36, - 0x3e, - 0x9d, - 0x55, - 0x65, - 0x46, - 0xeb, - 0x68, - }, - { - 0x77, - 0xc6, - 0x07, - 0x71, - 0x46, - 0xf0, - 0x1c, - 0x32, - 0xb6, - 0xb6, - 0x9d, - 0x5f, - 0x4e, - 0xa9, - 0xff, - 0xcf, - }, - { - 0x37, - 0xa6, - 0x98, - 0x6c, - 0xb8, - 0x84, - 0x7e, - 0xdf, - 0x09, - 0x25, - 0xf0, - 0xf1, - 0x30, - 0x9b, - 0x54, - 0xde, - }, - { - 0xa7, - 0x05, - 0xf0, - 0xe6, - 0x9d, - 0xa9, - 0xa8, - 0xf9, - 0x07, - 0x24, - 0x1a, - 0x2e, - 0x92, - 0x3c, - 0x8c, - 0xc8, - }, - { - 0x3d, - 0xc4, - 0x7d, - 0x1f, - 0x29, - 0xc4, - 0x48, - 0x46, - 0x1e, - 0x9e, - 0x76, - 0xed, - 0x90, - 0x4f, - 0x67, - 0x11, - }, - { - 0x0d, - 0x62, - 0xbf, - 0x01, - 0xe6, - 0xfc, - 0x0e, - 0x1a, - 0x0d, - 0x3c, - 0x47, - 0x51, - 0xc5, - 0xd3, - 0x69, - 0x2b, - }, - { - 0x8c, - 0x03, - 0x46, - 0x8b, - 0xca, - 0x7c, - 0x66, - 0x9e, - 0xe4, - 0xfd, - 0x5e, - 0x08, - 0x4b, - 0xbe, - 0xe7, - 0xb5, - }, - { - 0x52, - 0x8a, - 0x5b, - 0xb9, - 0x3b, - 0xaf, - 0x2c, - 0x9c, - 0x44, - 0x73, - 0xcc, - 0xe5, - 0xd0, - 0xd2, - 0x2b, - 0xd9, - }, - { - 0xdf, - 0x6a, - 0x30, - 0x1e, - 0x95, - 0xc9, - 0x5d, - 0xad, - 0x97, - 0xae, - 0x0c, - 0xc8, - 0xc6, - 0x91, - 0x3b, - 0xd8, - }, - { - 0x80, - 0x11, - 0x89, - 0x90, - 0x2c, - 0x85, - 0x7f, - 0x39, - 0xe7, - 0x35, - 0x91, - 0x28, - 0x5e, - 0x70, - 0xb6, - 0xdb, - }, - { - 0xe6, - 0x17, - 0x34, - 0x6a, - 0xc9, - 0xc2, - 0x31, - 0xbb, - 0x36, - 0x50, - 0xae, - 0x34, - 0xcc, - 0xca, - 0x0c, - 0x5b, - }, - { - 0x27, - 0xd9, - 0x34, - 0x37, - 0xef, - 0xb7, - 0x21, - 0xaa, - 0x40, - 0x18, - 0x21, - 0xdc, - 0xec, - 0x5a, - 0xdf, - 0x89, - }, - { - 0x89, - 0x23, - 0x7d, - 0x9d, - 0xed, - 0x9c, - 0x5e, - 0x78, - 0xd8, - 0xb1, - 0xc9, - 0xb1, - 0x66, - 0xcc, - 0x73, - 0x42, - }, - { - 0x4a, - 0x6d, - 0x80, - 0x91, - 0xbf, - 0x5e, - 0x7d, - 0x65, - 0x11, - 0x89, - 0xfa, - 0x94, - 0xa2, - 0x50, - 0xb1, - 0x4c, - }, - { - 0x0e, - 0x33, - 0xf9, - 0x60, - 0x55, - 0xe7, - 0xae, - 0x89, - 0x3f, - 0xfc, - 0x0e, - 0x3d, - 0xcf, - 0x49, - 0x29, - 0x02, - }, - { - 0xe6, - 0x1c, - 0x43, - 0x2b, - 0x72, - 0x0b, - 0x19, - 0xd1, - 0x8e, - 0xc8, - 0xd8, - 0x4b, - 0xdc, - 0x63, - 0x15, - 0x1b, - }, - { - 0xf7, - 0xe5, - 0xae, - 0xf5, - 0x49, - 0xf7, - 0x82, - 0xcf, - 0x37, - 0x90, - 0x55, - 0xa6, - 0x08, - 0x26, - 0x9b, - 0x16, - }, - { - 0x43, - 0x8d, - 0x03, - 0x0f, - 0xd0, - 0xb7, - 0xa5, - 0x4f, - 0xa8, - 0x37, - 0xf2, - 0xad, - 0x20, - 0x1a, - 0x64, - 0x03, - }, - { - 0xa5, - 0x90, - 0xd3, - 0xee, - 0x4f, - 0xbf, - 0x04, - 0xe3, - 0x24, - 0x7e, - 0x0d, - 0x27, - 0xf2, - 0x86, - 0x42, - 0x3f, - }, - { - 0x5f, - 0xe2, - 0xc1, - 0xa1, - 0x72, - 0xfe, - 0x93, - 0xc4, - 0xb1, - 0x5c, - 0xd3, - 0x7c, - 0xae, - 0xf9, - 0xf5, - 0x38, - }, - { - 0x2c, - 0x97, - 0x32, - 0x5c, - 0xbd, - 0x06, - 0xb3, - 0x6e, - 0xb2, - 0x13, - 0x3d, - 0xd0, - 0x8b, - 0x3a, - 0x01, - 0x7c, - }, - { - 0x92, - 0xc8, - 0x14, - 0x22, - 0x7a, - 0x6b, - 0xca, - 0x94, - 0x9f, - 0xf0, - 0x65, - 0x9f, - 0x00, - 0x2a, - 0xd3, - 0x9e, - }, - { - 0xdc, - 0xe8, - 0x50, - 0x11, - 0x0b, - 0xd8, - 0x32, - 0x8c, - 0xfb, - 0xd5, - 0x08, - 0x41, - 0xd6, - 0x91, - 0x1d, - 0x87, - }, - { - 0x67, - 0xf1, - 0x49, - 0x84, - 0xc7, - 0xda, - 0x79, - 0x12, - 0x48, - 0xe3, - 0x2b, - 0xb5, - 0x92, - 0x25, - 0x83, - 0xda, - }, - { - 0x19, - 0x38, - 0xf2, - 0xcf, - 0x72, - 0xd5, - 0x4e, - 0xe9, - 0x7e, - 0x94, - 0x16, - 0x6f, - 0xa9, - 0x1d, - 0x2a, - 0x36, - }, - { - 0x74, - 0x48, - 0x1e, - 0x96, - 0x46, - 0xed, - 0x49, - 0xfe, - 0x0f, - 0x62, - 0x24, - 0x30, - 0x16, - 0x04, - 0x69, - 0x8e, - }, - { - 0x57, - 0xfc, - 0xa5, - 0xde, - 0x98, - 0xa9, - 0xd6, - 0xd8, - 0x00, - 0x64, - 0x38, - 0xd0, - 0x58, - 0x3d, - 0x8a, - 0x1d, - }, - { - 0x9f, - 0xec, - 0xde, - 0x1c, - 0xef, - 0xdc, - 0x1c, - 0xbe, - 0xd4, - 0x76, - 0x36, - 0x74, - 0xd9, - 0x57, - 0x53, - 0x59, - }, - { - 0xe3, - 0x04, - 0x0c, - 0x00, - 0xeb, - 0x28, - 0xf1, - 0x53, - 0x66, - 0xca, - 0x73, - 0xcb, - 0xd8, - 0x72, - 0xe7, - 0x40, - }, - { - 0x76, - 0x97, - 0x00, - 0x9a, - 0x6a, - 0x83, - 0x1d, - 0xfe, - 0xcc, - 0xa9, - 0x1c, - 0x59, - 0x93, - 0x67, - 0x0f, - 0x7a, - }, - { - 0x58, - 0x53, - 0x54, - 0x23, - 0x21, - 0xf5, - 0x67, - 0xa0, - 0x05, - 0xd5, - 0x47, - 0xa4, - 0xf0, - 0x47, - 0x59, - 0xbd, - }, - { - 0x51, - 0x50, - 0xd1, - 0x77, - 0x2f, - 0x50, - 0x83, - 0x4a, - 0x50, - 0x3e, - 0x06, - 0x9a, - 0x97, - 0x3f, - 0xbd, - 0x7c, - }, -}; -const uint8_t vectors_hsip32[64][4] = { - { - 0xa9, - 0x35, - 0x9f, - 0x5b, - }, - { - 0x27, - 0x47, - 0x5a, - 0xb8, - }, - { - 0xfa, - 0x62, - 0xa6, - 0x03, - }, - { - 0x8a, - 0xfe, - 0xe7, - 0x04, - }, - { - 0x2a, - 0x6e, - 0x46, - 0x89, - }, - { - 0xc5, - 0xfa, - 0xb6, - 0x69, - }, - { - 0x58, - 0x63, - 0xfc, - 0x23, - }, - { - 0x8b, - 0xcf, - 0x63, - 0xc5, - }, - { - 0xd0, - 0xb8, - 0x84, - 0x8f, - }, - { - 0xf8, - 0x06, - 0xe7, - 0x79, - }, - { - 0x94, - 0xb0, - 0x79, - 0x34, - }, - { - 0x08, - 0x08, - 0x30, - 0x50, - }, - { - 0x57, - 0xf0, - 0x87, - 0x2f, - }, - { - 0x77, - 0xe6, - 0x63, - 0xff, - }, - { - 0xd6, - 0xff, - 0xf8, - 0x7c, - }, - { - 0x74, - 0xfe, - 0x2b, - 0x97, - }, - { - 0xd9, - 0xb5, - 0xac, - 0x84, - }, - { - 0xc4, - 0x74, - 0x64, - 0x5b, - }, - { - 0x46, - 0x5b, - 0x8d, - 0x9b, - }, - { - 0x7b, - 0xef, - 0xe3, - 0x87, - }, - { - 0xe3, - 0x4d, - 0x10, - 0x45, - }, - { - 0x61, - 0x3f, - 0x62, - 0xb3, - }, - { - 0x70, - 0xf3, - 0x67, - 0xfe, - }, - { - 0xe6, - 0xad, - 0xb8, - 0xbd, - }, - { - 0x27, - 0x40, - 0x0c, - 0x63, - }, - { - 0x26, - 0x78, - 0x78, - 0x75, - }, - { - 0x4f, - 0x56, - 0x7b, - 0x5f, - }, - { - 0x3a, - 0xb0, - 0xe6, - 0x69, - }, - { - 0xb0, - 0x64, - 0x40, - 0x00, - }, - { - 0xff, - 0x67, - 0x0f, - 0xb4, - }, - { - 0x50, - 0x9e, - 0x33, - 0x8b, - }, - { - 0x5d, - 0x58, - 0x9f, - 0x1a, - }, - { - 0xfe, - 0xe7, - 0x21, - 0x12, - }, - { - 0x33, - 0x75, - 0x32, - 0x59, - }, - { - 0x6a, - 0x43, - 0x4f, - 0x8c, - }, - { - 0xfe, - 0x28, - 0xb7, - 0x29, - }, - { - 0xe7, - 0x5c, - 0xc6, - 0xec, - }, - { - 0x69, - 0x7e, - 0x8d, - 0x54, - }, - { - 0x63, - 0x68, - 0x8b, - 0x0f, - }, - { - 0x65, - 0x0b, - 0x62, - 0xb4, - }, - { - 0xb6, - 0xbc, - 0x18, - 0x40, - }, - { - 0x5d, - 0x07, - 0x45, - 0x05, - }, - { - 0x24, - 0x42, - 0xfd, - 0x2e, - }, - { - 0x7b, - 0xb7, - 0x86, - 0x3a, - }, - { - 0x77, - 0x05, - 0xd5, - 0x48, - }, - { - 0xd7, - 0x52, - 0x08, - 0xb1, - }, - { - 0xb6, - 0xd4, - 0x99, - 0xc8, - }, - { - 0x08, - 0x92, - 0x20, - 0x2e, - }, - { - 0x69, - 0xe1, - 0x2c, - 0xe3, - }, - { - 0x8d, - 0xb5, - 0x80, - 0xe5, - }, - { - 0x36, - 0x97, - 0x64, - 0xc6, - }, - { - 0x01, - 0x6e, - 0x02, - 0x04, - }, - { - 0x3b, - 0x85, - 0xf3, - 0xd4, - }, - { - 0xfe, - 0xdb, - 0x66, - 0xbe, - }, - { - 0x1e, - 0x69, - 0x2a, - 0x3a, - }, - { - 0xc6, - 0x89, - 0x84, - 0xc0, - }, - { - 0xa5, - 0xc5, - 0xb9, - 0x40, - }, - { - 0x9b, - 0xe9, - 0xe8, - 0x8c, - }, - { - 0x7d, - 0xbc, - 0x81, - 0x40, - }, - { - 0x7c, - 0x07, - 0x8e, - 0xc5, - }, - { - 0xd4, - 0xe7, - 0x6c, - 0x73, - }, - { - 0x42, - 0x8f, - 0xcb, - 0xb9, - }, - { - 0xbd, - 0x83, - 0x99, - 0x7a, - }, - { - 0x59, - 0xea, - 0x4a, - 0x74, - }, -}; -const uint8_t vectors_hsip64[64][8] = { - { - 0x21, - 0x8d, - 0x1f, - 0x59, - 0xb9, - 0xb8, - 0x3c, - 0xc8, - }, - { - 0xbe, - 0x55, - 0x24, - 0x12, - 0xf8, - 0x38, - 0x73, - 0x15, - }, - { - 0x06, - 0x4f, - 0x39, - 0xef, - 0x7c, - 0x50, - 0xeb, - 0x57, - }, - { - 0xce, - 0x0f, - 0x1a, - 0x45, - 0xf7, - 0x06, - 0x06, - 0x79, - }, - { - 0xd5, - 0xe7, - 0x8a, - 0x17, - 0x5b, - 0xe5, - 0x2e, - 0xa1, - }, - { - 0xcb, - 0x9d, - 0x7c, - 0x3f, - 0x2f, - 0x3d, - 0xb5, - 0x80, - }, - { - 0xce, - 0x3e, - 0x91, - 0x35, - 0x8a, - 0xa2, - 0xbc, - 0x25, - }, - { - 0xff, - 0x20, - 0x27, - 0x28, - 0xb0, - 0x7b, - 0xc6, - 0x84, - }, - { - 0xed, - 0xfe, - 0xe8, - 0x20, - 0xbc, - 0xe4, - 0x85, - 0x8c, - }, - { - 0x5b, - 0x51, - 0xcc, - 0xcc, - 0x13, - 0x88, - 0x83, - 0x07, - }, - { - 0x95, - 0xb0, - 0x46, - 0x9f, - 0x06, - 0xa6, - 0xf2, - 0xee, - }, - { - 0xae, - 0x26, - 0x33, - 0x39, - 0x94, - 0xdd, - 0xcd, - 0x48, - }, - { - 0x7b, - 0xc7, - 0x1f, - 0x9f, - 0xae, - 0xf5, - 0xc7, - 0x99, - }, - { - 0x5a, - 0x23, - 0x52, - 0xd7, - 0x5a, - 0x0c, - 0x37, - 0x44, - }, - { - 0x3b, - 0xb1, - 0xa8, - 0x70, - 0xea, - 0xe8, - 0xe6, - 0x58, - }, - { - 0x21, - 0x7d, - 0x0b, - 0xcb, - 0x4e, - 0x81, - 0xc9, - 0x02, - }, - { - 0x73, - 0x36, - 0xaa, - 0xd2, - 0x5f, - 0x7b, - 0xf3, - 0xb5, - }, - { - 0x37, - 0xad, - 0xc0, - 0x64, - 0x1c, - 0x4c, - 0x4f, - 0x6a, - }, - { - 0xc9, - 0xb2, - 0xdb, - 0x2b, - 0x9a, - 0x3e, - 0x42, - 0xf9, - }, - { - 0xf9, - 0x10, - 0xe4, - 0x80, - 0x20, - 0xab, - 0x36, - 0x3c, - }, - { - 0x1b, - 0xf5, - 0x2b, - 0x0a, - 0x6f, - 0xee, - 0xa7, - 0xdb, - }, - { - 0x00, - 0x74, - 0x1d, - 0xc2, - 0x69, - 0xe8, - 0xb3, - 0xef, - }, - { - 0xe2, - 0x01, - 0x03, - 0xfa, - 0x1b, - 0xa7, - 0x76, - 0xef, - }, - { - 0x4c, - 0x22, - 0x10, - 0xe5, - 0x4b, - 0x68, - 0x1d, - 0x73, - }, - { - 0x70, - 0x74, - 0x10, - 0x45, - 0xae, - 0x3f, - 0xa6, - 0xf1, - }, - { - 0x0c, - 0x86, - 0x40, - 0x37, - 0x39, - 0x71, - 0x40, - 0x38, - }, - { - 0x0d, - 0x89, - 0x9e, - 0xd8, - 0x11, - 0x29, - 0x23, - 0xf0, - }, - { - 0x22, - 0x6b, - 0xf5, - 0xfa, - 0xb8, - 0x1e, - 0xe1, - 0xb8, - }, - { - 0x2d, - 0x92, - 0x5f, - 0xfb, - 0x1e, - 0x00, - 0x16, - 0xb5, - }, - { - 0x36, - 0x19, - 0x58, - 0xd5, - 0x2c, - 0xee, - 0x10, - 0xf1, - }, - { - 0x29, - 0x1a, - 0xaf, - 0x86, - 0x48, - 0x98, - 0x17, - 0x9d, - }, - { - 0x86, - 0x3c, - 0x7f, - 0x15, - 0x5c, - 0x34, - 0x11, - 0x7c, - }, - { - 0x28, - 0x70, - 0x9d, - 0x46, - 0xd8, - 0x11, - 0x62, - 0x6c, - }, - { - 0x24, - 0x84, - 0x77, - 0x68, - 0x1d, - 0x28, - 0xf8, - 0x9c, - }, - { - 0x83, - 0x24, - 0xe4, - 0xd7, - 0x52, - 0x8f, - 0x98, - 0x30, - }, - { - 0xf9, - 0xef, - 0xd4, - 0xe1, - 0x3a, - 0xea, - 0x6b, - 0xd8, - }, - { - 0x86, - 0xd6, - 0x7a, - 0x40, - 0xec, - 0x42, - 0x76, - 0xdc, - }, - { - 0x3f, - 0x62, - 0x92, - 0xec, - 0xcc, - 0xa9, - 0x7e, - 0x35, - }, - { - 0xcb, - 0xd9, - 0x2e, - 0xe7, - 0x24, - 0xd4, - 0x21, - 0x09, - }, - { - 0x36, - 0x8d, - 0xf6, - 0x80, - 0x8d, - 0x40, - 0x3d, - 0x79, - }, - { - 0x5b, - 0x38, - 0xc8, - 0x1c, - 0x67, - 0xc8, - 0xae, - 0x4c, - }, - { - 0x95, - 0xab, - 0x71, - 0x89, - 0xd4, - 0x39, - 0xac, - 0xb3, - }, - { - 0xa9, - 0x1a, - 0x52, - 0xc0, - 0x25, - 0x32, - 0x70, - 0x24, - }, - { - 0x5b, - 0x00, - 0x87, - 0xc6, - 0x95, - 0x28, - 0xac, - 0xea, - }, - { - 0x1e, - 0x30, - 0xf3, - 0xad, - 0x27, - 0xdc, - 0xb1, - 0x5a, - }, - { - 0x69, - 0x7f, - 0x5c, - 0x9a, - 0x90, - 0x32, - 0x4e, - 0xd4, - }, - { - 0x49, - 0x5c, - 0x0f, - 0x99, - 0x55, - 0x57, - 0xdc, - 0x38, - }, - { - 0x94, - 0x27, - 0x20, - 0x2a, - 0x3c, - 0x29, - 0xf9, - 0x4d, - }, - { - 0xa9, - 0xea, - 0xa8, - 0xc0, - 0x4b, - 0xa9, - 0x3e, - 0x3e, - }, - { - 0xee, - 0xa4, - 0xc1, - 0x73, - 0x7d, - 0x01, - 0x12, - 0x18, - }, - { - 0x91, - 0x2d, - 0x56, - 0x8f, - 0xd8, - 0xf6, - 0x5a, - 0x49, - }, - { - 0x56, - 0x91, - 0x95, - 0x96, - 0xb0, - 0xff, - 0x5c, - 0x97, - }, - { - 0x02, - 0x44, - 0x5a, - 0x79, - 0x98, - 0xf5, - 0x50, - 0xe1, - }, - { - 0x86, - 0xec, - 0x46, - 0x6c, - 0xe7, - 0x1d, - 0x1f, - 0xb2, - }, - { - 0x35, - 0x95, - 0x69, - 0xe7, - 0xd2, - 0x89, - 0xe3, - 0xbc, - }, - { - 0x87, - 0x1b, - 0x05, - 0xca, - 0x62, - 0xbb, - 0x7c, - 0x96, - }, - { - 0xa1, - 0xa4, - 0x92, - 0xf9, - 0x42, - 0xf1, - 0x5f, - 0x1d, - }, - { - 0x12, - 0xec, - 0x26, - 0x7f, - 0xf6, - 0x09, - 0x5b, - 0x6e, - }, - { - 0x5d, - 0x1b, - 0x5e, - 0xa1, - 0xb2, - 0x31, - 0xd8, - 0x9d, - }, - { - 0xd8, - 0xcf, - 0xb4, - 0x45, - 0x3f, - 0x92, - 0xee, - 0x54, - }, - { - 0xd6, - 0x76, - 0x28, - 0x90, - 0xbf, - 0x26, - 0xe4, - 0x60, - }, - { - 0x31, - 0x35, - 0x63, - 0xa4, - 0xb7, - 0xed, - 0x5c, - 0xf3, - }, - { - 0xf9, - 0x0b, - 0x3a, - 0xb5, - 0x72, - 0xd4, - 0x66, - 0x93, - }, - { - 0x2e, - 0xa6, - 0x3c, - 0x71, - 0xbf, - 0x32, - 0x60, - 0x87, - }, -}; -- cgit v1.2.3