ed25519 1.2.1 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/CHANGES.md +51 -17
- data/LICENSE +1 -1
- data/README.md +29 -14
- data/ed25519.png +0 -0
- data/ext/ed25519_jruby/org/{cryptosphere → cryptorb}/Ed25519Provider.java +1 -1
- data/ext/ed25519_ref10/extconf.rb +2 -2
- data/ext/ed25519_ref10/fe.c +1085 -0
- data/ext/ed25519_ref10/ge.c +407 -0
- data/lib/ed25519/verify_key.rb +2 -1
- data/lib/ed25519/version.rb +1 -1
- data/lib/ed25519.rb +8 -8
- data/lib/ed25519_jruby.jar +0 -0
- metadata +23 -60
- data/.gitignore +0 -16
- data/.rspec +0 -5
- data/.rubocop.yml +0 -35
- data/.travis.yml +0 -15
- data/CODE_OF_CONDUCT.md +0 -74
- data/Gemfile +0 -12
- data/Rakefile +0 -27
- data/ed25519.gemspec +0 -32
- data/ext/ed25519_ref10/fe_0.c +0 -19
- data/ext/ed25519_ref10/fe_1.c +0 -19
- data/ext/ed25519_ref10/fe_add.c +0 -57
- data/ext/ed25519_ref10/fe_cmov.c +0 -63
- data/ext/ed25519_ref10/fe_copy.c +0 -29
- data/ext/ed25519_ref10/fe_frombytes.c +0 -71
- data/ext/ed25519_ref10/fe_invert.c +0 -14
- data/ext/ed25519_ref10/fe_isnegative.c +0 -16
- data/ext/ed25519_ref10/fe_isnonzero.c +0 -19
- data/ext/ed25519_ref10/fe_mul.c +0 -252
- data/ext/ed25519_ref10/fe_neg.c +0 -45
- data/ext/ed25519_ref10/fe_pow22523.c +0 -13
- data/ext/ed25519_ref10/fe_sq.c +0 -148
- data/ext/ed25519_ref10/fe_sq2.c +0 -159
- data/ext/ed25519_ref10/fe_sub.c +0 -57
- data/ext/ed25519_ref10/fe_tobytes.c +0 -119
- data/ext/ed25519_ref10/ge_add.c +0 -11
- data/ext/ed25519_ref10/ge_double_scalarmult.c +0 -96
- data/ext/ed25519_ref10/ge_frombytes.c +0 -50
- data/ext/ed25519_ref10/ge_madd.c +0 -11
- data/ext/ed25519_ref10/ge_msub.c +0 -11
- data/ext/ed25519_ref10/ge_p1p1_to_p2.c +0 -12
- data/ext/ed25519_ref10/ge_p1p1_to_p3.c +0 -13
- data/ext/ed25519_ref10/ge_p2_0.c +0 -8
- data/ext/ed25519_ref10/ge_p2_dbl.c +0 -11
- data/ext/ed25519_ref10/ge_p3_0.c +0 -9
- data/ext/ed25519_ref10/ge_p3_dbl.c +0 -12
- data/ext/ed25519_ref10/ge_p3_to_cached.c +0 -17
- data/ext/ed25519_ref10/ge_p3_to_p2.c +0 -12
- data/ext/ed25519_ref10/ge_p3_tobytes.c +0 -14
- data/ext/ed25519_ref10/ge_precomp_0.c +0 -8
- data/ext/ed25519_ref10/ge_scalarmult_base.c +0 -104
- data/ext/ed25519_ref10/ge_sub.c +0 -11
- data/ext/ed25519_ref10/ge_tobytes.c +0 -14
@@ -0,0 +1,407 @@
|
|
1
|
+
#include "ge.h"
|
2
|
+
|
3
|
+
/*
|
4
|
+
r = p + q
|
5
|
+
*/
|
6
|
+
|
7
|
+
void ge_add(ge_p1p1 *r,const ge_p3 *p,const ge_cached *q)
|
8
|
+
{
|
9
|
+
fe t0;
|
10
|
+
#include "ge_add.h"
|
11
|
+
}
|
12
|
+
|
13
|
+
static void slide(signed char *r,const unsigned char *a)
|
14
|
+
{
|
15
|
+
int i;
|
16
|
+
int b;
|
17
|
+
int k;
|
18
|
+
|
19
|
+
for (i = 0;i < 256;++i)
|
20
|
+
r[i] = 1 & (a[i >> 3] >> (i & 7));
|
21
|
+
|
22
|
+
for (i = 0;i < 256;++i)
|
23
|
+
if (r[i]) {
|
24
|
+
for (b = 1;b <= 6 && i + b < 256;++b) {
|
25
|
+
if (r[i + b]) {
|
26
|
+
if (r[i] + (r[i + b] << b) <= 15) {
|
27
|
+
r[i] += r[i + b] << b; r[i + b] = 0;
|
28
|
+
} else if (r[i] - (r[i + b] << b) >= -15) {
|
29
|
+
r[i] -= r[i + b] << b;
|
30
|
+
for (k = i + b;k < 256;++k) {
|
31
|
+
if (!r[k]) {
|
32
|
+
r[k] = 1;
|
33
|
+
break;
|
34
|
+
}
|
35
|
+
r[k] = 0;
|
36
|
+
}
|
37
|
+
} else
|
38
|
+
break;
|
39
|
+
}
|
40
|
+
}
|
41
|
+
}
|
42
|
+
|
43
|
+
}
|
44
|
+
|
45
|
+
static ge_precomp Bi[8] = {
|
46
|
+
#include "base2.h"
|
47
|
+
} ;
|
48
|
+
|
49
|
+
/*
|
50
|
+
r = a * A + b * B
|
51
|
+
where a = a[0]+256*a[1]+...+256^31 a[31].
|
52
|
+
and b = b[0]+256*b[1]+...+256^31 b[31].
|
53
|
+
B is the Ed25519 base point (x,4/5) with x positive.
|
54
|
+
*/
|
55
|
+
|
56
|
+
void ge_double_scalarmult_vartime(ge_p2 *r,const unsigned char *a,const ge_p3 *A,const unsigned char *b)
|
57
|
+
{
|
58
|
+
signed char aslide[256];
|
59
|
+
signed char bslide[256];
|
60
|
+
ge_cached Ai[8]; /* A,3A,5A,7A,9A,11A,13A,15A */
|
61
|
+
ge_p1p1 t;
|
62
|
+
ge_p3 u;
|
63
|
+
ge_p3 A2;
|
64
|
+
int i;
|
65
|
+
|
66
|
+
slide(aslide,a);
|
67
|
+
slide(bslide,b);
|
68
|
+
|
69
|
+
ge_p3_to_cached(&Ai[0],A);
|
70
|
+
ge_p3_dbl(&t,A); ge_p1p1_to_p3(&A2,&t);
|
71
|
+
ge_add(&t,&A2,&Ai[0]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[1],&u);
|
72
|
+
ge_add(&t,&A2,&Ai[1]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[2],&u);
|
73
|
+
ge_add(&t,&A2,&Ai[2]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[3],&u);
|
74
|
+
ge_add(&t,&A2,&Ai[3]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[4],&u);
|
75
|
+
ge_add(&t,&A2,&Ai[4]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[5],&u);
|
76
|
+
ge_add(&t,&A2,&Ai[5]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[6],&u);
|
77
|
+
ge_add(&t,&A2,&Ai[6]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[7],&u);
|
78
|
+
|
79
|
+
ge_p2_0(r);
|
80
|
+
|
81
|
+
for (i = 255;i >= 0;--i) {
|
82
|
+
if (aslide[i] || bslide[i]) break;
|
83
|
+
}
|
84
|
+
|
85
|
+
for (;i >= 0;--i) {
|
86
|
+
ge_p2_dbl(&t,r);
|
87
|
+
|
88
|
+
if (aslide[i] > 0) {
|
89
|
+
ge_p1p1_to_p3(&u,&t);
|
90
|
+
ge_add(&t,&u,&Ai[aslide[i]/2]);
|
91
|
+
} else if (aslide[i] < 0) {
|
92
|
+
ge_p1p1_to_p3(&u,&t);
|
93
|
+
ge_sub(&t,&u,&Ai[(-aslide[i])/2]);
|
94
|
+
}
|
95
|
+
|
96
|
+
if (bslide[i] > 0) {
|
97
|
+
ge_p1p1_to_p3(&u,&t);
|
98
|
+
ge_madd(&t,&u,&Bi[bslide[i]/2]);
|
99
|
+
} else if (bslide[i] < 0) {
|
100
|
+
ge_p1p1_to_p3(&u,&t);
|
101
|
+
ge_msub(&t,&u,&Bi[(-bslide[i])/2]);
|
102
|
+
}
|
103
|
+
|
104
|
+
ge_p1p1_to_p2(r,&t);
|
105
|
+
}
|
106
|
+
}
|
107
|
+
|
108
|
+
static const fe d = {
|
109
|
+
#include "d.h"
|
110
|
+
} ;
|
111
|
+
|
112
|
+
static const fe sqrtm1 = {
|
113
|
+
#include "sqrtm1.h"
|
114
|
+
} ;
|
115
|
+
|
116
|
+
int ge_frombytes_negate_vartime(ge_p3 *h,const unsigned char *s)
|
117
|
+
{
|
118
|
+
fe u;
|
119
|
+
fe v;
|
120
|
+
fe v3;
|
121
|
+
fe vxx;
|
122
|
+
fe check;
|
123
|
+
|
124
|
+
fe_frombytes(h->Y,s);
|
125
|
+
fe_1(h->Z);
|
126
|
+
fe_sq(u,h->Y);
|
127
|
+
fe_mul(v,u,d);
|
128
|
+
fe_sub(u,u,h->Z); /* u = y^2-1 */
|
129
|
+
fe_add(v,v,h->Z); /* v = dy^2+1 */
|
130
|
+
|
131
|
+
fe_sq(v3,v);
|
132
|
+
fe_mul(v3,v3,v); /* v3 = v^3 */
|
133
|
+
fe_sq(h->X,v3);
|
134
|
+
fe_mul(h->X,h->X,v);
|
135
|
+
fe_mul(h->X,h->X,u); /* x = uv^7 */
|
136
|
+
|
137
|
+
fe_pow22523(h->X,h->X); /* x = (uv^7)^((q-5)/8) */
|
138
|
+
fe_mul(h->X,h->X,v3);
|
139
|
+
fe_mul(h->X,h->X,u); /* x = uv^3(uv^7)^((q-5)/8) */
|
140
|
+
|
141
|
+
fe_sq(vxx,h->X);
|
142
|
+
fe_mul(vxx,vxx,v);
|
143
|
+
fe_sub(check,vxx,u); /* vx^2-u */
|
144
|
+
if (fe_isnonzero(check)) {
|
145
|
+
fe_add(check,vxx,u); /* vx^2+u */
|
146
|
+
if (fe_isnonzero(check)) return -1;
|
147
|
+
fe_mul(h->X,h->X,sqrtm1);
|
148
|
+
}
|
149
|
+
|
150
|
+
if (fe_isnegative(h->X) == (s[31] >> 7))
|
151
|
+
fe_neg(h->X,h->X);
|
152
|
+
|
153
|
+
fe_mul(h->T,h->X,h->Y);
|
154
|
+
return 0;
|
155
|
+
}
|
156
|
+
|
157
|
+
/*
|
158
|
+
r = p + q
|
159
|
+
*/
|
160
|
+
|
161
|
+
void ge_madd(ge_p1p1 *r,const ge_p3 *p,const ge_precomp *q)
|
162
|
+
{
|
163
|
+
fe t0;
|
164
|
+
#include "ge_madd.h"
|
165
|
+
}
|
166
|
+
|
167
|
+
/*
|
168
|
+
r = p - q
|
169
|
+
*/
|
170
|
+
|
171
|
+
void ge_msub(ge_p1p1 *r,const ge_p3 *p,const ge_precomp *q)
|
172
|
+
{
|
173
|
+
fe t0;
|
174
|
+
#include "ge_msub.h"
|
175
|
+
}
|
176
|
+
|
177
|
+
/*
|
178
|
+
r = p
|
179
|
+
*/
|
180
|
+
|
181
|
+
extern void ge_p1p1_to_p2(ge_p2 *r,const ge_p1p1 *p)
|
182
|
+
{
|
183
|
+
fe_mul(r->X,p->X,p->T);
|
184
|
+
fe_mul(r->Y,p->Y,p->Z);
|
185
|
+
fe_mul(r->Z,p->Z,p->T);
|
186
|
+
}
|
187
|
+
|
188
|
+
/*
|
189
|
+
r = p
|
190
|
+
*/
|
191
|
+
|
192
|
+
extern void ge_p1p1_to_p3(ge_p3 *r,const ge_p1p1 *p)
|
193
|
+
{
|
194
|
+
fe_mul(r->X,p->X,p->T);
|
195
|
+
fe_mul(r->Y,p->Y,p->Z);
|
196
|
+
fe_mul(r->Z,p->Z,p->T);
|
197
|
+
fe_mul(r->T,p->X,p->Y);
|
198
|
+
}
|
199
|
+
|
200
|
+
void ge_p2_0(ge_p2 *h)
|
201
|
+
{
|
202
|
+
fe_0(h->X);
|
203
|
+
fe_1(h->Y);
|
204
|
+
fe_1(h->Z);
|
205
|
+
}
|
206
|
+
|
207
|
+
/*
|
208
|
+
r = 2 * p
|
209
|
+
*/
|
210
|
+
|
211
|
+
void ge_p2_dbl(ge_p1p1 *r,const ge_p2 *p)
|
212
|
+
{
|
213
|
+
fe t0;
|
214
|
+
#include "ge_p2_dbl.h"
|
215
|
+
}
|
216
|
+
|
217
|
+
void ge_p3_0(ge_p3 *h)
|
218
|
+
{
|
219
|
+
fe_0(h->X);
|
220
|
+
fe_1(h->Y);
|
221
|
+
fe_1(h->Z);
|
222
|
+
fe_0(h->T);
|
223
|
+
}
|
224
|
+
|
225
|
+
/*
|
226
|
+
r = 2 * p
|
227
|
+
*/
|
228
|
+
|
229
|
+
void ge_p3_dbl(ge_p1p1 *r,const ge_p3 *p)
|
230
|
+
{
|
231
|
+
ge_p2 q;
|
232
|
+
ge_p3_to_p2(&q,p);
|
233
|
+
ge_p2_dbl(r,&q);
|
234
|
+
}
|
235
|
+
|
236
|
+
/*
|
237
|
+
r = p
|
238
|
+
*/
|
239
|
+
|
240
|
+
static const fe d2 = {
|
241
|
+
#include "d2.h"
|
242
|
+
} ;
|
243
|
+
|
244
|
+
extern void ge_p3_to_cached(ge_cached *r,const ge_p3 *p)
|
245
|
+
{
|
246
|
+
fe_add(r->YplusX,p->Y,p->X);
|
247
|
+
fe_sub(r->YminusX,p->Y,p->X);
|
248
|
+
fe_copy(r->Z,p->Z);
|
249
|
+
fe_mul(r->T2d,p->T,d2);
|
250
|
+
}
|
251
|
+
|
252
|
+
/*
|
253
|
+
r = p
|
254
|
+
*/
|
255
|
+
|
256
|
+
extern void ge_p3_to_p2(ge_p2 *r,const ge_p3 *p)
|
257
|
+
{
|
258
|
+
fe_copy(r->X,p->X);
|
259
|
+
fe_copy(r->Y,p->Y);
|
260
|
+
fe_copy(r->Z,p->Z);
|
261
|
+
}
|
262
|
+
|
263
|
+
void ge_p3_tobytes(unsigned char *s,const ge_p3 *h)
|
264
|
+
{
|
265
|
+
fe recip;
|
266
|
+
fe x;
|
267
|
+
fe y;
|
268
|
+
|
269
|
+
fe_invert(recip,h->Z);
|
270
|
+
fe_mul(x,h->X,recip);
|
271
|
+
fe_mul(y,h->Y,recip);
|
272
|
+
fe_tobytes(s,y);
|
273
|
+
s[31] ^= fe_isnegative(x) << 7;
|
274
|
+
}
|
275
|
+
|
276
|
+
void ge_precomp_0(ge_precomp *h)
|
277
|
+
{
|
278
|
+
fe_1(h->yplusx);
|
279
|
+
fe_1(h->yminusx);
|
280
|
+
fe_0(h->xy2d);
|
281
|
+
}
|
282
|
+
|
283
|
+
static uint8_t equal(int8_t b,int8_t c)
|
284
|
+
{
|
285
|
+
uint8_t ub = b;
|
286
|
+
uint8_t uc = c;
|
287
|
+
uint8_t x = ub ^ uc; /* 0: yes; 1..255: no */
|
288
|
+
uint32_t y = x; /* 0: yes; 1..255: no */
|
289
|
+
y -= 1; /* 4294967295: yes; 0..254: no */
|
290
|
+
y >>= 31; /* 1: yes; 0: no */
|
291
|
+
return y;
|
292
|
+
}
|
293
|
+
|
294
|
+
static uint8_t negative(int8_t b)
|
295
|
+
{
|
296
|
+
unsigned long long x = b; /* 18446744073709551361..18446744073709551615: yes; 0..255: no */
|
297
|
+
x >>= 63; /* 1: yes; 0: no */
|
298
|
+
return x;
|
299
|
+
}
|
300
|
+
|
301
|
+
static void cmov(ge_precomp *t,ge_precomp *u,int8_t b)
|
302
|
+
{
|
303
|
+
fe_cmov(t->yplusx,u->yplusx,b);
|
304
|
+
fe_cmov(t->yminusx,u->yminusx,b);
|
305
|
+
fe_cmov(t->xy2d,u->xy2d,b);
|
306
|
+
}
|
307
|
+
|
308
|
+
/* base[i][j] = (j+1)*256^i*B */
|
309
|
+
static ge_precomp base[32][8] = {
|
310
|
+
#include "base.h"
|
311
|
+
} ;
|
312
|
+
|
313
|
+
static void select(ge_precomp *t,int pos,int8_t b)
|
314
|
+
{
|
315
|
+
ge_precomp minust;
|
316
|
+
uint8_t bnegative = negative(b);
|
317
|
+
uint8_t babs = b - (((-bnegative) & b) << 1);
|
318
|
+
|
319
|
+
ge_precomp_0(t);
|
320
|
+
cmov(t,&base[pos][0],equal(babs,1));
|
321
|
+
cmov(t,&base[pos][1],equal(babs,2));
|
322
|
+
cmov(t,&base[pos][2],equal(babs,3));
|
323
|
+
cmov(t,&base[pos][3],equal(babs,4));
|
324
|
+
cmov(t,&base[pos][4],equal(babs,5));
|
325
|
+
cmov(t,&base[pos][5],equal(babs,6));
|
326
|
+
cmov(t,&base[pos][6],equal(babs,7));
|
327
|
+
cmov(t,&base[pos][7],equal(babs,8));
|
328
|
+
fe_copy(minust.yplusx,t->yminusx);
|
329
|
+
fe_copy(minust.yminusx,t->yplusx);
|
330
|
+
fe_neg(minust.xy2d,t->xy2d);
|
331
|
+
cmov(t,&minust,bnegative);
|
332
|
+
}
|
333
|
+
|
334
|
+
/*
|
335
|
+
h = a * B
|
336
|
+
where a = a[0]+256*a[1]+...+256^31 a[31]
|
337
|
+
B is the Ed25519 base point (x,4/5) with x positive.
|
338
|
+
|
339
|
+
Preconditions:
|
340
|
+
a[31] <= 127
|
341
|
+
*/
|
342
|
+
|
343
|
+
void ge_scalarmult_base(ge_p3 *h,const uint8_t *a)
|
344
|
+
{
|
345
|
+
int8_t e[64];
|
346
|
+
int8_t carry;
|
347
|
+
ge_p1p1 r;
|
348
|
+
ge_p2 s;
|
349
|
+
ge_precomp t;
|
350
|
+
int i;
|
351
|
+
|
352
|
+
for (i = 0;i < 32;++i) {
|
353
|
+
e[2 * i + 0] = (a[i] >> 0) & 15;
|
354
|
+
e[2 * i + 1] = (a[i] >> 4) & 15;
|
355
|
+
}
|
356
|
+
/* each e[i] is between 0 and 15 */
|
357
|
+
/* e[63] is between 0 and 7 */
|
358
|
+
|
359
|
+
carry = 0;
|
360
|
+
for (i = 0;i < 63;++i) {
|
361
|
+
e[i] += carry;
|
362
|
+
carry = e[i] + 8;
|
363
|
+
carry >>= 4;
|
364
|
+
e[i] -= carry << 4;
|
365
|
+
}
|
366
|
+
e[63] += carry;
|
367
|
+
/* each e[i] is between -8 and 8 */
|
368
|
+
|
369
|
+
ge_p3_0(h);
|
370
|
+
for (i = 1;i < 64;i += 2) {
|
371
|
+
select(&t,i / 2,e[i]);
|
372
|
+
ge_madd(&r,h,&t); ge_p1p1_to_p3(h,&r);
|
373
|
+
}
|
374
|
+
|
375
|
+
ge_p3_dbl(&r,h); ge_p1p1_to_p2(&s,&r);
|
376
|
+
ge_p2_dbl(&r,&s); ge_p1p1_to_p2(&s,&r);
|
377
|
+
ge_p2_dbl(&r,&s); ge_p1p1_to_p2(&s,&r);
|
378
|
+
ge_p2_dbl(&r,&s); ge_p1p1_to_p3(h,&r);
|
379
|
+
|
380
|
+
for (i = 0;i < 64;i += 2) {
|
381
|
+
select(&t,i / 2,e[i]);
|
382
|
+
ge_madd(&r,h,&t); ge_p1p1_to_p3(h,&r);
|
383
|
+
}
|
384
|
+
}
|
385
|
+
|
386
|
+
/*
|
387
|
+
r = p - q
|
388
|
+
*/
|
389
|
+
|
390
|
+
void ge_sub(ge_p1p1 *r,const ge_p3 *p,const ge_cached *q)
|
391
|
+
{
|
392
|
+
fe t0;
|
393
|
+
#include "ge_sub.h"
|
394
|
+
}
|
395
|
+
|
396
|
+
void ge_tobytes(unsigned char *s,const ge_p2 *h)
|
397
|
+
{
|
398
|
+
fe recip;
|
399
|
+
fe x;
|
400
|
+
fe y;
|
401
|
+
|
402
|
+
fe_invert(recip,h->Z);
|
403
|
+
fe_mul(x,h->X,recip);
|
404
|
+
fe_mul(y,h->Y,recip);
|
405
|
+
fe_tobytes(s,y);
|
406
|
+
s[31] ^= fe_isnegative(x) << 7;
|
407
|
+
}
|
data/lib/ed25519/verify_key.rb
CHANGED
@@ -25,6 +25,7 @@ module Ed25519
|
|
25
25
|
end
|
26
26
|
|
27
27
|
return true if Ed25519.provider.verify(@key_bytes, signature, message)
|
28
|
+
|
28
29
|
raise VerifyError, "signature verification failed!"
|
29
30
|
end
|
30
31
|
|
@@ -38,7 +39,7 @@ module Ed25519
|
|
38
39
|
|
39
40
|
# Show hex representation of serialized coordinate in string inspection
|
40
41
|
def inspect
|
41
|
-
"#<#{self.class}:#{@key_bytes.
|
42
|
+
"#<#{self.class}:#{@key_bytes.unpack1('H*')}>"
|
42
43
|
end
|
43
44
|
end
|
44
45
|
end
|
data/lib/ed25519/version.rb
CHANGED
data/lib/ed25519.rb
CHANGED
@@ -5,7 +5,7 @@ require "ed25519/signing_key"
|
|
5
5
|
require "ed25519/verify_key"
|
6
6
|
|
7
7
|
# The Ed25519 digital signatre algorithm
|
8
|
-
# rubocop:disable
|
8
|
+
# rubocop:disable Layout/LineLength
|
9
9
|
module Ed25519
|
10
10
|
module_function
|
11
11
|
|
@@ -28,8 +28,9 @@ module Ed25519
|
|
28
28
|
|
29
29
|
# Select the Ed25519::Provider to use based on the current environment
|
30
30
|
if defined? JRUBY_VERSION
|
31
|
+
require "jruby"
|
31
32
|
require "ed25519_jruby"
|
32
|
-
self.provider = org.
|
33
|
+
self.provider = org.cryptorb.Ed25519Provider.createEd25519Module(JRuby.runtime)
|
33
34
|
else
|
34
35
|
require "ed25519_ref10"
|
35
36
|
self.provider = Ed25519::Provider::Ref10
|
@@ -39,34 +40,33 @@ module Ed25519
|
|
39
40
|
def validate_key_bytes(key_bytes)
|
40
41
|
raise TypeError, "expected String, got #{key_bytes.class}" unless key_bytes.is_a?(String)
|
41
42
|
return true if key_bytes.bytesize == KEY_SIZE
|
43
|
+
|
42
44
|
raise ArgumentError, "expected #{KEY_SIZE}-byte String, got #{key_bytes.bytesize}"
|
43
45
|
end
|
44
46
|
|
45
47
|
# Perform a self-test to ensure the selected provider is working
|
46
48
|
def self_test
|
47
49
|
signature_key = Ed25519::SigningKey.new("A" * 32)
|
48
|
-
raise SelfTestFailure, "failed to generate verify key correctly" unless signature_key.verify_key.to_bytes.
|
50
|
+
raise SelfTestFailure, "failed to generate verify key correctly" unless signature_key.verify_key.to_bytes.unpack1("H*") == "db995fe25169d141cab9bbba92baa01f9f2e1ece7df4cb2ac05190f37fcc1f9d"
|
49
51
|
|
50
52
|
message = "crypto libraries should self-test on boot"
|
51
53
|
signature = signature_key.sign(message)
|
52
|
-
raise SelfTestFailure, "failed to generate correct signature" unless signature.
|
54
|
+
raise SelfTestFailure, "failed to generate correct signature" unless signature.unpack1("H*") == "c62c12a3a6cbfa04800d4be81468ef8aecd152a6a26a81d91257baecef13ba209531fe905a843e833c8b71cee04400fa2af3a29fef1152ece470421848758d0a"
|
53
55
|
|
54
56
|
verify_key = signature_key.verify_key
|
55
57
|
raise SelfTestFailure, "failed to verify a valid signature" unless verify_key.verify(signature, message)
|
56
58
|
|
57
|
-
bad_signature = signature[0...63]
|
59
|
+
bad_signature = "#{signature[0...63]}X"
|
58
60
|
ex = nil
|
59
|
-
|
60
|
-
# rubocop:disable Lint/HandleExceptions
|
61
61
|
begin
|
62
62
|
verify_key.verify(bad_signature, message)
|
63
63
|
rescue Ed25519::VerifyError => ex
|
64
64
|
end
|
65
|
-
# rubocop:enable Lint/HandleExceptions
|
66
65
|
|
67
66
|
raise SelfTestFailure, "failed to detect an invalid signature" unless ex.is_a?(Ed25519::VerifyError)
|
68
67
|
end
|
69
68
|
end
|
69
|
+
# rubocop:enable Layout/LineLength
|
70
70
|
|
71
71
|
# Automatically run self-test when library loads
|
72
72
|
Ed25519.self_test
|
Binary file
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ed25519
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tony Arcieri
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-01-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0'
|
27
27
|
description: A Ruby binding to the Ed25519 elliptic curve public-key signature system
|
28
28
|
described in RFC 8032.
|
29
29
|
email:
|
@@ -31,19 +31,13 @@ email:
|
|
31
31
|
executables: []
|
32
32
|
extensions:
|
33
33
|
- ext/ed25519_ref10/extconf.rb
|
34
|
-
extra_rdoc_files:
|
34
|
+
extra_rdoc_files:
|
35
|
+
- README.md
|
36
|
+
- ed25519.png
|
35
37
|
files:
|
36
|
-
- .gitignore
|
37
|
-
- .rspec
|
38
|
-
- .rubocop.yml
|
39
|
-
- .travis.yml
|
40
38
|
- CHANGES.md
|
41
|
-
- CODE_OF_CONDUCT.md
|
42
|
-
- Gemfile
|
43
39
|
- LICENSE
|
44
40
|
- README.md
|
45
|
-
- Rakefile
|
46
|
-
- ed25519.gemspec
|
47
41
|
- ed25519.png
|
48
42
|
- ext/ed25519_jruby/LICENSE.txt
|
49
43
|
- ext/ed25519_jruby/README.md
|
@@ -75,7 +69,7 @@ files:
|
|
75
69
|
- ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSAParameterSpec.java
|
76
70
|
- ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSAPrivateKeySpec.java
|
77
71
|
- ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSAPublicKeySpec.java
|
78
|
-
- ext/ed25519_jruby/org/
|
72
|
+
- ext/ed25519_jruby/org/cryptorb/Ed25519Provider.java
|
79
73
|
- ext/ed25519_ref10/api.h
|
80
74
|
- ext/ed25519_ref10/base.h
|
81
75
|
- ext/ed25519_ref10/base2.h
|
@@ -84,47 +78,15 @@ files:
|
|
84
78
|
- ext/ed25519_ref10/ed25519_ref10.c
|
85
79
|
- ext/ed25519_ref10/ed25519_ref10.h
|
86
80
|
- ext/ed25519_ref10/extconf.rb
|
81
|
+
- ext/ed25519_ref10/fe.c
|
87
82
|
- ext/ed25519_ref10/fe.h
|
88
|
-
- ext/ed25519_ref10/
|
89
|
-
- ext/ed25519_ref10/fe_1.c
|
90
|
-
- ext/ed25519_ref10/fe_add.c
|
91
|
-
- ext/ed25519_ref10/fe_cmov.c
|
92
|
-
- ext/ed25519_ref10/fe_copy.c
|
93
|
-
- ext/ed25519_ref10/fe_frombytes.c
|
94
|
-
- ext/ed25519_ref10/fe_invert.c
|
95
|
-
- ext/ed25519_ref10/fe_isnegative.c
|
96
|
-
- ext/ed25519_ref10/fe_isnonzero.c
|
97
|
-
- ext/ed25519_ref10/fe_mul.c
|
98
|
-
- ext/ed25519_ref10/fe_neg.c
|
99
|
-
- ext/ed25519_ref10/fe_pow22523.c
|
100
|
-
- ext/ed25519_ref10/fe_sq.c
|
101
|
-
- ext/ed25519_ref10/fe_sq2.c
|
102
|
-
- ext/ed25519_ref10/fe_sub.c
|
103
|
-
- ext/ed25519_ref10/fe_tobytes.c
|
83
|
+
- ext/ed25519_ref10/ge.c
|
104
84
|
- ext/ed25519_ref10/ge.h
|
105
|
-
- ext/ed25519_ref10/ge_add.c
|
106
85
|
- ext/ed25519_ref10/ge_add.h
|
107
|
-
- ext/ed25519_ref10/ge_double_scalarmult.c
|
108
|
-
- ext/ed25519_ref10/ge_frombytes.c
|
109
|
-
- ext/ed25519_ref10/ge_madd.c
|
110
86
|
- ext/ed25519_ref10/ge_madd.h
|
111
|
-
- ext/ed25519_ref10/ge_msub.c
|
112
87
|
- ext/ed25519_ref10/ge_msub.h
|
113
|
-
- ext/ed25519_ref10/ge_p1p1_to_p2.c
|
114
|
-
- ext/ed25519_ref10/ge_p1p1_to_p3.c
|
115
|
-
- ext/ed25519_ref10/ge_p2_0.c
|
116
|
-
- ext/ed25519_ref10/ge_p2_dbl.c
|
117
88
|
- ext/ed25519_ref10/ge_p2_dbl.h
|
118
|
-
- ext/ed25519_ref10/ge_p3_0.c
|
119
|
-
- ext/ed25519_ref10/ge_p3_dbl.c
|
120
|
-
- ext/ed25519_ref10/ge_p3_to_cached.c
|
121
|
-
- ext/ed25519_ref10/ge_p3_to_p2.c
|
122
|
-
- ext/ed25519_ref10/ge_p3_tobytes.c
|
123
|
-
- ext/ed25519_ref10/ge_precomp_0.c
|
124
|
-
- ext/ed25519_ref10/ge_scalarmult_base.c
|
125
|
-
- ext/ed25519_ref10/ge_sub.c
|
126
89
|
- ext/ed25519_ref10/ge_sub.h
|
127
|
-
- ext/ed25519_ref10/ge_tobytes.c
|
128
90
|
- ext/ed25519_ref10/keypair.c
|
129
91
|
- ext/ed25519_ref10/open.c
|
130
92
|
- ext/ed25519_ref10/pow22523.h
|
@@ -141,27 +103,28 @@ files:
|
|
141
103
|
- lib/ed25519/signing_key.rb
|
142
104
|
- lib/ed25519/verify_key.rb
|
143
105
|
- lib/ed25519/version.rb
|
144
|
-
|
145
|
-
|
106
|
+
- lib/ed25519_jruby.jar
|
107
|
+
homepage: https://github.com/RubyCrypto/ed25519
|
108
|
+
licenses:
|
109
|
+
- MIT
|
146
110
|
metadata: {}
|
147
|
-
post_install_message:
|
111
|
+
post_install_message:
|
148
112
|
rdoc_options: []
|
149
113
|
require_paths:
|
150
114
|
- lib
|
151
115
|
required_ruby_version: !ruby/object:Gem::Requirement
|
152
116
|
requirements:
|
153
|
-
- -
|
117
|
+
- - ">="
|
154
118
|
- !ruby/object:Gem::Version
|
155
|
-
version: 2.
|
119
|
+
version: 2.4.0
|
156
120
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
157
121
|
requirements:
|
158
|
-
- -
|
122
|
+
- - ">="
|
159
123
|
- !ruby/object:Gem::Version
|
160
124
|
version: '0'
|
161
125
|
requirements: []
|
162
|
-
|
163
|
-
|
164
|
-
signing_key:
|
126
|
+
rubygems_version: 3.2.15
|
127
|
+
signing_key:
|
165
128
|
specification_version: 4
|
166
129
|
summary: An efficient digital signature library providing the Ed25519 algorithm
|
167
130
|
test_files: []
|
data/.gitignore
DELETED
data/.rspec
DELETED
data/.rubocop.yml
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
AllCops:
|
2
|
-
TargetRubyVersion: 2.4
|
3
|
-
DisplayCopNames: true
|
4
|
-
|
5
|
-
#
|
6
|
-
# Style
|
7
|
-
#
|
8
|
-
|
9
|
-
Style/StringLiterals:
|
10
|
-
EnforcedStyle: double_quotes
|
11
|
-
|
12
|
-
#
|
13
|
-
# Metrics
|
14
|
-
#
|
15
|
-
|
16
|
-
Metrics/AbcSize:
|
17
|
-
Enabled: false
|
18
|
-
|
19
|
-
Metrics/CyclomaticComplexity:
|
20
|
-
Enabled: false
|
21
|
-
|
22
|
-
Metrics/PerceivedComplexity:
|
23
|
-
Enabled: false
|
24
|
-
|
25
|
-
Metrics/BlockLength:
|
26
|
-
Max: 100
|
27
|
-
|
28
|
-
Metrics/ClassLength:
|
29
|
-
Max: 100
|
30
|
-
|
31
|
-
Metrics/LineLength:
|
32
|
-
Max: 128
|
33
|
-
|
34
|
-
Metrics/MethodLength:
|
35
|
-
Max: 25
|