]> git.codecow.com Git - Monocypher.git/commitdiff
Added tests vectors for public key generation
authorLoup Vaillant <loup@loup-vaillant.fr>
Sat, 23 Jun 2018 13:42:18 +0000 (15:42 +0200)
committerLoup Vaillant <loup@loup-vaillant.fr>
Sat, 23 Jun 2018 13:42:18 +0000 (15:42 +0200)
Public key generation was up until now only tested implicitly.  Test
vectors can make us more confident.

tests/gen/edDSA_pk.c [new file with mode: 0644]
tests/gen/makefile
tests/gen/x25519_pk.c [new file with mode: 0644]
tests/test.c

diff --git a/tests/gen/edDSA_pk.c b/tests/gen/edDSA_pk.c
new file mode 100644 (file)
index 0000000..bfbba72
--- /dev/null
@@ -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;
+}
index 23bec3754c957dcabdf37690e3fb933ae97cc95f..07a322cf942bb70f6eeb61742d692b2ea67bfdac 100644 (file)
@@ -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 (file)
index 0000000..cb9053a
--- /dev/null
@@ -0,0 +1,28 @@
+#include <sodium.h>
+#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;
+}
index cc76c9b102358b2d2b58f05dd7fb7aecf59be268..302783b4f72bcdb246c9059d2e5ce7c5f88e36d4 100644 (file)
@@ -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();