mirror of
https://github.com/cathugger/mkp224o.git
synced 2025-12-05 21:27:13 -06:00
ref10: batch invert maybe
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
#define FE_H
|
||||
|
||||
#include "crypto_int32.h"
|
||||
#include <stddef.h>
|
||||
|
||||
typedef crypto_int32 fe[10];
|
||||
|
||||
@@ -30,6 +31,7 @@ Bounds on each t[i] vary depending on context.
|
||||
#define fe_sq2 crypto_sign_ed25519_ref10_fe_sq2
|
||||
#define fe_mul121666 crypto_sign_ed25519_ref10_fe_mul121666
|
||||
#define fe_invert crypto_sign_ed25519_ref10_fe_invert
|
||||
#define fe_batchinvert crypto_sign_ed25519_ref10_fe_batchinvert
|
||||
#define fe_pow22523 crypto_sign_ed25519_ref10_fe_pow22523
|
||||
|
||||
extern void fe_frombytes(fe,const unsigned char *);
|
||||
@@ -51,6 +53,7 @@ extern void fe_sq(fe,const fe);
|
||||
extern void fe_sq2(fe,const fe);
|
||||
extern void fe_mul121666(fe,const fe);
|
||||
extern void fe_invert(fe,const fe);
|
||||
extern void fe_batchinvert(fe out[],fe tmp[],const fe in[], size_t num);
|
||||
extern void fe_pow22523(fe,const fe);
|
||||
|
||||
#endif
|
||||
|
||||
26
ed25519/ref10/fe_batchinvert.c
Normal file
26
ed25519/ref10/fe_batchinvert.c
Normal file
@@ -0,0 +1,26 @@
|
||||
#include "fe.h"
|
||||
|
||||
// tmp MUST != out
|
||||
// in MAY == out
|
||||
void fe_batchinvert(fe out[],fe tmp[],const fe in[], size_t num)
|
||||
{
|
||||
fe acc;
|
||||
fe tmpacc;
|
||||
size_t i;
|
||||
|
||||
fe_1(acc);
|
||||
|
||||
for (i = 0;i < num;++i) {
|
||||
fe_copy(tmp[i],acc);
|
||||
fe_mul(acc,acc,in[i]);
|
||||
}
|
||||
|
||||
fe_invert(acc,acc);
|
||||
|
||||
i = num;
|
||||
while (i--) {
|
||||
fe_mul(tmpacc,acc,in[i]);
|
||||
fe_mul(out[i],acc,tmp[i]);
|
||||
fe_copy(acc,tmpacc);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user