Monero
ge25519.h
Go to the documentation of this file.
1 #ifndef GE25519_H
2 #define GE25519_H
3 
4 #include "fe25519.h"
5 #include "sc25519.h"
6 
7 #define ge25519 crypto_sign_ed25519_amd64_64_ge25519
8 #define ge25519_base crypto_sign_ed25519_amd64_64_ge25519_base
9 #define ge25519_unpackneg_vartime crypto_sign_ed25519_amd64_64_unpackneg_vartime
10 #define ge25519_pack crypto_sign_ed25519_amd64_64_pack
11 #define ge25519_isneutral_vartime crypto_sign_ed25519_amd64_64_isneutral_vartime
12 #define ge25519_add crypto_sign_ed25519_amd64_64_ge25519_add
13 #define ge25519_double crypto_sign_ed25519_amd64_64_ge25519_double
14 #define ge25519_double_scalarmult_vartime crypto_sign_ed25519_amd64_64_double_scalarmult_vartime
15 #define ge25519_multi_scalarmult_vartime crypto_sign_ed25519_amd64_64_ge25519_multi_scalarmult_vartime
16 #define ge25519_scalarmult_base crypto_sign_ed25519_amd64_64_scalarmult_base
17 #define ge25519_p1p1_to_p2 crypto_sign_ed25519_amd64_64_ge25519_p1p1_to_p2
18 #define ge25519_p1p1_to_p3 crypto_sign_ed25519_amd64_64_ge25519_p1p1_to_p3
19 #define ge25519_add_p1p1 crypto_sign_ed25519_amd64_64_ge25519_add_p1p1
20 #define ge25519_dbl_p1p1 crypto_sign_ed25519_amd64_64_ge25519_dbl_p1p1
21 #define choose_t crypto_sign_ed25519_amd64_64_choose_t
22 #define ge25519_nielsadd2 crypto_sign_ed25519_amd64_64_ge25519_nielsadd2
23 #define ge25519_nielsadd_p1p1 crypto_sign_ed25519_amd64_64_ge25519_nielsadd_p1p1
24 #define ge25519_pnielsadd_p1p1 crypto_sign_ed25519_amd64_64_ge25519_pnielsadd_p1p1
25 
26 
27 #define ge25519_p3 ge25519
28 
29 typedef struct
30 {
31  fe25519 x;
32  fe25519 y;
33  fe25519 z;
34  fe25519 t;
35 } ge25519;
36 
37 typedef struct
38 {
39  fe25519 x;
40  fe25519 z;
41  fe25519 y;
42  fe25519 t;
43 } ge25519_p1p1;
44 
45 typedef struct
46 {
47  fe25519 x;
48  fe25519 y;
49  fe25519 z;
50 } ge25519_p2;
51 
52 typedef struct
53 {
54  fe25519 ysubx;
55  fe25519 xaddy;
56  fe25519 t2d;
58 
59 typedef struct
60 {
61  fe25519 ysubx;
62  fe25519 xaddy;
63  fe25519 z;
64  fe25519 t2d;
66 
67 extern void ge25519_p1p1_to_p2(ge25519_p2 *r, const ge25519_p1p1 *p);
68 extern void ge25519_p1p1_to_p3(ge25519_p3 *r, const ge25519_p1p1 *p);
69 extern void ge25519_add_p1p1(ge25519_p1p1 *r, const ge25519_p3 *p, const ge25519_p3 *q);
70 extern void ge25519_dbl_p1p1(ge25519_p1p1 *r, const ge25519_p2 *p);
71 extern void choose_t(ge25519_niels *t, unsigned long long pos, signed long long b, const ge25519_niels *base_multiples);
72 extern void ge25519_nielsadd2(ge25519_p3 *r, const ge25519_niels *q);
73 extern void ge25519_nielsadd_p1p1(ge25519_p1p1 *r, const ge25519_p3 *p, const ge25519_niels *q);
74 extern void ge25519_pnielsadd_p1p1(ge25519_p1p1 *r, const ge25519_p3 *p, const ge25519_pniels *q);
75 
76 extern const ge25519 ge25519_base;
77 
78 extern int ge25519_unpackneg_vartime(ge25519 *r, const unsigned char p[32]);
79 
80 extern void ge25519_pack(unsigned char r[32], const ge25519 *p);
81 
82 extern int ge25519_isneutral_vartime(const ge25519 *p);
83 
84 extern void ge25519_add(ge25519 *r, const ge25519 *p, const ge25519 *q);
85 
86 extern void ge25519_double(ge25519 *r, const ge25519 *p);
87 
88 /* computes [s1]p1 + [s2]ge25519_base */
89 extern void ge25519_double_scalarmult_vartime(ge25519 *r, const ge25519 *p1, const sc25519 *s1, const sc25519 *s2);
90 
91 extern void ge25519_multi_scalarmult_vartime(ge25519 *r, ge25519 *p, sc25519 *s, const unsigned long long npoints);
92 
93 extern void ge25519_scalarmult_base(ge25519 *r, const sc25519 *s);
94 
95 #endif
Definition: ge25519.h:68
#define ge25519_double
Definition: ge25519.h:13
#define ge25519_p3
Definition: ge25519.h:27
#define ge25519
Definition: ge25519.h:7
Definition: ge25519.h:46
t
Definition: console.py:33
#define ge25519_double_scalarmult_vartime
Definition: ge25519.h:14
#define ge25519_add_p1p1
Definition: ge25519.h:19
#define choose_t
Definition: ge25519.h:21
Definition: sc25519.h:24
const char * s
Definition: minissdp.c:596
#define ge25519_pack
Definition: ge25519.h:10
#define ge25519_nielsadd_p1p1
Definition: ge25519.h:23
#define ge25519_multi_scalarmult_vartime
Definition: ge25519.h:15
#define ge25519_p1p1_to_p3
Definition: ge25519.h:18
Definition: ge25519.h:61
Definition: ge25519.h:54
#define ge25519_add
Definition: ge25519.h:12
#define ge25519_isneutral_vartime
Definition: ge25519.h:11
Definition: ge25519.h:38
#define ge25519_dbl_p1p1
Definition: ge25519.h:20
#define ge25519_scalarmult_base
Definition: ge25519.h:16
r
Definition: testupnpigd.py:61
q
Definition: base.py:2
#define ge25519_nielsadd2
Definition: ge25519.h:22
Definition: fe25519.h:23
p
Definition: pymoduletest.py:75
#define ge25519_unpackneg_vartime
Definition: ge25519.h:9
#define ge25519_pnielsadd_p1p1
Definition: ge25519.h:24
cryptonote::block b
Definition: block.cpp:40
#define ge25519_base
Definition: ge25519.h:8
#define ge25519_p1p1_to_p2
Definition: ge25519.h:17