closer to how DJB expects them.master
| @@ -30,6 +30,8 @@ LANGFLAGS = -std=c99 -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 | ||||
| OFLAGS = -O3 | OFLAGS = -O3 | ||||
| TODAY = $(shell date "+%Y-%m-%d") | |||||
| ifneq (,$(findstring arm,$(MACHINE))) | ifneq (,$(findstring arm,$(MACHINE))) | ||||
| ifneq (,$(findstring neon,$(ARCH))) | ifneq (,$(findstring neon,$(ARCH))) | ||||
| ARCHFLAGS += -mfpu=neon | ARCHFLAGS += -mfpu=neon | ||||
| @@ -68,7 +70,8 @@ TESTCOMPONENTS=build/test.o build/test_scalarmul.o build/test_sha512.o \ | |||||
| BENCHCOMPONENTS=build/bench.o | BENCHCOMPONENTS=build/bench.o | ||||
| BATNAME=build/ed448goldilocks | |||||
| BATBASE=ed448goldilocks-bats-$(TODAY) | |||||
| BATNAME=build/$(BATBASE) | |||||
| all: lib build/test build/bench | all: lib build/test build/bench | ||||
| @@ -124,15 +127,21 @@ bat: $(BATNAME) | |||||
| $(BATNAME): include/* src/* src/*/* test/batarch.map | $(BATNAME): include/* src/* src/*/* test/batarch.map | ||||
| rm -fr $@ | rm -fr $@ | ||||
| (while read arch where; do \ | |||||
| mkdir -p $@/`basename $$arch`; \ | |||||
| cp include/*.h src/*.c src/include/*.h src/$$where/*.c src/$$where/*.h $@/`basename $$arch`; \ | |||||
| perl -p -i -e 's/.*endif.*GOLDILOCKS_CONFIG_H/#define SUPERCOP_WONT_LET_ME_OPEN_FILES 1\n\n$$&/' $@/`basename $$arch`/config.h; \ | |||||
| perl -p -i -e 's/SYSNAME/'`basename $(BATNAME)`_`basename $$arch`'/g' $@/`basename $$arch`/api.h; \ | |||||
| done \ | |||||
| ) < test/batarch.map | |||||
| echo 'Mike Hamburg' > $@/designers | |||||
| echo 'Ed448-Goldilocks sign and dh' > $@/description | |||||
| for prim in dh sign; do \ | |||||
| targ="$@/crypto_$$prim/ed448goldilocks"; \ | |||||
| (while read arch where; do \ | |||||
| mkdir -p $$targ/`basename $$arch`; \ | |||||
| cp include/*.h src/*.c src/include/*.h src/bat/$$prim.c src/$$where/*.c src/$$where/*.h $$targ/`basename $$arch`; \ | |||||
| cp src/bat/api_$$prim.h $$targ/`basename $$arch`/api.h; \ | |||||
| perl -p -i -e 's/.*endif.*GOLDILOCKS_CONFIG_H/#define SUPERCOP_WONT_LET_ME_OPEN_FILES 1\n\n$$&/' $$targ/`basename $$arch`/config.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; \ | |||||
| done \ | |||||
| ) < test/batarch.map; \ | |||||
| echo 'Mike Hamburg' > $$targ/designers; \ | |||||
| echo 'Ed448-Goldilocks sign and dh' > $$targ/description; \ | |||||
| done | |||||
| (cd build && tar czf $(BATBASE).tgz $(BATBASE) ) | |||||
| todo:: | todo:: | ||||
| @@ -0,0 +1,24 @@ | |||||
| /** | |||||
| * @file sizes.h | |||||
| * @copyright | |||||
| * Copyright (c) 2014 Cryptography Research, Inc. \n | |||||
| * Released under the MIT License. See LICENSE.txt for license information. | |||||
| * @author Mike Hamburg | |||||
| * @brief BATMAN / SUPERCOP glue for benchmarking. | |||||
| */ | |||||
| #include <string.h> | |||||
| #include "goldilocks.h" | |||||
| #define PUBLICKEY_BYTES GOLDI_PUBLIC_KEY_BYTES | |||||
| #define SECRETKEY_BYTES GOLDI_PRIVATE_KEY_BYTES | |||||
| #define SHAREDSECRET_BYTES GOLDI_SHARED_SECRET_BYTES | |||||
| #define CRYPTO_PUBLICKEYBYTES PUBLICKEY_BYTES | |||||
| #define CRYPTO_SECRETKEYBYTES SECRETKEY_BYTES | |||||
| #define CRYPTO_BYTES SHAREDSECRET_BYTES | |||||
| #define PRIVATEKEY_BYTES SECRETKEY_BYTES | |||||
| #define CRYPTO_VERSION "__TODAY__" | |||||
| #define CRYPTO_DETERMINISTIC 1 | |||||
| @@ -0,0 +1,24 @@ | |||||
| /** | |||||
| * @file sizes.h | |||||
| * @copyright | |||||
| * Copyright (c) 2014 Cryptography Research, Inc. \n | |||||
| * Released under the MIT License. See LICENSE.txt for license information. | |||||
| * @author Mike Hamburg | |||||
| * @brief BATMAN / SUPERCOP glue for benchmarking. | |||||
| */ | |||||
| #include <string.h> | |||||
| #include "goldilocks.h" | |||||
| #define PUBLICKEY_BYTES GOLDI_PUBLIC_KEY_BYTES | |||||
| #define SECRETKEY_BYTES GOLDI_PRIVATE_KEY_BYTES | |||||
| #define SIGNATURE_BYTES GOLDI_SIGNATURE_BYTES | |||||
| #define CRYPTO_PUBLICKEYBYTES PUBLICKEY_BYTES | |||||
| #define CRYPTO_SECRETKEYBYTES SECRETKEY_BYTES | |||||
| #define CRYPTO_BYTES SIGNATURE_BYTES | |||||
| #define PRIVATEKEY_BYTES SECRETKEY_BYTES | |||||
| #define CRYPTO_VERSION "__TODAY__" | |||||
| #define CRYPTO_DETERMINISTIC 1 | |||||
| @@ -0,0 +1,40 @@ | |||||
| /** | |||||
| * @file sizes.h | |||||
| * @copyright | |||||
| * Copyright (c) 2014 Cryptography Research, Inc. \n | |||||
| * Released under the MIT License. See LICENSE.txt for license information. | |||||
| * @author Mike Hamburg | |||||
| * @brief BATMAN / SUPERCOP glue for benchmarking. | |||||
| */ | |||||
| #include <string.h> | |||||
| #include <stdlib.h> | |||||
| #include "api.h" | |||||
| #include "crypto_dh.h" | |||||
| int crypto_dh_keypair ( | |||||
| unsigned char pk[SECRETKEY_BYTES], | |||||
| unsigned char sk[PUBLICKEY_BYTES] | |||||
| ) { | |||||
| int ret; | |||||
| ret = goldilocks_init(); | |||||
| if (ret && ret != GOLDI_EALREADYINIT) | |||||
| return ret; | |||||
| if ((ret = goldilocks_keygen( | |||||
| (struct goldilocks_private_key_t *)sk, | |||||
| (struct goldilocks_public_key_t *)pk | |||||
| ))) abort(); | |||||
| return ret; | |||||
| } | |||||
| int crypto_dh ( | |||||
| unsigned char s[SHAREDSECRET_BYTES], | |||||
| const unsigned char pk[PUBLICKEY_BYTES], | |||||
| const unsigned char sk[SECRETKEY_BYTES] | |||||
| ) { | |||||
| return goldilocks_shared_secret ( | |||||
| s, | |||||
| (const struct goldilocks_private_key_t *)sk, | |||||
| (const struct goldilocks_public_key_t *)pk | |||||
| ); | |||||
| } | |||||
| @@ -0,0 +1,66 @@ | |||||
| /** | |||||
| * @file sizes.h | |||||
| * @copyright | |||||
| * Copyright (c) 2014 Cryptography Research, Inc. \n | |||||
| * Released under the MIT License. See LICENSE.txt for license information. | |||||
| * @author Mike Hamburg | |||||
| * @brief BATMAN / SUPERCOP glue for benchmarking. | |||||
| */ | |||||
| #include <stdlib.h> | |||||
| #include <string.h> | |||||
| #include "api.h" | |||||
| #include "crypto_sign.h" | |||||
| int crypto_sign_keypair ( | |||||
| unsigned char pk[SECRETKEY_BYTES], | |||||
| unsigned char sk[PUBLICKEY_BYTES] | |||||
| ) { | |||||
| int ret; | |||||
| ret = goldilocks_init(); | |||||
| if (ret && ret != GOLDI_EALREADYINIT) | |||||
| return ret; | |||||
| if ((ret = goldilocks_keygen( | |||||
| (struct goldilocks_private_key_t *)sk, | |||||
| (struct goldilocks_public_key_t *)pk | |||||
| ))) abort(); | |||||
| return ret; | |||||
| } | |||||
| int crypto_sign ( | |||||
| unsigned char *sm, | |||||
| unsigned long long *smlen, | |||||
| const unsigned char *m, | |||||
| unsigned long long mlen, | |||||
| const unsigned char sk[SECRETKEY_BYTES] | |||||
| ) { | |||||
| unsigned char sig[SIGNATURE_BYTES]; | |||||
| int ret = goldilocks_sign( | |||||
| sig, m, mlen, | |||||
| (const struct goldilocks_private_key_t *)sk | |||||
| ); | |||||
| if (!ret) { | |||||
| memmove(sm + SIGNATURE_BYTES, m, mlen); | |||||
| memcpy(sm, sig, SIGNATURE_BYTES); | |||||
| *smlen = mlen + SIGNATURE_BYTES; | |||||
| } | |||||
| return ret ? -1 : 0; | |||||
| } | |||||
| int crypto_sign_open ( | |||||
| unsigned char *m, | |||||
| unsigned long long *mlen, | |||||
| const unsigned char *sm, | |||||
| unsigned long long smlen, | |||||
| const unsigned char pk[PUBLICKEY_BYTES] | |||||
| ) { | |||||
| int ret = goldilocks_verify( | |||||
| sm, sm + SIGNATURE_BYTES, smlen - SIGNATURE_BYTES, | |||||
| (const struct goldilocks_public_key_t *)pk | |||||
| ); | |||||
| if (!ret) { | |||||
| *mlen = smlen - SIGNATURE_BYTES; | |||||
| memmove(m, sm + SIGNATURE_BYTES, *mlen); | |||||
| } | |||||
| return ret ? -1 : 0; | |||||
| } | |||||
| @@ -1,118 +0,0 @@ | |||||
| /** | |||||
| * @file sizes.h | |||||
| * @copyright | |||||
| * Copyright (c) 2014 Cryptography Research, Inc. \n | |||||
| * Released under the MIT License. See LICENSE.txt for license information. | |||||
| * @author Mike Hamburg | |||||
| * @brief BATMAN / SUPERCOP glue for benchmarking. | |||||
| */ | |||||
| #include <string.h> | |||||
| #include <stdlib.h> | |||||
| #include "goldilocks.h" | |||||
| #define PUBLICKEY_BYTES GOLDI_PUBLIC_KEY_BYTES | |||||
| #define SECRETKEY_BYTES GOLDI_PRIVATE_KEY_BYTES | |||||
| #define SIGNATURE_BYTES GOLDI_SIGNATURE_BYTES | |||||
| #define SHAREDSECRET_BYTES GOLDI_SHARED_SECRET_BYTES | |||||
| #define crypto_dh_SYSNAME_PUBLICKEYBYTES PUBLICKEY_BYTES | |||||
| #define crypto_dh_SYSNAME_SECRETKEYBYTES SECRETKEY_BYTES | |||||
| #define PRIVATEKEY_BYTES SECRETKEY_BYTES | |||||
| #define crypto_dh_SYSNAME_BYTES SHAREDSECRET_BYTES | |||||
| #define crypto_dh_SYSNAME_IMPLEMENTATION "AMD64" | |||||
| #define crypto_dh_SYSNAME_VERSION "2014-07-11" | |||||
| #define crypto_sign_SYSNAME_PUBLICKEYBYTES PUBLICKEY_BYTES | |||||
| #define crypto_sign_SYSNAME_SECRETKEYBYTES SECRETKEY_BYTES | |||||
| #define crypto_sign_SYSNAME_IMPLEMENTATION "AMD64" | |||||
| #define crypto_sign_SYSNAME_VERSION "2014-07-11" | |||||
| #define crypto_sign_SYSNAME_BYTES SIGNATURE_BYTES | |||||
| #define crypto_dh_SYSNAME_keypair crypto_dh_keypair | |||||
| #define crypto_dh_SYSNAME crypto_dh | |||||
| #define crypto_sign_SYSNAME_keypair crypto_dh_keypair | |||||
| #define crypto_sign_SYSNAME crypto_sign | |||||
| #define crypto_sign_SYSNAME_open crypto_sign_open | |||||
| #define CRYPTO_DETERMINISTIC 1 | |||||
| /* | |||||
| #ifndef LOOPS | |||||
| #define LOOPS 512 | |||||
| #endif | |||||
| */ | |||||
| static inline int timingattacks(void) { return 0; } | |||||
| static inline int copyrightclaims(void) { return 0; } | |||||
| static inline int patentclaims(void) { | |||||
| /* Until the end of July 2014, point compression | |||||
| * is patented. */ | |||||
| return 20; | |||||
| } | |||||
| static inline int crypto_dh_keypair ( | |||||
| unsigned char pk[SECRETKEY_BYTES], | |||||
| unsigned char sk[PUBLICKEY_BYTES] | |||||
| ) { | |||||
| int ret; | |||||
| ret = goldilocks_init(); | |||||
| if (ret && ret != GOLDI_EALREADYINIT) | |||||
| return ret; | |||||
| if ((ret = goldilocks_keygen( | |||||
| (struct goldilocks_private_key_t *)sk, | |||||
| (struct goldilocks_public_key_t *)pk | |||||
| ))) abort(); | |||||
| return ret; | |||||
| } | |||||
| static inline int crypto_sign ( | |||||
| unsigned char *sm, | |||||
| unsigned long long *smlen, | |||||
| const unsigned char *m, | |||||
| unsigned long long mlen, | |||||
| const unsigned char sk[SECRETKEY_BYTES] | |||||
| ) { | |||||
| unsigned char sig[SIGNATURE_BYTES]; | |||||
| int ret = goldilocks_sign( | |||||
| sig, m, mlen, | |||||
| (const struct goldilocks_private_key_t *)sk | |||||
| ); | |||||
| if (!ret) { | |||||
| memmove(sm + SIGNATURE_BYTES, m, mlen); | |||||
| memcpy(sm, sig, SIGNATURE_BYTES); | |||||
| *smlen = mlen + SIGNATURE_BYTES; | |||||
| } | |||||
| return ret ? -1 : 0; | |||||
| } | |||||
| static inline int crypto_sign_open ( | |||||
| unsigned char *m, | |||||
| unsigned long long *mlen, | |||||
| const unsigned char *sm, | |||||
| unsigned long long smlen, | |||||
| const unsigned char pk[PUBLICKEY_BYTES] | |||||
| ) { | |||||
| int ret = goldilocks_verify( | |||||
| sm, sm + SIGNATURE_BYTES, smlen - SIGNATURE_BYTES, | |||||
| (const struct goldilocks_public_key_t *)pk | |||||
| ); | |||||
| if (!ret) { | |||||
| *mlen = smlen - SIGNATURE_BYTES; | |||||
| memmove(m, sm + SIGNATURE_BYTES, *mlen); | |||||
| } | |||||
| return ret ? -1 : 0; | |||||
| } | |||||
| static inline int crypto_dh ( | |||||
| unsigned char s[SHAREDSECRET_BYTES], | |||||
| const unsigned char pk[PUBLICKEY_BYTES], | |||||
| const unsigned char sk[SECRETKEY_BYTES] | |||||
| ) { | |||||
| return goldilocks_shared_secret ( | |||||
| s, | |||||
| (const struct goldilocks_private_key_t *)sk, | |||||
| (const struct goldilocks_public_key_t *)pk | |||||
| ); | |||||
| } | |||||