quickjs-tart

quickjs-based runtime for wallet-core logic
Log | Files | Refs | README | LICENSE

ed25519_convert.c (3254B)


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