diff --git a/.gitignore b/.gitignore index 3315e98d..c111e42b 100644 --- a/.gitignore +++ b/.gitignore @@ -114,6 +114,7 @@ test/default/core4 test/default/core5 test/default/core6 test/default/core_ed25519 +test/default/core_ed25519_h2c test/default/core_ristretto255 test/default/ed25519_convert test/default/generichash diff --git a/test/default/Makefile.am b/test/default/Makefile.am index 4d32c1ca..dfa79e58 100644 --- a/test/default/Makefile.am +++ b/test/default/Makefile.am @@ -27,6 +27,7 @@ EXTRA_DIST = \ chacha20.exp \ codecs.exp \ core_ed25519.exp \ + core_ed25519_h2c.exp \ core_ristretto255.exp \ core1.exp \ core2.exp \ @@ -108,6 +109,7 @@ DISTCLEANFILES = \ chacha20.res \ codecs.res \ core_ed25519.res \ + core_ed25519_h2c.res \ core_ristretto255.res \ core1.res \ core2.res \ @@ -327,6 +329,9 @@ codecs_LDADD = $(TESTS_LDADD) core_ed25519_SOURCE = cmptest.h core_ed25519.c core_ed25519_LDADD = $(TESTS_LDADD) +core_ed25519_h2c_SOURCE = cmptest.h core_ed25519_h2c.c +core_ed25519_h2c_LDADD = $(TESTS_LDADD) + core_ristretto255_SOURCE = cmptest.h core_ristretto255.c core_ristretto255_LDADD = $(TESTS_LDADD) @@ -495,6 +500,7 @@ xchacha20_LDADD = $(TESTS_LDADD) if !MINIMAL TESTS_TARGETS += \ core_ed25519 \ + core_ed25519_h2c \ core_ristretto255 \ pwhash_scrypt \ pwhash_scrypt_ll \ diff --git a/test/default/core_ed25519_h2c.c b/test/default/core_ed25519_h2c.c new file mode 100644 index 00000000..177fdeb5 --- /dev/null +++ b/test/default/core_ed25519_h2c.c @@ -0,0 +1,109 @@ +#define TEST_NAME "core_ed25519_h2c" +#include "cmptest.h" + +typedef struct TestData_ { + int ro; + const char *msg; + const char tv_y[64]; +} TestData; + +static TestData test_data[] = { + { 0, "", + "115fe9c145cec75332210f75537f89a5af2e9e81928ab63225fcf0db4b9f0b41" }, + { 0, "abc", + "2a78994752306e4a4eb1c629b3c8625cc26f143f1fe35fc728d295222eba7890" }, + { 0, "abcdef0123456789", + "0ca9e2b900bcdfc8b26d705040b6b6a6fd6bfadfd43982a2a59e1d069898ae6b" }, + { 0, + "a512_" + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaaaa", + "511dee3fcc3a422738c453a58acdeafc08fc76f862e97d678adb26f03d0963b5" }, + + { 1, "", + "1af40833bed99ac42f445e9494dbcc489561b3995a40e3864a1b1bdb6ed6ecd0" }, + { 1, "abc", + "7bdb83b6322c4977ffbb69b18df168b56eec733a0254cac0e85eb790460ee4b2" }, + { 1, "abcdef0123456789", + "2dd85e9585fba5ab3c22a07cf07b2cf4a19b10dcab49e1a4c8f952461e644bbc" }, + { 1, + "a512_" + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaaaa", + "160e08388e85b6bcbec8f321ed1de259ffe88dc547a1ce506d61b30fd2378fc5" } +}; + +int +main(void) +{ + unsigned char *expected_yr, *expected_y, *y; + char * expected_y_hex, *y_hex; + size_t i, j; + + expected_yr = (unsigned char *) sodium_malloc(crypto_core_ed25519_BYTES); + expected_y = (unsigned char *) sodium_malloc(crypto_core_ed25519_BYTES); + y = (unsigned char *) sodium_malloc(crypto_core_ed25519_BYTES); + expected_y_hex = + (char *) sodium_malloc(crypto_core_ed25519_BYTES * 2U + 1U); + y_hex = (char *) sodium_malloc(crypto_core_ed25519_BYTES * 2U + 1U); + for (i = 0U; i < (sizeof test_data) / (sizeof test_data[0]); i++) { + sodium_hex2bin(expected_yr, crypto_core_ed25519_BYTES, + test_data[i].tv_y, (size_t) -1U, NULL, NULL, NULL); + for (j = 0; j < crypto_core_ed25519_BYTES; j++) { + expected_y[j] = expected_yr[crypto_core_ed25519_BYTES - 1U - j]; + } + if (test_data[i].ro == 0) { + if (crypto_core_ed25519_from_string( + y, "TESTGEN", (const unsigned char *) test_data[i].msg, + strlen(test_data[i].msg)) != 0) { + printf("crypto_core_ed25519_from_string() failed\n"); + } + } else { + if (crypto_core_ed25519_from_string_ro( + y, "TESTGEN", (const unsigned char *) test_data[i].msg, + strlen(test_data[i].msg)) != 0) { + printf("crypto_core_ed25519_from_string_ro() failed\n"); + } + } + y[crypto_core_ed25519_BYTES - 1U] &= 0x7f; + if (memcmp(y, expected_y, crypto_core_ed25519_BYTES) != 0) { + sodium_bin2hex(expected_y_hex, crypto_core_ed25519_BYTES * 2U + 1U, + expected_y, crypto_core_ed25519_BYTES); + sodium_bin2hex(y_hex, crypto_core_ed25519_BYTES * 2U + 1U, y, + crypto_core_ed25519_BYTES); + printf("Test #%u failed - expected [%s] got [%s]\n", (unsigned) i, + expected_y_hex, y_hex); + } + } + + if (crypto_core_ed25519_from_string(y, NULL, (const unsigned char *) "msg", + 3U) != 0 || + crypto_core_ed25519_from_string(y, "", guard_page, 0U) != 0 || + crypto_core_ed25519_from_string_ro( + y, NULL, (const unsigned char *) "msg", 3U) != 0 || + crypto_core_ed25519_from_string_ro(y, "", guard_page, 0U) != 0) { + printf("Failed with empty parameters"); + } + + sodium_free(y_hex); + sodium_free(expected_y_hex); + sodium_free(y); + sodium_free(expected_y); + sodium_free(expected_yr); + + printf("OK\n"); + + return 0; +} diff --git a/test/default/core_ed25519_h2c.exp b/test/default/core_ed25519_h2c.exp new file mode 100644 index 00000000..d86bac9d --- /dev/null +++ b/test/default/core_ed25519_h2c.exp @@ -0,0 +1 @@ +OK