1 #define TEST_NAME "scalarmult_ristretto255"
2 #include "cmptest.h"
3
4 #define B_HEX "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"
5
6 int
main(void)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 }
52