1 #ifndef crypto_core_ed25519_H
2 #define crypto_core_ed25519_H
3 
4 #include <stddef.h>
5 #include "export.h"
6 
7 #ifdef __cplusplus
8 extern "C" {
9 #endif
10 
11 #define crypto_core_ed25519_BYTES 32
12 SODIUM_EXPORT
13 size_t crypto_core_ed25519_bytes(void);
14 
15 #define crypto_core_ed25519_UNIFORMBYTES 32
16 SODIUM_EXPORT
17 size_t crypto_core_ed25519_uniformbytes(void);
18 
19 #define crypto_core_ed25519_HASHBYTES 64
20 SODIUM_EXPORT
21 size_t crypto_core_ed25519_hashbytes(void);
22 
23 #define crypto_core_ed25519_SCALARBYTES 32
24 SODIUM_EXPORT
25 size_t crypto_core_ed25519_scalarbytes(void);
26 
27 #define crypto_core_ed25519_NONREDUCEDSCALARBYTES 64
28 SODIUM_EXPORT
29 size_t crypto_core_ed25519_nonreducedscalarbytes(void);
30 
31 SODIUM_EXPORT
32 int crypto_core_ed25519_is_valid_point(const unsigned char *p)
33             __attribute__ ((nonnull));
34 
35 SODIUM_EXPORT
36 int crypto_core_ed25519_add(unsigned char *r,
37                             const unsigned char *p, const unsigned char *q)
38             __attribute__ ((nonnull));
39 
40 SODIUM_EXPORT
41 int crypto_core_ed25519_sub(unsigned char *r,
42                             const unsigned char *p, const unsigned char *q)
43             __attribute__ ((nonnull));
44 
45 SODIUM_EXPORT
46 int crypto_core_ed25519_from_uniform(unsigned char *p, const unsigned char *r)
47             __attribute__ ((nonnull));
48 
49 SODIUM_EXPORT
50 int crypto_core_ed25519_from_hash(unsigned char *p, const unsigned char *h)
51             __attribute__ ((nonnull)) __attribute__ ((deprecated));
52 
53 SODIUM_EXPORT
54 void crypto_core_ed25519_random(unsigned char *p)
55             __attribute__ ((nonnull));
56 
57 SODIUM_EXPORT
58 void crypto_core_ed25519_scalar_random(unsigned char *r)
59             __attribute__ ((nonnull));
60 
61 SODIUM_EXPORT
62 int crypto_core_ed25519_scalar_invert(unsigned char *recip, const unsigned char *s)
63             __attribute__ ((nonnull));
64 
65 SODIUM_EXPORT
66 void crypto_core_ed25519_scalar_negate(unsigned char *neg, const unsigned char *s)
67             __attribute__ ((nonnull));
68 
69 SODIUM_EXPORT
70 void crypto_core_ed25519_scalar_complement(unsigned char *comp, const unsigned char *s)
71             __attribute__ ((nonnull));
72 
73 SODIUM_EXPORT
74 void crypto_core_ed25519_scalar_add(unsigned char *z, const unsigned char *x,
75                                     const unsigned char *y)
76             __attribute__ ((nonnull));
77 
78 SODIUM_EXPORT
79 void crypto_core_ed25519_scalar_sub(unsigned char *z, const unsigned char *x,
80                                     const unsigned char *y)
81             __attribute__ ((nonnull));
82 
83 SODIUM_EXPORT
84 void crypto_core_ed25519_scalar_mul(unsigned char *z, const unsigned char *x,
85                                     const unsigned char *y)
86             __attribute__ ((nonnull));
87 
88 /*
89  * The interval `s` is sampled from should be at least 317 bits to ensure almost
90  * uniformity of `r` over `L`.
91  */
92 SODIUM_EXPORT
93 void crypto_core_ed25519_scalar_reduce(unsigned char *r, const unsigned char *s)
94             __attribute__ ((nonnull));
95 
96 #ifdef __cplusplus
97 }
98 #endif
99 
100 #endif
101