Monero
Loading...
Searching...
No Matches
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
38typedef struct
39{
44} ge25519;
45
53
54typedef struct
55{
60
67
75
76extern void ge25519_p1p1_to_p2(ge25519_p2 *r, const ge25519_p1p1 *p);
77extern void ge25519_p1p1_to_p3(ge25519_p3 *r, const ge25519_p1p1 *p);
79extern void ge25519_add_p1p1(ge25519_p1p1 *r, const ge25519_p3 *p, const ge25519_p3 *q);
80extern void ge25519_dbl_p1p1(ge25519_p1p1 *r, const ge25519_p2 *p);
81extern void choose_t(ge25519_niels *t, unsigned long long pos, signed long long b, const ge25519_niels *base_multiples);
82extern void choose_t_smultq(ge25519_pniels *t, signed long long b, const ge25519_pniels *pre);
83extern void ge25519_nielsadd2(ge25519_p3 *r, const ge25519_niels *q);
84extern void ge25519_nielsadd_p1p1(ge25519_p1p1 *r, const ge25519_p3 *p, const ge25519_niels *q);
86
87extern const ge25519 ge25519_base;
88
89extern int ge25519_unpackneg_vartime(ge25519 *r, const unsigned char p[32]);
90
91extern void ge25519_pack(unsigned char r[32], const ge25519 *p);
92
94
95extern void ge25519_add(ge25519 *r, const ge25519 *p, const ge25519 *q);
96
97extern void ge25519_double(ge25519 *r, const ge25519 *p);
98
99/* computes [s1]p1 + [s2]ge25519_base */
100extern void ge25519_double_scalarmult_vartime(ge25519 *r, const ge25519 *p1, const sc25519 *s1, const sc25519 *s2);
101
102extern void ge25519_multi_scalarmult_vartime(ge25519 *r, ge25519 *p, sc25519 *s, const unsigned long long npoints);
103
104extern void ge25519_scalarmult_base(ge25519 *r, const sc25519 *s);
105
106#endif
#define s(x, c)
Definition aesb.c:47
#define fe25519
Definition fe25519.h:4
#define ge25519_dbl_p1p1
Definition ge25519.h:29
#define ge25519_add_p1p1
Definition ge25519.h:28
#define ge25519_nielsadd_p1p1
Definition ge25519.h:33
#define ge25519_multi_scalarmult_vartime
Definition ge25519.h:23
#define ge25519_pnielsadd_p1p1
Definition ge25519.h:34
#define choose_t_smultq
Definition ge25519.h:31
#define choose_t
Definition ge25519.h:30
#define ge25519_double
Definition ge25519.h:21
#define ge25519_pack
Definition ge25519.h:18
#define ge25519_isneutral_vartime
Definition ge25519.h:19
#define ge25519_base
Definition ge25519.h:16
#define ge25519_add
Definition ge25519.h:20
#define ge25519_double_scalarmult_vartime
Definition ge25519.h:22
#define ge25519_p3
Definition ge25519.h:36
#define ge25519
Definition ge25519.h:15
#define ge25519_scalarmult_base
Definition ge25519.h:24
#define ge25519_p1p1_to_p2
Definition ge25519.h:25
#define ge25519_p1p1_to_pniels
Definition ge25519.h:27
#define ge25519_nielsadd2
Definition ge25519.h:32
#define ge25519_unpackneg_vartime
Definition ge25519.h:17
#define ge25519_p1p1_to_p3
Definition ge25519.h:26
#define sc25519
Definition sc25519.h:4
cryptonote::block b
Definition block.cpp:40
Definition ge25519.h:62
fe25519 xaddy
Definition ge25519.h:64
fe25519 t2d
Definition ge25519.h:65
fe25519 ysubx
Definition ge25519.h:63
Definition ge25519.h:47
fe25519 x
Definition ge25519.h:48
fe25519 y
Definition ge25519.h:50
fe25519 t
Definition ge25519.h:51
fe25519 z
Definition ge25519.h:49
Definition ge25519.h:55
fe25519 y
Definition ge25519.h:57
fe25519 x
Definition ge25519.h:56
fe25519 z
Definition ge25519.h:58
Definition ge25519.h:69
fe25519 z
Definition ge25519.h:72
fe25519 xaddy
Definition ge25519.h:71
fe25519 t2d
Definition ge25519.h:73
fe25519 ysubx
Definition ge25519.h:70
fe25519 z
Definition ge25519.h:42
fe25519 y
Definition ge25519.h:41
fe25519 x
Definition ge25519.h:40
fe25519 t
Definition ge25519.h:43