Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
OTRv4
libgoldilocks
Commits
98bfcb01
Commit
98bfcb01
authored
Oct 13, 2017
by
Michael Hamburg
Browse files
IsoE25519 is now better known as Ristretto
parent
4de924c7
Changes
8
Hide whitespace changes
Inline
Side-by-side
src/GENERATED/include/decaf.hxx
View file @
98bfcb01
...
...
@@ -21,7 +21,7 @@
namespace
decaf
{
template
<
template
<
typename
Group
>
class
Run
>
void
run_for_all_curves
()
{
Run
<
IsoEd25519
>::
run
();
Run
<
Ristretto
>::
run
();
Run
<
Ed448Goldilocks
>::
run
();
}
}
...
...
src/GENERATED/include/decaf/ed255.hxx
View file @
98bfcb01
...
...
@@ -43,8 +43,8 @@ namespace decaf {
/** A public key for crypto over some Group */
template
<
typename
Group
>
struct
EdDSA
;
/** A public key for crypto over
Iso-Ed25519
*/
template
<
>
struct
EdDSA
<
IsoEd25519
>
{
/** A public key for crypto over
Ristretto
*/
template
<
>
struct
EdDSA
<
Ristretto
>
{
/** @cond internal */
template
<
class
CRTP
,
Prehashed
>
class
Signing
;
...
...
@@ -190,7 +190,7 @@ private:
public:
/** Underlying group */
typedef
IsoEd25519
Group
;
typedef
Ristretto
Group
;
/** Signature size. */
static
const
size_t
SIG_BYTES
=
DECAF_EDDSA_25519_SIGNATURE_BYTES
;
...
...
@@ -364,7 +364,7 @@ public:
/* PERF FUTURE: Pre-cached decoding? Precomputed table?? */
/** Underlying group */
typedef
IsoEd25519
Group
;
typedef
Ristretto
Group
;
/** Signature size. */
static
const
size_t
SIG_BYTES
=
DECAF_EDDSA_25519_SIGNATURE_BYTES
;
...
...
@@ -417,7 +417,7 @@ public:
}
};
/* class PublicKey */
};
/* template<> struct EdDSA<
IsoEd25519
> */
};
/* template<> struct EdDSA<
Ristretto
> */
#undef DECAF_NOEXCEPT
}
/* namespace decaf */
...
...
src/GENERATED/include/decaf/point_255.hxx
View file @
98bfcb01
...
...
@@ -53,10 +53,10 @@ namespace decaf {
/**
* Curve25519/Decaf instantiation of group.
*/
struct
IsoEd25519
{
struct
Ristretto
{
/** The name of the curve */
static
inline
const
char
*
name
()
{
return
"
Iso-Ed25519
"
;
}
static
inline
const
char
*
name
()
{
return
"
Ristretto
"
;
}
/** The name of the curve */
static
inline
int
bits
()
{
return
255
;
}
...
...
@@ -756,15 +756,15 @@ public:
}
};
};
/* struct
IsoEd25519
*/
};
/* struct
Ristretto
*/
/** @cond internal */
inline
SecureBuffer
IsoEd25519
::
Scalar
::
direct_scalarmul
(
const
FixedBlock
<
IsoEd25519
::
Point
::
SER_BYTES
>
&
in
,
inline
SecureBuffer
Ristretto
::
Scalar
::
direct_scalarmul
(
const
FixedBlock
<
Ristretto
::
Point
::
SER_BYTES
>
&
in
,
decaf_bool_t
allow_identity
,
decaf_bool_t
short_circuit
)
const
/*throw(CryptoException)*/
{
SecureBuffer
out
(
IsoEd25519
::
Point
::
SER_BYTES
);
SecureBuffer
out
(
Ristretto
::
Point
::
SER_BYTES
);
if
(
DECAF_SUCCESS
!=
decaf_255_direct_scalarmul
(
out
.
data
(),
in
.
data
(),
s
,
allow_identity
,
short_circuit
)
)
{
...
...
@@ -773,9 +773,9 @@ inline SecureBuffer IsoEd25519::Scalar::direct_scalarmul (
return
out
;
}
inline
decaf_error_t
IsoEd25519
::
Scalar
::
direct_scalarmul_noexcept
(
FixedBuffer
<
IsoEd25519
::
Point
::
SER_BYTES
>
&
out
,
const
FixedBlock
<
IsoEd25519
::
Point
::
SER_BYTES
>
&
in
,
inline
decaf_error_t
Ristretto
::
Scalar
::
direct_scalarmul_noexcept
(
FixedBuffer
<
Ristretto
::
Point
::
SER_BYTES
>
&
out
,
const
FixedBlock
<
Ristretto
::
Point
::
SER_BYTES
>
&
in
,
decaf_bool_t
allow_identity
,
decaf_bool_t
short_circuit
)
const
DECAF_NOEXCEPT
{
...
...
@@ -783,6 +783,9 @@ inline decaf_error_t IsoEd25519::Scalar::direct_scalarmul_noexcept (
}
/** @endcond */
typedef
Ristretto
IsoEd25519
;
#undef DECAF_NOEXCEPT
}
/* namespace decaf */
...
...
src/GENERATED/include/decaf/point_448.hxx
View file @
98bfcb01
...
...
@@ -783,6 +783,8 @@ inline decaf_error_t Ed448Goldilocks::Scalar::direct_scalarmul_noexcept (
}
/** @endcond */
#undef DECAF_NOEXCEPT
}
/* namespace decaf */
...
...
src/generator/curve_data.py
View file @
98bfcb01
...
...
@@ -23,8 +23,9 @@ field_data = {
curve_data
=
{
"curve25519"
:
{
"altname"
:
"IsoEd25519"
,
"iso_to"
:
"Curve25519"
,
"name"
:
"
Iso-Ed25519
"
,
"name"
:
"
Ristretto
"
,
"cofactor"
:
8
,
"field"
:
"p25519"
,
"scalar_bits"
:
253
,
...
...
@@ -43,6 +44,7 @@ curve_data = {
"eddsa_sigma_iso"
:
1
},
"ed448goldilocks"
:
{
"altname"
:
None
,
"name"
:
"Ed448-Goldilocks"
,
"cofactor"
:
4
,
"field"
:
"p448"
,
...
...
src/per_curve/point.tmpl.hxx
View file @
98bfcb01
...
...
@@ -770,5 +770,7 @@ inline decaf_error_t $(cxx_ns)::Scalar::direct_scalarmul_noexcept (
}
/** @endcond */
$
(
"typedef %s %s;
\n
"
%
(
cxx_ns
,
altname
)
if
altname
else
""
)
#undef DECAF_NOEXCEPT
}
/* namespace decaf */
test/ristretto_vectors.inc.cxx
View file @
98bfcb01
template
<
typename
Group
>
struct
base_multiples
;
/* Examples for multiples of base point */
template
<
>
struct
base_multiples
<
IsoEd25519
>
{
template
<
>
struct
base_multiples
<
Ristretto
>
{
static
const
int
count
=
16
;
static
const
uint8_t
values
[
count
][
IsoEd25519
::
Point
::
SER_BYTES
];
static
const
uint8_t
values
[
count
][
Ristretto
::
Point
::
SER_BYTES
];
};
const
uint8_t
base_multiples
<
IsoEd25519
>::
values
[
base_multiples
<
IsoEd25519
>::
count
][
IsoEd25519
::
Point
::
SER_BYTES
]
=
{
const
uint8_t
base_multiples
<
Ristretto
>::
values
[
base_multiples
<
Ristretto
>::
count
][
Ristretto
::
Point
::
SER_BYTES
]
=
{
/* Copy-pasted from Dalek, thanks Isis Lovecruft and Henry de Valence */
{
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
},
{
226
,
242
,
174
,
10
,
106
,
188
,
78
,
113
,
168
,
132
,
169
,
97
,
197
,
0
,
81
,
95
,
88
,
227
,
11
,
106
,
165
,
130
,
221
,
141
,
182
,
166
,
89
,
69
,
224
,
141
,
45
,
118
},
...
...
@@ -101,13 +101,13 @@ const uint8_t base_multiples<Ed448Goldilocks>::values[][Ed448Goldilocks::Point::
template
<
typename
Group
>
struct
elligator_examples
;
/* Examples for Elligator */
template
<
>
struct
elligator_examples
<
IsoEd25519
>
{
template
<
>
struct
elligator_examples
<
Ristretto
>
{
static
const
int
count
=
16
;
static
const
uint8_t
inputs
[
count
][
IsoEd25519
::
Point
::
HASH_BYTES
];
static
const
uint8_t
outputs
[
count
][
IsoEd25519
::
Point
::
SER_BYTES
];
static
const
uint8_t
inputs
[
count
][
Ristretto
::
Point
::
HASH_BYTES
];
static
const
uint8_t
outputs
[
count
][
Ristretto
::
Point
::
SER_BYTES
];
};
const
uint8_t
elligator_examples
<
IsoEd25519
>::
inputs
[
elligator_examples
<
IsoEd25519
>::
count
][
IsoEd25519
::
Point
::
HASH_BYTES
]
=
{
const
uint8_t
elligator_examples
<
Ristretto
>::
inputs
[
elligator_examples
<
Ristretto
>::
count
][
Ristretto
::
Point
::
HASH_BYTES
]
=
{
/* Copy-pasted from Dalek, thanks Isis Lovecruft and Henry de Valence */
{
184
,
249
,
135
,
49
,
253
,
123
,
89
,
113
,
67
,
160
,
6
,
239
,
7
,
105
,
211
,
41
,
192
,
249
,
185
,
57
,
9
,
102
,
70
,
198
,
15
,
127
,
7
,
26
,
160
,
102
,
134
,
71
},
{
229
,
14
,
241
,
227
,
75
,
9
,
118
,
60
,
128
,
153
,
226
,
21
,
183
,
217
,
91
,
136
,
98
,
0
,
231
,
156
,
124
,
77
,
82
,
139
,
142
,
134
,
164
,
169
,
169
,
62
,
250
,
52
},
...
...
@@ -126,8 +126,8 @@ const uint8_t elligator_examples<IsoEd25519>::inputs
{
210
,
207
,
228
,
56
,
155
,
116
,
207
,
54
,
84
,
195
,
251
,
215
,
249
,
199
,
116
,
75
,
109
,
239
,
196
,
251
,
194
,
246
,
252
,
228
,
70
,
146
,
156
,
35
,
25
,
39
,
241
,
4
},
{
34
,
116
,
123
,
9
,
8
,
40
,
93
,
189
,
9
,
103
,
57
,
103
,
66
,
227
,
3
,
2
,
157
,
107
,
134
,
219
,
202
,
74
,
230
,
154
,
78
,
107
,
219
,
195
,
214
,
14
,
84
,
80
}
};
const
uint8_t
elligator_examples
<
IsoEd25519
>::
outputs
[
elligator_examples
<
IsoEd25519
>::
count
][
IsoEd25519
::
Point
::
SER_BYTES
]
=
{
const
uint8_t
elligator_examples
<
Ristretto
>::
outputs
[
elligator_examples
<
Ristretto
>::
count
][
Ristretto
::
Point
::
SER_BYTES
]
=
{
/* Copy-pasted from Dalek, thanks Isis Lovecruft and Henry de Valence */
{
176
,
157
,
237
,
97
,
66
,
29
,
140
,
166
,
168
,
94
,
26
,
157
,
212
,
216
,
229
,
160
,
195
,
246
,
232
,
239
,
169
,
112
,
63
,
193
,
64
,
32
,
152
,
69
,
11
,
190
,
246
,
86
},
{
234
,
141
,
77
,
203
,
181
,
225
,
250
,
74
,
171
,
62
,
15
,
118
,
78
,
212
,
150
,
19
,
131
,
14
,
188
,
238
,
194
,
244
,
141
,
138
,
166
,
162
,
83
,
122
,
228
,
201
,
19
,
26
},
...
...
test/vectors.inc.cxx
View file @
98bfcb01
/* X25519, X448 test vectors */
template
<
>
const
uint8_t
Tests
<
IsoEd25519
>::
rfc7748_1
[
32
]
=
{
template
<
>
const
uint8_t
Tests
<
Ristretto
>::
rfc7748_1
[
32
]
=
{
0x42
,
0x2c
,
0x8e
,
0x7a
,
0x62
,
0x27
,
0xd7
,
0xbc
,
0xa1
,
0x35
,
0x0b
,
0x3e
,
0x2b
,
0xb7
,
0x27
,
0x9f
,
0x78
,
0x97
,
0xb8
,
0x7b
,
0xb6
,
0x85
,
0x4b
,
0x78
,
0x3c
,
0x60
,
0xe8
,
0x03
,
0x11
,
0xae
,
0x30
,
0x79
};
template
<
>
const
uint8_t
Tests
<
IsoEd25519
>::
rfc7748_1000
[
32
]
=
{
template
<
>
const
uint8_t
Tests
<
Ristretto
>::
rfc7748_1000
[
32
]
=
{
0x68
,
0x4c
,
0xf5
,
0x9b
,
0xa8
,
0x33
,
0x09
,
0x55
,
0x28
,
0x00
,
0xef
,
0x56
,
0x6f
,
0x2f
,
0x4d
,
0x3c
,
0x1c
,
0x38
,
0x87
,
0xc4
,
0x93
,
0x60
,
0xe3
,
0x87
,
0x5f
,
0x2e
,
0xb9
,
0x4d
,
0x99
,
0x53
,
0x2c
,
0x51
};
template
<
>
const
uint8_t
Tests
<
IsoEd25519
>::
rfc7748_1000000
[
32
]
=
{
template
<
>
const
uint8_t
Tests
<
Ristretto
>::
rfc7748_1000000
[
32
]
=
{
0x7c
,
0x39
,
0x11
,
0xe0
,
0xab
,
0x25
,
0x86
,
0xfd
,
0x86
,
0x44
,
0x97
,
0x29
,
0x7e
,
0x57
,
0x5e
,
0x6f
,
0x3b
,
0xc6
,
0x01
,
0xc0
,
0x88
,
0x3c
,
0x30
,
0xdf
,
...
...
@@ -53,7 +53,7 @@ const uint8_t sm1_25519[32] = {
0xa7
,
0xd7
,
0xfb
,
0x3d
,
0x99
,
0x00
,
0x4d
,
0x2b
,
0x0b
,
0xdf
,
0xc1
,
0x4f
,
0x80
,
0x24
,
0x83
,
0x2b
};
template
<
>
const
Block
Tests
<
IsoEd25519
>::
sqrt_minus_one
(
sm1_25519
,
32
);
template
<
>
const
Block
Tests
<
Ristretto
>::
sqrt_minus_one
(
sm1_25519
,
32
);
template
<
>
const
Block
Tests
<
Ed448Goldilocks
>::
minus_sqrt_minus_one
(
NULL
,
0
);
const
uint8_t
msm1_25519
[
32
]
=
{
...
...
@@ -62,7 +62,7 @@ const uint8_t msm1_25519[32] = {
0x58
,
0x28
,
0x04
,
0xc2
,
0x66
,
0xff
,
0xb2
,
0xd4
,
0xf4
,
0x20
,
0x3e
,
0xb0
,
0x7f
,
0xdb
,
0x7c
,
0x54
};
template
<
>
const
Block
Tests
<
IsoEd25519
>::
minus_sqrt_minus_one
(
msm1_25519
,
32
);
template
<
>
const
Block
Tests
<
Ristretto
>::
minus_sqrt_minus_one
(
msm1_25519
,
32
);
const
uint8_t
elli_patho_448
[
56
]
=
{
0x14
,
0xf0
,
0x70
,
0x58
,
0x41
,
0xc7
,
0xf9
,
0xa5
,
...
...
@@ -74,7 +74,7 @@ const uint8_t elli_patho_448[56] = {
0x86
,
0xa9
,
0x2e
,
0xc9
,
0x17
,
0x68
,
0x9b
,
0x20
};
template
<
>
const
Block
Tests
<
Ed448Goldilocks
>::
elli_patho
(
elli_patho_448
,
56
);
template
<
>
const
Block
Tests
<
IsoEd25519
>::
elli_patho
(
NULL
,
0
);
template
<
>
const
Block
Tests
<
Ristretto
>::
elli_patho
(
NULL
,
0
);
/* EdDSA test vectors */
const
uint8_t
ed448_eddsa_sk
[][
57
]
=
{{
...
...
@@ -481,7 +481,7 @@ const uint8_t ed25519_eddsa_sig[][64] = {{
0x91
,
0xc2
,
0x04
,
0x3d
,
0x4e
,
0xb3
,
0xe9
,
0x0d
}};
template
<
>
const
bool
Tests
<
IsoEd25519
>::
eddsa_prehashed
[]
=
{
template
<
>
const
bool
Tests
<
Ristretto
>::
eddsa_prehashed
[]
=
{
false
,
false
,
false
,
...
...
@@ -489,7 +489,7 @@ template<> const bool Tests<IsoEd25519>::eddsa_prehashed[] = {
false
,
false
};
template
<
>
const
Block
Tests
<
IsoEd25519
>::
eddsa_sk
[]
=
{
template
<
>
const
Block
Tests
<
Ristretto
>::
eddsa_sk
[]
=
{
Block
(
ed25519_eddsa_sk
[
0
],
32
),
Block
(
ed25519_eddsa_sk
[
1
],
32
),
Block
(
ed25519_eddsa_sk
[
2
],
32
),
...
...
@@ -498,7 +498,7 @@ template<> const Block Tests<IsoEd25519>::eddsa_sk[] = {
Block
(
ed25519_eddsa_sk
[
4
],
32
),
Block
(
NULL
,
0
)
};
template
<
>
const
Block
Tests
<
IsoEd25519
>::
eddsa_pk
[]
=
{
template
<
>
const
Block
Tests
<
Ristretto
>::
eddsa_pk
[]
=
{
Block
(
ed25519_eddsa_pk
[
0
],
32
),
Block
(
ed25519_eddsa_pk
[
1
],
32
),
Block
(
ed25519_eddsa_pk
[
2
],
32
),
...
...
@@ -506,15 +506,15 @@ template<> const Block Tests<IsoEd25519>::eddsa_pk[] = {
Block
(
ed25519_eddsa_pk
[
4
],
32
),
Block
(
ed25519_eddsa_pk
[
4
],
32
)
};
template
<
>
const
Block
Tests
<
IsoEd25519
>::
eddsa_context
[]
=
{
EdDSA
<
IsoEd25519
>::
NO_CONTEXT
(),
EdDSA
<
IsoEd25519
>::
NO_CONTEXT
(),
EdDSA
<
IsoEd25519
>::
NO_CONTEXT
(),
template
<
>
const
Block
Tests
<
Ristretto
>::
eddsa_context
[]
=
{
EdDSA
<
Ristretto
>::
NO_CONTEXT
(),
EdDSA
<
Ristretto
>::
NO_CONTEXT
(),
EdDSA
<
Ristretto
>::
NO_CONTEXT
(),
Block
(
NULL
,
0
),
Block
(
ed25519_eddsa_context
[
0
],
3
),
Block
(
ed25519_eddsa_context
[
1
],
3
)
};
template
<
>
const
Block
Tests
<
IsoEd25519
>::
eddsa_message
[]
=
{
template
<
>
const
Block
Tests
<
Ristretto
>::
eddsa_message
[]
=
{
Block
(
ed25519_eddsa_message
[
0
],
0
),
Block
(
ed25519_eddsa_message
[
1
],
1
),
Block
(
ed25519_eddsa_message
[
2
],
2
),
...
...
@@ -522,7 +522,7 @@ template<> const Block Tests<IsoEd25519>::eddsa_message[] = {
Block
(
ed25519_eddsa_message
[
4
],
16
),
Block
(
ed25519_eddsa_message
[
4
],
16
)
};
template
<
>
const
Block
Tests
<
IsoEd25519
>::
eddsa_sig
[]
=
{
template
<
>
const
Block
Tests
<
Ristretto
>::
eddsa_sig
[]
=
{
Block
(
ed25519_eddsa_sig
[
0
],
64
),
Block
(
ed25519_eddsa_sig
[
1
],
64
),
Block
(
ed25519_eddsa_sig
[
2
],
64
),
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment