Monero
Toggle main menu visibility
Loading...
Searching...
No Matches
external
supercop
crypto_sign
ed25519
amd64-51-30k
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
{
40
fe25519
x
;
41
fe25519
y
;
42
fe25519
z
;
43
fe25519
t
;
44
}
ge25519
;
45
46
typedef
struct
47
{
48
fe25519
x
;
49
fe25519
z
;
50
fe25519
y
;
51
fe25519
t
;
52
}
ge25519_p1p1
;
53
54
typedef
struct
55
{
56
fe25519
x
;
57
fe25519
y
;
58
fe25519
z
;
59
}
ge25519_p2
;
60
61
typedef
struct
62
{
63
fe25519
ysubx
;
64
fe25519
xaddy
;
65
fe25519
t2d
;
66
}
ge25519_niels
;
67
68
typedef
struct
69
{
70
fe25519
ysubx
;
71
fe25519
xaddy
;
72
fe25519
z
;
73
fe25519
t2d
;
74
}
ge25519_pniels
;
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);
78
extern
void
ge25519_p1p1_to_pniels
(
ge25519_pniels
*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
s
#define s(x, c)
Definition
aesb.c:47
fe25519.h
fe25519
#define fe25519
Definition
fe25519.h:4
ge25519_dbl_p1p1
#define ge25519_dbl_p1p1
Definition
ge25519.h:29
ge25519_add_p1p1
#define ge25519_add_p1p1
Definition
ge25519.h:28
ge25519_nielsadd_p1p1
#define ge25519_nielsadd_p1p1
Definition
ge25519.h:33
ge25519_multi_scalarmult_vartime
#define ge25519_multi_scalarmult_vartime
Definition
ge25519.h:23
ge25519_pnielsadd_p1p1
#define ge25519_pnielsadd_p1p1
Definition
ge25519.h:34
choose_t_smultq
#define choose_t_smultq
Definition
ge25519.h:31
choose_t
#define choose_t
Definition
ge25519.h:30
ge25519_double
#define ge25519_double
Definition
ge25519.h:21
ge25519_pack
#define ge25519_pack
Definition
ge25519.h:18
ge25519_isneutral_vartime
#define ge25519_isneutral_vartime
Definition
ge25519.h:19
ge25519_base
#define ge25519_base
Definition
ge25519.h:16
ge25519_add
#define ge25519_add
Definition
ge25519.h:20
ge25519_double_scalarmult_vartime
#define ge25519_double_scalarmult_vartime
Definition
ge25519.h:22
ge25519_p3
#define ge25519_p3
Definition
ge25519.h:36
ge25519
#define ge25519
Definition
ge25519.h:15
ge25519_scalarmult_base
#define ge25519_scalarmult_base
Definition
ge25519.h:24
ge25519_p1p1_to_p2
#define ge25519_p1p1_to_p2
Definition
ge25519.h:25
ge25519_p1p1_to_pniels
#define ge25519_p1p1_to_pniels
Definition
ge25519.h:27
ge25519_nielsadd2
#define ge25519_nielsadd2
Definition
ge25519.h:32
ge25519_unpackneg_vartime
#define ge25519_unpackneg_vartime
Definition
ge25519.h:17
ge25519_p1p1_to_p3
#define ge25519_p1p1_to_p3
Definition
ge25519.h:26
sc25519.h
sc25519
#define sc25519
Definition
sc25519.h:4
b
cryptonote::block b
Definition
block.cpp:40
ge25519_niels
Definition
ge25519.h:62
ge25519_niels::xaddy
fe25519 xaddy
Definition
ge25519.h:64
ge25519_niels::t2d
fe25519 t2d
Definition
ge25519.h:65
ge25519_niels::ysubx
fe25519 ysubx
Definition
ge25519.h:63
ge25519_p1p1
Definition
ge25519.h:47
ge25519_p1p1::x
fe25519 x
Definition
ge25519.h:48
ge25519_p1p1::y
fe25519 y
Definition
ge25519.h:50
ge25519_p1p1::t
fe25519 t
Definition
ge25519.h:51
ge25519_p1p1::z
fe25519 z
Definition
ge25519.h:49
ge25519_p2
Definition
ge25519.h:55
ge25519_p2::y
fe25519 y
Definition
ge25519.h:57
ge25519_p2::x
fe25519 x
Definition
ge25519.h:56
ge25519_p2::z
fe25519 z
Definition
ge25519.h:58
ge25519_pniels
Definition
ge25519.h:69
ge25519_pniels::z
fe25519 z
Definition
ge25519.h:72
ge25519_pniels::xaddy
fe25519 xaddy
Definition
ge25519.h:71
ge25519_pniels::t2d
fe25519 t2d
Definition
ge25519.h:73
ge25519_pniels::ysubx
fe25519 ysubx
Definition
ge25519.h:70
ge25519::z
fe25519 z
Definition
ge25519.h:42
ge25519::y
fe25519 y
Definition
ge25519.h:41
ge25519::x
fe25519 x
Definition
ge25519.h:40
ge25519::t
fe25519 t
Definition
ge25519.h:43
Generated on
for Monero by
1.17.0