Monero
ge25519.h
Go to the documentation of this file.
1 #ifndef GE25519_H
2 #define GE25519_H
3 
4 /*
5  * Arithmetic on the twisted Edwards curve -x^2 + y^2 = 1 + dx^2y^2
6  * with d = -(121665/121666) =
7  * 37095705934669439343138083508754565189542113879843219016388785533085940283555
8  * Base point:
9  * (15112221349535400772501151409588531511454012693041857206046113283949847762202,46316835694926478169428394003475163141307993866256225615783033603165251855960);
10  */
11 
12 #include "fe25519.h"
13 #include "sc25519.h"
14 
15 #define ge25519 crypto_sign_ed25519_amd64_51_30k_batch_ge25519
16 #define ge25519_base crypto_sign_ed25519_amd64_51_30k_batch_ge25519_base
17 #define ge25519_unpackneg_vartime crypto_sign_ed25519_amd64_51_30k_batch_unpackneg_vartime
18 #define ge25519_pack crypto_sign_ed25519_amd64_51_30k_batch_pack
19 #define ge25519_isneutral_vartime crypto_sign_ed25519_amd64_51_30k_batch_isneutral_vartime
20 #define ge25519_add crypto_sign_ed25519_amd64_51_30k_batch_ge25519_add
21 #define ge25519_double crypto_sign_ed25519_amd64_51_30k_batch_ge25519_double
22 #define ge25519_double_scalarmult_vartime crypto_sign_ed25519_amd64_51_30k_batch_double_scalarmult_vartime
23 #define ge25519_multi_scalarmult_vartime crypto_sign_ed25519_amd64_51_30k_batch_ge25519_multi_scalarmult_vartime
24 #define ge25519_scalarmult_base crypto_sign_ed25519_amd64_51_30k_batch_scalarmult_base
25 #define ge25519_p1p1_to_p2 crypto_sign_ed25519_amd64_51_30k_batch_ge25519_p1p1_to_p2
26 #define ge25519_p1p1_to_p3 crypto_sign_ed25519_amd64_51_30k_batch_ge25519_p1p1_to_p3
27 #define ge25519_p1p1_to_pniels crypto_sign_ed25519_amd64_51_30k_batch_ge25519_p1p1_to_pniels
28 #define ge25519_add_p1p1 crypto_sign_ed25519_amd64_51_30k_batch_ge25519_add_p1p1
29 #define ge25519_dbl_p1p1 crypto_sign_ed25519_amd64_51_30k_batch_ge25519_dbl_p1p1
30 #define choose_t crypto_sign_ed25519_amd64_51_30k_batch_choose_t
31 #define choose_t_smultq crypto_sign_ed25519_amd64_51_30k_batch_choose_t_smultq
32 #define ge25519_nielsadd2 crypto_sign_ed25519_amd64_51_30k_batch_ge25519_nielsadd2
33 #define ge25519_nielsadd_p1p1 crypto_sign_ed25519_amd64_51_30k_batch_ge25519_nielsadd_p1p1
34 #define ge25519_pnielsadd_p1p1 crypto_sign_ed25519_amd64_51_30k_batch_ge25519_pnielsadd_p1p1
35 
36 #define ge25519_p3 ge25519
37 
38 typedef struct
39 {
44 } ge25519;
45 
46 typedef struct
47 {
52 } ge25519_p1p1;
53 
54 typedef struct
55 {
59 } ge25519_p2;
60 
61 typedef struct
62 {
67 
68 typedef struct
69 {
75 
76 extern void ge25519_p1p1_to_p2(ge25519_p2 *r, const ge25519_p1p1 *p);
77 extern void ge25519_p1p1_to_p3(ge25519_p3 *r, const ge25519_p1p1 *p);
79 extern void ge25519_add_p1p1(ge25519_p1p1 *r, const ge25519_p3 *p, const ge25519_p3 *q);
80 extern void ge25519_dbl_p1p1(ge25519_p1p1 *r, const ge25519_p2 *p);
81 extern void choose_t(ge25519_niels *t, unsigned long long pos, signed long long b, const ge25519_niels *base_multiples);
82 extern void choose_t_smultq(ge25519_pniels *t, signed long long b, const ge25519_pniels *pre);
83 extern void ge25519_nielsadd2(ge25519_p3 *r, const ge25519_niels *q);
84 extern void ge25519_nielsadd_p1p1(ge25519_p1p1 *r, const ge25519_p3 *p, const ge25519_niels *q);
85 extern void ge25519_pnielsadd_p1p1(ge25519_p1p1 *r, const ge25519_p3 *p, const ge25519_pniels *q);
86 
87 extern const ge25519 ge25519_base;
88 
89 extern int ge25519_unpackneg_vartime(ge25519 *r, const unsigned char p[32]);
90 
91 extern void ge25519_pack(unsigned char r[32], const ge25519 *p);
92 
93 extern int ge25519_isneutral_vartime(const ge25519 *p);
94 
95 extern void ge25519_add(ge25519 *r, const ge25519 *p, const ge25519 *q);
96 
97 extern void ge25519_double(ge25519 *r, const ge25519 *p);
98 
99 /* computes [s1]p1 + [s2]ge25519_base */
100 extern void ge25519_double_scalarmult_vartime(ge25519 *r, const ge25519 *p1, const sc25519 *s1, const sc25519 *s2);
101 
102 extern void ge25519_multi_scalarmult_vartime(ge25519 *r, ge25519 *p, sc25519 *s, const unsigned long long npoints);
103 
104 extern void ge25519_scalarmult_base(ge25519 *r, const sc25519 *s);
105 
106 #endif
#define ge25519_add
Definition: ge25519.h:20
Definition: ge25519.h:68
fe25519 z
Definition: ge25519.h:42
#define ge25519
Definition: ge25519.h:15
#define ge25519_p3
Definition: ge25519.h:36
#define ge25519_nielsadd2
Definition: ge25519.h:32
Definition: ge25519.h:46
t
Definition: console.py:33
fe25519 t
Definition: ge25519.h:51
fe25519 x
Definition: ge25519.h:40
#define ge25519_double_scalarmult_vartime
Definition: ge25519.h:22
fe25519 y
Definition: ge25519.h:57
#define choose_t
Definition: ge25519.h:30
Definition: sc25519.h:24
const char * s
Definition: minissdp.c:596
fe25519 z
Definition: ge25519.h:72
#define ge25519_multi_scalarmult_vartime
Definition: ge25519.h:23
#define ge25519_isneutral_vartime
Definition: ge25519.h:19
#define choose_t_smultq
Definition: ge25519.h:31
fe25519 t2d
Definition: ge25519.h:65
#define ge25519_nielsadd_p1p1
Definition: ge25519.h:33
fe25519 y
Definition: ge25519.h:41
#define ge25519_base
Definition: ge25519.h:16
fe25519 x
Definition: ge25519.h:48
#define ge25519_p1p1_to_p3
Definition: ge25519.h:26
fe25519 t2d
Definition: ge25519.h:73
fe25519 y
Definition: ge25519.h:50
#define ge25519_scalarmult_base
Definition: ge25519.h:24
Definition: ge25519.h:61
Definition: ge25519.h:54
#define ge25519_p1p1_to_pniels
Definition: ge25519.h:27
Definition: ge25519.h:38
fe25519 ysubx
Definition: ge25519.h:70
fe25519 z
Definition: ge25519.h:58
#define ge25519_pack
Definition: ge25519.h:18
#define ge25519_double
Definition: ge25519.h:21
fe25519 z
Definition: ge25519.h:49
r
Definition: testupnpigd.py:61
fe25519 t
Definition: ge25519.h:43
q
Definition: base.py:2
fe25519 x
Definition: ge25519.h:56
#define ge25519_unpackneg_vartime
Definition: ge25519.h:17
#define ge25519_p1p1_to_p2
Definition: ge25519.h:25
Definition: fe25519.h:23
p
Definition: pymoduletest.py:75
fe25519 xaddy
Definition: ge25519.h:64
fe25519 xaddy
Definition: ge25519.h:71
fe25519 ysubx
Definition: ge25519.h:63
#define ge25519_add_p1p1
Definition: ge25519.h:28
#define ge25519_pnielsadd_p1p1
Definition: ge25519.h:34
#define ge25519_dbl_p1p1
Definition: ge25519.h:29
cryptonote::block b
Definition: block.cpp:40