From: Loup Vaillant Date: Sat, 23 Jun 2018 13:42:18 +0000 (+0200) Subject: Added tests vectors for public key generation X-Git-Url: https://git.codecow.com/?a=commitdiff_plain;h=9f681437babfc7cd1bc56a1beff46250d9e36c6a;p=Monocypher.git Added tests vectors for public key generation Public key generation was up until now only tested implicitly. Test vectors can make us more confident. --- diff --git a/tests/gen/edDSA_pk.c b/tests/gen/edDSA_pk.c new file mode 100644 index 0000000..bfbba72 --- /dev/null +++ b/tests/gen/edDSA_pk.c @@ -0,0 +1,25 @@ +#include "utils.h" +#include "ed25519.h" + +void test(u8 sk[32]) +{ + u8 pk[32]; + ed25519_publickey(sk, pk); + + print_vector(sk, 32); + print_vector(pk, 32); +} + +int main(void) +{ + // random secret keys + FOR (msg_size, 0, 256) { + RANDOM_INPUT(sk, 32); + test(sk); + } + // zero secret key + u8 sk[32] = {0}; + test(sk); + + return 0; +} diff --git a/tests/gen/makefile b/tests/gen/makefile index 23bec37..07a322c 100644 --- a/tests/gen/makefile +++ b/tests/gen/makefile @@ -3,8 +3,10 @@ CFLAGS = -pedantic -Wall -Wextra .PHONY: all clean -VEC = chacha20.vec xchacha20.vec aead_ietf.vec poly1305.vec blake2b.vec \ - sha512.vec argon2i.vec edDSA.vec ed_25519.vec x25519.vec +VEC = chacha20.vec xchacha20.vec aead_ietf.vec poly1305.vec \ + blake2b.vec sha512.vec argon2i.vec \ + edDSA.vec edDSA_pk.vec ed_25519.vec \ + x25519.vec x25519_pk.vec VEC2 = $(patsubst %.vec, %.all.vec, $(VEC)) key_exchange.all.vec HEADERS = $(patsubst %.all.vec, %.h.vec, $(VEC2)) VECTORS = ../vectors.h @@ -45,12 +47,14 @@ vector_to_header.out: ../vector_to_header.c chacha20.all.vec : chacha20.vec ../vectors/chacha20 poly1305.all.vec : poly1305.vec ../vectors/poly1305 x25519.all.vec : x25519.vec ../vectors/x25519 +x25519_pk.all.vec : x25519_pk.vec xchacha20.all.vec : xchacha20.vec aead_ietf.all.vec : aead_ietf.vec blake2b.all.vec : blake2b.vec sha512.all.vec : sha512.vec argon2i.all.vec : argon2i.vec ../vectors/argon2i edDSA.all.vec : edDSA.vec +edDSA_pk.all.vec : edDSA_pk.vec ed_25519.all.vec : ed_25519.vec key_exchange.all.vec: ../vectors/key_exchange $(VEC2): diff --git a/tests/gen/x25519_pk.c b/tests/gen/x25519_pk.c new file mode 100644 index 0000000..cb9053a --- /dev/null +++ b/tests/gen/x25519_pk.c @@ -0,0 +1,28 @@ +#include +#include "utils.h" + +void test(u8 sk[32]) +{ + u8 pk[32]; + crypto_scalarmult_base(pk, sk); + + print_vector(sk, 32); + print_vector(pk, 32); + printf("\n"); +} + +int main(void) +{ + SODIUM_INIT; + + // random secret keys + FOR (i, 0, 50) { + RANDOM_INPUT(sk, 32); + test(sk); + } + // zero secret key + u8 sk[32] = {0}; + test(sk); + + return 0; +} diff --git a/tests/test.c b/tests/test.c index cc76c9b..302783b 100644 --- a/tests/test.c +++ b/tests/test.c @@ -176,6 +176,11 @@ static void x25519(const vector in[], vector *out) if (!not_zero && !report) printf("FAILURE: x25519 failed to report zero\n"); } +static void x25519_pk(const vector in[], vector *out) +{ + crypto_x25519_public_key(out->buf, in->buf); +} + static void key_exchange(const vector in[], vector *out) { const vector *secret_key = in; @@ -200,6 +205,11 @@ static void edDSA(const vector in[], vector *out) } } +static void edDSA_pk(const vector in[], vector *out) +{ + crypto_sign_public_key(out->buf, in->buf); +} + #ifdef ED25519_SHA512 static void (*ed_25519)(const vector[], vector*) = edDSA; #endif @@ -804,11 +814,13 @@ int main(void) status |= TEST(sha512 , 1); status |= TEST(argon2i , 6); status |= TEST(x25519 , 2); + status |= TEST(x25519_pk , 1); status |= TEST(key_exchange, 2); #ifdef ED25519_SHA512 status |= TEST(ed_25519 , 3); #else status |= TEST(edDSA , 3); + status |= TEST(edDSA_pk , 1); #endif status |= test_x25519();