|
@@ -1408,6 +1408,53 @@ test_crypto_ed25519_convert(void *arg)
|
|
|
;
|
|
|
}
|
|
|
|
|
|
+static void
|
|
|
+test_crypto_ed25519_blinding(void *arg)
|
|
|
+{
|
|
|
+ const uint8_t msg[] =
|
|
|
+ "Eyes I dare not meet in dreams / In death's dream kingdom";
|
|
|
+
|
|
|
+ const int N = 30;
|
|
|
+ int i;
|
|
|
+ (void)arg;
|
|
|
+
|
|
|
+ for (i = 0; i < N; ++i) {
|
|
|
+ uint8_t blinding[32];
|
|
|
+ ed25519_keypair_t ed25519_keypair;
|
|
|
+ ed25519_keypair_t ed25519_keypair_blinded;
|
|
|
+ ed25519_public_key_t ed25519_pubkey_blinded;
|
|
|
+
|
|
|
+ ed25519_signature_t sig;
|
|
|
+
|
|
|
+ crypto_rand((char*) blinding, sizeof(blinding));
|
|
|
+
|
|
|
+ tt_int_op(0,==,ed25519_keypair_generate(&ed25519_keypair, 0));
|
|
|
+ tt_int_op(0,==,ed25519_keypair_blind(&ed25519_keypair_blinded,
|
|
|
+ &ed25519_keypair, blinding));
|
|
|
+
|
|
|
+ tt_int_op(0,==,ed25519_public_blind(&ed25519_pubkey_blinded,
|
|
|
+ &ed25519_keypair.pubkey, blinding));
|
|
|
+
|
|
|
+ tt_mem_op(ed25519_pubkey_blinded.pubkey, ==,
|
|
|
+ ed25519_keypair_blinded.pubkey.pubkey, 32);
|
|
|
+
|
|
|
+ tt_int_op(0,==,ed25519_sign(&sig, msg, sizeof(msg),
|
|
|
+ &ed25519_keypair_blinded));
|
|
|
+
|
|
|
+ tt_int_op(0,==,ed25519_checksig(&sig, msg, sizeof(msg),
|
|
|
+ &ed25519_pubkey_blinded));
|
|
|
+
|
|
|
+ tt_int_op(-1,==,ed25519_checksig(&sig, msg, sizeof(msg)-1,
|
|
|
+ &ed25519_pubkey_blinded));
|
|
|
+ sig.sig[0] ^= 15;
|
|
|
+ tt_int_op(-1,==,ed25519_checksig(&sig, msg, sizeof(msg),
|
|
|
+ &ed25519_pubkey_blinded));
|
|
|
+ }
|
|
|
+
|
|
|
+ done:
|
|
|
+ ;
|
|
|
+}
|
|
|
+
|
|
|
static void
|
|
|
test_crypto_siphash(void *arg)
|
|
|
{
|
|
@@ -1549,6 +1596,7 @@ struct testcase_t crypto_tests[] = {
|
|
|
{ "ed25519_test_vectors", test_crypto_ed25519_test_vectors, 0, NULL, NULL },
|
|
|
{ "ed25519_encode", test_crypto_ed25519_encode, 0, NULL, NULL },
|
|
|
{ "ed25519_convert", test_crypto_ed25519_convert, 0, NULL, NULL },
|
|
|
+ { "ed25519_blinding", test_crypto_ed25519_blinding, 0, NULL, NULL },
|
|
|
#endif
|
|
|
{ "siphash", test_crypto_siphash, 0, NULL, NULL },
|
|
|
END_OF_TESTCASES
|