Skip to content

Commit 0af67f8

Browse files
committed
Tagging for release 0.3.4
1 parent e42cced commit 0af67f8

File tree

2 files changed

+116
-18
lines changed

2 files changed

+116
-18
lines changed

src/eb/relic_eb_util.c

Lines changed: 41 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -273,9 +273,10 @@ void eb_tab(eb_t *t, eb_t p, int w) {
273273
t[i]->norm = 1;
274274
}
275275

276-
eb_copy(t[0], p);
277276
#if defined(EB_MIXED)
278-
eb_norm(t[0], t[0]);
277+
eb_norm(t[0], p);
278+
#else
279+
eb_copy(t[0], p);
279280
#endif
280281

281282
switch (w) {
@@ -313,6 +314,9 @@ void eb_tab(eb_t *t, eb_t p, int w) {
313314
eb_add(t[2], t[3], p);
314315
eb_frb(t[3], t[3]);
315316

317+
eb_frb(t[7], t[3]);
318+
eb_sub(t[7], t[7], p);
319+
316320
if (u == 1) {
317321
eb_neg(t[3], t[3]);
318322
}
@@ -321,11 +325,6 @@ void eb_tab(eb_t *t, eb_t p, int w) {
321325
eb_frb(t[4], t[2]);
322326
eb_frb(t[4], t[4]);
323327

324-
#if defined(EB_MIXED) && defined(STRIP)
325-
eb_norm(t[2], t[2]);
326-
#endif
327-
eb_sub(t[7], t[4], t[2]);
328-
329328
eb_neg(t[4], t[4]);
330329
eb_sub(t[5], t[4], p);
331330
eb_add(t[6], t[4], p);
@@ -347,6 +346,7 @@ void eb_tab(eb_t *t, eb_t p, int w) {
347346
eb_add(t[14], t[14], p);
348347

349348
eb_frb(t[0], t[0]);
349+
eb_frb(t[8], t[0]);
350350
if (u == -1) {
351351
eb_neg(t[0], t[0]);
352352
}
@@ -358,22 +358,19 @@ void eb_tab(eb_t *t, eb_t p, int w) {
358358
eb_sub(t[1], t[0], p);
359359
eb_add(t[2], t[0], p);
360360

361-
#if defined(EB_MIXED) && defined(STRIP)
362-
eb_norm(t[13], t[13]);
363-
#endif
364-
eb_add(t[15], t[0], t[13]);
361+
eb_frb(t[15], t[8]);
362+
if (u == -1) {
363+
eb_neg(t[15], t[15]);
364+
}
365+
eb_sub(t[15], t[15], p);
365366

366367
eb_frb(t[0], t[13]);
367368
eb_frb(t[0], t[0]);
368369
eb_sub(t[5], t[0], p);
369370
eb_add(t[6], t[0], p);
370371

371-
eb_neg(t[8], t[0]);
372-
eb_add(t[7], t[8], t[13]);
373-
#if defined(EB_MIXED) && defined(STRIP)
374-
eb_norm(t[14], t[14]);
375-
#endif
376-
eb_add(t[8], t[8], t[14]);
372+
eb_sub(t[7], t[8], p);
373+
eb_add(t[8], t[8], p);
377374

378375
eb_frb(t[0], t[0]);
379376
if (u == -1) {
@@ -604,6 +601,33 @@ void eb_tab(eb_t *t, eb_t p, int w) {
604601
*/
605602
eb_mul_frb(t[_k], p, tnaf, len);
606603
}
604+
605+
eb_frb(t[0], t[0]);
606+
eb_frb(t[0], t[0]);
607+
eb_sub(t[17], t[0], p);
608+
eb_add(t[18], t[0], p);
609+
eb_frb(t[0], t[0]);
610+
if (u == 1) {
611+
eb_neg(t[0], t[0]);
612+
}
613+
eb_sub(t[19], t[0], p);
614+
eb_add(t[20], t[0], p);
615+
616+
eb_frb(t[0], t[19]);
617+
eb_frb(t[0], t[0]);
618+
eb_neg(t[0], t[0]);
619+
eb_sub(t[1], t[0], p);
620+
eb_add(t[2], t[0], p);
621+
622+
eb_frb(t[0], t[17]);
623+
eb_frb(t[0], t[0]);
624+
eb_frb(t[0], t[0]);
625+
if (u == -1) {
626+
eb_neg(t[0], t[0]);
627+
}
628+
eb_sub(t[3], t[0], p);
629+
630+
607631
/*
608632
signed char k1[] = {-1, 0, 1, 0, 0, -1, };
609633
eb_mul_frb(t[1], p, k1, sizeof(k1));

src/ep/relic_ep_mul.c

Lines changed: 75 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ static void ep_mul_naf_imp(ep_t r, ep_t p, bn_t k) {
167167
/* Compute the precomputation table. */
168168
ep_tab(table, p, EP_WIDTH);
169169

170-
/* Compute the w-TNAF representation of k. */
170+
/* Compute the w-NAF representation of k. */
171171
bn_rec_naf(naf, &len, k, EP_WIDTH);
172172

173173
t = naf + len - 1;
@@ -186,7 +186,64 @@ static void ep_mul_naf_imp(ep_t r, ep_t p, bn_t k) {
186186
}
187187
/* Convert r to affine coordinates. */
188188
ep_norm(r, r);
189+
}
190+
CATCH_ANY {
191+
THROW(ERR_CAUGHT);
192+
}
193+
FINALLY {
194+
/* Free the precomputation table. */
195+
for (i = 0; i < (1 << (EP_WIDTH - 2)); i++) {
196+
ep_free(table[i]);
197+
}
198+
}
199+
}
200+
201+
#endif /* EP_ORDIN || EP_SUPER */
202+
#endif /* EP_MUL == LWNAF */
203+
204+
#if EP_MUL == LWREG || !defined(STRIP)
205+
206+
#if defined(EP_ORDIN) || defined(EP_SUPER)
207+
208+
static void ep_mul_reg_imp(ep_t r, ep_t p, bn_t k) {
209+
int len, i, j, n;
210+
signed char reg[FP_BITS + 1], *t;
211+
ep_t table[1 << (EP_WIDTH - 2)];
212+
213+
for (i = 0; i < (1 << (EP_WIDTH - 2)); i++) {
214+
ep_null(table[i]);
215+
}
216+
217+
TRY {
218+
/* Prepare the precomputation table. */
219+
for (i = 0; i < (1 << (EP_WIDTH - 2)); i++) {
220+
ep_new(table[i]);
221+
}
222+
/* Compute the precomputation table. */
223+
ep_tab(table, p, EP_WIDTH);
189224

225+
/* Compute the w-NAF representation of k. */
226+
bn_rec_reg(reg, &len, k, FP_BITS, EP_WIDTH);
227+
228+
t = reg + len - 1;
229+
230+
ep_set_infty(r);
231+
for (i = len - 1; i >= 0; i--, t--) {
232+
for (j = 0; j < EP_WIDTH - 1; j++) {
233+
ep_dbl(r, r);
234+
}
235+
236+
n = *t;
237+
if (n > 0) {
238+
ep_add(r, r, table[n / 2]);
239+
}
240+
if (n < 0) {
241+
ep_sub(r, r, table[-n / 2]);
242+
}
243+
}
244+
245+
/* Convert r to affine coordinates. */
246+
ep_norm(r, r);
190247
}
191248
CATCH_ANY {
192249
THROW(ERR_CAUGHT);
@@ -380,6 +437,23 @@ void ep_mul_lwnaf(ep_t r, ep_t p, bn_t k) {
380437

381438
#endif
382439

440+
#if EP_MUL == LWREG || !defined(STRIP)
441+
442+
void ep_mul_lwreg(ep_t r, ep_t p, bn_t k) {
443+
#if defined(EP_KBLTZ)
444+
if (ep_curve_is_kbltz()) {
445+
ep_mul_glv_imp(r, p, k);
446+
return;
447+
}
448+
#endif
449+
450+
#if defined(EP_ORDIN) || defined(EP_SUPER)
451+
ep_mul_reg_imp(r, p, k);
452+
#endif
453+
}
454+
455+
#endif
456+
383457
void ep_mul_gen(ep_t r, bn_t k) {
384458
#ifdef EP_PRECO
385459
ep_mul_fix(r, ep_curve_get_tab(), k);

0 commit comments

Comments
 (0)