1 1.1 riastrad 2 1.1 riastrad #define TEST_NAME "ed25519_convert" 3 1.1 riastrad #include "cmptest.h" 4 1.1 riastrad 5 1.1 riastrad static const unsigned char keypair_seed[crypto_sign_ed25519_SEEDBYTES] = { 6 1.1 riastrad 0x42, 0x11, 0x51, 0xa4, 0x59, 0xfa, 0xea, 0xde, 0x3d, 0x24, 0x71, 7 1.1 riastrad 0x15, 0xf9, 0x4a, 0xed, 0xae, 0x42, 0x31, 0x81, 0x24, 0x09, 0x5a, 8 1.1 riastrad 0xfa, 0xbe, 0x4d, 0x14, 0x51, 0xa5, 0x59, 0xfa, 0xed, 0xee 9 1.1 riastrad }; 10 1.1 riastrad 11 1.1 riastrad int 12 1.1 riastrad main(void) 13 1.1 riastrad { 14 1.1 riastrad unsigned char ed25519_pk[crypto_sign_ed25519_PUBLICKEYBYTES]; 15 1.1 riastrad unsigned char ed25519_skpk[crypto_sign_ed25519_SECRETKEYBYTES]; 16 1.1 riastrad unsigned char curve25519_pk[crypto_scalarmult_curve25519_BYTES]; 17 1.1 riastrad unsigned char curve25519_pk2[crypto_scalarmult_curve25519_BYTES]; 18 1.1 riastrad unsigned char curve25519_sk[crypto_scalarmult_curve25519_BYTES]; 19 1.1 riastrad char curve25519_pk_hex[crypto_scalarmult_curve25519_BYTES * 2 + 1]; 20 1.1 riastrad char curve25519_sk_hex[crypto_scalarmult_curve25519_BYTES * 2 + 1]; 21 1.1 riastrad unsigned char hseed[crypto_hash_sha512_BYTES]; 22 1.1 riastrad unsigned int i; 23 1.1 riastrad 24 1.1 riastrad assert(crypto_sign_ed25519_SEEDBYTES <= crypto_hash_sha512_BYTES); 25 1.1 riastrad #ifdef ED25519_NONDETERMINISTIC 26 1.1 riastrad crypto_hash_sha512(hseed, keypair_seed, crypto_sign_ed25519_SEEDBYTES); 27 1.1 riastrad #else 28 1.1 riastrad memcpy(hseed, keypair_seed, crypto_sign_ed25519_SEEDBYTES); 29 1.1 riastrad #endif 30 1.1 riastrad crypto_sign_ed25519_seed_keypair(ed25519_pk, ed25519_skpk, hseed); 31 1.1 riastrad 32 1.1 riastrad if (crypto_sign_ed25519_pk_to_curve25519(curve25519_pk, ed25519_pk) != 0) { 33 1.1 riastrad printf("conversion failed\n"); 34 1.1 riastrad } 35 1.1 riastrad crypto_sign_ed25519_sk_to_curve25519(curve25519_sk, ed25519_skpk); 36 1.1 riastrad sodium_bin2hex(curve25519_pk_hex, sizeof curve25519_pk_hex, curve25519_pk, 37 1.1 riastrad sizeof curve25519_pk); 38 1.1 riastrad sodium_bin2hex(curve25519_sk_hex, sizeof curve25519_sk_hex, curve25519_sk, 39 1.1 riastrad sizeof curve25519_sk); 40 1.1 riastrad 41 1.1 riastrad printf("curve25519 pk: [%s]\n", curve25519_pk_hex); 42 1.1 riastrad printf("curve25519 sk: [%s]\n", curve25519_sk_hex); 43 1.1 riastrad 44 1.1 riastrad for (i = 0U; i < 500U; i++) { 45 1.1 riastrad crypto_sign_ed25519_keypair(ed25519_pk, ed25519_skpk); 46 1.1 riastrad if (crypto_sign_ed25519_pk_to_curve25519(curve25519_pk, ed25519_pk) != 47 1.1 riastrad 0) { 48 1.1 riastrad printf("conversion failed\n"); 49 1.1 riastrad } 50 1.1 riastrad crypto_sign_ed25519_sk_to_curve25519(curve25519_sk, ed25519_skpk); 51 1.1 riastrad crypto_scalarmult_curve25519_base(curve25519_pk2, curve25519_sk); 52 1.1 riastrad if (memcmp(curve25519_pk, curve25519_pk2, sizeof curve25519_pk) != 0) { 53 1.1 riastrad printf("conversion failed\n"); 54 1.1 riastrad } 55 1.1 riastrad } 56 1.1 riastrad 57 1.1 riastrad sodium_hex2bin(ed25519_pk, crypto_sign_ed25519_PUBLICKEYBYTES, 58 1.1 riastrad "0000000000000000000000000000000000000000000000000000000000000000" 59 1.1 riastrad "0000000000000000000000000000000000000000000000000000000000000000", 60 1.1 riastrad 64, NULL, NULL, NULL); 61 1.1 riastrad assert(crypto_sign_ed25519_pk_to_curve25519(curve25519_pk, ed25519_pk) == -1); 62 1.1 riastrad sodium_hex2bin(ed25519_pk, crypto_sign_ed25519_PUBLICKEYBYTES, 63 1.1 riastrad "0200000000000000000000000000000000000000000000000000000000000000" 64 1.1 riastrad "0000000000000000000000000000000000000000000000000000000000000000", 65 1.1 riastrad 64, NULL, NULL, NULL); 66 1.1 riastrad assert(crypto_sign_ed25519_pk_to_curve25519(curve25519_pk, ed25519_pk) == -1); 67 1.1 riastrad sodium_hex2bin(ed25519_pk, crypto_sign_ed25519_PUBLICKEYBYTES, 68 1.1 riastrad "0500000000000000000000000000000000000000000000000000000000000000" 69 1.1 riastrad "0000000000000000000000000000000000000000000000000000000000000000", 70 1.1 riastrad 64, NULL, NULL, NULL); 71 1.1 riastrad assert(crypto_sign_ed25519_pk_to_curve25519(curve25519_pk, ed25519_pk) == -1); 72 1.1 riastrad 73 1.1 riastrad printf("ok\n"); 74 1.1 riastrad 75 1.1 riastrad return 0; 76 1.1 riastrad } 77