quickjs-tart

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

scalarmult_ristretto255.c (1910B)


      1 #define TEST_NAME "scalarmult_ristretto255"
      2 #include "cmptest.h"
      3 
      4 #define B_HEX "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"
      5 
      6 int
      7 main(void)
      8 {
      9     unsigned char *b =
     10         (unsigned char *) sodium_malloc(crypto_scalarmult_ristretto255_BYTES);
     11     unsigned char *n =
     12         (unsigned char *) sodium_malloc(crypto_scalarmult_ristretto255_SCALARBYTES);
     13     unsigned char *p =
     14         (unsigned char *) sodium_malloc(crypto_scalarmult_ristretto255_BYTES);
     15     unsigned char *p2 =
     16         (unsigned char *) sodium_malloc(crypto_scalarmult_ristretto255_BYTES);
     17     char          *hex =
     18         (char *) sodium_malloc(2 * crypto_scalarmult_ristretto255_BYTES + 1);
     19     int            i;
     20 
     21     sodium_hex2bin(b, crypto_scalarmult_ristretto255_BYTES,
     22                    B_HEX, sizeof B_HEX - (size_t) 1U, NULL, NULL, NULL);
     23     memset(n, 0, crypto_scalarmult_ristretto255_SCALARBYTES);
     24     for (i = 0; i < 16; i++) {
     25         crypto_scalarmult_ristretto255_base(p, n);
     26         if (crypto_scalarmult_ristretto255(p2, n, b) != 0) {
     27             printf("crypto_scalarmult_ristretto255(%d) != 0\n", i);
     28         }
     29         sodium_bin2hex(hex, 2 * crypto_scalarmult_ristretto255_BYTES + 1,
     30                        p, crypto_scalarmult_ristretto255_BYTES);
     31         printf("%s\n", hex);
     32         assert(memcmp(p, p2, crypto_scalarmult_ristretto255_BYTES) == 0);
     33         sodium_increment(n, crypto_scalarmult_ristretto255_SCALARBYTES);
     34     }
     35 
     36     memset(p, 0xfe, crypto_scalarmult_ristretto255_BYTES);
     37     assert(crypto_scalarmult_ristretto255(guard_page, n, p) == -1);
     38 
     39     sodium_free(hex);
     40     sodium_free(p2);
     41     sodium_free(p);
     42     sodium_free(n);
     43     sodium_free(b);
     44 
     45     assert(crypto_scalarmult_ristretto255_BYTES == crypto_scalarmult_ristretto255_bytes());
     46     assert(crypto_scalarmult_ristretto255_SCALARBYTES == crypto_scalarmult_ristretto255_scalarbytes());
     47 
     48     printf("OK\n");
     49 
     50     return 0;
     51 }