Home | History | Annotate | Line # | Download | only in default
      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