| @@ -75,7 +75,7 @@ endif | |||
| BENCHCOMPONENTS = build/bench.o build/shake.o | |||
| BATBASE=ed448goldilocks-decaf-bats-$(TODAY) | |||
| BATBASE=ed448goldilocks_decaf_bats_$(TODAY) | |||
| BATNAME=build/$(BATBASE) | |||
| all: lib build/test build/bench build/shakesum | |||
| @@ -159,13 +159,13 @@ doc: Doxyfile doc/timestamp include/*.h src/*.c src/include/*.h src/$(FIELD)/$(A | |||
| bat: $(BATNAME) | |||
| $(BATNAME): include/* src/* src/*/* test/batarch.map | |||
| $(BATNAME): include/* src/* src/*/* test/batarch.map build/decaf_tables.c # TODO tables some other way | |||
| rm -fr $@ | |||
| for prim in dh sign; do \ | |||
| targ="$@/crypto_$$prim/ed448goldilocks-decaf"; \ | |||
| targ="$@/crypto_$$prim/ed448goldilocks_decaf"; \ | |||
| (while read arch where; do \ | |||
| mkdir -p $$targ/`basename $$arch`; \ | |||
| cp include/*.h src/*.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/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; \ | |||
| 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; \ | |||
| @@ -8,7 +8,7 @@ | |||
| */ | |||
| #include <string.h> | |||
| #include "goldilocks.h" | |||
| #include "decaf_crypto.h" | |||
| #define PUBLICKEY_BYTES (sizeof(decaf_448_public_key_t)) | |||
| #define SECRETKEY_BYTES (sizeof(decaf_448_private_key_t)) | |||
| @@ -14,16 +14,13 @@ | |||
| #include "randombytes.h" | |||
| int crypto_dh_keypair ( | |||
| unsigned char pk[SECRETKEY_BYTES], | |||
| unsigned char sk[PUBLICKEY_BYTES] | |||
| unsigned char pk[PUBLICKEY_BYTES], | |||
| unsigned char sk[SECRETKEY_BYTES] | |||
| ) { | |||
| decaf_448_symmetric_key_t proto; | |||
| randombytes(proto,sizeof(proto)); | |||
| decaf_448_derive_private_key((decaf_448_private_key_s *)sk,proto); | |||
| decaf_448_private_to_public( | |||
| (decaf_448_public_key_s *)pk, | |||
| (decaf_448_private_key_s *)sk | |||
| ); | |||
| decaf_448_private_to_public(pk,(decaf_448_private_key_s *)sk); | |||
| return 0; | |||
| } | |||
| @@ -32,10 +29,7 @@ int crypto_dh ( | |||
| const unsigned char pk[PUBLICKEY_BYTES], | |||
| const unsigned char sk[SECRETKEY_BYTES] | |||
| ) { | |||
| return !decaf_448_shared_secret ( | |||
| s, | |||
| SHAREDSECRET_BYTES, | |||
| (const decaf_448_private_key_s *)sk, | |||
| (const decaf_448_public_key_s *)pk | |||
| return !decaf_448_shared_secret (s,SHAREDSECRET_BYTES, | |||
| (const decaf_448_private_key_s *)sk, pk | |||
| ); | |||
| } | |||
| @@ -13,14 +13,13 @@ | |||
| #include "crypto_sign.h" | |||
| int crypto_sign_keypair ( | |||
| unsigned char pk[SECRETKEY_BYTES], | |||
| unsigned char sk[PUBLICKEY_BYTES] | |||
| unsigned char pk[PUBLICKEY_BYTES], | |||
| unsigned char sk[SECRETKEY_BYTES] | |||
| ) { | |||
| decaf_448_symmetric_key_t proto; | |||
| randombytes(proto,sizeof(proto)); | |||
| decaf_448_derive_private_key((decaf_448_private_key_s *)sk,proto); | |||
| decaf_448_private_to_public( | |||
| (decaf_448_public_key_s *)pk, | |||
| decaf_448_private_to_public(pk, | |||
| (decaf_448_private_key_s *)sk | |||
| ); | |||
| return 0; | |||
| @@ -53,8 +52,7 @@ int crypto_sign_open ( | |||
| const unsigned char pk[PUBLICKEY_BYTES] | |||
| ) { | |||
| int ret = decaf_448_verify( | |||
| sm, | |||
| (const struct goldilocks_public_key_t *)pk, | |||
| sm,pk, | |||
| sm + SIGNATURE_BYTES, smlen - SIGNATURE_BYTES | |||
| ); | |||
| if (ret) { | |||
| @@ -11,6 +11,7 @@ | |||
| #include "decaf.hxx" | |||
| #include "shake.hxx" | |||
| #include "decaf_crypto.h" | |||
| #include <stdio.h> | |||
| @@ -196,11 +197,47 @@ static void test_ec() { | |||
| }; // template<decaf::GroupId GROUP> | |||
| static void test_decaf() { | |||
| Test test("Sample crypto"); | |||
| decaf::SpongeRng rng(decaf::Block("test_decaf")); | |||
| decaf_448_symmetric_key_t proto1,proto2; | |||
| decaf_448_private_key_t s1,s2; | |||
| decaf_448_public_key_t p1,p2; | |||
| decaf_448_signature_t sig; | |||
| unsigned char shared1[1234],shared2[1234]; | |||
| const char *message = "Hello, world!"; | |||
| for (int i=0; i<NTESTS && test.passing_now; i++) { | |||
| rng.read(decaf::TmpBuffer(proto1,sizeof(proto1))); | |||
| rng.read(decaf::TmpBuffer(proto2,sizeof(proto2))); | |||
| decaf_448_derive_private_key(s1,proto1); | |||
| decaf_448_private_to_public(p1,s1); | |||
| decaf_448_derive_private_key(s2,proto2); | |||
| decaf_448_private_to_public(p2,s2); | |||
| if (!decaf_448_shared_secret (shared1,sizeof(shared1),s1,p2)) { | |||
| test.fail(); printf("Fail ss12\n"); | |||
| } | |||
| if (!decaf_448_shared_secret (shared2,sizeof(shared2),s2,p1)) { | |||
| test.fail(); printf("Fail ss21\n"); | |||
| } | |||
| if (memcmp(shared1,shared2,sizeof(shared1))) { | |||
| test.fail(); printf("Fail ss21 == ss12\n"); | |||
| } | |||
| decaf_448_sign (sig,s1,(const unsigned char *)message,strlen(message)); | |||
| if (!decaf_448_verify (sig,p1,(const unsigned char *)message,strlen(message))) { | |||
| test.fail(); printf("Fail sig ver\n"); | |||
| } | |||
| } | |||
| } | |||
| int main(int argc, char **argv) { | |||
| (void) argc; (void) argv; | |||
| Tests<decaf::Ed448>::test_arithmetic(); | |||
| Tests<decaf::Ed448>::test_ec(); | |||
| test_decaf(); | |||
| if (passing) printf("Passed all tests.\n"); | |||