diff --git a/src/libsodium/Makefile.am b/src/libsodium/Makefile.am index 2dba5525..730ef546 100644 --- a/src/libsodium/Makefile.am +++ b/src/libsodium/Makefile.am @@ -69,8 +69,6 @@ libsodium_la_SOURCES = \ crypto_sign/ed25519/ref10/base.h \ crypto_sign/ed25519/ref10/base2.h \ crypto_sign/ed25519/sign_ed25519_api.c \ - crypto_sign/ed25519/ref10/d.h \ - crypto_sign/ed25519/ref10/d2.h \ crypto_sign/ed25519/ref10/fe.h \ crypto_sign/ed25519/ref10/fe_0.c \ crypto_sign/ed25519/ref10/fe_1.c \ @@ -90,18 +88,14 @@ libsodium_la_SOURCES = \ crypto_sign/ed25519/ref10/fe_tobytes.c \ crypto_sign/ed25519/ref10/ge.h \ crypto_sign/ed25519/ref10/ge_add.c \ - crypto_sign/ed25519/ref10/ge_add.h \ crypto_sign/ed25519/ref10/ge_double_scalarmult.c \ crypto_sign/ed25519/ref10/ge_frombytes.c \ crypto_sign/ed25519/ref10/ge_madd.c \ - crypto_sign/ed25519/ref10/ge_madd.h \ crypto_sign/ed25519/ref10/ge_msub.c \ - crypto_sign/ed25519/ref10/ge_msub.h \ crypto_sign/ed25519/ref10/ge_p1p1_to_p2.c \ crypto_sign/ed25519/ref10/ge_p1p1_to_p3.c \ crypto_sign/ed25519/ref10/ge_p2_0.c \ crypto_sign/ed25519/ref10/ge_p2_dbl.c \ - crypto_sign/ed25519/ref10/ge_p2_dbl.h \ crypto_sign/ed25519/ref10/ge_p3_0.c \ crypto_sign/ed25519/ref10/ge_p3_dbl.c \ crypto_sign/ed25519/ref10/ge_p3_to_cached.c \ @@ -110,17 +104,13 @@ libsodium_la_SOURCES = \ crypto_sign/ed25519/ref10/ge_precomp_0.c \ crypto_sign/ed25519/ref10/ge_scalarmult_base.c \ crypto_sign/ed25519/ref10/ge_sub.c \ - crypto_sign/ed25519/ref10/ge_sub.h \ crypto_sign/ed25519/ref10/ge_tobytes.c \ crypto_sign/ed25519/ref10/keypair.c \ crypto_sign/ed25519/ref10/open.c \ - crypto_sign/ed25519/ref10/pow22523.h \ - crypto_sign/ed25519/ref10/pow225521.h \ crypto_sign/ed25519/ref10/sc.h \ crypto_sign/ed25519/ref10/sc_muladd.c \ crypto_sign/ed25519/ref10/sc_reduce.c \ crypto_sign/ed25519/ref10/sign.c \ - crypto_sign/ed25519/ref10/sqrtm1.h \ crypto_stream/crypto_stream.c \ crypto_stream/chacha20/stream_chacha20.c \ crypto_stream/chacha20/stream_chacha20.h \ @@ -176,9 +166,7 @@ libsodium_la_SOURCES += \ crypto_scalarmult/curve25519/ref10/fe_mul121666_curve25519_ref10.c \ crypto_scalarmult/curve25519/ref10/fe_sq_curve25519_ref10.c \ crypto_scalarmult/curve25519/ref10/fe_sub_curve25519_ref10.c \ - crypto_scalarmult/curve25519/ref10/fe_tobytes_curve25519_ref10.c \ - crypto_scalarmult/curve25519/ref10/montgomery.h \ - crypto_scalarmult/curve25519/ref10/pow225521.h + crypto_scalarmult/curve25519/ref10/fe_tobytes_curve25519_ref10.c endif noinst_HEADERS = \ diff --git a/src/libsodium/crypto_scalarmult/curve25519/ref10/curve25519_ref10.c b/src/libsodium/crypto_scalarmult/curve25519/ref10/curve25519_ref10.c index 8a5246bb..1055aba2 100644 --- a/src/libsodium/crypto_scalarmult/curve25519/ref10/curve25519_ref10.c +++ b/src/libsodium/crypto_scalarmult/curve25519/ref10/curve25519_ref10.c @@ -46,7 +46,24 @@ crypto_scalarmult_curve25519_ref10(unsigned char *q, fe_cswap(x2,x3,swap); fe_cswap(z2,z3,swap); swap = b; -#include "montgomery.h" + fe_sub(tmp0,x3,z3); + fe_sub(tmp1,x2,z2); + fe_add(x2,x2,z2); + fe_add(z2,x3,z3); + fe_mul(z3,tmp0,x2); + fe_mul(z2,z2,tmp1); + fe_sq(tmp0,tmp1); + fe_sq(tmp1,x2); + fe_add(x3,z3,z2); + fe_sub(z2,z3,z2); + fe_mul(x2,tmp1,tmp0); + fe_sub(tmp1,tmp1,tmp0); + fe_sq(z2,z2); + fe_mul121666(z3,tmp1); + fe_sq(x3,x3); + fe_add(tmp0,tmp0,z3); + fe_mul(z3,x1,z2); + fe_mul(z2,tmp1,tmp0); } fe_cswap(x2,x3,swap); fe_cswap(z2,z3,swap); diff --git a/src/libsodium/crypto_scalarmult/curve25519/ref10/fe.h b/src/libsodium/crypto_scalarmult/curve25519/ref10/fe.h index 05671205..9d8e2fce 100644 --- a/src/libsodium/crypto_scalarmult/curve25519/ref10/fe.h +++ b/src/libsodium/crypto_scalarmult/curve25519/ref10/fe.h @@ -27,18 +27,18 @@ Bounds on each t[i] vary depending on context. #define fe_invert crypto_scalarmult_curve25519_ref10_fe_invert extern void fe_frombytes(fe,const unsigned char *); -extern void fe_tobytes(unsigned char *,fe); +extern void fe_tobytes(unsigned char *,const fe); -extern void fe_copy(fe,fe); +extern void fe_copy(fe,const fe); extern void fe_0(fe); extern void fe_1(fe); extern void fe_cswap(fe,fe,unsigned int); -extern void fe_add(fe,fe,fe); -extern void fe_sub(fe,fe,fe); -extern void fe_mul(fe,fe,fe); -extern void fe_sq(fe,fe); -extern void fe_mul121666(fe,fe); -extern void fe_invert(fe,fe); +extern void fe_add(fe,const fe,const fe); +extern void fe_sub(fe,const fe,const fe); +extern void fe_mul(fe,const fe,const fe); +extern void fe_sq(fe,const fe); +extern void fe_mul121666(fe,const fe); +extern void fe_invert(fe,const fe); #endif diff --git a/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_add_curve25519_ref10.c b/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_add_curve25519_ref10.c index 488805b8..65e2695a 100644 --- a/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_add_curve25519_ref10.c +++ b/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_add_curve25519_ref10.c @@ -14,7 +14,7 @@ Postconditions: |h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. */ -void fe_add(fe h,fe f,fe g) +void fe_add(fe h,const fe f,const fe g) { crypto_int32 f0 = f[0]; crypto_int32 f1 = f[1]; diff --git a/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_copy_curve25519_ref10.c b/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_copy_curve25519_ref10.c index 2f6a5f53..c45c92f0 100644 --- a/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_copy_curve25519_ref10.c +++ b/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_copy_curve25519_ref10.c @@ -6,7 +6,7 @@ h = f */ -void fe_copy(fe h,fe f) +void fe_copy(fe h,const fe f) { crypto_int32 f0 = f[0]; crypto_int32 f1 = f[1]; diff --git a/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_invert_curve25519_ref10.c b/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_invert_curve25519_ref10.c index 764bf69f..883d6127 100644 --- a/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_invert_curve25519_ref10.c +++ b/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_invert_curve25519_ref10.c @@ -1,18 +1,66 @@ #include "fe.h" -#ifndef HAVE_TI_MODE - -void fe_invert(fe out,fe z) +void fe_invert(fe out,const fe z) { - fe t0; - fe t1; - fe t2; - fe t3; - int i; + fe t0; + fe t1; + fe t2; + fe t3; + int i; -#include "pow225521.h" - - return; + fe_sq(t0, z); + for (i = 1; i < 1; ++i) { + fe_sq(t0, t0); + } + fe_sq(t1, t0); + for (i = 1; i < 2; ++i) { + fe_sq(t1, t1); + } + fe_mul(t1, z, t1); + fe_mul(t0, t0, t1); + fe_sq(t2, t0); + for (i = 1; i < 1; ++i) { + fe_sq(t2, t2); + } + fe_mul(t1, t1, t2); + fe_sq(t2, t1); + for (i = 1; i < 5; ++i) { + fe_sq(t2, t2); + } + fe_mul(t1, t2, t1); + fe_sq(t2, t1); + for (i = 1; i < 10; ++i) { + fe_sq(t2, t2); + } + fe_mul(t2, t2, t1); + fe_sq(t3, t2); + for (i = 1; i < 20; ++i) { + fe_sq(t3, t3); + } + fe_mul(t2, t3, t2); + fe_sq(t2, t2); + for (i = 1; i < 10; ++i) { + fe_sq(t2, t2); + } + fe_mul(t1, t2, t1); + fe_sq(t2, t1); + for (i = 1; i < 50; ++i) { + fe_sq(t2, t2); + } + fe_mul(t2, t2, t1); + fe_sq(t3, t2); + for (i = 1; i < 100; ++i) { + fe_sq(t3, t3); + } + fe_mul(t2, t3, t2); + fe_sq(t2, t2); + for (i = 1; i < 50; ++i) { + fe_sq(t2, t2); + } + fe_mul(t1, t2, t1); + fe_sq(t1, t1); + for (i = 1; i < 5; ++i) { + fe_sq(t1, t1); + } + fe_mul(out, t1, t0); } - -#endif diff --git a/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_mul121666_curve25519_ref10.c b/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_mul121666_curve25519_ref10.c index 7b222e1a..4d72888d 100644 --- a/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_mul121666_curve25519_ref10.c +++ b/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_mul121666_curve25519_ref10.c @@ -14,7 +14,7 @@ Postconditions: |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. */ -void fe_mul121666(fe h,fe f) +void fe_mul121666(fe h,const fe f) { crypto_int32 f0 = f[0]; crypto_int32 f1 = f[1]; diff --git a/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_mul_curve25519_ref10.c b/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_mul_curve25519_ref10.c index 96772b9c..a40b4f10 100644 --- a/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_mul_curve25519_ref10.c +++ b/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_mul_curve25519_ref10.c @@ -35,7 +35,7 @@ Can get away with 11 carries, but then data flow is much deeper. With tighter constraints on inputs can squeeze carries into int32. */ -void fe_mul(fe h,fe f,fe g) +void fe_mul(fe h,const fe f,const fe g) { crypto_int32 f0 = f[0]; crypto_int32 f1 = f[1]; diff --git a/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_sq_curve25519_ref10.c b/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_sq_curve25519_ref10.c index b5a62115..fc97964b 100644 --- a/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_sq_curve25519_ref10.c +++ b/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_sq_curve25519_ref10.c @@ -18,7 +18,7 @@ Postconditions: See fe_mul.c for discussion of implementation strategy. */ -void fe_sq(fe h,fe f) +void fe_sq(fe h,const fe f) { crypto_int32 f0 = f[0]; crypto_int32 f1 = f[1]; diff --git a/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_sub_curve25519_ref10.c b/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_sub_curve25519_ref10.c index 0fa49322..85001795 100644 --- a/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_sub_curve25519_ref10.c +++ b/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_sub_curve25519_ref10.c @@ -14,7 +14,7 @@ Postconditions: |h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. */ -void fe_sub(fe h,fe f,fe g) +void fe_sub(fe h,const fe f,const fe g) { crypto_int32 f0 = f[0]; crypto_int32 f1 = f[1]; diff --git a/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_tobytes_curve25519_ref10.c b/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_tobytes_curve25519_ref10.c index 4e033fb6..c7dcb8f9 100644 --- a/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_tobytes_curve25519_ref10.c +++ b/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_tobytes_curve25519_ref10.c @@ -27,7 +27,7 @@ Proof: so floor(2^(-255)(h + 19 2^(-25) h9 + 2^(-1))) = q. */ -void fe_tobytes(unsigned char *s,fe h) +void fe_tobytes(unsigned char *s,const fe h) { crypto_int32 h0 = h[0]; crypto_int32 h1 = h[1]; diff --git a/src/libsodium/crypto_scalarmult/curve25519/ref10/montgomery.h b/src/libsodium/crypto_scalarmult/curve25519/ref10/montgomery.h deleted file mode 100644 index 91e28c09..00000000 --- a/src/libsodium/crypto_scalarmult/curve25519/ref10/montgomery.h +++ /dev/null @@ -1,140 +0,0 @@ - -/* qhasm: fe X2 */ - -/* qhasm: fe Z2 */ - -/* qhasm: fe X3 */ - -/* qhasm: fe Z3 */ - -/* qhasm: fe X4 */ - -/* qhasm: fe Z4 */ - -/* qhasm: fe X5 */ - -/* qhasm: fe Z5 */ - -/* qhasm: fe A */ - -/* qhasm: fe B */ - -/* qhasm: fe C */ - -/* qhasm: fe D */ - -/* qhasm: fe E */ - -/* qhasm: fe AA */ - -/* qhasm: fe BB */ - -/* qhasm: fe DA */ - -/* qhasm: fe CB */ - -/* qhasm: fe t0 */ - -/* qhasm: fe t1 */ - -/* qhasm: fe t2 */ - -/* qhasm: fe t3 */ - -/* qhasm: fe t4 */ - -/* qhasm: enter ladder */ - -/* qhasm: D = X3-Z3 */ -/* asm 1: fe_sub(>D=fe#5,D=tmp0,B=fe#6,B=tmp1,A=fe#1,A=x2,C=fe#2,C=z2,DA=fe#4,DA=z3,CB=fe#2,CB=z2,BB=fe#5,BB=tmp0,AA=fe#6,AA=tmp1,t0=fe#3,t0=x3,t1=fe#2,t1=z2,X4=fe#1,X4=x2,E=fe#6,E=tmp1,t2=fe#2,t2=z2,t3=fe#4,t3=z3,X5=fe#3,X5=x3,t4=fe#5,t4=tmp0,Z5=fe#4,x1,Z5=z3,x1,Z4=fe#2,Z4=z2,z2=fe#1,z2=fe#1,>z2=fe#1); */ -/* asm 2: fe_sq(>z2=t0,z2=t0,>z2=t0); */ -fe_sq(t0,z); /* for (i = 1;i < 1;++i) fe_sq(t0,t0); */ - -/* qhasm: z8 = z2^2^2 */ -/* asm 1: fe_sq(>z8=fe#2,z8=fe#2,>z8=fe#2); */ -/* asm 2: fe_sq(>z8=t1,z8=t1,>z8=t1); */ -fe_sq(t1,t0); for (i = 1;i < 2;++i) fe_sq(t1,t1); - -/* qhasm: z9 = z1*z8 */ -/* asm 1: fe_mul(>z9=fe#2,z9=t1,z11=fe#1,z11=t0,z22=fe#3,z22=fe#3,>z22=fe#3); */ -/* asm 2: fe_sq(>z22=t2,z22=t2,>z22=t2); */ -fe_sq(t2,t0); /* for (i = 1;i < 1;++i) fe_sq(t2,t2); */ - -/* qhasm: z_5_0 = z9*z22 */ -/* asm 1: fe_mul(>z_5_0=fe#2,z_5_0=t1,z_10_5=fe#3,z_10_5=fe#3,>z_10_5=fe#3); */ -/* asm 2: fe_sq(>z_10_5=t2,z_10_5=t2,>z_10_5=t2); */ -fe_sq(t2,t1); for (i = 1;i < 5;++i) fe_sq(t2,t2); - -/* qhasm: z_10_0 = z_10_5*z_5_0 */ -/* asm 1: fe_mul(>z_10_0=fe#2,z_10_0=t1,z_20_10=fe#3,z_20_10=fe#3,>z_20_10=fe#3); */ -/* asm 2: fe_sq(>z_20_10=t2,z_20_10=t2,>z_20_10=t2); */ -fe_sq(t2,t1); for (i = 1;i < 10;++i) fe_sq(t2,t2); - -/* qhasm: z_20_0 = z_20_10*z_10_0 */ -/* asm 1: fe_mul(>z_20_0=fe#3,z_20_0=t2,z_40_20=fe#4,z_40_20=fe#4,>z_40_20=fe#4); */ -/* asm 2: fe_sq(>z_40_20=t3,z_40_20=t3,>z_40_20=t3); */ -fe_sq(t3,t2); for (i = 1;i < 20;++i) fe_sq(t3,t3); - -/* qhasm: z_40_0 = z_40_20*z_20_0 */ -/* asm 1: fe_mul(>z_40_0=fe#3,z_40_0=t2,z_50_10=fe#3,z_50_10=fe#3,>z_50_10=fe#3); */ -/* asm 2: fe_sq(>z_50_10=t2,z_50_10=t2,>z_50_10=t2); */ -fe_sq(t2,t2); for (i = 1;i < 10;++i) fe_sq(t2,t2); - -/* qhasm: z_50_0 = z_50_10*z_10_0 */ -/* asm 1: fe_mul(>z_50_0=fe#2,z_50_0=t1,z_100_50=fe#3,z_100_50=fe#3,>z_100_50=fe#3); */ -/* asm 2: fe_sq(>z_100_50=t2,z_100_50=t2,>z_100_50=t2); */ -fe_sq(t2,t1); for (i = 1;i < 50;++i) fe_sq(t2,t2); - -/* qhasm: z_100_0 = z_100_50*z_50_0 */ -/* asm 1: fe_mul(>z_100_0=fe#3,z_100_0=t2,z_200_100=fe#4,z_200_100=fe#4,>z_200_100=fe#4); */ -/* asm 2: fe_sq(>z_200_100=t3,z_200_100=t3,>z_200_100=t3); */ -fe_sq(t3,t2); for (i = 1;i < 100;++i) fe_sq(t3,t3); - -/* qhasm: z_200_0 = z_200_100*z_100_0 */ -/* asm 1: fe_mul(>z_200_0=fe#3,z_200_0=t2,z_250_50=fe#3,z_250_50=fe#3,>z_250_50=fe#3); */ -/* asm 2: fe_sq(>z_250_50=t2,z_250_50=t2,>z_250_50=t2); */ -fe_sq(t2,t2); for (i = 1;i < 50;++i) fe_sq(t2,t2); - -/* qhasm: z_250_0 = z_250_50*z_50_0 */ -/* asm 1: fe_mul(>z_250_0=fe#2,z_250_0=t1,z_255_5=fe#2,z_255_5=fe#2,>z_255_5=fe#2); */ -/* asm 2: fe_sq(>z_255_5=t1,z_255_5=t1,>z_255_5=t1); */ -fe_sq(t1,t1); for (i = 1;i < 5;++i) fe_sq(t1,t1); - -/* qhasm: z_255_21 = z_255_5*z11 */ -/* asm 1: fe_mul(>z_255_21=fe#12,z_255_21=out,X, p->Y, p->X); + fe_sub(r->Y, p->Y, p->X); + fe_mul(r->Z, r->X, q->YplusX); + fe_mul(r->Y, r->Y, q->YminusX); + fe_mul(r->T, q->T2d, p->T); + fe_mul(r->X, p->Z, q->Z); + fe_add(t0, r->X, r->X); + fe_sub(r->X, r->Z, r->Y); + fe_add(r->Y, r->Z, r->Y); + fe_add(r->Z, t0, r->T); + fe_sub(r->T, t0, r->T); } diff --git a/src/libsodium/crypto_sign/ed25519/ref10/ge_add.h b/src/libsodium/crypto_sign/ed25519/ref10/ge_add.h deleted file mode 100644 index 7481f8ff..00000000 --- a/src/libsodium/crypto_sign/ed25519/ref10/ge_add.h +++ /dev/null @@ -1,97 +0,0 @@ - -/* qhasm: enter ge_add */ - -/* qhasm: fe X1 */ - -/* qhasm: fe Y1 */ - -/* qhasm: fe Z1 */ - -/* qhasm: fe Z2 */ - -/* qhasm: fe T1 */ - -/* qhasm: fe ZZ */ - -/* qhasm: fe YpX2 */ - -/* qhasm: fe YmX2 */ - -/* qhasm: fe T2d2 */ - -/* qhasm: fe X3 */ - -/* qhasm: fe Y3 */ - -/* qhasm: fe Z3 */ - -/* qhasm: fe T3 */ - -/* qhasm: fe YpX1 */ - -/* qhasm: fe YmX1 */ - -/* qhasm: fe A */ - -/* qhasm: fe B */ - -/* qhasm: fe C */ - -/* qhasm: fe D */ - -/* qhasm: YpX1 = Y1+X1 */ -/* asm 1: fe_add(>YpX1=fe#1,YpX1=r->X,Y,X); */ -fe_add(r->X,p->Y,p->X); - -/* qhasm: YmX1 = Y1-X1 */ -/* asm 1: fe_sub(>YmX1=fe#2,YmX1=r->Y,Y,X); */ -fe_sub(r->Y,p->Y,p->X); - -/* qhasm: A = YpX1*YpX2 */ -/* asm 1: fe_mul(>A=fe#3,A=r->Z,X,YplusX); */ -fe_mul(r->Z,r->X,q->YplusX); - -/* qhasm: B = YmX1*YmX2 */ -/* asm 1: fe_mul(>B=fe#2,B=r->Y,Y,YminusX); */ -fe_mul(r->Y,r->Y,q->YminusX); - -/* qhasm: C = T2d2*T1 */ -/* asm 1: fe_mul(>C=fe#4,C=r->T,T2d,T); */ -fe_mul(r->T,q->T2d,p->T); - -/* qhasm: ZZ = Z1*Z2 */ -/* asm 1: fe_mul(>ZZ=fe#1,ZZ=r->X,Z,Z); */ -fe_mul(r->X,p->Z,q->Z); - -/* qhasm: D = 2*ZZ */ -/* asm 1: fe_add(>D=fe#5,D=t0,X,X); */ -fe_add(t0,r->X,r->X); - -/* qhasm: X3 = A-B */ -/* asm 1: fe_sub(>X3=fe#1,X3=r->X,Z,Y); */ -fe_sub(r->X,r->Z,r->Y); - -/* qhasm: Y3 = A+B */ -/* asm 1: fe_add(>Y3=fe#2,Y3=r->Y,Z,Y); */ -fe_add(r->Y,r->Z,r->Y); - -/* qhasm: Z3 = D+C */ -/* asm 1: fe_add(>Z3=fe#3,Z3=r->Z,T); */ -fe_add(r->Z,t0,r->T); - -/* qhasm: T3 = D-C */ -/* asm 1: fe_sub(>T3=fe#4,T3=r->T,T); */ -fe_sub(r->T,t0,r->T); - -/* qhasm: return */ diff --git a/src/libsodium/crypto_sign/ed25519/ref10/ge_frombytes.c b/src/libsodium/crypto_sign/ed25519/ref10/ge_frombytes.c index 1a059ee9..625b15f4 100644 --- a/src/libsodium/crypto_sign/ed25519/ref10/ge_frombytes.c +++ b/src/libsodium/crypto_sign/ed25519/ref10/ge_frombytes.c @@ -1,12 +1,12 @@ #include "ge.h" static const fe d = { -#include "d.h" -} ; + -10913610,13857413,-15372611,6949391,114729,-8787816,-6275908,-3247719,-18696448,-12055116 +}; static const fe sqrtm1 = { -#include "sqrtm1.h" -} ; + -32595792,-7943725,9377950,3500415,12389472,-272473,-25146209,-2005654,326686,11406482 +}; int ge_frombytes_negate_vartime(ge_p3 *h,const unsigned char *s) { diff --git a/src/libsodium/crypto_sign/ed25519/ref10/ge_madd.c b/src/libsodium/crypto_sign/ed25519/ref10/ge_madd.c index 62257177..53452153 100644 --- a/src/libsodium/crypto_sign/ed25519/ref10/ge_madd.c +++ b/src/libsodium/crypto_sign/ed25519/ref10/ge_madd.c @@ -6,6 +6,16 @@ r = p + q void ge_madd(ge_p1p1 *r,const ge_p3 *p,const ge_precomp *q) { - fe t0; -#include "ge_madd.h" + fe t0; + + fe_add(r->X, p->Y, p->X); + fe_sub(r->Y, p->Y, p->X); + fe_mul(r->Z, r->X, q->yplusx); + fe_mul(r->Y, r->Y, q->yminusx); + fe_mul(r->T, q->xy2d, p->T); + fe_add(t0, p->Z, p->Z); + fe_sub(r->X, r->Z, r->Y); + fe_add(r->Y, r->Z, r->Y); + fe_add(r->Z, t0, r->T); + fe_sub(r->T, t0, r->T); } diff --git a/src/libsodium/crypto_sign/ed25519/ref10/ge_madd.h b/src/libsodium/crypto_sign/ed25519/ref10/ge_madd.h deleted file mode 100644 index ecae8495..00000000 --- a/src/libsodium/crypto_sign/ed25519/ref10/ge_madd.h +++ /dev/null @@ -1,88 +0,0 @@ - -/* qhasm: enter ge_madd */ - -/* qhasm: fe X1 */ - -/* qhasm: fe Y1 */ - -/* qhasm: fe Z1 */ - -/* qhasm: fe T1 */ - -/* qhasm: fe ypx2 */ - -/* qhasm: fe ymx2 */ - -/* qhasm: fe xy2d2 */ - -/* qhasm: fe X3 */ - -/* qhasm: fe Y3 */ - -/* qhasm: fe Z3 */ - -/* qhasm: fe T3 */ - -/* qhasm: fe YpX1 */ - -/* qhasm: fe YmX1 */ - -/* qhasm: fe A */ - -/* qhasm: fe B */ - -/* qhasm: fe C */ - -/* qhasm: fe D */ - -/* qhasm: YpX1 = Y1+X1 */ -/* asm 1: fe_add(>YpX1=fe#1,YpX1=r->X,Y,X); */ -fe_add(r->X,p->Y,p->X); - -/* qhasm: YmX1 = Y1-X1 */ -/* asm 1: fe_sub(>YmX1=fe#2,YmX1=r->Y,Y,X); */ -fe_sub(r->Y,p->Y,p->X); - -/* qhasm: A = YpX1*ypx2 */ -/* asm 1: fe_mul(>A=fe#3,A=r->Z,X,yplusx); */ -fe_mul(r->Z,r->X,q->yplusx); - -/* qhasm: B = YmX1*ymx2 */ -/* asm 1: fe_mul(>B=fe#2,B=r->Y,Y,yminusx); */ -fe_mul(r->Y,r->Y,q->yminusx); - -/* qhasm: C = xy2d2*T1 */ -/* asm 1: fe_mul(>C=fe#4,C=r->T,xy2d,T); */ -fe_mul(r->T,q->xy2d,p->T); - -/* qhasm: D = 2*Z1 */ -/* asm 1: fe_add(>D=fe#5,D=t0,Z,Z); */ -fe_add(t0,p->Z,p->Z); - -/* qhasm: X3 = A-B */ -/* asm 1: fe_sub(>X3=fe#1,X3=r->X,Z,Y); */ -fe_sub(r->X,r->Z,r->Y); - -/* qhasm: Y3 = A+B */ -/* asm 1: fe_add(>Y3=fe#2,Y3=r->Y,Z,Y); */ -fe_add(r->Y,r->Z,r->Y); - -/* qhasm: Z3 = D+C */ -/* asm 1: fe_add(>Z3=fe#3,Z3=r->Z,T); */ -fe_add(r->Z,t0,r->T); - -/* qhasm: T3 = D-C */ -/* asm 1: fe_sub(>T3=fe#4,T3=r->T,T); */ -fe_sub(r->T,t0,r->T); - -/* qhasm: return */ diff --git a/src/libsodium/crypto_sign/ed25519/ref10/ge_msub.c b/src/libsodium/crypto_sign/ed25519/ref10/ge_msub.c index 741ecbf1..1740c59f 100644 --- a/src/libsodium/crypto_sign/ed25519/ref10/ge_msub.c +++ b/src/libsodium/crypto_sign/ed25519/ref10/ge_msub.c @@ -6,6 +6,16 @@ r = p - q void ge_msub(ge_p1p1 *r,const ge_p3 *p,const ge_precomp *q) { - fe t0; -#include "ge_msub.h" + fe t0; + + fe_add(r->X, p->Y, p->X); + fe_sub(r->Y, p->Y, p->X); + fe_mul(r->Z, r->X, q->yminusx); + fe_mul(r->Y, r->Y, q->yplusx); + fe_mul(r->T, q->xy2d, p->T); + fe_add(t0, p->Z, p->Z); + fe_sub(r->X, r->Z, r->Y); + fe_add(r->Y, r->Z, r->Y); + fe_sub(r->Z, t0, r->T); + fe_add(r->T, t0, r->T); } diff --git a/src/libsodium/crypto_sign/ed25519/ref10/ge_msub.h b/src/libsodium/crypto_sign/ed25519/ref10/ge_msub.h deleted file mode 100644 index 500f986b..00000000 --- a/src/libsodium/crypto_sign/ed25519/ref10/ge_msub.h +++ /dev/null @@ -1,88 +0,0 @@ - -/* qhasm: enter ge_msub */ - -/* qhasm: fe X1 */ - -/* qhasm: fe Y1 */ - -/* qhasm: fe Z1 */ - -/* qhasm: fe T1 */ - -/* qhasm: fe ypx2 */ - -/* qhasm: fe ymx2 */ - -/* qhasm: fe xy2d2 */ - -/* qhasm: fe X3 */ - -/* qhasm: fe Y3 */ - -/* qhasm: fe Z3 */ - -/* qhasm: fe T3 */ - -/* qhasm: fe YpX1 */ - -/* qhasm: fe YmX1 */ - -/* qhasm: fe A */ - -/* qhasm: fe B */ - -/* qhasm: fe C */ - -/* qhasm: fe D */ - -/* qhasm: YpX1 = Y1+X1 */ -/* asm 1: fe_add(>YpX1=fe#1,YpX1=r->X,Y,X); */ -fe_add(r->X,p->Y,p->X); - -/* qhasm: YmX1 = Y1-X1 */ -/* asm 1: fe_sub(>YmX1=fe#2,YmX1=r->Y,Y,X); */ -fe_sub(r->Y,p->Y,p->X); - -/* qhasm: A = YpX1*ymx2 */ -/* asm 1: fe_mul(>A=fe#3,A=r->Z,X,yminusx); */ -fe_mul(r->Z,r->X,q->yminusx); - -/* qhasm: B = YmX1*ypx2 */ -/* asm 1: fe_mul(>B=fe#2,B=r->Y,Y,yplusx); */ -fe_mul(r->Y,r->Y,q->yplusx); - -/* qhasm: C = xy2d2*T1 */ -/* asm 1: fe_mul(>C=fe#4,C=r->T,xy2d,T); */ -fe_mul(r->T,q->xy2d,p->T); - -/* qhasm: D = 2*Z1 */ -/* asm 1: fe_add(>D=fe#5,D=t0,Z,Z); */ -fe_add(t0,p->Z,p->Z); - -/* qhasm: X3 = A-B */ -/* asm 1: fe_sub(>X3=fe#1,X3=r->X,Z,Y); */ -fe_sub(r->X,r->Z,r->Y); - -/* qhasm: Y3 = A+B */ -/* asm 1: fe_add(>Y3=fe#2,Y3=r->Y,Z,Y); */ -fe_add(r->Y,r->Z,r->Y); - -/* qhasm: Z3 = D-C */ -/* asm 1: fe_sub(>Z3=fe#3,Z3=r->Z,T); */ -fe_sub(r->Z,t0,r->T); - -/* qhasm: T3 = D+C */ -/* asm 1: fe_add(>T3=fe#4,T3=r->T,T); */ -fe_add(r->T,t0,r->T); - -/* qhasm: return */ diff --git a/src/libsodium/crypto_sign/ed25519/ref10/ge_p2_dbl.c b/src/libsodium/crypto_sign/ed25519/ref10/ge_p2_dbl.c index 2e332b5c..6edc6f1a 100644 --- a/src/libsodium/crypto_sign/ed25519/ref10/ge_p2_dbl.c +++ b/src/libsodium/crypto_sign/ed25519/ref10/ge_p2_dbl.c @@ -6,6 +6,15 @@ r = 2 * p void ge_p2_dbl(ge_p1p1 *r,const ge_p2 *p) { - fe t0; -#include "ge_p2_dbl.h" + fe t0; + + fe_sq(r->X, p->X); + fe_sq(r->Z, p->Y); + fe_sq2(r->T, p->Z); + fe_add(r->Y, p->X, p->Y); + fe_sq(t0, r->Y); + fe_add(r->Y, r->Z, r->X); + fe_sub(r->Z, r->Z, r->X); + fe_sub(r->X, t0, r->Y); + fe_sub(r->T, r->T, r->Z); } diff --git a/src/libsodium/crypto_sign/ed25519/ref10/ge_p2_dbl.h b/src/libsodium/crypto_sign/ed25519/ref10/ge_p2_dbl.h deleted file mode 100644 index 128efed9..00000000 --- a/src/libsodium/crypto_sign/ed25519/ref10/ge_p2_dbl.h +++ /dev/null @@ -1,73 +0,0 @@ - -/* qhasm: enter ge_p2_dbl */ - -/* qhasm: fe X1 */ - -/* qhasm: fe Y1 */ - -/* qhasm: fe Z1 */ - -/* qhasm: fe A */ - -/* qhasm: fe AA */ - -/* qhasm: fe XX */ - -/* qhasm: fe YY */ - -/* qhasm: fe B */ - -/* qhasm: fe X3 */ - -/* qhasm: fe Y3 */ - -/* qhasm: fe Z3 */ - -/* qhasm: fe T3 */ - -/* qhasm: XX=X1^2 */ -/* asm 1: fe_sq(>XX=fe#1,XX=r->X,X); */ -fe_sq(r->X,p->X); - -/* qhasm: YY=Y1^2 */ -/* asm 1: fe_sq(>YY=fe#3,YY=r->Z,Y); */ -fe_sq(r->Z,p->Y); - -/* qhasm: B=2*Z1^2 */ -/* asm 1: fe_sq2(>B=fe#4,B=r->T,Z); */ -fe_sq2(r->T,p->Z); - -/* qhasm: A=X1+Y1 */ -/* asm 1: fe_add(>A=fe#2,A=r->Y,X,Y); */ -fe_add(r->Y,p->X,p->Y); - -/* qhasm: AA=A^2 */ -/* asm 1: fe_sq(>AA=fe#5,AA=t0,Y); */ -fe_sq(t0,r->Y); - -/* qhasm: Y3=YY+XX */ -/* asm 1: fe_add(>Y3=fe#2,Y3=r->Y,Z,X); */ -fe_add(r->Y,r->Z,r->X); - -/* qhasm: Z3=YY-XX */ -/* asm 1: fe_sub(>Z3=fe#3,Z3=r->Z,Z,X); */ -fe_sub(r->Z,r->Z,r->X); - -/* qhasm: X3=AA-Y3 */ -/* asm 1: fe_sub(>X3=fe#1,X3=r->X,Y); */ -fe_sub(r->X,t0,r->Y); - -/* qhasm: T3=B-Z3 */ -/* asm 1: fe_sub(>T3=fe#4,T3=r->T,T,Z); */ -fe_sub(r->T,r->T,r->Z); - -/* qhasm: return */ diff --git a/src/libsodium/crypto_sign/ed25519/ref10/ge_p3_to_cached.c b/src/libsodium/crypto_sign/ed25519/ref10/ge_p3_to_cached.c index bde64228..c7d0c1fa 100644 --- a/src/libsodium/crypto_sign/ed25519/ref10/ge_p3_to_cached.c +++ b/src/libsodium/crypto_sign/ed25519/ref10/ge_p3_to_cached.c @@ -5,8 +5,8 @@ r = p */ static const fe d2 = { -#include "d2.h" -} ; + -21827239,-5839606,-30745221,13898782,229458,15978800,-12551817,-6495438,29715968,9444199 +}; extern void ge_p3_to_cached(ge_cached *r,const ge_p3 *p) { diff --git a/src/libsodium/crypto_sign/ed25519/ref10/ge_sub.c b/src/libsodium/crypto_sign/ed25519/ref10/ge_sub.c index 69f3d540..a4c880a6 100644 --- a/src/libsodium/crypto_sign/ed25519/ref10/ge_sub.c +++ b/src/libsodium/crypto_sign/ed25519/ref10/ge_sub.c @@ -6,6 +6,17 @@ r = p - q void ge_sub(ge_p1p1 *r,const ge_p3 *p,const ge_cached *q) { - fe t0; -#include "ge_sub.h" + fe t0; + + fe_add(r->X, p->Y, p->X); + fe_sub(r->Y, p->Y, p->X); + fe_mul(r->Z, r->X, q->YminusX); + fe_mul(r->Y, r->Y, q->YplusX); + fe_mul(r->T, q->T2d, p->T); + fe_mul(r->X, p->Z, q->Z); + fe_add(t0, r->X, r->X); + fe_sub(r->X, r->Z, r->Y); + fe_add(r->Y, r->Z, r->Y); + fe_sub(r->Z, t0, r->T); + fe_add(r->T, t0, r->T); } diff --git a/src/libsodium/crypto_sign/ed25519/ref10/ge_sub.h b/src/libsodium/crypto_sign/ed25519/ref10/ge_sub.h deleted file mode 100644 index b4ef1f5d..00000000 --- a/src/libsodium/crypto_sign/ed25519/ref10/ge_sub.h +++ /dev/null @@ -1,97 +0,0 @@ - -/* qhasm: enter ge_sub */ - -/* qhasm: fe X1 */ - -/* qhasm: fe Y1 */ - -/* qhasm: fe Z1 */ - -/* qhasm: fe Z2 */ - -/* qhasm: fe T1 */ - -/* qhasm: fe ZZ */ - -/* qhasm: fe YpX2 */ - -/* qhasm: fe YmX2 */ - -/* qhasm: fe T2d2 */ - -/* qhasm: fe X3 */ - -/* qhasm: fe Y3 */ - -/* qhasm: fe Z3 */ - -/* qhasm: fe T3 */ - -/* qhasm: fe YpX1 */ - -/* qhasm: fe YmX1 */ - -/* qhasm: fe A */ - -/* qhasm: fe B */ - -/* qhasm: fe C */ - -/* qhasm: fe D */ - -/* qhasm: YpX1 = Y1+X1 */ -/* asm 1: fe_add(>YpX1=fe#1,YpX1=r->X,Y,X); */ -fe_add(r->X,p->Y,p->X); - -/* qhasm: YmX1 = Y1-X1 */ -/* asm 1: fe_sub(>YmX1=fe#2,YmX1=r->Y,Y,X); */ -fe_sub(r->Y,p->Y,p->X); - -/* qhasm: A = YpX1*YmX2 */ -/* asm 1: fe_mul(>A=fe#3,A=r->Z,X,YminusX); */ -fe_mul(r->Z,r->X,q->YminusX); - -/* qhasm: B = YmX1*YpX2 */ -/* asm 1: fe_mul(>B=fe#2,B=r->Y,Y,YplusX); */ -fe_mul(r->Y,r->Y,q->YplusX); - -/* qhasm: C = T2d2*T1 */ -/* asm 1: fe_mul(>C=fe#4,C=r->T,T2d,T); */ -fe_mul(r->T,q->T2d,p->T); - -/* qhasm: ZZ = Z1*Z2 */ -/* asm 1: fe_mul(>ZZ=fe#1,ZZ=r->X,Z,Z); */ -fe_mul(r->X,p->Z,q->Z); - -/* qhasm: D = 2*ZZ */ -/* asm 1: fe_add(>D=fe#5,D=t0,X,X); */ -fe_add(t0,r->X,r->X); - -/* qhasm: X3 = A-B */ -/* asm 1: fe_sub(>X3=fe#1,X3=r->X,Z,Y); */ -fe_sub(r->X,r->Z,r->Y); - -/* qhasm: Y3 = A+B */ -/* asm 1: fe_add(>Y3=fe#2,Y3=r->Y,Z,Y); */ -fe_add(r->Y,r->Z,r->Y); - -/* qhasm: Z3 = D-C */ -/* asm 1: fe_sub(>Z3=fe#3,Z3=r->Z,T); */ -fe_sub(r->Z,t0,r->T); - -/* qhasm: T3 = D+C */ -/* asm 1: fe_add(>T3=fe#4,T3=r->T,T); */ -fe_add(r->T,t0,r->T); - -/* qhasm: return */ diff --git a/src/libsodium/crypto_sign/ed25519/ref10/pow22523.h b/src/libsodium/crypto_sign/ed25519/ref10/pow22523.h deleted file mode 100644 index 9bd45f13..00000000 --- a/src/libsodium/crypto_sign/ed25519/ref10/pow22523.h +++ /dev/null @@ -1,160 +0,0 @@ - -/* qhasm: fe z1 */ - -/* qhasm: fe z2 */ - -/* qhasm: fe z8 */ - -/* qhasm: fe z9 */ - -/* qhasm: fe z11 */ - -/* qhasm: fe z22 */ - -/* qhasm: fe z_5_0 */ - -/* qhasm: fe z_10_5 */ - -/* qhasm: fe z_10_0 */ - -/* qhasm: fe z_20_10 */ - -/* qhasm: fe z_20_0 */ - -/* qhasm: fe z_40_20 */ - -/* qhasm: fe z_40_0 */ - -/* qhasm: fe z_50_10 */ - -/* qhasm: fe z_50_0 */ - -/* qhasm: fe z_100_50 */ - -/* qhasm: fe z_100_0 */ - -/* qhasm: fe z_200_100 */ - -/* qhasm: fe z_200_0 */ - -/* qhasm: fe z_250_50 */ - -/* qhasm: fe z_250_0 */ - -/* qhasm: fe z_252_2 */ - -/* qhasm: fe z_252_3 */ - -/* qhasm: enter pow22523 */ - -/* qhasm: z2 = z1^2^1 */ -/* asm 1: fe_sq(>z2=fe#1,z2=fe#1,>z2=fe#1); */ -/* asm 2: fe_sq(>z2=t0,z2=t0,>z2=t0); */ -fe_sq(t0,z); /* for (i = 1;i < 1;++i) fe_sq(t0,t0); */ - -/* qhasm: z8 = z2^2^2 */ -/* asm 1: fe_sq(>z8=fe#2,z8=fe#2,>z8=fe#2); */ -/* asm 2: fe_sq(>z8=t1,z8=t1,>z8=t1); */ -fe_sq(t1,t0); for (i = 1;i < 2;++i) fe_sq(t1,t1); - -/* qhasm: z9 = z1*z8 */ -/* asm 1: fe_mul(>z9=fe#2,z9=t1,z11=fe#1,z11=t0,z22=fe#1,z22=fe#1,>z22=fe#1); */ -/* asm 2: fe_sq(>z22=t0,z22=t0,>z22=t0); */ -fe_sq(t0,t0); /* for (i = 1;i < 1;++i) fe_sq(t0,t0); */ - -/* qhasm: z_5_0 = z9*z22 */ -/* asm 1: fe_mul(>z_5_0=fe#1,z_5_0=t0,z_10_5=fe#2,z_10_5=fe#2,>z_10_5=fe#2); */ -/* asm 2: fe_sq(>z_10_5=t1,z_10_5=t1,>z_10_5=t1); */ -fe_sq(t1,t0); for (i = 1;i < 5;++i) fe_sq(t1,t1); - -/* qhasm: z_10_0 = z_10_5*z_5_0 */ -/* asm 1: fe_mul(>z_10_0=fe#1,z_10_0=t0,z_20_10=fe#2,z_20_10=fe#2,>z_20_10=fe#2); */ -/* asm 2: fe_sq(>z_20_10=t1,z_20_10=t1,>z_20_10=t1); */ -fe_sq(t1,t0); for (i = 1;i < 10;++i) fe_sq(t1,t1); - -/* qhasm: z_20_0 = z_20_10*z_10_0 */ -/* asm 1: fe_mul(>z_20_0=fe#2,z_20_0=t1,z_40_20=fe#3,z_40_20=fe#3,>z_40_20=fe#3); */ -/* asm 2: fe_sq(>z_40_20=t2,z_40_20=t2,>z_40_20=t2); */ -fe_sq(t2,t1); for (i = 1;i < 20;++i) fe_sq(t2,t2); - -/* qhasm: z_40_0 = z_40_20*z_20_0 */ -/* asm 1: fe_mul(>z_40_0=fe#2,z_40_0=t1,z_50_10=fe#2,z_50_10=fe#2,>z_50_10=fe#2); */ -/* asm 2: fe_sq(>z_50_10=t1,z_50_10=t1,>z_50_10=t1); */ -fe_sq(t1,t1); for (i = 1;i < 10;++i) fe_sq(t1,t1); - -/* qhasm: z_50_0 = z_50_10*z_10_0 */ -/* asm 1: fe_mul(>z_50_0=fe#1,z_50_0=t0,z_100_50=fe#2,z_100_50=fe#2,>z_100_50=fe#2); */ -/* asm 2: fe_sq(>z_100_50=t1,z_100_50=t1,>z_100_50=t1); */ -fe_sq(t1,t0); for (i = 1;i < 50;++i) fe_sq(t1,t1); - -/* qhasm: z_100_0 = z_100_50*z_50_0 */ -/* asm 1: fe_mul(>z_100_0=fe#2,z_100_0=t1,z_200_100=fe#3,z_200_100=fe#3,>z_200_100=fe#3); */ -/* asm 2: fe_sq(>z_200_100=t2,z_200_100=t2,>z_200_100=t2); */ -fe_sq(t2,t1); for (i = 1;i < 100;++i) fe_sq(t2,t2); - -/* qhasm: z_200_0 = z_200_100*z_100_0 */ -/* asm 1: fe_mul(>z_200_0=fe#2,z_200_0=t1,z_250_50=fe#2,z_250_50=fe#2,>z_250_50=fe#2); */ -/* asm 2: fe_sq(>z_250_50=t1,z_250_50=t1,>z_250_50=t1); */ -fe_sq(t1,t1); for (i = 1;i < 50;++i) fe_sq(t1,t1); - -/* qhasm: z_250_0 = z_250_50*z_50_0 */ -/* asm 1: fe_mul(>z_250_0=fe#1,z_250_0=t0,z_252_2=fe#1,z_252_2=fe#1,>z_252_2=fe#1); */ -/* asm 2: fe_sq(>z_252_2=t0,z_252_2=t0,>z_252_2=t0); */ -fe_sq(t0,t0); for (i = 1;i < 2;++i) fe_sq(t0,t0); - -/* qhasm: z_252_3 = z_252_2*z1 */ -/* asm 1: fe_mul(>z_252_3=fe#12,z_252_3=out,z2=fe#1,z2=fe#1,>z2=fe#1); */ -/* asm 2: fe_sq(>z2=t0,z2=t0,>z2=t0); */ -fe_sq(t0,z); /* for (i = 1;i < 1;++i) fe_sq(t0,t0); */ - -/* qhasm: z8 = z2^2^2 */ -/* asm 1: fe_sq(>z8=fe#2,z8=fe#2,>z8=fe#2); */ -/* asm 2: fe_sq(>z8=t1,z8=t1,>z8=t1); */ -fe_sq(t1,t0); for (i = 1;i < 2;++i) fe_sq(t1,t1); - -/* qhasm: z9 = z1*z8 */ -/* asm 1: fe_mul(>z9=fe#2,z9=t1,z11=fe#1,z11=t0,z22=fe#3,z22=fe#3,>z22=fe#3); */ -/* asm 2: fe_sq(>z22=t2,z22=t2,>z22=t2); */ -fe_sq(t2,t0); /* for (i = 1;i < 1;++i) fe_sq(t2,t2); */ - -/* qhasm: z_5_0 = z9*z22 */ -/* asm 1: fe_mul(>z_5_0=fe#2,z_5_0=t1,z_10_5=fe#3,z_10_5=fe#3,>z_10_5=fe#3); */ -/* asm 2: fe_sq(>z_10_5=t2,z_10_5=t2,>z_10_5=t2); */ -fe_sq(t2,t1); for (i = 1;i < 5;++i) fe_sq(t2,t2); - -/* qhasm: z_10_0 = z_10_5*z_5_0 */ -/* asm 1: fe_mul(>z_10_0=fe#2,z_10_0=t1,z_20_10=fe#3,z_20_10=fe#3,>z_20_10=fe#3); */ -/* asm 2: fe_sq(>z_20_10=t2,z_20_10=t2,>z_20_10=t2); */ -fe_sq(t2,t1); for (i = 1;i < 10;++i) fe_sq(t2,t2); - -/* qhasm: z_20_0 = z_20_10*z_10_0 */ -/* asm 1: fe_mul(>z_20_0=fe#3,z_20_0=t2,z_40_20=fe#4,z_40_20=fe#4,>z_40_20=fe#4); */ -/* asm 2: fe_sq(>z_40_20=t3,z_40_20=t3,>z_40_20=t3); */ -fe_sq(t3,t2); for (i = 1;i < 20;++i) fe_sq(t3,t3); - -/* qhasm: z_40_0 = z_40_20*z_20_0 */ -/* asm 1: fe_mul(>z_40_0=fe#3,z_40_0=t2,z_50_10=fe#3,z_50_10=fe#3,>z_50_10=fe#3); */ -/* asm 2: fe_sq(>z_50_10=t2,z_50_10=t2,>z_50_10=t2); */ -fe_sq(t2,t2); for (i = 1;i < 10;++i) fe_sq(t2,t2); - -/* qhasm: z_50_0 = z_50_10*z_10_0 */ -/* asm 1: fe_mul(>z_50_0=fe#2,z_50_0=t1,z_100_50=fe#3,z_100_50=fe#3,>z_100_50=fe#3); */ -/* asm 2: fe_sq(>z_100_50=t2,z_100_50=t2,>z_100_50=t2); */ -fe_sq(t2,t1); for (i = 1;i < 50;++i) fe_sq(t2,t2); - -/* qhasm: z_100_0 = z_100_50*z_50_0 */ -/* asm 1: fe_mul(>z_100_0=fe#3,z_100_0=t2,z_200_100=fe#4,z_200_100=fe#4,>z_200_100=fe#4); */ -/* asm 2: fe_sq(>z_200_100=t3,z_200_100=t3,>z_200_100=t3); */ -fe_sq(t3,t2); for (i = 1;i < 100;++i) fe_sq(t3,t3); - -/* qhasm: z_200_0 = z_200_100*z_100_0 */ -/* asm 1: fe_mul(>z_200_0=fe#3,z_200_0=t2,z_250_50=fe#3,z_250_50=fe#3,>z_250_50=fe#3); */ -/* asm 2: fe_sq(>z_250_50=t2,z_250_50=t2,>z_250_50=t2); */ -fe_sq(t2,t2); for (i = 1;i < 50;++i) fe_sq(t2,t2); - -/* qhasm: z_250_0 = z_250_50*z_50_0 */ -/* asm 1: fe_mul(>z_250_0=fe#2,z_250_0=t1,z_255_5=fe#2,z_255_5=fe#2,>z_255_5=fe#2); */ -/* asm 2: fe_sq(>z_255_5=t1,z_255_5=t1,>z_255_5=t1); */ -fe_sq(t1,t1); for (i = 1;i < 5;++i) fe_sq(t1,t1); - -/* qhasm: z_255_21 = z_255_5*z11 */ -/* asm 1: fe_mul(>z_255_21=fe#12,z_255_21=out,