| @@ -58,7 +58,7 @@ PROJECT_LOGO = | |||||
| # entered, it will be relative to the location where doxygen was started. If | # entered, it will be relative to the location where doxygen was started. If | ||||
| # left blank the current directory will be used. | # left blank the current directory will be used. | ||||
| OUTPUT_DIRECTORY = doc | |||||
| OUTPUT_DIRECTORY = build/doc | |||||
| # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub- | # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub- | ||||
| # directories (in 2 levels) under the output directory of each output format and | # directories (in 2 levels) under the output directory of each output format and | ||||
| @@ -5,6 +5,20 @@ | |||||
| UNAME := $(shell uname) | UNAME := $(shell uname) | ||||
| MACHINE := $(shell uname -m) | MACHINE := $(shell uname -m) | ||||
| # Subdirectories for objects etc. | |||||
| # Many of them are mapped to build/obj right now, but could be split later. | |||||
| # The non-build/obj directories are the public interface. | |||||
| BUILD_ASM = build/obj | |||||
| BUILD_OBJ = build/obj | |||||
| BUILD_C = build/obj | |||||
| BUILD_PY = build/obj | |||||
| BUILD_LIB = build/lib | |||||
| BUILD_INC = build/include | |||||
| BUILD_BIN = build/bin | |||||
| BUILD_IBIN = build/obj/bin | |||||
| BATBASE=ed448goldilocks_decaf_bats_$(TODAY) | |||||
| BATNAME=build/$(BATBASE) | |||||
| ifeq ($(UNAME),Darwin) | ifeq ($(UNAME),Darwin) | ||||
| CC = clang | CC = clang | ||||
| CXX = clang++ | CXX = clang++ | ||||
| @@ -29,9 +43,8 @@ FIELD ?= p25519 | |||||
| WARNFLAGS = -pedantic -Wall -Wextra -Werror -Wunreachable-code \ | WARNFLAGS = -pedantic -Wall -Wextra -Werror -Wunreachable-code \ | ||||
| -Wmissing-declarations -Wunused-function -Wno-overlength-strings $(EXWARN) | -Wmissing-declarations -Wunused-function -Wno-overlength-strings $(EXWARN) | ||||
| INCFLAGS = -Isrc/include -Iinclude -Isrc/$(FIELD) -Isrc/$(FIELD)/$(ARCH) | |||||
| INCFLAGS = -Isrc/include -Isrc/public_include -Isrc/$(FIELD) -Isrc/$(FIELD)/$(ARCH) | |||||
| LANGFLAGS = -std=c99 -fno-strict-aliasing | LANGFLAGS = -std=c99 -fno-strict-aliasing | ||||
| LANGXXFLAGS = -fno-strict-aliasing | LANGXXFLAGS = -fno-strict-aliasing | ||||
| GENFLAGS = -ffunction-sections -fdata-sections -fvisibility=hidden -fomit-frame-pointer -fPIC | GENFLAGS = -ffunction-sections -fdata-sections -fvisibility=hidden -fomit-frame-pointer -fPIC | ||||
| @@ -55,136 +68,143 @@ ifeq ($(CC),clang) | |||||
| WARNFLAGS += -Wgcc-compat | WARNFLAGS += -Wgcc-compat | ||||
| endif | endif | ||||
| SAGE ?= sage | |||||
| SAGES= $(shell ls test/*.sage) | |||||
| BUILDPYS= $(SAGES:test/%.sage=build/%.py) | |||||
| ARCHFLAGS += $(XARCHFLAGS) | ARCHFLAGS += $(XARCHFLAGS) | ||||
| CFLAGS = $(LANGFLAGS) $(WARNFLAGS) $(INCFLAGS) $(OFLAGS) $(ARCHFLAGS) $(GENFLAGS) $(XCFLAGS) | CFLAGS = $(LANGFLAGS) $(WARNFLAGS) $(INCFLAGS) $(OFLAGS) $(ARCHFLAGS) $(GENFLAGS) $(XCFLAGS) | ||||
| CXXFLAGS = $(LANGXXFLAGS) $(WARNFLAGS) $(INCFLAGS) $(OFLAGS) $(ARCHFLAGS) $(GENFLAGS) $(XCXXFLAGS) | CXXFLAGS = $(LANGXXFLAGS) $(WARNFLAGS) $(INCFLAGS) $(OFLAGS) $(ARCHFLAGS) $(GENFLAGS) $(XCXXFLAGS) | ||||
| LDFLAGS = $(ARCHFLAGS) $(XLDFLAGS) | LDFLAGS = $(ARCHFLAGS) $(XLDFLAGS) | ||||
| ASFLAGS = $(ARCHFLAGS) $(XASFLAGS) | ASFLAGS = $(ARCHFLAGS) $(XASFLAGS) | ||||
| .PHONY: clean all test bench todo doc lib bat sage sagetest | |||||
| .PRECIOUS: build/%.s | |||||
| SAGE ?= sage | |||||
| SAGES= $(shell ls test/*.sage) | |||||
| BUILDPYS= $(SAGES:test/%.sage=$(BUILD_PY)/%.py) | |||||
| HEADERS= Makefile $(shell find src include test -name "*.h") $(shell find . -name "*.hxx") build/timestamp | |||||
| .PHONY: clean all test bench todo doc lib bat sage sagetest | |||||
| .PRECIOUS: $(BUILD_ASM)/%.s | |||||
| HEADERS= Makefile $(shell find src test -name "*.h") $(shell find . -name "*.hxx") $(BUILD_OBJ)/timestamp | |||||
| DECAFCOMPONENTS= build/$(DECAF).o build/shake.o build/decaf_crypto.o \ | |||||
| build/$(FIELD).o build/f_arithmetic.o build/utils.o | |||||
| DECAFCOMPONENTS= $(BUILD_OBJ)/$(DECAF).o $(BUILD_OBJ)/shake.o $(BUILD_OBJ)/decaf_crypto.o \ | |||||
| $(BUILD_OBJ)/$(FIELD).o $(BUILD_OBJ)/f_arithmetic.o $(BUILD_OBJ)/utils.o | |||||
| ifeq ($(DECAF),decaf_fast) | ifeq ($(DECAF),decaf_fast) | ||||
| DECAFCOMPONENTS += build/decaf_tables.o | |||||
| DECAFCOMPONENTS += $(BUILD_OBJ)/decaf_tables.o | |||||
| endif | endif | ||||
| BENCHCOMPONENTS = build/bench.o build/shake.o | |||||
| BATBASE=ed448goldilocks_decaf_bats_$(TODAY) | |||||
| BATNAME=build/$(BATBASE) | |||||
| BENCHCOMPONENTS = $(BUILD_OBJ)/bench.o $(BUILD_OBJ)/shake.o | |||||
| all: lib build/test build/bench build/shakesum | |||||
| all: lib $(BUILD_IBIN)/test $(BUILD_IBIN)/bench $(BUILD_BIN)/shakesum | |||||
| scan: clean | scan: clean | ||||
| scan-build --use-analyzer=`which clang` \ | scan-build --use-analyzer=`which clang` \ | ||||
| -enable-checker deadcode -enable-checker llvm \ | -enable-checker deadcode -enable-checker llvm \ | ||||
| -enable-checker osx -enable-checker security -enable-checker unix \ | -enable-checker osx -enable-checker security -enable-checker unix \ | ||||
| make build/bench build/test all | |||||
| make all | |||||
| # The shakesum utility is in the public bin directory. | |||||
| $(BUILD_BIN)/shakesum: $(BUILD_OBJ)/shakesum.o $(BUILD_OBJ)/shake.o $(BUILD_OBJ)/utils.o | |||||
| $(LD) $(LDFLAGS) -o $@ $^ | |||||
| # The main decaf library, and its symlinks. | |||||
| lib: $(BUILD_LIB)/libdecaf.so | |||||
| build/test: build/test_decaf.o lib | |||||
| $(BUILD_LIB)/libdecaf.so: $(BUILD_LIB)/libdecaf.so.1 | |||||
| ln -sf `basename $^` $@ | |||||
| $(BUILD_LIB)/libdecaf.so.1: $(DECAFCOMPONENTS) | |||||
| rm -f $@ | |||||
| ifeq ($(UNAME),Darwin) | ifeq ($(UNAME),Darwin) | ||||
| $(LDXX) $(LDFLAGS) -o $@ $< -Lbuild -ldecaf | |||||
| libtool -macosx_version_min 10.6 -dynamic -dead_strip -lc -x -o $@ \ | |||||
| $(DECAFCOMPONENTS) | |||||
| else | else | ||||
| $(LDXX) $(LDFLAGS) -Wl,-rpath,`pwd`/build -o $@ $< -Lbuild -ldecaf | |||||
| $(LD) $(LDFLAGS) -shared -Wl,-soname,`basename $@` -Wl,--gc-sections -o $@ $(DECAFCOMPONENTS) | |||||
| strip --discard-all $@ | |||||
| endif | endif | ||||
| build/bench: build/bench_decaf.o lib | |||||
| # Internal test programs, which are not part of the final build/bin directory. | |||||
| $(BUILD_IBIN)/test: $(BUILD_OBJ)/test_decaf.o lib | |||||
| ifeq ($(UNAME),Darwin) | ifeq ($(UNAME),Darwin) | ||||
| $(LDXX) $(LDFLAGS) -o $@ $< -Lbuild -ldecaf | |||||
| $(LDXX) $(LDFLAGS) -o $@ $< -L$(BUILD_LIB) -ldecaf | |||||
| else | else | ||||
| $(LDXX) $(LDFLAGS) -Wl,-rpath,`pwd`/build -o $@ $< -Lbuild -ldecaf | |||||
| $(LDXX) $(LDFLAGS) -Wl,-rpath,`pwd`/$(BUILD_LIB) -o $@ $< -L$(BUILD_LIB) -ldecaf | |||||
| endif | endif | ||||
| build/shakesum: build/shakesum.o build/shake.o build/utils.o | |||||
| $(LD) $(LDFLAGS) -o $@ $^ | |||||
| lib: build/libdecaf.so | |||||
| build/libdecaf.so: $(DECAFCOMPONENTS) | |||||
| rm -f $@ | |||||
| $(BUILD_IBIN)/bench: $(BUILD_OBJ)/bench_decaf.o lib | |||||
| ifeq ($(UNAME),Darwin) | ifeq ($(UNAME),Darwin) | ||||
| libtool -macosx_version_min 10.6 -dynamic -dead_strip -lc -x -o $@ \ | |||||
| $(DECAFCOMPONENTS) | |||||
| $(LDXX) $(LDFLAGS) -o $@ $< -L$(BUILD_LIB) -ldecaf | |||||
| else | else | ||||
| $(LD) $(LDFLAGS) -shared -Wl,-soname,libdecaf.so.1 -Wl,--gc-sections -o $@ $(DECAFCOMPONENTS) | |||||
| strip --discard-all $@ | |||||
| ln -sf `basename $@` build/libdecaf.so.1 | |||||
| $(LDXX) $(LDFLAGS) -Wl,-rpath,`pwd`/$(BUILD_LIB) -o $@ $< -L$(BUILD_LIB) -ldecaf | |||||
| endif | endif | ||||
| build/timestamp: | |||||
| mkdir -p build | |||||
| # Create all the build subdirectories | |||||
| $(BUILD_OBJ)/timestamp: | |||||
| mkdir -p $(BUILD_ASM) $(BUILD_OBJ) $(BUILD_C) $(BUILD_PY) \ | |||||
| $(BUILD_LIB) $(BUILD_INC) $(BUILD_BIN) $(BUILD_IBIN) $(BUILD_INC)/decaf | |||||
| touch $@ | touch $@ | ||||
| build/%.o: build/%.s | |||||
| $(BUILD_OBJ)/%.o: $(BUILD_ASM)/%.s | |||||
| $(ASM) $(ASFLAGS) -c -o $@ $< | $(ASM) $(ASFLAGS) -c -o $@ $< | ||||
| build/decaf_gen_tables: build/decaf_gen_tables.o build/$(DECAF).o build/$(FIELD).o build/f_arithmetic.o build/utils.o | |||||
| $(BUILD_IBIN)/decaf_gen_tables: $(BUILD_OBJ)/decaf_gen_tables.o \ | |||||
| $(BUILD_OBJ)/$(DECAF).o $(BUILD_OBJ)/$(FIELD).o $(BUILD_OBJ)/f_arithmetic.o $(BUILD_OBJ)/utils.o | |||||
| $(LD) $(LDFLAGS) -o $@ $^ | $(LD) $(LDFLAGS) -o $@ $^ | ||||
| build/decaf_tables.c: build/decaf_gen_tables | |||||
| $(BUILD_C)/decaf_tables.c: $(BUILD_IBIN)/decaf_gen_tables | |||||
| ./$< > $@ | ./$< > $@ | ||||
| build/decaf_tables.s: build/decaf_tables.c $(HEADERS) | |||||
| $(BUILD_ASM)/decaf_tables.s: $(BUILD_C)/decaf_tables.c $(HEADERS) | |||||
| $(CC) $(CFLAGS) -S -c -o $@ $< | $(CC) $(CFLAGS) -S -c -o $@ $< | ||||
| build/%.s: src/%.c $(HEADERS) | |||||
| $(BUILD_ASM)/%.s: src/%.c $(HEADERS) | |||||
| $(CC) $(CFLAGS) -S -c -o $@ $< | $(CC) $(CFLAGS) -S -c -o $@ $< | ||||
| build/%.s: src/%.cxx $(HEADERS) | |||||
| $(BUILD_ASM)/%.s: src/%.cxx $(HEADERS) | |||||
| $(CXX) $(CXXFLAGS) -S -c -o $@ $< | $(CXX) $(CXXFLAGS) -S -c -o $@ $< | ||||
| build/%.s: test/%.c $(HEADERS) | |||||
| $(BUILD_ASM)/%.s: test/%.c $(HEADERS) | |||||
| $(CC) $(CFLAGS) -S -c -o $@ $< | $(CC) $(CFLAGS) -S -c -o $@ $< | ||||
| build/%.s: test/%.cxx $(HEADERS) | |||||
| $(BUILD_ASM)/%.s: test/%.cxx $(HEADERS) | |||||
| $(CXX) $(CXXFLAGS) -S -c -o $@ $< | $(CXX) $(CXXFLAGS) -S -c -o $@ $< | ||||
| build/%.s: src/$(FIELD)/$(ARCH)/%.c $(HEADERS) | |||||
| $(BUILD_ASM)/%.s: src/$(FIELD)/$(ARCH)/%.c $(HEADERS) | |||||
| $(CC) $(CFLAGS) -S -c -o $@ $< | $(CC) $(CFLAGS) -S -c -o $@ $< | ||||
| build/%.s: src/$(FIELD)/%.c $(HEADERS) | |||||
| $(BUILD_ASM)/%.s: src/$(FIELD)/%.c $(HEADERS) | |||||
| $(CC) $(CFLAGS) -S -c -o $@ $< | $(CC) $(CFLAGS) -S -c -o $@ $< | ||||
| # The sage test scripts | |||||
| sage: $(BUILDPYS) | sage: $(BUILDPYS) | ||||
| sagetest: sage lib | sagetest: sage lib | ||||
| LD_LIBRARY_PATH=build sage build/test_decaf.sage | |||||
| LD_LIBRARY_PATH=$(BUILD_LIB) sage $(BUILD_PY)/test_decaf.sage | |||||
| $(BUILDPYS): $(SAGES) build/timestamp | |||||
| cp -f $(SAGES) build/ | |||||
| $(SAGE) --preparse $(SAGES:test/%.sage=build/%.sage) | |||||
| $(BUILDPYS): $(SAGES) $(BUILD_OBJ)/timestamp | |||||
| cp -f $(SAGES) $(BUILD_PY)/ | |||||
| $(SAGE) --preparse $(SAGES:test/%.sage=$(BUILD_PY)/%.sage) | |||||
| # some sage versions compile to .sage.py | # some sage versions compile to .sage.py | ||||
| for f in $(SAGES:test/%.sage=build/%); do \ | |||||
| for f in $(SAGES:test/%.sage=$(BUILD_PY)/%); do \ | |||||
| if [ -e $$f.sage.py ]; then \ | if [ -e $$f.sage.py ]; then \ | ||||
| mv $$f.sage.py $$f.py; \ | mv $$f.sage.py $$f.py; \ | ||||
| fi; \ | fi; \ | ||||
| done | done | ||||
| doc/timestamp: | |||||
| mkdir -p doc | |||||
| # The documentation files | |||||
| $(BUILD_DOC)/timestamp: | |||||
| mkdir -p `dirname $@` | |||||
| touch $@ | touch $@ | ||||
| doc: Doxyfile doc/timestamp include/*.h src/*.c src/include/*.h src/$(FIELD)/$(ARCH)/*.c src/$(FIELD)/$(ARCH)/*.h | |||||
| doc: Doxyfile $(BUILD_OBJ)/timestamp $(HEADERS) src/*.c src/$(FIELD)/$(ARCH)/*.c src/$(FIELD)/$(ARCH)/*.h | |||||
| doxygen > /dev/null | doxygen > /dev/null | ||||
| # The eBATS benchmarking script | |||||
| bat: $(BATNAME) | bat: $(BATNAME) | ||||
| $(BATNAME): include/* src/* src/*/* test/batarch.map build/decaf_tables.c # TODO tables some other way | |||||
| $(BATNAME): include/* src/* src/*/* test/batarch.map $(BUILD_C)/decaf_tables.c # TODO tables some other way | |||||
| rm -fr $@ | rm -fr $@ | ||||
| for prim in dh sign; do \ | for prim in dh sign; do \ | ||||
| targ="$@/crypto_$$prim/ed448goldilocks_decaf"; \ | targ="$@/crypto_$$prim/ed448goldilocks_decaf"; \ | ||||
| (while read arch where; do \ | (while read arch where; do \ | ||||
| mkdir -p $$targ/`basename $$arch`; \ | mkdir -p $$targ/`basename $$arch`; \ | ||||
| cp include/*.h build/decaf_tables.c src/decaf_fast.c src/decaf_crypto.c src/shake.c src/include/*.h src/bat/$$prim.c src/p448/$$where/*.c src/p448/$$where/*.h src/p448/*.c src/p448/*.h $$targ/`basename $$arch`; \ | |||||
| cp include/*.h $(BUILD_C)/decaf_tables.c src/decaf_fast.c src/decaf_crypto.c src/shake.c src/include/*.h src/bat/$$prim.c src/p448/$$where/*.c src/p448/$$where/*.h src/p448/*.c src/p448/*.h $$targ/`basename $$arch`; \ | |||||
| cp src/bat/api_$$prim.h $$targ/`basename $$arch`/api.h; \ | cp src/bat/api_$$prim.h $$targ/`basename $$arch`/api.h; \ | ||||
| perl -p -i -e 's/SYSNAME/'`basename $(BATNAME)`_`basename $$arch`'/g' $$targ/`basename $$arch`/api.h; \ | perl -p -i -e 's/SYSNAME/'`basename $(BATNAME)`_`basename $$arch`'/g' $$targ/`basename $$arch`/api.h; \ | ||||
| perl -p -i -e 's/__TODAY__/'$(TODAY)'/g' $$targ/`basename $$arch`/api.h; \ | perl -p -i -e 's/__TODAY__/'$(TODAY)'/g' $$targ/`basename $$arch`/api.h; \ | ||||
| @@ -193,31 +213,31 @@ $(BATNAME): include/* src/* src/*/* test/batarch.map build/decaf_tables.c # TODO | |||||
| echo 'Mike Hamburg' > $$targ/designers; \ | echo 'Mike Hamburg' > $$targ/designers; \ | ||||
| echo 'Ed448-Goldilocks Decaf sign and dh' > $$targ/description; \ | echo 'Ed448-Goldilocks Decaf sign and dh' > $$targ/description; \ | ||||
| done | done | ||||
| (cd build && tar czf $(BATBASE).tgz $(BATBASE) ) | |||||
| (cd $(BATNAME)/.. && tar czf $(BATBASE).tgz $(BATBASE) ) | |||||
| # Finds todo items in .h and .c files | |||||
| todo:: | todo:: | ||||
| @(find * -name '*.h'; find * -name '*.c') | xargs egrep --color=auto -w \ | |||||
| @(find * -name '*.h' -or -name '*.c' -or -name '*.cxx' -or -name '*.hxx') | xargs egrep --color=auto -w \ | |||||
| 'HACK|TODO|FIXME|BUG|XXX|PERF|FUTURE|REMOVE|MAGIC' | 'HACK|TODO|FIXME|BUG|XXX|PERF|FUTURE|REMOVE|MAGIC' | ||||
| @echo '=============================' | @echo '=============================' | ||||
| @(for i in FIXME BUG XXX TODO HACK PERF FUTURE REMOVE MAGIC; do \ | @(for i in FIXME BUG XXX TODO HACK PERF FUTURE REMOVE MAGIC; do \ | ||||
| (find * -name '*.h'; find * -name '*.c') | xargs egrep -w $$i > /dev/null || continue; \ | |||||
| (find * -name '*.h' -or -name '*.c' -or -name '*.cxx' -or -name '*.hxx') | xargs egrep -w $$i > /dev/null || continue; \ | |||||
| /bin/echo -n $$i' ' | head -c 10; \ | /bin/echo -n $$i' ' | head -c 10; \ | ||||
| (find * -name '*.h'; find * -name '*.c') | xargs egrep -w $$i| wc -l; \ | |||||
| (find * -name '*.h' -or -name '*.c' -or -name '*.cxx' -or -name '*.hxx') | xargs egrep -w $$i| wc -l; \ | |||||
| done) | done) | ||||
| @echo '=============================' | @echo '=============================' | ||||
| @echo -n 'Total ' | @echo -n 'Total ' | ||||
| @(find * -name '*.h'; find * -name '*.c') | xargs egrep -w \ | |||||
| @(find * -name '*.h' -or -name '*.c' -or -name '*.cxx' -or -name '*.hxx') | xargs egrep -w \ | |||||
| 'HACK|TODO|FIXME|BUG|XXX|PERF|FUTURE|REMOVE|MAGIC' | wc -l | 'HACK|TODO|FIXME|BUG|XXX|PERF|FUTURE|REMOVE|MAGIC' | wc -l | ||||
| bench: build/bench | |||||
| bench: $(BUILD_IBIN)/bench | |||||
| ./$< | ./$< | ||||
| test: build/test | |||||
| build/test | |||||
| test: $(BUILD_IBIN)/test | |||||
| ./$< | |||||
| microbench: build/bench | |||||
| microbench: $(BUILD_IBIN)/bench | |||||
| ./$< --micro | ./$< --micro | ||||
| clean: | clean: | ||||
| rm -fr build doc $(BATNAME) | |||||
| rm -fr build $(BATNAME) | |||||
| @@ -9,7 +9,7 @@ | |||||
| */ | */ | ||||
| #define __STDC_WANT_LIB_EXT1__ 1 /* for memset_s */ | #define __STDC_WANT_LIB_EXT1__ 1 /* for memset_s */ | ||||
| #include "decaf.h" | |||||
| #include <decaf.h> | |||||
| #include <string.h> | #include <string.h> | ||||
| #include <assert.h> | #include <assert.h> | ||||
| @@ -8,7 +8,7 @@ | |||||
| * @brief Example Decaf cyrpto routines. | * @brief Example Decaf cyrpto routines. | ||||
| */ | */ | ||||
| #include "decaf_crypto.h" | |||||
| #include <decaf/crypto.h> | |||||
| #include <string.h> | #include <string.h> | ||||
| static const unsigned int DECAF_255_SCALAR_OVERKILL_BYTES = DECAF_255_SCALAR_BYTES + 8; | static const unsigned int DECAF_255_SCALAR_OVERKILL_BYTES = DECAF_255_SCALAR_BYTES + 8; | ||||
| @@ -10,7 +10,7 @@ | |||||
| #define _XOPEN_SOURCE 600 /* for posix_memalign */ | #define _XOPEN_SOURCE 600 /* for posix_memalign */ | ||||
| #define __STDC_WANT_LIB_EXT1__ 1 /* for memset_s */ | #define __STDC_WANT_LIB_EXT1__ 1 /* for memset_s */ | ||||
| #include "decaf.h" | |||||
| #include <decaf.h> | |||||
| #include <string.h> | #include <string.h> | ||||
| #include "field.h" | #include "field.h" | ||||
| #include "decaf_config.h" | #include "decaf_config.h" | ||||
| @@ -25,8 +25,8 @@ | |||||
| #include <stdint.h> | #include <stdint.h> | ||||
| #include <sys/types.h> | #include <sys/types.h> | ||||
| #include "decaf_255.h" | |||||
| #include "decaf_448.h" | |||||
| #include <decaf/decaf_255.h> | |||||
| #include <decaf/decaf_448.h> | |||||
| #endif /* __DECAF_H__ */ | #endif /* __DECAF_H__ */ | ||||
| @@ -2,7 +2,7 @@ | |||||
| #ifndef __DECAF_HXX__ | #ifndef __DECAF_HXX__ | ||||
| #define __DECAF_HXX__ 1 | #define __DECAF_HXX__ 1 | ||||
| #include "decaf_255.hxx" // MAGIC | |||||
| #include <decaf/decaf_255.hxx> // MAGIC | |||||
| #endif /* __DECAF_H__ */ | #endif /* __DECAF_H__ */ | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * @file decaf_common.h | |||||
| * @file decaf/common.h | |||||
| * @author Mike Hamburg | * @author Mike Hamburg | ||||
| * | * | ||||
| * @copyright | * @copyright | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * @file decaf_crypto.h | |||||
| * @file decaf/crypto.h | |||||
| * @copyright | * @copyright | ||||
| * Copyright (c) 2015 Cryptography Research, Inc. \n | * Copyright (c) 2015 Cryptography Research, Inc. \n | ||||
| * Released under the MIT License. See LICENSE.txt for license information. | * Released under the MIT License. See LICENSE.txt for license information. | ||||
| @@ -14,8 +14,8 @@ | |||||
| #ifndef __DECAF_CRYPTO_H__ | #ifndef __DECAF_CRYPTO_H__ | ||||
| #define __DECAF_CRYPTO_H__ 1 | #define __DECAF_CRYPTO_H__ 1 | ||||
| #include "decaf.h" | |||||
| #include "shake.h" | |||||
| #include <decaf.h> | |||||
| #include <decaf/shake.h> | |||||
| /** Number of bytes for a symmetric key (expanded to full key) */ | /** Number of bytes for a symmetric key (expanded to full key) */ | ||||
| #define DECAF_255_SYMMETRIC_KEY_BYTES 32 | #define DECAF_255_SYMMETRIC_KEY_BYTES 32 | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * @file decaf_255.h | |||||
| * @file decaf/decaf_255.h | |||||
| * @author Mike Hamburg | * @author Mike Hamburg | ||||
| * | * | ||||
| * @copyright | * @copyright | ||||
| @@ -11,7 +11,7 @@ | |||||
| #ifndef __DECAF_255_H__ | #ifndef __DECAF_255_H__ | ||||
| #define __DECAF_255_H__ 1 | #define __DECAF_255_H__ 1 | ||||
| #include "decaf_common.h" | |||||
| #include <decaf/common.h> | |||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||
| extern "C" { | extern "C" { | ||||
| @@ -467,7 +467,7 @@ void decaf_255_point_debugging_pscale ( | |||||
| * A factor of 2 due to the isogeny. | * A factor of 2 due to the isogeny. | ||||
| * A factor of 2 because we quotient out the 2-torsion. | * A factor of 2 because we quotient out the 2-torsion. | ||||
| * | * | ||||
| * This makes it about 8:1 overall. | |||||
| * This makes it about 8:1 overall, or 16:1 overall on curves with cofactor 8. | |||||
| * | * | ||||
| * Negating the input (mod q) results in the same point. Inverting the input | * Negating the input (mod q) results in the same point. Inverting the input | ||||
| * (mod q) results in the negative point. This is the same as Elligator. | * (mod q) results in the negative point. This is the same as Elligator. | ||||
| @@ -486,19 +486,36 @@ decaf_255_point_from_hash_nonuniform ( | |||||
| const unsigned char hashed_data[DECAF_255_SER_BYTES] | const unsigned char hashed_data[DECAF_255_SER_BYTES] | ||||
| ) API_VIS NONNULL2 NOINLINE; | ) API_VIS NONNULL2 NOINLINE; | ||||
| /** | |||||
| * @brief Indifferentiable hash function encoding to curve. | |||||
| * | |||||
| * Equivalent to calling decaf_255_point_from_hash_nonuniform twice and adding. | |||||
| * | |||||
| * @param [in] hashed_data Output of some hash function. | |||||
| * @param [out] pt The data hashed to the curve. | |||||
| */ | |||||
| void decaf_255_point_from_hash_uniform ( | |||||
| decaf_255_point_t pt, | |||||
| const unsigned char hashed_data[2*DECAF_255_SER_BYTES] | |||||
| ) API_VIS NONNULL2 NOINLINE; | |||||
| /** | /** | ||||
| * @brief Inverse of elligator-like hash to curve. | * @brief Inverse of elligator-like hash to curve. | ||||
| * | * | ||||
| * This function writes to the buffer, to make it so that | * This function writes to the buffer, to make it so that | ||||
| * decaf_255_point_from_hash_nonuniform(buffer) = pt if possible. | |||||
| * decaf_255_point_from_hash_nonuniform(buffer) = pt if | |||||
| * possible. Since there may be multiple preimages, the | |||||
| * "which" parameter chooses between them. To ensure uniform | |||||
| * inverse sampling, this function succeeds or fails | |||||
| * independently for different "which" values. | |||||
| * | * | ||||
| * @param [out] recovered_hash Encoded data. | * @param [out] recovered_hash Encoded data. | ||||
| * @param [in] pt The point to encode. | * @param [in] pt The point to encode. | ||||
| * @param [in] which A "hint" that indicates which inverse to return. | |||||
| * @param [in] which A value determining which inverse point | |||||
| * to return. | |||||
| * | * | ||||
| * @retval DECAF_SUCCESS The inverse succeeded. | * @retval DECAF_SUCCESS The inverse succeeded. | ||||
| * @retval DECAF_FAILURE The pt isn't the image of | |||||
| * decaf_255_point_from_hash_nonuniform with the given hint. | |||||
| * @retval DECAF_FAILURE The inverse failed. | |||||
| */ | */ | ||||
| decaf_bool_t | decaf_bool_t | ||||
| decaf_255_invert_elligator_nonuniform ( | decaf_255_invert_elligator_nonuniform ( | ||||
| @@ -508,19 +525,22 @@ decaf_255_invert_elligator_nonuniform ( | |||||
| ) API_VIS NONNULL2 NOINLINE WARN_UNUSED; | ) API_VIS NONNULL2 NOINLINE WARN_UNUSED; | ||||
| /** | /** | ||||
| * @brief Inverse of elligator-like hash to curve, uniform. | |||||
| * @brief Inverse of elligator-like hash to curve. | |||||
| * | * | ||||
| * This function modifies the first DECAF_255_SER_BYTES of the | |||||
| * buffer, to make it so that | |||||
| * decaf_255_point_from_hash_uniform(buffer) = pt if possible. | |||||
| * This function writes to the buffer, to make it so that | |||||
| * decaf_255_point_from_hash_uniform(buffer) = pt if | |||||
| * possible. Since there may be multiple preimages, the | |||||
| * "which" parameter chooses between them. To ensure uniform | |||||
| * inverse sampling, this function succeeds or fails | |||||
| * independently for different "which" values. | |||||
| * | * | ||||
| * @param [out] recovered_hash Encoded data. | * @param [out] recovered_hash Encoded data. | ||||
| * @param [in] pt The point to encode. | * @param [in] pt The point to encode. | ||||
| * @param [in] which A "hint" that indicates which inverse to return. | |||||
| * @param [in] which A value determining which inverse point | |||||
| * to return. | |||||
| * | * | ||||
| * @retval DECAF_SUCCESS The inverse succeeded. | * @retval DECAF_SUCCESS The inverse succeeded. | ||||
| * @retval DECAF_FAILURE The pt isn't the image of | |||||
| * decaf_255_point_from_hash_uniform with the given hint. | |||||
| * @retval DECAF_FAILURE The inverse failed. | |||||
| */ | */ | ||||
| decaf_bool_t | decaf_bool_t | ||||
| decaf_255_invert_elligator_uniform ( | decaf_255_invert_elligator_uniform ( | ||||
| @@ -529,19 +549,6 @@ decaf_255_invert_elligator_uniform ( | |||||
| uint16_t which | uint16_t which | ||||
| ) API_VIS NONNULL2 NOINLINE WARN_UNUSED; | ) API_VIS NONNULL2 NOINLINE WARN_UNUSED; | ||||
| /** | |||||
| * @brief Indifferentiable hash function encoding to curve. | |||||
| * | |||||
| * Equivalent to calling decaf_255_point_from_hash_nonuniform twice and adding. | |||||
| * | |||||
| * @param [in] hashed_data Output of some hash function. | |||||
| * @param [out] pt The data hashed to the curve. | |||||
| */ | |||||
| void decaf_255_point_from_hash_uniform ( | |||||
| decaf_255_point_t pt, | |||||
| const unsigned char hashed_data[2*DECAF_255_SER_BYTES] | |||||
| ) API_VIS NONNULL2 NOINLINE; | |||||
| /** | /** | ||||
| * @brief Overwrite scalar with zeros. | * @brief Overwrite scalar with zeros. | ||||
| */ | */ | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * @file decaf_255.hxx | |||||
| * @file decaf/decaf_255.hxx | |||||
| * @author Mike Hamburg | * @author Mike Hamburg | ||||
| * | * | ||||
| * @copyright | * @copyright | ||||
| @@ -27,8 +27,8 @@ | |||||
| #include <stdlib.h> | #include <stdlib.h> | ||||
| #include <string.h> /* for memcpy */ | #include <string.h> /* for memcpy */ | ||||
| #include "decaf.h" | |||||
| #include "secure_buffer.hxx" | |||||
| #include <decaf.h> | |||||
| #include <decaf/secure_buffer.hxx> | |||||
| #include <string> | #include <string> | ||||
| #include <sys/types.h> | #include <sys/types.h> | ||||
| #include <limits.h> | #include <limits.h> | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * @file decaf_448.h | |||||
| * @file decaf/decaf_448.h | |||||
| * @author Mike Hamburg | * @author Mike Hamburg | ||||
| * | * | ||||
| * @copyright | * @copyright | ||||
| @@ -11,7 +11,7 @@ | |||||
| #ifndef __DECAF_448_H__ | #ifndef __DECAF_448_H__ | ||||
| #define __DECAF_448_H__ 1 | #define __DECAF_448_H__ 1 | ||||
| #include "decaf_common.h" | |||||
| #include <decaf/common.h> | |||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||
| extern "C" { | extern "C" { | ||||
| @@ -22,9 +22,9 @@ extern "C" { | |||||
| #define DECAF_448_SCALAR_LIMBS (448/DECAF_WORD_BITS) | #define DECAF_448_SCALAR_LIMBS (448/DECAF_WORD_BITS) | ||||
| /** Galois field element internal structure */ | /** Galois field element internal structure */ | ||||
| typedef struct gf_s { | |||||
| typedef struct gf_448_s { | |||||
| decaf_word_t limb[DECAF_448_LIMBS]; | decaf_word_t limb[DECAF_448_LIMBS]; | ||||
| } __attribute__((aligned(32))) gf_s, gf[1]; | |||||
| } __attribute__((aligned(32))) gf_448_s, gf_448_t[1]; | |||||
| /** @endcond */ | /** @endcond */ | ||||
| /** Number of bytes in a serialized point. */ | /** Number of bytes in a serialized point. */ | ||||
| @@ -34,7 +34,7 @@ typedef struct gf_s { | |||||
| #define DECAF_448_SCALAR_BYTES 56 | #define DECAF_448_SCALAR_BYTES 56 | ||||
| /** Twisted Edwards (-1,d-1) extended homogeneous coordinates */ | /** Twisted Edwards (-1,d-1) extended homogeneous coordinates */ | ||||
| typedef struct decaf_448_point_s { /**@cond internal*/gf x,y,z,t;/**@endcond*/ } decaf_448_point_t[1]; | |||||
| typedef struct decaf_448_point_s { /**@cond internal*/gf_448_t x,y,z,t;/**@endcond*/ } decaf_448_point_t[1]; | |||||
| /** Precomputed table based on a point. Can be trivial implementation. */ | /** Precomputed table based on a point. Can be trivial implementation. */ | ||||
| struct decaf_448_precomputed_s; | struct decaf_448_precomputed_s; | ||||
| @@ -451,7 +451,7 @@ void decaf_448_point_debugging_torque ( | |||||
| * A factor of 2 due to the isogeny. | * A factor of 2 due to the isogeny. | ||||
| * A factor of 2 because we quotient out the 2-torsion. | * A factor of 2 because we quotient out the 2-torsion. | ||||
| * | * | ||||
| * This makes it about 8:1 overall. | |||||
| * This makes it about 8:1 overall, or 16:1 overall on curves with cofactor 8. | |||||
| * | * | ||||
| * Negating the input (mod q) results in the same point. Inverting the input | * Negating the input (mod q) results in the same point. Inverting the input | ||||
| * (mod q) results in the negative point. This is the same as Elligator. | * (mod q) results in the negative point. This is the same as Elligator. | ||||
| @@ -463,77 +463,76 @@ void decaf_448_point_debugging_torque ( | |||||
| * | * | ||||
| * @param [in] hashed_data Output of some hash function. | * @param [in] hashed_data Output of some hash function. | ||||
| * @param [out] pt The data hashed to the curve. | * @param [out] pt The data hashed to the curve. | ||||
| * @return A "hint" value which can be used to help invert the encoding. | |||||
| */ | */ | ||||
| unsigned char | |||||
| void | |||||
| decaf_448_point_from_hash_nonuniform ( | decaf_448_point_from_hash_nonuniform ( | ||||
| decaf_448_point_t pt, | decaf_448_point_t pt, | ||||
| const unsigned char hashed_data[DECAF_448_SER_BYTES] | const unsigned char hashed_data[DECAF_448_SER_BYTES] | ||||
| ) API_VIS NONNULL2 NOINLINE; | ) API_VIS NONNULL2 NOINLINE; | ||||
| /** | |||||
| * @brief Indifferentiable hash function encoding to curve. | |||||
| * | |||||
| * Equivalent to calling decaf_448_point_from_hash_nonuniform twice and adding. | |||||
| * | |||||
| * @param [in] hashed_data Output of some hash function. | |||||
| * @param [out] pt The data hashed to the curve. | |||||
| */ | |||||
| void decaf_448_point_from_hash_uniform ( | |||||
| decaf_448_point_t pt, | |||||
| const unsigned char hashed_data[2*DECAF_448_SER_BYTES] | |||||
| ) API_VIS NONNULL2 NOINLINE; | |||||
| /** | /** | ||||
| * @brief Inverse of elligator-like hash to curve. | * @brief Inverse of elligator-like hash to curve. | ||||
| * | * | ||||
| * This function writes to the buffer, to make it so that | * This function writes to the buffer, to make it so that | ||||
| * decaf_448_point_from_hash_nonuniform(buffer) = pt,hint | |||||
| * if possible. | |||||
| * decaf_448_point_from_hash_nonuniform(buffer) = pt if | |||||
| * possible. Since there may be multiple preimages, the | |||||
| * "which" parameter chooses between them. To ensure uniform | |||||
| * inverse sampling, this function succeeds or fails | |||||
| * independently for different "which" values. | |||||
| * | * | ||||
| * @param [out] recovered_hash Encoded data. | * @param [out] recovered_hash Encoded data. | ||||
| * @param [in] pt The point to encode. | * @param [in] pt The point to encode. | ||||
| * @param [in] hint The hint value returned from | |||||
| * decaf_448_point_from_hash_nonuniform. | |||||
| * @param [in] which A value determining which inverse point | |||||
| * to return. | |||||
| * | * | ||||
| * @retval DECAF_SUCCESS The inverse succeeded. | * @retval DECAF_SUCCESS The inverse succeeded. | ||||
| * @retval DECAF_FAILURE The pt isn't the image of | |||||
| * decaf_448_point_from_hash_nonuniform with the given hint. | |||||
| * @retval DECAF_FAILURE The inverse failed. | |||||
| */ | */ | ||||
| decaf_bool_t | decaf_bool_t | ||||
| decaf_448_invert_elligator_nonuniform ( | decaf_448_invert_elligator_nonuniform ( | ||||
| unsigned char recovered_hash[DECAF_448_SER_BYTES], | unsigned char recovered_hash[DECAF_448_SER_BYTES], | ||||
| const decaf_448_point_t pt, | const decaf_448_point_t pt, | ||||
| unsigned char hint | |||||
| uint16_t which | |||||
| ) API_VIS NONNULL2 NOINLINE WARN_UNUSED; | ) API_VIS NONNULL2 NOINLINE WARN_UNUSED; | ||||
| /** | /** | ||||
| * @brief Inverse of elligator-like hash to curve, uniform. | |||||
| * @brief Inverse of elligator-like hash to curve. | |||||
| * | * | ||||
| * This function modifies the first DECAF_448_SER_BYTES of the | |||||
| * buffer, to make it so that | |||||
| * decaf_448_point_from_hash_uniform(buffer) = pt,hint | |||||
| * if possible. | |||||
| * This function writes to the buffer, to make it so that | |||||
| * decaf_448_point_from_hash_uniform(buffer) = pt if | |||||
| * possible. Since there may be multiple preimages, the | |||||
| * "which" parameter chooses between them. To ensure uniform | |||||
| * inverse sampling, this function succeeds or fails | |||||
| * independently for different "which" values. | |||||
| * | * | ||||
| * @param [out] recovered_hash Encoded data. | * @param [out] recovered_hash Encoded data. | ||||
| * @param [in] pt The point to encode. | * @param [in] pt The point to encode. | ||||
| * @param [in] hint The hint value returned from | |||||
| * decaf_448_point_from_hash_nonuniform. | |||||
| * @param [in] which A value determining which inverse point | |||||
| * to return. | |||||
| * | * | ||||
| * @retval DECAF_SUCCESS The inverse succeeded. | * @retval DECAF_SUCCESS The inverse succeeded. | ||||
| * @retval DECAF_FAILURE The pt isn't the image of | |||||
| * decaf_448_point_from_hash_uniform with the given hint. | |||||
| * | |||||
| * @warning The hinting system is subject to change, especially in corner cases. | |||||
| * @retval DECAF_FAILURE The inverse failed. | |||||
| */ | */ | ||||
| decaf_bool_t | decaf_bool_t | ||||
| decaf_448_invert_elligator_uniform ( | decaf_448_invert_elligator_uniform ( | ||||
| unsigned char recovered_hash[2*DECAF_448_SER_BYTES], | unsigned char recovered_hash[2*DECAF_448_SER_BYTES], | ||||
| const decaf_448_point_t pt, | const decaf_448_point_t pt, | ||||
| unsigned char hint | |||||
| uint16_t which | |||||
| ) API_VIS NONNULL2 NOINLINE WARN_UNUSED; | ) API_VIS NONNULL2 NOINLINE WARN_UNUSED; | ||||
| /** | |||||
| * @brief Indifferentiable hash function encoding to curve. | |||||
| * | |||||
| * Equivalent to calling decaf_448_point_from_hash_nonuniform twice and adding. | |||||
| * | |||||
| * @param [in] hashed_data Output of some hash function. | |||||
| * @param [out] pt The data hashed to the curve. | |||||
| * @return A "hint" value which can be used to help invert the encoding. | |||||
| */ | |||||
| unsigned char decaf_448_point_from_hash_uniform ( | |||||
| decaf_448_point_t pt, | |||||
| const unsigned char hashed_data[2*DECAF_448_SER_BYTES] | |||||
| ) API_VIS NONNULL2 NOINLINE; | |||||
| /** | /** | ||||
| * @brief Overwrite scalar with zeros. | * @brief Overwrite scalar with zeros. | ||||
| */ | */ | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * @file decaf_448.hxx | |||||
| * @file decaf/decaf_448.hxx | |||||
| * @author Mike Hamburg | * @author Mike Hamburg | ||||
| * | * | ||||
| * @copyright | * @copyright | ||||
| @@ -27,7 +27,7 @@ | |||||
| #include <stdlib.h> | #include <stdlib.h> | ||||
| #include <string.h> /* for memcpy */ | #include <string.h> /* for memcpy */ | ||||
| #include "decaf.h" | |||||
| #include <decaf.h> | |||||
| #include <string> | #include <string> | ||||
| #include <sys/types.h> | #include <sys/types.h> | ||||
| #include <limits.h> | #include <limits.h> | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * @file secure_buffer.hxx | |||||
| * @file decaf/secure_buffer.hxx | |||||
| * @author Mike Hamburg | * @author Mike Hamburg | ||||
| * | * | ||||
| * @copyright | * @copyright | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * @file shake.h | |||||
| * @file decaf/shake.h | |||||
| * @copyright | * @copyright | ||||
| * Based on CC0 code by David Leon Gil, 2015 \n | * Based on CC0 code by David Leon Gil, 2015 \n | ||||
| * Copyright (c) 2015 Cryptography Research, Inc. \n | * Copyright (c) 2015 Cryptography Research, Inc. \n | ||||
| @@ -15,7 +15,7 @@ | |||||
| #include <stdint.h> | #include <stdint.h> | ||||
| #include <sys/types.h> | #include <sys/types.h> | ||||
| #include "decaf_common.h" | |||||
| #include <decaf/common.h> | |||||
| /** @cond internal */ | /** @cond internal */ | ||||
| #define API_VIS __attribute__((visibility("default"))) | #define API_VIS __attribute__((visibility("default"))) | ||||
| @@ -1,5 +1,5 @@ | |||||
| /** | /** | ||||
| * @file shake.hxx | |||||
| * @file decaf/shake.hxx | |||||
| * @copyright | * @copyright | ||||
| * Based on CC0 code by David Leon Gil, 2015 \n | * Based on CC0 code by David Leon Gil, 2015 \n | ||||
| * Copyright (c) 2015 Cryptography Research, Inc. \n | * Copyright (c) 2015 Cryptography Research, Inc. \n | ||||
| @@ -12,7 +12,7 @@ | |||||
| #ifndef __SHAKE_HXX__ | #ifndef __SHAKE_HXX__ | ||||
| #define __SHAKE_HXX__ | #define __SHAKE_HXX__ | ||||
| #include "shake.h" | |||||
| #include <decaf/shake.h> | |||||
| #include <string> | #include <string> | ||||
| #include <sys/types.h> | #include <sys/types.h> | ||||
| @@ -67,7 +67,7 @@ typedef struct keccak_sponge_s { | |||||
| } keccak_sponge_t[1]; | } keccak_sponge_t[1]; | ||||
| #define INTERNAL_SPONGE_STRUCT 1 | #define INTERNAL_SPONGE_STRUCT 1 | ||||
| #include "shake.h" | |||||
| #include <decaf/shake.h> | |||||
| #define FLAG_ABSORBING 'A' | #define FLAG_ABSORBING 'A' | ||||
| #define FLAG_SQUEEZING 'Z' | #define FLAG_SQUEEZING 'Z' | ||||
| @@ -8,7 +8,7 @@ | |||||
| * @brief Decaf utility functions. | * @brief Decaf utility functions. | ||||
| */ | */ | ||||
| #include "decaf_common.h" | |||||
| #include <decaf/common.h> | |||||
| void decaf_bzero ( | void decaf_bzero ( | ||||
| void *s, | void *s, | ||||
| @@ -9,10 +9,9 @@ | |||||
| * @brief C++ benchmarks, because that's easier. | * @brief C++ benchmarks, because that's easier. | ||||
| */ | */ | ||||
| #include "decaf.hxx" | |||||
| #include "shake.hxx" | |||||
| #include "shake.h" | |||||
| #include "decaf_crypto.h" | |||||
| #include <decaf.hxx> | |||||
| #include <decaf/shake.hxx> | |||||
| #include <decaf/crypto.h> | |||||
| #include <stdio.h> | #include <stdio.h> | ||||
| #include <sys/time.h> | #include <sys/time.h> | ||||
| #include <assert.h> | #include <assert.h> | ||||
| @@ -11,7 +11,7 @@ | |||||
| #include <stdio.h> | #include <stdio.h> | ||||
| #include <unistd.h> | #include <unistd.h> | ||||
| #include <string.h> | #include <string.h> | ||||
| #include "shake.h" | |||||
| #include <decaf/shake.h> | |||||
| int main(int argc, char **argv) { | int main(int argc, char **argv) { | ||||
| (void)argc; (void)argv; | (void)argc; (void)argv; | ||||
| @@ -9,9 +9,9 @@ | |||||
| * @brief C++ tests, because that's easier. | * @brief C++ tests, because that's easier. | ||||
| */ | */ | ||||
| #include "decaf.hxx" | |||||
| #include "shake.hxx" | |||||
| #include "decaf_crypto.h" | |||||
| #include <decaf.hxx> | |||||
| #include <decaf/shake.hxx> | |||||
| #include <decaf/crypto.h> | |||||
| #include <stdio.h> | #include <stdio.h> | ||||