1 /*
2 Written in the D programming language.
3 For git maintenance (ensure at least one congruent line with originating C header):
4 #define crypto_core_ristretto255_H
5 */
6 
7 module deimos.sodium.crypto_core_ristretto255;
8 
9 version(SODIUM_LIBRARY_MINIMAL) {}
10 else {
11 
12 
13 extern(C) @nogc nothrow /*pure*/ :
14 
15 
16 enum crypto_core_ristretto255_BYTES = 32U;
17 
18 size_t crypto_core_ristretto255_bytes() @trusted;
19 
20 enum crypto_core_ristretto255_HASHBYTES = 64U;
21 
22 size_t crypto_core_ristretto255_hashbytes() @trusted;
23 
24 enum crypto_core_ristretto255_SCALARBYTES = 32U;
25 
26 size_t crypto_core_ristretto255_scalarbytes() @trusted;
27 
28 enum crypto_core_ristretto255_NONREDUCEDSCALARBYTES = 64U;
29 
30 size_t crypto_core_ristretto255_nonreducedscalarbytes() @trusted;
31 
32 int crypto_core_ristretto255_is_valid_point(const(ubyte)* p); // __attribute__ ((nonnull));
33 
34 int crypto_core_ristretto255_add(ubyte* r,
35                                  const(ubyte)* p, const(ubyte)* q); // __attribute__ ((nonnull));
36 
37 int crypto_core_ristretto255_sub(ubyte* r,
38                                  const(ubyte)* p, const(ubyte)* q); // __attribute__ ((nonnull));
39 
40 int crypto_core_ristretto255_from_hash(ubyte* p,
41                                        const(ubyte)* r); // __attribute__ ((nonnull));
42 
43 void crypto_core_ristretto255_random(ubyte* p); // __attribute__ ((nonnull));
44 
45 void crypto_core_ristretto255_scalar_random(ubyte* r); // __attribute__ ((nonnull));
46 
47 int crypto_core_ristretto255_scalar_invert(ubyte* recip,
48                                            const(ubyte)* s); // __attribute__ ((nonnull));
49 
50 void crypto_core_ristretto255_scalar_negate(ubyte* neg,
51                                             const(ubyte)* s); // __attribute__ ((nonnull));
52 
53 void crypto_core_ristretto255_scalar_complement(ubyte* comp,
54                                                 const(ubyte)* s); // __attribute__ ((nonnull));
55 
56 void crypto_core_ristretto255_scalar_add(ubyte* z,
57                                          const(ubyte)* x,
58                                          const(ubyte)* y); // __attribute__ ((nonnull));
59 
60 void crypto_core_ristretto255_scalar_sub(ubyte* z,
61                                          const(ubyte)* x,
62                                          const(ubyte)* y); // __attribute__ ((nonnull));
63 
64 void crypto_core_ristretto255_scalar_mul(ubyte* z,
65                                          const(ubyte)* x,
66                                          const(ubyte)* y); // __attribute__ ((nonnull));
67 
68 /*
69  * The interval `s` is sampled from should be at least 317 bits to ensure almost
70  * uniformity of `r` over `L`.
71  */
72 void crypto_core_ristretto255_scalar_reduce(ubyte* r,
73                                             const(ubyte)* s); // __attribute__ ((nonnull));
74 
75 }