You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@milagro.apache.org by km...@apache.org on 2019/06/14 10:08:03 UTC
[incubator-milagro-crypto] branch fix-bugs-warnings created (now
f96f29c)
This is an automated email from the ASF dual-hosted git repository.
kmccusker pushed a change to branch fix-bugs-warnings
in repository https://gitbox.apache.org/repos/asf/incubator-milagro-crypto.git.
at f96f29c fix bugs in c code, remove warnings and format code
This branch includes the following new commits:
new f96f29c fix bugs in c code, remove warnings and format code
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
[incubator-milagro-crypto] 01/01: fix bugs in c code,
remove warnings and format code
Posted by km...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
kmccusker pushed a commit to branch fix-bugs-warnings
in repository https://gitbox.apache.org/repos/asf/incubator-milagro-crypto.git
commit f96f29cd6ec53bba4307eee17f2c4746e8fcf627
Author: Kealan McCusker <ke...@gmail.com>
AuthorDate: Fri Jun 14 11:07:36 2019 +0100
fix bugs in c code, remove warnings and format code
---
version3/c/amcl.h | 10 +-
version3/c/big.c | 70 ++--
version3/c/big.h | 2 +-
version3/c/config_big.h | 2 +-
version3/c/config_ff.h | 2 +-
version3/c/ecdh.c | 76 ++--
version3/c/ecdh.h | 2 +-
version3/c/ecp.c | 169 ++++-----
version3/c/ecp.h | 2 +-
version3/c/ecp2.c | 110 +++---
version3/c/ecp2.h | 2 +-
version3/c/ecp4.c | 574 ++++++++++++++---------------
version3/c/ecp4.h | 4 +-
version3/c/ecp8.c | 823 +++++++++++++++++++++---------------------
version3/c/ecp8.h | 2 +-
version3/c/ff.h | 2 +-
version3/c/fp.c | 354 +++++++++---------
version3/c/fp.h | 2 +-
version3/c/fp12.c | 566 ++++++++++++++---------------
version3/c/fp12.h | 4 +-
version3/c/fp16.c | 99 ++---
version3/c/fp2.c | 6 +-
version3/c/fp2.h | 2 +-
version3/c/fp24.c | 736 ++++++++++++++++++-------------------
version3/c/fp24.h | 4 +-
version3/c/fp4.c | 28 +-
version3/c/fp4.h | 2 +-
version3/c/fp48.c | 843 ++++++++++++++++++++++---------------------
version3/c/fp48.h | 4 +-
version3/c/fp8.c | 217 +++++------
version3/c/mpin.c | 34 +-
version3/c/mpin.h | 2 +-
version3/c/mpin192.c | 86 ++---
version3/c/mpin192.h | 2 +-
version3/c/mpin256.c | 96 ++---
version3/c/mpin256.h | 2 +-
version3/c/oct.c | 2 +-
version3/c/pair.c | 214 +++++------
version3/c/pair.h | 2 +-
version3/c/pair192.c | 495 ++++++++++++-------------
version3/c/pair256.c | 601 +++++++++++++++---------------
version3/c/rom_curve_ANSSI.c | 4 +-
version3/c/rsa.h | 2 +-
version3/c/rsa_support.h | 4 +-
44 files changed, 3163 insertions(+), 3102 deletions(-)
diff --git a/version3/c/amcl.h b/version3/c/amcl.h
index f72557d..a976e9f 100644
--- a/version3/c/amcl.h
+++ b/version3/c/amcl.h
@@ -57,11 +57,11 @@
#define D_TYPE 0
#define M_TYPE 1
-#define FP_ZERO 0
-#define FP_UNITY 1
-#define FP_SPARSER 2
-#define FP_SPARSE 3
-#define FP_DENSE 4
+#define AMCL_FP_ZERO 0
+#define AMCL_FP_UNITY 1
+#define AMCL_AMCL_FP_SPARSER 2
+#define AMCL_FP_SPARSE 3
+#define AMCL_FP_DENSE 4
/**
diff --git a/version3/c/big.c b/version3/c/big.c
index 664cccf..3af1912 100644
--- a/version3/c/big.c
+++ b/version3/c/big.c
@@ -143,7 +143,7 @@ void BIG_XXX_toBytes(char *b,BIG_XXX a)
int i;
BIG_XXX c;
BIG_XXX_copy(c,a);
- BIG_XXX_norm(c);
+ BIG_XXX_norm(c);
for (i=MODBYTES_XXX-1; i>=0; i--)
{
b[i]=c[0]&0xff;
@@ -371,8 +371,8 @@ void BIG_XXX_add(BIG_XXX c,BIG_XXX a,BIG_XXX b)
void BIG_XXX_or(BIG_XXX c,BIG_XXX a,BIG_XXX b)
{
int i;
- BIG_XXX_norm(a);
- BIG_XXX_norm(b);
+ BIG_XXX_norm(a);
+ BIG_XXX_norm(b);
for (i=0; i<NLEN_XXX; i++)
c[i]=a[i]|b[i];
#ifdef DEBUG_NORM
@@ -876,28 +876,28 @@ void BIG_XXX_shr(BIG_XXX a,int k)
/* Fast combined shift, subtract and norm. Return sign of result */
int BIG_XXX_ssn(BIG_XXX r,BIG_XXX a,BIG_XXX m)
{
- int i,n=NLEN_XXX-1;
- chunk carry;
- m[0]=(m[0]>>1)|((m[1]<<(BASEBITS_XXX-1))&BMASK_XXX);
- r[0]=a[0]-m[0];
+ int i,n=NLEN_XXX-1;
+ chunk carry;
+ m[0]=(m[0]>>1)|((m[1]<<(BASEBITS_XXX-1))&BMASK_XXX);
+ r[0]=a[0]-m[0];
carry=r[0]>>BASEBITS_XXX;
r[0]&=BMASK_XXX;
-
- for (i=1;i<n;i++)
- {
- m[i]=(m[i]>>1)|((m[i+1]<<(BASEBITS_XXX-1))&BMASK_XXX);
- r[i]=a[i]-m[i]+carry;
- carry=r[i]>>BASEBITS_XXX;
- r[i]&=BMASK_XXX;
- }
-
- m[n]>>=1;
- r[n]=a[n]-m[n]+carry;
+
+ for (i=1; i<n; i++)
+ {
+ m[i]=(m[i]>>1)|((m[i+1]<<(BASEBITS_XXX-1))&BMASK_XXX);
+ r[i]=a[i]-m[i]+carry;
+ carry=r[i]>>BASEBITS_XXX;
+ r[i]&=BMASK_XXX;
+ }
+
+ m[n]>>=1;
+ r[n]=a[n]-m[n]+carry;
#ifdef DEBUG_NORM
r[MPV_XXX]=1;
r[MNV_XXX]=0;
#endif
- return ((r[n]>>(CHUNK-1))&1);
+ return ((r[n]>>(CHUNK-1))&1);
}
/* Faster shift right of a by k bits. Return shifted out part */
@@ -1040,9 +1040,9 @@ int BIG_XXX_dcomp(DBIG_XXX a,DBIG_XXX b)
int BIG_XXX_nbits(BIG_XXX a)
{
int bts,k=NLEN_XXX-1;
- BIG_XXX t;
+ BIG_XXX t;
chunk c;
- BIG_XXX_copy(t,a);
+ BIG_XXX_copy(t,a);
BIG_XXX_norm(t);
while (k>=0 && t[k]==0) k--;
if (k<0) return 0;
@@ -1060,9 +1060,9 @@ int BIG_XXX_nbits(BIG_XXX a)
int BIG_XXX_dnbits(DBIG_XXX a)
{
int bts,k=DNLEN_XXX-1;
- DBIG_XXX t;
+ DBIG_XXX t;
chunk c;
- BIG_XXX_dcopy(t,a);
+ BIG_XXX_dcopy(t,a);
BIG_XXX_dnorm(t);
while (k>=0 && t[k]==0) k--;
if (k<0) return 0;
@@ -1083,8 +1083,8 @@ void BIG_XXX_mod(BIG_XXX b,BIG_XXX c1)
{
int k=0;
BIG_XXX r; /**/
- BIG_XXX c;
- BIG_XXX_copy(c,c1);
+ BIG_XXX c;
+ BIG_XXX_copy(c,c1);
BIG_XXX_norm(b);
if (BIG_XXX_comp(b,c)<0)
@@ -1300,9 +1300,9 @@ void BIG_XXX_randomnum(BIG_XXX m,BIG_XXX q,csprng *rng)
void BIG_XXX_modmul(BIG_XXX r,BIG_XXX a1,BIG_XXX b1,BIG_XXX m)
{
DBIG_XXX d;
- BIG_XXX a,b;
- BIG_XXX_copy(a,a1);
- BIG_XXX_copy(b,b1);
+ BIG_XXX a,b;
+ BIG_XXX_copy(a,a1);
+ BIG_XXX_copy(b,b1);
BIG_XXX_mod(a,m);
BIG_XXX_mod(b,m);
@@ -1315,8 +1315,8 @@ void BIG_XXX_modmul(BIG_XXX r,BIG_XXX a1,BIG_XXX b1,BIG_XXX m)
void BIG_XXX_modsqr(BIG_XXX r,BIG_XXX a1,BIG_XXX m)
{
DBIG_XXX d;
- BIG_XXX a;
- BIG_XXX_copy(a,a1);
+ BIG_XXX a;
+ BIG_XXX_copy(a,a1);
BIG_XXX_mod(a,m);
BIG_XXX_sqr(d,a);
BIG_XXX_dmod(r,d,m);
@@ -1326,8 +1326,8 @@ void BIG_XXX_modsqr(BIG_XXX r,BIG_XXX a1,BIG_XXX m)
/* SU= 16 */
void BIG_XXX_modneg(BIG_XXX r,BIG_XXX a1,BIG_XXX m)
{
- BIG_XXX a;
- BIG_XXX_copy(a,a1);
+ BIG_XXX a;
+ BIG_XXX_copy(a,a1);
BIG_XXX_mod(a,m);
BIG_XXX_sub(r,m,a);
}
@@ -1338,9 +1338,9 @@ void BIG_XXX_moddiv(BIG_XXX r,BIG_XXX a1,BIG_XXX b1,BIG_XXX m)
{
DBIG_XXX d;
BIG_XXX z;
- BIG_XXX a,b;
- BIG_XXX_copy(a,a1);
- BIG_XXX_copy(b,b1);
+ BIG_XXX a,b;
+ BIG_XXX_copy(a,a1);
+ BIG_XXX_copy(b,b1);
BIG_XXX_mod(a,m);
BIG_XXX_invmodp(z,b,m);
diff --git a/version3/c/big.h b/version3/c/big.h
index 7874450..7e89b36 100644
--- a/version3/c/big.h
+++ b/version3/c/big.h
@@ -18,7 +18,7 @@
*/
/**
- * @file big.h
+ * @file big_XXX.h
* @author Mike Scott
* @brief BIG Header File
*
diff --git a/version3/c/config_big.h b/version3/c/config_big.h
index 76822ed..4640b21 100644
--- a/version3/c/config_big.h
+++ b/version3/c/config_big.h
@@ -18,7 +18,7 @@
*/
/**
- * @file config_big.h
+ * @file config_big_XXX.h
* @author Mike Scott
* @brief Config BIG Header File
*
diff --git a/version3/c/config_ff.h b/version3/c/config_ff.h
index 173dab7..65595da 100644
--- a/version3/c/config_ff.h
+++ b/version3/c/config_ff.h
@@ -18,7 +18,7 @@
*/
/**
- * @file config_ff.h
+ * @file config_ff_WWW.h
* @author Mike Scott
* @brief COnfig FF Header File
*
diff --git a/version3/c/ecdh.c b/version3/c/ecdh.c
index 953685d..216c509 100644
--- a/version3/c/ecdh.c
+++ b/version3/c/ecdh.c
@@ -33,11 +33,11 @@ under the License.
* otherwise it is generated randomly internally */
int ECP_ZZZ_KEY_PAIR_GENERATE(csprng *RNG,octet* S,octet *W)
{
- BIG_XXX r,gx,gy,s;
+ BIG_XXX r,s;
ECP_ZZZ G;
int res=0;
- ECP_ZZZ_generator(&G);
+ ECP_ZZZ_generator(&G);
BIG_XXX_rcopy(r,CURVE_Order_ZZZ);
if (RNG!=NULL)
@@ -59,7 +59,7 @@ int ECP_ZZZ_KEY_PAIR_GENERATE(csprng *RNG,octet* S,octet *W)
ECP_ZZZ_mul(&G,s);
- ECP_ZZZ_toOctet(W,&G,false); /* To use point compression on public keys, change to true */
+ ECP_ZZZ_toOctet(W,&G,false); /* To use point compression on public keys, change to true */
return res;
}
@@ -67,7 +67,7 @@ int ECP_ZZZ_KEY_PAIR_GENERATE(csprng *RNG,octet* S,octet *W)
/* Validate public key */
int ECP_ZZZ_PUBLIC_KEY_VALIDATE(octet *W)
{
- BIG_XXX q,r,wx,k;
+ BIG_XXX q,r,k;
ECP_ZZZ WP;
int valid,nb;
int res=0;
@@ -75,11 +75,12 @@ int ECP_ZZZ_PUBLIC_KEY_VALIDATE(octet *W)
BIG_XXX_rcopy(q,Modulus_YYY);
BIG_XXX_rcopy(r,CURVE_Order_ZZZ);
- valid=ECP_ZZZ_fromOctet(&WP,W);
- if (!valid) res=ECDH_INVALID_PUBLIC_KEY;
+ valid=ECP_ZZZ_fromOctet(&WP,W);
+ if (!valid) res=ECDH_INVALID_PUBLIC_KEY;
if (res==0)
- { /* Check point is not in wrong group */
+ {
+ /* Check point is not in wrong group */
nb=BIG_XXX_nbits(q);
BIG_XXX_one(k);
BIG_XXX_shl(k,(nb+4)/2);
@@ -109,7 +110,7 @@ int ECP_ZZZ_SVDP_DH(octet *S,octet *WD,octet *Z)
BIG_XXX_fromBytes(s,S->val);
- valid=ECP_ZZZ_fromOctet(&W,WD);
+ valid=ECP_ZZZ_fromOctet(&W,WD);
if (!valid) res=ECDH_ERROR;
if (res==0)
@@ -141,12 +142,12 @@ int ECP_ZZZ_SP_DSA(int sha,csprng *RNG,octet *K,octet *S,octet *F,octet *C,octet
char h[128];
octet H= {0,sizeof(h),h};
- BIG_XXX gx,gy,r,s,f,c,d,u,vx,w;
+ BIG_XXX r,s,f,c,d,u,vx,w;
ECP_ZZZ G,V;
ehashit(sha,F,-1,NULL,&H,sha);
- ECP_ZZZ_generator(&G);
+ ECP_ZZZ_generator(&G);
BIG_XXX_rcopy(r,CURVE_Order_ZZZ);
@@ -156,41 +157,42 @@ int ECP_ZZZ_SP_DSA(int sha,csprng *RNG,octet *K,octet *S,octet *F,octet *C,octet
if (H.len>MODBYTES_XXX) hlen=MODBYTES_XXX;
BIG_XXX_fromBytesLen(f,H.val,hlen);
- if (RNG!=NULL)
- {
- do
- {
+ if (RNG!=NULL)
+ {
+ do
+ {
BIG_XXX_randomnum(u,r,RNG);
BIG_XXX_randomnum(w,r,RNG); /* side channel masking */
#ifdef AES_S
- BIG_XXX_mod2m(u,2*AES_S);
+ BIG_XXX_mod2m(u,2*AES_S);
#endif
- ECP_ZZZ_copy(&V,&G);
- ECP_ZZZ_mul(&V,u);
+ ECP_ZZZ_copy(&V,&G);
+ ECP_ZZZ_mul(&V,u);
+
+ ECP_ZZZ_get(vx,vx,&V);
- ECP_ZZZ_get(vx,vx,&V);
+ BIG_XXX_copy(c,vx);
+ BIG_XXX_mod(c,r);
+ if (BIG_XXX_iszilch(c)) continue;
- BIG_XXX_copy(c,vx);
- BIG_XXX_mod(c,r);
- if (BIG_XXX_iszilch(c)) continue;
-
BIG_XXX_modmul(u,u,w,r);
- BIG_XXX_invmodp(u,u,r);
- BIG_XXX_modmul(d,s,c,r);
+ BIG_XXX_invmodp(u,u,r);
+ BIG_XXX_modmul(d,s,c,r);
+
+ BIG_XXX_add(d,f,d);
- BIG_XXX_add(d,f,d);
-
BIG_XXX_modmul(d,d,w,r);
- BIG_XXX_modmul(d,u,d,r);
- } while (BIG_XXX_iszilch(d));
- }
- else
- {
- BIG_XXX_fromBytes(u,K->val);
- BIG_XXX_mod(u,r);
+ BIG_XXX_modmul(d,u,d,r);
+ }
+ while (BIG_XXX_iszilch(d));
+ }
+ else
+ {
+ BIG_XXX_fromBytes(u,K->val);
+ BIG_XXX_mod(u,r);
#ifdef AES_S
BIG_XXX_mod2m(u,2*AES_S);
@@ -203,7 +205,7 @@ int ECP_ZZZ_SP_DSA(int sha,csprng *RNG,octet *K,octet *S,octet *F,octet *C,octet
BIG_XXX_copy(c,vx);
BIG_XXX_mod(c,r);
if (BIG_XXX_iszilch(c)) return ECDH_ERROR;
-
+
BIG_XXX_invmodp(u,u,r);
BIG_XXX_modmul(d,s,c,r);
@@ -228,14 +230,14 @@ int ECP_ZZZ_VP_DSA(int sha,octet *W,octet *F, octet *C,octet *D)
char h[128];
octet H= {0,sizeof(h),h};
- BIG_XXX r,gx,gy,wx,wy,f,c,d,h2;
+ BIG_XXX r,f,c,d,h2;
int res=0;
ECP_ZZZ G,WP;
int valid;
ehashit(sha,F,-1,NULL,&H,sha);
- ECP_ZZZ_generator(&G);
+ ECP_ZZZ_generator(&G);
BIG_XXX_rcopy(r,CURVE_Order_ZZZ);
@@ -261,7 +263,7 @@ int ECP_ZZZ_VP_DSA(int sha,octet *W,octet *F, octet *C,octet *D)
BIG_XXX_modmul(f,f,d,r);
BIG_XXX_modmul(h2,c,d,r);
- valid=ECP_ZZZ_fromOctet(&WP,W);
+ valid=ECP_ZZZ_fromOctet(&WP,W);
if (!valid) res=ECDH_ERROR;
else
diff --git a/version3/c/ecdh.h b/version3/c/ecdh.h
index 10a1828..cbeae6a 100644
--- a/version3/c/ecdh.h
+++ b/version3/c/ecdh.h
@@ -18,7 +18,7 @@ under the License.
*/
/**
- * @file ecdh.h
+ * @file ecdh_ZZZ.h
* @author Mike Scott
* @brief ECDH Header file for implementation of standard EC protocols
*
diff --git a/version3/c/ecp.c b/version3/c/ecp.c
index 60eddaa..f0ae94e 100644
--- a/version3/c/ecp.c
+++ b/version3/c/ecp.c
@@ -191,7 +191,7 @@ void ECP_ZZZ_rhs(FP_YYY *v,FP_YYY *x)
FP_YYY_mul(&t,v,&t);
FP_YYY_sub(&t,&t,&one);
- FP_YYY_norm(&t);
+ FP_YYY_norm(&t);
if (CURVE_A_ZZZ==1) FP_YYY_sub(v,v,&one);
if (CURVE_A_ZZZ==-1)
@@ -200,10 +200,10 @@ void ECP_ZZZ_rhs(FP_YYY *v,FP_YYY *x)
FP_YYY_norm(v);
FP_YYY_neg(v,v);
}
- FP_YYY_norm(v);
- FP_YYY_inv(&t,&t);
- FP_YYY_mul(v,v,&t);
- FP_YYY_reduce(v);
+ FP_YYY_norm(v);
+ FP_YYY_inv(&t,&t);
+ FP_YYY_mul(v,v,&t);
+ FP_YYY_reduce(v);
#endif
#if CURVETYPE_ZZZ==MONTGOMERY
@@ -239,7 +239,7 @@ int ECP_ZZZ_set(ECP_ZZZ *P,BIG_XXX x)
ECP_ZZZ_inf(P);
return 0;
}
-
+
FP_YYY_nres(&(P->x),x);
FP_YYY_one(&(P->z));
return 1;
@@ -248,11 +248,11 @@ int ECP_ZZZ_set(ECP_ZZZ *P,BIG_XXX x)
/* Extract x coordinate as BIG */
int ECP_ZZZ_get(BIG_XXX x,ECP_ZZZ *P)
{
- ECP_ZZZ W;
- ECP_ZZZ_copy(&W,P);
- ECP_ZZZ_affine(&W);
+ ECP_ZZZ W;
+ ECP_ZZZ_copy(&W,P);
+ ECP_ZZZ_affine(&W);
if (ECP_ZZZ_isinf(&W)) return -1;
- FP_YYY_redc(x,&(Wx));
+ FP_YYY_redc(x,&(W));
return 0;
}
@@ -262,10 +262,10 @@ int ECP_ZZZ_get(BIG_XXX x,ECP_ZZZ *P)
/* SU=16 */
int ECP_ZZZ_get(BIG_XXX x,BIG_XXX y,ECP_ZZZ *P)
{
- ECP_ZZZ W;
+ ECP_ZZZ W;
int s;
- ECP_ZZZ_copy(&W,P);
- ECP_ZZZ_affine(&W);
+ ECP_ZZZ_copy(&W,P);
+ ECP_ZZZ_affine(&W);
if (ECP_ZZZ_isinf(&W)) return -1;
@@ -336,26 +336,27 @@ int ECP_ZZZ_setx(ECP_ZZZ *P,BIG_XXX x,int s)
#endif
void ECP_ZZZ_cfp(ECP_ZZZ *P)
-{ /* multiply point by curves cofactor */
- BIG_XXX c;
- int cf=CURVE_Cof_I_ZZZ;
- if (cf==1) return;
- if (cf==4)
- {
- ECP_ZZZ_dbl(P);
- ECP_ZZZ_dbl(P);
- return;
- }
- if (cf==8)
- {
- ECP_ZZZ_dbl(P);
- ECP_ZZZ_dbl(P);
- ECP_ZZZ_dbl(P);
- return;
- }
- BIG_XXX_rcopy(c,CURVE_Cof_ZZZ);
- ECP_ZZZ_mul(P,c);
- return;
+{
+ /* multiply point by curves cofactor */
+ BIG_XXX c;
+ int cf=CURVE_Cof_I_ZZZ;
+ if (cf==1) return;
+ if (cf==4)
+ {
+ ECP_ZZZ_dbl(P);
+ ECP_ZZZ_dbl(P);
+ return;
+ }
+ if (cf==8)
+ {
+ ECP_ZZZ_dbl(P);
+ ECP_ZZZ_dbl(P);
+ ECP_ZZZ_dbl(P);
+ return;
+ }
+ BIG_XXX_rcopy(c,CURVE_Cof_ZZZ);
+ ECP_ZZZ_mul(P,c);
+ return;
}
/* map BIG to point on curve of correct order */
@@ -364,25 +365,26 @@ void ECP_ZZZ_cfp(ECP_ZZZ *P)
void ECP_ZZZ_mapit(ECP_ZZZ *P,octet *W)
{
BIG_XXX q,x;
- BIG_XXX_fromBytes(x,W->val);
+ BIG_XXX_fromBytes(x,W->val);
BIG_XXX_rcopy(q,Modulus_YYY);
BIG_XXX_mod(x,q);
- for (;;)
- {
- for (;;)
- {
+ for (;;)
+ {
+ for (;;)
+ {
#if CURVETYPE_ZZZ!=MONTGOMERY
- ECP_ZZZ_setx(P,x,0);
+ ECP_ZZZ_setx(P,x,0);
#else
- ECP_ZZZ_set(P,x);
+ ECP_ZZZ_set(P,x);
#endif
- BIG_XXX_inc(x,1); BIG_XXX_norm(x);
- if (!ECP_ZZZ_isinf(P)) break;
- }
- ECP_ZZZ_cfp(P);
- if (!ECP_ZZZ_isinf(P)) break;
- }
+ BIG_XXX_inc(x,1);
+ BIG_XXX_norm(x);
+ if (!ECP_ZZZ_isinf(P)) break;
+ }
+ ECP_ZZZ_cfp(P);
+ if (!ECP_ZZZ_isinf(P)) break;
+ }
}
/* Convert P to Affine, from (x,y,z) to (x,y) */
@@ -390,12 +392,11 @@ void ECP_ZZZ_mapit(ECP_ZZZ *P,octet *W)
void ECP_ZZZ_affine(ECP_ZZZ *P)
{
FP_YYY one,iz;
- BIG_XXX b;
if (ECP_ZZZ_isinf(P)) return;
FP_YYY_one(&one);
if (FP_YYY_equals(&(P->z),&one)) return;
- FP_YYY_inv(&iz,&(P->z));
+ FP_YYY_inv(&iz,&(P->z));
FP_YYY_mul(&(P->x),&(P->x),&iz);
#if CURVETYPE_ZZZ==EDWARDS || CURVETYPE_ZZZ==WEIERSTRASS
@@ -514,20 +515,20 @@ void ECP_ZZZ_toOctet(octet *W,ECP_ZZZ *P,bool compress)
#else
BIG_XXX x,y;
ECP_ZZZ_get(x,y,P);
- if (compress)
- {
- W->val[0]=0x02;
- if (BIG_XXX_parity(y)==1) W->val[0]=0x03;
- W->len=MODBYTES_XXX+1;
- BIG_XXX_toBytes(&(W->val[1]),x);
- }
- else
- {
- W->val[0]=4;
- W->len=2*MODBYTES_XXX+1;
- BIG_XXX_toBytes(&(W->val[1]),x);
- BIG_XXX_toBytes(&(W->val[MODBYTES_XXX+1]),y);
- }
+ if (compress)
+ {
+ W->val[0]=0x02;
+ if (BIG_XXX_parity(y)==1) W->val[0]=0x03;
+ W->len=MODBYTES_XXX+1;
+ BIG_XXX_toBytes(&(W->val[1]),x);
+ }
+ else
+ {
+ W->val[0]=4;
+ W->len=2*MODBYTES_XXX+1;
+ BIG_XXX_toBytes(&(W->val[1]),x);
+ BIG_XXX_toBytes(&(W->val[MODBYTES_XXX+1]),y);
+ }
#endif
}
@@ -542,17 +543,17 @@ int ECP_ZZZ_fromOctet(ECP_ZZZ *P,octet *W)
return 0;
#else
BIG_XXX x,y;
- int typ=W->val[0];
- BIG_XXX_fromBytes(x,&(W->val[1]));
- if (typ==0x04)
- {
- BIG_XXX_fromBytes(y,&(W->val[MODBYTES_XXX+1]));
- if (ECP_ZZZ_set(P,x,y)) return 1;
- }
- if (typ==0x02 || typ==0x03)
- {
- if (ECP_ZZZ_setx(P,x,typ&1)) return 1;
- }
+ int typ=W->val[0];
+ BIG_XXX_fromBytes(x,&(W->val[1]));
+ if (typ==0x04)
+ {
+ BIG_XXX_fromBytes(y,&(W->val[MODBYTES_XXX+1]));
+ if (ECP_ZZZ_set(P,x,y)) return 1;
+ }
+ if (typ==0x02 || typ==0x03)
+ {
+ if (ECP_ZZZ_setx(P,x,typ&1)) return 1;
+ }
return 0;
#endif
}
@@ -591,7 +592,7 @@ void ECP_ZZZ_dbl(ECP_ZZZ *P)
FP_YYY_mul(&y3,&y3,&t0); //y3.mul(t0);
FP_YYY_add(&y3,&y3,&x3); //y3.add(x3);
FP_YYY_mul(&t1,&(P->x),&(P->y)); //t1.mul(y);
-
+
FP_YYY_norm(&t0); //x.norm();
FP_YYY_mul(&(P->x),&t0,&t1); //x.mul(t1);
FP_YYY_add(&(P->x),&(P->x),&(P->x)); //x.add(x);
@@ -780,7 +781,7 @@ void ECP_ZZZ_add(ECP_ZZZ *P,ECP_ZZZ *Q)
FP_YYY_mul(&t2,&(P->z),&(Q->z)); //t2.mul(Q.z);
FP_YYY_add(&t3,&(P->x),&(P->y)); //t3.add(y);
FP_YYY_norm(&t3); //t3.norm();
-
+
FP_YYY_add(&t4,&(Q->x),&(Q->y)); //t4.add(Q.y);
FP_YYY_norm(&t4); //t4.norm();
FP_YYY_mul(&t3,&t3,&t4); //t3.mul(t4);
@@ -847,7 +848,7 @@ void ECP_ZZZ_add(ECP_ZZZ *P,ECP_ZZZ *Q)
FP_YYY_add(&t4,&(Q->x),&(Q->y)); //t4.add(Q.y);
FP_YYY_norm(&t4); //t4.norm();//5
FP_YYY_mul(&t3,&t3,&t4); //t3.mul(t4);//6
-
+
FP_YYY_add(&t4,&t0,&t1); //t4.add(t1); //t4.norm(); //7
FP_YYY_sub(&t3,&t3,&t4); //t3.sub(t4);
FP_YYY_norm(&t3); //t3.norm(); //8
@@ -914,7 +915,7 @@ void ECP_ZZZ_add(ECP_ZZZ *P,ECP_ZZZ *Q)
FP_YYY_mul(&x3,&x3,&t3); //x3.mul(t3);//39
FP_YYY_sub(&(P->x),&x3,&t1); //x3.sub(t1);//40
FP_YYY_mul(&z3,&z3,&t4); //z3.mul(t4);//41
-
+
FP_YYY_mul(&t1,&t3,&t0); //t1.mul(t0);//42
FP_YYY_add(&(P->z),&z3,&t1); //z3.add(t1);
FP_YYY_norm(&(P->x)); //x.norm();
@@ -981,9 +982,9 @@ void ECP_ZZZ_add(ECP_ZZZ *P,ECP_ZZZ *Q)
/* SU=16 */
void ECP_ZZZ_sub(ECP_ZZZ *P,ECP_ZZZ *Q)
{
- ECP_ZZZ NQ;
- ECP_ZZZ_copy(&NQ,Q);
- ECP_ZZZ_neg(&NQ);
+ ECP_ZZZ NQ;
+ ECP_ZZZ_copy(&NQ,Q);
+ ECP_ZZZ_neg(&NQ);
ECP_ZZZ_add(P,&NQ);
}
@@ -1219,13 +1220,13 @@ void ECP_ZZZ_mul2(ECP_ZZZ *P,ECP_ZZZ *Q,BIG_XXX e,BIG_XXX f)
void ECP_ZZZ_generator(ECP_ZZZ *G)
{
- BIG_XXX x,y;
- BIG_XXX_rcopy(x,CURVE_Gx_ZZZ);
+ BIG_XXX x,y;
+ BIG_XXX_rcopy(x,CURVE_Gx_ZZZ);
#if CURVETYPE_ZZZ!=MONTGOMERY
- BIG_XXX_rcopy(y,CURVE_Gy_ZZZ);
+ BIG_XXX_rcopy(y,CURVE_Gy_ZZZ);
ECP_ZZZ_set(G,x,y);
#else
- ECP_ZZZ_set(G,x);
+ ECP_ZZZ_set(G,x);
#endif
}
diff --git a/version3/c/ecp.h b/version3/c/ecp.h
index 01dac7c..f07230b 100644
--- a/version3/c/ecp.h
+++ b/version3/c/ecp.h
@@ -18,7 +18,7 @@
*/
/**
- * @file ecp.h
+ * @file ecp_ZZZ.h
* @author Mike Scott
* @brief ECP Header File
*
diff --git a/version3/c/ecp2.c b/version3/c/ecp2.c
index 5463c37..4a6f937 100644
--- a/version3/c/ecp2.c
+++ b/version3/c/ecp2.c
@@ -128,9 +128,9 @@ void ECP2_ZZZ_affine(ECP2_ZZZ *P)
/* SU= 16 */
int ECP2_ZZZ_get(FP2_YYY *x,FP2_YYY *y,ECP2_ZZZ *P)
{
- ECP2_ZZZ W;
- ECP2_ZZZ_copy(&W,P);
- ECP2_ZZZ_affine(&W);
+ ECP2_ZZZ W;
+ ECP2_ZZZ_copy(&W,P);
+ ECP2_ZZZ_affine(&W);
if (ECP2_ZZZ_isinf(&W)) return -1;
FP2_YYY_copy(y,&(W.y));
FP2_YYY_copy(x,&(W.x));
@@ -259,7 +259,7 @@ int ECP2_ZZZ_set(ECP2_ZZZ *P,FP2_YYY *x,FP2_YYY *y)
if (!FP2_YYY_equals(&y2,&rhs))
{
- ECP2_ZZZ_inf(P);
+ ECP2_ZZZ_inf(P);
return 0;
}
@@ -279,7 +279,7 @@ int ECP2_ZZZ_setx(ECP2_ZZZ *P,FP2_YYY *x)
if (!FP2_YYY_sqrt(&y,&y))
{
- ECP2_ZZZ_inf(P);
+ ECP2_ZZZ_inf(P);
return 0;
}
@@ -444,9 +444,9 @@ int ECP2_ZZZ_add(ECP2_ZZZ *P,ECP2_ZZZ *Q)
/* SU= 16 */
void ECP2_ZZZ_sub(ECP2_ZZZ *P,ECP2_ZZZ *Q)
{
- ECP2_ZZZ NQ;
- ECP2_ZZZ_copy(&NQ,Q);
- ECP2_ZZZ_neg(&NQ);
+ ECP2_ZZZ NQ;
+ ECP2_ZZZ_copy(&NQ,Q);
+ ECP2_ZZZ_neg(&NQ);
ECP2_ZZZ_add(P,&NQ);
}
@@ -534,15 +534,15 @@ void ECP2_ZZZ_frob(ECP2_ZZZ *P,FP2_YYY *X)
// Bos & Costello https://eprint.iacr.org/2013/458.pdf
// Faz-Hernandez & Longa & Sanchez https://eprint.iacr.org/2013/158.pdf
-// Side channel attack secure
+// Side channel attack secure
void ECP2_ZZZ_mul4(ECP2_ZZZ *P,ECP2_ZZZ Q[4],BIG_XXX u[4])
{
int i,j,k,nb,pb,bt;
- ECP2_ZZZ T[8],W;
+ ECP2_ZZZ T[8],W;
BIG_XXX t[4],mt;
- sign8 w[NLEN_XXX*BASEBITS_XXX+1];
- sign8 s[NLEN_XXX*BASEBITS_XXX+1];
+ sign8 w[NLEN_XXX*BASEBITS_XXX+1];
+ sign8 s[NLEN_XXX*BASEBITS_XXX+1];
for (i=0; i<4; i++)
{
@@ -552,24 +552,24 @@ void ECP2_ZZZ_mul4(ECP2_ZZZ *P,ECP2_ZZZ Q[4],BIG_XXX u[4])
// Precomputed table
ECP2_ZZZ_copy(&T[0],&Q[0]); // Q[0]
ECP2_ZZZ_copy(&T[1],&T[0]);
- ECP2_ZZZ_add(&T[1],&Q[1]); // Q[0]+Q[1]
+ ECP2_ZZZ_add(&T[1],&Q[1]); // Q[0]+Q[1]
ECP2_ZZZ_copy(&T[2],&T[0]);
- ECP2_ZZZ_add(&T[2],&Q[2]); // Q[0]+Q[2]
- ECP2_ZZZ_copy(&T[3],&T[1]);
- ECP2_ZZZ_add(&T[3],&Q[2]); // Q[0]+Q[1]+Q[2]
- ECP2_ZZZ_copy(&T[4],&T[0]);
- ECP2_ZZZ_add(&T[4],&Q[3]); // Q[0]+Q[3]
- ECP2_ZZZ_copy(&T[5],&T[1]);
- ECP2_ZZZ_add(&T[5],&Q[3]); // Q[0]+Q[1]+Q[3]
- ECP2_ZZZ_copy(&T[6],&T[2]);
- ECP2_ZZZ_add(&T[6],&Q[3]); // Q[0]+Q[2]+Q[3]
- ECP2_ZZZ_copy(&T[7],&T[3]);
- ECP2_ZZZ_add(&T[7],&Q[3]); // Q[0]+Q[1]+Q[2]+Q[3]
+ ECP2_ZZZ_add(&T[2],&Q[2]); // Q[0]+Q[2]
+ ECP2_ZZZ_copy(&T[3],&T[1]);
+ ECP2_ZZZ_add(&T[3],&Q[2]); // Q[0]+Q[1]+Q[2]
+ ECP2_ZZZ_copy(&T[4],&T[0]);
+ ECP2_ZZZ_add(&T[4],&Q[3]); // Q[0]+Q[3]
+ ECP2_ZZZ_copy(&T[5],&T[1]);
+ ECP2_ZZZ_add(&T[5],&Q[3]); // Q[0]+Q[1]+Q[3]
+ ECP2_ZZZ_copy(&T[6],&T[2]);
+ ECP2_ZZZ_add(&T[6],&Q[3]); // Q[0]+Q[2]+Q[3]
+ ECP2_ZZZ_copy(&T[7],&T[3]);
+ ECP2_ZZZ_add(&T[7],&Q[3]); // Q[0]+Q[1]+Q[2]+Q[3]
// Make it odd
- pb=1-BIG_XXX_parity(t[0]);
- BIG_XXX_inc(t[0],pb);
- BIG_XXX_norm(t[0]);
+ pb=1-BIG_XXX_parity(t[0]);
+ BIG_XXX_inc(t[0],pb);
+ BIG_XXX_norm(t[0]);
// Number of bits
BIG_XXX_zero(mt);
@@ -579,33 +579,33 @@ void ECP2_ZZZ_mul4(ECP2_ZZZ *P,ECP2_ZZZ Q[4],BIG_XXX u[4])
}
nb=1+BIG_XXX_nbits(mt);
-// Sign pivot
- s[nb-1]=1;
- for (i=0;i<nb-1;i++)
- {
+// Sign pivot
+ s[nb-1]=1;
+ for (i=0; i<nb-1; i++)
+ {
BIG_XXX_fshr(t[0],1);
- s[i]=2*BIG_XXX_parity(t[0])-1;
- }
+ s[i]=2*BIG_XXX_parity(t[0])-1;
+ }
// Recoded exponent
for (i=0; i<nb; i++)
{
- w[i]=0;
- k=1;
- for (j=1; j<4; j++)
- {
- bt=s[i]*BIG_XXX_parity(t[j]);
- BIG_XXX_fshr(t[j],1);
-
- BIG_XXX_dec(t[j],(bt>>1));
- BIG_XXX_norm(t[j]);
- w[i]+=bt*k;
- k*=2;
+ w[i]=0;
+ k=1;
+ for (j=1; j<4; j++)
+ {
+ bt=s[i]*BIG_XXX_parity(t[j]);
+ BIG_XXX_fshr(t[j],1);
+
+ BIG_XXX_dec(t[j],(bt>>1));
+ BIG_XXX_norm(t[j]);
+ w[i]+=bt*k;
+ k*=2;
}
- }
+ }
// Main loop
- ECP2_ZZZ_select(P,T,2*w[nb-1]+1);
+ ECP2_ZZZ_select(P,T,2*w[nb-1]+1);
for (i=nb-2; i>=0; i--)
{
ECP2_ZZZ_select(&W,T,2*w[i]+s[i]);
@@ -614,9 +614,9 @@ void ECP2_ZZZ_mul4(ECP2_ZZZ *P,ECP2_ZZZ Q[4],BIG_XXX u[4])
}
// apply correction
- ECP2_ZZZ_copy(&W,P);
- ECP2_ZZZ_sub(&W,&Q[0]);
- ECP2_ZZZ_cmove(P,&W,pb);
+ ECP2_ZZZ_copy(&W,P);
+ ECP2_ZZZ_sub(&W,&Q[0]);
+ ECP2_ZZZ_cmove(P,&W,pb);
ECP2_ZZZ_affine(P);
}
@@ -713,12 +713,12 @@ void ECP2_ZZZ_mapit(ECP2_ZZZ *Q,octet *W)
void ECP2_ZZZ_generator(ECP2_ZZZ *G)
{
- FP2_YYY wx,wy;
+ FP2_YYY wx,wy;
- FP_YYY_rcopy(&(wx.a),CURVE_Pxa_ZZZ);
- FP_YYY_rcopy(&(wx.b),CURVE_Pxb_ZZZ);
- FP_YYY_rcopy(&(wy.a),CURVE_Pya_ZZZ);
- FP_YYY_rcopy(&(wy.b),CURVE_Pyb_ZZZ);
+ FP_YYY_rcopy(&(wx.a),CURVE_Pxa_ZZZ);
+ FP_YYY_rcopy(&(wx.b),CURVE_Pxb_ZZZ);
+ FP_YYY_rcopy(&(wy.a),CURVE_Pya_ZZZ);
+ FP_YYY_rcopy(&(wy.b),CURVE_Pyb_ZZZ);
- ECP2_ZZZ_set(G,&wx,&wy);
+ ECP2_ZZZ_set(G,&wx,&wy);
}
diff --git a/version3/c/ecp2.h b/version3/c/ecp2.h
index 32c0420..046953a 100644
--- a/version3/c/ecp2.h
+++ b/version3/c/ecp2.h
@@ -18,7 +18,7 @@
*/
/**
- * @file ecp2.h
+ * @file ecp2_ZZZ.h
* @author Mike Scott
* @brief ECP2 Header File
*
diff --git a/version3/c/ecp4.c b/version3/c/ecp4.c
index e8148c4..3f95f7a 100644
--- a/version3/c/ecp4.c
+++ b/version3/c/ecp4.c
@@ -23,7 +23,7 @@ under the License.
int ECP4_ZZZ_isinf(ECP4_ZZZ *P)
{
- return (FP4_YYY_iszilch(&(P->x)) & FP4_YYY_iszilch(&(P->z)));
+ return (FP4_YYY_iszilch(&(P->x)) & FP4_YYY_iszilch(&(P->z)));
}
/* Set P=Q */
@@ -31,7 +31,7 @@ void ECP4_ZZZ_copy(ECP4_ZZZ *P,ECP4_ZZZ *Q)
{
FP4_YYY_copy(&(P->x),&(Q->x));
FP4_YYY_copy(&(P->y),&(Q->y));
- FP4_YYY_copy(&(P->z),&(Q->z));
+ FP4_YYY_copy(&(P->z),&(Q->z));
}
/* set P to Infinity */
@@ -125,9 +125,9 @@ int ECP4_ZZZ_equals(ECP4_ZZZ *P,ECP4_ZZZ *Q)
/* extract x, y from point P */
int ECP4_ZZZ_get(FP4_YYY *x,FP4_YYY *y,ECP4_ZZZ *P)
{
- ECP4_ZZZ W;
- ECP4_ZZZ_copy(&W,P);
- ECP4_ZZZ_affine(&W);
+ ECP4_ZZZ W;
+ ECP4_ZZZ_copy(&W,P);
+ ECP4_ZZZ_affine(&W);
if (ECP4_ZZZ_isinf(&W)) return -1;
FP4_YYY_copy(y,&(W.y));
FP4_YYY_copy(x,&(W.x));
@@ -154,16 +154,16 @@ void ECP4_ZZZ_output(ECP4_ZZZ *P)
/* Convert Q to octet string */
void ECP4_ZZZ_toOctet(octet *W,ECP4_ZZZ *Q)
{
- BIG_XXX b;
- FP4_YYY qx,qy;
- FP2_YYY pa,pb;
+ BIG_XXX b;
+ FP4_YYY qx,qy;
+ FP2_YYY pa,pb;
ECP4_ZZZ_get(&qx,&qy,Q);
- FP2_YYY_copy(&pa,&(qx.a));
- FP2_YYY_copy(&pb,&(qx.b));
+ FP2_YYY_copy(&pa,&(qx.a));
+ FP2_YYY_copy(&pb,&(qx.b));
- FP_YYY_redc(b,&(pa.a));
+ FP_YYY_redc(b,&(pa.a));
BIG_XXX_toBytes(&(W->val[0]),b);
FP_YYY_redc(b,&(pa.b));
BIG_XXX_toBytes(&(W->val[MODBYTES_XXX]),b);
@@ -172,10 +172,10 @@ void ECP4_ZZZ_toOctet(octet *W,ECP4_ZZZ *Q)
FP_YYY_redc(b,&(pb.b));
BIG_XXX_toBytes(&(W->val[3*MODBYTES_XXX]),b);
- FP2_YYY_copy(&pa,&(qy.a));
- FP2_YYY_copy(&pb,&(qy.b));
-
- FP_YYY_redc(b,&(pa.a));
+ FP2_YYY_copy(&pa,&(qy.a));
+ FP2_YYY_copy(&pb,&(qy.b));
+
+ FP_YYY_redc(b,&(pa.a));
BIG_XXX_toBytes(&(W->val[4*MODBYTES_XXX]),b);
FP_YYY_redc(b,&(pa.b));
BIG_XXX_toBytes(&(W->val[5*MODBYTES_XXX]),b);
@@ -190,12 +190,12 @@ void ECP4_ZZZ_toOctet(octet *W,ECP4_ZZZ *Q)
/* restore Q from octet string */
int ECP4_ZZZ_fromOctet(ECP4_ZZZ *Q,octet *W)
{
- BIG_XXX b;
+ BIG_XXX b;
FP4_YYY qx,qy;
- FP2_YYY pa,pb;
+ FP2_YYY pa,pb;
BIG_XXX_fromBytes(b,&(W->val[0]));
- FP_YYY_nres(&(pa.a),b);
+ FP_YYY_nres(&(pa.a),b);
BIG_XXX_fromBytes(b,&(W->val[MODBYTES_XXX]));
FP_YYY_nres(&(pa.b),b);
BIG_XXX_fromBytes(b,&(W->val[2*MODBYTES_XXX]));
@@ -203,11 +203,11 @@ int ECP4_ZZZ_fromOctet(ECP4_ZZZ *Q,octet *W)
BIG_XXX_fromBytes(b,&(W->val[3*MODBYTES_XXX]));
FP_YYY_nres(&(pb.b),b);
- FP2_YYY_copy(&(qx.a),&pa);
- FP2_YYY_copy(&(qx.b),&pb);
+ FP2_YYY_copy(&(qx.a),&pa);
+ FP2_YYY_copy(&(qx.b),&pb);
BIG_XXX_fromBytes(b,&(W->val[4*MODBYTES_XXX]));
- FP_YYY_nres(&(pa.a),b);
+ FP_YYY_nres(&(pa.a),b);
BIG_XXX_fromBytes(b,&(W->val[5*MODBYTES_XXX]));
FP_YYY_nres(&(pa.b),b);
BIG_XXX_fromBytes(b,&(W->val[6*MODBYTES_XXX]));
@@ -215,8 +215,8 @@ int ECP4_ZZZ_fromOctet(ECP4_ZZZ *Q,octet *W)
BIG_XXX_fromBytes(b,&(W->val[7*MODBYTES_XXX]));
FP_YYY_nres(&(pb.b),b);
- FP2_YYY_copy(&(qy.a),&pa);
- FP2_YYY_copy(&(qy.b),&pb);
+ FP2_YYY_copy(&(qy.a),&pa);
+ FP2_YYY_copy(&(qy.b),&pb);
if (ECP4_ZZZ_set(Q,&qx,&qy)) return 1;
@@ -228,7 +228,7 @@ void ECP4_ZZZ_rhs(FP4_YYY *rhs,FP4_YYY *x)
{
/* calculate RHS of elliptic curve equation */
FP4_YYY t;
- FP2_YYY t2;
+ FP2_YYY t2;
BIG_XXX b;
FP4_YYY_sqr(&t,x);
@@ -239,13 +239,13 @@ void ECP4_ZZZ_rhs(FP4_YYY *rhs,FP4_YYY *x)
BIG_XXX_rcopy(b,CURVE_B_ZZZ);
FP2_YYY_from_BIG(&t2,b);
- FP4_YYY_from_FP2(&t,&t2);
+ FP4_YYY_from_FP2(&t,&t2);
-#if SEXTIC_TWIST_ZZZ == D_TYPE
+#if SEXTIC_TWIST_ZZZ == D_TYPE
FP4_YYY_div_i(&t); /* IMPORTANT - here we use the correct SEXTIC twist of the curve */
#endif
-#if SEXTIC_TWIST_ZZZ == M_TYPE
+#if SEXTIC_TWIST_ZZZ == M_TYPE
FP4_YYY_times_i(&t); /* IMPORTANT - here we use the correct SEXTIC twist of the curve */
#endif
@@ -264,11 +264,11 @@ int ECP4_ZZZ_set(ECP4_ZZZ *P,FP4_YYY *x,FP4_YYY *y)
if (!FP4_YYY_equals(&y2,&rhs))
{
- ECP4_ZZZ_inf(P);
+ ECP4_ZZZ_inf(P);
return 0;
}
- // P->inf=0;
+// P->inf=0;
FP4_YYY_copy(&(P->x),x);
FP4_YYY_copy(&(P->y),y);
@@ -300,7 +300,7 @@ int ECP4_ZZZ_setx(ECP4_ZZZ *P,FP4_YYY *x)
/* SU= 8 */
void ECP4_ZZZ_neg(ECP4_ZZZ *P)
{
- FP4_YYY_norm(&(P->y));
+ FP4_YYY_norm(&(P->y));
FP4_YYY_neg(&(P->y),&(P->y));
FP4_YYY_norm(&(P->y));
}
@@ -310,55 +310,55 @@ void ECP4_ZZZ_neg(ECP4_ZZZ *P)
/* return -1 for Infinity, 0 for addition, 1 for doubling */
int ECP4_ZZZ_dbl(ECP4_ZZZ *P)
{
- FP4_YYY t0,t1,t2,t3,iy,x3,y3;
+ FP4_YYY t0,t1,t2,iy,x3,y3;
- FP4_YYY_copy(&iy,&(P->y)); //FP4_YYY iy=new FP4_YYY(y);
+ FP4_YYY_copy(&iy,&(P->y)); //FP4_YYY iy=new FP4_YYY(y);
#if SEXTIC_TWIST_ZZZ==D_TYPE
- FP4_YYY_times_i(&iy); //iy.mul_ip();
+ FP4_YYY_times_i(&iy); //iy.mul_ip();
#endif
- FP4_YYY_sqr(&t0,&(P->y)); //t0.sqr();
+ FP4_YYY_sqr(&t0,&(P->y)); //t0.sqr();
#if SEXTIC_TWIST_ZZZ==D_TYPE
- FP4_YYY_times_i(&t0); //t0.mul_ip();
+ FP4_YYY_times_i(&t0); //t0.mul_ip();
#endif
- FP4_YYY_mul(&t1,&iy,&(P->z)); //t1.mul(z);
- FP4_YYY_sqr(&t2,&(P->z)); //t2.sqr();
+ FP4_YYY_mul(&t1,&iy,&(P->z)); //t1.mul(z);
+ FP4_YYY_sqr(&t2,&(P->z)); //t2.sqr();
- FP4_YYY_add(&(P->z),&t0,&t0); //z.add(t0);
- FP4_YYY_norm(&(P->z)); //z.norm();
- FP4_YYY_add(&(P->z),&(P->z),&(P->z)); //z.add(z);
- FP4_YYY_add(&(P->z),&(P->z),&(P->z)); //z.add(z);
- FP4_YYY_norm(&(P->z)); //z.norm();
+ FP4_YYY_add(&(P->z),&t0,&t0); //z.add(t0);
+ FP4_YYY_norm(&(P->z)); //z.norm();
+ FP4_YYY_add(&(P->z),&(P->z),&(P->z)); //z.add(z);
+ FP4_YYY_add(&(P->z),&(P->z),&(P->z)); //z.add(z);
+ FP4_YYY_norm(&(P->z)); //z.norm();
- FP4_YYY_imul(&t2,&t2,3*CURVE_B_I_ZZZ); //t2.imul(3*ROM.CURVE_B_I);
+ FP4_YYY_imul(&t2,&t2,3*CURVE_B_I_ZZZ); //t2.imul(3*ROM.CURVE_B_I);
#if SEXTIC_TWIST_ZZZ==M_TYPE
- FP4_YYY_times_i(&t2);
+ FP4_YYY_times_i(&t2);
#endif
- FP4_YYY_mul(&x3,&t2,&(P->z)); //x3.mul(z);
+ FP4_YYY_mul(&x3,&t2,&(P->z)); //x3.mul(z);
- FP4_YYY_add(&y3,&t0,&t2); //y3.add(t2);
- FP4_YYY_norm(&y3); //y3.norm();
- FP4_YYY_mul(&(P->z),&(P->z),&t1); //z.mul(t1);
+ FP4_YYY_add(&y3,&t0,&t2); //y3.add(t2);
+ FP4_YYY_norm(&y3); //y3.norm();
+ FP4_YYY_mul(&(P->z),&(P->z),&t1); //z.mul(t1);
- FP4_YYY_add(&t1,&t2,&t2); //t1.add(t2);
- FP4_YYY_add(&t2,&t2,&t1); //t2.add(t1);
- FP4_YYY_norm(&t2); //t2.norm();
- FP4_YYY_sub(&t0,&t0,&t2); //t0.sub(t2);
- FP4_YYY_norm(&t0); //t0.norm(); //y^2-9bz^2
- FP4_YYY_mul(&y3,&y3,&t0); //y3.mul(t0);
- FP4_YYY_add(&(P->y),&y3,&x3); //y3.add(x3); //(y^2+3z*2)(y^2-9z^2)+3b.z^2.8y^2
+ FP4_YYY_add(&t1,&t2,&t2); //t1.add(t2);
+ FP4_YYY_add(&t2,&t2,&t1); //t2.add(t1);
+ FP4_YYY_norm(&t2); //t2.norm();
+ FP4_YYY_sub(&t0,&t0,&t2); //t0.sub(t2);
+ FP4_YYY_norm(&t0); //t0.norm(); //y^2-9bz^2
+ FP4_YYY_mul(&y3,&y3,&t0); //y3.mul(t0);
+ FP4_YYY_add(&(P->y),&y3,&x3); //y3.add(x3); //(y^2+3z*2)(y^2-9z^2)+3b.z^2.8y^2
- FP4_YYY_mul(&t1,&(P->x),&iy); //t1.mul(iy); //
+ FP4_YYY_mul(&t1,&(P->x),&iy); //t1.mul(iy); //
- FP4_YYY_norm(&t0); //x.norm();
- FP4_YYY_mul(&(P->x),&t0,&t1); //x.mul(t1);
- FP4_YYY_add(&(P->x),&(P->x),&(P->x)); //x.add(x); //(y^2-9bz^2)xy2
+ FP4_YYY_norm(&t0); //x.norm();
+ FP4_YYY_mul(&(P->x),&t0,&t1); //x.mul(t1);
+ FP4_YYY_add(&(P->x),&(P->x),&(P->x)); //x.add(x); //(y^2-9bz^2)xy2
- FP4_YYY_norm(&(P->x)); //x.norm();
+ FP4_YYY_norm(&(P->x)); //x.norm();
- FP4_YYY_norm(&(P->y)); //y.norm();
+ FP4_YYY_norm(&(P->y)); //y.norm();
return 1;
}
@@ -368,88 +368,88 @@ int ECP4_ZZZ_dbl(ECP4_ZZZ *P)
int ECP4_ZZZ_add(ECP4_ZZZ *P,ECP4_ZZZ *Q)
{
FP4_YYY t0,t1,t2,t3,t4,x3,y3,z3;
- int b3=3*CURVE_B_I_ZZZ;
+ int b3=3*CURVE_B_I_ZZZ;
- FP4_YYY_mul(&t0,&(P->x),&(Q->x)); //t0.mul(Q.x); // x.Q.x
- FP4_YYY_mul(&t1,&(P->y),&(Q->y)); //t1.mul(Q.y); // y.Q.y
+ FP4_YYY_mul(&t0,&(P->x),&(Q->x)); //t0.mul(Q.x); // x.Q.x
+ FP4_YYY_mul(&t1,&(P->y),&(Q->y)); //t1.mul(Q.y); // y.Q.y
- FP4_YYY_mul(&t2,&(P->z),&(Q->z)); //t2.mul(Q.z);
- FP4_YYY_add(&t3,&(P->x),&(P->y)); //t3.add(y);
- FP4_YYY_norm(&t3); //t3.norm(); //t3=X1+Y1
- FP4_YYY_add(&t4,&(Q->x),&(Q->y)); //t4.add(Q.y);
- FP4_YYY_norm(&t4); //t4.norm(); //t4=X2+Y2
- FP4_YYY_mul(&t3,&t3,&t4); //t3.mul(t4); //t3=(X1+Y1)(X2+Y2)
- FP4_YYY_add(&t4,&t0,&t1); //t4.add(t1); //t4=X1.X2+Y1.Y2
+ FP4_YYY_mul(&t2,&(P->z),&(Q->z)); //t2.mul(Q.z);
+ FP4_YYY_add(&t3,&(P->x),&(P->y)); //t3.add(y);
+ FP4_YYY_norm(&t3); //t3.norm(); //t3=X1+Y1
+ FP4_YYY_add(&t4,&(Q->x),&(Q->y)); //t4.add(Q.y);
+ FP4_YYY_norm(&t4); //t4.norm(); //t4=X2+Y2
+ FP4_YYY_mul(&t3,&t3,&t4); //t3.mul(t4); //t3=(X1+Y1)(X2+Y2)
+ FP4_YYY_add(&t4,&t0,&t1); //t4.add(t1); //t4=X1.X2+Y1.Y2
- FP4_YYY_sub(&t3,&t3,&t4); //t3.sub(t4);
- FP4_YYY_norm(&t3); //t3.norm();
+ FP4_YYY_sub(&t3,&t3,&t4); //t3.sub(t4);
+ FP4_YYY_norm(&t3); //t3.norm();
#if SEXTIC_TWIST_ZZZ==D_TYPE
- FP4_YYY_times_i(&t3); //t3.mul_ip(); //t3=(X1+Y1)(X2+Y2)-(X1.X2+Y1.Y2) = X1.Y2+X2.Y1
+ FP4_YYY_times_i(&t3); //t3.mul_ip(); //t3=(X1+Y1)(X2+Y2)-(X1.X2+Y1.Y2) = X1.Y2+X2.Y1
#endif
-
- FP4_YYY_add(&t4,&(P->y),&(P->z)); //t4.add(z);
- FP4_YYY_norm(&t4); //t4.norm(); //t4=Y1+Z1
- FP4_YYY_add(&x3,&(Q->y),&(Q->z)); //x3.add(Q.z);
- FP4_YYY_norm(&x3); //x3.norm(); //x3=Y2+Z2
+ FP4_YYY_add(&t4,&(P->y),&(P->z)); //t4.add(z);
+ FP4_YYY_norm(&t4); //t4.norm(); //t4=Y1+Z1
+
+ FP4_YYY_add(&x3,&(Q->y),&(Q->z)); //x3.add(Q.z);
+ FP4_YYY_norm(&x3); //x3.norm(); //x3=Y2+Z2
- FP4_YYY_mul(&t4,&t4,&x3); //t4.mul(x3); //t4=(Y1+Z1)(Y2+Z2)
+ FP4_YYY_mul(&t4,&t4,&x3); //t4.mul(x3); //t4=(Y1+Z1)(Y2+Z2)
- FP4_YYY_add(&x3,&t1,&t2); //x3.add(t2); //X3=Y1.Y2+Z1.Z2
-
- FP4_YYY_sub(&t4,&t4,&x3); //t4.sub(x3);
- FP4_YYY_norm(&t4); //t4.norm();
+ FP4_YYY_add(&x3,&t1,&t2); //x3.add(t2); //X3=Y1.Y2+Z1.Z2
+
+ FP4_YYY_sub(&t4,&t4,&x3); //t4.sub(x3);
+ FP4_YYY_norm(&t4); //t4.norm();
#if SEXTIC_TWIST_ZZZ==D_TYPE
- FP4_YYY_times_i(&t4); //t4.mul_ip(); //t4=(Y1+Z1)(Y2+Z2) - (Y1.Y2+Z1.Z2) = Y1.Z2+Y2.Z1
+ FP4_YYY_times_i(&t4); //t4.mul_ip(); //t4=(Y1+Z1)(Y2+Z2) - (Y1.Y2+Z1.Z2) = Y1.Z2+Y2.Z1
#endif
- FP4_YYY_add(&x3,&(P->x),&(P->z)); //x3.add(z);
- FP4_YYY_norm(&x3); //x3.norm(); // x3=X1+Z1
-
- FP4_YYY_add(&y3,&(Q->x),&(Q->z)); //y3.add(Q.z);
- FP4_YYY_norm(&y3); //y3.norm(); // y3=X2+Z2
- FP4_YYY_mul(&x3,&x3,&y3); //x3.mul(y3); // x3=(X1+Z1)(X2+Z2)
+ FP4_YYY_add(&x3,&(P->x),&(P->z)); //x3.add(z);
+ FP4_YYY_norm(&x3); //x3.norm(); // x3=X1+Z1
+
+ FP4_YYY_add(&y3,&(Q->x),&(Q->z)); //y3.add(Q.z);
+ FP4_YYY_norm(&y3); //y3.norm(); // y3=X2+Z2
+ FP4_YYY_mul(&x3,&x3,&y3); //x3.mul(y3); // x3=(X1+Z1)(X2+Z2)
- FP4_YYY_add(&y3,&t0,&t2); //y3.add(t2); // y3=X1.X2+Z1+Z2
- FP4_YYY_sub(&y3,&x3,&y3); //y3.rsub(x3);
- FP4_YYY_norm(&y3); //y3.norm(); // y3=(X1+Z1)(X2+Z2) - (X1.X2+Z1.Z2) = X1.Z2+X2.Z1
+ FP4_YYY_add(&y3,&t0,&t2); //y3.add(t2); // y3=X1.X2+Z1+Z2
+ FP4_YYY_sub(&y3,&x3,&y3); //y3.rsub(x3);
+ FP4_YYY_norm(&y3); //y3.norm(); // y3=(X1+Z1)(X2+Z2) - (X1.X2+Z1.Z2) = X1.Z2+X2.Z1
#if SEXTIC_TWIST_ZZZ==D_TYPE
- FP4_YYY_times_i(&t0); //t0.mul_ip();
- FP4_YYY_times_i(&t1); //t1.mul_ip();
+ FP4_YYY_times_i(&t0); //t0.mul_ip();
+ FP4_YYY_times_i(&t1); //t1.mul_ip();
#endif
- FP4_YYY_add(&x3,&t0,&t0); //x3.add(t0);
- FP4_YYY_add(&t0,&t0,&x3); //t0.add(x3);
- FP4_YYY_norm(&t0); //t0.norm();
- FP4_YYY_imul(&t2,&t2,b3); //t2.imul(b);
+ FP4_YYY_add(&x3,&t0,&t0); //x3.add(t0);
+ FP4_YYY_add(&t0,&t0,&x3); //t0.add(x3);
+ FP4_YYY_norm(&t0); //t0.norm();
+ FP4_YYY_imul(&t2,&t2,b3); //t2.imul(b);
#if SEXTIC_TWIST_ZZZ==M_TYPE
- FP4_YYY_times_i(&t2);
+ FP4_YYY_times_i(&t2);
#endif
- FP4_YYY_add(&z3,&t1,&t2); //z3.add(t2);
- FP4_YYY_norm(&z3); //z3.norm();
- FP4_YYY_sub(&t1,&t1,&t2); //t1.sub(t2);
- FP4_YYY_norm(&t1); //t1.norm();
- FP4_YYY_imul(&y3,&y3,b3); //y3.imul(b);
+ FP4_YYY_add(&z3,&t1,&t2); //z3.add(t2);
+ FP4_YYY_norm(&z3); //z3.norm();
+ FP4_YYY_sub(&t1,&t1,&t2); //t1.sub(t2);
+ FP4_YYY_norm(&t1); //t1.norm();
+ FP4_YYY_imul(&y3,&y3,b3); //y3.imul(b);
#if SEXTIC_TWIST_ZZZ==M_TYPE
- FP4_YYY_times_i(&y3);
+ FP4_YYY_times_i(&y3);
#endif
- FP4_YYY_mul(&x3,&y3,&t4); //x3.mul(t4);
+ FP4_YYY_mul(&x3,&y3,&t4); //x3.mul(t4);
- FP4_YYY_mul(&t2,&t3,&t1); //t2.mul(t1);
- FP4_YYY_sub(&(P->x),&t2,&x3); //x3.rsub(t2);
- FP4_YYY_mul(&y3,&y3,&t0); //y3.mul(t0);
- FP4_YYY_mul(&t1,&t1,&z3); //t1.mul(z3);
- FP4_YYY_add(&(P->y),&y3,&t1); //y3.add(t1);
- FP4_YYY_mul(&t0,&t0,&t3); //t0.mul(t3);
- FP4_YYY_mul(&z3,&z3,&t4); //z3.mul(t4);
- FP4_YYY_add(&(P->z),&z3,&t0); //z3.add(t0);
+ FP4_YYY_mul(&t2,&t3,&t1); //t2.mul(t1);
+ FP4_YYY_sub(&(P->x),&t2,&x3); //x3.rsub(t2);
+ FP4_YYY_mul(&y3,&y3,&t0); //y3.mul(t0);
+ FP4_YYY_mul(&t1,&t1,&z3); //t1.mul(z3);
+ FP4_YYY_add(&(P->y),&y3,&t1); //y3.add(t1);
+ FP4_YYY_mul(&t0,&t0,&t3); //t0.mul(t3);
+ FP4_YYY_mul(&z3,&z3,&t4); //z3.mul(t4);
+ FP4_YYY_add(&(P->z),&z3,&t0); //z3.add(t0);
- FP4_YYY_norm(&(P->x)); //x.norm();
- FP4_YYY_norm(&(P->y)); //y.norm();
- FP4_YYY_norm(&(P->z)); //z.norm();
+ FP4_YYY_norm(&(P->x)); //x.norm();
+ FP4_YYY_norm(&(P->y)); //y.norm();
+ FP4_YYY_norm(&(P->z)); //z.norm();
return 0;
}
@@ -458,18 +458,18 @@ int ECP4_ZZZ_add(ECP4_ZZZ *P,ECP4_ZZZ *Q)
/* SU= 16 */
void ECP4_ZZZ_sub(ECP4_ZZZ *P,ECP4_ZZZ *Q)
{
- ECP4_ZZZ NQ;
- ECP4_ZZZ_copy(&NQ,Q);
- ECP4_ZZZ_neg(&NQ);
+ ECP4_ZZZ NQ;
+ ECP4_ZZZ_copy(&NQ,Q);
+ ECP4_ZZZ_neg(&NQ);
ECP4_ZZZ_add(P,&NQ);
}
void ECP4_ZZZ_reduce(ECP4_ZZZ *P)
{
- FP4_YYY_reduce(&(P->x));
- FP4_YYY_reduce(&(P->y));
- FP4_YYY_reduce(&(P->z));
+ FP4_YYY_reduce(&(P->x));
+ FP4_YYY_reduce(&(P->y));
+ FP4_YYY_reduce(&(P->z));
}
/* P*=e */
@@ -532,65 +532,65 @@ void ECP4_ZZZ_mul(ECP4_ZZZ *P,BIG_XXX e)
ECP4_ZZZ_add(P,&Q);
}
ECP4_ZZZ_sub(P,&C); /* apply correction */
- ECP4_ZZZ_affine(P);
+ ECP4_ZZZ_affine(P);
}
-// calculate frobenius constants
+// calculate frobenius constants
void ECP4_ZZZ_frob_constants(FP2_YYY F[3])
{
FP_YYY fx,fy;
- FP2_YYY X;
+ FP2_YYY X;
FP_YYY_rcopy(&fx,Fra_YYY);
FP_YYY_rcopy(&fy,Frb_YYY);
FP2_YYY_from_FPs(&X,&fx,&fy);
- FP2_YYY_sqr(&F[0],&X); // FF=F^2=(1+i)^(p-7)/6
- FP2_YYY_copy(&F[2],&F[0]);
- FP2_YYY_mul_ip(&F[2]); // W=(1+i)^6/6.(1+i)^(p-7)/6 = (1+i)^(p-1)/6
- FP2_YYY_norm(&F[2]);
- FP2_YYY_sqr(&F[1],&F[2]);
- FP2_YYY_mul(&F[2],&F[2],&F[1]); // W=(1+i)^(p-1)/2
+ FP2_YYY_sqr(&F[0],&X); // FF=F^2=(1+i)^(p-7)/6
+ FP2_YYY_copy(&F[2],&F[0]);
+ FP2_YYY_mul_ip(&F[2]); // W=(1+i)^6/6.(1+i)^(p-7)/6 = (1+i)^(p-1)/6
+ FP2_YYY_norm(&F[2]);
+ FP2_YYY_sqr(&F[1],&F[2]);
+ FP2_YYY_mul(&F[2],&F[2],&F[1]); // W=(1+i)^(p-1)/2
- FP2_YYY_copy(&F[1],&X);
+ FP2_YYY_copy(&F[1],&X);
-#if SEXTIC_TWIST_ZZZ == M_TYPE
- FP2_YYY_mul_ip(&F[1]); // (1+i)^12/12.(1+i)^(p-7)/12 = (1+i)^(p+5)/12
- FP2_YYY_inv(&F[1],&F[1]); // (1+i)^-(p+5)/12
- FP2_YYY_sqr(&F[0],&F[1]); // (1+i)^-(p+5)/6
+#if SEXTIC_TWIST_ZZZ == M_TYPE
+ FP2_YYY_mul_ip(&F[1]); // (1+i)^12/12.(1+i)^(p-7)/12 = (1+i)^(p+5)/12
+ FP2_YYY_inv(&F[1],&F[1]); // (1+i)^-(p+5)/12
+ FP2_YYY_sqr(&F[0],&F[1]); // (1+i)^-(p+5)/6
#endif
- FP2_YYY_mul_ip(&F[0]); // FF=(1+i)^(p-7)/6.(1+i) = (1+i)^(p-1)/6 // (1+i)^6/6.(1+i)^-(p+5)/6 = (1+i)^-(p-1)/6
- FP2_YYY_norm(&F[0]);
- FP2_YYY_mul(&F[1],&F[1],&F[0]); // FFF = (1+i)^(p-7)/12 . (1+i)^(p-1)/6 = (1+i)^(p-3)/4 // (1+i)^-(p+5)/12 . (1+i)^-(p-1)/6 = (1+i)^-(p+1)/4
+ FP2_YYY_mul_ip(&F[0]); // FF=(1+i)^(p-7)/6.(1+i) = (1+i)^(p-1)/6 // (1+i)^6/6.(1+i)^-(p+5)/6 = (1+i)^-(p-1)/6
+ FP2_YYY_norm(&F[0]);
+ FP2_YYY_mul(&F[1],&F[1],&F[0]); // FFF = (1+i)^(p-7)/12 . (1+i)^(p-1)/6 = (1+i)^(p-3)/4 // (1+i)^-(p+5)/12 . (1+i)^-(p-1)/6 = (1+i)^-(p+1)/4
}
/* Calculates q^n.P using Frobenius constants */
void ECP4_ZZZ_frob(ECP4_ZZZ *P,FP2_YYY F[3],int n)
{
- int i;
- FP4_YYY X,Y,Z;
-
- FP4_YYY_copy(&X,&(P->x));
- FP4_YYY_copy(&Y,&(P->y));
- FP4_YYY_copy(&Z,&(P->z));
-
- for (i=0;i<n;i++)
- {
- FP4_YYY_frob(&X,&F[2]); // X^p
- FP4_YYY_pmul(&X,&X,&F[0]); // X^p.(1+i)^(p-1)/6 // X^p.(1+i)^-(p-1)/6
-
- FP4_YYY_frob(&Y,&F[2]); // Y^p
- FP4_YYY_pmul(&Y,&Y,&F[1]);
- FP4_YYY_times_i(&Y); // Y.p.(1+i)^(p-3)/4.(1+i)^(2/4) = Y^p.(1+i)^(p-1)/4 // (1+i)^-(p+1)/4 .(1+i)^2/4 = Y^p.(1+i)^-(p-1)/4
-
- FP4_YYY_frob(&Z,&F[2]);
- }
-
- FP4_YYY_copy(&(P->x),&X);
- FP4_YYY_copy(&(P->y),&Y);
- FP4_YYY_copy(&(P->z),&Z);
+ int i;
+ FP4_YYY X,Y,Z;
+
+ FP4_YYY_copy(&X,&(P->x));
+ FP4_YYY_copy(&Y,&(P->y));
+ FP4_YYY_copy(&Z,&(P->z));
+
+ for (i=0; i<n; i++)
+ {
+ FP4_YYY_frob(&X,&F[2]); // X^p
+ FP4_YYY_pmul(&X,&X,&F[0]); // X^p.(1+i)^(p-1)/6 // X^p.(1+i)^-(p-1)/6
+
+ FP4_YYY_frob(&Y,&F[2]); // Y^p
+ FP4_YYY_pmul(&Y,&Y,&F[1]);
+ FP4_YYY_times_i(&Y); // Y.p.(1+i)^(p-3)/4.(1+i)^(2/4) = Y^p.(1+i)^(p-1)/4 // (1+i)^-(p+1)/4 .(1+i)^2/4 = Y^p.(1+i)^-(p-1)/4
+
+ FP4_YYY_frob(&Z,&F[2]);
+ }
+
+ FP4_YYY_copy(&(P->x),&X);
+ FP4_YYY_copy(&(P->y),&Y);
+ FP4_YYY_copy(&(P->z),&Z);
}
/* Side channel attack secure */
@@ -600,54 +600,54 @@ void ECP4_ZZZ_frob(ECP4_ZZZ *P,FP2_YYY F[3],int n)
void ECP4_ZZZ_mul8(ECP4_ZZZ *P,ECP4_ZZZ Q[8],BIG_XXX u[8])
{
int i,j,k,nb,pb1,pb2,bt;
- ECP4_ZZZ T1[8],T2[8],W;
+ ECP4_ZZZ T1[8],T2[8],W;
BIG_XXX mt,t[8];
sign8 w1[NLEN_XXX*BASEBITS_XXX+1];
sign8 s1[NLEN_XXX*BASEBITS_XXX+1];
sign8 w2[NLEN_XXX*BASEBITS_XXX+1];
- sign8 s2[NLEN_XXX*BASEBITS_XXX+1];
- FP2_YYY X[3];
+ sign8 s2[NLEN_XXX*BASEBITS_XXX+1];
+ FP2_YYY X[3];
- ECP4_ZZZ_frob_constants(X);
+ ECP4_ZZZ_frob_constants(X);
for (i=0; i<8; i++)
- {
+ {
BIG_XXX_copy(t[i],u[i]);
- }
+ }
// Precomputed table
ECP4_ZZZ_copy(&T1[0],&Q[0]); // Q[0]
ECP4_ZZZ_copy(&T1[1],&T1[0]);
- ECP4_ZZZ_add(&T1[1],&Q[1]); // Q[0]+Q[1]
+ ECP4_ZZZ_add(&T1[1],&Q[1]); // Q[0]+Q[1]
ECP4_ZZZ_copy(&T1[2],&T1[0]);
- ECP4_ZZZ_add(&T1[2],&Q[2]); // Q[0]+Q[2]
- ECP4_ZZZ_copy(&T1[3],&T1[1]);
- ECP4_ZZZ_add(&T1[3],&Q[2]); // Q[0]+Q[1]+Q[2]
- ECP4_ZZZ_copy(&T1[4],&T1[0]);
- ECP4_ZZZ_add(&T1[4],&Q[3]); // Q[0]+Q[3]
- ECP4_ZZZ_copy(&T1[5],&T1[1]);
- ECP4_ZZZ_add(&T1[5],&Q[3]); // Q[0]+Q[1]+Q[3]
- ECP4_ZZZ_copy(&T1[6],&T1[2]);
- ECP4_ZZZ_add(&T1[6],&Q[3]); // Q[0]+Q[2]+Q[3]
- ECP4_ZZZ_copy(&T1[7],&T1[3]);
- ECP4_ZZZ_add(&T1[7],&Q[3]); // Q[0]+Q[1]+Q[2]+Q[3]
-
-// Use Frobenius
-
- for (i=0;i<8;i++)
- {
- ECP4_ZZZ_copy(&T2[i],&T1[i]);
- ECP4_ZZZ_frob(&T2[i],X,4);
- }
+ ECP4_ZZZ_add(&T1[2],&Q[2]); // Q[0]+Q[2]
+ ECP4_ZZZ_copy(&T1[3],&T1[1]);
+ ECP4_ZZZ_add(&T1[3],&Q[2]); // Q[0]+Q[1]+Q[2]
+ ECP4_ZZZ_copy(&T1[4],&T1[0]);
+ ECP4_ZZZ_add(&T1[4],&Q[3]); // Q[0]+Q[3]
+ ECP4_ZZZ_copy(&T1[5],&T1[1]);
+ ECP4_ZZZ_add(&T1[5],&Q[3]); // Q[0]+Q[1]+Q[3]
+ ECP4_ZZZ_copy(&T1[6],&T1[2]);
+ ECP4_ZZZ_add(&T1[6],&Q[3]); // Q[0]+Q[2]+Q[3]
+ ECP4_ZZZ_copy(&T1[7],&T1[3]);
+ ECP4_ZZZ_add(&T1[7],&Q[3]); // Q[0]+Q[1]+Q[2]+Q[3]
+
+// Use Frobenius
+
+ for (i=0; i<8; i++)
+ {
+ ECP4_ZZZ_copy(&T2[i],&T1[i]);
+ ECP4_ZZZ_frob(&T2[i],X,4);
+ }
// Make them odd
- pb1=1-BIG_XXX_parity(t[0]);
- BIG_XXX_inc(t[0],pb1);
- BIG_XXX_norm(t[0]);
+ pb1=1-BIG_XXX_parity(t[0]);
+ BIG_XXX_inc(t[0],pb1);
+ BIG_XXX_norm(t[0]);
- pb2=1-BIG_XXX_parity(t[4]);
- BIG_XXX_inc(t[4],pb2);
- BIG_XXX_norm(t[4]);
+ pb2=1-BIG_XXX_parity(t[4]);
+ BIG_XXX_inc(t[4],pb2);
+ BIG_XXX_norm(t[4]);
// Number of bits
BIG_XXX_zero(mt);
@@ -657,52 +657,52 @@ void ECP4_ZZZ_mul8(ECP4_ZZZ *P,ECP4_ZZZ Q[8],BIG_XXX u[8])
}
nb=1+BIG_XXX_nbits(mt);
-// Sign pivot
- s1[nb-1]=1;
- s2[nb-1]=1;
- for (i=0;i<nb-1;i++)
- {
+// Sign pivot
+ s1[nb-1]=1;
+ s2[nb-1]=1;
+ for (i=0; i<nb-1; i++)
+ {
BIG_XXX_fshr(t[0],1);
- s1[i]=2*BIG_XXX_parity(t[0])-1;
+ s1[i]=2*BIG_XXX_parity(t[0])-1;
BIG_XXX_fshr(t[4],1);
- s2[i]=2*BIG_XXX_parity(t[4])-1;
- }
+ s2[i]=2*BIG_XXX_parity(t[4])-1;
+ }
// Recoded exponents
for (i=0; i<nb; i++)
{
- w1[i]=0;
- k=1;
- for (j=1; j<4; j++)
- {
- bt=s1[i]*BIG_XXX_parity(t[j]);
- BIG_XXX_fshr(t[j],1);
-
- BIG_XXX_dec(t[j],(bt>>1));
- BIG_XXX_norm(t[j]);
- w1[i]+=bt*k;
- k*=2;
+ w1[i]=0;
+ k=1;
+ for (j=1; j<4; j++)
+ {
+ bt=s1[i]*BIG_XXX_parity(t[j]);
+ BIG_XXX_fshr(t[j],1);
+
+ BIG_XXX_dec(t[j],(bt>>1));
+ BIG_XXX_norm(t[j]);
+ w1[i]+=bt*k;
+ k*=2;
}
- w2[i]=0;
- k=1;
- for (j=5; j<8; j++)
- {
- bt=s2[i]*BIG_XXX_parity(t[j]);
- BIG_XXX_fshr(t[j],1);
-
- BIG_XXX_dec(t[j],(bt>>1));
- BIG_XXX_norm(t[j]);
- w2[i]+=bt*k;
- k*=2;
+ w2[i]=0;
+ k=1;
+ for (j=5; j<8; j++)
+ {
+ bt=s2[i]*BIG_XXX_parity(t[j]);
+ BIG_XXX_fshr(t[j],1);
+
+ BIG_XXX_dec(t[j],(bt>>1));
+ BIG_XXX_norm(t[j]);
+ w2[i]+=bt*k;
+ k*=2;
}
- }
+ }
// Main loop
- ECP4_ZZZ_select(P,T1,2*w1[nb-1]+1);
- ECP4_ZZZ_select(&W,T2,2*w2[nb-1]+1);
- ECP4_ZZZ_add(P,&W);
+ ECP4_ZZZ_select(P,T1,2*w1[nb-1]+1);
+ ECP4_ZZZ_select(&W,T2,2*w2[nb-1]+1);
+ ECP4_ZZZ_add(P,&W);
for (i=nb-2; i>=0; i--)
{
ECP4_ZZZ_dbl(P);
@@ -713,14 +713,14 @@ void ECP4_ZZZ_mul8(ECP4_ZZZ *P,ECP4_ZZZ Q[8],BIG_XXX u[8])
}
// apply corrections
- ECP4_ZZZ_copy(&W,P);
- ECP4_ZZZ_sub(&W,&Q[0]);
- ECP4_ZZZ_cmove(P,&W,pb1);
- ECP4_ZZZ_copy(&W,P);
- ECP4_ZZZ_sub(&W,&Q[4]);
- ECP4_ZZZ_cmove(P,&W,pb2);
-
- ECP4_ZZZ_affine(P);
+ ECP4_ZZZ_copy(&W,P);
+ ECP4_ZZZ_sub(&W,&Q[0]);
+ ECP4_ZZZ_cmove(P,&W,pb1);
+ ECP4_ZZZ_copy(&W,P);
+ ECP4_ZZZ_sub(&W,&Q[4]);
+ ECP4_ZZZ_cmove(P,&W,pb2);
+
+ ECP4_ZZZ_affine(P);
}
/* Map to hash value to point on G2 from random BIG_XXX */
@@ -729,11 +729,11 @@ void ECP4_ZZZ_mapit(ECP4_ZZZ *Q,octet *W)
{
BIG_XXX q,one,x,hv;
FP2_YYY X[3],T;
- FP4_YYY X4,Y4;
+ FP4_YYY X4;
ECP4_ZZZ xQ, x2Q, x3Q, x4Q;
- BIG_XXX_fromBytes(hv,W->val);
+ BIG_XXX_fromBytes(hv,W->val);
BIG_XXX_rcopy(q,Modulus_YYY);
BIG_XXX_one(one);
BIG_XXX_mod(hv,q);
@@ -741,53 +741,53 @@ void ECP4_ZZZ_mapit(ECP4_ZZZ *Q,octet *W)
for (;;)
{
FP2_YYY_from_BIGs(&T,one,hv); /*******/
- FP4_YYY_from_FP2(&X4,&T);
+ FP4_YYY_from_FP2(&X4,&T);
if (ECP4_ZZZ_setx(Q,&X4)) break;
BIG_XXX_inc(hv,1);
}
- ECP4_ZZZ_frob_constants(X);
+ ECP4_ZZZ_frob_constants(X);
BIG_XXX_rcopy(x,CURVE_Bnx_ZZZ);
- // Efficient hash maps to G2 on BLS24 curves - Budroni, Pintore
- // Q -> x4Q -x3Q -Q + F(x3Q-x2Q) + F(F(x2Q-xQ)) + F(F(F(xQ-Q))) +F(F(F(F(2Q))))
+ // Efficient hash maps to G2 on BLS24 curves - Budroni, Pintore
+ // Q -> x4Q -x3Q -Q + F(x3Q-x2Q) + F(F(x2Q-xQ)) + F(F(F(xQ-Q))) +F(F(F(F(2Q))))
- ECP4_ZZZ_copy(&xQ,Q);
- ECP4_ZZZ_mul(&xQ,x);
- ECP4_ZZZ_copy(&x2Q,&xQ);
- ECP4_ZZZ_mul(&x2Q,x);
- ECP4_ZZZ_copy(&x3Q,&x2Q);
- ECP4_ZZZ_mul(&x3Q,x);
- ECP4_ZZZ_copy(&x4Q,&x3Q);
- ECP4_ZZZ_mul(&x4Q,x);
+ ECP4_ZZZ_copy(&xQ,Q);
+ ECP4_ZZZ_mul(&xQ,x);
+ ECP4_ZZZ_copy(&x2Q,&xQ);
+ ECP4_ZZZ_mul(&x2Q,x);
+ ECP4_ZZZ_copy(&x3Q,&x2Q);
+ ECP4_ZZZ_mul(&x3Q,x);
+ ECP4_ZZZ_copy(&x4Q,&x3Q);
+ ECP4_ZZZ_mul(&x4Q,x);
#if SIGN_OF_X_ZZZ==NEGATIVEX
- ECP4_ZZZ_neg(&xQ);
- ECP4_ZZZ_neg(&x3Q);
+ ECP4_ZZZ_neg(&xQ);
+ ECP4_ZZZ_neg(&x3Q);
#endif
- ECP4_ZZZ_sub(&x4Q,&x3Q);
- ECP4_ZZZ_sub(&x4Q,Q);
+ ECP4_ZZZ_sub(&x4Q,&x3Q);
+ ECP4_ZZZ_sub(&x4Q,Q);
- ECP4_ZZZ_sub(&x3Q,&x2Q);
- ECP4_ZZZ_frob(&x3Q,X,1);
+ ECP4_ZZZ_sub(&x3Q,&x2Q);
+ ECP4_ZZZ_frob(&x3Q,X,1);
- ECP4_ZZZ_sub(&x2Q,&xQ);
- ECP4_ZZZ_frob(&x2Q,X,2);
+ ECP4_ZZZ_sub(&x2Q,&xQ);
+ ECP4_ZZZ_frob(&x2Q,X,2);
- ECP4_ZZZ_sub(&xQ,Q);
- ECP4_ZZZ_frob(&xQ,X,3);
+ ECP4_ZZZ_sub(&xQ,Q);
+ ECP4_ZZZ_frob(&xQ,X,3);
- ECP4_ZZZ_dbl(Q);
- ECP4_ZZZ_frob(Q,X,4);
+ ECP4_ZZZ_dbl(Q);
+ ECP4_ZZZ_frob(Q,X,4);
- ECP4_ZZZ_add(Q,&x4Q);
- ECP4_ZZZ_add(Q,&x3Q);
- ECP4_ZZZ_add(Q,&x2Q);
- ECP4_ZZZ_add(Q,&xQ);
+ ECP4_ZZZ_add(Q,&x4Q);
+ ECP4_ZZZ_add(Q,&x3Q);
+ ECP4_ZZZ_add(Q,&x2Q);
+ ECP4_ZZZ_add(Q,&xQ);
- ECP4_ZZZ_affine(Q);
+ ECP4_ZZZ_affine(Q);
}
@@ -795,30 +795,30 @@ void ECP4_ZZZ_mapit(ECP4_ZZZ *Q,octet *W)
void ECP4_ZZZ_generator(ECP4_ZZZ *G)
{
- BIG_XXX a,b;
- FP2_YYY Aa,Bb;
- FP4_YYY X,Y;
+ BIG_XXX a,b;
+ FP2_YYY Aa,Bb;
+ FP4_YYY X,Y;
- BIG_XXX_rcopy(a,CURVE_Pxaa_ZZZ);
- BIG_XXX_rcopy(b,CURVE_Pxab_ZZZ);
- FP2_YYY_from_BIGs(&Aa,a,b);
+ BIG_XXX_rcopy(a,CURVE_Pxaa_ZZZ);
+ BIG_XXX_rcopy(b,CURVE_Pxab_ZZZ);
+ FP2_YYY_from_BIGs(&Aa,a,b);
- BIG_XXX_rcopy(a,CURVE_Pxba_ZZZ);
- BIG_XXX_rcopy(b,CURVE_Pxbb_ZZZ);
- FP2_YYY_from_BIGs(&Bb,a,b);
+ BIG_XXX_rcopy(a,CURVE_Pxba_ZZZ);
+ BIG_XXX_rcopy(b,CURVE_Pxbb_ZZZ);
+ FP2_YYY_from_BIGs(&Bb,a,b);
- FP4_YYY_from_FP2s(&X,&Aa,&Bb);
+ FP4_YYY_from_FP2s(&X,&Aa,&Bb);
- BIG_XXX_rcopy(a,CURVE_Pyaa_ZZZ);
- BIG_XXX_rcopy(b,CURVE_Pyab_ZZZ);
- FP2_YYY_from_BIGs(&Aa,a,b);
+ BIG_XXX_rcopy(a,CURVE_Pyaa_ZZZ);
+ BIG_XXX_rcopy(b,CURVE_Pyab_ZZZ);
+ FP2_YYY_from_BIGs(&Aa,a,b);
- BIG_XXX_rcopy(a,CURVE_Pyba_ZZZ);
- BIG_XXX_rcopy(b,CURVE_Pybb_ZZZ);
- FP2_YYY_from_BIGs(&Bb,a,b);
+ BIG_XXX_rcopy(a,CURVE_Pyba_ZZZ);
+ BIG_XXX_rcopy(b,CURVE_Pybb_ZZZ);
+ FP2_YYY_from_BIGs(&Bb,a,b);
- FP4_YYY_from_FP2s(&Y,&Aa,&Bb);
+ FP4_YYY_from_FP2s(&Y,&Aa,&Bb);
- ECP4_ZZZ_set(G,&X,&Y);
+ ECP4_ZZZ_set(G,&X,&Y);
}
diff --git a/version3/c/ecp4.h b/version3/c/ecp4.h
index 8e022c9..5a0b756 100644
--- a/version3/c/ecp4.h
+++ b/version3/c/ecp4.h
@@ -11,10 +11,10 @@
typedef struct
{
- // int inf; /**< Infinity Flag */
+// int inf; /**< Infinity Flag */
FP4_YYY x; /**< x-coordinate of point */
FP4_YYY y; /**< y-coordinate of point */
- FP4_YYY z;
+ FP4_YYY z;
} ECP4_ZZZ;
diff --git a/version3/c/ecp8.c b/version3/c/ecp8.c
index dff3594..f807da2 100644
--- a/version3/c/ecp8.c
+++ b/version3/c/ecp8.c
@@ -25,7 +25,7 @@ under the License.
int ECP8_ZZZ_isinf(ECP8_ZZZ *P)
{
- return (FP8_YYY_iszilch(&(P->x)) & FP8_YYY_iszilch(&(P->z)));
+ return (FP8_YYY_iszilch(&(P->x)) & FP8_YYY_iszilch(&(P->z)));
}
/* Set P=Q */
@@ -41,7 +41,7 @@ void ECP8_ZZZ_inf(ECP8_ZZZ *P)
{
FP8_YYY_zero(&(P->x));
FP8_YYY_one(&(P->y));
- FP8_YYY_zero(&(P->z));
+ FP8_YYY_zero(&(P->z));
}
/* Conditional move Q to P dependant on d */
@@ -125,9 +125,9 @@ int ECP8_ZZZ_equals(ECP8_ZZZ *P,ECP8_ZZZ *Q)
/* extract x, y from point P */
int ECP8_ZZZ_get(FP8_YYY *x,FP8_YYY *y,ECP8_ZZZ *P)
{
- ECP8_ZZZ W;
- ECP8_ZZZ_copy(&W,P);
- ECP8_ZZZ_affine(&W);
+ ECP8_ZZZ W;
+ ECP8_ZZZ_copy(&W,P);
+ ECP8_ZZZ_affine(&W);
if (ECP8_ZZZ_isinf(&W)) return -1;
FP8_YYY_copy(y,&(W.y));
FP8_YYY_copy(x,&(W.x));
@@ -154,20 +154,20 @@ void ECP8_ZZZ_output(ECP8_ZZZ *P)
/* Convert Q to octet string */
void ECP8_ZZZ_toOctet(octet *W,ECP8_ZZZ *Q)
{
- BIG_XXX b;
- FP8_YYY qx,qy;
- FP4_YYY qa,qb;
- FP2_YYY pa,pb;
+ BIG_XXX b;
+ FP8_YYY qx,qy;
+ FP4_YYY qa,qb;
+ FP2_YYY pa,pb;
ECP8_ZZZ_get(&qx,&qy,Q);
- FP4_YYY_copy(&qa,&(qx.a));
- FP4_YYY_copy(&qb,&(qx.b));
+ FP4_YYY_copy(&qa,&(qx.a));
+ FP4_YYY_copy(&qb,&(qx.b));
- FP2_YYY_copy(&pa,&(qa.a));
- FP2_YYY_copy(&pb,&(qa.b));
+ FP2_YYY_copy(&pa,&(qa.a));
+ FP2_YYY_copy(&pb,&(qa.b));
- FP_YYY_redc(b,&(pa.a));
+ FP_YYY_redc(b,&(pa.a));
BIG_XXX_toBytes(&(W->val[0]),b);
FP_YYY_redc(b,&(pa.b));
BIG_XXX_toBytes(&(W->val[MODBYTES_XXX]),b);
@@ -176,10 +176,10 @@ void ECP8_ZZZ_toOctet(octet *W,ECP8_ZZZ *Q)
FP_YYY_redc(b,&(pb.b));
BIG_XXX_toBytes(&(W->val[3*MODBYTES_XXX]),b);
- FP2_YYY_copy(&pa,&(qb.a));
- FP2_YYY_copy(&pb,&(qb.b));
+ FP2_YYY_copy(&pa,&(qb.a));
+ FP2_YYY_copy(&pb,&(qb.b));
- FP_YYY_redc(b,&(pa.a));
+ FP_YYY_redc(b,&(pa.a));
BIG_XXX_toBytes(&(W->val[4*MODBYTES_XXX]),b);
FP_YYY_redc(b,&(pa.b));
BIG_XXX_toBytes(&(W->val[5*MODBYTES_XXX]),b);
@@ -189,13 +189,13 @@ void ECP8_ZZZ_toOctet(octet *W,ECP8_ZZZ *Q)
BIG_XXX_toBytes(&(W->val[7*MODBYTES_XXX]),b);
- FP4_YYY_copy(&qa,&(qy.a));
- FP4_YYY_copy(&qb,&(qy.b));
+ FP4_YYY_copy(&qa,&(qy.a));
+ FP4_YYY_copy(&qb,&(qy.b));
- FP2_YYY_copy(&pa,&(qa.a));
- FP2_YYY_copy(&pb,&(qa.b));
+ FP2_YYY_copy(&pa,&(qa.a));
+ FP2_YYY_copy(&pb,&(qa.b));
- FP_YYY_redc(b,&(pa.a));
+ FP_YYY_redc(b,&(pa.a));
BIG_XXX_toBytes(&(W->val[8*MODBYTES_XXX]),b);
FP_YYY_redc(b,&(pa.b));
BIG_XXX_toBytes(&(W->val[9*MODBYTES_XXX]),b);
@@ -204,10 +204,10 @@ void ECP8_ZZZ_toOctet(octet *W,ECP8_ZZZ *Q)
FP_YYY_redc(b,&(pb.b));
BIG_XXX_toBytes(&(W->val[11*MODBYTES_XXX]),b);
- FP2_YYY_copy(&pa,&(qb.a));
- FP2_YYY_copy(&pb,&(qb.b));
+ FP2_YYY_copy(&pa,&(qb.a));
+ FP2_YYY_copy(&pb,&(qb.b));
- FP_YYY_redc(b,&(pa.a));
+ FP_YYY_redc(b,&(pa.a));
BIG_XXX_toBytes(&(W->val[12*MODBYTES_XXX]),b);
FP_YYY_redc(b,&(pa.b));
BIG_XXX_toBytes(&(W->val[13*MODBYTES_XXX]),b);
@@ -223,13 +223,13 @@ void ECP8_ZZZ_toOctet(octet *W,ECP8_ZZZ *Q)
/* restore Q from octet string */
int ECP8_ZZZ_fromOctet(ECP8_ZZZ *Q,octet *W)
{
- BIG_XXX b;
+ BIG_XXX b;
FP8_YYY qx,qy;
- FP4_YYY qa,qb;
- FP2_YYY pa,pb;
+ FP4_YYY qa,qb;
+ FP2_YYY pa,pb;
BIG_XXX_fromBytes(b,&(W->val[0]));
- FP_YYY_nres(&(pa.a),b);
+ FP_YYY_nres(&(pa.a),b);
BIG_XXX_fromBytes(b,&(W->val[MODBYTES_XXX]));
FP_YYY_nres(&(pa.b),b);
BIG_XXX_fromBytes(b,&(W->val[2*MODBYTES_XXX]));
@@ -237,11 +237,11 @@ int ECP8_ZZZ_fromOctet(ECP8_ZZZ *Q,octet *W)
BIG_XXX_fromBytes(b,&(W->val[3*MODBYTES_XXX]));
FP_YYY_nres(&(pb.b),b);
- FP2_YYY_copy(&(qa.a),&pa);
- FP2_YYY_copy(&(qa.b),&pb);
+ FP2_YYY_copy(&(qa.a),&pa);
+ FP2_YYY_copy(&(qa.b),&pb);
BIG_XXX_fromBytes(b,&(W->val[4*MODBYTES_XXX]));
- FP_YYY_nres(&(pa.a),b);
+ FP_YYY_nres(&(pa.a),b);
BIG_XXX_fromBytes(b,&(W->val[5*MODBYTES_XXX]));
FP_YYY_nres(&(pa.b),b);
BIG_XXX_fromBytes(b,&(W->val[6*MODBYTES_XXX]));
@@ -249,15 +249,15 @@ int ECP8_ZZZ_fromOctet(ECP8_ZZZ *Q,octet *W)
BIG_XXX_fromBytes(b,&(W->val[7*MODBYTES_XXX]));
FP_YYY_nres(&(pb.b),b);
- FP2_YYY_copy(&(qb.a),&pa);
- FP2_YYY_copy(&(qb.b),&pb);
+ FP2_YYY_copy(&(qb.a),&pa);
+ FP2_YYY_copy(&(qb.b),&pb);
- FP4_YYY_copy(&(qx.a),&qa);
- FP4_YYY_copy(&(qx.b),&qb);
+ FP4_YYY_copy(&(qx.a),&qa);
+ FP4_YYY_copy(&(qx.b),&qb);
BIG_XXX_fromBytes(b,&(W->val[8*MODBYTES_XXX]));
- FP_YYY_nres(&(pa.a),b);
+ FP_YYY_nres(&(pa.a),b);
BIG_XXX_fromBytes(b,&(W->val[9*MODBYTES_XXX]));
FP_YYY_nres(&(pa.b),b);
BIG_XXX_fromBytes(b,&(W->val[10*MODBYTES_XXX]));
@@ -265,11 +265,11 @@ int ECP8_ZZZ_fromOctet(ECP8_ZZZ *Q,octet *W)
BIG_XXX_fromBytes(b,&(W->val[11*MODBYTES_XXX]));
FP_YYY_nres(&(pb.b),b);
- FP2_YYY_copy(&(qa.a),&pa);
- FP2_YYY_copy(&(qa.b),&pb);
+ FP2_YYY_copy(&(qa.a),&pa);
+ FP2_YYY_copy(&(qa.b),&pb);
BIG_XXX_fromBytes(b,&(W->val[12*MODBYTES_XXX]));
- FP_YYY_nres(&(pa.a),b);
+ FP_YYY_nres(&(pa.a),b);
BIG_XXX_fromBytes(b,&(W->val[13*MODBYTES_XXX]));
FP_YYY_nres(&(pa.b),b);
BIG_XXX_fromBytes(b,&(W->val[14*MODBYTES_XXX]));
@@ -277,11 +277,11 @@ int ECP8_ZZZ_fromOctet(ECP8_ZZZ *Q,octet *W)
BIG_XXX_fromBytes(b,&(W->val[15*MODBYTES_XXX]));
FP_YYY_nres(&(pb.b),b);
- FP2_YYY_copy(&(qb.a),&pa);
- FP2_YYY_copy(&(qb.b),&pb);
+ FP2_YYY_copy(&(qb.a),&pa);
+ FP2_YYY_copy(&(qb.b),&pb);
- FP4_YYY_copy(&(qy.a),&qa);
- FP4_YYY_copy(&(qy.b),&qb);
+ FP4_YYY_copy(&(qy.a),&qa);
+ FP4_YYY_copy(&(qy.b),&qb);
if (ECP8_ZZZ_set(Q,&qx,&qy)) return 1;
@@ -293,8 +293,8 @@ void ECP8_ZZZ_rhs(FP8_YYY *rhs,FP8_YYY *x)
{
/* calculate RHS of elliptic curve equation */
FP8_YYY t;
- FP4_YYY t4;
- FP2_YYY t2;
+ FP4_YYY t4;
+ FP2_YYY t2;
BIG_XXX b;
FP8_YYY_sqr(&t,x);
@@ -305,14 +305,14 @@ void ECP8_ZZZ_rhs(FP8_YYY *rhs,FP8_YYY *x)
BIG_XXX_rcopy(b,CURVE_B_ZZZ);
FP2_YYY_from_BIG(&t2,b);
- FP4_YYY_from_FP2(&t4,&t2);
- FP8_YYY_from_FP4(&t,&t4);
+ FP4_YYY_from_FP2(&t4,&t2);
+ FP8_YYY_from_FP4(&t,&t4);
-#if SEXTIC_TWIST_ZZZ == D_TYPE
+#if SEXTIC_TWIST_ZZZ == D_TYPE
FP8_YYY_div_i(&t); /* IMPORTANT - here we use the correct SEXTIC twist of the curve */
#endif
-#if SEXTIC_TWIST_ZZZ == M_TYPE
+#if SEXTIC_TWIST_ZZZ == M_TYPE
FP8_YYY_times_i(&t); /* IMPORTANT - here we use the correct SEXTIC twist of the curve */
#endif
@@ -331,7 +331,7 @@ int ECP8_ZZZ_set(ECP8_ZZZ *P,FP8_YYY *x,FP8_YYY *y)
if (!FP8_YYY_equals(&y2,&rhs))
{
- ECP8_ZZZ_inf(P);
+ ECP8_ZZZ_inf(P);
return 0;
}
@@ -351,7 +351,7 @@ int ECP8_ZZZ_setx(ECP8_ZZZ *P,FP8_YYY *x)
if (!FP8_YYY_sqrt(&y,&y))
{
- ECP8_ZZZ_inf(P);
+ ECP8_ZZZ_inf(P);
return 0;
}
@@ -365,7 +365,7 @@ int ECP8_ZZZ_setx(ECP8_ZZZ *P,FP8_YYY *x)
/* SU= 8 */
void ECP8_ZZZ_neg(ECP8_ZZZ *P)
{
- FP8_YYY_norm(&(P->y));
+ FP8_YYY_norm(&(P->y));
FP8_YYY_neg(&(P->y),&(P->y));
FP8_YYY_norm(&(P->y));
}
@@ -376,55 +376,55 @@ void ECP8_ZZZ_neg(ECP8_ZZZ *P)
/* return -1 for Infinity, 0 for addition, 1 for doubling */
int ECP8_ZZZ_dbl(ECP8_ZZZ *P)
{
- FP8_YYY t0,t1,t2,t3,iy,x3,y3;
+ FP8_YYY t0,t1,t2,iy,x3,y3;
- FP8_YYY_copy(&iy,&(P->y)); //FP8_YYY iy=new FP8_YYY(y);
+ FP8_YYY_copy(&iy,&(P->y)); //FP8_YYY iy=new FP8_YYY(y);
#if SEXTIC_TWIST_ZZZ==D_TYPE
- FP8_YYY_times_i(&iy); //iy.mul_ip();
+ FP8_YYY_times_i(&iy); //iy.mul_ip();
#endif
- FP8_YYY_sqr(&t0,&(P->y)); //t0.sqr();
+ FP8_YYY_sqr(&t0,&(P->y)); //t0.sqr();
#if SEXTIC_TWIST_ZZZ==D_TYPE
- FP8_YYY_times_i(&t0); //t0.mul_ip();
+ FP8_YYY_times_i(&t0); //t0.mul_ip();
#endif
- FP8_YYY_mul(&t1,&iy,&(P->z)); //t1.mul(z);
- FP8_YYY_sqr(&t2,&(P->z)); //t2.sqr();
+ FP8_YYY_mul(&t1,&iy,&(P->z)); //t1.mul(z);
+ FP8_YYY_sqr(&t2,&(P->z)); //t2.sqr();
- FP8_YYY_add(&(P->z),&t0,&t0); //z.add(t0);
- FP8_YYY_norm(&(P->z)); //z.norm();
- FP8_YYY_add(&(P->z),&(P->z),&(P->z)); //z.add(z);
- FP8_YYY_add(&(P->z),&(P->z),&(P->z)); //z.add(z);
- FP8_YYY_norm(&(P->z)); //z.norm();
+ FP8_YYY_add(&(P->z),&t0,&t0); //z.add(t0);
+ FP8_YYY_norm(&(P->z)); //z.norm();
+ FP8_YYY_add(&(P->z),&(P->z),&(P->z)); //z.add(z);
+ FP8_YYY_add(&(P->z),&(P->z),&(P->z)); //z.add(z);
+ FP8_YYY_norm(&(P->z)); //z.norm();
- FP8_YYY_imul(&t2,&t2,3*CURVE_B_I_ZZZ); //t2.imul(3*ROM.CURVE_B_I);
+ FP8_YYY_imul(&t2,&t2,3*CURVE_B_I_ZZZ); //t2.imul(3*ROM.CURVE_B_I);
#if SEXTIC_TWIST_ZZZ==M_TYPE
- FP8_YYY_times_i(&t2);
+ FP8_YYY_times_i(&t2);
#endif
- FP8_YYY_mul(&x3,&t2,&(P->z)); //x3.mul(z);
+ FP8_YYY_mul(&x3,&t2,&(P->z)); //x3.mul(z);
- FP8_YYY_add(&y3,&t0,&t2); //y3.add(t2);
- FP8_YYY_norm(&y3); //y3.norm();
- FP8_YYY_mul(&(P->z),&(P->z),&t1); //z.mul(t1);
+ FP8_YYY_add(&y3,&t0,&t2); //y3.add(t2);
+ FP8_YYY_norm(&y3); //y3.norm();
+ FP8_YYY_mul(&(P->z),&(P->z),&t1); //z.mul(t1);
- FP8_YYY_add(&t1,&t2,&t2); //t1.add(t2);
- FP8_YYY_add(&t2,&t2,&t1); //t2.add(t1);
- FP8_YYY_norm(&t2); //t2.norm();
- FP8_YYY_sub(&t0,&t0,&t2); //t0.sub(t2);
- FP8_YYY_norm(&t0); //t0.norm(); //y^2-9bz^2
- FP8_YYY_mul(&y3,&y3,&t0); //y3.mul(t0);
- FP8_YYY_add(&(P->y),&y3,&x3); //y3.add(x3); //(y^2+3z*2)(y^2-9z^2)+3b.z^2.8y^2
+ FP8_YYY_add(&t1,&t2,&t2); //t1.add(t2);
+ FP8_YYY_add(&t2,&t2,&t1); //t2.add(t1);
+ FP8_YYY_norm(&t2); //t2.norm();
+ FP8_YYY_sub(&t0,&t0,&t2); //t0.sub(t2);
+ FP8_YYY_norm(&t0); //t0.norm(); //y^2-9bz^2
+ FP8_YYY_mul(&y3,&y3,&t0); //y3.mul(t0);
+ FP8_YYY_add(&(P->y),&y3,&x3); //y3.add(x3); //(y^2+3z*2)(y^2-9z^2)+3b.z^2.8y^2
- FP8_YYY_mul(&t1,&(P->x),&iy); //t1.mul(iy); //
+ FP8_YYY_mul(&t1,&(P->x),&iy); //t1.mul(iy); //
- FP8_YYY_norm(&t0); //x.norm();
- FP8_YYY_mul(&(P->x),&t0,&t1); //x.mul(t1);
- FP8_YYY_add(&(P->x),&(P->x),&(P->x)); //x.add(x); //(y^2-9bz^2)xy2
+ FP8_YYY_norm(&t0); //x.norm();
+ FP8_YYY_mul(&(P->x),&t0,&t1); //x.mul(t1);
+ FP8_YYY_add(&(P->x),&(P->x),&(P->x)); //x.add(x); //(y^2-9bz^2)xy2
- FP8_YYY_norm(&(P->x)); //x.norm();
+ FP8_YYY_norm(&(P->x)); //x.norm();
- FP8_YYY_norm(&(P->y)); //y.norm();
+ FP8_YYY_norm(&(P->y)); //y.norm();
return 1;
}
@@ -434,88 +434,88 @@ int ECP8_ZZZ_dbl(ECP8_ZZZ *P)
int ECP8_ZZZ_add(ECP8_ZZZ *P,ECP8_ZZZ *Q)
{
FP8_YYY t0,t1,t2,t3,t4,x3,y3,z3;
- int b3=3*CURVE_B_I_ZZZ;
+ int b3=3*CURVE_B_I_ZZZ;
- FP8_YYY_mul(&t0,&(P->x),&(Q->x)); //t0.mul(Q.x); // x.Q.x
- FP8_YYY_mul(&t1,&(P->y),&(Q->y)); //t1.mul(Q.y); // y.Q.y
+ FP8_YYY_mul(&t0,&(P->x),&(Q->x)); //t0.mul(Q.x); // x.Q.x
+ FP8_YYY_mul(&t1,&(P->y),&(Q->y)); //t1.mul(Q.y); // y.Q.y
- FP8_YYY_mul(&t2,&(P->z),&(Q->z)); //t2.mul(Q.z);
- FP8_YYY_add(&t3,&(P->x),&(P->y)); //t3.add(y);
- FP8_YYY_norm(&t3); //t3.norm(); //t3=X1+Y1
- FP8_YYY_add(&t4,&(Q->x),&(Q->y)); //t4.add(Q.y);
- FP8_YYY_norm(&t4); //t4.norm(); //t4=X2+Y2
- FP8_YYY_mul(&t3,&t3,&t4); //t3.mul(t4); //t3=(X1+Y1)(X2+Y2)
- FP8_YYY_add(&t4,&t0,&t1); //t4.add(t1); //t4=X1.X2+Y1.Y2
+ FP8_YYY_mul(&t2,&(P->z),&(Q->z)); //t2.mul(Q.z);
+ FP8_YYY_add(&t3,&(P->x),&(P->y)); //t3.add(y);
+ FP8_YYY_norm(&t3); //t3.norm(); //t3=X1+Y1
+ FP8_YYY_add(&t4,&(Q->x),&(Q->y)); //t4.add(Q.y);
+ FP8_YYY_norm(&t4); //t4.norm(); //t4=X2+Y2
+ FP8_YYY_mul(&t3,&t3,&t4); //t3.mul(t4); //t3=(X1+Y1)(X2+Y2)
+ FP8_YYY_add(&t4,&t0,&t1); //t4.add(t1); //t4=X1.X2+Y1.Y2
- FP8_YYY_sub(&t3,&t3,&t4); //t3.sub(t4);
- FP8_YYY_norm(&t3); //t3.norm();
+ FP8_YYY_sub(&t3,&t3,&t4); //t3.sub(t4);
+ FP8_YYY_norm(&t3); //t3.norm();
#if SEXTIC_TWIST_ZZZ==D_TYPE
- FP8_YYY_times_i(&t3); //t3.mul_ip(); //t3=(X1+Y1)(X2+Y2)-(X1.X2+Y1.Y2) = X1.Y2+X2.Y1
+ FP8_YYY_times_i(&t3); //t3.mul_ip(); //t3=(X1+Y1)(X2+Y2)-(X1.X2+Y1.Y2) = X1.Y2+X2.Y1
#endif
-
- FP8_YYY_add(&t4,&(P->y),&(P->z)); //t4.add(z);
- FP8_YYY_norm(&t4); //t4.norm(); //t4=Y1+Z1
- FP8_YYY_add(&x3,&(Q->y),&(Q->z)); //x3.add(Q.z);
- FP8_YYY_norm(&x3); //x3.norm(); //x3=Y2+Z2
+ FP8_YYY_add(&t4,&(P->y),&(P->z)); //t4.add(z);
+ FP8_YYY_norm(&t4); //t4.norm(); //t4=Y1+Z1
+
+ FP8_YYY_add(&x3,&(Q->y),&(Q->z)); //x3.add(Q.z);
+ FP8_YYY_norm(&x3); //x3.norm(); //x3=Y2+Z2
+
+ FP8_YYY_mul(&t4,&t4,&x3); //t4.mul(x3); //t4=(Y1+Z1)(Y2+Z2)
- FP8_YYY_mul(&t4,&t4,&x3); //t4.mul(x3); //t4=(Y1+Z1)(Y2+Z2)
+ FP8_YYY_add(&x3,&t1,&t2); //x3.add(t2); //X3=Y1.Y2+Z1.Z2
- FP8_YYY_add(&x3,&t1,&t2); //x3.add(t2); //X3=Y1.Y2+Z1.Z2
-
- FP8_YYY_sub(&t4,&t4,&x3); //t4.sub(x3);
- FP8_YYY_norm(&t4); //t4.norm();
+ FP8_YYY_sub(&t4,&t4,&x3); //t4.sub(x3);
+ FP8_YYY_norm(&t4); //t4.norm();
#if SEXTIC_TWIST_ZZZ==D_TYPE
- FP8_YYY_times_i(&t4); //t4.mul_ip(); //t4=(Y1+Z1)(Y2+Z2) - (Y1.Y2+Z1.Z2) = Y1.Z2+Y2.Z1
+ FP8_YYY_times_i(&t4); //t4.mul_ip(); //t4=(Y1+Z1)(Y2+Z2) - (Y1.Y2+Z1.Z2) = Y1.Z2+Y2.Z1
#endif
- FP8_YYY_add(&x3,&(P->x),&(P->z)); //x3.add(z);
- FP8_YYY_norm(&x3); //x3.norm(); // x3=X1+Z1
-
- FP8_YYY_add(&y3,&(Q->x),&(Q->z)); //y3.add(Q.z);
- FP8_YYY_norm(&y3); //y3.norm(); // y3=X2+Z2
- FP8_YYY_mul(&x3,&x3,&y3); //x3.mul(y3); // x3=(X1+Z1)(X2+Z2)
+ FP8_YYY_add(&x3,&(P->x),&(P->z)); //x3.add(z);
+ FP8_YYY_norm(&x3); //x3.norm(); // x3=X1+Z1
- FP8_YYY_add(&y3,&t0,&t2); //y3.add(t2); // y3=X1.X2+Z1+Z2
- FP8_YYY_sub(&y3,&x3,&y3); //y3.rsub(x3);
- FP8_YYY_norm(&y3); //y3.norm(); // y3=(X1+Z1)(X2+Z2) - (X1.X2+Z1.Z2) = X1.Z2+X2.Z1
+ FP8_YYY_add(&y3,&(Q->x),&(Q->z)); //y3.add(Q.z);
+ FP8_YYY_norm(&y3); //y3.norm(); // y3=X2+Z2
+ FP8_YYY_mul(&x3,&x3,&y3); //x3.mul(y3); // x3=(X1+Z1)(X2+Z2)
+
+ FP8_YYY_add(&y3,&t0,&t2); //y3.add(t2); // y3=X1.X2+Z1+Z2
+ FP8_YYY_sub(&y3,&x3,&y3); //y3.rsub(x3);
+ FP8_YYY_norm(&y3); //y3.norm(); // y3=(X1+Z1)(X2+Z2) - (X1.X2+Z1.Z2) = X1.Z2+X2.Z1
#if SEXTIC_TWIST_ZZZ==D_TYPE
- FP8_YYY_times_i(&t0); //t0.mul_ip();
- FP8_YYY_times_i(&t1); //t1.mul_ip();
+ FP8_YYY_times_i(&t0); //t0.mul_ip();
+ FP8_YYY_times_i(&t1); //t1.mul_ip();
#endif
- FP8_YYY_add(&x3,&t0,&t0); //x3.add(t0);
- FP8_YYY_add(&t0,&t0,&x3); //t0.add(x3);
- FP8_YYY_norm(&t0); //t0.norm();
- FP8_YYY_imul(&t2,&t2,b3); //t2.imul(b);
+ FP8_YYY_add(&x3,&t0,&t0); //x3.add(t0);
+ FP8_YYY_add(&t0,&t0,&x3); //t0.add(x3);
+ FP8_YYY_norm(&t0); //t0.norm();
+ FP8_YYY_imul(&t2,&t2,b3); //t2.imul(b);
#if SEXTIC_TWIST_ZZZ==M_TYPE
- FP8_YYY_times_i(&t2);
+ FP8_YYY_times_i(&t2);
#endif
- FP8_YYY_add(&z3,&t1,&t2); //z3.add(t2);
- FP8_YYY_norm(&z3); //z3.norm();
- FP8_YYY_sub(&t1,&t1,&t2); //t1.sub(t2);
- FP8_YYY_norm(&t1); //t1.norm();
- FP8_YYY_imul(&y3,&y3,b3); //y3.imul(b);
+ FP8_YYY_add(&z3,&t1,&t2); //z3.add(t2);
+ FP8_YYY_norm(&z3); //z3.norm();
+ FP8_YYY_sub(&t1,&t1,&t2); //t1.sub(t2);
+ FP8_YYY_norm(&t1); //t1.norm();
+ FP8_YYY_imul(&y3,&y3,b3); //y3.imul(b);
#if SEXTIC_TWIST_ZZZ==M_TYPE
- FP8_YYY_times_i(&y3);
+ FP8_YYY_times_i(&y3);
#endif
- FP8_YYY_mul(&x3,&y3,&t4); //x3.mul(t4);
+ FP8_YYY_mul(&x3,&y3,&t4); //x3.mul(t4);
- FP8_YYY_mul(&t2,&t3,&t1); //t2.mul(t1);
- FP8_YYY_sub(&(P->x),&t2,&x3); //x3.rsub(t2);
- FP8_YYY_mul(&y3,&y3,&t0); //y3.mul(t0);
- FP8_YYY_mul(&t1,&t1,&z3); //t1.mul(z3);
- FP8_YYY_add(&(P->y),&y3,&t1); //y3.add(t1);
- FP8_YYY_mul(&t0,&t0,&t3); //t0.mul(t3);
- FP8_YYY_mul(&z3,&z3,&t4); //z3.mul(t4);
- FP8_YYY_add(&(P->z),&z3,&t0); //z3.add(t0);
+ FP8_YYY_mul(&t2,&t3,&t1); //t2.mul(t1);
+ FP8_YYY_sub(&(P->x),&t2,&x3); //x3.rsub(t2);
+ FP8_YYY_mul(&y3,&y3,&t0); //y3.mul(t0);
+ FP8_YYY_mul(&t1,&t1,&z3); //t1.mul(z3);
+ FP8_YYY_add(&(P->y),&y3,&t1); //y3.add(t1);
+ FP8_YYY_mul(&t0,&t0,&t3); //t0.mul(t3);
+ FP8_YYY_mul(&z3,&z3,&t4); //z3.mul(t4);
+ FP8_YYY_add(&(P->z),&z3,&t0); //z3.add(t0);
- FP8_YYY_norm(&(P->x)); //x.norm();
- FP8_YYY_norm(&(P->y)); //y.norm();
- FP8_YYY_norm(&(P->z)); //z.norm();
+ FP8_YYY_norm(&(P->x)); //x.norm();
+ FP8_YYY_norm(&(P->y)); //y.norm();
+ FP8_YYY_norm(&(P->z)); //z.norm();
return 0;
}
@@ -524,18 +524,18 @@ int ECP8_ZZZ_add(ECP8_ZZZ *P,ECP8_ZZZ *Q)
/* SU= 16 */
void ECP8_ZZZ_sub(ECP8_ZZZ *P,ECP8_ZZZ *Q)
{
- ECP8_ZZZ NQ;
- ECP8_ZZZ_copy(&NQ,Q);
- ECP8_ZZZ_neg(&NQ);
+ ECP8_ZZZ NQ;
+ ECP8_ZZZ_copy(&NQ,Q);
+ ECP8_ZZZ_neg(&NQ);
ECP8_ZZZ_add(P,&NQ);
}
void ECP8_ZZZ_reduce(ECP8_ZZZ *P)
{
- FP8_YYY_reduce(&(P->x));
- FP8_YYY_reduce(&(P->y));
- FP8_YYY_reduce(&(P->z));
+ FP8_YYY_reduce(&(P->x));
+ FP8_YYY_reduce(&(P->y));
+ FP8_YYY_reduce(&(P->z));
}
/* P*=e */
@@ -549,7 +549,7 @@ void ECP8_ZZZ_mul(ECP8_ZZZ *P,BIG_XXX e)
sign8 w[1+(NLEN_XXX*BASEBITS_XXX+3)/4];
if (ECP8_ZZZ_isinf(P)) return;
-
+
/* precompute table */
ECP8_ZZZ_copy(&Q,P);
@@ -598,80 +598,82 @@ void ECP8_ZZZ_mul(ECP8_ZZZ *P,BIG_XXX e)
ECP8_ZZZ_add(P,&Q);
}
ECP8_ZZZ_sub(P,&C); /* apply correction */
- ECP8_ZZZ_affine(P);
+ ECP8_ZZZ_affine(P);
}
void ECP8_ZZZ_frob_constants(FP2_YYY F[3])
{
FP_YYY fx,fy;
- FP2_YYY X;
+ FP2_YYY X;
FP_YYY_rcopy(&fx,Fra_YYY);
FP_YYY_rcopy(&fy,Frb_YYY);
FP2_YYY_from_FPs(&X,&fx,&fy);
- FP2_YYY_sqr(&F[0],&X); // FF=F^2=(1+i)^(p-19)/12
- FP2_YYY_copy(&F[2],&F[0]);
- FP2_YYY_mul_ip(&F[2]); // W=(1+i)^12/12.(1+i)^(p-19)/12 = (1+i)^(p-7)/12
- FP2_YYY_norm(&F[2]);
- FP2_YYY_sqr(&F[1],&F[2]);
- FP2_YYY_mul(&F[2],&F[2],&F[1]); // W=(1+i)^(p-7)/4
+ FP2_YYY_sqr(&F[0],&X); // FF=F^2=(1+i)^(p-19)/12
+ FP2_YYY_copy(&F[2],&F[0]);
+ FP2_YYY_mul_ip(&F[2]); // W=(1+i)^12/12.(1+i)^(p-19)/12 = (1+i)^(p-7)/12
+ FP2_YYY_norm(&F[2]);
+ FP2_YYY_sqr(&F[1],&F[2]);
+ FP2_YYY_mul(&F[2],&F[2],&F[1]); // W=(1+i)^(p-7)/4
- FP2_YYY_mul_ip(&F[2]); // W=(1+i)^4/4.W=(1+i)^(p-7)/4 = (1+i)^(p-3)/4
- FP2_YYY_norm(&F[2]);
+ FP2_YYY_mul_ip(&F[2]); // W=(1+i)^4/4.W=(1+i)^(p-7)/4 = (1+i)^(p-3)/4
+ FP2_YYY_norm(&F[2]);
- FP2_YYY_copy(&F[1],&X);
+ FP2_YYY_copy(&F[1],&X);
-#if SEXTIC_TWIST_ZZZ == M_TYPE
- FP2_YYY_mul_ip(&F[1]); // (1+i)^24/24.(1+i)^(p-19)/24 = (1+i)^(p+5)/24
- FP2_YYY_inv(&F[1],&F[1]); // (1+i)^-(p+5)/24
- FP2_YYY_sqr(&F[0],&F[1]); // (1+i)^-(p+5)/12
+#if SEXTIC_TWIST_ZZZ == M_TYPE
+ FP2_YYY_mul_ip(&F[1]); // (1+i)^24/24.(1+i)^(p-19)/24 = (1+i)^(p+5)/24
+ FP2_YYY_inv(&F[1],&F[1]); // (1+i)^-(p+5)/24
+ FP2_YYY_sqr(&F[0],&F[1]); // (1+i)^-(p+5)/12
#endif
- FP2_YYY_mul_ip(&F[0]); // FF=(1+i)^(p-19)/12.(1+i)^12/12 = (1+i)^(p-7)/12 // FF=(1+i)^12/12.(1+i)^-(p+5)/12 = (1+i)^-(p-7)/12
- FP2_YYY_norm(&F[0]);
+ FP2_YYY_mul_ip(&F[0]); // FF=(1+i)^(p-19)/12.(1+i)^12/12 = (1+i)^(p-7)/12 // FF=(1+i)^12/12.(1+i)^-(p+5)/12 = (1+i)^-(p-7)/12
+ FP2_YYY_norm(&F[0]);
- FP2_YYY_mul(&F[1],&F[1],&F[0]); // (1+i)^(p-7)/12 . (1+i)^(p-19)/24 = (1+i)^(p-11)/8 // (1+i)^-(p-7)/12 . (1+i)^-(p+5)/24 = (1+i)^-(p-3)/8
+ FP2_YYY_mul(&F[1],&F[1],&F[0]); // (1+i)^(p-7)/12 . (1+i)^(p-19)/24 = (1+i)^(p-11)/8 // (1+i)^-(p-7)/12 . (1+i)^-(p+5)/24 = (1+i)^-(p-3)/8
}
/* Calculates q^n.P using Frobenius constant X */
void ECP8_ZZZ_frob(ECP8_ZZZ *P,FP2_YYY F[3],int n)
{
- int i;
- FP8_YYY X,Y,Z;
-
- FP8_YYY_copy(&X,&(P->x));
- FP8_YYY_copy(&Y,&(P->y));
- FP8_YYY_copy(&Z,&(P->z));
-
- for (i=0;i<n;i++)
- {
- FP8_YYY_frob(&X,&F[2]); // X^p
- FP8_YYY_qmul(&X,&X,&F[0]);
-#if SEXTIC_TWIST_ZZZ == M_TYPE
- FP8_YYY_div_i2(&X); // X^p.(1+i)^-(p-1)/12
+ int i;
+ FP8_YYY X,Y,Z;
+
+ FP8_YYY_copy(&X,&(P->x));
+ FP8_YYY_copy(&Y,&(P->y));
+ FP8_YYY_copy(&Z,&(P->z));
+
+ for (i=0; i<n; i++)
+ {
+ FP8_YYY_frob(&X,&F[2]); // X^p
+ FP8_YYY_qmul(&X,&X,&F[0]);
+#if SEXTIC_TWIST_ZZZ == M_TYPE
+ FP8_YYY_div_i2(&X); // X^p.(1+i)^-(p-1)/12
#endif
-#if SEXTIC_TWIST_ZZZ == D_TYPE
- FP8_YYY_times_i2(&X); // X^p.(1+i)^(p-1)/12
+#if SEXTIC_TWIST_ZZZ == D_TYPE
+ FP8_YYY_times_i2(&X); // X^p.(1+i)^(p-1)/12
#endif
- FP8_YYY_frob(&Y,&F[2]); // Y^p
- FP8_YYY_qmul(&Y,&Y,&F[1]);
-#if SEXTIC_TWIST_ZZZ == M_TYPE
- FP8_YYY_div_i(&Y); // Y^p.(1+i)^-(p-1)/8
+ FP8_YYY_frob(&Y,&F[2]); // Y^p
+ FP8_YYY_qmul(&Y,&Y,&F[1]);
+#if SEXTIC_TWIST_ZZZ == M_TYPE
+ FP8_YYY_div_i(&Y); // Y^p.(1+i)^-(p-1)/8
#endif
#if SEXTIC_TWIST_ZZZ == D_TYPE
- FP8_YYY_times_i2(&Y); FP8_YYY_times_i2(&Y); FP8_YYY_times_i(&Y); // Y^p.(1+i)^(p-1)/8
+ FP8_YYY_times_i2(&Y);
+ FP8_YYY_times_i2(&Y);
+ FP8_YYY_times_i(&Y); // Y^p.(1+i)^(p-1)/8
#endif
- FP8_YYY_frob(&Z,&F[2]);
- }
+ FP8_YYY_frob(&Z,&F[2]);
+ }
- FP8_YYY_copy(&(P->x),&X);
- FP8_YYY_copy(&(P->y),&Y);
- FP8_YYY_copy(&(P->z),&Z);
+ FP8_YYY_copy(&(P->x),&X);
+ FP8_YYY_copy(&(P->y),&Y);
+ FP8_YYY_copy(&(P->z),&Z);
}
/* Side channel attack secure */
@@ -681,71 +683,71 @@ void ECP8_ZZZ_frob(ECP8_ZZZ *P,FP2_YYY F[3],int n)
void ECP8_ZZZ_mul16(ECP8_ZZZ *P,ECP8_ZZZ Q[16],BIG_XXX u[16])
{
int i,j,k,nb,pb1,pb2,pb3,pb4,bt;
- ECP8_ZZZ T1[8],T2[8],T3[8],T4[8],W;
+ ECP8_ZZZ T1[8],T2[8],T3[8],T4[8],W;
BIG_XXX mt,t[16];
sign8 w1[NLEN_XXX*BASEBITS_XXX+1];
sign8 s1[NLEN_XXX*BASEBITS_XXX+1];
sign8 w2[NLEN_XXX*BASEBITS_XXX+1];
- sign8 s2[NLEN_XXX*BASEBITS_XXX+1];
+ sign8 s2[NLEN_XXX*BASEBITS_XXX+1];
sign8 w3[NLEN_XXX*BASEBITS_XXX+1];
sign8 s3[NLEN_XXX*BASEBITS_XXX+1];
sign8 w4[NLEN_XXX*BASEBITS_XXX+1];
- sign8 s4[NLEN_XXX*BASEBITS_XXX+1];
+ sign8 s4[NLEN_XXX*BASEBITS_XXX+1];
- FP2_YYY X[3];
- ECP8_ZZZ_frob_constants(X);
+ FP2_YYY X[3];
+ ECP8_ZZZ_frob_constants(X);
for (i=0; i<16; i++)
- {
+ {
BIG_XXX_copy(t[i],u[i]);
- }
+ }
// Precomputed table
ECP8_ZZZ_copy(&T1[0],&Q[0]); // Q[0]
ECP8_ZZZ_copy(&T1[1],&T1[0]);
- ECP8_ZZZ_add(&T1[1],&Q[1]); // Q[0]+Q[1]
+ ECP8_ZZZ_add(&T1[1],&Q[1]); // Q[0]+Q[1]
ECP8_ZZZ_copy(&T1[2],&T1[0]);
- ECP8_ZZZ_add(&T1[2],&Q[2]); // Q[0]+Q[2]
- ECP8_ZZZ_copy(&T1[3],&T1[1]);
- ECP8_ZZZ_add(&T1[3],&Q[2]); // Q[0]+Q[1]+Q[2]
- ECP8_ZZZ_copy(&T1[4],&T1[0]);
- ECP8_ZZZ_add(&T1[4],&Q[3]); // Q[0]+Q[3]
- ECP8_ZZZ_copy(&T1[5],&T1[1]);
- ECP8_ZZZ_add(&T1[5],&Q[3]); // Q[0]+Q[1]+Q[3]
- ECP8_ZZZ_copy(&T1[6],&T1[2]);
- ECP8_ZZZ_add(&T1[6],&Q[3]); // Q[0]+Q[2]+Q[3]
- ECP8_ZZZ_copy(&T1[7],&T1[3]);
- ECP8_ZZZ_add(&T1[7],&Q[3]); // Q[0]+Q[1]+Q[2]+Q[3]
-
-// Use Frobenius
-
- for (i=0;i<8;i++)
- {
- ECP8_ZZZ_copy(&T2[i],&T1[i]);
- ECP8_ZZZ_frob(&T2[i],X,4);
-
- ECP8_ZZZ_copy(&T3[i],&T2[i]);
- ECP8_ZZZ_frob(&T3[i],X,4);
-
- ECP8_ZZZ_copy(&T4[i],&T3[i]);
- ECP8_ZZZ_frob(&T4[i],X,4);
- }
+ ECP8_ZZZ_add(&T1[2],&Q[2]); // Q[0]+Q[2]
+ ECP8_ZZZ_copy(&T1[3],&T1[1]);
+ ECP8_ZZZ_add(&T1[3],&Q[2]); // Q[0]+Q[1]+Q[2]
+ ECP8_ZZZ_copy(&T1[4],&T1[0]);
+ ECP8_ZZZ_add(&T1[4],&Q[3]); // Q[0]+Q[3]
+ ECP8_ZZZ_copy(&T1[5],&T1[1]);
+ ECP8_ZZZ_add(&T1[5],&Q[3]); // Q[0]+Q[1]+Q[3]
+ ECP8_ZZZ_copy(&T1[6],&T1[2]);
+ ECP8_ZZZ_add(&T1[6],&Q[3]); // Q[0]+Q[2]+Q[3]
+ ECP8_ZZZ_copy(&T1[7],&T1[3]);
+ ECP8_ZZZ_add(&T1[7],&Q[3]); // Q[0]+Q[1]+Q[2]+Q[3]
+
+// Use Frobenius
+
+ for (i=0; i<8; i++)
+ {
+ ECP8_ZZZ_copy(&T2[i],&T1[i]);
+ ECP8_ZZZ_frob(&T2[i],X,4);
+
+ ECP8_ZZZ_copy(&T3[i],&T2[i]);
+ ECP8_ZZZ_frob(&T3[i],X,4);
+
+ ECP8_ZZZ_copy(&T4[i],&T3[i]);
+ ECP8_ZZZ_frob(&T4[i],X,4);
+ }
// Make them odd
- pb1=1-BIG_XXX_parity(t[0]);
- BIG_XXX_inc(t[0],pb1);
- BIG_XXX_norm(t[0]);
+ pb1=1-BIG_XXX_parity(t[0]);
+ BIG_XXX_inc(t[0],pb1);
+ BIG_XXX_norm(t[0]);
- pb2=1-BIG_XXX_parity(t[4]);
- BIG_XXX_inc(t[4],pb2);
- BIG_XXX_norm(t[4]);
+ pb2=1-BIG_XXX_parity(t[4]);
+ BIG_XXX_inc(t[4],pb2);
+ BIG_XXX_norm(t[4]);
- pb3=1-BIG_XXX_parity(t[8]);
- BIG_XXX_inc(t[8],pb3);
- BIG_XXX_norm(t[8]);
+ pb3=1-BIG_XXX_parity(t[8]);
+ BIG_XXX_inc(t[8],pb3);
+ BIG_XXX_norm(t[8]);
- pb4=1-BIG_XXX_parity(t[12]);
- BIG_XXX_inc(t[12],pb4);
- BIG_XXX_norm(t[12]);
+ pb4=1-BIG_XXX_parity(t[12]);
+ BIG_XXX_inc(t[12],pb4);
+ BIG_XXX_norm(t[12]);
// Number of bits
BIG_XXX_zero(mt);
@@ -755,88 +757,88 @@ void ECP8_ZZZ_mul16(ECP8_ZZZ *P,ECP8_ZZZ Q[16],BIG_XXX u[16])
}
nb=1+BIG_XXX_nbits(mt);
-// Sign pivot
- s1[nb-1]=1;
- s2[nb-1]=1;
- s3[nb-1]=1;
- s4[nb-1]=1;
- for (i=0;i<nb-1;i++)
- {
+// Sign pivot
+ s1[nb-1]=1;
+ s2[nb-1]=1;
+ s3[nb-1]=1;
+ s4[nb-1]=1;
+ for (i=0; i<nb-1; i++)
+ {
BIG_XXX_fshr(t[0],1);
- s1[i]=2*BIG_XXX_parity(t[0])-1;
+ s1[i]=2*BIG_XXX_parity(t[0])-1;
BIG_XXX_fshr(t[4],1);
- s2[i]=2*BIG_XXX_parity(t[4])-1;
+ s2[i]=2*BIG_XXX_parity(t[4])-1;
BIG_XXX_fshr(t[8],1);
- s3[i]=2*BIG_XXX_parity(t[8])-1;
+ s3[i]=2*BIG_XXX_parity(t[8])-1;
BIG_XXX_fshr(t[12],1);
- s4[i]=2*BIG_XXX_parity(t[12])-1;
- }
+ s4[i]=2*BIG_XXX_parity(t[12])-1;
+ }
// Recoded exponents
for (i=0; i<nb; i++)
{
- w1[i]=0;
- k=1;
- for (j=1; j<4; j++)
- {
- bt=s1[i]*BIG_XXX_parity(t[j]);
- BIG_XXX_fshr(t[j],1);
-
- BIG_XXX_dec(t[j],(bt>>1));
- BIG_XXX_norm(t[j]);
- w1[i]+=bt*k;
- k*=2;
+ w1[i]=0;
+ k=1;
+ for (j=1; j<4; j++)
+ {
+ bt=s1[i]*BIG_XXX_parity(t[j]);
+ BIG_XXX_fshr(t[j],1);
+
+ BIG_XXX_dec(t[j],(bt>>1));
+ BIG_XXX_norm(t[j]);
+ w1[i]+=bt*k;
+ k*=2;
}
- w2[i]=0;
- k=1;
- for (j=5; j<8; j++)
- {
- bt=s2[i]*BIG_XXX_parity(t[j]);
- BIG_XXX_fshr(t[j],1);
-
- BIG_XXX_dec(t[j],(bt>>1));
- BIG_XXX_norm(t[j]);
- w2[i]+=bt*k;
- k*=2;
+ w2[i]=0;
+ k=1;
+ for (j=5; j<8; j++)
+ {
+ bt=s2[i]*BIG_XXX_parity(t[j]);
+ BIG_XXX_fshr(t[j],1);
+
+ BIG_XXX_dec(t[j],(bt>>1));
+ BIG_XXX_norm(t[j]);
+ w2[i]+=bt*k;
+ k*=2;
}
- w3[i]=0;
- k=1;
- for (j=9; j<12; j++)
- {
- bt=s3[i]*BIG_XXX_parity(t[j]);
- BIG_XXX_fshr(t[j],1);
-
- BIG_XXX_dec(t[j],(bt>>1));
- BIG_XXX_norm(t[j]);
- w3[i]+=bt*k;
- k*=2;
+ w3[i]=0;
+ k=1;
+ for (j=9; j<12; j++)
+ {
+ bt=s3[i]*BIG_XXX_parity(t[j]);
+ BIG_XXX_fshr(t[j],1);
+
+ BIG_XXX_dec(t[j],(bt>>1));
+ BIG_XXX_norm(t[j]);
+ w3[i]+=bt*k;
+ k*=2;
}
- w4[i]=0;
- k=1;
- for (j=13; j<16; j++)
- {
- bt=s4[i]*BIG_XXX_parity(t[j]);
- BIG_XXX_fshr(t[j],1);
-
- BIG_XXX_dec(t[j],(bt>>1));
- BIG_XXX_norm(t[j]);
- w4[i]+=bt*k;
- k*=2;
+ w4[i]=0;
+ k=1;
+ for (j=13; j<16; j++)
+ {
+ bt=s4[i]*BIG_XXX_parity(t[j]);
+ BIG_XXX_fshr(t[j],1);
+
+ BIG_XXX_dec(t[j],(bt>>1));
+ BIG_XXX_norm(t[j]);
+ w4[i]+=bt*k;
+ k*=2;
}
- }
+ }
// Main loop
- ECP8_ZZZ_select(P,T1,2*w1[nb-1]+1);
- ECP8_ZZZ_select(&W,T2,2*w2[nb-1]+1);
- ECP8_ZZZ_add(P,&W);
- ECP8_ZZZ_select(&W,T3,2*w3[nb-1]+1);
- ECP8_ZZZ_add(P,&W);
- ECP8_ZZZ_select(&W,T4,2*w4[nb-1]+1);
- ECP8_ZZZ_add(P,&W);
+ ECP8_ZZZ_select(P,T1,2*w1[nb-1]+1);
+ ECP8_ZZZ_select(&W,T2,2*w2[nb-1]+1);
+ ECP8_ZZZ_add(P,&W);
+ ECP8_ZZZ_select(&W,T3,2*w3[nb-1]+1);
+ ECP8_ZZZ_add(P,&W);
+ ECP8_ZZZ_select(&W,T4,2*w4[nb-1]+1);
+ ECP8_ZZZ_add(P,&W);
for (i=nb-2; i>=0; i--)
{
@@ -852,20 +854,20 @@ void ECP8_ZZZ_mul16(ECP8_ZZZ *P,ECP8_ZZZ Q[16],BIG_XXX u[16])
}
// apply corrections
- ECP8_ZZZ_copy(&W,P);
- ECP8_ZZZ_sub(&W,&Q[0]);
- ECP8_ZZZ_cmove(P,&W,pb1);
- ECP8_ZZZ_copy(&W,P);
- ECP8_ZZZ_sub(&W,&Q[4]);
- ECP8_ZZZ_cmove(P,&W,pb2);
-
- ECP8_ZZZ_copy(&W,P);
- ECP8_ZZZ_sub(&W,&Q[8]);
- ECP8_ZZZ_cmove(P,&W,pb3);
- ECP8_ZZZ_copy(&W,P);
- ECP8_ZZZ_sub(&W,&Q[12]);
- ECP8_ZZZ_cmove(P,&W,pb4);
- ECP8_ZZZ_affine(P);
+ ECP8_ZZZ_copy(&W,P);
+ ECP8_ZZZ_sub(&W,&Q[0]);
+ ECP8_ZZZ_cmove(P,&W,pb1);
+ ECP8_ZZZ_copy(&W,P);
+ ECP8_ZZZ_sub(&W,&Q[4]);
+ ECP8_ZZZ_cmove(P,&W,pb2);
+
+ ECP8_ZZZ_copy(&W,P);
+ ECP8_ZZZ_sub(&W,&Q[8]);
+ ECP8_ZZZ_cmove(P,&W,pb3);
+ ECP8_ZZZ_copy(&W,P);
+ ECP8_ZZZ_sub(&W,&Q[12]);
+ ECP8_ZZZ_cmove(P,&W,pb4);
+ ECP8_ZZZ_affine(P);
}
/* Map to hash value to point on G2 from random BIG_XXX */
@@ -873,14 +875,13 @@ void ECP8_ZZZ_mul16(ECP8_ZZZ *P,ECP8_ZZZ Q[16],BIG_XXX u[16])
void ECP8_ZZZ_mapit(ECP8_ZZZ *Q,octet *W)
{
BIG_XXX q,one,x,hv;
- FP_YYY Fx,Fy;
FP2_YYY T,X[3];
- FP4_YYY X4;
- FP8_YYY X8;
+ FP4_YYY X4;
+ FP8_YYY X8;
- ECP8_ZZZ xQ, x2Q, x3Q, x4Q , x5Q, x6Q, x7Q, x8Q;
+ ECP8_ZZZ xQ, x2Q, x3Q, x4Q, x5Q, x6Q, x7Q, x8Q;
- BIG_XXX_fromBytes(hv,W->val);
+ BIG_XXX_fromBytes(hv,W->val);
BIG_XXX_rcopy(q,Modulus_YYY);
BIG_XXX_one(one);
BIG_XXX_mod(hv,q);
@@ -888,83 +889,83 @@ void ECP8_ZZZ_mapit(ECP8_ZZZ *Q,octet *W)
for (;;)
{
FP2_YYY_from_BIGs(&T,one,hv); /*******/
- FP4_YYY_from_FP2(&X4,&T);
- FP8_YYY_from_FP4(&X8,&X4);
+ FP4_YYY_from_FP2(&X4,&T);
+ FP8_YYY_from_FP4(&X8,&X4);
if (ECP8_ZZZ_setx(Q,&X8)) break;
BIG_XXX_inc(hv,1);
}
- ECP8_ZZZ_frob_constants(X);
+ ECP8_ZZZ_frob_constants(X);
BIG_XXX_rcopy(x,CURVE_Bnx_ZZZ);
- // Efficient hash maps to G2 on BLS48 curves - Budroni, Pintore
- // Q -> x8Q -x7Q -Q + F(x7Q-x6Q) + F(F(x6Q-x5Q)) +F(F(F(x5Q-x4Q))) +F(F(F(F(x4Q-x3Q)))) + F(F(F(F(F(x3Q-x2Q))))) + F(F(F(F(F(F(x2Q-xQ)))))) + F(F(F(F(F(F(F(xQ-Q))))))) +F(F(F(F(F(F(F(F(2Q))))))))
-
- ECP8_ZZZ_copy(&xQ,Q);
- ECP8_ZZZ_mul(&xQ,x);
- ECP8_ZZZ_copy(&x2Q,&xQ);
- ECP8_ZZZ_mul(&x2Q,x);
- ECP8_ZZZ_copy(&x3Q,&x2Q);
- ECP8_ZZZ_mul(&x3Q,x);
- ECP8_ZZZ_copy(&x4Q,&x3Q);
-
- ECP8_ZZZ_mul(&x4Q,x);
- ECP8_ZZZ_copy(&x5Q,&x4Q);
- ECP8_ZZZ_mul(&x5Q,x);
- ECP8_ZZZ_copy(&x6Q,&x5Q);
- ECP8_ZZZ_mul(&x6Q,x);
- ECP8_ZZZ_copy(&x7Q,&x6Q);
- ECP8_ZZZ_mul(&x7Q,x);
- ECP8_ZZZ_copy(&x8Q,&x7Q);
- ECP8_ZZZ_mul(&x8Q,x);
+ // Efficient hash maps to G2 on BLS48 curves - Budroni, Pintore
+ // Q -> x8Q -x7Q -Q + F(x7Q-x6Q) + F(F(x6Q-x5Q)) +F(F(F(x5Q-x4Q))) +F(F(F(F(x4Q-x3Q)))) + F(F(F(F(F(x3Q-x2Q))))) + F(F(F(F(F(F(x2Q-xQ)))))) + F(F(F(F(F(F(F(xQ-Q))))))) +F(F(F(F(F(F(F(F(2Q))))))))
+
+ ECP8_ZZZ_copy(&xQ,Q);
+ ECP8_ZZZ_mul(&xQ,x);
+ ECP8_ZZZ_copy(&x2Q,&xQ);
+ ECP8_ZZZ_mul(&x2Q,x);
+ ECP8_ZZZ_copy(&x3Q,&x2Q);
+ ECP8_ZZZ_mul(&x3Q,x);
+ ECP8_ZZZ_copy(&x4Q,&x3Q);
+
+ ECP8_ZZZ_mul(&x4Q,x);
+ ECP8_ZZZ_copy(&x5Q,&x4Q);
+ ECP8_ZZZ_mul(&x5Q,x);
+ ECP8_ZZZ_copy(&x6Q,&x5Q);
+ ECP8_ZZZ_mul(&x6Q,x);
+ ECP8_ZZZ_copy(&x7Q,&x6Q);
+ ECP8_ZZZ_mul(&x7Q,x);
+ ECP8_ZZZ_copy(&x8Q,&x7Q);
+ ECP8_ZZZ_mul(&x8Q,x);
#if SIGN_OF_X_ZZZ==NEGATIVEX
- ECP8_ZZZ_neg(&xQ);
- ECP8_ZZZ_neg(&x3Q);
- ECP8_ZZZ_neg(&x5Q);
- ECP8_ZZZ_neg(&x7Q);
+ ECP8_ZZZ_neg(&xQ);
+ ECP8_ZZZ_neg(&x3Q);
+ ECP8_ZZZ_neg(&x5Q);
+ ECP8_ZZZ_neg(&x7Q);
#endif
- ECP8_ZZZ_sub(&x8Q,&x7Q);
- ECP8_ZZZ_sub(&x8Q,Q);
+ ECP8_ZZZ_sub(&x8Q,&x7Q);
+ ECP8_ZZZ_sub(&x8Q,Q);
+
+ ECP8_ZZZ_sub(&x7Q,&x6Q);
+ ECP8_ZZZ_frob(&x7Q,X,1);
+
+ ECP8_ZZZ_sub(&x6Q,&x5Q);
+ ECP8_ZZZ_frob(&x6Q,X,2);
- ECP8_ZZZ_sub(&x7Q,&x6Q);
- ECP8_ZZZ_frob(&x7Q,X,1);
+ ECP8_ZZZ_sub(&x5Q,&x4Q);
+ ECP8_ZZZ_frob(&x5Q,X,3);
- ECP8_ZZZ_sub(&x6Q,&x5Q);
- ECP8_ZZZ_frob(&x6Q,X,2);
-
- ECP8_ZZZ_sub(&x5Q,&x4Q);
- ECP8_ZZZ_frob(&x5Q,X,3);
-
- ECP8_ZZZ_sub(&x4Q,&x3Q);
- ECP8_ZZZ_frob(&x4Q,X,4);
+ ECP8_ZZZ_sub(&x4Q,&x3Q);
+ ECP8_ZZZ_frob(&x4Q,X,4);
- ECP8_ZZZ_sub(&x3Q,&x2Q);
- ECP8_ZZZ_frob(&x3Q,X,5);
+ ECP8_ZZZ_sub(&x3Q,&x2Q);
+ ECP8_ZZZ_frob(&x3Q,X,5);
- ECP8_ZZZ_sub(&x2Q,&xQ);
- ECP8_ZZZ_frob(&x2Q,X,6);
+ ECP8_ZZZ_sub(&x2Q,&xQ);
+ ECP8_ZZZ_frob(&x2Q,X,6);
- ECP8_ZZZ_sub(&xQ,Q);
- ECP8_ZZZ_frob(&xQ,X,7);
+ ECP8_ZZZ_sub(&xQ,Q);
+ ECP8_ZZZ_frob(&xQ,X,7);
- ECP8_ZZZ_dbl(Q);
- ECP8_ZZZ_frob(Q,X,8);
+ ECP8_ZZZ_dbl(Q);
+ ECP8_ZZZ_frob(Q,X,8);
- ECP8_ZZZ_add(Q,&x8Q);
- ECP8_ZZZ_add(Q,&x7Q);
- ECP8_ZZZ_add(Q,&x6Q);
- ECP8_ZZZ_add(Q,&x5Q);
+ ECP8_ZZZ_add(Q,&x8Q);
+ ECP8_ZZZ_add(Q,&x7Q);
+ ECP8_ZZZ_add(Q,&x6Q);
+ ECP8_ZZZ_add(Q,&x5Q);
- ECP8_ZZZ_add(Q,&x4Q);
- ECP8_ZZZ_add(Q,&x3Q);
- ECP8_ZZZ_add(Q,&x2Q);
- ECP8_ZZZ_add(Q,&xQ);
+ ECP8_ZZZ_add(Q,&x4Q);
+ ECP8_ZZZ_add(Q,&x3Q);
+ ECP8_ZZZ_add(Q,&x2Q);
+ ECP8_ZZZ_add(Q,&xQ);
- ECP8_ZZZ_affine(Q);
+ ECP8_ZZZ_affine(Q);
}
@@ -972,54 +973,54 @@ void ECP8_ZZZ_mapit(ECP8_ZZZ *Q,octet *W)
void ECP8_ZZZ_generator(ECP8_ZZZ *G)
{
- BIG_XXX a,b;
- FP2_YYY Aa,Bb;
- FP4_YYY A,B;
- FP8_YYY X,Y;
+ BIG_XXX a,b;
+ FP2_YYY Aa,Bb;
+ FP4_YYY A,B;
+ FP8_YYY X,Y;
- BIG_XXX_rcopy(a,CURVE_Pxaaa_ZZZ);
- BIG_XXX_rcopy(b,CURVE_Pxaab_ZZZ);
- FP2_YYY_from_BIGs(&Aa,a,b);
+ BIG_XXX_rcopy(a,CURVE_Pxaaa_ZZZ);
+ BIG_XXX_rcopy(b,CURVE_Pxaab_ZZZ);
+ FP2_YYY_from_BIGs(&Aa,a,b);
- BIG_XXX_rcopy(a,CURVE_Pxaba_ZZZ);
- BIG_XXX_rcopy(b,CURVE_Pxabb_ZZZ);
- FP2_YYY_from_BIGs(&Bb,a,b);
+ BIG_XXX_rcopy(a,CURVE_Pxaba_ZZZ);
+ BIG_XXX_rcopy(b,CURVE_Pxabb_ZZZ);
+ FP2_YYY_from_BIGs(&Bb,a,b);
- FP4_YYY_from_FP2s(&A,&Aa,&Bb);
+ FP4_YYY_from_FP2s(&A,&Aa,&Bb);
- BIG_XXX_rcopy(a,CURVE_Pxbaa_ZZZ);
- BIG_XXX_rcopy(b,CURVE_Pxbab_ZZZ);
- FP2_YYY_from_BIGs(&Aa,a,b);
+ BIG_XXX_rcopy(a,CURVE_Pxbaa_ZZZ);
+ BIG_XXX_rcopy(b,CURVE_Pxbab_ZZZ);
+ FP2_YYY_from_BIGs(&Aa,a,b);
- BIG_XXX_rcopy(a,CURVE_Pxbba_ZZZ);
- BIG_XXX_rcopy(b,CURVE_Pxbbb_ZZZ);
- FP2_YYY_from_BIGs(&Bb,a,b);
+ BIG_XXX_rcopy(a,CURVE_Pxbba_ZZZ);
+ BIG_XXX_rcopy(b,CURVE_Pxbbb_ZZZ);
+ FP2_YYY_from_BIGs(&Bb,a,b);
- FP4_YYY_from_FP2s(&B,&Aa,&Bb);
+ FP4_YYY_from_FP2s(&B,&Aa,&Bb);
- FP8_YYY_from_FP4s(&X,&A,&B);
+ FP8_YYY_from_FP4s(&X,&A,&B);
- BIG_XXX_rcopy(a,CURVE_Pyaaa_ZZZ);
- BIG_XXX_rcopy(b,CURVE_Pyaab_ZZZ);
- FP2_YYY_from_BIGs(&Aa,a,b);
+ BIG_XXX_rcopy(a,CURVE_Pyaaa_ZZZ);
+ BIG_XXX_rcopy(b,CURVE_Pyaab_ZZZ);
+ FP2_YYY_from_BIGs(&Aa,a,b);
- BIG_XXX_rcopy(a,CURVE_Pyaba_ZZZ);
- BIG_XXX_rcopy(b,CURVE_Pyabb_ZZZ);
- FP2_YYY_from_BIGs(&Bb,a,b);
+ BIG_XXX_rcopy(a,CURVE_Pyaba_ZZZ);
+ BIG_XXX_rcopy(b,CURVE_Pyabb_ZZZ);
+ FP2_YYY_from_BIGs(&Bb,a,b);
- FP4_YYY_from_FP2s(&A,&Aa,&Bb);
+ FP4_YYY_from_FP2s(&A,&Aa,&Bb);
- BIG_XXX_rcopy(a,CURVE_Pybaa_ZZZ);
- BIG_XXX_rcopy(b,CURVE_Pybab_ZZZ);
- FP2_YYY_from_BIGs(&Aa,a,b);
+ BIG_XXX_rcopy(a,CURVE_Pybaa_ZZZ);
+ BIG_XXX_rcopy(b,CURVE_Pybab_ZZZ);
+ FP2_YYY_from_BIGs(&Aa,a,b);
- BIG_XXX_rcopy(a,CURVE_Pybba_ZZZ);
- BIG_XXX_rcopy(b,CURVE_Pybbb_ZZZ);
- FP2_YYY_from_BIGs(&Bb,a,b);
+ BIG_XXX_rcopy(a,CURVE_Pybba_ZZZ);
+ BIG_XXX_rcopy(b,CURVE_Pybbb_ZZZ);
+ FP2_YYY_from_BIGs(&Bb,a,b);
- FP4_YYY_from_FP2s(&B,&Aa,&Bb);
+ FP4_YYY_from_FP2s(&B,&Aa,&Bb);
- FP8_YYY_from_FP4s(&Y,&A,&B);
+ FP8_YYY_from_FP4s(&Y,&A,&B);
- ECP8_ZZZ_set(G,&X,&Y);
+ ECP8_ZZZ_set(G,&X,&Y);
}
diff --git a/version3/c/ecp8.h b/version3/c/ecp8.h
index 13aff45..2e3a786 100644
--- a/version3/c/ecp8.h
+++ b/version3/c/ecp8.h
@@ -18,7 +18,7 @@ typedef struct
// int inf; /**< Infinity Flag */
FP8_YYY x; /**< x-coordinate of point */
FP8_YYY y; /**< y-coordinate of point */
- FP8_YYY z; /**< z-coordinate of point */
+ FP8_YYY z; /**< z-coordinate of point */
} ECP8_ZZZ;
diff --git a/version3/c/ff.h b/version3/c/ff.h
index a50e653..c3be699 100644
--- a/version3/c/ff.h
+++ b/version3/c/ff.h
@@ -18,7 +18,7 @@
*/
/**
- * @file ff.h
+ * @file ff_WWW.h
* @author Mike Scott
* @brief FF Header File
*
diff --git a/version3/c/fp.c b/version3/c/fp.c
index 02a8521..ec1ab9a 100644
--- a/version3/c/fp.c
+++ b/version3/c/fp.c
@@ -208,7 +208,7 @@ int FP_YYY_iszilch(FP_YYY *x)
{
BIG_XXX m,t;
BIG_XXX_rcopy(m,Modulus_YYY);
- BIG_XXX_copy(t,x->g);
+ BIG_XXX_copy(t,x->g);
BIG_XXX_mod(t,m);
return BIG_XXX_iszilch(t);
}
@@ -256,9 +256,9 @@ void FP_YYY_zero(FP_YYY *x)
int FP_YYY_equals(FP_YYY *x,FP_YYY *y)
{
- FP_YYY xg,yg;
- FP_YYY_copy(&xg,x);
- FP_YYY_copy(&yg,y);
+ FP_YYY xg,yg;
+ FP_YYY_copy(&xg,x);
+ FP_YYY_copy(&yg,y);
FP_YYY_reduce(&xg);
FP_YYY_reduce(&yg);
if (BIG_XXX_comp(xg.g,yg.g)==0) return 1;
@@ -348,12 +348,12 @@ void FP_YYY_imul(FP_YYY *r,FP_YYY *a,int c)
// don't want to do this - only a problem for Montgomery modulus and larger constants
BIG_XXX_zero(k);
BIG_XXX_inc(k,c);
- BIG_XXX_norm(k);
+ BIG_XXX_norm(k);
FP_YYY_nres(&f,k);
FP_YYY_mul(r,a,&f);
}
#endif
-
+
if (s)
{
FP_YYY_neg(r,r);
@@ -427,21 +427,21 @@ static int logb2(unsign32 v)
// Note that MAXXES is bounded to be 2-bits less than half a word
static int quo(BIG_XXX n,BIG_XXX m)
{
- int sh;
- chunk num,den;
- int hb=CHUNK/2;
- if (TBITS_YYY<hb)
- {
- sh=hb-TBITS_YYY;
- num=(n[NLEN_XXX-1]<<sh)|(n[NLEN_XXX-2]>>(BASEBITS_XXX-sh));
- den=(m[NLEN_XXX-1]<<sh)|(m[NLEN_XXX-2]>>(BASEBITS_XXX-sh));
- }
- else
- {
- num=n[NLEN_XXX-1];
- den=m[NLEN_XXX-1];
- }
- return (int)(num/(den+1));
+ int sh;
+ chunk num,den;
+ int hb=CHUNK/2;
+ if (TBITS_YYY<hb)
+ {
+ sh=hb-TBITS_YYY;
+ num=(n[NLEN_XXX-1]<<sh)|(n[NLEN_XXX-2]>>(BASEBITS_XXX-sh));
+ den=(m[NLEN_XXX-1]<<sh)|(m[NLEN_XXX-2]>>(BASEBITS_XXX-sh));
+ }
+ else
+ {
+ num=n[NLEN_XXX-1];
+ den=m[NLEN_XXX-1];
+ }
+ return (int)(num/(den+1));
}
/* SU= 48 */
@@ -449,33 +449,33 @@ static int quo(BIG_XXX n,BIG_XXX m)
void FP_YYY_reduce(FP_YYY *a)
{
BIG_XXX m,r;
- int sr,sb,q;
- chunk carry;
+ int sr,sb,q;
+ chunk carry;
BIG_XXX_rcopy(m,Modulus_YYY);
- BIG_XXX_norm(a->g);
+ BIG_XXX_norm(a->g);
- if (a->XES>16)
- {
- q=quo(a->g,m);
- carry=BIG_XXX_pmul(r,m,q);
- r[NLEN_XXX-1]+=(carry<<BASEBITS_XXX); // correction - put any carry out back in again
- BIG_XXX_sub(a->g,a->g,r);
- BIG_XXX_norm(a->g);
- sb=2;
- }
- else sb=logb2(a->XES-1); // sb does not depend on the actual data
+ if (a->XES>16)
+ {
+ q=quo(a->g,m);
+ carry=BIG_XXX_pmul(r,m,q);
+ r[NLEN_XXX-1]+=(carry<<BASEBITS_XXX); // correction - put any carry out back in again
+ BIG_XXX_sub(a->g,a->g,r);
+ BIG_XXX_norm(a->g);
+ sb=2;
+ }
+ else sb=logb2(a->XES-1); // sb does not depend on the actual data
- BIG_XXX_fshl(m,sb);
+ BIG_XXX_fshl(m,sb);
- while (sb>0)
- {
+ while (sb>0)
+ {
// constant time...
- sr=BIG_XXX_ssn(r,a->g,m); // optimized combined shift, subtract and norm
- BIG_XXX_cmove(a->g,r,1-sr);
- sb--;
- }
+ sr=BIG_XXX_ssn(r,a->g,m); // optimized combined shift, subtract and norm
+ BIG_XXX_cmove(a->g,r,1-sr);
+ sb--;
+ }
//BIG_XXX_mod(a->g,m);
a->XES=1;
@@ -538,134 +538,148 @@ void FP_YYY_div2(FP_YYY *r,FP_YYY *a)
static void FP_YYY_fpow(FP_YYY *r,FP_YYY *x)
{
- int i,j,k,bw,w,c,nw,lo,m,n;
- FP_YYY xp[11],t,key;
- const int ac[]={1,2,3,6,12,15,30,60,120,240,255};
+ int i,j,k,bw,w,c,nw,lo,m,n;
+ FP_YYY xp[11],t,key;
+ const int ac[]= {1,2,3,6,12,15,30,60,120,240,255};
// phase 1
- FP_YYY_copy(&xp[0],x); // 1
- FP_YYY_sqr(&xp[1],x); // 2
- FP_YYY_mul(&xp[2],&xp[1],x); //3
- FP_YYY_sqr(&xp[3],&xp[2]); // 6
- FP_YYY_sqr(&xp[4],&xp[3]); // 12
- FP_YYY_mul(&xp[5],&xp[4],&xp[2]); // 15
- FP_YYY_sqr(&xp[6],&xp[5]); // 30
- FP_YYY_sqr(&xp[7],&xp[6]); // 60
- FP_YYY_sqr(&xp[8],&xp[7]); // 120
- FP_YYY_sqr(&xp[9],&xp[8]); // 240
- FP_YYY_mul(&xp[10],&xp[9],&xp[5]); // 255
-
-#if MODTYPE_YYY==PSEUDO_MERSENNE
- n=MODBITS_YYY;
+ FP_YYY_copy(&xp[0],x); // 1
+ FP_YYY_sqr(&xp[1],x); // 2
+ FP_YYY_mul(&xp[2],&xp[1],x); //3
+ FP_YYY_sqr(&xp[3],&xp[2]); // 6
+ FP_YYY_sqr(&xp[4],&xp[3]); // 12
+ FP_YYY_mul(&xp[5],&xp[4],&xp[2]); // 15
+ FP_YYY_sqr(&xp[6],&xp[5]); // 30
+ FP_YYY_sqr(&xp[7],&xp[6]); // 60
+ FP_YYY_sqr(&xp[8],&xp[7]); // 120
+ FP_YYY_sqr(&xp[9],&xp[8]); // 240
+ FP_YYY_mul(&xp[10],&xp[9],&xp[5]); // 255
+
+#if MODTYPE_YYY==PSEUDO_MERSENNE
+ n=MODBITS_YYY;
#endif
#if MODTYPE_YYY==GENERALISED_MERSENNE // Goldilocks ONLY
- n=MODBITS_YYY/2;
+ n=MODBITS_YYY/2;
#endif
- if (MOD8_YYY==5)
+ if (MOD8_YYY==5)
+ {
+ n-=3;
+ c=(MConst_YYY+5)/8;
+ }
+ else
+ {
+ n-=2;
+ c=(MConst_YYY+3)/4;
+ }
+
+ bw=0;
+ w=1;
+ while (w<c)
+ {
+ w*=2;
+ bw+=1;
+ }
+ k=w-c;
+
+ if (k!=0)
{
- n-=3;
- c=(MConst_YYY+5)/8;
- } else {
- n-=2;
- c=(MConst_YYY+3)/4;
- }
-
- bw=0; w=1; while (w<c) {w*=2; bw+=1;}
- k=w-c;
-
- if (k!=0)
- {
- i=10; while (ac[i]>k) i--;
- FP_YYY_copy(&key,&xp[i]);
- k-=ac[i];
- }
- while (k!=0)
- {
- i--;
- if (ac[i]>k) continue;
- FP_YYY_mul(&key,&key,&xp[i]);
- k-=ac[i];
- }
-
-// phase 2
- FP_YYY_copy(&xp[1],&xp[2]);
- FP_YYY_copy(&xp[2],&xp[5]);
- FP_YYY_copy(&xp[3],&xp[10]);
-
- j=3; m=8;
- nw=n-bw;
- while (2*m<nw)
- {
- FP_YYY_copy(&t,&xp[j++]);
- for (i=0;i<m;i++)
- FP_YYY_sqr(&t,&t);
- FP_YYY_mul(&xp[j],&xp[j-1],&t);
- m*=2;
- }
-
- lo=nw-m;
- FP_YYY_copy(r,&xp[j]);
-
- while (lo!=0)
- {
- m/=2; j--;
- if (lo<m) continue;
- lo-=m;
- FP_YYY_copy(&t,r);
- for (i=0;i<m;i++)
- FP_YYY_sqr(&t,&t);
- FP_YYY_mul(r,&t,&xp[j]);
- }
+ i=10;
+ while (ac[i]>k) i--;
+ FP_YYY_copy(&key,&xp[i]);
+ k-=ac[i];
+ }
+ while (k!=0)
+ {
+ i--;
+ if (ac[i]>k) continue;
+ FP_YYY_mul(&key,&key,&xp[i]);
+ k-=ac[i];
+ }
+
+// phase 2
+ FP_YYY_copy(&xp[1],&xp[2]);
+ FP_YYY_copy(&xp[2],&xp[5]);
+ FP_YYY_copy(&xp[3],&xp[10]);
+
+ j=3;
+ m=8;
+ nw=n-bw;
+ while (2*m<nw)
+ {
+ FP_YYY_copy(&t,&xp[j++]);
+ for (i=0; i<m; i++)
+ FP_YYY_sqr(&t,&t);
+ FP_YYY_mul(&xp[j],&xp[j-1],&t);
+ m*=2;
+ }
+
+ lo=nw-m;
+ FP_YYY_copy(r,&xp[j]);
+
+ while (lo!=0)
+ {
+ m/=2;
+ j--;
+ if (lo<m) continue;
+ lo-=m;
+ FP_YYY_copy(&t,r);
+ for (i=0; i<m; i++)
+ FP_YYY_sqr(&t,&t);
+ FP_YYY_mul(r,&t,&xp[j]);
+ }
// phase 3
- if (bw!=0)
- {
- for (i=0;i<bw;i++ )
- FP_YYY_sqr(r,r);
- FP_YYY_mul(r,r,&key);
- }
+ if (bw!=0)
+ {
+ for (i=0; i<bw; i++ )
+ FP_YYY_sqr(r,r);
+ FP_YYY_mul(r,r,&key);
+ }
#if MODTYPE_YYY==GENERALISED_MERSENNE // Goldilocks ONLY
- FP_YYY_copy(&key,r);
- FP_YYY_sqr(&t,&key);
- FP_YYY_mul(r,&t,x);
- for (i=0;i<n+1;i++)
- FP_YYY_sqr(r,r);
- FP_YYY_mul(r,r,&key);
+ FP_YYY_copy(&key,r);
+ FP_YYY_sqr(&t,&key);
+ FP_YYY_mul(r,&t,x);
+ for (i=0; i<n+1; i++)
+ FP_YYY_sqr(r,r);
+ FP_YYY_mul(r,r,&key);
#endif
}
void FP_YYY_inv(FP_YYY *r,FP_YYY *x)
{
- FP_YYY y,t;
- FP_YYY_fpow(&y,x);
+ FP_YYY y,t;
+ FP_YYY_fpow(&y,x);
if (MOD8_YYY==5)
- { // r=x^3.y^8
- FP_YYY_sqr(&t,x);
- FP_YYY_mul(&t,&t,x);
- FP_YYY_sqr(&y,&y);
- FP_YYY_sqr(&y,&y);
- FP_YYY_sqr(&y,&y);
- FP_YYY_mul(r,&t,&y);
- } else {
- FP_YYY_sqr(&y,&y);
- FP_YYY_sqr(&y,&y);
- FP_YYY_mul(r,&y,x);
- }
+ {
+ // r=x^3.y^8
+ FP_YYY_sqr(&t,x);
+ FP_YYY_mul(&t,&t,x);
+ FP_YYY_sqr(&y,&y);
+ FP_YYY_sqr(&y,&y);
+ FP_YYY_sqr(&y,&y);
+ FP_YYY_mul(r,&t,&y);
+ }
+ else
+ {
+ FP_YYY_sqr(&y,&y);
+ FP_YYY_sqr(&y,&y);
+ FP_YYY_mul(r,&y,x);
+ }
}
#else
void FP_YYY_pow(FP_YYY *r,FP_YYY *a,BIG_XXX b)
{
- sign8 w[1+(NLEN_XXX*BASEBITS_XXX+3)/4];
- FP_YYY tb[16];
- BIG_XXX t;
- int i,nb;
+ sign8 w[1+(NLEN_XXX*BASEBITS_XXX+3)/4];
+ FP_YYY tb[16];
+ BIG_XXX t;
+ int i,nb;
- FP_YYY_norm(a);
+ FP_YYY_norm(a);
BIG_XXX_norm(b);
- BIG_XXX_copy(t,b);
- nb=1+(BIG_XXX_nbits(t)+3)/4;
+ BIG_XXX_copy(t,b);
+ nb=1+(BIG_XXX_nbits(t)+3)/4;
/* convert exponent to 4-bit window */
for (i=0; i<nb; i++)
{
@@ -673,22 +687,22 @@ void FP_YYY_pow(FP_YYY *r,FP_YYY *a,BIG_XXX b)
BIG_XXX_dec(t,w[i]);
BIG_XXX_norm(t);
BIG_XXX_fshr(t,4);
- }
-
- FP_YYY_one(&tb[0]);
- FP_YYY_copy(&tb[1],a);
- for (i=2;i<16;i++)
- FP_YYY_mul(&tb[i],&tb[i-1],a);
-
- FP_YYY_copy(r,&tb[w[nb-1]]);
+ }
+
+ FP_YYY_one(&tb[0]);
+ FP_YYY_copy(&tb[1],a);
+ for (i=2; i<16; i++)
+ FP_YYY_mul(&tb[i],&tb[i-1],a);
+
+ FP_YYY_copy(r,&tb[w[nb-1]]);
for (i=nb-2; i>=0; i--)
{
- FP_YYY_sqr(r,r);
- FP_YYY_sqr(r,r);
- FP_YYY_sqr(r,r);
- FP_YYY_sqr(r,r);
- FP_YYY_mul(r,r,&tb[w[i]]);
- }
+ FP_YYY_sqr(r,r);
+ FP_YYY_sqr(r,r);
+ FP_YYY_sqr(r,r);
+ FP_YYY_sqr(r,r);
+ FP_YYY_mul(r,r,&tb[w[i]]);
+ }
FP_YYY_reduce(r);
}
@@ -696,11 +710,11 @@ void FP_YYY_pow(FP_YYY *r,FP_YYY *a,BIG_XXX b)
void FP_YYY_inv(FP_YYY *w,FP_YYY *x)
{
- BIG_XXX m2;
- BIG_XXX_rcopy(m2,Modulus_YYY);
- BIG_XXX_dec(m2,2);
- BIG_XXX_norm(m2);
- FP_YYY_pow(w,x,m2);
+ BIG_XXX m2;
+ BIG_XXX_rcopy(m2,Modulus_YYY);
+ BIG_XXX_dec(m2,2);
+ BIG_XXX_norm(m2);
+ FP_YYY_pow(w,x,m2);
}
#endif
@@ -743,25 +757,25 @@ void FP_YYY_sqrt(FP_YYY *r,FP_YYY *a)
FP_YYY_copy(&i,a); // i=x
BIG_XXX_fshl(i.g,1); // i=2x
#if MODTYPE_YYY == PSEUDO_MERSENNE || MODTYPE_YYY==GENERALISED_MERSENNE
- FP_YYY_fpow(&v,&i);
+ FP_YYY_fpow(&v,&i);
#else
BIG_XXX_dec(b,5);
BIG_XXX_norm(b);
- BIG_XXX_fshr(b,3); // (p-5)/8
+ BIG_XXX_fshr(b,3); // (p-5)/8
FP_YYY_pow(&v,&i,b); // v=(2x)^(p-5)/8
#endif
FP_YYY_mul(&i,&i,&v); // i=(2x)^(p+3)/8
FP_YYY_mul(&i,&i,&v); // i=(2x)^(p-1)/4
BIG_XXX_dec(i.g,1); // i=(2x)^(p-1)/4 - 1
- FP_YYY_mul(r,a,&v);
+ FP_YYY_mul(r,a,&v);
FP_YYY_mul(r,r,&i);
FP_YYY_reduce(r);
}
if (MOD8_YYY==3 || MOD8_YYY==7)
{
#if MODTYPE_YYY == PSEUDO_MERSENNE || MODTYPE_YYY==GENERALISED_MERSENNE
- FP_YYY_fpow(r,a);
- FP_YYY_mul(r,r,a);
+ FP_YYY_fpow(r,a);
+ FP_YYY_mul(r,r,a);
#else
BIG_XXX_inc(b,1);
BIG_XXX_norm(b);
diff --git a/version3/c/fp.h b/version3/c/fp.h
index a7883f2..245e6e5 100644
--- a/version3/c/fp.h
+++ b/version3/c/fp.h
@@ -18,7 +18,7 @@
*/
/**
- * @file fp.h
+ * @file fp_YYY.h
* @author Mike Scott
* @brief FP Header File
*
diff --git a/version3/c/fp12.c b/version3/c/fp12.c
index 726e9ec..04d39ac 100644
--- a/version3/c/fp12.c
+++ b/version3/c/fp12.c
@@ -82,7 +82,7 @@ void FP12_YYY_copy(FP12_YYY *w,FP12_YYY *x)
FP4_YYY_copy(&(w->a),&(x->a));
FP4_YYY_copy(&(w->b),&(x->b));
FP4_YYY_copy(&(w->c),&(x->c));
- w->type=x->type;
+ w->type=x->type;
}
/* FP12 w=1 */
@@ -92,7 +92,7 @@ void FP12_YYY_one(FP12_YYY *w)
FP4_YYY_one(&(w->a));
FP4_YYY_zero(&(w->b));
FP4_YYY_zero(&(w->c));
- w->type=FP_UNITY;
+ w->type=AMCL_FP_UNITY;
}
void FP12_YYY_zero(FP12_YYY *w)
@@ -100,7 +100,7 @@ void FP12_YYY_zero(FP12_YYY *w)
FP4_YYY_zero(&(w->a));
FP4_YYY_zero(&(w->b));
FP4_YYY_zero(&(w->c));
- w->type=FP_ZERO;
+ w->type=AMCL_FP_ZERO;
}
/* return 1 if x==y, else 0 */
@@ -129,7 +129,7 @@ void FP12_YYY_from_FP4(FP12_YYY *w,FP4_YYY *a)
FP4_YYY_copy(&(w->a),a);
FP4_YYY_zero(&(w->b));
FP4_YYY_zero(&(w->c));
- w->type=FP_SPARSER;
+ w->type=AMCL_AMCL_FP_SPARSER;
}
/* Create FP12 from 3 FP4's */
@@ -139,7 +139,7 @@ void FP12_YYY_from_FP4s(FP12_YYY *w,FP4_YYY *a,FP4_YYY *b,FP4_YYY *c)
FP4_YYY_copy(&(w->a),a);
FP4_YYY_copy(&(w->b),b);
FP4_YYY_copy(&(w->c),c);
- w->type=FP_DENSE;
+ w->type=AMCL_FP_DENSE;
}
/* Granger-Scott Unitary Squaring. This does not benefit from lazy reduction */
@@ -180,7 +180,7 @@ void FP12_YYY_usqr(FP12_YYY *w,FP12_YYY *x)
FP4_YYY_add(&(w->b),&B,&(w->b));
FP4_YYY_add(&(w->c),&C,&(w->c));
- w->type=FP_DENSE;
+ w->type=AMCL_FP_DENSE;
FP12_YYY_reduce(w); /* reduce here as in pow function repeated squarings would trigger multiple reductions */
}
@@ -192,11 +192,11 @@ void FP12_YYY_sqr(FP12_YYY *w,FP12_YYY *x)
FP4_YYY A,B,C,D;
- if (x->type<=FP_UNITY)
- {
- FP12_YYY_copy(w,x);
- return;
- }
+ if (x->type<=AMCL_FP_UNITY)
+ {
+ FP12_YYY_copy(w,x);
+ return;
+ }
FP4_YYY_sqr(&A,&(x->a));
FP4_YYY_mul(&B,&(x->b),&(x->c));
@@ -229,10 +229,10 @@ void FP12_YYY_sqr(FP12_YYY *w,FP12_YYY *x)
FP4_YYY_add(&(w->b),&C,&D);
FP4_YYY_add(&(w->c),&(w->c),&A);
- if (x->type==FP_SPARSER)
- w->type=FP_SPARSE;
- else
- w->type=FP_DENSE;
+ if (x->type==AMCL_AMCL_FP_SPARSER)
+ w->type=AMCL_FP_SPARSE;
+ else
+ w->type=AMCL_FP_DENSE;
FP12_YYY_norm(w);
}
@@ -292,7 +292,7 @@ void FP12_YYY_mul(FP12_YYY *w,FP12_YYY *y)
FP4_YYY_times_i(&z3);
FP4_YYY_add(&(w->a),&z0,&z3);
- w->type=FP_DENSE;
+ w->type=AMCL_FP_DENSE;
FP12_YYY_norm(w);
}
@@ -301,278 +301,280 @@ void FP12_YYY_mul(FP12_YYY *w,FP12_YYY *y)
/* Usually w is denser than y */
void FP12_YYY_ssmul(FP12_YYY *w,FP12_YYY *y)
{
- FP4_YYY z0,z1,z2,z3,t0,t1;
- if (w->type==FP_UNITY)
- {
- FP12_YYY_copy(w,y);
- return;
- }
- if (y->type==FP_UNITY)
- return;
-
- if (y->type >= FP_SPARSE)
- {
- FP4_YYY_mul(&z0,&(w->a),&(y->a)); // xa.ya always 11x11
+ FP4_YYY z0,z1,z2,z3,t0,t1;
+ if (w->type==AMCL_FP_UNITY)
+ {
+ FP12_YYY_copy(w,y);
+ return;
+ }
+ if (y->type==AMCL_FP_UNITY)
+ return;
+
+ if (y->type >= AMCL_FP_SPARSE)
+ {
+ FP4_YYY_mul(&z0,&(w->a),&(y->a)); // xa.ya always 11x11
#if SEXTIC_TWIST_ZZZ == M_TYPE
- if (y->type==FP_SPARSE || w->type==FP_SPARSE)
- {
- FP2_YYY_mul(&z2.b,&(w->b).b,&(y->b).b);
- FP2_YYY_zero(&z2.a);
- if (y->type!=FP_SPARSE)
- FP2_YYY_mul(&z2.a,&(w->b).b,&(y->b).a);
- if (w->type!=FP_SPARSE)
- FP2_YYY_mul(&z2.a,&(w->b).a,&(y->b).b);
- FP4_YYY_times_i(&z2);
- }
- else
+ if (y->type==AMCL_FP_SPARSE || w->type==AMCL_FP_SPARSE)
+ {
+ FP2_YYY_mul(&z2.b,&(w->b).b,&(y->b).b);
+ FP2_YYY_zero(&z2.a);
+ if (y->type!=AMCL_FP_SPARSE)
+ FP2_YYY_mul(&z2.a,&(w->b).b,&(y->b).a);
+ if (w->type!=AMCL_FP_SPARSE)
+ FP2_YYY_mul(&z2.a,&(w->b).a,&(y->b).b);
+ FP4_YYY_times_i(&z2);
+ }
+ else
#endif
- FP4_YYY_mul(&z2,&(w->b),&(y->b)); // xb.yb could be 00x00 or 01x01 or or 10x10 or 11x00 or 11x10 or 11x01 or 11x11
+ FP4_YYY_mul(&z2,&(w->b),&(y->b)); // xb.yb could be 00x00 or 01x01 or or 10x10 or 11x00 or 11x10 or 11x01 or 11x11
- FP4_YYY_add(&t0,&(w->a),&(w->b)); // (xa+xb)
- FP4_YYY_add(&t1,&(y->a),&(y->b)); // (ya+yb)
+ FP4_YYY_add(&t0,&(w->a),&(w->b)); // (xa+xb)
+ FP4_YYY_add(&t1,&(y->a),&(y->b)); // (ya+yb)
- FP4_YYY_norm(&t0);
- FP4_YYY_norm(&t1);
+ FP4_YYY_norm(&t0);
+ FP4_YYY_norm(&t1);
- FP4_YYY_mul(&z1,&t0,&t1); // (xa+xb)(ya+yb) always 11x11
- FP4_YYY_add(&t0,&(w->b),&(w->c)); // (xb+xc)
- FP4_YYY_add(&t1,&(y->b),&(y->c)); // (yb+yc)
+ FP4_YYY_mul(&z1,&t0,&t1); // (xa+xb)(ya+yb) always 11x11
+ FP4_YYY_add(&t0,&(w->b),&(w->c)); // (xb+xc)
+ FP4_YYY_add(&t1,&(y->b),&(y->c)); // (yb+yc)
- FP4_YYY_norm(&t0);
- FP4_YYY_norm(&t1);
+ FP4_YYY_norm(&t0);
+ FP4_YYY_norm(&t1);
- FP4_YYY_mul(&z3,&t0,&t1); // (xb+xc)(yb+yc) could be anything...
- FP4_YYY_neg(&t0,&z0); // -(xa.ya)
- FP4_YYY_neg(&t1,&z2); // -(xb.yb)
+ FP4_YYY_mul(&z3,&t0,&t1); // (xb+xc)(yb+yc) could be anything...
+ FP4_YYY_neg(&t0,&z0); // -(xa.ya)
+ FP4_YYY_neg(&t1,&z2); // -(xb.yb)
- FP4_YYY_add(&z1,&z1,&t0);
- FP4_YYY_add(&(w->b),&z1,&t1); // /wb = (xa+xb)(ya+yb) -(xa.ya) -(xb.yb) = xa.yb + xb.ya
+ FP4_YYY_add(&z1,&z1,&t0);
+ FP4_YYY_add(&(w->b),&z1,&t1); // /wb = (xa+xb)(ya+yb) -(xa.ya) -(xb.yb) = xa.yb + xb.ya
- FP4_YYY_add(&z3,&z3,&t1); // (xb+xc)(yb+yc) -(xb.yb)
- FP4_YYY_add(&z2,&z2,&t0); // (xb.yb) - (xa.ya)
+ FP4_YYY_add(&z3,&z3,&t1); // (xb+xc)(yb+yc) -(xb.yb)
+ FP4_YYY_add(&z2,&z2,&t0); // (xb.yb) - (xa.ya)
- FP4_YYY_add(&t0,&(w->a),&(w->c)); // (xa+xc)
- FP4_YYY_add(&t1,&(y->a),&(y->c)); // (ya+yc)
+ FP4_YYY_add(&t0,&(w->a),&(w->c)); // (xa+xc)
+ FP4_YYY_add(&t1,&(y->a),&(y->c)); // (ya+yc)
- FP4_YYY_norm(&t0);
- FP4_YYY_norm(&t1);
+ FP4_YYY_norm(&t0);
+ FP4_YYY_norm(&t1);
- FP4_YYY_mul(&t0,&t1,&t0); // (xa+xc)(ya+yc) always 11x11
- FP4_YYY_add(&z2,&z2,&t0); // (xb.yb) - (xa.ya) + (xa+xc)(ya+yc)
+ FP4_YYY_mul(&t0,&t1,&t0); // (xa+xc)(ya+yc) always 11x11
+ FP4_YYY_add(&z2,&z2,&t0); // (xb.yb) - (xa.ya) + (xa+xc)(ya+yc)
#if SEXTIC_TWIST_ZZZ == D_TYPE
- if (y->type==FP_SPARSE || w->type==FP_SPARSE)
- {
- FP2_YYY_mul(&t0.a,&(w->c).a,&(y->c).a);
- FP2_YYY_zero(&t0.b);
- if (y->type!=FP_SPARSE)
- FP2_YYY_mul(&t0.b,&(w->c).a,&(y->c).b);
- if (w->type!=FP_SPARSE)
- FP2_YYY_mul(&t0.b,&(w->c).b,&(y->c).a);
- }
- else
+ if (y->type==AMCL_FP_SPARSE || w->type==AMCL_FP_SPARSE)
+ {
+ FP2_YYY_mul(&t0.a,&(w->c).a,&(y->c).a);
+ FP2_YYY_zero(&t0.b);
+ if (y->type!=AMCL_FP_SPARSE)
+ FP2_YYY_mul(&t0.b,&(w->c).a,&(y->c).b);
+ if (w->type!=AMCL_FP_SPARSE)
+ FP2_YYY_mul(&t0.b,&(w->c).b,&(y->c).a);
+ }
+ else
#endif
- FP4_YYY_mul(&t0,&(w->c),&(y->c)); // (xc.yc) could be anything
-
- FP4_YYY_neg(&t1,&t0); // -(xc.yc)
-
- FP4_YYY_add(&(w->c),&z2,&t1); // wc = (xb.yb) - (xa.ya) + (xa+xc)(ya+yc) - (xc.yc) = xb.yb + xc.ya + xa.yc
- FP4_YYY_add(&z3,&z3,&t1); // (xb+xc)(yb+yc) -(xb.yb) - (xc.yc) = xb.yc + xc.yb
- FP4_YYY_times_i(&t0); // i.(xc.yc)
- FP4_YYY_add(&(w->b),&(w->b),&t0); // wb = (xa+xb)(ya+yb) -(xa.ya) -(xb.yb) +i(xc.yc)
- FP4_YYY_norm(&z3);
- FP4_YYY_times_i(&z3); // i[(xb+xc)(yb+yc) -(xb.yb) - (xc.yc)] = i(xb.yc + xc.yb)
- FP4_YYY_add(&(w->a),&z0,&z3); // wa = xa.ya + i(xb.yc + xc.yb)
- } else {
- if (w->type==FP_SPARSER)
- {
- FP12_YYY_smul(w,y);
- return;
- }
- // dense by sparser - 13m
+ FP4_YYY_mul(&t0,&(w->c),&(y->c)); // (xc.yc) could be anything
+
+ FP4_YYY_neg(&t1,&t0); // -(xc.yc)
+
+ FP4_YYY_add(&(w->c),&z2,&t1); // wc = (xb.yb) - (xa.ya) + (xa+xc)(ya+yc) - (xc.yc) = xb.yb + xc.ya + xa.yc
+ FP4_YYY_add(&z3,&z3,&t1); // (xb+xc)(yb+yc) -(xb.yb) - (xc.yc) = xb.yc + xc.yb
+ FP4_YYY_times_i(&t0); // i.(xc.yc)
+ FP4_YYY_add(&(w->b),&(w->b),&t0); // wb = (xa+xb)(ya+yb) -(xa.ya) -(xb.yb) +i(xc.yc)
+ FP4_YYY_norm(&z3);
+ FP4_YYY_times_i(&z3); // i[(xb+xc)(yb+yc) -(xb.yb) - (xc.yc)] = i(xb.yc + xc.yb)
+ FP4_YYY_add(&(w->a),&z0,&z3); // wa = xa.ya + i(xb.yc + xc.yb)
+ }
+ else
+ {
+ if (w->type==AMCL_AMCL_FP_SPARSER)
+ {
+ FP12_YYY_smul(w,y);
+ return;
+ }
+// dense by sparser - 13m
#if SEXTIC_TWIST_ZZZ == D_TYPE
- FP4_YYY_copy(&z3,&(w->b));
- FP4_YYY_mul(&z0,&(w->a),&(y->a));
+ FP4_YYY_copy(&z3,&(w->b));
+ FP4_YYY_mul(&z0,&(w->a),&(y->a));
- FP4_YYY_pmul(&z2,&(w->b),&(y->b).a);
- FP4_YYY_add(&(w->b),&(w->a),&(w->b));
- FP4_YYY_copy(&t1,&(y->a));
- FP2_YYY_add(&t1.a,&t1.a,&(y->b).a);
+ FP4_YYY_pmul(&z2,&(w->b),&(y->b).a);
+ FP4_YYY_add(&(w->b),&(w->a),&(w->b));
+ FP4_YYY_copy(&t1,&(y->a));
+ FP2_YYY_add(&t1.a,&t1.a,&(y->b).a);
- FP4_YYY_norm(&t1);
- FP4_YYY_norm(&(w->b));
+ FP4_YYY_norm(&t1);
+ FP4_YYY_norm(&(w->b));
- FP4_YYY_mul(&(w->b),&(w->b),&t1);
- FP4_YYY_add(&z3,&z3,&(w->c));
- FP4_YYY_norm(&z3);
- FP4_YYY_pmul(&z3,&z3,&(y->b).a);
- FP4_YYY_neg(&t0,&z0);
- FP4_YYY_neg(&t1,&z2);
+ FP4_YYY_mul(&(w->b),&(w->b),&t1);
+ FP4_YYY_add(&z3,&z3,&(w->c));
+ FP4_YYY_norm(&z3);
+ FP4_YYY_pmul(&z3,&z3,&(y->b).a);
+ FP4_YYY_neg(&t0,&z0);
+ FP4_YYY_neg(&t1,&z2);
- FP4_YYY_add(&(w->b),&(w->b),&t0); // z1=z1-z0
- FP4_YYY_add(&(w->b),&(w->b),&t1); // z1=z1-z2
+ FP4_YYY_add(&(w->b),&(w->b),&t0); // z1=z1-z0
+ FP4_YYY_add(&(w->b),&(w->b),&t1); // z1=z1-z2
- FP4_YYY_add(&z3,&z3,&t1); // z3=z3-z2
- FP4_YYY_add(&z2,&z2,&t0); // z2=z2-z0
+ FP4_YYY_add(&z3,&z3,&t1); // z3=z3-z2
+ FP4_YYY_add(&z2,&z2,&t0); // z2=z2-z0
- FP4_YYY_add(&t0,&(w->a),&(w->c));
- FP4_YYY_norm(&t0);
- FP4_YYY_norm(&z3);
+ FP4_YYY_add(&t0,&(w->a),&(w->c));
+ FP4_YYY_norm(&t0);
+ FP4_YYY_norm(&z3);
- FP4_YYY_mul(&t0,&(y->a),&t0);
- FP4_YYY_add(&(w->c),&z2,&t0);
+ FP4_YYY_mul(&t0,&(y->a),&t0);
+ FP4_YYY_add(&(w->c),&z2,&t0);
- FP4_YYY_times_i(&z3);
- FP4_YYY_add(&(w->a),&z0,&z3);
+ FP4_YYY_times_i(&z3);
+ FP4_YYY_add(&(w->a),&z0,&z3);
#endif
#if SEXTIC_TWIST_ZZZ == M_TYPE
- FP4_YYY_mul(&z0,&(w->a),&(y->a));
- FP4_YYY_add(&t0,&(w->a),&(w->b));
- FP4_YYY_norm(&t0);
+ FP4_YYY_mul(&z0,&(w->a),&(y->a));
+ FP4_YYY_add(&t0,&(w->a),&(w->b));
+ FP4_YYY_norm(&t0);
- FP4_YYY_mul(&z1,&t0,&(y->a));
- FP4_YYY_add(&t0,&(w->b),&(w->c));
- FP4_YYY_norm(&t0);
+ FP4_YYY_mul(&z1,&t0,&(y->a));
+ FP4_YYY_add(&t0,&(w->b),&(w->c));
+ FP4_YYY_norm(&t0);
- FP4_YYY_pmul(&z3,&t0,&(y->c).b);
- FP4_YYY_times_i(&z3);
+ FP4_YYY_pmul(&z3,&t0,&(y->c).b);
+ FP4_YYY_times_i(&z3);
- FP4_YYY_neg(&t0,&z0);
- FP4_YYY_add(&z1,&z1,&t0); // z1=z1-z0
+ FP4_YYY_neg(&t0,&z0);
+ FP4_YYY_add(&z1,&z1,&t0); // z1=z1-z0
- FP4_YYY_copy(&(w->b),&z1);
- FP4_YYY_copy(&z2,&t0);
+ FP4_YYY_copy(&(w->b),&z1);
+ FP4_YYY_copy(&z2,&t0);
- FP4_YYY_add(&t0,&(w->a),&(w->c));
- FP4_YYY_add(&t1,&(y->a),&(y->c));
+ FP4_YYY_add(&t0,&(w->a),&(w->c));
+ FP4_YYY_add(&t1,&(y->a),&(y->c));
- FP4_YYY_norm(&t0);
- FP4_YYY_norm(&t1);
+ FP4_YYY_norm(&t0);
+ FP4_YYY_norm(&t1);
- FP4_YYY_mul(&t0,&t1,&t0);
- FP4_YYY_add(&z2,&z2,&t0);
+ FP4_YYY_mul(&t0,&t1,&t0);
+ FP4_YYY_add(&z2,&z2,&t0);
- FP4_YYY_pmul(&t0,&(w->c),&(y->c).b);
- FP4_YYY_times_i(&t0);
- FP4_YYY_neg(&t1,&t0);
- FP4_YYY_times_i(&t0);
+ FP4_YYY_pmul(&t0,&(w->c),&(y->c).b);
+ FP4_YYY_times_i(&t0);
+ FP4_YYY_neg(&t1,&t0);
+ FP4_YYY_times_i(&t0);
- FP4_YYY_add(&(w->c),&z2,&t1);
- FP4_YYY_add(&z3,&z3,&t1);
+ FP4_YYY_add(&(w->c),&z2,&t1);
+ FP4_YYY_add(&z3,&z3,&t1);
- FP4_YYY_add(&(w->b),&(w->b),&t0);
- FP4_YYY_norm(&z3);
- FP4_YYY_times_i(&z3);
- FP4_YYY_add(&(w->a),&z0,&z3);
+ FP4_YYY_add(&(w->b),&(w->b),&t0);
+ FP4_YYY_norm(&z3);
+ FP4_YYY_times_i(&z3);
+ FP4_YYY_add(&(w->a),&z0,&z3);
#endif
- }
- w->type=FP_DENSE;
+ }
+ w->type=AMCL_FP_DENSE;
FP12_YYY_norm(w);
}
/* FP12 multiplication w=w*y */
/* catering for special case that arises from special form of ATE pairing line function */
-/* w and y are both sparser line functions - cost = 6m */
+/* w and y are both sparser line functions - cost = 6m */
void FP12_YYY_smul(FP12_YYY *w,FP12_YYY *y)
{
- FP2_YYY w1,w2,w3,ta,tb,tc,td,te,t;
+ FP2_YYY w1,w2,w3,ta,tb,tc,td,te,t;
// if (type==D_TYPE)
-// {
+// {
#if SEXTIC_TWIST_ZZZ == D_TYPE
- FP2_YYY_mul(&w1,&(w->a).a,&(y->a).a); // A1.A2
- FP2_YYY_mul(&w2,&(w->a).b,&(y->a).b); // B1.B2
- FP2_YYY_mul(&w3,&(w->b).a,&(y->b).a); // C1.C2
-
- FP2_YYY_add(&ta,&(w->a).a,&(w->a).b); // A1+B1
- FP2_YYY_add(&tb,&(y->a).a,&(y->a).b); // A2+B2
- FP2_YYY_norm(&ta);
- FP2_YYY_norm(&tb);
- FP2_YYY_mul(&tc,&ta,&tb); // (A1+B1)(A2+B2)
- FP2_YYY_add(&t,&w1,&w2);
- FP2_YYY_neg(&t,&t);
- FP2_YYY_add(&tc,&tc,&t); // (A1+B1)(A2+B2)-A1.A2-B1*B2 = (A1.B2+A2.B1)
-
- FP2_YYY_add(&ta,&(w->a).a,&(w->b).a); // A1+C1
- FP2_YYY_add(&tb,&(y->a).a,&(y->b).a); // A2+C2
- FP2_YYY_norm(&ta);
- FP2_YYY_norm(&tb);
- FP2_YYY_mul(&td,&ta,&tb); // (A1+C1)(A2+C2)
- FP2_YYY_add(&t,&w1,&w3);
- FP2_YYY_neg(&t,&t);
- FP2_YYY_add(&td,&td,&t); // (A1+C1)(A2+C2)-A1.A2-C1*C2 = (A1.C2+A2.C1)
-
- FP2_YYY_add(&ta,&(w->a).b,&(w->b).a); // B1+C1
- FP2_YYY_add(&tb,&(y->a).b,&(y->b).a); // B2+C2
- FP2_YYY_norm(&ta);
- FP2_YYY_norm(&tb);
- FP2_YYY_mul(&te,&ta,&tb); // (B1+C1)(B2+C2)
- FP2_YYY_add(&t,&w2,&w3);
- FP2_YYY_neg(&t,&t);
- FP2_YYY_add(&te,&te,&t); // (B1+C1)(B2+C2)-B1.B2-C1*C2 = (B1.C2+B2.C1)
-
- FP2_YYY_mul_ip(&w2);
- FP2_YYY_add(&w1,&w1,&w2);
- FP4_YYY_from_FP2s(&(w->a),&w1,&tc);
- FP4_YYY_from_FP2s(&(w->b),&td,&te); // only norm these 2
- FP4_YYY_from_FP2(&(w->c),&w3);
-
- FP4_YYY_norm(&(w->a));
- FP4_YYY_norm(&(w->b));
+ FP2_YYY_mul(&w1,&(w->a).a,&(y->a).a); // A1.A2
+ FP2_YYY_mul(&w2,&(w->a).b,&(y->a).b); // B1.B2
+ FP2_YYY_mul(&w3,&(w->b).a,&(y->b).a); // C1.C2
+
+ FP2_YYY_add(&ta,&(w->a).a,&(w->a).b); // A1+B1
+ FP2_YYY_add(&tb,&(y->a).a,&(y->a).b); // A2+B2
+ FP2_YYY_norm(&ta);
+ FP2_YYY_norm(&tb);
+ FP2_YYY_mul(&tc,&ta,&tb); // (A1+B1)(A2+B2)
+ FP2_YYY_add(&t,&w1,&w2);
+ FP2_YYY_neg(&t,&t);
+ FP2_YYY_add(&tc,&tc,&t); // (A1+B1)(A2+B2)-A1.A2-B1*B2 = (A1.B2+A2.B1)
+
+ FP2_YYY_add(&ta,&(w->a).a,&(w->b).a); // A1+C1
+ FP2_YYY_add(&tb,&(y->a).a,&(y->b).a); // A2+C2
+ FP2_YYY_norm(&ta);
+ FP2_YYY_norm(&tb);
+ FP2_YYY_mul(&td,&ta,&tb); // (A1+C1)(A2+C2)
+ FP2_YYY_add(&t,&w1,&w3);
+ FP2_YYY_neg(&t,&t);
+ FP2_YYY_add(&td,&td,&t); // (A1+C1)(A2+C2)-A1.A2-C1*C2 = (A1.C2+A2.C1)
+
+ FP2_YYY_add(&ta,&(w->a).b,&(w->b).a); // B1+C1
+ FP2_YYY_add(&tb,&(y->a).b,&(y->b).a); // B2+C2
+ FP2_YYY_norm(&ta);
+ FP2_YYY_norm(&tb);
+ FP2_YYY_mul(&te,&ta,&tb); // (B1+C1)(B2+C2)
+ FP2_YYY_add(&t,&w2,&w3);
+ FP2_YYY_neg(&t,&t);
+ FP2_YYY_add(&te,&te,&t); // (B1+C1)(B2+C2)-B1.B2-C1*C2 = (B1.C2+B2.C1)
+
+ FP2_YYY_mul_ip(&w2);
+ FP2_YYY_add(&w1,&w1,&w2);
+ FP4_YYY_from_FP2s(&(w->a),&w1,&tc);
+ FP4_YYY_from_FP2s(&(w->b),&td,&te); // only norm these 2
+ FP4_YYY_from_FP2(&(w->c),&w3);
+
+ FP4_YYY_norm(&(w->a));
+ FP4_YYY_norm(&(w->b));
#endif
-// } else {
+// } else {
#if SEXTIC_TWIST_ZZZ == M_TYPE
- FP2_YYY_mul(&w1,&(w->a).a,&(y->a).a); // A1.A2
- FP2_YYY_mul(&w2,&(w->a).b,&(y->a).b); // B1.B2
- FP2_YYY_mul(&w3,&(w->c).b,&(y->c).b); // F1.F2
-
- FP2_YYY_add(&ta,&(w->a).a,&(w->a).b); // A1+B1
- FP2_YYY_add(&tb,&(y->a).a,&(y->a).b); // A2+B2
- FP2_YYY_norm(&ta);
- FP2_YYY_norm(&tb);
- FP2_YYY_mul(&tc,&ta,&tb); // (A1+B1)(A2+B2)
- FP2_YYY_add(&t,&w1,&w2);
- FP2_YYY_neg(&t,&t);
- FP2_YYY_add(&tc,&tc,&t); // (A1+B1)(A2+B2)-A1.A2-B1*B2 = (A1.B2+A2.B1)
-
- FP2_YYY_add(&ta,&(w->a).a,&(w->c).b); // A1+F1
- FP2_YYY_add(&tb,&(y->a).a,&(y->c).b); // A2+F2
- FP2_YYY_norm(&ta);
- FP2_YYY_norm(&tb);
- FP2_YYY_mul(&td,&ta,&tb); // (A1+F1)(A2+F2)
- FP2_YYY_add(&t,&w1,&w3);
- FP2_YYY_neg(&t,&t);
- FP2_YYY_add(&td,&td,&t); // (A1+F1)(A2+F2)-A1.A2-F1*F2 = (A1.F2+A2.F1)
-
- FP2_YYY_add(&ta,&(w->a).b,&(w->c).b); // B1+F1
- FP2_YYY_add(&tb,&(y->a).b,&(y->c).b); // B2+F2
- FP2_YYY_norm(&ta);
- FP2_YYY_norm(&tb);
- FP2_YYY_mul(&te,&ta,&tb); // (B1+F1)(B2+F2)
- FP2_YYY_add(&t,&w2,&w3);
- FP2_YYY_neg(&t,&t);
- FP2_YYY_add(&te,&te,&t); // (B1+F1)(B2+F2)-B1.B2-F1*F2 = (B1.F2+B2.F1)
-
- FP2_YYY_mul_ip(&w2);
- FP2_YYY_add(&w1,&w1,&w2);
- FP4_YYY_from_FP2s(&(w->a),&w1,&tc);
-
- FP2_YYY_mul_ip(&w3);
- FP2_YYY_norm(&w3);
- FP4_YYY_from_FP2H(&(w->b),&w3);
-
- FP2_YYY_norm(&te);
- FP2_YYY_mul_ip(&te);
- FP4_YYY_from_FP2s(&(w->c),&te,&td);
-
- FP4_YYY_norm(&(w->a));
- FP4_YYY_norm(&(w->c));
+ FP2_YYY_mul(&w1,&(w->a).a,&(y->a).a); // A1.A2
+ FP2_YYY_mul(&w2,&(w->a).b,&(y->a).b); // B1.B2
+ FP2_YYY_mul(&w3,&(w->c).b,&(y->c).b); // F1.F2
+
+ FP2_YYY_add(&ta,&(w->a).a,&(w->a).b); // A1+B1
+ FP2_YYY_add(&tb,&(y->a).a,&(y->a).b); // A2+B2
+ FP2_YYY_norm(&ta);
+ FP2_YYY_norm(&tb);
+ FP2_YYY_mul(&tc,&ta,&tb); // (A1+B1)(A2+B2)
+ FP2_YYY_add(&t,&w1,&w2);
+ FP2_YYY_neg(&t,&t);
+ FP2_YYY_add(&tc,&tc,&t); // (A1+B1)(A2+B2)-A1.A2-B1*B2 = (A1.B2+A2.B1)
+
+ FP2_YYY_add(&ta,&(w->a).a,&(w->c).b); // A1+F1
+ FP2_YYY_add(&tb,&(y->a).a,&(y->c).b); // A2+F2
+ FP2_YYY_norm(&ta);
+ FP2_YYY_norm(&tb);
+ FP2_YYY_mul(&td,&ta,&tb); // (A1+F1)(A2+F2)
+ FP2_YYY_add(&t,&w1,&w3);
+ FP2_YYY_neg(&t,&t);
+ FP2_YYY_add(&td,&td,&t); // (A1+F1)(A2+F2)-A1.A2-F1*F2 = (A1.F2+A2.F1)
+
+ FP2_YYY_add(&ta,&(w->a).b,&(w->c).b); // B1+F1
+ FP2_YYY_add(&tb,&(y->a).b,&(y->c).b); // B2+F2
+ FP2_YYY_norm(&ta);
+ FP2_YYY_norm(&tb);
+ FP2_YYY_mul(&te,&ta,&tb); // (B1+F1)(B2+F2)
+ FP2_YYY_add(&t,&w2,&w3);
+ FP2_YYY_neg(&t,&t);
+ FP2_YYY_add(&te,&te,&t); // (B1+F1)(B2+F2)-B1.B2-F1*F2 = (B1.F2+B2.F1)
+
+ FP2_YYY_mul_ip(&w2);
+ FP2_YYY_add(&w1,&w1,&w2);
+ FP4_YYY_from_FP2s(&(w->a),&w1,&tc);
+
+ FP2_YYY_mul_ip(&w3);
+ FP2_YYY_norm(&w3);
+ FP4_YYY_from_FP2H(&(w->b),&w3);
+
+ FP2_YYY_norm(&te);
+ FP2_YYY_mul_ip(&te);
+ FP4_YYY_from_FP2s(&(w->c),&te,&td);
+
+ FP4_YYY_norm(&(w->a));
+ FP4_YYY_norm(&(w->c));
#endif
// }
- w->type=FP_SPARSE;
+ w->type=AMCL_FP_SPARSE;
}
/* Set w=1/x */
@@ -613,7 +615,7 @@ void FP12_YYY_inv(FP12_YYY *w,FP12_YYY *x)
FP4_YYY_mul(&(w->a),&f0,&f3);
FP4_YYY_mul(&(w->b),&f1,&f3);
FP4_YYY_mul(&(w->c),&f2,&f3);
- w->type=FP_DENSE;
+ w->type=AMCL_FP_DENSE;
}
/* constant time powering by small integer of max length bts */
@@ -692,13 +694,13 @@ void FP12_YYY_pow(FP12_YYY *r,FP12_YYY *a,BIG_XXX b)
FP12_YYY w,sf;
BIG_XXX b1,b3;
int i,nb,bt;
- BIG_XXX_copy(b1,b);
+ BIG_XXX_copy(b1,b);
BIG_XXX_norm(b1);
BIG_XXX_pmul(b3,b1,3);
BIG_XXX_norm(b3);
- FP12_YYY_copy(&sf,a);
- FP12_YYY_norm(&sf);
+ FP12_YYY_copy(&sf,a);
+ FP12_YYY_norm(&sf);
FP12_YYY_copy(&w,&sf);
@@ -729,8 +731,8 @@ void FP12_YYY_pow(FP12_YYY *r,FP12_YYY *a,BIG_XXX b)
void FP12_YYY_pow4(FP12_YYY *p,FP12_YYY *q,BIG_XXX u[4])
{
int i,j,k,nb,pb,bt;
- FP12_YYY g[8],r;
- BIG_XXX t[4],mt;
+ FP12_YYY g[8],r;
+ BIG_XXX t[4],mt;
sign8 w[NLEN_XXX*BASEBITS_XXX+1];
sign8 s[NLEN_XXX*BASEBITS_XXX+1];
@@ -741,24 +743,24 @@ void FP12_YYY_pow4(FP12_YYY *p,FP12_YYY *q,BIG_XXX u[4])
// Precomputed table
FP12_YYY_copy(&g[0],&q[0]); // q[0]
FP12_YYY_copy(&g[1],&g[0]);
- FP12_YYY_mul(&g[1],&q[1]); // q[0].q[1]
+ FP12_YYY_mul(&g[1],&q[1]); // q[0].q[1]
FP12_YYY_copy(&g[2],&g[0]);
- FP12_YYY_mul(&g[2],&q[2]); // q[0].q[2]
- FP12_YYY_copy(&g[3],&g[1]);
- FP12_YYY_mul(&g[3],&q[2]); // q[0].q[1].q[2]
- FP12_YYY_copy(&g[4],&g[0]);
- FP12_YYY_mul(&g[4],&q[3]); // q[0].q[3]
- FP12_YYY_copy(&g[5],&g[1]);
- FP12_YYY_mul(&g[5],&q[3]); // q[0].q[1].q[3]
- FP12_YYY_copy(&g[6],&g[2]);
- FP12_YYY_mul(&g[6],&q[3]); // q[0].q[2].q[3]
- FP12_YYY_copy(&g[7],&g[3]);
- FP12_YYY_mul(&g[7],&q[3]); // q[0].q[1].q[2].q[3]
+ FP12_YYY_mul(&g[2],&q[2]); // q[0].q[2]
+ FP12_YYY_copy(&g[3],&g[1]);
+ FP12_YYY_mul(&g[3],&q[2]); // q[0].q[1].q[2]
+ FP12_YYY_copy(&g[4],&g[0]);
+ FP12_YYY_mul(&g[4],&q[3]); // q[0].q[3]
+ FP12_YYY_copy(&g[5],&g[1]);
+ FP12_YYY_mul(&g[5],&q[3]); // q[0].q[1].q[3]
+ FP12_YYY_copy(&g[6],&g[2]);
+ FP12_YYY_mul(&g[6],&q[3]); // q[0].q[2].q[3]
+ FP12_YYY_copy(&g[7],&g[3]);
+ FP12_YYY_mul(&g[7],&q[3]); // q[0].q[1].q[2].q[3]
// Make it odd
- pb=1-BIG_XXX_parity(t[0]);
- BIG_XXX_inc(t[0],pb);
- BIG_XXX_norm(t[0]);
+ pb=1-BIG_XXX_parity(t[0]);
+ BIG_XXX_inc(t[0],pb);
+ BIG_XXX_norm(t[0]);
// Number of bits
BIG_XXX_zero(mt);
@@ -768,45 +770,45 @@ void FP12_YYY_pow4(FP12_YYY *p,FP12_YYY *q,BIG_XXX u[4])
}
nb=1+BIG_XXX_nbits(mt);
-// Sign pivot
- s[nb-1]=1;
- for (i=0;i<nb-1;i++)
- {
+// Sign pivot
+ s[nb-1]=1;
+ for (i=0; i<nb-1; i++)
+ {
BIG_XXX_fshr(t[0],1);
- s[i]=2*BIG_XXX_parity(t[0])-1;
- }
+ s[i]=2*BIG_XXX_parity(t[0])-1;
+ }
// Recoded exponent
for (i=0; i<nb; i++)
{
- w[i]=0;
- k=1;
- for (j=1; j<4; j++)
- {
- bt=s[i]*BIG_XXX_parity(t[j]);
- BIG_XXX_fshr(t[j],1);
-
- BIG_XXX_dec(t[j],(bt>>1));
- BIG_XXX_norm(t[j]);
- w[i]+=bt*k;
- k*=2;
+ w[i]=0;
+ k=1;
+ for (j=1; j<4; j++)
+ {
+ bt=s[i]*BIG_XXX_parity(t[j]);
+ BIG_XXX_fshr(t[j],1);
+
+ BIG_XXX_dec(t[j],(bt>>1));
+ BIG_XXX_norm(t[j]);
+ w[i]+=bt*k;
+ k*=2;
}
- }
+ }
// Main loop
- FP12_YYY_select(p,g,2*w[nb-1]+1);
+ FP12_YYY_select(p,g,2*w[nb-1]+1);
for (i=nb-2; i>=0; i--)
{
FP12_YYY_select(&r,g,2*w[i]+s[i]);
- FP12_YYY_usqr(p,p);
+ FP12_YYY_usqr(p,p);
FP12_YYY_mul(p,&r);
}
// apply correction
- FP12_YYY_conj(&r,&q[0]);
- FP12_YYY_mul(&r,p);
- FP12_YYY_cmove(p,&r,pb);
+ FP12_YYY_conj(&r,&q[0]);
+ FP12_YYY_mul(&r,p);
+ FP12_YYY_cmove(p,&r,pb);
- FP12_YYY_reduce(p);
+ FP12_YYY_reduce(p);
}
/* Set w=w^p using Frobenius */
@@ -823,7 +825,7 @@ void FP12_YYY_frob(FP12_YYY *w,FP2_YYY *f)
FP4_YYY_pmul(&(w->b),&(w->b),f);
FP4_YYY_pmul(&(w->c),&(w->c),&f2);
- w->type=FP_DENSE;
+ w->type=AMCL_FP_DENSE;
}
/* SU= 8 */
@@ -935,7 +937,7 @@ void FP12_YYY_cmove(FP12_YYY *f,FP12_YYY *g,int d)
FP4_YYY_cmove(&(f->a),&(g->a),d);
FP4_YYY_cmove(&(f->b),&(g->b),d);
FP4_YYY_cmove(&(f->c),&(g->c),d);
- d=~(d-1);
- f->type^=(f->type^g->type)&d;
+ d=~(d-1);
+ f->type^=(f->type^g->type)&d;
}
diff --git a/version3/c/fp12.h b/version3/c/fp12.h
index bc23ec1..5cb5d83 100644
--- a/version3/c/fp12.h
+++ b/version3/c/fp12.h
@@ -18,7 +18,7 @@
*/
/**
- * @file fp12.h
+ * @file fp12_YYY.h
* @author Mike Scott
* @brief FP12 Header File
*
@@ -38,7 +38,7 @@ typedef struct
FP4_YYY a; /**< first part of FP12 */
FP4_YYY b; /**< second part of FP12 */
FP4_YYY c; /**< third part of FP12 */
- int type;
+ int type; /**< Type */
} FP12_YYY;
extern const BIG_XXX Fra_YYY; /**< real part of BN curve Frobenius Constant */
diff --git a/version3/c/fp16.c b/version3/c/fp16.c
index e2579c9..0f37181 100644
--- a/version3/c/fp16.c
+++ b/version3/c/fp16.c
@@ -100,14 +100,14 @@ void FP16_YYY_neg(FP16_YYY *w,FP16_YYY *x)
{
/* Just one field neg */
FP8_YYY m,t;
- FP16_YYY_norm(x);
+ FP16_YYY_norm(x);
FP8_YYY_add(&m,&(x->a),&(x->b));
- FP8_YYY_norm(&m);
+ FP8_YYY_norm(&m);
FP8_YYY_neg(&m,&m);
FP8_YYY_add(&t,&m,&(x->b));
FP8_YYY_add(&(w->b),&m,&(x->a));
FP8_YYY_copy(&(w->a),&t);
- FP16_YYY_norm(w);
+ FP16_YYY_norm(w);
}
/* Set w=conj(x) */
@@ -115,7 +115,7 @@ void FP16_YYY_conj(FP16_YYY *w,FP16_YYY *x)
{
FP8_YYY_copy(&(w->a), &(x->a));
FP8_YYY_neg(&(w->b), &(x->b));
- FP16_YYY_norm(w);
+ FP16_YYY_norm(w);
}
/* Set w=-conj(x) */
@@ -123,7 +123,7 @@ void FP16_YYY_nconj(FP16_YYY *w,FP16_YYY *x)
{
FP8_YYY_copy(&(w->b),&(x->b));
FP8_YYY_neg(&(w->a), &(x->a));
- FP16_YYY_norm(w);
+ FP16_YYY_norm(w);
}
/* Set w=x+y */
@@ -192,8 +192,8 @@ void FP16_YYY_sqr(FP16_YYY *w,FP16_YYY *x)
FP8_YYY_add(&t2,&(x->a),&t2);
- FP8_YYY_norm(&t1); // 2
- FP8_YYY_norm(&t2); // 2
+ FP8_YYY_norm(&t1); // 2
+ FP8_YYY_norm(&t2); // 2
FP8_YYY_mul(&(w->a),&t1,&t2);
@@ -202,7 +202,7 @@ void FP16_YYY_sqr(FP16_YYY *w,FP16_YYY *x)
FP8_YYY_add(&t2,&t2,&t3);
- FP8_YYY_norm(&t2); // 2
+ FP8_YYY_norm(&t2); // 2
FP8_YYY_neg(&t2,&t2);
FP8_YYY_add(&(w->a),&(w->a),&t2); /* a=(a+b)(a+i^2.b)-i^2.ab-ab = a*a+ib*ib */
FP8_YYY_add(&(w->b),&t3,&t3); /* b=2ab */
@@ -216,23 +216,23 @@ void FP16_YYY_mul(FP16_YYY *w,FP16_YYY *x,FP16_YYY *y)
{
FP8_YYY t1,t2,t3,t4;
- FP8_YYY_mul(&t1,&(x->a),&(y->a));
- FP8_YYY_mul(&t2,&(x->b),&(y->b));
+ FP8_YYY_mul(&t1,&(x->a),&(y->a));
+ FP8_YYY_mul(&t2,&(x->b),&(y->b));
FP8_YYY_add(&t3,&(y->b),&(y->a));
FP8_YYY_add(&t4,&(x->b),&(x->a));
- FP8_YYY_norm(&t4); // 2
- FP8_YYY_norm(&t3); // 2
+ FP8_YYY_norm(&t4); // 2
+ FP8_YYY_norm(&t3); // 2
FP8_YYY_mul(&t4,&t4,&t3); /* (xa+xb)(ya+yb) */
- FP8_YYY_neg(&t3,&t1); // 1
- FP8_YYY_add(&t4,&t4,&t3); //t4E=3
+ FP8_YYY_neg(&t3,&t1); // 1
+ FP8_YYY_add(&t4,&t4,&t3); //t4E=3
FP8_YYY_norm(&t4);
- FP8_YYY_neg(&t3,&t2); // 1
- FP8_YYY_add(&(w->b),&t4,&t3); //wbE=3
+ FP8_YYY_neg(&t3,&t2); // 1
+ FP8_YYY_add(&(w->b),&t4,&t3); //wbE=3
FP8_YYY_times_i(&t2);
FP8_YYY_add(&(w->a),&t2,&t1);
@@ -266,56 +266,57 @@ void FP16_YYY_inv(FP16_YYY *w,FP16_YYY *x)
FP8_YYY_sqr(&t1,&(x->a));
FP8_YYY_sqr(&t2,&(x->b));
FP8_YYY_times_i(&t2);
- FP8_YYY_norm(&t2);
+ FP8_YYY_norm(&t2);
FP8_YYY_sub(&t1,&t1,&t2);
- FP8_YYY_norm(&t1);
+ FP8_YYY_norm(&t1);
FP8_YYY_inv(&t1,&t1);
FP8_YYY_mul(&(w->a),&t1,&(x->a));
FP8_YYY_neg(&t1,&t1);
- FP8_YYY_norm(&t1);
+ FP8_YYY_norm(&t1);
FP8_YYY_mul(&(w->b),&t1,&(x->b));
}
/* w*=i where i = sqrt(sqrt(-1+sqrt(-1))) */
void FP16_YYY_times_i(FP16_YYY *w)
{
- FP8_YYY s,t;
- FP8_YYY_copy(&s,&(w->b));
- FP8_YYY_copy(&t,&(w->a));
- FP8_YYY_times_i(&s);
- FP8_YYY_copy(&(w->a),&s);
- FP8_YYY_copy(&(w->b),&t);
- FP16_YYY_norm(w);
+ FP8_YYY s,t;
+ FP8_YYY_copy(&s,&(w->b));
+ FP8_YYY_copy(&t,&(w->a));
+ FP8_YYY_times_i(&s);
+ FP8_YYY_copy(&(w->a),&s);
+ FP8_YYY_copy(&(w->b),&t);
+ FP16_YYY_norm(w);
}
void FP16_YYY_times_i2(FP16_YYY *w)
{
- FP8_YYY_times_i(&(w->a));
- FP8_YYY_times_i(&(w->b));
+ FP8_YYY_times_i(&(w->a));
+ FP8_YYY_times_i(&(w->b));
}
void FP16_YYY_times_i4(FP16_YYY *w)
{
- FP8_YYY_times_i2(&(w->a));
- FP8_YYY_times_i2(&(w->b));
+ FP8_YYY_times_i2(&(w->a));
+ FP8_YYY_times_i2(&(w->b));
}
/* Set w=w^p using Frobenius */
void FP16_YYY_frob(FP16_YYY *w,FP2_YYY *f)
-{ // f=(i+1)^(p-3)/8
- FP2_YYY ff;
+{
+ // f=(i+1)^(p-3)/8
+ FP2_YYY ff;
- FP2_YYY_sqr(&ff,f); // (i+1)^(p-3)/4
- FP2_YYY_norm(&ff);
+ FP2_YYY_sqr(&ff,f); // (i+1)^(p-3)/4
+ FP2_YYY_norm(&ff);
- FP8_YYY_frob(&(w->a),&ff);
- FP8_YYY_frob(&(w->b),&ff);
+ FP8_YYY_frob(&(w->a),&ff);
+ FP8_YYY_frob(&(w->b),&ff);
- FP8_YYY_qmul(&(w->b),&(w->b),f); // times (1+i)^(p-3)/8
- FP8_YYY_times_i(&(w->b)); // (i+1)^(p-1)/8
+ FP8_YYY_qmul(&(w->b),&(w->b),f); // times (1+i)^(p-3)/8
+ FP8_YYY_times_i(&(w->b)); // (i+1)^(p-1)/8
}
/* Set r=a^b mod m */
@@ -358,10 +359,10 @@ void FP16_YYY_xtr_A(FP16_YYY *r,FP16_YYY *w,FP16_YYY *x,FP16_YYY *y,FP16_YYY *z)
FP16_YYY_copy(r,x);
FP16_YYY_sub(&t1,w,y);
- FP16_YYY_norm(&t1);
+ FP16_YYY_norm(&t1);
FP16_YYY_pmul(&t1,&t1,&(r->a));
FP16_YYY_add(&t2,w,y);
- FP16_YYY_norm(&t2);
+ FP16_YYY_norm(&t2);
FP16_YYY_pmul(&t2,&t2,&(r->b));
FP16_YYY_times_i(&t2);
@@ -379,7 +380,7 @@ void FP16_YYY_xtr_D(FP16_YYY *r,FP16_YYY *x)
FP16_YYY_conj(&w,r);
FP16_YYY_add(&w,&w,&w);
FP16_YYY_sqr(r,r);
- FP16_YYY_norm(&w);
+ FP16_YYY_norm(&w);
FP16_YYY_sub(r,r,&w);
FP16_YYY_reduce(r); /* reduce here as multiple calls trigger automatic reductions */
}
@@ -390,20 +391,20 @@ void FP16_YYY_xtr_pow(FP16_YYY *r,FP16_YYY *x,BIG_XXX n)
int i,par,nb;
BIG_XXX v;
FP2_YYY w2;
- FP4_YYY w4;
- FP8_YYY w8;
+ FP4_YYY w4;
+ FP8_YYY w8;
FP16_YYY t,a,b,c,sf;
BIG_XXX_zero(v);
BIG_XXX_inc(v,3);
- BIG_XXX_norm(v);
+ BIG_XXX_norm(v);
FP2_YYY_from_BIG(&w2,v);
FP4_YYY_from_FP2(&w4,&w2);
- FP8_YYY_from_FP4(&w8,&w4);
+ FP8_YYY_from_FP4(&w8,&w4);
FP16_YYY_from_FP8(&a,&w8);
- FP16_YYY_copy(&sf,x);
- FP16_YYY_norm(&sf);
- FP16_YYY_copy(&b,&sf);
+ FP16_YYY_copy(&sf,x);
+ FP16_YYY_norm(&sf);
+ FP16_YYY_copy(&b,&sf);
FP16_YYY_xtr_D(&c,&sf);
@@ -455,7 +456,7 @@ void FP16_YYY_xtr_pow2(FP16_YYY *r,FP16_YYY *ck,FP16_YYY *cl,FP16_YYY *ckml,FP16
BIG_XXX_copy(e,a);
BIG_XXX_copy(d,b);
BIG_XXX_norm(d);
- BIG_XXX_norm(e);
+ BIG_XXX_norm(e);
FP16_YYY_copy(&cu,ck);
FP16_YYY_copy(&cv,cl);
FP16_YYY_copy(&cumv,ckml);
diff --git a/version3/c/fp2.c b/version3/c/fp2.c
index 0c9cb63..5e7e8eb 100644
--- a/version3/c/fp2.c
+++ b/version3/c/fp2.c
@@ -279,7 +279,6 @@ void FP2_YYY_rawoutput(FP2_YYY *w)
/* SU= 128 */
void FP2_YYY_inv(FP2_YYY *w,FP2_YYY *x)
{
- BIG_XXX m,b;
FP_YYY w1,w2;
FP2_YYY_norm(x);
@@ -287,7 +286,7 @@ void FP2_YYY_inv(FP2_YYY *w,FP2_YYY *x)
FP_YYY_sqr(&w2,&(x->b));
FP_YYY_add(&w1,&w1,&w2);
- FP_YYY_inv(&w1,&w1);
+ FP_YYY_inv(&w1,&w1);
FP_YYY_mul(&(w->a),&(x->a),&w1);
FP_YYY_neg(&w1,&w1);
@@ -384,7 +383,6 @@ void FP2_YYY_pow(FP2_YYY *r,FP2_YYY* a,BIG_XXX b)
int FP2_YYY_sqrt(FP2_YYY *w,FP2_YYY *u)
{
- BIG_XXX b;
FP_YYY w1,w2;
FP2_YYY_copy(w,u);
if (FP2_YYY_iszilch(w)) return 1;
@@ -416,7 +414,7 @@ int FP2_YYY_sqrt(FP2_YYY *w,FP2_YYY *u)
FP_YYY_copy(&(w->a),&w2);
FP_YYY_add(&w2,&w2,&w2);
- FP_YYY_inv(&w2,&w2);
+ FP_YYY_inv(&w2,&w2);
FP_YYY_mul(&(w->b),&(w->b),&w2);
return 1;
diff --git a/version3/c/fp2.h b/version3/c/fp2.h
index 6767685..8442141 100644
--- a/version3/c/fp2.h
+++ b/version3/c/fp2.h
@@ -18,7 +18,7 @@
*/
/**
- * @file fp2.h
+ * @file fp2_YYY.h
* @author Mike Scott
* @brief FP2 Header File
*
diff --git a/version3/c/fp24.c b/version3/c/fp24.c
index 8711e96..815ce89 100644
--- a/version3/c/fp24.c
+++ b/version3/c/fp24.c
@@ -79,7 +79,7 @@ void FP24_YYY_copy(FP24_YYY *w,FP24_YYY *x)
FP8_YYY_copy(&(w->a),&(x->a));
FP8_YYY_copy(&(w->b),&(x->b));
FP8_YYY_copy(&(w->c),&(x->c));
- w->type=x->type;
+ w->type=x->type;
}
/* FP24 w=1 */
@@ -89,7 +89,7 @@ void FP24_YYY_one(FP24_YYY *w)
FP8_YYY_one(&(w->a));
FP8_YYY_zero(&(w->b));
FP8_YYY_zero(&(w->c));
- w->type=FP_UNITY;
+ w->type=AMCL_FP_UNITY;
}
void FP24_YYY_zero(FP24_YYY *w)
@@ -97,7 +97,7 @@ void FP24_YYY_zero(FP24_YYY *w)
FP8_YYY_zero(&(w->a));
FP8_YYY_zero(&(w->b));
FP8_YYY_zero(&(w->c));
- w->type=FP_ZERO;
+ w->type=AMCL_FP_ZERO;
}
/* return 1 if x==y, else 0 */
@@ -126,7 +126,7 @@ void FP24_YYY_from_FP8(FP24_YYY *w,FP8_YYY *a)
FP8_YYY_copy(&(w->a),a);
FP8_YYY_zero(&(w->b));
FP8_YYY_zero(&(w->c));
- w->type=FP_SPARSER;
+ w->type=AMCL_AMCL_FP_SPARSER;
}
/* Create FP24 from 3 FP8's */
@@ -136,7 +136,7 @@ void FP24_YYY_from_FP8s(FP24_YYY *w,FP8_YYY *a,FP8_YYY *b,FP8_YYY *c)
FP8_YYY_copy(&(w->a),a);
FP8_YYY_copy(&(w->b),b);
FP8_YYY_copy(&(w->c),c);
- w->type=FP_DENSE;
+ w->type=AMCL_FP_DENSE;
}
/* Granger-Scott Unitary Squaring. This does not benefit from lazy reduction */
@@ -176,7 +176,7 @@ void FP24_YYY_usqr(FP24_YYY *w,FP24_YYY *x)
FP8_YYY_add(&(w->c),&(w->c),&(w->c));
FP8_YYY_add(&(w->b),&B,&(w->b));
FP8_YYY_add(&(w->c),&C,&(w->c));
- w->type=FP_DENSE;
+ w->type=AMCL_FP_DENSE;
FP24_YYY_reduce(w); /* reduce here as in pow function repeated squarings would trigger multiple reductions */
}
@@ -188,16 +188,16 @@ void FP24_YYY_sqr(FP24_YYY *w,FP24_YYY *x)
FP8_YYY A,B,C,D;
- if (x->type<=FP_UNITY)
- {
- FP24_YYY_copy(w,x);
- return;
- }
+ if (x->type<=AMCL_FP_UNITY)
+ {
+ FP24_YYY_copy(w,x);
+ return;
+ }
FP8_YYY_sqr(&A,&(x->a));
FP8_YYY_mul(&B,&(x->b),&(x->c));
FP8_YYY_add(&B,&B,&B);
- FP8_YYY_norm(&B);
+ FP8_YYY_norm(&B);
FP8_YYY_sqr(&C,&(x->c));
FP8_YYY_mul(&D,&(x->a),&(x->b));
@@ -205,7 +205,7 @@ void FP24_YYY_sqr(FP24_YYY *w,FP24_YYY *x)
FP8_YYY_add(&(w->c),&(x->a),&(x->c));
FP8_YYY_add(&(w->c),&(x->b),&(w->c));
- FP8_YYY_norm(&(w->c));
+ FP8_YYY_norm(&(w->c));
FP8_YYY_sqr(&(w->c),&(w->c));
@@ -227,10 +227,10 @@ void FP24_YYY_sqr(FP24_YYY *w,FP24_YYY *x)
FP8_YYY_add(&(w->b),&C,&D);
FP8_YYY_add(&(w->c),&(w->c),&A);
- if (x->type==FP_SPARSER)
- w->type=FP_SPARSE;
- else
- w->type=FP_DENSE;
+ if (x->type==AMCL_AMCL_FP_SPARSER)
+ w->type=AMCL_FP_SPARSE;
+ else
+ w->type=AMCL_FP_DENSE;
FP24_YYY_norm(w);
}
@@ -250,15 +250,15 @@ void FP24_YYY_mul(FP24_YYY *w,FP24_YYY *y)
FP8_YYY_add(&t0,&(w->a),&(w->b));
FP8_YYY_add(&t1,&(y->a),&(y->b)); //
- FP8_YYY_norm(&t0);
- FP8_YYY_norm(&t1);
+ FP8_YYY_norm(&t0);
+ FP8_YYY_norm(&t1);
FP8_YYY_mul(&z1,&t0,&t1);
FP8_YYY_add(&t0,&(w->b),&(w->c));
FP8_YYY_add(&t1,&(y->b),&(y->c)); //
- FP8_YYY_norm(&t0);
- FP8_YYY_norm(&t1);
+ FP8_YYY_norm(&t0);
+ FP8_YYY_norm(&t1);
FP8_YYY_mul(&z3,&t0,&t1);
@@ -273,8 +273,8 @@ void FP24_YYY_mul(FP24_YYY *w,FP24_YYY *y)
FP8_YYY_add(&t0,&(w->a),&(w->c));
FP8_YYY_add(&t1,&(y->a),&(y->c));
- FP8_YYY_norm(&t0);
- FP8_YYY_norm(&t1);
+ FP8_YYY_norm(&t0);
+ FP8_YYY_norm(&t1);
FP8_YYY_mul(&t0,&t1,&t0);
FP8_YYY_add(&z2,&z2,&t0);
@@ -286,10 +286,10 @@ void FP24_YYY_mul(FP24_YYY *w,FP24_YYY *y)
FP8_YYY_add(&z3,&z3,&t1);
FP8_YYY_times_i(&t0);
FP8_YYY_add(&(w->b),&(w->b),&t0);
- FP8_YYY_norm(&z3);
+ FP8_YYY_norm(&z3);
FP8_YYY_times_i(&z3);
FP8_YYY_add(&(w->a),&z0,&z3);
- w->type=FP_DENSE;
+ w->type=AMCL_FP_DENSE;
FP24_YYY_norm(w);
}
@@ -298,274 +298,276 @@ void FP24_YYY_mul(FP24_YYY *w,FP24_YYY *y)
/* Usually w is denser than y */
void FP24_YYY_ssmul(FP24_YYY *w,FP24_YYY *y)
{
- FP8_YYY z0,z1,z2,z3,t0,t1;
- if (w->type==FP_UNITY)
- {
- FP24_YYY_copy(w,y);
- return;
- }
- if (y->type==FP_UNITY)
- return;
-
- if (y->type >= FP_SPARSE)
- {
- FP8_YYY_mul(&z0,&(w->a),&(y->a)); // xa.ya always 11x11
+ FP8_YYY z0,z1,z2,z3,t0,t1;
+ if (w->type==AMCL_FP_UNITY)
+ {
+ FP24_YYY_copy(w,y);
+ return;
+ }
+ if (y->type==AMCL_FP_UNITY)
+ return;
+
+ if (y->type >= AMCL_FP_SPARSE)
+ {
+ FP8_YYY_mul(&z0,&(w->a),&(y->a)); // xa.ya always 11x11
#if SEXTIC_TWIST_ZZZ == M_TYPE
- if (y->type==FP_SPARSE || w->type==FP_SPARSE)
- {
- FP4_YYY_mul(&z2.b,&(w->b).b,&(y->b).b);
- FP4_YYY_zero(&z2.a);
- if (y->type!=FP_SPARSE)
- FP4_YYY_mul(&z2.a,&(w->b).b,&(y->b).a);
- if (w->type!=FP_SPARSE)
- FP4_YYY_mul(&z2.a,&(w->b).a,&(y->b).b);
- FP8_YYY_times_i(&z2);
- }
- else
-#endif
- FP8_YYY_mul(&z2,&(w->b),&(y->b)); // xb.yb could be 00x00 or 01x01 or or 10x10 or 11x00 or 11x10 or 11x01 or 11x11
+ if (y->type==AMCL_FP_SPARSE || w->type==AMCL_FP_SPARSE)
+ {
+ FP4_YYY_mul(&z2.b,&(w->b).b,&(y->b).b);
+ FP4_YYY_zero(&z2.a);
+ if (y->type!=AMCL_FP_SPARSE)
+ FP4_YYY_mul(&z2.a,&(w->b).b,&(y->b).a);
+ if (w->type!=AMCL_FP_SPARSE)
+ FP4_YYY_mul(&z2.a,&(w->b).a,&(y->b).b);
+ FP8_YYY_times_i(&z2);
+ }
+ else
+#endif
+ FP8_YYY_mul(&z2,&(w->b),&(y->b)); // xb.yb could be 00x00 or 01x01 or or 10x10 or 11x00 or 11x10 or 11x01 or 11x11
- FP8_YYY_add(&t0,&(w->a),&(w->b)); // (xa+xb)
- FP8_YYY_add(&t1,&(y->a),&(y->b)); // (ya+yb)
+ FP8_YYY_add(&t0,&(w->a),&(w->b)); // (xa+xb)
+ FP8_YYY_add(&t1,&(y->a),&(y->b)); // (ya+yb)
- FP8_YYY_norm(&t0);
- FP8_YYY_norm(&t1);
+ FP8_YYY_norm(&t0);
+ FP8_YYY_norm(&t1);
- FP8_YYY_mul(&z1,&t0,&t1); // (xa+xb)(ya+yb) always 11x11
- FP8_YYY_add(&t0,&(w->b),&(w->c)); // (xb+xc)
- FP8_YYY_add(&t1,&(y->b),&(y->c)); // (yb+yc)
+ FP8_YYY_mul(&z1,&t0,&t1); // (xa+xb)(ya+yb) always 11x11
+ FP8_YYY_add(&t0,&(w->b),&(w->c)); // (xb+xc)
+ FP8_YYY_add(&t1,&(y->b),&(y->c)); // (yb+yc)
- FP8_YYY_norm(&t0);
- FP8_YYY_norm(&t1);
+ FP8_YYY_norm(&t0);
+ FP8_YYY_norm(&t1);
- FP8_YYY_mul(&z3,&t0,&t1); // (xb+xc)(yb+yc) could be anything...
- FP8_YYY_neg(&t0,&z0); // -(xa.ya)
- FP8_YYY_neg(&t1,&z2); // -(xb.yb)
+ FP8_YYY_mul(&z3,&t0,&t1); // (xb+xc)(yb+yc) could be anything...
+ FP8_YYY_neg(&t0,&z0); // -(xa.ya)
+ FP8_YYY_neg(&t1,&z2); // -(xb.yb)
- FP8_YYY_add(&z1,&z1,&t0);
- FP8_YYY_add(&(w->b),&z1,&t1); // /wb = (xa+xb)(ya+yb) -(xa.ya) -(xb.yb) = xa.yb + xb.ya
+ FP8_YYY_add(&z1,&z1,&t0);
+ FP8_YYY_add(&(w->b),&z1,&t1); // /wb = (xa+xb)(ya+yb) -(xa.ya) -(xb.yb) = xa.yb + xb.ya
- FP8_YYY_add(&z3,&z3,&t1); // (xb+xc)(yb+yc) -(xb.yb)
- FP8_YYY_add(&z2,&z2,&t0); // (xb.yb) - (xa.ya)
+ FP8_YYY_add(&z3,&z3,&t1); // (xb+xc)(yb+yc) -(xb.yb)
+ FP8_YYY_add(&z2,&z2,&t0); // (xb.yb) - (xa.ya)
- FP8_YYY_add(&t0,&(w->a),&(w->c)); // (xa+xc)
- FP8_YYY_add(&t1,&(y->a),&(y->c)); // (ya+yc)
+ FP8_YYY_add(&t0,&(w->a),&(w->c)); // (xa+xc)
+ FP8_YYY_add(&t1,&(y->a),&(y->c)); // (ya+yc)
- FP8_YYY_norm(&t0);
- FP8_YYY_norm(&t1);
+ FP8_YYY_norm(&t0);
+ FP8_YYY_norm(&t1);
- FP8_YYY_mul(&t0,&t1,&t0); // (xa+xc)(ya+yc) always 11x11
- FP8_YYY_add(&z2,&z2,&t0); // (xb.yb) - (xa.ya) + (xa+xc)(ya+yc)
+ FP8_YYY_mul(&t0,&t1,&t0); // (xa+xc)(ya+yc) always 11x11
+ FP8_YYY_add(&z2,&z2,&t0); // (xb.yb) - (xa.ya) + (xa+xc)(ya+yc)
#if SEXTIC_TWIST_ZZZ == D_TYPE
- if (y->type==FP_SPARSE || w->type==FP_SPARSE)
- {
- FP4_YYY_mul(&t0.a,&(w->c).a,&(y->c).a);
- FP4_YYY_zero(&t0.b);
- if (y->type!=FP_SPARSE)
- FP4_YYY_mul(&t0.b,&(w->c).a,&(y->c).b);
- if (w->type!=FP_SPARSE)
- FP4_YYY_mul(&t0.b,&(w->c).b,&(y->c).a);
- }
- else
+ if (y->type==AMCL_FP_SPARSE || w->type==AMCL_FP_SPARSE)
+ {
+ FP4_YYY_mul(&t0.a,&(w->c).a,&(y->c).a);
+ FP4_YYY_zero(&t0.b);
+ if (y->type!=AMCL_FP_SPARSE)
+ FP4_YYY_mul(&t0.b,&(w->c).a,&(y->c).b);
+ if (w->type!=AMCL_FP_SPARSE)
+ FP4_YYY_mul(&t0.b,&(w->c).b,&(y->c).a);
+ }
+ else
#endif
- FP8_YYY_mul(&t0,&(w->c),&(y->c)); // (xc.yc) could be anything
-
- FP8_YYY_neg(&t1,&t0); // -(xc.yc)
-
- FP8_YYY_add(&(w->c),&z2,&t1); // wc = (xb.yb) - (xa.ya) + (xa+xc)(ya+yc) - (xc.yc) = xb.yb + xc.ya + xa.yc
- FP8_YYY_add(&z3,&z3,&t1); // (xb+xc)(yb+yc) -(xb.yb) - (xc.yc) = xb.yc + xc.yb
- FP8_YYY_times_i(&t0); // i.(xc.yc)
- FP8_YYY_add(&(w->b),&(w->b),&t0); // wb = (xa+xb)(ya+yb) -(xa.ya) -(xb.yb) +i(xc.yc)
- FP8_YYY_norm(&z3);
- FP8_YYY_times_i(&z3); // i[(xb+xc)(yb+yc) -(xb.yb) - (xc.yc)] = i(xb.yc + xc.yb)
- FP8_YYY_add(&(w->a),&z0,&z3); // wa = xa.ya + i(xb.yc + xc.yb)
- } else {
- if (w->type==FP_SPARSER)
- {
- FP24_YYY_smul(w,y);
- return;
- }
-// dense by sparser - 13m
+ FP8_YYY_mul(&t0,&(w->c),&(y->c)); // (xc.yc) could be anything
+
+ FP8_YYY_neg(&t1,&t0); // -(xc.yc)
+
+ FP8_YYY_add(&(w->c),&z2,&t1); // wc = (xb.yb) - (xa.ya) + (xa+xc)(ya+yc) - (xc.yc) = xb.yb + xc.ya + xa.yc
+ FP8_YYY_add(&z3,&z3,&t1); // (xb+xc)(yb+yc) -(xb.yb) - (xc.yc) = xb.yc + xc.yb
+ FP8_YYY_times_i(&t0); // i.(xc.yc)
+ FP8_YYY_add(&(w->b),&(w->b),&t0); // wb = (xa+xb)(ya+yb) -(xa.ya) -(xb.yb) +i(xc.yc)
+ FP8_YYY_norm(&z3);
+ FP8_YYY_times_i(&z3); // i[(xb+xc)(yb+yc) -(xb.yb) - (xc.yc)] = i(xb.yc + xc.yb)
+ FP8_YYY_add(&(w->a),&z0,&z3); // wa = xa.ya + i(xb.yc + xc.yb)
+ }
+ else
+ {
+ if (w->type==AMCL_AMCL_FP_SPARSER)
+ {
+ FP24_YYY_smul(w,y);
+ return;
+ }
+// dense by sparser - 13m
#if SEXTIC_TWIST_ZZZ == D_TYPE
- FP8_YYY_copy(&z3,&(w->b));
- FP8_YYY_mul(&z0,&(w->a),&(y->a));
+ FP8_YYY_copy(&z3,&(w->b));
+ FP8_YYY_mul(&z0,&(w->a),&(y->a));
- FP8_YYY_pmul(&z2,&(w->b),&(y->b).a);
- FP8_YYY_add(&(w->b),&(w->a),&(w->b));
- FP8_YYY_copy(&t1,&(y->a));
- FP4_YYY_add(&t1.a,&t1.a,&(y->b).a);
+ FP8_YYY_pmul(&z2,&(w->b),&(y->b).a);
+ FP8_YYY_add(&(w->b),&(w->a),&(w->b));
+ FP8_YYY_copy(&t1,&(y->a));
+ FP4_YYY_add(&t1.a,&t1.a,&(y->b).a);
- FP8_YYY_norm(&t1);
- FP8_YYY_norm(&(w->b));
+ FP8_YYY_norm(&t1);
+ FP8_YYY_norm(&(w->b));
- FP8_YYY_mul(&(w->b),&(w->b),&t1);
- FP8_YYY_add(&z3,&z3,&(w->c));
- FP8_YYY_norm(&z3);
- FP8_YYY_pmul(&z3,&z3,&(y->b).a);
- FP8_YYY_neg(&t0,&z0);
- FP8_YYY_neg(&t1,&z2);
+ FP8_YYY_mul(&(w->b),&(w->b),&t1);
+ FP8_YYY_add(&z3,&z3,&(w->c));
+ FP8_YYY_norm(&z3);
+ FP8_YYY_pmul(&z3,&z3,&(y->b).a);
+ FP8_YYY_neg(&t0,&z0);
+ FP8_YYY_neg(&t1,&z2);
- FP8_YYY_add(&(w->b),&(w->b),&t0); // z1=z1-z0
- FP8_YYY_add(&(w->b),&(w->b),&t1); // z1=z1-z2
+ FP8_YYY_add(&(w->b),&(w->b),&t0); // z1=z1-z0
+ FP8_YYY_add(&(w->b),&(w->b),&t1); // z1=z1-z2
- FP8_YYY_add(&z3,&z3,&t1); // z3=z3-z2
- FP8_YYY_add(&z2,&z2,&t0); // z2=z2-z0
+ FP8_YYY_add(&z3,&z3,&t1); // z3=z3-z2
+ FP8_YYY_add(&z2,&z2,&t0); // z2=z2-z0
- FP8_YYY_add(&t0,&(w->a),&(w->c));
- FP8_YYY_norm(&t0);
- FP8_YYY_norm(&z3);
+ FP8_YYY_add(&t0,&(w->a),&(w->c));
+ FP8_YYY_norm(&t0);
+ FP8_YYY_norm(&z3);
- FP8_YYY_mul(&t0,&(y->a),&t0);
- FP8_YYY_add(&(w->c),&z2,&t0);
+ FP8_YYY_mul(&t0,&(y->a),&t0);
+ FP8_YYY_add(&(w->c),&z2,&t0);
- FP8_YYY_times_i(&z3);
- FP8_YYY_add(&(w->a),&z0,&z3);
+ FP8_YYY_times_i(&z3);
+ FP8_YYY_add(&(w->a),&z0,&z3);
#endif
#if SEXTIC_TWIST_ZZZ == M_TYPE
- FP8_YYY_mul(&z0,&(w->a),&(y->a));
- FP8_YYY_add(&t0,&(w->a),&(w->b));
- FP8_YYY_norm(&t0);
+ FP8_YYY_mul(&z0,&(w->a),&(y->a));
+ FP8_YYY_add(&t0,&(w->a),&(w->b));
+ FP8_YYY_norm(&t0);
- FP8_YYY_mul(&z1,&t0,&(y->a));
- FP8_YYY_add(&t0,&(w->b),&(w->c));
- FP8_YYY_norm(&t0);
+ FP8_YYY_mul(&z1,&t0,&(y->a));
+ FP8_YYY_add(&t0,&(w->b),&(w->c));
+ FP8_YYY_norm(&t0);
- FP8_YYY_pmul(&z3,&t0,&(y->c).b);
- FP8_YYY_times_i(&z3);
+ FP8_YYY_pmul(&z3,&t0,&(y->c).b);
+ FP8_YYY_times_i(&z3);
- FP8_YYY_neg(&t0,&z0);
- FP8_YYY_add(&z1,&z1,&t0); // z1=z1-z0
+ FP8_YYY_neg(&t0,&z0);
+ FP8_YYY_add(&z1,&z1,&t0); // z1=z1-z0
- FP8_YYY_copy(&(w->b),&z1);
- FP8_YYY_copy(&z2,&t0);
+ FP8_YYY_copy(&(w->b),&z1);
+ FP8_YYY_copy(&z2,&t0);
- FP8_YYY_add(&t0,&(w->a),&(w->c));
- FP8_YYY_add(&t1,&(y->a),&(y->c));
+ FP8_YYY_add(&t0,&(w->a),&(w->c));
+ FP8_YYY_add(&t1,&(y->a),&(y->c));
- FP8_YYY_norm(&t0);
- FP8_YYY_norm(&t1);
+ FP8_YYY_norm(&t0);
+ FP8_YYY_norm(&t1);
- FP8_YYY_mul(&t0,&t1,&t0);
- FP8_YYY_add(&z2,&z2,&t0);
+ FP8_YYY_mul(&t0,&t1,&t0);
+ FP8_YYY_add(&z2,&z2,&t0);
- FP8_YYY_pmul(&t0,&(w->c),&(y->c).b);
- FP8_YYY_times_i(&t0);
- FP8_YYY_neg(&t1,&t0);
- FP8_YYY_times_i(&t0);
+ FP8_YYY_pmul(&t0,&(w->c),&(y->c).b);
+ FP8_YYY_times_i(&t0);
+ FP8_YYY_neg(&t1,&t0);
+ FP8_YYY_times_i(&t0);
- FP8_YYY_add(&(w->c),&z2,&t1);
- FP8_YYY_add(&z3,&z3,&t1);
+ FP8_YYY_add(&(w->c),&z2,&t1);
+ FP8_YYY_add(&z3,&z3,&t1);
- FP8_YYY_add(&(w->b),&(w->b),&t0);
- FP8_YYY_norm(&z3);
- FP8_YYY_times_i(&z3);
- FP8_YYY_add(&(w->a),&z0,&z3);
+ FP8_YYY_add(&(w->b),&(w->b),&t0);
+ FP8_YYY_norm(&z3);
+ FP8_YYY_times_i(&z3);
+ FP8_YYY_add(&(w->a),&z0,&z3);
#endif
- }
- w->type=FP_DENSE;
+ }
+ w->type=AMCL_FP_DENSE;
FP24_YYY_norm(w);
}
/* FP24 multiplication w=w*y */
/* catering for special case that arises from special form of ATE pairing line function */
-/* w and y are both sparser line functions - cost = 6m */
+/* w and y are both sparser line functions - cost = 6m */
void FP24_YYY_smul(FP24_YYY *w,FP24_YYY *y)
{
- FP4_YYY w1,w2,w3,ta,tb,tc,td,te,t;
+ FP4_YYY w1,w2,w3,ta,tb,tc,td,te,t;
#if SEXTIC_TWIST_ZZZ == D_TYPE
- FP4_YYY_mul(&w1,&(w->a).a,&(y->a).a); // A1.A2
- FP4_YYY_mul(&w2,&(w->a).b,&(y->a).b); // B1.B2
- FP4_YYY_mul(&w3,&(w->b).a,&(y->b).a); // C1.C2
-
- FP4_YYY_add(&ta,&(w->a).a,&(w->a).b); // A1+B1
- FP4_YYY_add(&tb,&(y->a).a,&(y->a).b); // A2+B2
- FP4_YYY_norm(&ta);
- FP4_YYY_norm(&tb);
- FP4_YYY_mul(&tc,&ta,&tb); // (A1+B1)(A2+B2)
- FP4_YYY_add(&t,&w1,&w2);
- FP4_YYY_neg(&t,&t);
- FP4_YYY_add(&tc,&tc,&t); // (A1+B1)(A2+B2)-A1.A2-B1*B2 = (A1.B2+A2.B1)
-
- FP4_YYY_add(&ta,&(w->a).a,&(w->b).a); // A1+C1
- FP4_YYY_add(&tb,&(y->a).a,&(y->b).a); // A2+C2
- FP4_YYY_norm(&ta);
- FP4_YYY_norm(&tb);
- FP4_YYY_mul(&td,&ta,&tb); // (A1+C1)(A2+C2)
- FP4_YYY_add(&t,&w1,&w3);
- FP4_YYY_neg(&t,&t);
- FP4_YYY_add(&td,&td,&t); // (A1+C1)(A2+C2)-A1.A2-C1*C2 = (A1.C2+A2.C1)
-
- FP4_YYY_add(&ta,&(w->a).b,&(w->b).a); // B1+C1
- FP4_YYY_add(&tb,&(y->a).b,&(y->b).a); // B2+C2
- FP4_YYY_norm(&ta);
- FP4_YYY_norm(&tb);
- FP4_YYY_mul(&te,&ta,&tb); // (B1+C1)(B2+C2)
- FP4_YYY_add(&t,&w2,&w3);
- FP4_YYY_neg(&t,&t);
- FP4_YYY_add(&te,&te,&t); // (B1+C1)(B2+C2)-B1.B2-C1*C2 = (B1.C2+B2.C1)
-
- FP4_YYY_times_i(&w2);
- FP4_YYY_add(&w1,&w1,&w2);
- FP8_YYY_from_FP4s(&(w->a),&w1,&tc);
- FP8_YYY_from_FP4s(&(w->b),&td,&te); // only norm these 2
- FP8_YYY_from_FP4(&(w->c),&w3);
-
- FP8_YYY_norm(&(w->a));
- FP8_YYY_norm(&(w->b));
+ FP4_YYY_mul(&w1,&(w->a).a,&(y->a).a); // A1.A2
+ FP4_YYY_mul(&w2,&(w->a).b,&(y->a).b); // B1.B2
+ FP4_YYY_mul(&w3,&(w->b).a,&(y->b).a); // C1.C2
+
+ FP4_YYY_add(&ta,&(w->a).a,&(w->a).b); // A1+B1
+ FP4_YYY_add(&tb,&(y->a).a,&(y->a).b); // A2+B2
+ FP4_YYY_norm(&ta);
+ FP4_YYY_norm(&tb);
+ FP4_YYY_mul(&tc,&ta,&tb); // (A1+B1)(A2+B2)
+ FP4_YYY_add(&t,&w1,&w2);
+ FP4_YYY_neg(&t,&t);
+ FP4_YYY_add(&tc,&tc,&t); // (A1+B1)(A2+B2)-A1.A2-B1*B2 = (A1.B2+A2.B1)
+
+ FP4_YYY_add(&ta,&(w->a).a,&(w->b).a); // A1+C1
+ FP4_YYY_add(&tb,&(y->a).a,&(y->b).a); // A2+C2
+ FP4_YYY_norm(&ta);
+ FP4_YYY_norm(&tb);
+ FP4_YYY_mul(&td,&ta,&tb); // (A1+C1)(A2+C2)
+ FP4_YYY_add(&t,&w1,&w3);
+ FP4_YYY_neg(&t,&t);
+ FP4_YYY_add(&td,&td,&t); // (A1+C1)(A2+C2)-A1.A2-C1*C2 = (A1.C2+A2.C1)
+
+ FP4_YYY_add(&ta,&(w->a).b,&(w->b).a); // B1+C1
+ FP4_YYY_add(&tb,&(y->a).b,&(y->b).a); // B2+C2
+ FP4_YYY_norm(&ta);
+ FP4_YYY_norm(&tb);
+ FP4_YYY_mul(&te,&ta,&tb); // (B1+C1)(B2+C2)
+ FP4_YYY_add(&t,&w2,&w3);
+ FP4_YYY_neg(&t,&t);
+ FP4_YYY_add(&te,&te,&t); // (B1+C1)(B2+C2)-B1.B2-C1*C2 = (B1.C2+B2.C1)
+
+ FP4_YYY_times_i(&w2);
+ FP4_YYY_add(&w1,&w1,&w2);
+ FP8_YYY_from_FP4s(&(w->a),&w1,&tc);
+ FP8_YYY_from_FP4s(&(w->b),&td,&te); // only norm these 2
+ FP8_YYY_from_FP4(&(w->c),&w3);
+
+ FP8_YYY_norm(&(w->a));
+ FP8_YYY_norm(&(w->b));
#endif
#if SEXTIC_TWIST_ZZZ == M_TYPE
- FP4_YYY_mul(&w1,&(w->a).a,&(y->a).a); // A1.A2
- FP4_YYY_mul(&w2,&(w->a).b,&(y->a).b); // B1.B2
- FP4_YYY_mul(&w3,&(w->c).b,&(y->c).b); // F1.F2
-
- FP4_YYY_add(&ta,&(w->a).a,&(w->a).b); // A1+B1
- FP4_YYY_add(&tb,&(y->a).a,&(y->a).b); // A2+B2
- FP4_YYY_norm(&ta);
- FP4_YYY_norm(&tb);
- FP4_YYY_mul(&tc,&ta,&tb); // (A1+B1)(A2+B2)
- FP4_YYY_add(&t,&w1,&w2);
- FP4_YYY_neg(&t,&t);
- FP4_YYY_add(&tc,&tc,&t); // (A1+B1)(A2+B2)-A1.A2-B1*B2 = (A1.B2+A2.B1)
-
- FP4_YYY_add(&ta,&(w->a).a,&(w->c).b); // A1+F1
- FP4_YYY_add(&tb,&(y->a).a,&(y->c).b); // A2+F2
- FP4_YYY_norm(&ta);
- FP4_YYY_norm(&tb);
- FP4_YYY_mul(&td,&ta,&tb); // (A1+F1)(A2+F2)
- FP4_YYY_add(&t,&w1,&w3);
- FP4_YYY_neg(&t,&t);
- FP4_YYY_add(&td,&td,&t); // (A1+F1)(A2+F2)-A1.A2-F1*F2 = (A1.F2+A2.F1)
-
- FP4_YYY_add(&ta,&(w->a).b,&(w->c).b); // B1+F1
- FP4_YYY_add(&tb,&(y->a).b,&(y->c).b); // B2+F2
- FP4_YYY_norm(&ta);
- FP4_YYY_norm(&tb);
- FP4_YYY_mul(&te,&ta,&tb); // (B1+F1)(B2+F2)
- FP4_YYY_add(&t,&w2,&w3);
- FP4_YYY_neg(&t,&t);
- FP4_YYY_add(&te,&te,&t); // (B1+F1)(B2+F2)-B1.B2-F1*F2 = (B1.F2+B2.F1)
-
- FP4_YYY_times_i(&w2);
- FP4_YYY_add(&w1,&w1,&w2);
- FP8_YYY_from_FP4s(&(w->a),&w1,&tc);
-
- FP4_YYY_times_i(&w3);
- FP4_YYY_norm(&w3);
- FP8_YYY_from_FP4H(&(w->b),&w3);
-
- FP4_YYY_norm(&te);
- FP4_YYY_times_i(&te);
- FP8_YYY_from_FP4s(&(w->c),&te,&td);
-
- FP8_YYY_norm(&(w->a));
- FP8_YYY_norm(&(w->c));
+ FP4_YYY_mul(&w1,&(w->a).a,&(y->a).a); // A1.A2
+ FP4_YYY_mul(&w2,&(w->a).b,&(y->a).b); // B1.B2
+ FP4_YYY_mul(&w3,&(w->c).b,&(y->c).b); // F1.F2
+
+ FP4_YYY_add(&ta,&(w->a).a,&(w->a).b); // A1+B1
+ FP4_YYY_add(&tb,&(y->a).a,&(y->a).b); // A2+B2
+ FP4_YYY_norm(&ta);
+ FP4_YYY_norm(&tb);
+ FP4_YYY_mul(&tc,&ta,&tb); // (A1+B1)(A2+B2)
+ FP4_YYY_add(&t,&w1,&w2);
+ FP4_YYY_neg(&t,&t);
+ FP4_YYY_add(&tc,&tc,&t); // (A1+B1)(A2+B2)-A1.A2-B1*B2 = (A1.B2+A2.B1)
+
+ FP4_YYY_add(&ta,&(w->a).a,&(w->c).b); // A1+F1
+ FP4_YYY_add(&tb,&(y->a).a,&(y->c).b); // A2+F2
+ FP4_YYY_norm(&ta);
+ FP4_YYY_norm(&tb);
+ FP4_YYY_mul(&td,&ta,&tb); // (A1+F1)(A2+F2)
+ FP4_YYY_add(&t,&w1,&w3);
+ FP4_YYY_neg(&t,&t);
+ FP4_YYY_add(&td,&td,&t); // (A1+F1)(A2+F2)-A1.A2-F1*F2 = (A1.F2+A2.F1)
+
+ FP4_YYY_add(&ta,&(w->a).b,&(w->c).b); // B1+F1
+ FP4_YYY_add(&tb,&(y->a).b,&(y->c).b); // B2+F2
+ FP4_YYY_norm(&ta);
+ FP4_YYY_norm(&tb);
+ FP4_YYY_mul(&te,&ta,&tb); // (B1+F1)(B2+F2)
+ FP4_YYY_add(&t,&w2,&w3);
+ FP4_YYY_neg(&t,&t);
+ FP4_YYY_add(&te,&te,&t); // (B1+F1)(B2+F2)-B1.B2-F1*F2 = (B1.F2+B2.F1)
+
+ FP4_YYY_times_i(&w2);
+ FP4_YYY_add(&w1,&w1,&w2);
+ FP8_YYY_from_FP4s(&(w->a),&w1,&tc);
+
+ FP4_YYY_times_i(&w3);
+ FP4_YYY_norm(&w3);
+ FP8_YYY_from_FP4H(&(w->b),&w3);
+
+ FP4_YYY_norm(&te);
+ FP4_YYY_times_i(&te);
+ FP8_YYY_from_FP4s(&(w->c),&te,&td);
+
+ FP8_YYY_norm(&(w->a));
+ FP8_YYY_norm(&(w->c));
#endif
- w->type=FP_SPARSE;
+ w->type=AMCL_FP_SPARSE;
}
/* Set w=1/x */
@@ -578,18 +580,18 @@ void FP24_YYY_inv(FP24_YYY *w,FP24_YYY *x)
FP8_YYY_mul(&f1,&(x->b),&(x->c));
FP8_YYY_times_i(&f1);
FP8_YYY_sub(&f0,&f0,&f1); /* y.a */
- FP8_YYY_norm(&f0);
+ FP8_YYY_norm(&f0);
FP8_YYY_sqr(&f1,&(x->c));
FP8_YYY_times_i(&f1);
FP8_YYY_mul(&f2,&(x->a),&(x->b));
FP8_YYY_sub(&f1,&f1,&f2); /* y.b */
- FP8_YYY_norm(&f1);
+ FP8_YYY_norm(&f1);
FP8_YYY_sqr(&f2,&(x->b));
FP8_YYY_mul(&f3,&(x->a),&(x->c));
FP8_YYY_sub(&f2,&f2,&f3); /* y.c */
- FP8_YYY_norm(&f2);
+ FP8_YYY_norm(&f2);
FP8_YYY_mul(&f3,&(x->b),&f2);
FP8_YYY_times_i(&f3);
@@ -599,13 +601,13 @@ void FP24_YYY_inv(FP24_YYY *w,FP24_YYY *x)
FP8_YYY_times_i(&(w->c));
FP8_YYY_add(&f3,&(w->c),&f3);
- FP8_YYY_norm(&f3);
-
+ FP8_YYY_norm(&f3);
+
FP8_YYY_inv(&f3,&f3);
FP8_YYY_mul(&(w->a),&f0,&f3);
FP8_YYY_mul(&(w->b),&f1,&f3);
FP8_YYY_mul(&(w->c),&f2,&f3);
- w->type=FP_DENSE;
+ w->type=AMCL_FP_DENSE;
}
/* constant time powering by small integer of max length bts */
@@ -632,9 +634,9 @@ void FP24_YYY_pinpow(FP24_YYY *r,int e,int bts)
void FP24_YYY_compow(FP8_YYY *c,FP24_YYY *x,BIG_XXX e,BIG_XXX r)
{
FP24_YYY g1,g2;
- FP8_YYY cp,cpm1,cpm2;
+ FP8_YYY cp,cpm1,cpm2;
FP2_YYY f;
- BIG_XXX q,a,b,m;
+ BIG_XXX q,a,b,m;
BIG_XXX_rcopy(a,Fra_YYY);
BIG_XXX_rcopy(b,Frb_YYY);
@@ -643,7 +645,7 @@ void FP24_YYY_compow(FP8_YYY *c,FP24_YYY *x,BIG_XXX e,BIG_XXX r)
BIG_XXX_rcopy(q,Modulus_YYY);
FP24_YYY_copy(&g1,x);
- FP24_YYY_copy(&g2,x);
+ FP24_YYY_copy(&g2,x);
BIG_XXX_copy(m,q);
BIG_XXX_mod(m,r);
@@ -656,11 +658,11 @@ void FP24_YYY_compow(FP8_YYY *c,FP24_YYY *x,BIG_XXX e,BIG_XXX r)
FP24_YYY_trace(c,&g1);
- if (BIG_XXX_iszilch(b))
- {
- FP8_YYY_xtr_pow(c,c,e);
- return;
- }
+ if (BIG_XXX_iszilch(b))
+ {
+ FP8_YYY_xtr_pow(c,c,e);
+ return;
+ }
FP24_YYY_frob(&g2,&f,1);
FP24_YYY_trace(&cp,&g2);
@@ -682,33 +684,33 @@ void FP24_YYY_pow(FP24_YYY *r,FP24_YYY *a,BIG_XXX b)
FP24_YYY w,sf;
BIG_XXX b1,b3;
int i,nb,bt;
- BIG_XXX_copy(b1,b);
+ BIG_XXX_copy(b1,b);
BIG_XXX_norm(b1);
- BIG_XXX_pmul(b3,b1,3);
- BIG_XXX_norm(b3);
+ BIG_XXX_pmul(b3,b1,3);
+ BIG_XXX_norm(b3);
- FP24_YYY_copy(&sf,a);
- FP24_YYY_norm(&sf);
+ FP24_YYY_copy(&sf,a);
+ FP24_YYY_norm(&sf);
FP24_YYY_copy(&w,&sf);
- nb=BIG_XXX_nbits(b3);
- for (i=nb-2;i>=1;i--)
- {
- FP24_YYY_usqr(&w,&w);
- bt=BIG_XXX_bit(b3,i)-BIG_XXX_bit(b1,i);
- if (bt==1)
- FP24_YYY_mul(&w,&sf);
- if (bt==-1)
- {
- FP24_YYY_conj(&sf,&sf);
- FP24_YYY_mul(&w,&sf);
- FP24_YYY_conj(&sf,&sf);
- }
- }
-
- FP24_YYY_copy(r,&w);
- FP24_YYY_reduce(r);
+ nb=BIG_XXX_nbits(b3);
+ for (i=nb-2; i>=1; i--)
+ {
+ FP24_YYY_usqr(&w,&w);
+ bt=BIG_XXX_bit(b3,i)-BIG_XXX_bit(b1,i);
+ if (bt==1)
+ FP24_YYY_mul(&w,&sf);
+ if (bt==-1)
+ {
+ FP24_YYY_conj(&sf,&sf);
+ FP24_YYY_mul(&w,&sf);
+ FP24_YYY_conj(&sf,&sf);
+ }
+ }
+
+ FP24_YYY_copy(r,&w);
+ FP24_YYY_reduce(r);
}
/* p=q0^u0.q1^u1.q2^u2.q3^u3... */
@@ -719,14 +721,14 @@ void FP24_YYY_pow(FP24_YYY *r,FP24_YYY *a,BIG_XXX b)
void FP24_YYY_pow8(FP24_YYY *p,FP24_YYY *q,BIG_XXX u[8])
{
int i,j,k,nb,pb1,pb2,bt;
- FP24_YYY g1[8],g2[8],r;
- BIG_XXX t[8],mt;
+ FP24_YYY g1[8],g2[8],r;
+ BIG_XXX t[8],mt;
sign8 w1[NLEN_XXX*BASEBITS_XXX+1];
sign8 s1[NLEN_XXX*BASEBITS_XXX+1];
sign8 w2[NLEN_XXX*BASEBITS_XXX+1];
sign8 s2[NLEN_XXX*BASEBITS_XXX+1];
FP_YYY fx,fy;
- FP2_YYY X;
+ FP2_YYY X;
FP_YYY_rcopy(&fx,Fra_YYY);
FP_YYY_rcopy(&fy,Frb_YYY);
@@ -738,36 +740,36 @@ void FP24_YYY_pow8(FP24_YYY *p,FP24_YYY *q,BIG_XXX u[8])
// Precomputed table
FP24_YYY_copy(&g1[0],&q[0]); // q[0]
FP24_YYY_copy(&g1[1],&g1[0]);
- FP24_YYY_mul(&g1[1],&q[1]); // q[0].q[1]
+ FP24_YYY_mul(&g1[1],&q[1]); // q[0].q[1]
FP24_YYY_copy(&g1[2],&g1[0]);
- FP24_YYY_mul(&g1[2],&q[2]); // q[0].q[2]
- FP24_YYY_copy(&g1[3],&g1[1]);
- FP24_YYY_mul(&g1[3],&q[2]); // q[0].q[1].q[2]
- FP24_YYY_copy(&g1[4],&g1[0]);
- FP24_YYY_mul(&g1[4],&q[3]); // q[0].q[3]
- FP24_YYY_copy(&g1[5],&g1[1]);
- FP24_YYY_mul(&g1[5],&q[3]); // q[0].q[1].q[3]
- FP24_YYY_copy(&g1[6],&g1[2]);
- FP24_YYY_mul(&g1[6],&q[3]); // q[0].q[2].q[3]
- FP24_YYY_copy(&g1[7],&g1[3]);
- FP24_YYY_mul(&g1[7],&q[3]); // q[0].q[1].q[2].q[3]
+ FP24_YYY_mul(&g1[2],&q[2]); // q[0].q[2]
+ FP24_YYY_copy(&g1[3],&g1[1]);
+ FP24_YYY_mul(&g1[3],&q[2]); // q[0].q[1].q[2]
+ FP24_YYY_copy(&g1[4],&g1[0]);
+ FP24_YYY_mul(&g1[4],&q[3]); // q[0].q[3]
+ FP24_YYY_copy(&g1[5],&g1[1]);
+ FP24_YYY_mul(&g1[5],&q[3]); // q[0].q[1].q[3]
+ FP24_YYY_copy(&g1[6],&g1[2]);
+ FP24_YYY_mul(&g1[6],&q[3]); // q[0].q[2].q[3]
+ FP24_YYY_copy(&g1[7],&g1[3]);
+ FP24_YYY_mul(&g1[7],&q[3]); // q[0].q[1].q[2].q[3]
// Use Frobenius
- for (i=0;i<8;i++)
- {
- FP24_YYY_copy(&g2[i],&g1[i]);
- FP24_YYY_frob(&g2[i],&X,4);
- }
+ for (i=0; i<8; i++)
+ {
+ FP24_YYY_copy(&g2[i],&g1[i]);
+ FP24_YYY_frob(&g2[i],&X,4);
+ }
// Make it odd
- pb1=1-BIG_XXX_parity(t[0]);
- BIG_XXX_inc(t[0],pb1);
- BIG_XXX_norm(t[0]);
+ pb1=1-BIG_XXX_parity(t[0]);
+ BIG_XXX_inc(t[0],pb1);
+ BIG_XXX_norm(t[0]);
- pb2=1-BIG_XXX_parity(t[4]);
- BIG_XXX_inc(t[4],pb2);
- BIG_XXX_norm(t[4]);
+ pb2=1-BIG_XXX_parity(t[4]);
+ BIG_XXX_inc(t[4],pb2);
+ BIG_XXX_norm(t[4]);
// Number of bits
BIG_XXX_zero(mt);
@@ -777,54 +779,54 @@ void FP24_YYY_pow8(FP24_YYY *p,FP24_YYY *q,BIG_XXX u[8])
}
nb=1+BIG_XXX_nbits(mt);
-// Sign pivot
- s1[nb-1]=1;
- s2[nb-1]=1;
- for (i=0;i<nb-1;i++)
- {
+// Sign pivot
+ s1[nb-1]=1;
+ s2[nb-1]=1;
+ for (i=0; i<nb-1; i++)
+ {
BIG_XXX_fshr(t[0],1);
- s1[i]=2*BIG_XXX_parity(t[0])-1;
+ s1[i]=2*BIG_XXX_parity(t[0])-1;
BIG_XXX_fshr(t[4],1);
- s2[i]=2*BIG_XXX_parity(t[4])-1;
- }
+ s2[i]=2*BIG_XXX_parity(t[4])-1;
+ }
// Recoded exponents
for (i=0; i<nb; i++)
{
- w1[i]=0;
- k=1;
- for (j=1; j<4; j++)
- {
- bt=s1[i]*BIG_XXX_parity(t[j]);
- BIG_XXX_fshr(t[j],1);
-
- BIG_XXX_dec(t[j],(bt>>1));
- BIG_XXX_norm(t[j]);
- w1[i]+=bt*k;
- k*=2;
+ w1[i]=0;
+ k=1;
+ for (j=1; j<4; j++)
+ {
+ bt=s1[i]*BIG_XXX_parity(t[j]);
+ BIG_XXX_fshr(t[j],1);
+
+ BIG_XXX_dec(t[j],(bt>>1));
+ BIG_XXX_norm(t[j]);
+ w1[i]+=bt*k;
+ k*=2;
}
- w2[i]=0;
- k=1;
- for (j=5; j<8; j++)
- {
- bt=s2[i]*BIG_XXX_parity(t[j]);
- BIG_XXX_fshr(t[j],1);
-
- BIG_XXX_dec(t[j],(bt>>1));
- BIG_XXX_norm(t[j]);
- w2[i]+=bt*k;
- k*=2;
+ w2[i]=0;
+ k=1;
+ for (j=5; j<8; j++)
+ {
+ bt=s2[i]*BIG_XXX_parity(t[j]);
+ BIG_XXX_fshr(t[j],1);
+
+ BIG_XXX_dec(t[j],(bt>>1));
+ BIG_XXX_norm(t[j]);
+ w2[i]+=bt*k;
+ k*=2;
}
- }
+ }
// Main loop
- FP24_YYY_select(p,g1,2*w1[nb-1]+1);
- FP24_YYY_select(&r,g2,2*w2[nb-1]+1);
- FP24_YYY_mul(p,&r);
+ FP24_YYY_select(p,g1,2*w1[nb-1]+1);
+ FP24_YYY_select(&r,g2,2*w2[nb-1]+1);
+ FP24_YYY_mul(p,&r);
for (i=nb-2; i>=0; i--)
{
- FP24_YYY_usqr(p,p);
+ FP24_YYY_usqr(p,p);
FP24_YYY_select(&r,g1,2*w1[i]+s1[i]);
FP24_YYY_mul(p,&r);
FP24_YYY_select(&r,g2,2*w2[i]+s2[i]);
@@ -832,39 +834,41 @@ void FP24_YYY_pow8(FP24_YYY *p,FP24_YYY *q,BIG_XXX u[8])
}
// apply correction
- FP24_YYY_conj(&r,&q[0]);
- FP24_YYY_mul(&r,p);
- FP24_YYY_cmove(p,&r,pb1);
- FP24_YYY_conj(&r,&q[4]);
- FP24_YYY_mul(&r,p);
- FP24_YYY_cmove(p,&r,pb2);
-
- FP24_YYY_reduce(p);
+ FP24_YYY_conj(&r,&q[0]);
+ FP24_YYY_mul(&r,p);
+ FP24_YYY_cmove(p,&r,pb1);
+ FP24_YYY_conj(&r,&q[4]);
+ FP24_YYY_mul(&r,p);
+ FP24_YYY_cmove(p,&r,pb2);
+
+ FP24_YYY_reduce(p);
}
/* Set w=w^p using Frobenius */
/* SU= 160 */
void FP24_YYY_frob(FP24_YYY *w,FP2_YYY *f,int n)
{
- int i;
- FP4_YYY X2,X4;
+ int i;
FP2_YYY f3,f2; // f=(1+i)^(p-7)/12
- FP2_YYY_sqr(&f2,f); //
+ FP2_YYY_sqr(&f2,f); //
FP2_YYY_mul(&f3,&f2,f); // f3=f^3=(1+i)^(p-7)/4
- FP2_YYY_mul_ip(&f3); // f3 = (1+i).f3 = (1+i)^(p-3)/4
- FP2_YYY_norm(&f3);
-
- for (i=0;i<n;i++)
- {
- FP8_YYY_frob(&(w->a),&f3); // a=a^p
- FP8_YYY_frob(&(w->b),&f3); // b=b^p
- FP8_YYY_frob(&(w->c),&f3); // c=c^p
-
- FP8_YYY_qmul(&(w->b),&(w->b),f); FP8_YYY_times_i2(&(w->b));
- FP8_YYY_qmul(&(w->c),&(w->c),&f2); FP8_YYY_times_i2(&(w->c)); FP8_YYY_times_i2(&(w->c));
- }
- w->type=FP_DENSE;
+ FP2_YYY_mul_ip(&f3); // f3 = (1+i).f3 = (1+i)^(p-3)/4
+ FP2_YYY_norm(&f3);
+
+ for (i=0; i<n; i++)
+ {
+ FP8_YYY_frob(&(w->a),&f3); // a=a^p
+ FP8_YYY_frob(&(w->b),&f3); // b=b^p
+ FP8_YYY_frob(&(w->c),&f3); // c=c^p
+
+ FP8_YYY_qmul(&(w->b),&(w->b),f);
+ FP8_YYY_times_i2(&(w->b));
+ FP8_YYY_qmul(&(w->c),&(w->c),&f2);
+ FP8_YYY_times_i2(&(w->c));
+ FP8_YYY_times_i2(&(w->c));
+ }
+ w->type=AMCL_FP_DENSE;
}
/* SU= 8 */
@@ -969,7 +973,7 @@ void FP24_YYY_toOctet(octet *W,FP24_YYY *g)
/* Restore g from octet string w */
void FP24_YYY_fromOctet(FP24_YYY *g,octet *W)
{
- BIG_XXX b;
+ BIG_XXX b;
BIG_XXX_fromBytes(b,&W->val[0]);
FP_YYY_nres(&(g->a.a.a.a),b);
@@ -1029,7 +1033,7 @@ void FP24_YYY_cmove(FP24_YYY *f,FP24_YYY *g,int d)
FP8_YYY_cmove(&(f->a),&(g->a),d);
FP8_YYY_cmove(&(f->b),&(g->b),d);
FP8_YYY_cmove(&(f->c),&(g->c),d);
- d=~(d-1);
- f->type^=(f->type^g->type)&d;
+ d=~(d-1);
+ f->type^=(f->type^g->type)&d;
}
diff --git a/version3/c/fp24.h b/version3/c/fp24.h
index 12b0209..3a9fbd3 100644
--- a/version3/c/fp24.h
+++ b/version3/c/fp24.h
@@ -12,7 +12,7 @@ typedef struct
FP8_YYY a; /**< first part of FP12 */
FP8_YYY b; /**< second part of FP12 */
FP8_YYY c; /**< third part of FP12 */
- int type;
+ int type;
} FP24_YYY;
extern const BIG_XXX Fra_YYY; /**< real part of BN curve Frobenius Constant */
@@ -134,7 +134,7 @@ extern void FP24_YYY_pow(FP24_YYY *r,FP24_YYY *x,BIG_XXX b);
*/
extern void FP24_YYY_pinpow(FP24_YYY *x,int i,int b);
-/** @brief Raises an FP24 instance x to a BIG power, compressed to FP8
+/** @brief Raises an FP24 instance x to a BIG power, compressed to FP8
*
@param c FP8 instance, on exit = x^(e mod r) as FP8
@param x FP24 input
diff --git a/version3/c/fp4.c b/version3/c/fp4.c
index 7b05c9e..c1c54f0 100644
--- a/version3/c/fp4.c
+++ b/version3/c/fp4.c
@@ -110,7 +110,7 @@ void FP4_YYY_neg(FP4_YYY *w,FP4_YYY *x)
{
/* Just one field neg */
FP2_YYY m,t;
- FP4_YYY_norm(x);
+ FP4_YYY_norm(x);
FP2_YYY_add(&m,&(x->a),&(x->b));
FP2_YYY_neg(&m,&m);
FP2_YYY_add(&t,&m,&(x->b));
@@ -334,7 +334,7 @@ void FP4_YYY_pow(FP4_YYY *r,FP4_YYY* a,BIG_XXX b)
BIG_XXX_copy(z,b);
BIG_XXX_norm(z);
FP4_YYY_copy(&w,a);
- FP4_YYY_norm(&w);
+ FP4_YYY_norm(&w);
FP4_YYY_one(r);
while(1)
@@ -397,14 +397,14 @@ void FP4_YYY_xtr_pow(FP4_YYY *r,FP4_YYY *x,BIG_XXX n)
FP2_YYY_from_BIG(&w,v);
FP4_YYY_from_FP2(&a,&w);
- FP4_YYY_copy(&sf,x);
- FP4_YYY_norm(&sf);
+ FP4_YYY_copy(&sf,x);
+ FP4_YYY_norm(&sf);
FP4_YYY_copy(&b,&sf);
FP4_YYY_xtr_D(&c,&sf);
par=BIG_XXX_parity(n);
BIG_XXX_copy(v,n);
- BIG_XXX_norm(v);
+ BIG_XXX_norm(v);
BIG_XXX_shr(v,1);
if (par==0)
{
@@ -600,7 +600,7 @@ int FP4_YYY_sqrt(FP4_YYY *r,FP4_YYY* x)
FP4_YYY_copy(r,x);
if (FP4_YYY_iszilch(x))
return 1;
-
+
FP2_YYY_copy(&a,&(x->a));
FP2_YYY_copy(&s,&(x->b));
@@ -662,14 +662,14 @@ void FP4_YYY_div_i(FP4_YYY *f)
void FP4_YYY_div_2i(FP4_YYY *f)
{
- FP2_YYY u,v;
- FP2_YYY_copy(&u,&(f->a));
- FP2_YYY_copy(&v,&(f->b));
- FP2_YYY_div_ip2(&u);
- FP2_YYY_add(&v,&v,&v);
- FP2_YYY_norm(&v);
- FP2_YYY_copy(&(f->a),&v);
- FP2_YYY_copy(&(f->b),&u);
+ FP2_YYY u,v;
+ FP2_YYY_copy(&u,&(f->a));
+ FP2_YYY_copy(&v,&(f->b));
+ FP2_YYY_div_ip2(&u);
+ FP2_YYY_add(&v,&v,&v);
+ FP2_YYY_norm(&v);
+ FP2_YYY_copy(&(f->a),&v);
+ FP2_YYY_copy(&(f->b),&u);
}
#endif
diff --git a/version3/c/fp4.h b/version3/c/fp4.h
index 451ab4a..4c6dda9 100644
--- a/version3/c/fp4.h
+++ b/version3/c/fp4.h
@@ -18,7 +18,7 @@
*/
/**
- * @file fp4.h
+ * @file fp4_YYY.h
* @author Mike Scott
* @brief FP4 Header File
*
diff --git a/version3/c/fp48.c b/version3/c/fp48.c
index e99257c..8083bf5 100644
--- a/version3/c/fp48.c
+++ b/version3/c/fp48.c
@@ -80,7 +80,7 @@ void FP48_YYY_copy(FP48_YYY *w,FP48_YYY *x)
FP16_YYY_copy(&(w->a),&(x->a));
FP16_YYY_copy(&(w->b),&(x->b));
FP16_YYY_copy(&(w->c),&(x->c));
- w->type=x->type;
+ w->type=x->type;
}
/* FP48 w=1 */
@@ -90,7 +90,7 @@ void FP48_YYY_one(FP48_YYY *w)
FP16_YYY_one(&(w->a));
FP16_YYY_zero(&(w->b));
FP16_YYY_zero(&(w->c));
- w->type=FP_UNITY;
+ w->type=AMCL_FP_UNITY;
}
void FP48_YYY_zero(FP48_YYY *w)
@@ -98,7 +98,7 @@ void FP48_YYY_zero(FP48_YYY *w)
FP16_YYY_zero(&(w->a));
FP16_YYY_zero(&(w->b));
FP16_YYY_zero(&(w->c));
- w->type=FP_ZERO;
+ w->type=AMCL_FP_ZERO;
}
/* return 1 if x==y, else 0 */
@@ -127,7 +127,7 @@ void FP48_YYY_from_FP16(FP48_YYY *w,FP16_YYY *a)
FP16_YYY_copy(&(w->a),a);
FP16_YYY_zero(&(w->b));
FP16_YYY_zero(&(w->c));
- w->type=FP_SPARSER;
+ w->type=AMCL_AMCL_FP_SPARSER;
}
/* Create FP48 from 3 FP16's */
@@ -137,7 +137,7 @@ void FP48_YYY_from_FP16s(FP48_YYY *w,FP16_YYY *a,FP16_YYY *b,FP16_YYY *c)
FP16_YYY_copy(&(w->a),a);
FP16_YYY_copy(&(w->b),b);
FP16_YYY_copy(&(w->c),c);
- w->type=FP_DENSE;
+ w->type=AMCL_FP_DENSE;
}
/* Granger-Scott Unitary Squaring. This does not benefit from lazy reduction */
@@ -177,7 +177,7 @@ void FP48_YYY_usqr(FP48_YYY *w,FP48_YYY *x)
FP16_YYY_add(&(w->c),&(w->c),&(w->c));
FP16_YYY_add(&(w->b),&B,&(w->b));
FP16_YYY_add(&(w->c),&C,&(w->c));
- w->type=FP_DENSE;
+ w->type=AMCL_FP_DENSE;
FP48_YYY_reduce(w); /* reduce here as in pow function repeated squarings would trigger multiple reductions */
}
@@ -189,16 +189,16 @@ void FP48_YYY_sqr(FP48_YYY *w,FP48_YYY *x)
FP16_YYY A,B,C,D;
- if (x->type<=FP_UNITY)
- {
- FP48_YYY_copy(w,x);
- return;
- }
+ if (x->type<=AMCL_FP_UNITY)
+ {
+ FP48_YYY_copy(w,x);
+ return;
+ }
FP16_YYY_sqr(&A,&(x->a));
FP16_YYY_mul(&B,&(x->b),&(x->c));
FP16_YYY_add(&B,&B,&B);
- FP16_YYY_norm(&B);
+ FP16_YYY_norm(&B);
FP16_YYY_sqr(&C,&(x->c));
FP16_YYY_mul(&D,&(x->a),&(x->b));
@@ -206,7 +206,7 @@ void FP48_YYY_sqr(FP48_YYY *w,FP48_YYY *x)
FP16_YYY_add(&(w->c),&(x->a),&(x->c));
FP16_YYY_add(&(w->c),&(x->b),&(w->c));
- FP16_YYY_norm(&(w->c));
+ FP16_YYY_norm(&(w->c));
FP16_YYY_sqr(&(w->c),&(w->c));
@@ -228,10 +228,10 @@ void FP48_YYY_sqr(FP48_YYY *w,FP48_YYY *x)
FP16_YYY_add(&(w->b),&C,&D);
FP16_YYY_add(&(w->c),&(w->c),&A);
- if (x->type==FP_SPARSER)
- w->type=FP_SPARSE;
- else
- w->type=FP_DENSE;
+ if (x->type==AMCL_AMCL_FP_SPARSER)
+ w->type=AMCL_FP_SPARSE;
+ else
+ w->type=AMCL_FP_DENSE;
FP48_YYY_norm(w);
}
@@ -251,15 +251,15 @@ void FP48_YYY_mul(FP48_YYY *w,FP48_YYY *y)
FP16_YYY_add(&t0,&(w->a),&(w->b));
FP16_YYY_add(&t1,&(y->a),&(y->b)); //
- FP16_YYY_norm(&t0);
- FP16_YYY_norm(&t1);
+ FP16_YYY_norm(&t0);
+ FP16_YYY_norm(&t1);
FP16_YYY_mul(&z1,&t0,&t1);
FP16_YYY_add(&t0,&(w->b),&(w->c));
FP16_YYY_add(&t1,&(y->b),&(y->c)); //
- FP16_YYY_norm(&t0);
- FP16_YYY_norm(&t1);
+ FP16_YYY_norm(&t0);
+ FP16_YYY_norm(&t1);
FP16_YYY_mul(&z3,&t0,&t1);
@@ -274,8 +274,8 @@ void FP48_YYY_mul(FP48_YYY *w,FP48_YYY *y)
FP16_YYY_add(&t0,&(w->a),&(w->c));
FP16_YYY_add(&t1,&(y->a),&(y->c));
- FP16_YYY_norm(&t0);
- FP16_YYY_norm(&t1);
+ FP16_YYY_norm(&t0);
+ FP16_YYY_norm(&t1);
FP16_YYY_mul(&t0,&t1,&t0);
FP16_YYY_add(&z2,&z2,&t0);
@@ -287,10 +287,10 @@ void FP48_YYY_mul(FP48_YYY *w,FP48_YYY *y)
FP16_YYY_add(&z3,&z3,&t1);
FP16_YYY_times_i(&t0);
FP16_YYY_add(&(w->b),&(w->b),&t0);
- FP16_YYY_norm(&z3);
+ FP16_YYY_norm(&z3);
FP16_YYY_times_i(&z3);
FP16_YYY_add(&(w->a),&z0,&z3);
- w->type=FP_DENSE;
+ w->type=AMCL_FP_DENSE;
FP48_YYY_norm(w);
}
@@ -299,274 +299,276 @@ void FP48_YYY_mul(FP48_YYY *w,FP48_YYY *y)
/* Usually w is denser than y */
void FP48_YYY_ssmul(FP48_YYY *w,FP48_YYY *y)
{
- FP16_YYY z0,z1,z2,z3,t0,t1;
- if (w->type==FP_UNITY)
- {
- FP48_YYY_copy(w,y);
- return;
- }
- if (y->type==FP_UNITY)
- return;
-
- if (y->type >= FP_SPARSE)
- {
- FP16_YYY_mul(&z0,&(w->a),&(y->a)); // xa.ya always 11x11
+ FP16_YYY z0,z1,z2,z3,t0,t1;
+ if (w->type==AMCL_FP_UNITY)
+ {
+ FP48_YYY_copy(w,y);
+ return;
+ }
+ if (y->type==AMCL_FP_UNITY)
+ return;
+
+ if (y->type >= AMCL_FP_SPARSE)
+ {
+ FP16_YYY_mul(&z0,&(w->a),&(y->a)); // xa.ya always 11x11
#if SEXTIC_TWIST_ZZZ == M_TYPE
- if (y->type==FP_SPARSE || w->type==FP_SPARSE)
- {
- FP8_YYY_mul(&z2.b,&(w->b).b,&(y->b).b);
- FP8_YYY_zero(&z2.a);
- if (y->type!=FP_SPARSE)
- FP8_YYY_mul(&z2.a,&(w->b).b,&(y->b).a);
- if (w->type!=FP_SPARSE)
- FP8_YYY_mul(&z2.a,&(w->b).a,&(y->b).b);
- FP16_YYY_times_i(&z2);
- }
- else
-#endif
- FP16_YYY_mul(&z2,&(w->b),&(y->b)); // xb.yb could be 00x00 or 01x01 or or 10x10 or 11x00 or 11x10 or 11x01 or 11x11
+ if (y->type==AMCL_FP_SPARSE || w->type==AMCL_FP_SPARSE)
+ {
+ FP8_YYY_mul(&z2.b,&(w->b).b,&(y->b).b);
+ FP8_YYY_zero(&z2.a);
+ if (y->type!=AMCL_FP_SPARSE)
+ FP8_YYY_mul(&z2.a,&(w->b).b,&(y->b).a);
+ if (w->type!=AMCL_FP_SPARSE)
+ FP8_YYY_mul(&z2.a,&(w->b).a,&(y->b).b);
+ FP16_YYY_times_i(&z2);
+ }
+ else
+#endif
+ FP16_YYY_mul(&z2,&(w->b),&(y->b)); // xb.yb could be 00x00 or 01x01 or or 10x10 or 11x00 or 11x10 or 11x01 or 11x11
- FP16_YYY_add(&t0,&(w->a),&(w->b)); // (xa+xb)
- FP16_YYY_add(&t1,&(y->a),&(y->b)); // (ya+yb)
+ FP16_YYY_add(&t0,&(w->a),&(w->b)); // (xa+xb)
+ FP16_YYY_add(&t1,&(y->a),&(y->b)); // (ya+yb)
- FP16_YYY_norm(&t0);
- FP16_YYY_norm(&t1);
+ FP16_YYY_norm(&t0);
+ FP16_YYY_norm(&t1);
- FP16_YYY_mul(&z1,&t0,&t1); // (xa+xb)(ya+yb) always 11x11
- FP16_YYY_add(&t0,&(w->b),&(w->c)); // (xb+xc)
- FP16_YYY_add(&t1,&(y->b),&(y->c)); // (yb+yc)
+ FP16_YYY_mul(&z1,&t0,&t1); // (xa+xb)(ya+yb) always 11x11
+ FP16_YYY_add(&t0,&(w->b),&(w->c)); // (xb+xc)
+ FP16_YYY_add(&t1,&(y->b),&(y->c)); // (yb+yc)
- FP16_YYY_norm(&t0);
- FP16_YYY_norm(&t1);
+ FP16_YYY_norm(&t0);
+ FP16_YYY_norm(&t1);
- FP16_YYY_mul(&z3,&t0,&t1); // (xb+xc)(yb+yc) could be anything...
- FP16_YYY_neg(&t0,&z0); // -(xa.ya)
- FP16_YYY_neg(&t1,&z2); // -(xb.yb)
+ FP16_YYY_mul(&z3,&t0,&t1); // (xb+xc)(yb+yc) could be anything...
+ FP16_YYY_neg(&t0,&z0); // -(xa.ya)
+ FP16_YYY_neg(&t1,&z2); // -(xb.yb)
- FP16_YYY_add(&z1,&z1,&t0);
- FP16_YYY_add(&(w->b),&z1,&t1); // /wb = (xa+xb)(ya+yb) -(xa.ya) -(xb.yb) = xa.yb + xb.ya
+ FP16_YYY_add(&z1,&z1,&t0);
+ FP16_YYY_add(&(w->b),&z1,&t1); // /wb = (xa+xb)(ya+yb) -(xa.ya) -(xb.yb) = xa.yb + xb.ya
- FP16_YYY_add(&z3,&z3,&t1); // (xb+xc)(yb+yc) -(xb.yb)
- FP16_YYY_add(&z2,&z2,&t0); // (xb.yb) - (xa.ya)
+ FP16_YYY_add(&z3,&z3,&t1); // (xb+xc)(yb+yc) -(xb.yb)
+ FP16_YYY_add(&z2,&z2,&t0); // (xb.yb) - (xa.ya)
- FP16_YYY_add(&t0,&(w->a),&(w->c)); // (xa+xc)
- FP16_YYY_add(&t1,&(y->a),&(y->c)); // (ya+yc)
+ FP16_YYY_add(&t0,&(w->a),&(w->c)); // (xa+xc)
+ FP16_YYY_add(&t1,&(y->a),&(y->c)); // (ya+yc)
- FP16_YYY_norm(&t0);
- FP16_YYY_norm(&t1);
+ FP16_YYY_norm(&t0);
+ FP16_YYY_norm(&t1);
- FP16_YYY_mul(&t0,&t1,&t0); // (xa+xc)(ya+yc) always 11x11
- FP16_YYY_add(&z2,&z2,&t0); // (xb.yb) - (xa.ya) + (xa+xc)(ya+yc)
+ FP16_YYY_mul(&t0,&t1,&t0); // (xa+xc)(ya+yc) always 11x11
+ FP16_YYY_add(&z2,&z2,&t0); // (xb.yb) - (xa.ya) + (xa+xc)(ya+yc)
#if SEXTIC_TWIST_ZZZ == D_TYPE
- if (y->type==FP_SPARSE || w->type==FP_SPARSE)
- {
- FP8_YYY_mul(&t0.a,&(w->c).a,&(y->c).a);
- FP8_YYY_zero(&t0.b);
- if (y->type!=FP_SPARSE)
- FP8_YYY_mul(&t0.b,&(w->c).a,&(y->c).b);
- if (w->type!=FP_SPARSE)
- FP8_YYY_mul(&t0.b,&(w->c).b,&(y->c).a);
- }
- else
+ if (y->type==AMCL_FP_SPARSE || w->type==AMCL_FP_SPARSE)
+ {
+ FP8_YYY_mul(&t0.a,&(w->c).a,&(y->c).a);
+ FP8_YYY_zero(&t0.b);
+ if (y->type!=AMCL_FP_SPARSE)
+ FP8_YYY_mul(&t0.b,&(w->c).a,&(y->c).b);
+ if (w->type!=AMCL_FP_SPARSE)
+ FP8_YYY_mul(&t0.b,&(w->c).b,&(y->c).a);
+ }
+ else
#endif
- FP16_YYY_mul(&t0,&(w->c),&(y->c)); // (xc.yc) could be anything
-
- FP16_YYY_neg(&t1,&t0); // -(xc.yc)
-
- FP16_YYY_add(&(w->c),&z2,&t1); // wc = (xb.yb) - (xa.ya) + (xa+xc)(ya+yc) - (xc.yc) = xb.yb + xc.ya + xa.yc
- FP16_YYY_add(&z3,&z3,&t1); // (xb+xc)(yb+yc) -(xb.yb) - (xc.yc) = xb.yc + xc.yb
- FP16_YYY_times_i(&t0); // i.(xc.yc)
- FP16_YYY_add(&(w->b),&(w->b),&t0); // wb = (xa+xb)(ya+yb) -(xa.ya) -(xb.yb) +i(xc.yc)
- FP16_YYY_norm(&z3);
- FP16_YYY_times_i(&z3); // i[(xb+xc)(yb+yc) -(xb.yb) - (xc.yc)] = i(xb.yc + xc.yb)
- FP16_YYY_add(&(w->a),&z0,&z3); // wa = xa.ya + i(xb.yc + xc.yb)
- } else {
- if (w->type==FP_SPARSER)
- {
- FP48_YYY_smul(w,y);
- return;
- }
-// dense by sparser - 13m
+ FP16_YYY_mul(&t0,&(w->c),&(y->c)); // (xc.yc) could be anything
+
+ FP16_YYY_neg(&t1,&t0); // -(xc.yc)
+
+ FP16_YYY_add(&(w->c),&z2,&t1); // wc = (xb.yb) - (xa.ya) + (xa+xc)(ya+yc) - (xc.yc) = xb.yb + xc.ya + xa.yc
+ FP16_YYY_add(&z3,&z3,&t1); // (xb+xc)(yb+yc) -(xb.yb) - (xc.yc) = xb.yc + xc.yb
+ FP16_YYY_times_i(&t0); // i.(xc.yc)
+ FP16_YYY_add(&(w->b),&(w->b),&t0); // wb = (xa+xb)(ya+yb) -(xa.ya) -(xb.yb) +i(xc.yc)
+ FP16_YYY_norm(&z3);
+ FP16_YYY_times_i(&z3); // i[(xb+xc)(yb+yc) -(xb.yb) - (xc.yc)] = i(xb.yc + xc.yb)
+ FP16_YYY_add(&(w->a),&z0,&z3); // wa = xa.ya + i(xb.yc + xc.yb)
+ }
+ else
+ {
+ if (w->type==AMCL_AMCL_FP_SPARSER)
+ {
+ FP48_YYY_smul(w,y);
+ return;
+ }
+// dense by sparser - 13m
#if SEXTIC_TWIST_ZZZ == D_TYPE
- FP16_YYY_copy(&z3,&(w->b));
- FP16_YYY_mul(&z0,&(w->a),&(y->a));
+ FP16_YYY_copy(&z3,&(w->b));
+ FP16_YYY_mul(&z0,&(w->a),&(y->a));
- FP16_YYY_pmul(&z2,&(w->b),&(y->b).a);
- FP16_YYY_add(&(w->b),&(w->a),&(w->b));
- FP16_YYY_copy(&t1,&(y->a));
- FP8_YYY_add(&t1.a,&t1.a,&(y->b).a);
+ FP16_YYY_pmul(&z2,&(w->b),&(y->b).a);
+ FP16_YYY_add(&(w->b),&(w->a),&(w->b));
+ FP16_YYY_copy(&t1,&(y->a));
+ FP8_YYY_add(&t1.a,&t1.a,&(y->b).a);
- FP16_YYY_norm(&t1);
- FP16_YYY_norm(&(w->b));
+ FP16_YYY_norm(&t1);
+ FP16_YYY_norm(&(w->b));
- FP16_YYY_mul(&(w->b),&(w->b),&t1);
- FP16_YYY_add(&z3,&z3,&(w->c));
- FP16_YYY_norm(&z3);
- FP16_YYY_pmul(&z3,&z3,&(y->b).a);
- FP16_YYY_neg(&t0,&z0);
- FP16_YYY_neg(&t1,&z2);
+ FP16_YYY_mul(&(w->b),&(w->b),&t1);
+ FP16_YYY_add(&z3,&z3,&(w->c));
+ FP16_YYY_norm(&z3);
+ FP16_YYY_pmul(&z3,&z3,&(y->b).a);
+ FP16_YYY_neg(&t0,&z0);
+ FP16_YYY_neg(&t1,&z2);
- FP16_YYY_add(&(w->b),&(w->b),&t0); // z1=z1-z0
- FP16_YYY_add(&(w->b),&(w->b),&t1); // z1=z1-z2
+ FP16_YYY_add(&(w->b),&(w->b),&t0); // z1=z1-z0
+ FP16_YYY_add(&(w->b),&(w->b),&t1); // z1=z1-z2
- FP16_YYY_add(&z3,&z3,&t1); // z3=z3-z2
- FP16_YYY_add(&z2,&z2,&t0); // z2=z2-z0
+ FP16_YYY_add(&z3,&z3,&t1); // z3=z3-z2
+ FP16_YYY_add(&z2,&z2,&t0); // z2=z2-z0
- FP16_YYY_add(&t0,&(w->a),&(w->c));
- FP16_YYY_norm(&t0);
- FP16_YYY_norm(&z3);
+ FP16_YYY_add(&t0,&(w->a),&(w->c));
+ FP16_YYY_norm(&t0);
+ FP16_YYY_norm(&z3);
- FP16_YYY_mul(&t0,&(y->a),&t0);
- FP16_YYY_add(&(w->c),&z2,&t0);
+ FP16_YYY_mul(&t0,&(y->a),&t0);
+ FP16_YYY_add(&(w->c),&z2,&t0);
- FP16_YYY_times_i(&z3);
- FP16_YYY_add(&(w->a),&z0,&z3);
+ FP16_YYY_times_i(&z3);
+ FP16_YYY_add(&(w->a),&z0,&z3);
#endif
#if SEXTIC_TWIST_ZZZ == M_TYPE
- FP16_YYY_mul(&z0,&(w->a),&(y->a));
- FP16_YYY_add(&t0,&(w->a),&(w->b));
- FP16_YYY_norm(&t0);
+ FP16_YYY_mul(&z0,&(w->a),&(y->a));
+ FP16_YYY_add(&t0,&(w->a),&(w->b));
+ FP16_YYY_norm(&t0);
- FP16_YYY_mul(&z1,&t0,&(y->a));
- FP16_YYY_add(&t0,&(w->b),&(w->c));
- FP16_YYY_norm(&t0);
+ FP16_YYY_mul(&z1,&t0,&(y->a));
+ FP16_YYY_add(&t0,&(w->b),&(w->c));
+ FP16_YYY_norm(&t0);
- FP16_YYY_pmul(&z3,&t0,&(y->c).b);
- FP16_YYY_times_i(&z3);
+ FP16_YYY_pmul(&z3,&t0,&(y->c).b);
+ FP16_YYY_times_i(&z3);
- FP16_YYY_neg(&t0,&z0);
- FP16_YYY_add(&z1,&z1,&t0); // z1=z1-z0
+ FP16_YYY_neg(&t0,&z0);
+ FP16_YYY_add(&z1,&z1,&t0); // z1=z1-z0
- FP16_YYY_copy(&(w->b),&z1);
- FP16_YYY_copy(&z2,&t0);
+ FP16_YYY_copy(&(w->b),&z1);
+ FP16_YYY_copy(&z2,&t0);
- FP16_YYY_add(&t0,&(w->a),&(w->c));
- FP16_YYY_add(&t1,&(y->a),&(y->c));
+ FP16_YYY_add(&t0,&(w->a),&(w->c));
+ FP16_YYY_add(&t1,&(y->a),&(y->c));
- FP16_YYY_norm(&t0);
- FP16_YYY_norm(&t1);
+ FP16_YYY_norm(&t0);
+ FP16_YYY_norm(&t1);
- FP16_YYY_mul(&t0,&t1,&t0);
- FP16_YYY_add(&z2,&z2,&t0);
+ FP16_YYY_mul(&t0,&t1,&t0);
+ FP16_YYY_add(&z2,&z2,&t0);
- FP16_YYY_pmul(&t0,&(w->c),&(y->c).b);
- FP16_YYY_times_i(&t0);
- FP16_YYY_neg(&t1,&t0);
- FP16_YYY_times_i(&t0);
+ FP16_YYY_pmul(&t0,&(w->c),&(y->c).b);
+ FP16_YYY_times_i(&t0);
+ FP16_YYY_neg(&t1,&t0);
+ FP16_YYY_times_i(&t0);
- FP16_YYY_add(&(w->c),&z2,&t1);
- FP16_YYY_add(&z3,&z3,&t1);
+ FP16_YYY_add(&(w->c),&z2,&t1);
+ FP16_YYY_add(&z3,&z3,&t1);
- FP16_YYY_add(&(w->b),&(w->b),&t0);
- FP16_YYY_norm(&z3);
- FP16_YYY_times_i(&z3);
- FP16_YYY_add(&(w->a),&z0,&z3);
+ FP16_YYY_add(&(w->b),&(w->b),&t0);
+ FP16_YYY_norm(&z3);
+ FP16_YYY_times_i(&z3);
+ FP16_YYY_add(&(w->a),&z0,&z3);
#endif
- }
- w->type=FP_DENSE;
+ }
+ w->type=AMCL_FP_DENSE;
FP48_YYY_norm(w);
}
/* FP48 multiplication w=w*y */
/* catering for special case that arises from special form of ATE pairing line function */
-/* w and y are both sparser line functions - cost = 6m */
+/* w and y are both sparser line functions - cost = 6m */
void FP48_YYY_smul(FP48_YYY *w,FP48_YYY *y)
{
- FP8_YYY w1,w2,w3,ta,tb,tc,td,te,t;
+ FP8_YYY w1,w2,w3,ta,tb,tc,td,te,t;
#if SEXTIC_TWIST_ZZZ == D_TYPE
- FP8_YYY_mul(&w1,&(w->a).a,&(y->a).a); // A1.A2
- FP8_YYY_mul(&w2,&(w->a).b,&(y->a).b); // B1.B2
- FP8_YYY_mul(&w3,&(w->b).a,&(y->b).a); // C1.C2
-
- FP8_YYY_add(&ta,&(w->a).a,&(w->a).b); // A1+B1
- FP8_YYY_add(&tb,&(y->a).a,&(y->a).b); // A2+B2
- FP8_YYY_norm(&ta);
- FP8_YYY_norm(&tb);
- FP8_YYY_mul(&tc,&ta,&tb); // (A1+B1)(A2+B2)
- FP8_YYY_add(&t,&w1,&w2);
- FP8_YYY_neg(&t,&t);
- FP8_YYY_add(&tc,&tc,&t); // (A1+B1)(A2+B2)-A1.A2-B1*B2 = (A1.B2+A2.B1)
-
- FP8_YYY_add(&ta,&(w->a).a,&(w->b).a); // A1+C1
- FP8_YYY_add(&tb,&(y->a).a,&(y->b).a); // A2+C2
- FP8_YYY_norm(&ta);
- FP8_YYY_norm(&tb);
- FP8_YYY_mul(&td,&ta,&tb); // (A1+C1)(A2+C2)
- FP8_YYY_add(&t,&w1,&w3);
- FP8_YYY_neg(&t,&t);
- FP8_YYY_add(&td,&td,&t); // (A1+C1)(A2+C2)-A1.A2-C1*C2 = (A1.C2+A2.C1)
-
- FP8_YYY_add(&ta,&(w->a).b,&(w->b).a); // B1+C1
- FP8_YYY_add(&tb,&(y->a).b,&(y->b).a); // B2+C2
- FP8_YYY_norm(&ta);
- FP8_YYY_norm(&tb);
- FP8_YYY_mul(&te,&ta,&tb); // (B1+C1)(B2+C2)
- FP8_YYY_add(&t,&w2,&w3);
- FP8_YYY_neg(&t,&t);
- FP8_YYY_add(&te,&te,&t); // (B1+C1)(B2+C2)-B1.B2-C1*C2 = (B1.C2+B2.C1)
-
- FP8_YYY_times_i(&w2);
- FP8_YYY_add(&w1,&w1,&w2);
- FP16_YYY_from_FP8s(&(w->a),&w1,&tc);
- FP16_YYY_from_FP8s(&(w->b),&td,&te); // only norm these 2
- FP16_YYY_from_FP8(&(w->c),&w3);
-
- FP16_YYY_norm(&(w->a));
- FP16_YYY_norm(&(w->b));
+ FP8_YYY_mul(&w1,&(w->a).a,&(y->a).a); // A1.A2
+ FP8_YYY_mul(&w2,&(w->a).b,&(y->a).b); // B1.B2
+ FP8_YYY_mul(&w3,&(w->b).a,&(y->b).a); // C1.C2
+
+ FP8_YYY_add(&ta,&(w->a).a,&(w->a).b); // A1+B1
+ FP8_YYY_add(&tb,&(y->a).a,&(y->a).b); // A2+B2
+ FP8_YYY_norm(&ta);
+ FP8_YYY_norm(&tb);
+ FP8_YYY_mul(&tc,&ta,&tb); // (A1+B1)(A2+B2)
+ FP8_YYY_add(&t,&w1,&w2);
+ FP8_YYY_neg(&t,&t);
+ FP8_YYY_add(&tc,&tc,&t); // (A1+B1)(A2+B2)-A1.A2-B1*B2 = (A1.B2+A2.B1)
+
+ FP8_YYY_add(&ta,&(w->a).a,&(w->b).a); // A1+C1
+ FP8_YYY_add(&tb,&(y->a).a,&(y->b).a); // A2+C2
+ FP8_YYY_norm(&ta);
+ FP8_YYY_norm(&tb);
+ FP8_YYY_mul(&td,&ta,&tb); // (A1+C1)(A2+C2)
+ FP8_YYY_add(&t,&w1,&w3);
+ FP8_YYY_neg(&t,&t);
+ FP8_YYY_add(&td,&td,&t); // (A1+C1)(A2+C2)-A1.A2-C1*C2 = (A1.C2+A2.C1)
+
+ FP8_YYY_add(&ta,&(w->a).b,&(w->b).a); // B1+C1
+ FP8_YYY_add(&tb,&(y->a).b,&(y->b).a); // B2+C2
+ FP8_YYY_norm(&ta);
+ FP8_YYY_norm(&tb);
+ FP8_YYY_mul(&te,&ta,&tb); // (B1+C1)(B2+C2)
+ FP8_YYY_add(&t,&w2,&w3);
+ FP8_YYY_neg(&t,&t);
+ FP8_YYY_add(&te,&te,&t); // (B1+C1)(B2+C2)-B1.B2-C1*C2 = (B1.C2+B2.C1)
+
+ FP8_YYY_times_i(&w2);
+ FP8_YYY_add(&w1,&w1,&w2);
+ FP16_YYY_from_FP8s(&(w->a),&w1,&tc);
+ FP16_YYY_from_FP8s(&(w->b),&td,&te); // only norm these 2
+ FP16_YYY_from_FP8(&(w->c),&w3);
+
+ FP16_YYY_norm(&(w->a));
+ FP16_YYY_norm(&(w->b));
#endif
#if SEXTIC_TWIST_ZZZ == M_TYPE
- FP8_YYY_mul(&w1,&(w->a).a,&(y->a).a); // A1.A2
- FP8_YYY_mul(&w2,&(w->a).b,&(y->a).b); // B1.B2
- FP8_YYY_mul(&w3,&(w->c).b,&(y->c).b); // F1.F2
-
- FP8_YYY_add(&ta,&(w->a).a,&(w->a).b); // A1+B1
- FP8_YYY_add(&tb,&(y->a).a,&(y->a).b); // A2+B2
- FP8_YYY_norm(&ta);
- FP8_YYY_norm(&tb);
- FP8_YYY_mul(&tc,&ta,&tb); // (A1+B1)(A2+B2)
- FP8_YYY_add(&t,&w1,&w2);
- FP8_YYY_neg(&t,&t);
- FP8_YYY_add(&tc,&tc,&t); // (A1+B1)(A2+B2)-A1.A2-B1*B2 = (A1.B2+A2.B1)
-
- FP8_YYY_add(&ta,&(w->a).a,&(w->c).b); // A1+F1
- FP8_YYY_add(&tb,&(y->a).a,&(y->c).b); // A2+F2
- FP8_YYY_norm(&ta);
- FP8_YYY_norm(&tb);
- FP8_YYY_mul(&td,&ta,&tb); // (A1+F1)(A2+F2)
- FP8_YYY_add(&t,&w1,&w3);
- FP8_YYY_neg(&t,&t);
- FP8_YYY_add(&td,&td,&t); // (A1+F1)(A2+F2)-A1.A2-F1*F2 = (A1.F2+A2.F1)
-
- FP8_YYY_add(&ta,&(w->a).b,&(w->c).b); // B1+F1
- FP8_YYY_add(&tb,&(y->a).b,&(y->c).b); // B2+F2
- FP8_YYY_norm(&ta);
- FP8_YYY_norm(&tb);
- FP8_YYY_mul(&te,&ta,&tb); // (B1+F1)(B2+F2)
- FP8_YYY_add(&t,&w2,&w3);
- FP8_YYY_neg(&t,&t);
- FP8_YYY_add(&te,&te,&t); // (B1+F1)(B2+F2)-B1.B2-F1*F2 = (B1.F2+B2.F1)
-
- FP8_YYY_times_i(&w2);
- FP8_YYY_add(&w1,&w1,&w2);
- FP16_YYY_from_FP8s(&(w->a),&w1,&tc);
-
- FP8_YYY_times_i(&w3);
- FP8_YYY_norm(&w3);
- FP16_YYY_from_FP8H(&(w->b),&w3);
-
- FP8_YYY_norm(&te);
- FP8_YYY_times_i(&te);
- FP16_YYY_from_FP8s(&(w->c),&te,&td);
-
- FP16_YYY_norm(&(w->a));
- FP16_YYY_norm(&(w->c));
+ FP8_YYY_mul(&w1,&(w->a).a,&(y->a).a); // A1.A2
+ FP8_YYY_mul(&w2,&(w->a).b,&(y->a).b); // B1.B2
+ FP8_YYY_mul(&w3,&(w->c).b,&(y->c).b); // F1.F2
+
+ FP8_YYY_add(&ta,&(w->a).a,&(w->a).b); // A1+B1
+ FP8_YYY_add(&tb,&(y->a).a,&(y->a).b); // A2+B2
+ FP8_YYY_norm(&ta);
+ FP8_YYY_norm(&tb);
+ FP8_YYY_mul(&tc,&ta,&tb); // (A1+B1)(A2+B2)
+ FP8_YYY_add(&t,&w1,&w2);
+ FP8_YYY_neg(&t,&t);
+ FP8_YYY_add(&tc,&tc,&t); // (A1+B1)(A2+B2)-A1.A2-B1*B2 = (A1.B2+A2.B1)
+
+ FP8_YYY_add(&ta,&(w->a).a,&(w->c).b); // A1+F1
+ FP8_YYY_add(&tb,&(y->a).a,&(y->c).b); // A2+F2
+ FP8_YYY_norm(&ta);
+ FP8_YYY_norm(&tb);
+ FP8_YYY_mul(&td,&ta,&tb); // (A1+F1)(A2+F2)
+ FP8_YYY_add(&t,&w1,&w3);
+ FP8_YYY_neg(&t,&t);
+ FP8_YYY_add(&td,&td,&t); // (A1+F1)(A2+F2)-A1.A2-F1*F2 = (A1.F2+A2.F1)
+
+ FP8_YYY_add(&ta,&(w->a).b,&(w->c).b); // B1+F1
+ FP8_YYY_add(&tb,&(y->a).b,&(y->c).b); // B2+F2
+ FP8_YYY_norm(&ta);
+ FP8_YYY_norm(&tb);
+ FP8_YYY_mul(&te,&ta,&tb); // (B1+F1)(B2+F2)
+ FP8_YYY_add(&t,&w2,&w3);
+ FP8_YYY_neg(&t,&t);
+ FP8_YYY_add(&te,&te,&t); // (B1+F1)(B2+F2)-B1.B2-F1*F2 = (B1.F2+B2.F1)
+
+ FP8_YYY_times_i(&w2);
+ FP8_YYY_add(&w1,&w1,&w2);
+ FP16_YYY_from_FP8s(&(w->a),&w1,&tc);
+
+ FP8_YYY_times_i(&w3);
+ FP8_YYY_norm(&w3);
+ FP16_YYY_from_FP8H(&(w->b),&w3);
+
+ FP8_YYY_norm(&te);
+ FP8_YYY_times_i(&te);
+ FP16_YYY_from_FP8s(&(w->c),&te,&td);
+
+ FP16_YYY_norm(&(w->a));
+ FP16_YYY_norm(&(w->c));
#endif
- w->type=FP_SPARSE;
+ w->type=AMCL_FP_SPARSE;
}
@@ -580,18 +582,18 @@ void FP48_YYY_inv(FP48_YYY *w,FP48_YYY *x)
FP16_YYY_mul(&f1,&(x->b),&(x->c));
FP16_YYY_times_i(&f1);
FP16_YYY_sub(&f0,&f0,&f1); /* y.a */
- FP16_YYY_norm(&f0);
+ FP16_YYY_norm(&f0);
FP16_YYY_sqr(&f1,&(x->c));
FP16_YYY_times_i(&f1);
FP16_YYY_mul(&f2,&(x->a),&(x->b));
FP16_YYY_sub(&f1,&f1,&f2); /* y.b */
- FP16_YYY_norm(&f1);
+ FP16_YYY_norm(&f1);
FP16_YYY_sqr(&f2,&(x->b));
FP16_YYY_mul(&f3,&(x->a),&(x->c));
FP16_YYY_sub(&f2,&f2,&f3); /* y.c */
- FP16_YYY_norm(&f2);
+ FP16_YYY_norm(&f2);
FP16_YYY_mul(&f3,&(x->b),&f2);
FP16_YYY_times_i(&f3);
@@ -601,13 +603,13 @@ void FP48_YYY_inv(FP48_YYY *w,FP48_YYY *x)
FP16_YYY_times_i(&(w->c));
FP16_YYY_add(&f3,&(w->c),&f3);
- FP16_YYY_norm(&f3);
-
+ FP16_YYY_norm(&f3);
+
FP16_YYY_inv(&f3,&f3);
FP16_YYY_mul(&(w->a),&f0,&f3);
FP16_YYY_mul(&(w->b),&f1,&f3);
FP16_YYY_mul(&(w->c),&f2,&f3);
- w->type=FP_DENSE;
+ w->type=AMCL_FP_DENSE;
}
/* constant time powering by small integer of max length bts */
@@ -634,9 +636,9 @@ void FP48_YYY_pinpow(FP48_YYY *r,int e,int bts)
void FP48_YYY_compow(FP16_YYY *c,FP48_YYY *x,BIG_XXX e,BIG_XXX r)
{
FP48_YYY g1,g2;
- FP16_YYY cp,cpm1,cpm2;
+ FP16_YYY cp,cpm1,cpm2;
FP2_YYY f;
- BIG_XXX q,a,b,m;
+ BIG_XXX q,a,b,m;
BIG_XXX_rcopy(a,Fra_YYY);
BIG_XXX_rcopy(b,Frb_YYY);
@@ -645,7 +647,7 @@ void FP48_YYY_compow(FP16_YYY *c,FP48_YYY *x,BIG_XXX e,BIG_XXX r)
BIG_XXX_rcopy(q,Modulus_YYY);
FP48_YYY_copy(&g1,x);
- FP48_YYY_copy(&g2,x);
+ FP48_YYY_copy(&g2,x);
BIG_XXX_copy(m,q);
BIG_XXX_mod(m,r);
@@ -658,11 +660,11 @@ void FP48_YYY_compow(FP16_YYY *c,FP48_YYY *x,BIG_XXX e,BIG_XXX r)
FP48_YYY_trace(c,&g1);
- if (BIG_XXX_iszilch(b))
- {
- FP16_YYY_xtr_pow(c,c,e);
- return;
- }
+ if (BIG_XXX_iszilch(b))
+ {
+ FP16_YYY_xtr_pow(c,c,e);
+ return;
+ }
FP48_YYY_frob(&g2,&f,1);
FP48_YYY_trace(&cp,&g2);
@@ -684,32 +686,32 @@ void FP48_YYY_pow(FP48_YYY *r,FP48_YYY *a,BIG_XXX b)
FP48_YYY w,sf;
BIG_XXX b1,b3;
int i,nb,bt;
- BIG_XXX_copy(b1,b);
+ BIG_XXX_copy(b1,b);
BIG_XXX_norm(b1);
- BIG_XXX_pmul(b3,b1,3);
- BIG_XXX_norm(b3);
+ BIG_XXX_pmul(b3,b1,3);
+ BIG_XXX_norm(b3);
- FP48_YYY_copy(&sf,a);
- FP48_YYY_norm(&sf);
+ FP48_YYY_copy(&sf,a);
+ FP48_YYY_norm(&sf);
FP48_YYY_copy(&w,&sf);
- nb=BIG_XXX_nbits(b3);
- for (i=nb-2;i>=1;i--)
- {
- FP48_YYY_usqr(&w,&w);
- bt=BIG_XXX_bit(b3,i)-BIG_XXX_bit(b1,i);
- if (bt==1)
- FP48_YYY_mul(&w,&sf);
- if (bt==-1)
- {
- FP48_YYY_conj(&sf,&sf);
- FP48_YYY_mul(&w,&sf);
- FP48_YYY_conj(&sf,&sf);
- }
- }
-
- FP48_YYY_copy(r,&w);
- FP48_YYY_reduce(r);
+ nb=BIG_XXX_nbits(b3);
+ for (i=nb-2; i>=1; i--)
+ {
+ FP48_YYY_usqr(&w,&w);
+ bt=BIG_XXX_bit(b3,i)-BIG_XXX_bit(b1,i);
+ if (bt==1)
+ FP48_YYY_mul(&w,&sf);
+ if (bt==-1)
+ {
+ FP48_YYY_conj(&sf,&sf);
+ FP48_YYY_mul(&w,&sf);
+ FP48_YYY_conj(&sf,&sf);
+ }
+ }
+
+ FP48_YYY_copy(r,&w);
+ FP48_YYY_reduce(r);
}
/* p=q0^u0.q1^u1.q2^u2.q3^u3... */
@@ -720,8 +722,8 @@ void FP48_YYY_pow(FP48_YYY *r,FP48_YYY *a,BIG_XXX b)
void FP48_YYY_pow16(FP48_YYY *p,FP48_YYY *q,BIG_XXX u[16])
{
int i,j,k,nb,pb1,pb2,pb3,pb4,bt;
- FP48_YYY g1[8],g2[8],g3[8],g4[8],r;
- BIG_XXX t[16],mt;
+ FP48_YYY g1[8],g2[8],g3[8],g4[8],r;
+ BIG_XXX t[16],mt;
sign8 w1[NLEN_XXX*BASEBITS_XXX+1];
sign8 s1[NLEN_XXX*BASEBITS_XXX+1];
sign8 w2[NLEN_XXX*BASEBITS_XXX+1];
@@ -731,7 +733,7 @@ void FP48_YYY_pow16(FP48_YYY *p,FP48_YYY *q,BIG_XXX u[16])
sign8 w4[NLEN_XXX*BASEBITS_XXX+1];
sign8 s4[NLEN_XXX*BASEBITS_XXX+1];
FP_YYY fx,fy;
- FP2_YYY X;
+ FP2_YYY X;
FP_YYY_rcopy(&fx,Fra_YYY);
FP_YYY_rcopy(&fy,Frb_YYY);
@@ -743,50 +745,50 @@ void FP48_YYY_pow16(FP48_YYY *p,FP48_YYY *q,BIG_XXX u[16])
// Precomputed table
FP48_YYY_copy(&g1[0],&q[0]); // q[0]
FP48_YYY_copy(&g1[1],&g1[0]);
- FP48_YYY_mul(&g1[1],&q[1]); // q[0].q[1]
+ FP48_YYY_mul(&g1[1],&q[1]); // q[0].q[1]
FP48_YYY_copy(&g1[2],&g1[0]);
- FP48_YYY_mul(&g1[2],&q[2]); // q[0].q[2]
- FP48_YYY_copy(&g1[3],&g1[1]);
- FP48_YYY_mul(&g1[3],&q[2]); // q[0].q[1].q[2]
- FP48_YYY_copy(&g1[4],&g1[0]);
- FP48_YYY_mul(&g1[4],&q[3]); // q[0].q[3]
- FP48_YYY_copy(&g1[5],&g1[1]);
- FP48_YYY_mul(&g1[5],&q[3]); // q[0].q[1].q[3]
- FP48_YYY_copy(&g1[6],&g1[2]);
- FP48_YYY_mul(&g1[6],&q[3]); // q[0].q[2].q[3]
- FP48_YYY_copy(&g1[7],&g1[3]);
- FP48_YYY_mul(&g1[7],&q[3]); // q[0].q[1].q[2].q[3]
+ FP48_YYY_mul(&g1[2],&q[2]); // q[0].q[2]
+ FP48_YYY_copy(&g1[3],&g1[1]);
+ FP48_YYY_mul(&g1[3],&q[2]); // q[0].q[1].q[2]
+ FP48_YYY_copy(&g1[4],&g1[0]);
+ FP48_YYY_mul(&g1[4],&q[3]); // q[0].q[3]
+ FP48_YYY_copy(&g1[5],&g1[1]);
+ FP48_YYY_mul(&g1[5],&q[3]); // q[0].q[1].q[3]
+ FP48_YYY_copy(&g1[6],&g1[2]);
+ FP48_YYY_mul(&g1[6],&q[3]); // q[0].q[2].q[3]
+ FP48_YYY_copy(&g1[7],&g1[3]);
+ FP48_YYY_mul(&g1[7],&q[3]); // q[0].q[1].q[2].q[3]
// Use Frobenius
- for (i=0;i<8;i++)
- {
- FP48_YYY_copy(&g2[i],&g1[i]);
- FP48_YYY_frob(&g2[i],&X,4);
+ for (i=0; i<8; i++)
+ {
+ FP48_YYY_copy(&g2[i],&g1[i]);
+ FP48_YYY_frob(&g2[i],&X,4);
- FP48_YYY_copy(&g3[i],&g2[i]);
- FP48_YYY_frob(&g3[i],&X,4);
+ FP48_YYY_copy(&g3[i],&g2[i]);
+ FP48_YYY_frob(&g3[i],&X,4);
- FP48_YYY_copy(&g4[i],&g3[i]);
- FP48_YYY_frob(&g4[i],&X,4);
- }
+ FP48_YYY_copy(&g4[i],&g3[i]);
+ FP48_YYY_frob(&g4[i],&X,4);
+ }
// Make them odd
- pb1=1-BIG_XXX_parity(t[0]);
- BIG_XXX_inc(t[0],pb1);
- BIG_XXX_norm(t[0]);
+ pb1=1-BIG_XXX_parity(t[0]);
+ BIG_XXX_inc(t[0],pb1);
+ BIG_XXX_norm(t[0]);
- pb2=1-BIG_XXX_parity(t[4]);
- BIG_XXX_inc(t[4],pb2);
- BIG_XXX_norm(t[4]);
+ pb2=1-BIG_XXX_parity(t[4]);
+ BIG_XXX_inc(t[4],pb2);
+ BIG_XXX_norm(t[4]);
- pb3=1-BIG_XXX_parity(t[8]);
- BIG_XXX_inc(t[8],pb3);
- BIG_XXX_norm(t[8]);
+ pb3=1-BIG_XXX_parity(t[8]);
+ BIG_XXX_inc(t[8],pb3);
+ BIG_XXX_norm(t[8]);
- pb4=1-BIG_XXX_parity(t[12]);
- BIG_XXX_inc(t[12],pb4);
- BIG_XXX_norm(t[12]);
+ pb4=1-BIG_XXX_parity(t[12]);
+ BIG_XXX_inc(t[12],pb4);
+ BIG_XXX_norm(t[12]);
// Number of bits
BIG_XXX_zero(mt);
@@ -796,90 +798,90 @@ void FP48_YYY_pow16(FP48_YYY *p,FP48_YYY *q,BIG_XXX u[16])
}
nb=1+BIG_XXX_nbits(mt);
-// Sign pivot
- s1[nb-1]=1;
- s2[nb-1]=1;
- s3[nb-1]=1;
- s4[nb-1]=1;
- for (i=0;i<nb-1;i++)
- {
+// Sign pivot
+ s1[nb-1]=1;
+ s2[nb-1]=1;
+ s3[nb-1]=1;
+ s4[nb-1]=1;
+ for (i=0; i<nb-1; i++)
+ {
BIG_XXX_fshr(t[0],1);
- s1[i]=2*BIG_XXX_parity(t[0])-1;
+ s1[i]=2*BIG_XXX_parity(t[0])-1;
BIG_XXX_fshr(t[4],1);
- s2[i]=2*BIG_XXX_parity(t[4])-1;
+ s2[i]=2*BIG_XXX_parity(t[4])-1;
BIG_XXX_fshr(t[8],1);
- s3[i]=2*BIG_XXX_parity(t[8])-1;
+ s3[i]=2*BIG_XXX_parity(t[8])-1;
BIG_XXX_fshr(t[12],1);
- s4[i]=2*BIG_XXX_parity(t[12])-1;
- }
+ s4[i]=2*BIG_XXX_parity(t[12])-1;
+ }
// Recoded exponents
for (i=0; i<nb; i++)
{
- w1[i]=0;
- k=1;
- for (j=1; j<4; j++)
- {
- bt=s1[i]*BIG_XXX_parity(t[j]);
- BIG_XXX_fshr(t[j],1);
-
- BIG_XXX_dec(t[j],(bt>>1));
- BIG_XXX_norm(t[j]);
- w1[i]+=bt*k;
- k*=2;
+ w1[i]=0;
+ k=1;
+ for (j=1; j<4; j++)
+ {
+ bt=s1[i]*BIG_XXX_parity(t[j]);
+ BIG_XXX_fshr(t[j],1);
+
+ BIG_XXX_dec(t[j],(bt>>1));
+ BIG_XXX_norm(t[j]);
+ w1[i]+=bt*k;
+ k*=2;
}
- w2[i]=0;
- k=1;
- for (j=5; j<8; j++)
- {
- bt=s2[i]*BIG_XXX_parity(t[j]);
- BIG_XXX_fshr(t[j],1);
-
- BIG_XXX_dec(t[j],(bt>>1));
- BIG_XXX_norm(t[j]);
- w2[i]+=bt*k;
- k*=2;
+ w2[i]=0;
+ k=1;
+ for (j=5; j<8; j++)
+ {
+ bt=s2[i]*BIG_XXX_parity(t[j]);
+ BIG_XXX_fshr(t[j],1);
+
+ BIG_XXX_dec(t[j],(bt>>1));
+ BIG_XXX_norm(t[j]);
+ w2[i]+=bt*k;
+ k*=2;
}
- w3[i]=0;
- k=1;
- for (j=9; j<12; j++)
- {
- bt=s3[i]*BIG_XXX_parity(t[j]);
- BIG_XXX_fshr(t[j],1);
-
- BIG_XXX_dec(t[j],(bt>>1));
- BIG_XXX_norm(t[j]);
- w3[i]+=bt*k;
- k*=2;
+ w3[i]=0;
+ k=1;
+ for (j=9; j<12; j++)
+ {
+ bt=s3[i]*BIG_XXX_parity(t[j]);
+ BIG_XXX_fshr(t[j],1);
+
+ BIG_XXX_dec(t[j],(bt>>1));
+ BIG_XXX_norm(t[j]);
+ w3[i]+=bt*k;
+ k*=2;
}
- w4[i]=0;
- k=1;
- for (j=13; j<16; j++)
- {
- bt=s4[i]*BIG_XXX_parity(t[j]);
- BIG_XXX_fshr(t[j],1);
-
- BIG_XXX_dec(t[j],(bt>>1));
- BIG_XXX_norm(t[j]);
- w4[i]+=bt*k;
- k*=2;
+ w4[i]=0;
+ k=1;
+ for (j=13; j<16; j++)
+ {
+ bt=s4[i]*BIG_XXX_parity(t[j]);
+ BIG_XXX_fshr(t[j],1);
+
+ BIG_XXX_dec(t[j],(bt>>1));
+ BIG_XXX_norm(t[j]);
+ w4[i]+=bt*k;
+ k*=2;
}
- }
+ }
// Main loop
- FP48_YYY_select(p,g1,2*w1[nb-1]+1);
- FP48_YYY_select(&r,g2,2*w2[nb-1]+1);
- FP48_YYY_mul(p,&r);
- FP48_YYY_select(&r,g3,2*w3[nb-1]+1);
- FP48_YYY_mul(p,&r);
- FP48_YYY_select(&r,g4,2*w4[nb-1]+1);
- FP48_YYY_mul(p,&r);
+ FP48_YYY_select(p,g1,2*w1[nb-1]+1);
+ FP48_YYY_select(&r,g2,2*w2[nb-1]+1);
+ FP48_YYY_mul(p,&r);
+ FP48_YYY_select(&r,g3,2*w3[nb-1]+1);
+ FP48_YYY_mul(p,&r);
+ FP48_YYY_select(&r,g4,2*w4[nb-1]+1);
+ FP48_YYY_mul(p,&r);
for (i=nb-2; i>=0; i--)
{
- FP48_YYY_usqr(p,p);
+ FP48_YYY_usqr(p,p);
FP48_YYY_select(&r,g1,2*w1[i]+s1[i]);
FP48_YYY_mul(p,&r);
FP48_YYY_select(&r,g2,2*w2[i]+s2[i]);
@@ -891,49 +893,52 @@ void FP48_YYY_pow16(FP48_YYY *p,FP48_YYY *q,BIG_XXX u[16])
}
// apply correction
- FP48_YYY_conj(&r,&q[0]);
- FP48_YYY_mul(&r,p);
- FP48_YYY_cmove(p,&r,pb1);
- FP48_YYY_conj(&r,&q[4]);
- FP48_YYY_mul(&r,p);
- FP48_YYY_cmove(p,&r,pb2);
-
- FP48_YYY_conj(&r,&q[8]);
- FP48_YYY_mul(&r,p);
- FP48_YYY_cmove(p,&r,pb3);
- FP48_YYY_conj(&r,&q[12]);
- FP48_YYY_mul(&r,p);
- FP48_YYY_cmove(p,&r,pb4);
-
- FP48_YYY_reduce(p);
+ FP48_YYY_conj(&r,&q[0]);
+ FP48_YYY_mul(&r,p);
+ FP48_YYY_cmove(p,&r,pb1);
+ FP48_YYY_conj(&r,&q[4]);
+ FP48_YYY_mul(&r,p);
+ FP48_YYY_cmove(p,&r,pb2);
+
+ FP48_YYY_conj(&r,&q[8]);
+ FP48_YYY_mul(&r,p);
+ FP48_YYY_cmove(p,&r,pb3);
+ FP48_YYY_conj(&r,&q[12]);
+ FP48_YYY_mul(&r,p);
+ FP48_YYY_cmove(p,&r,pb4);
+
+ FP48_YYY_reduce(p);
}
/* Set w=w^p using Frobenius */
/* SU= 160 */
void FP48_YYY_frob(FP48_YYY *w,FP2_YYY *f,int n)
{
- int i;
- FP8_YYY X2,X4;
- FP4_YYY F;
+ int i;
FP2_YYY f3,f2; // f=(1+i)^(p-19)/24
- FP2_YYY_sqr(&f2,f); //
+ FP2_YYY_sqr(&f2,f); //
FP2_YYY_mul(&f3,&f2,f); // f3=f^3=(1+i)^(p-19)/8
- FP2_YYY_mul_ip(&f3);
- FP2_YYY_norm(&f3);
- FP2_YYY_mul_ip(&f3); // f3 = (1+i)^16/8.(1+i)^(p-19)/8 = (1+i)^(p-3)/8
- FP2_YYY_norm(&f3);
-
- for (i=0;i<n;i++)
- {
- FP16_YYY_frob(&(w->a),&f3); // a=a^p
- FP16_YYY_frob(&(w->b),&f3); // b=b^p
- FP16_YYY_frob(&(w->c),&f3); // c=c^p
-
- FP16_YYY_qmul(&(w->b),&(w->b),f); FP16_YYY_times_i4(&(w->b)); FP16_YYY_times_i2(&(w->b));
- FP16_YYY_qmul(&(w->c),&(w->c),&f2); FP16_YYY_times_i4(&(w->c)); FP16_YYY_times_i4(&(w->c)); FP16_YYY_times_i4(&(w->c));
- }
- w->type=FP_DENSE;
+ FP2_YYY_mul_ip(&f3);
+ FP2_YYY_norm(&f3);
+ FP2_YYY_mul_ip(&f3); // f3 = (1+i)^16/8.(1+i)^(p-19)/8 = (1+i)^(p-3)/8
+ FP2_YYY_norm(&f3);
+
+ for (i=0; i<n; i++)
+ {
+ FP16_YYY_frob(&(w->a),&f3); // a=a^p
+ FP16_YYY_frob(&(w->b),&f3); // b=b^p
+ FP16_YYY_frob(&(w->c),&f3); // c=c^p
+
+ FP16_YYY_qmul(&(w->b),&(w->b),f);
+ FP16_YYY_times_i4(&(w->b));
+ FP16_YYY_times_i2(&(w->b));
+ FP16_YYY_qmul(&(w->c),&(w->c),&f2);
+ FP16_YYY_times_i4(&(w->c));
+ FP16_YYY_times_i4(&(w->c));
+ FP16_YYY_times_i4(&(w->c));
+ }
+ w->type=AMCL_FP_DENSE;
}
/* SU= 8 */
@@ -985,10 +990,10 @@ void FP48_YYY_toOctet(octet *W,FP48_YYY *g)
BIG_XXX_toBytes(&(W->val[0]),a);
FP_YYY_redc(a,&(g->a.a.a.a.b));
BIG_XXX_toBytes(&(W->val[MODBYTES_XXX]),a);
-
- FP_YYY_redc(a,&(g->a.a.a.b.a));
+
+ FP_YYY_redc(a,&(g->a.a.a.b.a));
BIG_XXX_toBytes(&(W->val[2*MODBYTES_XXX]),a);
- FP_YYY_redc(a,&(g->a.a.a.b.b));
+ FP_YYY_redc(a,&(g->a.a.a.b.b));
BIG_XXX_toBytes(&(W->val[3*MODBYTES_XXX]),a);
FP_YYY_redc(a,&(g->a.a.b.a.a));
@@ -1106,7 +1111,7 @@ void FP48_YYY_toOctet(octet *W,FP48_YYY *g)
/* Restore g from octet string w */
void FP48_YYY_fromOctet(FP48_YYY *g,octet *W)
{
- BIG_XXX b;
+ BIG_XXX b;
BIG_XXX_fromBytes(b,&W->val[0]);
FP_YYY_nres(&(g->a.a.a.a.a),b);
@@ -1236,6 +1241,6 @@ void FP48_YYY_cmove(FP48_YYY *f,FP48_YYY *g,int d)
FP16_YYY_cmove(&(f->a),&(g->a),d);
FP16_YYY_cmove(&(f->b),&(g->b),d);
FP16_YYY_cmove(&(f->c),&(g->c),d);
- d=~(d-1);
- f->type^=(f->type^g->type)&d;
+ d=~(d-1);
+ f->type^=(f->type^g->type)&d;
}
diff --git a/version3/c/fp48.h b/version3/c/fp48.h
index f445af7..93dc50d 100644
--- a/version3/c/fp48.h
+++ b/version3/c/fp48.h
@@ -12,7 +12,7 @@ typedef struct
FP16_YYY a; /**< first part of FP12 */
FP16_YYY b; /**< second part of FP12 */
FP16_YYY c; /**< third part of FP12 */
- int type;
+ int type;
} FP48_YYY;
extern const BIG_XXX Fra_YYY; /**< real part of BN curve Frobenius Constant */
@@ -133,7 +133,7 @@ extern void FP48_YYY_pow(FP48_YYY *r,FP48_YYY *x,BIG_XXX b);
*/
extern void FP48_YYY_pinpow(FP48_YYY *x,int i,int b);
-/** @brief Raises an FP48 instance x to a BIG_XXX power, compressed to FP16
+/** @brief Raises an FP48 instance x to a BIG_XXX power, compressed to FP16
*
@param c FP16 instance, on exit = x^(e mod r) as FP16
@param x FP48 input
diff --git a/version3/c/fp8.c b/version3/c/fp8.c
index 3786a7a..9fe0452 100644
--- a/version3/c/fp8.c
+++ b/version3/c/fp8.c
@@ -100,14 +100,14 @@ void FP8_YYY_neg(FP8_YYY *w,FP8_YYY *x)
{
/* Just one field neg */
FP4_YYY m,t;
- FP8_YYY_norm(x);
+ FP8_YYY_norm(x);
FP4_YYY_add(&m,&(x->a),&(x->b));
- FP4_YYY_norm(&m);
+ FP4_YYY_norm(&m);
FP4_YYY_neg(&m,&m);
FP4_YYY_add(&t,&m,&(x->b));
FP4_YYY_add(&(w->b),&m,&(x->a));
FP4_YYY_copy(&(w->a),&t);
- FP8_YYY_norm(w);
+ FP8_YYY_norm(w);
}
/* Set w=conj(x) */
@@ -115,7 +115,7 @@ void FP8_YYY_conj(FP8_YYY *w,FP8_YYY *x)
{
FP4_YYY_copy(&(w->a), &(x->a));
FP4_YYY_neg(&(w->b), &(x->b));
- FP8_YYY_norm(w);
+ FP8_YYY_norm(w);
}
/* Set w=-conj(x) */
@@ -123,7 +123,7 @@ void FP8_YYY_nconj(FP8_YYY *w,FP8_YYY *x)
{
FP4_YYY_copy(&(w->b),&(x->b));
FP4_YYY_neg(&(w->a), &(x->a));
- FP8_YYY_norm(w);
+ FP8_YYY_norm(w);
}
/* Set w=x+y */
@@ -199,8 +199,8 @@ void FP8_YYY_sqr(FP8_YYY *w,FP8_YYY *x)
FP4_YYY_add(&t2,&(x->a),&t2);
- FP4_YYY_norm(&t1); // 2
- FP4_YYY_norm(&t2); // 2
+ FP4_YYY_norm(&t1); // 2
+ FP4_YYY_norm(&t2); // 2
FP4_YYY_mul(&(w->a),&t1,&t2);
@@ -209,7 +209,7 @@ void FP8_YYY_sqr(FP8_YYY *w,FP8_YYY *x)
FP4_YYY_add(&t2,&t2,&t3);
- FP4_YYY_norm(&t2); // 2
+ FP4_YYY_norm(&t2); // 2
FP4_YYY_neg(&t2,&t2);
FP4_YYY_add(&(w->a),&(w->a),&t2); /* a=(a+b)(a+i^2.b)-i^2.ab-ab = a*a+ib*ib */
FP4_YYY_add(&(w->b),&t3,&t3); /* b=2ab */
@@ -223,23 +223,23 @@ void FP8_YYY_mul(FP8_YYY *w,FP8_YYY *x,FP8_YYY *y)
{
FP4_YYY t1,t2,t3,t4;
- FP4_YYY_mul(&t1,&(x->a),&(y->a));
- FP4_YYY_mul(&t2,&(x->b),&(y->b));
+ FP4_YYY_mul(&t1,&(x->a),&(y->a));
+ FP4_YYY_mul(&t2,&(x->b),&(y->b));
FP4_YYY_add(&t3,&(y->b),&(y->a));
FP4_YYY_add(&t4,&(x->b),&(x->a));
- FP4_YYY_norm(&t4); // 2
- FP4_YYY_norm(&t3); // 2
+ FP4_YYY_norm(&t4); // 2
+ FP4_YYY_norm(&t3); // 2
FP4_YYY_mul(&t4,&t4,&t3); /* (xa+xb)(ya+yb) */
- FP4_YYY_neg(&t3,&t1); // 1
- FP4_YYY_add(&t4,&t4,&t3); //t4E=3
+ FP4_YYY_neg(&t3,&t1); // 1
+ FP4_YYY_add(&t4,&t4,&t3); //t4E=3
FP4_YYY_norm(&t4);
- FP4_YYY_neg(&t3,&t2); // 1
- FP4_YYY_add(&(w->b),&t4,&t3); //wbE=3
+ FP4_YYY_neg(&t3,&t2); // 1
+ FP4_YYY_add(&(w->b),&t4,&t3); //wbE=3
FP4_YYY_times_i(&t2);
FP4_YYY_add(&(w->a),&t2,&t1);
@@ -273,47 +273,48 @@ void FP8_YYY_inv(FP8_YYY *w,FP8_YYY *x)
FP4_YYY_sqr(&t1,&(x->a));
FP4_YYY_sqr(&t2,&(x->b));
FP4_YYY_times_i(&t2);
- FP4_YYY_norm(&t2);
+ FP4_YYY_norm(&t2);
FP4_YYY_sub(&t1,&t1,&t2);
- FP4_YYY_norm(&t1);
+ FP4_YYY_norm(&t1);
FP4_YYY_inv(&t1,&t1);
FP4_YYY_mul(&(w->a),&t1,&(x->a));
FP4_YYY_neg(&t1,&t1);
- FP4_YYY_norm(&t1);
+ FP4_YYY_norm(&t1);
FP4_YYY_mul(&(w->b),&t1,&(x->b));
}
/* w*=i where i = sqrt(sqrt(-1+sqrt(-1))) */
void FP8_YYY_times_i(FP8_YYY *w)
{
- FP4_YYY s,t;
- FP4_YYY_copy(&s,&(w->b));
- FP4_YYY_copy(&t,&(w->a));
- FP4_YYY_times_i(&s);
- FP4_YYY_copy(&(w->a),&s);
- FP4_YYY_copy(&(w->b),&t);
- FP8_YYY_norm(w);
+ FP4_YYY s,t;
+ FP4_YYY_copy(&s,&(w->b));
+ FP4_YYY_copy(&t,&(w->a));
+ FP4_YYY_times_i(&s);
+ FP4_YYY_copy(&(w->a),&s);
+ FP4_YYY_copy(&(w->b),&t);
+ FP8_YYY_norm(w);
}
void FP8_YYY_times_i2(FP8_YYY *w)
{
- FP4_YYY_times_i(&(w->a));
- FP4_YYY_times_i(&(w->b));
+ FP4_YYY_times_i(&(w->a));
+ FP4_YYY_times_i(&(w->b));
}
/* Set w=w^p using Frobenius */
void FP8_YYY_frob(FP8_YYY *w,FP2_YYY *f)
-{ // f=(i+1)^(p-3)/4
- FP2_YYY ff;
- FP2_YYY_sqr(&ff,f); // (i+1)^(p-3)/2
- FP2_YYY_mul_ip(&ff); // (i+1)^(p-1)/2
- FP2_YYY_norm(&ff);
- FP4_YYY_frob(&(w->a),&ff);
- FP4_YYY_frob(&(w->b),&ff);
- FP4_YYY_pmul(&(w->b),&(w->b),f); // times (1+i)^(p-3)/4
- FP4_YYY_times_i(&(w->b)); // (i+1)^(p-1)/4
+{
+ // f=(i+1)^(p-3)/4
+ FP2_YYY ff;
+ FP2_YYY_sqr(&ff,f); // (i+1)^(p-3)/2
+ FP2_YYY_mul_ip(&ff); // (i+1)^(p-1)/2
+ FP2_YYY_norm(&ff);
+ FP4_YYY_frob(&(w->a),&ff);
+ FP4_YYY_frob(&(w->b),&ff);
+ FP4_YYY_pmul(&(w->b),&(w->b),f); // times (1+i)^(p-3)/4
+ FP4_YYY_times_i(&(w->b)); // (i+1)^(p-1)/4
}
/* Set r=a^b mod m */
@@ -327,7 +328,7 @@ void FP8_YYY_pow(FP8_YYY *r,FP8_YYY* a,BIG_XXX b)
BIG_XXX_copy(z,b);
FP8_YYY_copy(&w,a);
- FP8_YYY_norm(&w);
+ FP8_YYY_norm(&w);
FP8_YYY_one(r);
BIG_XXX_norm(z);
while(1)
@@ -350,10 +351,10 @@ void FP8_YYY_xtr_A(FP8_YYY *r,FP8_YYY *w,FP8_YYY *x,FP8_YYY *y,FP8_YYY *z)
FP8_YYY_copy(r,x);
FP8_YYY_sub(&t1,w,y);
- FP8_YYY_norm(&t1);
+ FP8_YYY_norm(&t1);
FP8_YYY_pmul(&t1,&t1,&(r->a));
FP8_YYY_add(&t2,w,y);
- FP8_YYY_norm(&t2);
+ FP8_YYY_norm(&t2);
FP8_YYY_pmul(&t2,&t2,&(r->b));
FP8_YYY_times_i(&t2);
@@ -371,7 +372,7 @@ void FP8_YYY_xtr_D(FP8_YYY *r,FP8_YYY *x)
FP8_YYY_conj(&w,r);
FP8_YYY_add(&w,&w,&w);
FP8_YYY_sqr(r,r);
- FP8_YYY_norm(&w);
+ FP8_YYY_norm(&w);
FP8_YYY_sub(r,r,&w);
FP8_YYY_reduce(r); /* reduce here as multiple calls trigger automatic reductions */
}
@@ -382,18 +383,18 @@ void FP8_YYY_xtr_pow(FP8_YYY *r,FP8_YYY *x,BIG_XXX n)
int i,par,nb;
BIG_XXX v;
FP2_YYY w2;
- FP4_YYY w4;
+ FP4_YYY w4;
FP8_YYY t,a,b,c,sf;
BIG_XXX_zero(v);
BIG_XXX_inc(v,3);
- BIG_XXX_norm(v);
+ BIG_XXX_norm(v);
FP2_YYY_from_BIG(&w2,v);
FP4_YYY_from_FP2(&w4,&w2);
FP8_YYY_from_FP4(&a,&w4);
- FP8_YYY_copy(&sf,x);
- FP8_YYY_norm(&sf);
- FP8_YYY_copy(&b,&sf);
+ FP8_YYY_copy(&sf,x);
+ FP8_YYY_norm(&sf);
+ FP8_YYY_copy(&b,&sf);
FP8_YYY_xtr_D(&c,&sf);
par=BIG_XXX_parity(n);
@@ -444,7 +445,7 @@ void FP8_YYY_xtr_pow2(FP8_YYY *r,FP8_YYY *ck,FP8_YYY *cl,FP8_YYY *ckml,FP8_YYY *
BIG_XXX_copy(e,a);
BIG_XXX_copy(d,b);
BIG_XXX_norm(e);
- BIG_XXX_norm(d);
+ BIG_XXX_norm(d);
FP8_YYY_copy(&cu,ck);
FP8_YYY_copy(&cv,cl);
FP8_YYY_copy(&cumv,ckml);
@@ -584,93 +585,93 @@ void FP8_YYY_cmove(FP8_YYY *f,FP8_YYY *g,int d)
/* returns true if x is QR */
int FP8_YYY_sqrt(FP8_YYY *r,FP8_YYY* x)
{
- FP4_YYY a,s,t;
+ FP4_YYY a,s,t;
- FP8_YYY_copy(r,x);
- if (FP8_YYY_iszilch(x))
- return 1;
-
- FP4_YYY_copy(&a,&(x->a));
- FP4_YYY_copy(&s,&(x->b));
+ FP8_YYY_copy(r,x);
+ if (FP8_YYY_iszilch(x))
+ return 1;
- if (FP4_YYY_iszilch(&s))
- {
- if (FP4_YYY_sqrt(&t,&a))
- {
- FP8_YYY_from_FP4(r,&t);
- }
- else
- {
- FP4_YYY_div_i(&a);
- FP4_YYY_sqrt(&t,&a);
- FP8_YYY_from_FP4H(r,&t);
- }
- return 1;
- }
+ FP4_YYY_copy(&a,&(x->a));
+ FP4_YYY_copy(&s,&(x->b));
- FP4_YYY_sqr(&s,&s); // s*=s
- FP4_YYY_sqr(&a,&a); // a*=a
- FP4_YYY_times_i(&s);
- FP4_YYY_norm(&s);
- FP4_YYY_sub(&a,&a,&s); // a-=txx(s)
+ if (FP4_YYY_iszilch(&s))
+ {
+ if (FP4_YYY_sqrt(&t,&a))
+ {
+ FP8_YYY_from_FP4(r,&t);
+ }
+ else
+ {
+ FP4_YYY_div_i(&a);
+ FP4_YYY_sqrt(&t,&a);
+ FP8_YYY_from_FP4H(r,&t);
+ }
+ return 1;
+ }
+
+ FP4_YYY_sqr(&s,&s); // s*=s
+ FP4_YYY_sqr(&a,&a); // a*=a
+ FP4_YYY_times_i(&s);
+ FP4_YYY_norm(&s);
+ FP4_YYY_sub(&a,&a,&s); // a-=txx(s)
- if (!FP4_YYY_sqrt(&s,&a)) return 0;
+ if (!FP4_YYY_sqrt(&s,&a)) return 0;
- FP4_YYY_sqr(&t,&s);
+ FP4_YYY_sqr(&t,&s);
- FP4_YYY_copy(&t,&(x->a));
- FP4_YYY_add(&a,&t,&s);
- FP4_YYY_norm(&a);
- FP4_YYY_div2(&a,&a);
+ FP4_YYY_copy(&t,&(x->a));
+ FP4_YYY_add(&a,&t,&s);
+ FP4_YYY_norm(&a);
+ FP4_YYY_div2(&a,&a);
- if (!FP4_YYY_sqrt(&a,&a))
- {
- FP4_YYY_sub(&a,&t,&s);
- FP4_YYY_norm(&a);
- FP4_YYY_div2(&a,&a);
- if (!FP4_YYY_sqrt(&a,&a)) return 0;
- }
+ if (!FP4_YYY_sqrt(&a,&a))
+ {
+ FP4_YYY_sub(&a,&t,&s);
+ FP4_YYY_norm(&a);
+ FP4_YYY_div2(&a,&a);
+ if (!FP4_YYY_sqrt(&a,&a)) return 0;
+ }
- FP4_YYY_copy(&t,&(x->b));
- FP4_YYY_add(&s,&a,&a);
- FP4_YYY_inv(&s,&s);
+ FP4_YYY_copy(&t,&(x->b));
+ FP4_YYY_add(&s,&a,&a);
+ FP4_YYY_inv(&s,&s);
- FP4_YYY_mul(&t,&t,&s);
- FP8_YYY_from_FP4s(r,&a,&t);
+ FP4_YYY_mul(&t,&t,&s);
+ FP8_YYY_from_FP4s(r,&a,&t);
- return 1;
+ return 1;
}
void FP8_YYY_div_i(FP8_YYY *f)
{
- FP4_YYY u,v;
- FP4_YYY_copy(&u,&(f->a));
- FP4_YYY_copy(&v,&(f->b));
- FP4_YYY_div_i(&u);
- FP4_YYY_copy(&(f->a),&v);
- FP4_YYY_copy(&(f->b),&u);
+ FP4_YYY u,v;
+ FP4_YYY_copy(&u,&(f->a));
+ FP4_YYY_copy(&v,&(f->b));
+ FP4_YYY_div_i(&u);
+ FP4_YYY_copy(&(f->a),&v);
+ FP4_YYY_copy(&(f->b),&u);
}
void FP8_YYY_div_i2(FP8_YYY *f)
{
- FP4_YYY_div_i(&(f->a));
- FP4_YYY_div_i(&(f->b));
+ FP4_YYY_div_i(&(f->a));
+ FP4_YYY_div_i(&(f->b));
}
void FP8_YYY_div_2i(FP8_YYY *f)
{
- FP4_YYY u,v;
- FP4_YYY_copy(&u,&(f->a));
- FP4_YYY_copy(&v,&(f->b));
- FP4_YYY_div_2i(&u);
- FP4_YYY_add(&v,&v,&v);
- FP4_YYY_norm(&v);
- FP4_YYY_copy(&(f->a),&v);
- FP4_YYY_copy(&(f->b),&u);
+ FP4_YYY u,v;
+ FP4_YYY_copy(&u,&(f->a));
+ FP4_YYY_copy(&v,&(f->b));
+ FP4_YYY_div_2i(&u);
+ FP4_YYY_add(&v,&v,&v);
+ FP4_YYY_norm(&v);
+ FP4_YYY_copy(&(f->a),&v);
+ FP4_YYY_copy(&(f->b),&u);
}
#endif
diff --git a/version3/c/mpin.c b/version3/c/mpin.c
index 9d5d983..6c6ccdd 100644
--- a/version3/c/mpin.c
+++ b/version3/c/mpin.c
@@ -137,7 +137,7 @@ int MPIN_ZZZ_ENCODING(csprng *RNG,octet *E)
if (su<0) su=-su;
su%=2;
map(&W,u,su);
- ECP_ZZZ_sub(&P,&W);
+ ECP_ZZZ_sub(&P,&W);
rn=unmap(v,&sv,&P);
m=RAND_byte(RNG);
@@ -169,7 +169,7 @@ int MPIN_ZZZ_DECODING(octet *D)
sv=(D->val[0]>>1)&1;
map(&W,u,su);
map(&P,v,sv);
- ECP_ZZZ_add(&P,&W);
+ ECP_ZZZ_add(&P,&W);
ECP_ZZZ_toOctet(D,&P,false);
}
@@ -188,7 +188,7 @@ int MPIN_ZZZ_RECOMBINE_G1(octet *R1,octet *R2,octet *R)
}
if (res==0)
{
- ECP_ZZZ_add(&P,&T);
+ ECP_ZZZ_add(&P,&T);
ECP_ZZZ_toOctet(R,&P,false);
}
return res;
@@ -203,7 +203,7 @@ int MPIN_ZZZ_RECOMBINE_G2(octet *W1,octet *W2,octet *W)
if (!ECP2_ZZZ_fromOctet(&T,W2)) res=MPIN_INVALID_POINT;
if (res==0)
{
- ECP2_ZZZ_add(&Q,&T);
+ ECP2_ZZZ_add(&Q,&T);
ECP2_ZZZ_toOctet(W,&Q);
}
return res;
@@ -246,7 +246,7 @@ int MPIN_ZZZ_EXTRACT_FACTOR(int sha,octet *CID,int factor,int facbits,octet *TOK
ECP_ZZZ_mapit(&R,&H);
ECP_ZZZ_pinmul(&R,factor,facbits);
- ECP_ZZZ_sub(&P,&R);
+ ECP_ZZZ_sub(&P,&R);
ECP_ZZZ_toOctet(TOKEN,&P,false);
}
@@ -268,7 +268,7 @@ int MPIN_ZZZ_RESTORE_FACTOR(int sha,octet *CID,int factor,int facbits,octet *TOK
ECP_ZZZ_mapit(&R,&H);
ECP_ZZZ_pinmul(&R,factor,facbits);
- ECP_ZZZ_add(&P,&R);
+ ECP_ZZZ_add(&P,&R);
ECP_ZZZ_toOctet(TOKEN,&P,false);
}
@@ -436,7 +436,7 @@ int MPIN_ZZZ_CLIENT_1(int sha,int date,octet *CLIENT_ID,csprng *RNG,octet *X,int
PAIR_ZZZ_G1mul(&P,x); // P=x.H(ID)
ECP_ZZZ_toOctet(xID,&P,false); // xID
PAIR_ZZZ_G1mul(&W,x); // W=x.H(T|ID)
- ECP_ZZZ_add(&P,&W);
+ ECP_ZZZ_add(&P,&W);
}
else
{
@@ -456,9 +456,9 @@ int MPIN_ZZZ_CLIENT_1(int sha,int date,octet *CLIENT_ID,csprng *RNG,octet *X,int
}
if (res==0)
- {
+ {
ECP_ZZZ_toOctet(SEC,&T,false); // V
- }
+ }
return res;
}
@@ -471,7 +471,7 @@ int MPIN_ZZZ_GET_SERVER_SECRET(octet *S,octet *SST)
BIG_XXX_rcopy(r,CURVE_Order_ZZZ);
- ECP2_ZZZ_generator(&Q);
+ ECP2_ZZZ_generator(&Q);
if (res==0)
{
@@ -531,7 +531,7 @@ void MPIN_ZZZ_SERVER_1(int sha,int date,octet *CID,octet *HID,octet *HTID)
mhashit(sha,date,&H,&H);
#endif
ECP_ZZZ_mapit(&R,&H);
- ECP_ZZZ_add(&P,&R);
+ ECP_ZZZ_add(&P,&R);
ECP_ZZZ_toOctet(HTID,&P,false);
}
}
@@ -539,13 +539,13 @@ void MPIN_ZZZ_SERVER_1(int sha,int date,octet *CID,octet *HID,octet *HTID)
/* Implement M-Pin on server side */
int MPIN_ZZZ_SERVER_2(int date,octet *HID,octet *HTID,octet *Y,octet *SST,octet *xID,octet *xCID,octet *mSEC,octet *E,octet *F,octet *Pa)
{
- BIG_XXX px,py,y;
+ BIG_XXX y;
FP12_YYY g;
ECP2_ZZZ Q,sQ;
ECP_ZZZ P,R;
int res=0;
- ECP2_ZZZ_generator(&Q);
+ ECP2_ZZZ_generator(&Q);
// key-escrow less scheme: use Pa instead of Q in pairing computation
// Q left for backward compatiblity
@@ -563,11 +563,11 @@ int MPIN_ZZZ_SERVER_2(int date,octet *HID,octet *HTID,octet *Y,octet *SST,octet
{
if (date)
{
- if (!ECP_ZZZ_fromOctet(&R,xCID)) res=MPIN_INVALID_POINT;
+ if (!ECP_ZZZ_fromOctet(&R,xCID)) res=MPIN_INVALID_POINT;
}
else
{
- if (!ECP_ZZZ_fromOctet(&R,xID)) res=MPIN_INVALID_POINT;
+ if (!ECP_ZZZ_fromOctet(&R,xID)) res=MPIN_INVALID_POINT;
}
}
if (res==0)
@@ -723,7 +723,7 @@ int MPIN_ZZZ_PRECOMPUTE(octet *TOKEN,octet *CID,octet *CP,octet *G1,octet *G2)
}
else
{
- ECP2_ZZZ_generator(&Q);
+ ECP2_ZZZ_generator(&Q);
}
}
if (res==0)
@@ -921,7 +921,7 @@ int MPIN_ZZZ_GET_DVS_KEYPAIR(csprng *R,octet *Z,octet *Pa)
BIG_XXX_invmodp(z,z,r);
- ECP2_ZZZ_generator(&Q);
+ ECP2_ZZZ_generator(&Q);
if (res==0)
{
diff --git a/version3/c/mpin.h b/version3/c/mpin.h
index 98c853c..e0c7227 100644
--- a/version3/c/mpin.h
+++ b/version3/c/mpin.h
@@ -18,7 +18,7 @@ under the License.
*/
/**
- * @file mpin.h
+ * @file mpin_ZZZ.h
* @author Mike Scott
* @brief M-Pin Header file
*
diff --git a/version3/c/mpin192.c b/version3/c/mpin192.c
index 92b50ee..9520ddd 100644
--- a/version3/c/mpin192.c
+++ b/version3/c/mpin192.c
@@ -41,7 +41,7 @@ static void mpin_hash(int sha,FP8_YYY *f, ECP_ZZZ *P,octet *w)
int hlen=sha;
- FP_YYY_redc(x,&(f->a.a.a));
+ FP_YYY_redc(x,&(f->a.a.a));
BIG_XXX_toBytes(&t[0],x);
FP_YYY_redc(x,&(f->a.a.b));
BIG_XXX_toBytes(&t[MODBYTES_XXX],x);
@@ -50,7 +50,7 @@ static void mpin_hash(int sha,FP8_YYY *f, ECP_ZZZ *P,octet *w)
FP_YYY_redc(x,&(f->a.b.b));
BIG_XXX_toBytes(&t[3*MODBYTES_XXX],x);
- FP_YYY_redc(x,&(f->b.a.a));
+ FP_YYY_redc(x,&(f->b.a.a));
BIG_XXX_toBytes(&t[4*MODBYTES_XXX],x);
FP_YYY_redc(x,&(f->b.a.b));
BIG_XXX_toBytes(&t[5*MODBYTES_XXX],x);
@@ -98,9 +98,10 @@ static void map(ECP_ZZZ *P,BIG_XXX u,int cb)
BIG_XXX_mod(x,q);
while (!ECP_ZZZ_setx(P,x,cb))
- {
- BIG_XXX_inc(x,1); BIG_XXX_norm(x);
- }
+ {
+ BIG_XXX_inc(x,1);
+ BIG_XXX_norm(x);
+ }
}
/* returns u derived from P. Random value in range 1 to return value should then be added to u */
@@ -113,7 +114,8 @@ static int unmap(BIG_XXX u,int *cb,ECP_ZZZ *P)
BIG_XXX_copy(u,x);
do
{
- BIG_XXX_dec(u,1); BIG_XXX_norm(u);
+ BIG_XXX_dec(u,1);
+ BIG_XXX_norm(u);
r++;
}
while (!ECP_ZZZ_setx(P,u,s));
@@ -145,7 +147,7 @@ int MPIN_ZZZ_ENCODING(csprng *RNG,octet *E)
if (su<0) su=-su;
su%=2;
map(&W,u,su);
- ECP_ZZZ_sub(&P,&W);
+ ECP_ZZZ_sub(&P,&W);
rn=unmap(v,&sv,&P);
m=RAND_byte(RNG);
@@ -177,7 +179,7 @@ int MPIN_ZZZ_DECODING(octet *D)
sv=(D->val[0]>>1)&1;
map(&W,u,su);
map(&P,v,sv);
- ECP_ZZZ_add(&P,&W);
+ ECP_ZZZ_add(&P,&W);
ECP_ZZZ_toOctet(D,&P,false);
}
@@ -196,7 +198,7 @@ int MPIN_ZZZ_RECOMBINE_G1(octet *R1,octet *R2,octet *R)
}
if (res==0)
{
- ECP_ZZZ_add(&P,&T);
+ ECP_ZZZ_add(&P,&T);
ECP_ZZZ_toOctet(R,&P,false);
}
return res;
@@ -211,7 +213,7 @@ int MPIN_ZZZ_RECOMBINE_G2(octet *W1,octet *W2,octet *W)
if (!ECP4_ZZZ_fromOctet(&T,W2)) res=MPIN_INVALID_POINT;
if (res==0)
{
- ECP4_ZZZ_add(&Q,&T);
+ ECP4_ZZZ_add(&Q,&T);
ECP4_ZZZ_toOctet(W,&Q);
}
return res;
@@ -235,8 +237,8 @@ int MPIN_ZZZ_RANDOM_GENERATE(csprng *RNG,octet* S)
/* Extract PIN from TOKEN for identity CID */
int MPIN_ZZZ_EXTRACT_PIN(int sha,octet *CID,int pin,octet *TOKEN)
{
- pin%=MAXPIN;
- return MPIN_ZZZ_EXTRACT_FACTOR(sha,CID,pin,PBLEN,TOKEN);
+ pin%=MAXPIN;
+ return MPIN_ZZZ_EXTRACT_FACTOR(sha,CID,pin,PBLEN,TOKEN);
}
/* Extract a factor < 32 bits for identity CID */
@@ -254,7 +256,7 @@ int MPIN_ZZZ_EXTRACT_FACTOR(int sha,octet *CID,int factor,int facbits,octet *TOK
ECP_ZZZ_mapit(&R,&H);
ECP_ZZZ_pinmul(&R,factor,facbits);
- ECP_ZZZ_sub(&P,&R);
+ ECP_ZZZ_sub(&P,&R);
ECP_ZZZ_toOctet(TOKEN,&P,false);
}
@@ -333,10 +335,10 @@ int MPIN_ZZZ_GET_G1_MULTIPLE(csprng *RNG,int type,octet *X,octet *G,octet *W)
{
if (!ECP_ZZZ_fromOctet(&P,G)) res=MPIN_INVALID_POINT;
}
- else
- {
- ECP_ZZZ_mapit(&P,G);
- }
+ else
+ {
+ ECP_ZZZ_mapit(&P,G);
+ }
if (res==0)
{
@@ -464,9 +466,9 @@ int MPIN_ZZZ_CLIENT_1(int sha,int date,octet *CLIENT_ID,csprng *RNG,octet *X,int
}
if (res==0)
- {
+ {
ECP_ZZZ_toOctet(SEC,&T,false); // V
- }
+ }
return res;
}
@@ -479,7 +481,7 @@ int MPIN_ZZZ_GET_SERVER_SECRET(octet *S,octet *SST)
BIG_XXX_rcopy(r,CURVE_Order_ZZZ);
- ECP4_ZZZ_generator(&Q);
+ ECP4_ZZZ_generator(&Q);
if (res==0)
{
@@ -521,7 +523,6 @@ void MPIN_ZZZ_SERVER_1(int sha,int date,octet *CID,octet *HID,octet *HTID)
char h[MODBYTES_XXX];
octet H= {0,sizeof(h),h};
ECP_ZZZ P,R;
- BIG_XXX x;
#ifdef USE_ANONYMOUS
ECP_ZZZ_mapit(&P,CID);
@@ -540,7 +541,7 @@ void MPIN_ZZZ_SERVER_1(int sha,int date,octet *CID,octet *HID,octet *HTID)
mhashit(sha,date,&H,&H);
#endif
ECP_ZZZ_mapit(&R,&H);
- ECP_ZZZ_add(&P,&R);
+ ECP_ZZZ_add(&P,&R);
ECP_ZZZ_toOctet(HTID,&P,false);
}
}
@@ -548,13 +549,13 @@ void MPIN_ZZZ_SERVER_1(int sha,int date,octet *CID,octet *HID,octet *HTID)
/* Implement M-Pin on server side */
int MPIN_ZZZ_SERVER_2(int date,octet *HID,octet *HTID,octet *Y,octet *SST,octet *xID,octet *xCID,octet *mSEC,octet *E,octet *F,octet *Pa)
{
- BIG_XXX px,py,y;
+ BIG_XXX y;
FP24_YYY g;
ECP4_ZZZ Q,sQ;
ECP_ZZZ P,R;
int res=0;
- ECP4_ZZZ_generator(&Q);
+ ECP4_ZZZ_generator(&Q);
// key-escrow less scheme: use Pa instead of Q in pairing computation
// Q left for backward compatiblity
@@ -571,13 +572,13 @@ int MPIN_ZZZ_SERVER_2(int date,octet *HID,octet *HTID,octet *Y,octet *SST,octet
if (res==0)
{
- if (date)
+ if (date)
{
- if (!ECP_ZZZ_fromOctet(&R,xCID)) res=MPIN_INVALID_POINT;
+ if (!ECP_ZZZ_fromOctet(&R,xCID)) res=MPIN_INVALID_POINT;
}
else
{
- if (!ECP_ZZZ_fromOctet(&R,xID)) res=MPIN_INVALID_POINT;
+ if (!ECP_ZZZ_fromOctet(&R,xID)) res=MPIN_INVALID_POINT;
}
}
if (res==0)
@@ -720,7 +721,6 @@ int MPIN_ZZZ_PRECOMPUTE(octet *TOKEN,octet *CID,octet *CP,octet *G1,octet *G2)
ECP_ZZZ P,T;
ECP4_ZZZ Q;
FP24_YYY g;
- BIG_XXX x;
int res=0;
if (!ECP_ZZZ_fromOctet(&T,TOKEN)) res=MPIN_INVALID_POINT;
@@ -734,7 +734,7 @@ int MPIN_ZZZ_PRECOMPUTE(octet *TOKEN,octet *CID,octet *CP,octet *G1,octet *G2)
}
else
{
- ECP4_ZZZ_generator(&Q);
+ ECP4_ZZZ_generator(&Q);
}
}
if (res==0)
@@ -758,7 +758,7 @@ int MPIN_ZZZ_PRECOMPUTE(octet *TOKEN,octet *CID,octet *CP,octet *G1,octet *G2)
int MPIN_ZZZ_CLIENT_KEY(int sha,octet *G1,octet *G2,int pin,octet *R,octet *X,octet *H,octet *wCID,octet *CK)
{
FP24_YYY g1,g2;
- FP8_YYY c;
+ FP8_YYY c;
ECP_ZZZ W;
int res=0;
@@ -781,10 +781,10 @@ int MPIN_ZZZ_CLIENT_KEY(int sha,octet *G1,octet *G2,int pin,octet *R,octet *X,oc
FP24_YYY_pinpow(&g2,pin,PBLEN);
FP24_YYY_mul(&g1,&g2);
- PAIR_ZZZ_G1mul(&W,x);
+ PAIR_ZZZ_G1mul(&W,x);
- FP24_YYY_compow(&c,&g1,z,r);
- mpin_hash(sha,&c,&W,CK);
+ FP24_YYY_compow(&c,&g1,z,r);
+ mpin_hash(sha,&c,&W,CK);
}
return res;
@@ -870,10 +870,10 @@ int MPIN_ZZZ_CLIENT(int sha,int date,octet *ID,csprng *RNG,octet *X,int pin,octe
return rtn;
OCT_joctet(&M,pID);
- if (MESSAGE!=NULL)
- {
- OCT_joctet(&M,MESSAGE);
- }
+ if (MESSAGE!=NULL)
+ {
+ OCT_joctet(&M,MESSAGE);
+ }
MPIN_ZZZ_GET_Y(sha,TimeValue,&M,Y);
@@ -900,10 +900,10 @@ int MPIN_ZZZ_SERVER(int sha,int date,octet *HID,octet *HTID,octet *Y,octet *sQ,o
MPIN_ZZZ_SERVER_1(sha,date,ID,HID,HTID);
OCT_joctet(&M,pU);
- if (MESSAGE!=NULL)
- {
- OCT_joctet(&M,MESSAGE);
- }
+ if (MESSAGE!=NULL)
+ {
+ OCT_joctet(&M,MESSAGE);
+ }
MPIN_ZZZ_GET_Y(sha,TimeValue,&M,Y);
@@ -933,7 +933,7 @@ int MPIN_ZZZ_GET_DVS_KEYPAIR(csprng *R,octet *Z,octet *Pa)
BIG_XXX_invmodp(z,z,r);
- ECP4_ZZZ_generator(&Q);
+ ECP4_ZZZ_generator(&Q);
if (res==0)
{
@@ -942,4 +942,4 @@ int MPIN_ZZZ_GET_DVS_KEYPAIR(csprng *R,octet *Z,octet *Pa)
}
return res;
-}
\ No newline at end of file
+}
diff --git a/version3/c/mpin192.h b/version3/c/mpin192.h
index 79f562c..c457bd2 100644
--- a/version3/c/mpin192.h
+++ b/version3/c/mpin192.h
@@ -18,7 +18,7 @@ under the License.
*/
/**
- * @file mpin.h
+ * @file mpin_ZZZ.h
* @author Mike Scott and Kealan McCusker
* @date 2nd June 2015
* @brief M-Pin Header file
diff --git a/version3/c/mpin256.c b/version3/c/mpin256.c
index d8d9ea3..fd91d28 100644
--- a/version3/c/mpin256.c
+++ b/version3/c/mpin256.c
@@ -42,9 +42,9 @@ static void mpin_hash(int sha,FP16_YYY *f, ECP_ZZZ *P,octet *w)
char t[18*MODBYTES_XXX]; // to hold 10 BIGs
int hlen=sha;
- FP_YYY_redc(x,&(f->a.a.a.a));
+ FP_YYY_redc(x,&(f->a.a.a.a));
BIG_XXX_toBytes(&t[0],x);
- FP_YYY_redc(x,&(f->a.a.a.b));
+ FP_YYY_redc(x,&(f->a.a.a.b));
BIG_XXX_toBytes(&t[MODBYTES_XXX],x);
FP_YYY_redc(x,&(f->a.a.b.a));
@@ -62,14 +62,14 @@ static void mpin_hash(int sha,FP16_YYY *f, ECP_ZZZ *P,octet *w)
FP_YYY_redc(x,&(f->a.b.b.b));
BIG_XXX_toBytes(&t[7*MODBYTES_XXX],x);
- FP_YYY_redc(x,&(f->b.a.a.a));
+ FP_YYY_redc(x,&(f->b.a.a.a));
BIG_XXX_toBytes(&t[8*MODBYTES_XXX],x);
- FP_YYY_redc(x,&(f->b.a.a.b));
+ FP_YYY_redc(x,&(f->b.a.a.b));
BIG_XXX_toBytes(&t[9*MODBYTES_XXX],x);
FP_YYY_redc(x,&(f->b.a.b.a));
BIG_XXX_toBytes(&t[10*MODBYTES_XXX],x);
- FP_YYY_redc(x,&(f->b.a.b.b));
+ FP_YYY_redc(x,&(f->b.a.b.b));
BIG_XXX_toBytes(&t[11*MODBYTES_XXX],x);
FP_YYY_redc(x,&(f->b.b.a.a));
@@ -121,9 +121,10 @@ static void map(ECP_ZZZ *P,BIG_XXX u,int cb)
BIG_XXX_mod(x,q);
while (!ECP_ZZZ_setx(P,x,cb))
- {
- BIG_XXX_inc(x,1); BIG_XXX_norm(x);
- }
+ {
+ BIG_XXX_inc(x,1);
+ BIG_XXX_norm(x);
+ }
}
/* returns u derived from P. Random value in range 1 to return value should then be added to u */
@@ -136,7 +137,8 @@ static int unmap(BIG_XXX u,int *cb,ECP_ZZZ *P)
BIG_XXX_copy(u,x);
do
{
- BIG_XXX_dec(u,1); BIG_XXX_norm(u);
+ BIG_XXX_dec(u,1);
+ BIG_XXX_norm(u);
r++;
}
while (!ECP_ZZZ_setx(P,u,s));
@@ -168,7 +170,7 @@ int MPIN_ZZZ_ENCODING(csprng *RNG,octet *E)
if (su<0) su=-su;
su%=2;
map(&W,u,su);
- ECP_ZZZ_sub(&P,&W);
+ ECP_ZZZ_sub(&P,&W);
rn=unmap(v,&sv,&P);
m=RAND_byte(RNG);
@@ -200,7 +202,7 @@ int MPIN_ZZZ_DECODING(octet *D)
sv=(D->val[0]>>1)&1;
map(&W,u,su);
map(&P,v,sv);
- ECP_ZZZ_add(&P,&W);
+ ECP_ZZZ_add(&P,&W);
ECP_ZZZ_toOctet(D,&P,false);
}
@@ -219,7 +221,7 @@ int MPIN_ZZZ_RECOMBINE_G1(octet *R1,octet *R2,octet *R)
}
if (res==0)
{
- ECP_ZZZ_add(&P,&T);
+ ECP_ZZZ_add(&P,&T);
ECP_ZZZ_toOctet(R,&P,false);
}
return res;
@@ -234,7 +236,7 @@ int MPIN_ZZZ_RECOMBINE_G2(octet *W1,octet *W2,octet *W)
if (!ECP8_ZZZ_fromOctet(&T,W2)) res=MPIN_INVALID_POINT;
if (res==0)
{
- ECP8_ZZZ_add(&Q,&T);
+ ECP8_ZZZ_add(&Q,&T);
ECP8_ZZZ_toOctet(W,&Q);
}
return res;
@@ -258,8 +260,8 @@ int MPIN_ZZZ_RANDOM_GENERATE(csprng *RNG,octet* S)
/* Extract PIN from TOKEN for identity CID */
int MPIN_ZZZ_EXTRACT_PIN(int sha,octet *CID,int pin,octet *TOKEN)
{
- pin%=MAXPIN;
- return MPIN_ZZZ_EXTRACT_FACTOR(sha,CID,pin,PBLEN,TOKEN);
+ pin%=MAXPIN;
+ return MPIN_ZZZ_EXTRACT_FACTOR(sha,CID,pin,PBLEN,TOKEN);
}
/* Extract a factor < 32 bits for identity CID */
@@ -277,7 +279,7 @@ int MPIN_ZZZ_EXTRACT_FACTOR(int sha,octet *CID,int factor,int facbits,octet *TOK
ECP_ZZZ_mapit(&R,&H);
ECP_ZZZ_pinmul(&R,factor,facbits);
- ECP_ZZZ_sub(&P,&R);
+ ECP_ZZZ_sub(&P,&R);
ECP_ZZZ_toOctet(TOKEN,&P,false);
}
@@ -299,7 +301,7 @@ int MPIN_ZZZ_RESTORE_FACTOR(int sha,octet *CID,int factor,int facbits,octet *TOK
ECP_ZZZ_mapit(&R,&H);
ECP_ZZZ_pinmul(&R,factor,facbits);
- ECP_ZZZ_add(&P,&R);
+ ECP_ZZZ_add(&P,&R);
ECP_ZZZ_toOctet(TOKEN,&P,false);
}
@@ -356,10 +358,10 @@ int MPIN_ZZZ_GET_G1_MULTIPLE(csprng *RNG,int type,octet *X,octet *G,octet *W)
{
if (!ECP_ZZZ_fromOctet(&P,G)) res=MPIN_INVALID_POINT;
}
- else
- {
- ECP_ZZZ_mapit(&P,G);
- }
+ else
+ {
+ ECP_ZZZ_mapit(&P,G);
+ }
if (res==0)
{
@@ -467,11 +469,11 @@ int MPIN_ZZZ_CLIENT_1(int sha,int date,octet *CLIENT_ID,csprng *RNG,octet *X,int
PAIR_ZZZ_G1mul(&P,x); // P=x.H(ID)
ECP_ZZZ_toOctet(xID,&P,false); // xID
PAIR_ZZZ_G1mul(&W,x); // W=x.H(T|ID)
- ECP_ZZZ_add(&P,&W);
+ ECP_ZZZ_add(&P,&W);
}
else
{
- ECP_ZZZ_add(&P,&W);
+ ECP_ZZZ_add(&P,&W);
PAIR_ZZZ_G1mul(&P,x);
}
if (xCID!=NULL) ECP_ZZZ_toOctet(xCID,&P,false); // U
@@ -487,9 +489,9 @@ int MPIN_ZZZ_CLIENT_1(int sha,int date,octet *CLIENT_ID,csprng *RNG,octet *X,int
}
if (res==0)
- {
+ {
ECP_ZZZ_toOctet(SEC,&T,false); // V
- }
+ }
return res;
}
@@ -502,7 +504,7 @@ int MPIN_ZZZ_GET_SERVER_SECRET(octet *S,octet *SST)
BIG_XXX_rcopy(r,CURVE_Order_ZZZ);
- ECP8_ZZZ_generator(&Q);
+ ECP8_ZZZ_generator(&Q);
if (res==0)
{
@@ -544,7 +546,6 @@ void MPIN_ZZZ_SERVER_1(int sha,int date,octet *CID,octet *HID,octet *HTID)
char h[MODBYTES_XXX];
octet H= {0,sizeof(h),h};
ECP_ZZZ P,R;
- BIG_XXX x;
#ifdef USE_ANONYMOUS
ECP_ZZZ_mapit(&P,CID);
@@ -563,7 +564,7 @@ void MPIN_ZZZ_SERVER_1(int sha,int date,octet *CID,octet *HID,octet *HTID)
mhashit(sha,date,&H,&H);
#endif
ECP_ZZZ_mapit(&R,&H);
- ECP_ZZZ_add(&P,&R);
+ ECP_ZZZ_add(&P,&R);
ECP_ZZZ_toOctet(HTID,&P,false);
}
}
@@ -571,13 +572,13 @@ void MPIN_ZZZ_SERVER_1(int sha,int date,octet *CID,octet *HID,octet *HTID)
/* Implement M-Pin on server side */
int MPIN_ZZZ_SERVER_2(int date,octet *HID,octet *HTID,octet *Y,octet *SST,octet *xID,octet *xCID,octet *mSEC,octet *E,octet *F,octet *Pa)
{
- BIG_XXX px,py,y;
+ BIG_XXX y;
FP48_YYY g;
ECP8_ZZZ Q,sQ;
ECP_ZZZ P,R;
int res=0;
- ECP8_ZZZ_generator(&Q);
+ ECP8_ZZZ_generator(&Q);
// key-escrow less scheme: use Pa instead of Q in pairing computation
// Q left for backward compatiblity
@@ -594,13 +595,13 @@ int MPIN_ZZZ_SERVER_2(int date,octet *HID,octet *HTID,octet *Y,octet *SST,octet
if (res==0)
{
- if (date)
+ if (date)
{
- if (!ECP_ZZZ_fromOctet(&R,xCID)) res=MPIN_INVALID_POINT;
+ if (!ECP_ZZZ_fromOctet(&R,xCID)) res=MPIN_INVALID_POINT;
}
else
{
- if (!ECP_ZZZ_fromOctet(&R,xID)) res=MPIN_INVALID_POINT;
+ if (!ECP_ZZZ_fromOctet(&R,xID)) res=MPIN_INVALID_POINT;
}
}
if (res==0)
@@ -742,7 +743,6 @@ int MPIN_ZZZ_PRECOMPUTE(octet *TOKEN,octet *CID,octet *CP,octet *G1,octet *G2)
ECP_ZZZ P,T;
ECP8_ZZZ Q;
FP48_YYY g;
- BIG_XXX x;
int res=0;
if (!ECP_ZZZ_fromOctet(&T,TOKEN)) res=MPIN_INVALID_POINT;
@@ -756,7 +756,7 @@ int MPIN_ZZZ_PRECOMPUTE(octet *TOKEN,octet *CID,octet *CP,octet *G1,octet *G2)
}
else
{
- ECP8_ZZZ_generator(&Q);
+ ECP8_ZZZ_generator(&Q);
}
}
if (res==0)
@@ -780,7 +780,7 @@ int MPIN_ZZZ_PRECOMPUTE(octet *TOKEN,octet *CID,octet *CP,octet *G1,octet *G2)
int MPIN_ZZZ_CLIENT_KEY(int sha,octet *G1,octet *G2,int pin,octet *R,octet *X,octet *H,octet *wCID,octet *CK)
{
FP48_YYY g1,g2;
- FP16_YYY c;
+ FP16_YYY c;
ECP_ZZZ W;
int res=0;
@@ -803,10 +803,10 @@ int MPIN_ZZZ_CLIENT_KEY(int sha,octet *G1,octet *G2,int pin,octet *R,octet *X,oc
FP48_YYY_pinpow(&g2,pin,PBLEN);
FP48_YYY_mul(&g1,&g2);
- PAIR_ZZZ_G1mul(&W,x);
+ PAIR_ZZZ_G1mul(&W,x);
- FP48_YYY_compow(&c,&g1,z,r);
- mpin_hash(sha,&c,&W,CK);
+ FP48_YYY_compow(&c,&g1,z,r);
+ mpin_hash(sha,&c,&W,CK);
}
return res;
@@ -892,10 +892,10 @@ int MPIN_ZZZ_CLIENT(int sha,int date,octet *ID,csprng *RNG,octet *X,int pin,octe
return rtn;
OCT_joctet(&M,pID);
- if (MESSAGE!=NULL)
- {
- OCT_joctet(&M,MESSAGE);
- }
+ if (MESSAGE!=NULL)
+ {
+ OCT_joctet(&M,MESSAGE);
+ }
MPIN_ZZZ_GET_Y(sha,TimeValue,&M,Y);
@@ -922,10 +922,10 @@ int MPIN_ZZZ_SERVER(int sha,int date,octet *HID,octet *HTID,octet *Y,octet *sQ,o
MPIN_ZZZ_SERVER_1(sha,date,ID,HID,HTID);
OCT_joctet(&M,pU);
- if (MESSAGE!=NULL)
- {
- OCT_joctet(&M,MESSAGE);
- }
+ if (MESSAGE!=NULL)
+ {
+ OCT_joctet(&M,MESSAGE);
+ }
MPIN_ZZZ_GET_Y(sha,TimeValue,&M,Y);
@@ -955,7 +955,7 @@ int MPIN_ZZZ_GET_DVS_KEYPAIR(csprng *R,octet *Z,octet *Pa)
BIG_XXX_invmodp(z,z,r);
- ECP8_ZZZ_generator(&Q);
+ ECP8_ZZZ_generator(&Q);
if (res==0)
{
diff --git a/version3/c/mpin256.h b/version3/c/mpin256.h
index 46ba21a..3307e57 100644
--- a/version3/c/mpin256.h
+++ b/version3/c/mpin256.h
@@ -18,7 +18,7 @@ under the License.
*/
/**
- * @file mpin.h
+ * @file mpin_ZZZ.h
* @author Mike Scott and Kealan McCusker
* @date 2nd June 2015
* @brief M-Pin Header file
diff --git a/version3/c/oct.c b/version3/c/oct.c
index 866c96c..cb9c067 100644
--- a/version3/c/oct.c
+++ b/version3/c/oct.c
@@ -93,7 +93,7 @@ int OCT_ncomp(octet *x,octet *y,int n)
res|=(int)(x->val[i]^y->val[i]);
}
if (res==0) return 1;
- return 0;
+ return 0;
}
/* Shift octet to the left by n bytes. Leftmost bytes disappear */
diff --git a/version3/c/pair.c b/version3/c/pair.c
index 47265fa..8faf54a 100644
--- a/version3/c/pair.c
+++ b/version3/c/pair.c
@@ -131,20 +131,20 @@ static void PAIR_ZZZ_line(FP12_YYY *v,ECP2_ZZZ *A,ECP2_ZZZ *B,FP_YYY *Qx,FP_YYY
}
FP12_YYY_from_FP4s(v,&a,&b,&c);
- v->type=FP_SPARSER;
+ v->type=AMCL_AMCL_FP_SPARSER;
}
/* prepare ate parameter, n=6u+2 (BN) or n=u (BLS), n3=3*n */
int PAIR_ZZZ_nbits(BIG_XXX n3,BIG_XXX n)
{
- BIG_XXX x;
+ BIG_XXX x;
BIG_XXX_rcopy(x,CURVE_Bnx_ZZZ);
#if PAIRING_FRIENDLY_ZZZ==BN
BIG_XXX_pmul(n,x,6);
#if SIGN_OF_X_ZZZ==POSITIVEX
- BIG_XXX_inc(n,2);
+ BIG_XXX_inc(n,2);
#else
BIG_XXX_dec(n,2);
#endif
@@ -154,8 +154,8 @@ int PAIR_ZZZ_nbits(BIG_XXX n3,BIG_XXX n)
#endif
BIG_XXX_norm(n);
- BIG_XXX_pmul(n3,n,3);
- BIG_XXX_norm(n3);
+ BIG_XXX_pmul(n3,n,3);
+ BIG_XXX_norm(n3);
return BIG_XXX_nbits(n3);
}
@@ -172,97 +172,98 @@ int PAIR_ZZZ_nbits(BIG_XXX n3,BIG_XXX n)
/* prepare for multi-pairing */
void PAIR_ZZZ_initmp(FP12_YYY r[])
{
- int i;
- for (i=ATE_BITS_ZZZ-1; i>=0; i--)
- FP12_YYY_one(&r[i]);
- return;
+ int i;
+ for (i=ATE_BITS_ZZZ-1; i>=0; i--)
+ FP12_YYY_one(&r[i]);
+ return;
}
/* basic Miller loop */
void PAIR_ZZZ_miller(FP12_YYY *res,FP12_YYY r[])
{
- int i;
+ int i;
FP12_YYY_one(res);
- for (i=ATE_BITS_ZZZ-1; i>=1; i--)
- {
- FP12_YYY_sqr(res,res);
- FP12_YYY_ssmul(res,&r[i]);
- }
+ for (i=ATE_BITS_ZZZ-1; i>=1; i--)
+ {
+ FP12_YYY_sqr(res,res);
+ FP12_YYY_ssmul(res,&r[i]);
+ }
#if SIGN_OF_X_ZZZ==NEGATIVEX
FP12_YYY_conj(res,res);
#endif
- FP12_YYY_ssmul(res,&r[0]);
- return;
+ FP12_YYY_ssmul(res,&r[0]);
+ return;
}
/* Accumulate another set of line functions for n-pairing */
void PAIR_ZZZ_another(FP12_YYY r[],ECP2_ZZZ* PV,ECP_ZZZ* QV)
{
- int i,j,nb,bt;
- BIG_XXX x,n,n3;
+ int i,nb,bt;
+ BIG_XXX n,n3;
FP12_YYY lv,lv2;
ECP2_ZZZ A,NP,P;
- ECP_ZZZ Q;
- FP_YYY Qx,Qy;
+ ECP_ZZZ Q;
+ FP_YYY Qx,Qy;
#if PAIRING_FRIENDLY_ZZZ==BN
- ECP2_ZZZ K;
+ ECP2_ZZZ K;
FP2_YYY X;
FP_YYY_rcopy(&Qx,Fra_YYY);
FP_YYY_rcopy(&Qy,Frb_YYY);
FP2_YYY_from_FPs(&X,&Qx,&Qy);
#if SEXTIC_TWIST_ZZZ==M_TYPE
- FP2_YYY_inv(&X,&X);
- FP2_YYY_norm(&X);
+ FP2_YYY_inv(&X,&X);
+ FP2_YYY_norm(&X);
#endif
#endif
- nb=PAIR_ZZZ_nbits(n3,n);
+ nb=PAIR_ZZZ_nbits(n3,n);
- ECP2_ZZZ_copy(&P,PV);
- ECP_ZZZ_copy(&Q,QV);
+ ECP2_ZZZ_copy(&P,PV);
+ ECP_ZZZ_copy(&Q,QV);
- ECP2_ZZZ_affine(&P);
- ECP_ZZZ_affine(&Q);
+ ECP2_ZZZ_affine(&P);
+ ECP_ZZZ_affine(&Q);
- FP_YYY_copy(&Qx,&(Q.x));
- FP_YYY_copy(&Qy,&(Q.y));
+ FP_YYY_copy(&Qx,&(Q.x));
+ FP_YYY_copy(&Qy,&(Q.y));
- ECP2_ZZZ_copy(&A,&P);
- ECP2_ZZZ_copy(&NP,&P); ECP2_ZZZ_neg(&NP);
+ ECP2_ZZZ_copy(&A,&P);
+ ECP2_ZZZ_copy(&NP,&P);
+ ECP2_ZZZ_neg(&NP);
- for (i=nb-2; i>=1; i--)
- {
- PAIR_ZZZ_line(&lv,&A,&A,&Qx,&Qy);
+ for (i=nb-2; i>=1; i--)
+ {
+ PAIR_ZZZ_line(&lv,&A,&A,&Qx,&Qy);
- bt=BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i); // bt=BIG_bit(n,i);
- if (bt==1)
- {
- PAIR_ZZZ_line(&lv2,&A,&P,&Qx,&Qy);
- FP12_YYY_smul(&lv,&lv2);
- }
- if (bt==-1)
- {
- PAIR_ZZZ_line(&lv2,&A,&NP,&Qx,&Qy);
- FP12_YYY_smul(&lv,&lv2);
- }
- FP12_YYY_ssmul(&r[i],&lv);
- }
+ bt=BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i); // bt=BIG_bit(n,i);
+ if (bt==1)
+ {
+ PAIR_ZZZ_line(&lv2,&A,&P,&Qx,&Qy);
+ FP12_YYY_smul(&lv,&lv2);
+ }
+ if (bt==-1)
+ {
+ PAIR_ZZZ_line(&lv2,&A,&NP,&Qx,&Qy);
+ FP12_YYY_smul(&lv,&lv2);
+ }
+ FP12_YYY_ssmul(&r[i],&lv);
+ }
#if PAIRING_FRIENDLY_ZZZ==BN
#if SIGN_OF_X_ZZZ==NEGATIVEX
- ECP2_ZZZ_neg(&A);
+ ECP2_ZZZ_neg(&A);
#endif
- ECP2_ZZZ_copy(&K,&P);
- ECP2_ZZZ_frob(&K,&X);
- PAIR_ZZZ_line(&lv,&A,&K,&Qx,&Qy);
- ECP2_ZZZ_frob(&K,&X);
- ECP2_ZZZ_neg(&K);
- PAIR_ZZZ_line(&lv2,&A,&K,&Qx,&Qy);
- FP12_YYY_smul(&lv,&lv2);
- FP12_YYY_ssmul(&r[0],&lv);
+ ECP2_ZZZ_copy(&K,&P);
+ ECP2_ZZZ_frob(&K,&X);
+ PAIR_ZZZ_line(&lv,&A,&K,&Qx,&Qy);
+ ECP2_ZZZ_frob(&K,&X);
+ ECP2_ZZZ_neg(&K);
+ PAIR_ZZZ_line(&lv2,&A,&K,&Qx,&Qy);
+ FP12_YYY_smul(&lv,&lv2);
+ FP12_YYY_ssmul(&r[0],&lv);
#endif
}
@@ -270,12 +271,11 @@ void PAIR_ZZZ_another(FP12_YYY r[],ECP2_ZZZ* PV,ECP_ZZZ* QV)
/* Optimal R-ate pairing r=e(P,Q) */
void PAIR_ZZZ_ate(FP12_YYY *r,ECP2_ZZZ *P1,ECP_ZZZ *Q1)
{
-
- BIG_XXX x,n,n3;
+ BIG_XXX n,n3;
FP_YYY Qx,Qy;
int i,nb,bt;
ECP2_ZZZ A,NP,P;
- ECP_ZZZ Q;
+ ECP_ZZZ Q;
FP12_YYY lv,lv2;
#if PAIRING_FRIENDLY_ZZZ==BN
ECP2_ZZZ KA;
@@ -291,46 +291,47 @@ void PAIR_ZZZ_ate(FP12_YYY *r,ECP2_ZZZ *P1,ECP_ZZZ *Q1)
#endif
#endif
- nb=PAIR_ZZZ_nbits(n3,n);
+ nb=PAIR_ZZZ_nbits(n3,n);
- ECP2_ZZZ_copy(&P,P1);
- ECP_ZZZ_copy(&Q,Q1);
+ ECP2_ZZZ_copy(&P,P1);
+ ECP_ZZZ_copy(&Q,Q1);
- ECP2_ZZZ_affine(&P);
- ECP_ZZZ_affine(&Q);
+ ECP2_ZZZ_affine(&P);
+ ECP_ZZZ_affine(&Q);
FP_YYY_copy(&Qx,&(Q.x));
FP_YYY_copy(&Qy,&(Q.y));
ECP2_ZZZ_copy(&A,&P);
- ECP2_ZZZ_copy(&NP,&P); ECP2_ZZZ_neg(&NP);
+ ECP2_ZZZ_copy(&NP,&P);
+ ECP2_ZZZ_neg(&NP);
FP12_YYY_one(r);
/* Main Miller Loop */
for (i=nb-2; i>=1; i--) //0
{
- FP12_YYY_sqr(r,r);
+ FP12_YYY_sqr(r,r);
PAIR_ZZZ_line(&lv,&A,&A,&Qx,&Qy);
- bt=BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i); // bt=BIG_bit(n,i);
+ bt=BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i); // bt=BIG_bit(n,i);
if (bt==1)
{
PAIR_ZZZ_line(&lv2,&A,&P,&Qx,&Qy);
FP12_YYY_smul(&lv,&lv2);
}
- if (bt==-1)
- {
+ if (bt==-1)
+ {
PAIR_ZZZ_line(&lv2,&A,&NP,&Qx,&Qy);
FP12_YYY_smul(&lv,&lv2);
- }
- FP12_YYY_ssmul(r,&lv);
+ }
+ FP12_YYY_ssmul(r,&lv);
}
#if SIGN_OF_X_ZZZ==NEGATIVEX
- FP12_YYY_conj(r,r);
+ FP12_YYY_conj(r,r);
#endif
/* R-ate fixup required for BN curves */
@@ -346,7 +347,7 @@ void PAIR_ZZZ_ate(FP12_YYY *r,ECP2_ZZZ *P1,ECP_ZZZ *Q1)
ECP2_ZZZ_frob(&KA,&X);
ECP2_ZZZ_neg(&KA);
PAIR_ZZZ_line(&lv2,&A,&KA,&Qx,&Qy);
- FP12_YYY_smul(&lv,&lv2);
+ FP12_YYY_smul(&lv,&lv2);
FP12_YYY_ssmul(r,&lv);
#endif
}
@@ -354,11 +355,11 @@ void PAIR_ZZZ_ate(FP12_YYY *r,ECP2_ZZZ *P1,ECP_ZZZ *Q1)
/* Optimal R-ate double pairing e(P,Q).e(R,S) */
void PAIR_ZZZ_double_ate(FP12_YYY *r,ECP2_ZZZ *P1,ECP_ZZZ *Q1,ECP2_ZZZ *R1,ECP_ZZZ *S1)
{
- BIG_XXX x,n,n3;
+ BIG_XXX n,n3;
FP_YYY Qx,Qy,Sx,Sy;
int i,nb,bt;
ECP2_ZZZ A,B,NP,NR,P,R;
- ECP_ZZZ Q,S;
+ ECP_ZZZ Q,S;
FP12_YYY lv,lv2;
#if PAIRING_FRIENDLY_ZZZ==BN
FP2_YYY X;
@@ -373,19 +374,19 @@ void PAIR_ZZZ_double_ate(FP12_YYY *r,ECP2_ZZZ *P1,ECP_ZZZ *Q1,ECP2_ZZZ *R1,ECP_Z
FP2_YYY_norm(&X);
#endif
#endif
- nb=PAIR_ZZZ_nbits(n3,n);
+ nb=PAIR_ZZZ_nbits(n3,n);
- ECP2_ZZZ_copy(&P,P1);
- ECP_ZZZ_copy(&Q,Q1);
+ ECP2_ZZZ_copy(&P,P1);
+ ECP_ZZZ_copy(&Q,Q1);
- ECP2_ZZZ_affine(&P);
- ECP_ZZZ_affine(&Q);
+ ECP2_ZZZ_affine(&P);
+ ECP_ZZZ_affine(&Q);
- ECP2_ZZZ_copy(&R,R1);
- ECP_ZZZ_copy(&S,S1);
+ ECP2_ZZZ_copy(&R,R1);
+ ECP_ZZZ_copy(&S,S1);
- ECP2_ZZZ_affine(&R);
- ECP_ZZZ_affine(&S);
+ ECP2_ZZZ_affine(&R);
+ ECP_ZZZ_affine(&S);
FP_YYY_copy(&Qx,&(Q.x));
FP_YYY_copy(&Qy,&(Q.y));
@@ -396,8 +397,10 @@ void PAIR_ZZZ_double_ate(FP12_YYY *r,ECP2_ZZZ *P1,ECP_ZZZ *Q1,ECP2_ZZZ *R1,ECP_Z
ECP2_ZZZ_copy(&A,&P);
ECP2_ZZZ_copy(&B,&R);
- ECP2_ZZZ_copy(&NP,&P); ECP2_ZZZ_neg(&NP);
- ECP2_ZZZ_copy(&NR,&R); ECP2_ZZZ_neg(&NR);
+ ECP2_ZZZ_copy(&NP,&P);
+ ECP2_ZZZ_neg(&NP);
+ ECP2_ZZZ_copy(&NR,&R);
+ ECP2_ZZZ_neg(&NR);
FP12_YYY_one(r);
@@ -407,24 +410,24 @@ void PAIR_ZZZ_double_ate(FP12_YYY *r,ECP2_ZZZ *P1,ECP_ZZZ *Q1,ECP2_ZZZ *R1,ECP_Z
FP12_YYY_sqr(r,r);
PAIR_ZZZ_line(&lv,&A,&A,&Qx,&Qy);
PAIR_ZZZ_line(&lv2,&B,&B,&Sx,&Sy);
- FP12_YYY_smul(&lv,&lv2);
+ FP12_YYY_smul(&lv,&lv2);
FP12_YYY_ssmul(r,&lv);
- bt=BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i); // bt=BIG_bit(n,i);
+ bt=BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i); // bt=BIG_bit(n,i);
if (bt==1)
{
PAIR_ZZZ_line(&lv,&A,&P,&Qx,&Qy);
PAIR_ZZZ_line(&lv2,&B,&R,&Sx,&Sy);
- FP12_YYY_smul(&lv,&lv2);
+ FP12_YYY_smul(&lv,&lv2);
FP12_YYY_ssmul(r,&lv);
}
- if (bt==-1)
- {
+ if (bt==-1)
+ {
PAIR_ZZZ_line(&lv,&A,&NP,&Qx,&Qy);
PAIR_ZZZ_line(&lv2,&B,&NR,&Sx,&Sy);
- FP12_YYY_smul(&lv,&lv2);
+ FP12_YYY_smul(&lv,&lv2);
FP12_YYY_ssmul(r,&lv);
- }
+ }
}
@@ -432,7 +435,7 @@ void PAIR_ZZZ_double_ate(FP12_YYY *r,ECP2_ZZZ *P1,ECP_ZZZ *Q1,ECP2_ZZZ *R1,ECP_Z
/* R-ate fixup required for BN curves */
#if SIGN_OF_X_ZZZ==NEGATIVEX
- FP12_YYY_conj(r,r);
+ FP12_YYY_conj(r,r);
#endif
#if PAIRING_FRIENDLY_ZZZ==BN
@@ -448,7 +451,7 @@ void PAIR_ZZZ_double_ate(FP12_YYY *r,ECP2_ZZZ *P1,ECP_ZZZ *Q1,ECP2_ZZZ *R1,ECP_Z
ECP2_ZZZ_frob(&K,&X);
ECP2_ZZZ_neg(&K);
PAIR_ZZZ_line(&lv2,&A,&K,&Qx,&Qy);
- FP12_YYY_smul(&lv,&lv2);
+ FP12_YYY_smul(&lv,&lv2);
FP12_YYY_ssmul(r,&lv);
ECP2_ZZZ_copy(&K,&R);
@@ -457,7 +460,7 @@ void PAIR_ZZZ_double_ate(FP12_YYY *r,ECP2_ZZZ *P1,ECP_ZZZ *Q1,ECP2_ZZZ *R1,ECP_Z
ECP2_ZZZ_frob(&K,&X);
ECP2_ZZZ_neg(&K);
PAIR_ZZZ_line(&lv2,&B,&K,&Sx,&Sy);
- FP12_YYY_smul(&lv,&lv2);
+ FP12_YYY_smul(&lv,&lv2);
FP12_YYY_ssmul(r,&lv);
#endif
}
@@ -487,11 +490,11 @@ void PAIR_ZZZ_fexp(FP12_YYY *r)
FP12_YYY_frob(r,&X);
FP12_YYY_mul(r,&t0);
- if (FP12_YYY_isunity(r))
- {
- FP12_YYY_zero(r);
- return;
- }
+ if (FP12_YYY_isunity(r))
+ {
+ FP12_YYY_zero(r);
+ return;
+ }
/* Hard part of final exp - see Duquesne & Ghamman eprint 2015/192.pdf */
#if PAIRING_FRIENDLY_ZZZ==BN
@@ -724,7 +727,8 @@ void PAIR_ZZZ_G1mul(ECP_ZZZ *P,BIG_XXX e)
BIG_XXX_rcopy(q,CURVE_Order_ZZZ);
glv(u,e);
- ECP_ZZZ_copy(&Q,P); ECP_ZZZ_affine(&Q);
+ ECP_ZZZ_copy(&Q,P);
+ ECP_ZZZ_affine(&Q);
FP_YYY_rcopy(&cru,CURVE_Cru_ZZZ);
FP_YYY_mul(&(Q.x),&(Q.x),&cru);
@@ -795,7 +799,7 @@ void PAIR_ZZZ_G2mul(ECP2_ZZZ *P,BIG_XXX e)
BIG_XXX_copy(u[i],x);
ECP2_ZZZ_neg(&Q[i]);
}
- BIG_XXX_norm(u[i]);
+ BIG_XXX_norm(u[i]);
}
ECP2_ZZZ_mul4(P,Q,u);
diff --git a/version3/c/pair.h b/version3/c/pair.h
index f03b329..a7350bd 100644
--- a/version3/c/pair.h
+++ b/version3/c/pair.h
@@ -18,7 +18,7 @@
*/
/**
- * @file pair.h
+ * @file pair_ZZZ.h
* @author Mike Scott
* @brief PAIR Header File
*
diff --git a/version3/c/pair192.c b/version3/c/pair192.c
index 790a2d7..3e6f966 100644
--- a/version3/c/pair192.c
+++ b/version3/c/pair192.c
@@ -27,124 +27,124 @@ under the License.
/* Line function */
static void PAIR_ZZZ_line(FP24_YYY *v,ECP4_ZZZ *A,ECP4_ZZZ *B,FP_YYY *Qx,FP_YYY *Qy)
{
- FP4_YYY X1,Y1,T1,T2;
- FP4_YYY XX,YY,ZZ,YZ;
+ FP4_YYY X1,Y1,T1,T2;
+ FP4_YYY XX,YY,ZZ,YZ;
FP8_YYY a,b,c;
- if (A==B)
+ if (A==B)
{
/* doubling */
- FP4_YYY_copy(&XX,&(A->x)); //FP4_YYY XX=new FP4_YYY(A.getx()); //X
- FP4_YYY_copy(&YY,&(A->y)); //FP4_YYY YY=new FP4_YYY(A.gety()); //Y
- FP4_YYY_copy(&ZZ,&(A->z)); //FP4_YYY ZZ=new FP4_YYY(A.getz()); //Z
+ FP4_YYY_copy(&XX,&(A->x)); //FP4_YYY XX=new FP4_YYY(A.getx()); //X
+ FP4_YYY_copy(&YY,&(A->y)); //FP4_YYY YY=new FP4_YYY(A.gety()); //Y
+ FP4_YYY_copy(&ZZ,&(A->z)); //FP4_YYY ZZ=new FP4_YYY(A.getz()); //Z
- FP4_YYY_copy(&YZ,&YY); //FP4_YYY YZ=new FP4_YYY(YY); //Y
- FP4_YYY_mul(&YZ,&YZ,&ZZ); //YZ.mul(ZZ); //YZ
- FP4_YYY_sqr(&XX,&XX); //XX.sqr(); //X^2
- FP4_YYY_sqr(&YY,&YY); //YY.sqr(); //Y^2
- FP4_YYY_sqr(&ZZ,&ZZ); //ZZ.sqr(); //Z^2
-
- FP4_YYY_imul(&YZ,&YZ,4); //YZ.imul(4);
- FP4_YYY_neg(&YZ,&YZ); //YZ.neg();
- FP4_YYY_norm(&YZ); //YZ.norm(); //-4YZ
+ FP4_YYY_copy(&YZ,&YY); //FP4_YYY YZ=new FP4_YYY(YY); //Y
+ FP4_YYY_mul(&YZ,&YZ,&ZZ); //YZ.mul(ZZ); //YZ
+ FP4_YYY_sqr(&XX,&XX); //XX.sqr(); //X^2
+ FP4_YYY_sqr(&YY,&YY); //YY.sqr(); //Y^2
+ FP4_YYY_sqr(&ZZ,&ZZ); //ZZ.sqr(); //Z^2
- FP4_YYY_imul(&XX,&XX,6); //6X^2
- FP4_YYY_qmul(&XX,&XX,Qx); //6X^2.Xs
+ FP4_YYY_imul(&YZ,&YZ,4); //YZ.imul(4);
+ FP4_YYY_neg(&YZ,&YZ); //YZ.neg();
+ FP4_YYY_norm(&YZ); //YZ.norm(); //-4YZ
- FP4_YYY_imul(&ZZ,&ZZ,3*CURVE_B_I_ZZZ); //3Bz^2
+ FP4_YYY_imul(&XX,&XX,6); //6X^2
+ FP4_YYY_qmul(&XX,&XX,Qx); //6X^2.Xs
- FP4_YYY_qmul(&YZ,&YZ,Qy); //-4YZ.Ys
+ FP4_YYY_imul(&ZZ,&ZZ,3*CURVE_B_I_ZZZ); //3Bz^2
+
+ FP4_YYY_qmul(&YZ,&YZ,Qy); //-4YZ.Ys
#if SEXTIC_TWIST_ZZZ==D_TYPE
- FP4_YYY_div_2i(&ZZ); //6(b/i)z^2
+ FP4_YYY_div_2i(&ZZ); //6(b/i)z^2
#endif
#if SEXTIC_TWIST_ZZZ==M_TYPE
- FP4_YYY_times_i(&ZZ);
- FP4_YYY_add(&ZZ,&ZZ,&ZZ); // 6biz^2
- FP4_YYY_times_i(&YZ);
- FP4_YYY_norm(&YZ);
+ FP4_YYY_times_i(&ZZ);
+ FP4_YYY_add(&ZZ,&ZZ,&ZZ); // 6biz^2
+ FP4_YYY_times_i(&YZ);
+ FP4_YYY_norm(&YZ);
#endif
- FP4_YYY_norm(&ZZ); // 6bi.Z^2
+ FP4_YYY_norm(&ZZ); // 6bi.Z^2
- FP4_YYY_add(&YY,&YY,&YY); // 2y^2
- FP4_YYY_sub(&ZZ,&ZZ,&YY); //
- FP4_YYY_norm(&ZZ); // 6b.Z^2-2Y^2
+ FP4_YYY_add(&YY,&YY,&YY); // 2y^2
+ FP4_YYY_sub(&ZZ,&ZZ,&YY); //
+ FP4_YYY_norm(&ZZ); // 6b.Z^2-2Y^2
- FP8_YYY_from_FP4s(&a,&YZ,&ZZ); // -4YZ.Ys | 6b.Z^2-2Y^2 | 6X^2.Xs
+ FP8_YYY_from_FP4s(&a,&YZ,&ZZ); // -4YZ.Ys | 6b.Z^2-2Y^2 | 6X^2.Xs
#if SEXTIC_TWIST_ZZZ==D_TYPE
- FP8_YYY_from_FP4(&b,&XX);
- FP8_YYY_zero(&c);
+ FP8_YYY_from_FP4(&b,&XX);
+ FP8_YYY_zero(&c);
#endif
#if SEXTIC_TWIST_ZZZ==M_TYPE
- FP8_YYY_zero(&b);
- FP8_YYY_from_FP4H(&c,&XX);
+ FP8_YYY_zero(&b);
+ FP8_YYY_from_FP4H(&c,&XX);
#endif
- ECP4_ZZZ_dbl(A); //A.dbl();
+ ECP4_ZZZ_dbl(A); //A.dbl();
}
else
{
/* addition */
- FP4_YYY_copy(&X1,&(A->x)); //FP4_YYY X1=new FP4_YYY(A.getx()); // X1
- FP4_YYY_copy(&Y1,&(A->y)); //FP4_YYY Y1=new FP4_YYY(A.gety()); // Y1
- FP4_YYY_copy(&T1,&(A->z)); //FP4_YYY T1=new FP4_YYY(A.getz()); // Z1
-
- FP4_YYY_copy(&T2,&T1); //FP4_YYY T2=new FP4_YYY(A.getz()); // Z1
+ FP4_YYY_copy(&X1,&(A->x)); //FP4_YYY X1=new FP4_YYY(A.getx()); // X1
+ FP4_YYY_copy(&Y1,&(A->y)); //FP4_YYY Y1=new FP4_YYY(A.gety()); // Y1
+ FP4_YYY_copy(&T1,&(A->z)); //FP4_YYY T1=new FP4_YYY(A.getz()); // Z1
+
+ FP4_YYY_copy(&T2,&T1); //FP4_YYY T2=new FP4_YYY(A.getz()); // Z1
- FP4_YYY_mul(&T1,&T1,&(B->y)); //T1.mul(B.gety()); // T1=Z1.Y2
- FP4_YYY_mul(&T2,&T2,&(B->x)); //T2.mul(B.getx()); // T2=Z1.X2
+ FP4_YYY_mul(&T1,&T1,&(B->y)); //T1.mul(B.gety()); // T1=Z1.Y2
+ FP4_YYY_mul(&T2,&T2,&(B->x)); //T2.mul(B.getx()); // T2=Z1.X2
- FP4_YYY_sub(&X1,&X1,&T2); //X1.sub(T2);
- FP4_YYY_norm(&X1); //X1.norm(); // X1=X1-Z1.X2
- FP4_YYY_sub(&Y1,&Y1,&T1); //Y1.sub(T1);
- FP4_YYY_norm(&Y1); //Y1.norm(); // Y1=Y1-Z1.Y2
+ FP4_YYY_sub(&X1,&X1,&T2); //X1.sub(T2);
+ FP4_YYY_norm(&X1); //X1.norm(); // X1=X1-Z1.X2
+ FP4_YYY_sub(&Y1,&Y1,&T1); //Y1.sub(T1);
+ FP4_YYY_norm(&Y1); //Y1.norm(); // Y1=Y1-Z1.Y2
- FP4_YYY_copy(&T1,&X1); //T1.copy(X1); // T1=X1-Z1.X2
+ FP4_YYY_copy(&T1,&X1); //T1.copy(X1); // T1=X1-Z1.X2
- FP4_YYY_qmul(&X1,&X1,Qy); //X1.pmul(Qy); // X1=(X1-Z1.X2).Ys
+ FP4_YYY_qmul(&X1,&X1,Qy); //X1.pmul(Qy); // X1=(X1-Z1.X2).Ys
#if SEXTIC_TWIST_ZZZ==M_TYPE
- FP4_YYY_times_i(&X1);
- FP4_YYY_norm(&X1);
+ FP4_YYY_times_i(&X1);
+ FP4_YYY_norm(&X1);
#endif
- FP4_YYY_mul(&T1,&T1,&(B->y)); //T1.mul(B.gety()); // T1=(X1-Z1.X2).Y2
+ FP4_YYY_mul(&T1,&T1,&(B->y)); //T1.mul(B.gety()); // T1=(X1-Z1.X2).Y2
- FP4_YYY_copy(&T2,&Y1); //T2.copy(Y1); // T2=Y1-Z1.Y2
- FP4_YYY_mul(&T2,&T2,&(B->x)); //T2.mul(B.getx()); // T2=(Y1-Z1.Y2).X2
- FP4_YYY_sub(&T2,&T2,&T1); //T2.sub(T1);
- FP4_YYY_norm(&T2); //T2.norm(); // T2=(Y1-Z1.Y2).X2 - (X1-Z1.X2).Y2
- FP4_YYY_qmul(&Y1,&Y1,Qx); //Y1.pmul(Qx);
- FP4_YYY_neg(&Y1,&Y1); //Y1.neg();
- FP4_YYY_norm(&Y1); //Y1.norm(); // Y1=-(Y1-Z1.Y2).Xs
+ FP4_YYY_copy(&T2,&Y1); //T2.copy(Y1); // T2=Y1-Z1.Y2
+ FP4_YYY_mul(&T2,&T2,&(B->x)); //T2.mul(B.getx()); // T2=(Y1-Z1.Y2).X2
+ FP4_YYY_sub(&T2,&T2,&T1); //T2.sub(T1);
+ FP4_YYY_norm(&T2); //T2.norm(); // T2=(Y1-Z1.Y2).X2 - (X1-Z1.X2).Y2
+ FP4_YYY_qmul(&Y1,&Y1,Qx); //Y1.pmul(Qx);
+ FP4_YYY_neg(&Y1,&Y1); //Y1.neg();
+ FP4_YYY_norm(&Y1); //Y1.norm(); // Y1=-(Y1-Z1.Y2).Xs
- FP8_YYY_from_FP4s(&a,&X1,&T2); // (X1-Z1.X2).Ys | (Y1-Z1.Y2).X2 - (X1-Z1.X2).Y2 | - (Y1-Z1.Y2).Xs
+ FP8_YYY_from_FP4s(&a,&X1,&T2); // (X1-Z1.X2).Ys | (Y1-Z1.Y2).X2 - (X1-Z1.X2).Y2 | - (Y1-Z1.Y2).Xs
#if SEXTIC_TWIST_ZZZ==D_TYPE
- FP8_YYY_from_FP4(&b,&Y1); //b=new FP4(Y1);
- FP8_YYY_zero(&c);
+ FP8_YYY_from_FP4(&b,&Y1); //b=new FP4(Y1);
+ FP8_YYY_zero(&c);
#endif
#if SEXTIC_TWIST_ZZZ==M_TYPE
- FP8_YYY_zero(&b);
- FP8_YYY_from_FP4H(&c,&Y1); //b=new FP4(Y1);
+ FP8_YYY_zero(&b);
+ FP8_YYY_from_FP4H(&c,&Y1); //b=new FP4(Y1);
#endif
- ECP4_ZZZ_add(A,B); //A.add(B);
+ ECP4_ZZZ_add(A,B); //A.add(B);
}
FP24_YYY_from_FP8s(v,&a,&b,&c);
- v->type=FP_SPARSER;
+ v->type=AMCL_AMCL_FP_SPARSER;
}
/* prepare ate parameter, n=6u+2 (BN) or n=u (BLS), n3=3*n */
int PAIR_ZZZ_nbits(BIG_XXX n3,BIG_XXX n)
{
- BIG_XXX x;
+ BIG_XXX x;
BIG_XXX_rcopy(x,CURVE_Bnx_ZZZ);
BIG_XXX_copy(n,x);
BIG_XXX_norm(n);
- BIG_XXX_pmul(n3,n,3);
- BIG_XXX_norm(n3);
+ BIG_XXX_pmul(n3,n,3);
+ BIG_XXX_norm(n3);
return BIG_XXX_nbits(n3);
}
@@ -161,117 +161,119 @@ int PAIR_ZZZ_nbits(BIG_XXX n3,BIG_XXX n)
/* prepare for multi-pairing */
void PAIR_ZZZ_initmp(FP24_YYY r[])
{
- int i;
- for (i=ATE_BITS_ZZZ-1; i>=0; i--)
- FP24_YYY_one(&r[i]);
- return;
+ int i;
+ for (i=ATE_BITS_ZZZ-1; i>=0; i--)
+ FP24_YYY_one(&r[i]);
+ return;
}
/* basic Miller loop */
void PAIR_ZZZ_miller(FP24_YYY *res,FP24_YYY r[])
{
- int i;
+ int i;
FP24_YYY_one(res);
- for (i=ATE_BITS_ZZZ-1; i>=1; i--)
- {
- FP24_YYY_sqr(res,res);
- FP24_YYY_ssmul(res,&r[i]);
- }
+ for (i=ATE_BITS_ZZZ-1; i>=1; i--)
+ {
+ FP24_YYY_sqr(res,res);
+ FP24_YYY_ssmul(res,&r[i]);
+ }
#if SIGN_OF_X_ZZZ==NEGATIVEX
FP24_YYY_conj(res,res);
#endif
- FP24_YYY_ssmul(res,&r[0]);
- return;
+ FP24_YYY_ssmul(res,&r[0]);
+ return;
}
/* Accumulate another set of line functions for n-pairing */
void PAIR_ZZZ_another(FP24_YYY r[],ECP4_ZZZ* PV,ECP_ZZZ* QV)
{
- int i,j,nb,bt;
- BIG_XXX x,n,n3;
+ int i,nb,bt;
+ BIG_XXX n,n3;
FP24_YYY lv,lv2;
ECP4_ZZZ A,NP,P;
- ECP_ZZZ Q;
- FP_YYY Qx,Qy;
-
- nb=PAIR_ZZZ_nbits(n3,n);
-
- ECP4_ZZZ_copy(&P,PV);
- ECP_ZZZ_copy(&Q,QV);
-
- ECP4_ZZZ_affine(&P);
- ECP_ZZZ_affine(&Q);
-
- FP_YYY_copy(&Qx,&(Q.x));
- FP_YYY_copy(&Qy,&(Q.y));
-
- ECP4_ZZZ_copy(&A,&P);
- ECP4_ZZZ_copy(&NP,&P); ECP4_ZZZ_neg(&NP);
-
- for (i=nb-2; i>=1; i--)
- {
- PAIR_ZZZ_line(&lv,&A,&A,&Qx,&Qy);
-
- bt=BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i); // bt=BIG_bit(n,i);
- if (bt==1)
- {
- PAIR_ZZZ_line(&lv2,&A,&P,&Qx,&Qy);
- FP24_YYY_smul(&lv,&lv2);
- }
- if (bt==-1)
- {
- PAIR_ZZZ_line(&lv2,&A,&NP,&Qx,&Qy);
- FP24_YYY_smul(&lv,&lv2);
- }
- FP24_YYY_ssmul(&r[i],&lv);
- }
+ ECP_ZZZ Q;
+ FP_YYY Qx,Qy;
+
+ nb=PAIR_ZZZ_nbits(n3,n);
+
+ ECP4_ZZZ_copy(&P,PV);
+ ECP_ZZZ_copy(&Q,QV);
+
+ ECP4_ZZZ_affine(&P);
+ ECP_ZZZ_affine(&Q);
+
+ FP_YYY_copy(&Qx,&(Q.x));
+ FP_YYY_copy(&Qy,&(Q.y));
+
+ ECP4_ZZZ_copy(&A,&P);
+ ECP4_ZZZ_copy(&NP,&P);
+ ECP4_ZZZ_neg(&NP);
+
+ for (i=nb-2; i>=1; i--)
+ {
+ PAIR_ZZZ_line(&lv,&A,&A,&Qx,&Qy);
+
+ bt=BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i); // bt=BIG_bit(n,i);
+ if (bt==1)
+ {
+ PAIR_ZZZ_line(&lv2,&A,&P,&Qx,&Qy);
+ FP24_YYY_smul(&lv,&lv2);
+ }
+ if (bt==-1)
+ {
+ PAIR_ZZZ_line(&lv2,&A,&NP,&Qx,&Qy);
+ FP24_YYY_smul(&lv,&lv2);
+ }
+ FP24_YYY_ssmul(&r[i],&lv);
+ }
}
/* Optimal R-ate pairing r=e(P,Q) */
void PAIR_ZZZ_ate(FP24_YYY *r,ECP4_ZZZ *P1,ECP_ZZZ *Q1)
{
- BIG_XXX x,n,n3;
- FP_YYY Qx,Qy;
+ BIG_XXX n,n3;
+ FP_YYY Qx,Qy;
int i,nb,bt;
ECP4_ZZZ A,NP,P;
- ECP_ZZZ Q;
+ ECP_ZZZ Q;
FP24_YYY lv,lv2;
- nb=PAIR_ZZZ_nbits(n3,n);
+ nb=PAIR_ZZZ_nbits(n3,n);
- ECP4_ZZZ_copy(&P,P1);
- ECP_ZZZ_copy(&Q,Q1);
+ ECP4_ZZZ_copy(&P,P1);
+ ECP_ZZZ_copy(&Q,Q1);
- ECP4_ZZZ_affine(&P);
- ECP_ZZZ_affine(&Q);
+ ECP4_ZZZ_affine(&P);
+ ECP_ZZZ_affine(&Q);
FP_YYY_copy(&Qx,&(Q.x));
FP_YYY_copy(&Qy,&(Q.y));
ECP4_ZZZ_copy(&A,&P);
- ECP4_ZZZ_copy(&NP,&P); ECP4_ZZZ_neg(&NP);
+ ECP4_ZZZ_copy(&NP,&P);
+ ECP4_ZZZ_neg(&NP);
FP24_YYY_one(r);
/* Main Miller Loop */
for (i=nb-2; i>=1; i--)
{
- FP24_YYY_sqr(r,r);
+ FP24_YYY_sqr(r,r);
PAIR_ZZZ_line(&lv,&A,&A,&Qx,&Qy);
- bt= BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i); // BIG_bit(n,i);
+ bt= BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i); // BIG_bit(n,i);
if (bt==1)
{
PAIR_ZZZ_line(&lv2,&A,&P,&Qx,&Qy);
FP24_YYY_smul(&lv,&lv2);
}
- if (bt==-1)
- {
+ if (bt==-1)
+ {
PAIR_ZZZ_line(&lv2,&A,&NP,&Qx,&Qy);
FP24_YYY_smul(&lv,&lv2);
- }
+ }
FP24_YYY_ssmul(r,&lv);
}
@@ -284,25 +286,25 @@ void PAIR_ZZZ_ate(FP24_YYY *r,ECP4_ZZZ *P1,ECP_ZZZ *Q1)
/* Optimal R-ate double pairing e(P,Q).e(R,S) */
void PAIR_ZZZ_double_ate(FP24_YYY *r,ECP4_ZZZ *P1,ECP_ZZZ *Q1,ECP4_ZZZ *R1,ECP_ZZZ *S1)
{
- BIG_XXX x,n,n3;
- FP_YYY Qx,Qy,Sx,Sy;
+ BIG_XXX n,n3;
+ FP_YYY Qx,Qy,Sx,Sy;
int i,nb,bt;
ECP4_ZZZ A,B,NP,NR,P,R;
- ECP_ZZZ Q,S;
+ ECP_ZZZ Q,S;
FP24_YYY lv,lv2;
- nb=PAIR_ZZZ_nbits(n3,n);
+ nb=PAIR_ZZZ_nbits(n3,n);
- ECP4_ZZZ_copy(&P,P1);
- ECP_ZZZ_copy(&Q,Q1);
+ ECP4_ZZZ_copy(&P,P1);
+ ECP_ZZZ_copy(&Q,Q1);
- ECP4_ZZZ_affine(&P);
- ECP_ZZZ_affine(&Q);
+ ECP4_ZZZ_affine(&P);
+ ECP_ZZZ_affine(&Q);
- ECP4_ZZZ_copy(&R,R1);
- ECP_ZZZ_copy(&S,S1);
+ ECP4_ZZZ_copy(&R,R1);
+ ECP_ZZZ_copy(&S,S1);
- ECP4_ZZZ_affine(&R);
- ECP_ZZZ_affine(&S);
+ ECP4_ZZZ_affine(&R);
+ ECP_ZZZ_affine(&S);
FP_YYY_copy(&Qx,&(Q.x));
FP_YYY_copy(&Qy,&(Q.y));
@@ -312,36 +314,38 @@ void PAIR_ZZZ_double_ate(FP24_YYY *r,ECP4_ZZZ *P1,ECP_ZZZ *Q1,ECP4_ZZZ *R1,ECP_Z
ECP4_ZZZ_copy(&A,&P);
ECP4_ZZZ_copy(&B,&R);
- ECP4_ZZZ_copy(&NP,&P); ECP4_ZZZ_neg(&NP);
- ECP4_ZZZ_copy(&NR,&R); ECP4_ZZZ_neg(&NR);
+ ECP4_ZZZ_copy(&NP,&P);
+ ECP4_ZZZ_neg(&NP);
+ ECP4_ZZZ_copy(&NR,&R);
+ ECP4_ZZZ_neg(&NR);
FP24_YYY_one(r);
/* Main Miller Loop */
for (i=nb-2; i>=1; i--)
{
- FP24_YYY_sqr(r,r);
+ FP24_YYY_sqr(r,r);
PAIR_ZZZ_line(&lv,&A,&A,&Qx,&Qy);
PAIR_ZZZ_line(&lv2,&B,&B,&Sx,&Sy);
- FP24_YYY_smul(&lv,&lv2);
+ FP24_YYY_smul(&lv,&lv2);
FP24_YYY_ssmul(r,&lv);
- bt=BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i); // bt=BIG_bit(n,i);
+ bt=BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i); // bt=BIG_bit(n,i);
if (bt==1)
{
PAIR_ZZZ_line(&lv,&A,&P,&Qx,&Qy);
- PAIR_ZZZ_line(&lv2,&B,&R,&Sx,&Sy);
+ PAIR_ZZZ_line(&lv2,&B,&R,&Sx,&Sy);
FP24_YYY_smul(&lv,&lv2);
FP24_YYY_ssmul(r,&lv);
}
- if (bt==-1)
- {
+ if (bt==-1)
+ {
PAIR_ZZZ_line(&lv,&A,&NP,&Qx,&Qy);
- PAIR_ZZZ_line(&lv2,&B,&NR,&Sx,&Sy);
+ PAIR_ZZZ_line(&lv2,&B,&NR,&Sx,&Sy);
FP24_YYY_smul(&lv,&lv2);
FP24_YYY_ssmul(r,&lv);
- }
- }
+ }
+ }
@@ -357,7 +361,7 @@ void PAIR_ZZZ_fexp(FP24_YYY *r)
{
FP2_YYY X;
BIG_XXX x;
- FP_YYY a,b;
+ FP_YYY a,b;
FP24_YYY t0,t1,t2,t3,t4,t5,t6,t7; // could lose one of these - r=t3
BIG_XXX_rcopy(x,CURVE_Bnx_ZZZ);
@@ -377,89 +381,89 @@ void PAIR_ZZZ_fexp(FP24_YYY *r)
FP24_YYY_mul(r,&t0);
- if (FP24_YYY_isunity(r))
- {
- FP24_YYY_zero(r);
- return;
- }
+ if (FP24_YYY_isunity(r))
+ {
+ FP24_YYY_zero(r);
+ return;
+ }
// Ghamman & Fouotsa Method - (completely garbled in https://eprint.iacr.org/2016/130)
- FP24_YYY_usqr(&t7,r); // t7=f^2
- FP24_YYY_pow(&t1,&t7,x); // t1=t7^u
+ FP24_YYY_usqr(&t7,r); // t7=f^2
+ FP24_YYY_pow(&t1,&t7,x); // t1=t7^u
- BIG_XXX_fshr(x,1);
- FP24_YYY_pow(&t2,&t1,x); // t2=t1^(u/2)
- BIG_XXX_fshl(x,1); // x must be even
+ BIG_XXX_fshr(x,1);
+ FP24_YYY_pow(&t2,&t1,x); // t2=t1^(u/2)
+ BIG_XXX_fshl(x,1); // x must be even
#if SIGN_OF_X_ZZZ==NEGATIVEX
- FP24_YYY_conj(&t1,&t1);
+ FP24_YYY_conj(&t1,&t1);
#endif
- FP24_YYY_conj(&t3,&t1); // t3=1/t1
- FP24_YYY_mul(&t2,&t3); // t2=t1*t3
- FP24_YYY_mul(&t2,r); // t2=t2*f
+ FP24_YYY_conj(&t3,&t1); // t3=1/t1
+ FP24_YYY_mul(&t2,&t3); // t2=t1*t3
+ FP24_YYY_mul(&t2,r); // t2=t2*f
- FP24_YYY_pow(&t3,&t2,x); // t3=t2^u
- FP24_YYY_pow(&t4,&t3,x); // t4=t3^u
- FP24_YYY_pow(&t5,&t4,x); // t5=t4^u
+ FP24_YYY_pow(&t3,&t2,x); // t3=t2^u
+ FP24_YYY_pow(&t4,&t3,x); // t4=t3^u
+ FP24_YYY_pow(&t5,&t4,x); // t5=t4^u
#if SIGN_OF_X_ZZZ==NEGATIVEX
- FP24_YYY_conj(&t3,&t3);
- FP24_YYY_conj(&t5,&t5);
+ FP24_YYY_conj(&t3,&t3);
+ FP24_YYY_conj(&t5,&t5);
#endif
- FP24_YYY_frob(&t3,&X,6);
- FP24_YYY_frob(&t4,&X,5);
+ FP24_YYY_frob(&t3,&X,6);
+ FP24_YYY_frob(&t4,&X,5);
- FP24_YYY_mul(&t3,&t4); // t3=t3.t4
+ FP24_YYY_mul(&t3,&t4); // t3=t3.t4
- FP24_YYY_pow(&t6,&t5,x); // t6=t5^u
+ FP24_YYY_pow(&t6,&t5,x); // t6=t5^u
#if SIGN_OF_X_ZZZ==NEGATIVEX
- FP24_YYY_conj(&t6,&t6);
+ FP24_YYY_conj(&t6,&t6);
#endif
- FP24_YYY_frob(&t5,&X,4);
- FP24_YYY_mul(&t3,&t5); // ??
+ FP24_YYY_frob(&t5,&X,4);
+ FP24_YYY_mul(&t3,&t5); // ??
- FP24_YYY_conj(&t0,&t2); // t0=1/t2
- FP24_YYY_mul(&t6,&t0); // t6=t6*t0
+ FP24_YYY_conj(&t0,&t2); // t0=1/t2
+ FP24_YYY_mul(&t6,&t0); // t6=t6*t0
- FP24_YYY_copy(&t5,&t6);
- FP24_YYY_frob(&t5,&X,3);
+ FP24_YYY_copy(&t5,&t6);
+ FP24_YYY_frob(&t5,&X,3);
- FP24_YYY_mul(&t3,&t5); // t3=t3*t5
- FP24_YYY_pow(&t5,&t6,x); // t5=t6^x
- FP24_YYY_pow(&t6,&t5,x); // t6=t5^x
+ FP24_YYY_mul(&t3,&t5); // t3=t3*t5
+ FP24_YYY_pow(&t5,&t6,x); // t5=t6^x
+ FP24_YYY_pow(&t6,&t5,x); // t6=t5^x
#if SIGN_OF_X_ZZZ==NEGATIVEX
- FP24_YYY_conj(&t5,&t5);
+ FP24_YYY_conj(&t5,&t5);
#endif
- FP24_YYY_copy(&t0,&t5);
- FP24_YYY_frob(&t0,&X,2);
- FP24_YYY_mul(&t3,&t0); // t3=t3*t0
- FP24_YYY_copy(&t0,&t6); //
- FP24_YYY_frob(&t0,&X,1);
+ FP24_YYY_copy(&t0,&t5);
+ FP24_YYY_frob(&t0,&X,2);
+ FP24_YYY_mul(&t3,&t0); // t3=t3*t0
+ FP24_YYY_copy(&t0,&t6); //
+ FP24_YYY_frob(&t0,&X,1);
- FP24_YYY_mul(&t3,&t0); // t3=t3*t0
- FP24_YYY_pow(&t5,&t6,x); // t5=t6*x
+ FP24_YYY_mul(&t3,&t0); // t3=t3*t0
+ FP24_YYY_pow(&t5,&t6,x); // t5=t6*x
#if SIGN_OF_X_ZZZ==NEGATIVEX
- FP24_YYY_conj(&t5,&t5);
+ FP24_YYY_conj(&t5,&t5);
#endif
- FP24_YYY_frob(&t2,&X,7);
+ FP24_YYY_frob(&t2,&X,7);
- FP24_YYY_mul(&t5,&t7); // t5=t5*t7
- FP24_YYY_mul(&t3,&t2); // t3=t3*t2
- FP24_YYY_mul(&t3,&t5); // t3=t3*t5
+ FP24_YYY_mul(&t5,&t7); // t5=t5*t7
+ FP24_YYY_mul(&t3,&t2); // t3=t3*t2
+ FP24_YYY_mul(&t3,&t5); // t3=t3*t5
- FP24_YYY_mul(r,&t3);
- FP24_YYY_reduce(r);
+ FP24_YYY_mul(r,&t3);
+ FP24_YYY_reduce(r);
}
@@ -473,7 +477,7 @@ static void glv(BIG_XXX u[2],BIG_XXX e)
BIG_XXX x,x2,q;
BIG_XXX_rcopy(x,CURVE_Bnx_ZZZ);
BIG_XXX_smul(x2,x,x);
- BIG_XXX_smul(x,x2,x2);
+ BIG_XXX_smul(x,x2,x2);
BIG_XXX_copy(u[0],e);
BIG_XXX_mod(u[0],x);
BIG_XXX_copy(u[1],e);
@@ -493,7 +497,7 @@ static void gs(BIG_XXX u[8],BIG_XXX e)
int i;
BIG_XXX x,w,q;
- BIG_XXX_rcopy(q,CURVE_Order_ZZZ);
+ BIG_XXX_rcopy(q,CURVE_Order_ZZZ);
BIG_XXX_rcopy(x,CURVE_Bnx_ZZZ);
BIG_XXX_copy(w,e);
@@ -503,14 +507,14 @@ static void gs(BIG_XXX u[8],BIG_XXX e)
BIG_XXX_mod(u[i],x);
BIG_XXX_sdiv(w,x);
}
- BIG_XXX_copy(u[7],w);
+ BIG_XXX_copy(u[7],w);
-/* */
+ /* */
#if SIGN_OF_X_ZZZ==NEGATIVEX
- BIG_XXX_modneg(u[1],u[1],q);
- BIG_XXX_modneg(u[3],u[3],q);
- BIG_XXX_modneg(u[5],u[5],q);
- BIG_XXX_modneg(u[7],u[7],q);
+ BIG_XXX_modneg(u[1],u[1],q);
+ BIG_XXX_modneg(u[3],u[3],q);
+ BIG_XXX_modneg(u[5],u[5],q);
+ BIG_XXX_modneg(u[7],u[7],q);
#endif
@@ -523,14 +527,15 @@ void PAIR_ZZZ_G1mul(ECP_ZZZ *P,BIG_XXX e)
#ifdef USE_GLV_ZZZ /* Note this method is patented */
int np,nn;
ECP_ZZZ Q;
- FP_YYY cru;
+ FP_YYY cru;
BIG_XXX t,q;
BIG_XXX u[2];
BIG_XXX_rcopy(q,CURVE_Order_ZZZ);
glv(u,e);
- ECP_ZZZ_copy(&Q,P); ECP_ZZZ_affine(&Q);
+ ECP_ZZZ_copy(&Q,P);
+ ECP_ZZZ_affine(&Q);
FP_YYY_rcopy(&cru,CURVE_Cru_ZZZ);
FP_YYY_mul(&(Q.x),&(Q.x),&cru);
@@ -554,7 +559,7 @@ void PAIR_ZZZ_G1mul(ECP_ZZZ *P,BIG_XXX e)
ECP_ZZZ_neg(&Q);
}
BIG_XXX_norm(u[0]);
- BIG_XXX_norm(u[1]);
+ BIG_XXX_norm(u[1]);
ECP_ZZZ_mul2(P,&Q,u[0],u[1]);
#else
@@ -571,7 +576,7 @@ void PAIR_ZZZ_G2mul(ECP4_ZZZ *P,BIG_XXX e)
FP2_YYY X[3];
BIG_XXX x,y,u[8];
- ECP4_ZZZ_frob_constants(X);
+ ECP4_ZZZ_frob_constants(X);
BIG_XXX_rcopy(y,CURVE_Order_ZZZ);
gs(u,e);
@@ -593,7 +598,7 @@ void PAIR_ZZZ_G2mul(ECP4_ZZZ *P,BIG_XXX e)
BIG_XXX_copy(u[i],x);
ECP4_ZZZ_neg(&Q[i]);
}
- BIG_XXX_norm(u[i]);
+ BIG_XXX_norm(u[i]);
}
ECP4_ZZZ_mul8(P,Q,u);
@@ -611,7 +616,7 @@ void PAIR_ZZZ_GTpow(FP24_YYY *f,BIG_XXX e)
FP24_YYY g[8];
FP2_YYY X;
BIG_XXX t,q;
- FP_YYY fx,fy;
+ FP_YYY fx,fy;
BIG_XXX u[8];
FP_YYY_rcopy(&fx,Fra_YYY);
@@ -638,7 +643,7 @@ void PAIR_ZZZ_GTpow(FP24_YYY *f,BIG_XXX e)
BIG_XXX_copy(u[i],t);
FP24_YYY_conj(&g[i],&g[i]);
}
- BIG_XXX_norm(u[i]);
+ BIG_XXX_norm(u[i]);
}
FP24_YYY_pow8(f,g,u);
@@ -666,16 +671,16 @@ int main()
ECP_ZZZ Q,R;
FP24 g,gp;
FP8_YYY t,c,cp,cpm1,cpm2;
- FP4_YYY X,Y;
+ FP4_YYY X,Y;
FP2_YYY x,y,f,Aa,Bb;
- FP_YYY cru;
+ FP_YYY cru;
- for (i=0;i<32;i++)
- byt[i]=i+9;
- RAND_seed(&rng,32,byt);
+ for (i=0; i<32; i++)
+ byt[i]=i+9;
+ RAND_seed(&rng,32,byt);
- BIG_XXX_rcopy(r,CURVE_Order);
- BIG_XXX_rcopy(p,Modulus);
+ BIG_XXX_rcopy(r,CURVE_Order);
+ BIG_XXX_rcopy(p,Modulus);
BIG_XXX_rcopy(xa,CURVE_Gx);
@@ -689,7 +694,7 @@ int main()
ECP_output(&Q);
printf("\n");
- ECP4_ZZZ_generator(&P);
+ ECP4_ZZZ_generator(&P);
if (P.inf) printf("Failed to set - point not on curve\n");
else printf("G2 set success\n");
@@ -700,7 +705,7 @@ int main()
PAIR_ate(&g,&P,&Q);
- printf("gb= ");
+ printf("gb= ");
FP24_output(&g);
printf("\n");
PAIR_fexp(&g);
@@ -709,12 +714,12 @@ int main()
FP24_output(&g);
printf("\n");
- ECP_copy(&R,&Q);
- ECP4_ZZZ_copy(&G,&P);
+ ECP_copy(&R,&Q);
+ ECP4_ZZZ_copy(&G,&P);
- ECP4_ZZZ_dbl(&G);
- ECP_dbl(&R);
- ECP_affine(&R);
+ ECP4_ZZZ_dbl(&G);
+ ECP_dbl(&R);
+ ECP_affine(&R);
PAIR_ate(&g,&G,&Q);
PAIR_fexp(&g);
@@ -731,25 +736,33 @@ int main()
printf("\n");
- PAIR_G1mul(&Q,r);
- printf("rQ= ");ECP_output(&Q); printf("\n");
+ PAIR_G1mul(&Q,r);
+ printf("rQ= ");
+ ECP_output(&Q);
+ printf("\n");
- PAIR_G2mul(&P,r);
- printf("rP= ");ECP4_ZZZ_output(&P); printf("\n");
+ PAIR_G2mul(&P,r);
+ printf("rP= ");
+ ECP4_ZZZ_output(&P);
+ printf("\n");
- BIG_XXX_randomnum(w,r,&rng);
+ BIG_XXX_randomnum(w,r,&rng);
- FP24_copy(&gp,&g);
+ FP24_copy(&gp,&g);
- PAIR_GTpow(&g,w);
+ PAIR_GTpow(&g,w);
- FP24_trace(&t,&g);
+ FP24_trace(&t,&g);
- printf("g^r= ");FP8_output(&t); printf("\n");
+ printf("g^r= ");
+ FP8_output(&t);
+ printf("\n");
- FP24_compow(&t,&gp,w,r);
+ FP24_compow(&t,&gp,w,r);
- printf("t(g)= "); FP8_output(&t); printf("\n");
+ printf("t(g)= ");
+ FP8_output(&t);
+ printf("\n");
}
diff --git a/version3/c/pair256.c b/version3/c/pair256.c
index 9dab331..2b53ba4 100644
--- a/version3/c/pair256.c
+++ b/version3/c/pair256.c
@@ -26,122 +26,122 @@ under the License.
/* Line function */
static void PAIR_ZZZ_line(FP48_YYY *v,ECP8_ZZZ *A,ECP8_ZZZ *B,FP_YYY *Qx,FP_YYY *Qy)
{
- FP8_YYY X1,Y1,T1,T2;
- FP8_YYY XX,YY,ZZ,YZ;
+ FP8_YYY X1,Y1,T1,T2;
+ FP8_YYY XX,YY,ZZ,YZ;
FP16_YYY a,b,c;
- if (A==B)
+ if (A==B)
{
/* doubling */
- FP8_YYY_copy(&XX,&(A->x)); //FP8_YYY XX=new FP8_YYY(A.getx()); //X
- FP8_YYY_copy(&YY,&(A->y)); //FP8_YYY YY=new FP8_YYY(A.gety()); //Y
- FP8_YYY_copy(&ZZ,&(A->z)); //FP8_YYY ZZ=new FP8_YYY(A.getz()); //Z
+ FP8_YYY_copy(&XX,&(A->x)); //FP8_YYY XX=new FP8_YYY(A.getx()); //X
+ FP8_YYY_copy(&YY,&(A->y)); //FP8_YYY YY=new FP8_YYY(A.gety()); //Y
+ FP8_YYY_copy(&ZZ,&(A->z)); //FP8_YYY ZZ=new FP8_YYY(A.getz()); //Z
- FP8_YYY_copy(&YZ,&YY); //FP8_YYY YZ=new FP8_YYY(YY); //Y
- FP8_YYY_mul(&YZ,&YZ,&ZZ); //YZ.mul(ZZ); //YZ
- FP8_YYY_sqr(&XX,&XX); //XX.sqr(); //X^2
- FP8_YYY_sqr(&YY,&YY); //YY.sqr(); //Y^2
- FP8_YYY_sqr(&ZZ,&ZZ); //ZZ.sqr(); //Z^2
-
- FP8_YYY_imul(&YZ,&YZ,4); //YZ.imul(4);
- FP8_YYY_neg(&YZ,&YZ); //YZ.neg();
- FP8_YYY_norm(&YZ); //YZ.norm(); //-4YZ
+ FP8_YYY_copy(&YZ,&YY); //FP8_YYY YZ=new FP8_YYY(YY); //Y
+ FP8_YYY_mul(&YZ,&YZ,&ZZ); //YZ.mul(ZZ); //YZ
+ FP8_YYY_sqr(&XX,&XX); //XX.sqr(); //X^2
+ FP8_YYY_sqr(&YY,&YY); //YY.sqr(); //Y^2
+ FP8_YYY_sqr(&ZZ,&ZZ); //ZZ.sqr(); //Z^2
- FP8_YYY_imul(&XX,&XX,6); //6X^2
- FP8_YYY_tmul(&XX,&XX,Qx); //6X^2.Xs
+ FP8_YYY_imul(&YZ,&YZ,4); //YZ.imul(4);
+ FP8_YYY_neg(&YZ,&YZ); //YZ.neg();
+ FP8_YYY_norm(&YZ); //YZ.norm(); //-4YZ
- FP8_YYY_imul(&ZZ,&ZZ,3*CURVE_B_I_ZZZ); //3Bz^2
- FP8_YYY_tmul(&YZ,&YZ,Qy); //-4YZ.Ys
+ FP8_YYY_imul(&XX,&XX,6); //6X^2
+ FP8_YYY_tmul(&XX,&XX,Qx); //6X^2.Xs
+
+ FP8_YYY_imul(&ZZ,&ZZ,3*CURVE_B_I_ZZZ); //3Bz^2
+ FP8_YYY_tmul(&YZ,&YZ,Qy); //-4YZ.Ys
#if SEXTIC_TWIST_ZZZ==D_TYPE
- FP8_YYY_div_2i(&ZZ); //6(b/i)z^2
+ FP8_YYY_div_2i(&ZZ); //6(b/i)z^2
#endif
#if SEXTIC_TWIST_ZZZ==M_TYPE
- FP8_YYY_times_i(&ZZ);
- FP8_YYY_add(&ZZ,&ZZ,&ZZ); // 6biz^2
- FP8_YYY_times_i(&YZ);
- FP8_YYY_norm(&YZ);
+ FP8_YYY_times_i(&ZZ);
+ FP8_YYY_add(&ZZ,&ZZ,&ZZ); // 6biz^2
+ FP8_YYY_times_i(&YZ);
+ FP8_YYY_norm(&YZ);
#endif
- FP8_YYY_norm(&ZZ); // 6bi.Z^2
+ FP8_YYY_norm(&ZZ); // 6bi.Z^2
- FP8_YYY_add(&YY,&YY,&YY); // 2y^2
- FP8_YYY_sub(&ZZ,&ZZ,&YY); //
- FP8_YYY_norm(&ZZ); // 6b.Z^2-2Y^2
+ FP8_YYY_add(&YY,&YY,&YY); // 2y^2
+ FP8_YYY_sub(&ZZ,&ZZ,&YY); //
+ FP8_YYY_norm(&ZZ); // 6b.Z^2-2Y^2
- FP16_YYY_from_FP8s(&a,&YZ,&ZZ); // -4YZ.Ys | 6b.Z^2-2Y^2 | 6X^2.Xs
+ FP16_YYY_from_FP8s(&a,&YZ,&ZZ); // -4YZ.Ys | 6b.Z^2-2Y^2 | 6X^2.Xs
#if SEXTIC_TWIST_ZZZ==D_TYPE
- FP16_YYY_from_FP8(&b,&XX);
- FP16_YYY_zero(&c);
+ FP16_YYY_from_FP8(&b,&XX);
+ FP16_YYY_zero(&c);
#endif
#if SEXTIC_TWIST_ZZZ==M_TYPE
- FP16_YYY_zero(&b);
- FP16_YYY_from_FP8H(&c,&XX);
+ FP16_YYY_zero(&b);
+ FP16_YYY_from_FP8H(&c,&XX);
#endif
- ECP8_ZZZ_dbl(A); //A.dbl();
+ ECP8_ZZZ_dbl(A); //A.dbl();
}
else
{
/* addition */
- FP8_YYY_copy(&X1,&(A->x)); //FP8_YYY X1=new FP8_YYY(A.getx()); // X1
- FP8_YYY_copy(&Y1,&(A->y)); //FP8_YYY Y1=new FP8_YYY(A.gety()); // Y1
- FP8_YYY_copy(&T1,&(A->z)); //FP8_YYY T1=new FP8_YYY(A.getz()); // Z1
-
- FP8_YYY_copy(&T2,&T1); //FP8_YYY T2=new FP8_YYY(A.getz()); // Z1
+ FP8_YYY_copy(&X1,&(A->x)); //FP8_YYY X1=new FP8_YYY(A.getx()); // X1
+ FP8_YYY_copy(&Y1,&(A->y)); //FP8_YYY Y1=new FP8_YYY(A.gety()); // Y1
+ FP8_YYY_copy(&T1,&(A->z)); //FP8_YYY T1=new FP8_YYY(A.getz()); // Z1
+
+ FP8_YYY_copy(&T2,&T1); //FP8_YYY T2=new FP8_YYY(A.getz()); // Z1
- FP8_YYY_mul(&T1,&T1,&(B->y)); //T1.mul(B.gety()); // T1=Z1.Y2
- FP8_YYY_mul(&T2,&T2,&(B->x)); //T2.mul(B.getx()); // T2=Z1.X2
+ FP8_YYY_mul(&T1,&T1,&(B->y)); //T1.mul(B.gety()); // T1=Z1.Y2
+ FP8_YYY_mul(&T2,&T2,&(B->x)); //T2.mul(B.getx()); // T2=Z1.X2
- FP8_YYY_sub(&X1,&X1,&T2); //X1.sub(T2);
- FP8_YYY_norm(&X1); //X1.norm(); // X1=X1-Z1.X2
- FP8_YYY_sub(&Y1,&Y1,&T1); //Y1.sub(T1);
- FP8_YYY_norm(&Y1); //Y1.norm(); // Y1=Y1-Z1.Y2
+ FP8_YYY_sub(&X1,&X1,&T2); //X1.sub(T2);
+ FP8_YYY_norm(&X1); //X1.norm(); // X1=X1-Z1.X2
+ FP8_YYY_sub(&Y1,&Y1,&T1); //Y1.sub(T1);
+ FP8_YYY_norm(&Y1); //Y1.norm(); // Y1=Y1-Z1.Y2
- FP8_YYY_copy(&T1,&X1); //T1.copy(X1); // T1=X1-Z1.X2
- FP8_YYY_tmul(&X1,&X1,Qy); //X1.pmul(Qy); // X1=(X1-Z1.X2).Ys
+ FP8_YYY_copy(&T1,&X1); //T1.copy(X1); // T1=X1-Z1.X2
+ FP8_YYY_tmul(&X1,&X1,Qy); //X1.pmul(Qy); // X1=(X1-Z1.X2).Ys
#if SEXTIC_TWIST_ZZZ==M_TYPE
- FP8_YYY_times_i(&X1);
- FP8_YYY_norm(&X1);
+ FP8_YYY_times_i(&X1);
+ FP8_YYY_norm(&X1);
#endif
- FP8_YYY_mul(&T1,&T1,&(B->y)); //T1.mul(B.gety()); // T1=(X1-Z1.X2).Y2
+ FP8_YYY_mul(&T1,&T1,&(B->y)); //T1.mul(B.gety()); // T1=(X1-Z1.X2).Y2
- FP8_YYY_copy(&T2,&Y1); //T2.copy(Y1); // T2=Y1-Z1.Y2
- FP8_YYY_mul(&T2,&T2,&(B->x)); //T2.mul(B.getx()); // T2=(Y1-Z1.Y2).X2
- FP8_YYY_sub(&T2,&T2,&T1); //T2.sub(T1);
- FP8_YYY_norm(&T2); //T2.norm(); // T2=(Y1-Z1.Y2).X2 - (X1-Z1.X2).Y2
- FP8_YYY_tmul(&Y1,&Y1,Qx); //Y1.pmul(Qx);
- FP8_YYY_neg(&Y1,&Y1); //Y1.neg();
- FP8_YYY_norm(&Y1); //Y1.norm(); // Y1=-(Y1-Z1.Y2).Xs
+ FP8_YYY_copy(&T2,&Y1); //T2.copy(Y1); // T2=Y1-Z1.Y2
+ FP8_YYY_mul(&T2,&T2,&(B->x)); //T2.mul(B.getx()); // T2=(Y1-Z1.Y2).X2
+ FP8_YYY_sub(&T2,&T2,&T1); //T2.sub(T1);
+ FP8_YYY_norm(&T2); //T2.norm(); // T2=(Y1-Z1.Y2).X2 - (X1-Z1.X2).Y2
+ FP8_YYY_tmul(&Y1,&Y1,Qx); //Y1.pmul(Qx);
+ FP8_YYY_neg(&Y1,&Y1); //Y1.neg();
+ FP8_YYY_norm(&Y1); //Y1.norm(); // Y1=-(Y1-Z1.Y2).Xs
- FP16_YYY_from_FP8s(&a,&X1,&T2); // (X1-Z1.X2).Ys | (Y1-Z1.Y2).X2 - (X1-Z1.X2).Y2 | - (Y1-Z1.Y2).Xs
+ FP16_YYY_from_FP8s(&a,&X1,&T2); // (X1-Z1.X2).Ys | (Y1-Z1.Y2).X2 - (X1-Z1.X2).Y2 | - (Y1-Z1.Y2).Xs
#if SEXTIC_TWIST_ZZZ==D_TYPE
- FP16_YYY_from_FP8(&b,&Y1); //b=new FP4(Y1);
- FP16_YYY_zero(&c);
+ FP16_YYY_from_FP8(&b,&Y1); //b=new FP4(Y1);
+ FP16_YYY_zero(&c);
#endif
#if SEXTIC_TWIST_ZZZ==M_TYPE
- FP16_YYY_zero(&b);
- FP16_YYY_from_FP8H(&c,&Y1); //b=new FP4(Y1);
+ FP16_YYY_zero(&b);
+ FP16_YYY_from_FP8H(&c,&Y1); //b=new FP4(Y1);
#endif
- ECP8_ZZZ_add(A,B); // A.add(B);
+ ECP8_ZZZ_add(A,B); // A.add(B);
}
FP48_YYY_from_FP16s(v,&a,&b,&c);
- v->type=FP_SPARSER;
+ v->type=AMCL_AMCL_FP_SPARSER;
}
/* prepare ate parameter, n=6u+2 (BN) or n=u (BLS), n3=3*n */
int PAIR_ZZZ_nbits(BIG_XXX n3,BIG_XXX n)
{
- BIG_XXX x;
+ BIG_XXX x;
BIG_XXX_rcopy(x,CURVE_Bnx_ZZZ);
BIG_XXX_copy(n,x);
BIG_XXX_norm(n);
- BIG_XXX_pmul(n3,n,3);
- BIG_XXX_norm(n3);
+ BIG_XXX_pmul(n3,n,3);
+ BIG_XXX_norm(n3);
return BIG_XXX_nbits(n3);
}
@@ -158,117 +158,119 @@ int PAIR_ZZZ_nbits(BIG_XXX n3,BIG_XXX n)
/* prepare for multi-pairing */
void PAIR_ZZZ_initmp(FP48_YYY r[])
{
- int i;
- for (i=ATE_BITS_ZZZ-1; i>=0; i--)
- FP48_YYY_one(&r[i]);
- return;
+ int i;
+ for (i=ATE_BITS_ZZZ-1; i>=0; i--)
+ FP48_YYY_one(&r[i]);
+ return;
}
/* basic Miller loop */
void PAIR_ZZZ_miller(FP48_YYY *res,FP48_YYY r[])
{
- int i;
+ int i;
FP48_YYY_one(res);
- for (i=ATE_BITS_ZZZ-1; i>=1; i--)
- {
- FP48_YYY_sqr(res,res);
- FP48_YYY_ssmul(res,&r[i]);
- }
+ for (i=ATE_BITS_ZZZ-1; i>=1; i--)
+ {
+ FP48_YYY_sqr(res,res);
+ FP48_YYY_ssmul(res,&r[i]);
+ }
#if SIGN_OF_X_ZZZ==NEGATIVEX
FP48_YYY_conj(res,res);
#endif
- FP48_YYY_ssmul(res,&r[0]);
- return;
+ FP48_YYY_ssmul(res,&r[0]);
+ return;
}
/* Accumulate another set of line functions for n-pairing */
void PAIR_ZZZ_another(FP48_YYY r[],ECP8_ZZZ* PV,ECP_ZZZ* QV)
{
- int i,j,nb,bt;
- BIG_XXX x,n,n3;
+ int i,nb,bt;
+ BIG_XXX n,n3;
FP48_YYY lv,lv2;
ECP8_ZZZ A,NP,P;
- ECP_ZZZ Q;
- FP_YYY Qx,Qy;
-
- nb=PAIR_ZZZ_nbits(n3,n);
-
- ECP8_ZZZ_copy(&P,PV);
- ECP_ZZZ_copy(&Q,QV);
-
- ECP8_ZZZ_affine(&P);
- ECP_ZZZ_affine(&Q);
-
- FP_YYY_copy(&Qx,&(Q.x));
- FP_YYY_copy(&Qy,&(Q.y));
-
- ECP8_ZZZ_copy(&A,&P);
- ECP8_ZZZ_copy(&NP,&P); ECP8_ZZZ_neg(&NP);
-
- for (i=nb-2; i>=1; i--)
- {
- PAIR_ZZZ_line(&lv,&A,&A,&Qx,&Qy);
-
- bt=BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i); // bt=BIG_bit(n,i);
- if (bt==1)
- {
- PAIR_ZZZ_line(&lv2,&A,&P,&Qx,&Qy);
- FP48_YYY_smul(&lv,&lv2);
- }
- if (bt==-1)
- {
- PAIR_ZZZ_line(&lv2,&A,&NP,&Qx,&Qy);
- FP48_YYY_smul(&lv,&lv2);
- }
- FP48_YYY_ssmul(&r[i],&lv);
- }
+ ECP_ZZZ Q;
+ FP_YYY Qx,Qy;
+
+ nb=PAIR_ZZZ_nbits(n3,n);
+
+ ECP8_ZZZ_copy(&P,PV);
+ ECP_ZZZ_copy(&Q,QV);
+
+ ECP8_ZZZ_affine(&P);
+ ECP_ZZZ_affine(&Q);
+
+ FP_YYY_copy(&Qx,&(Q.x));
+ FP_YYY_copy(&Qy,&(Q.y));
+
+ ECP8_ZZZ_copy(&A,&P);
+ ECP8_ZZZ_copy(&NP,&P);
+ ECP8_ZZZ_neg(&NP);
+
+ for (i=nb-2; i>=1; i--)
+ {
+ PAIR_ZZZ_line(&lv,&A,&A,&Qx,&Qy);
+
+ bt=BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i); // bt=BIG_bit(n,i);
+ if (bt==1)
+ {
+ PAIR_ZZZ_line(&lv2,&A,&P,&Qx,&Qy);
+ FP48_YYY_smul(&lv,&lv2);
+ }
+ if (bt==-1)
+ {
+ PAIR_ZZZ_line(&lv2,&A,&NP,&Qx,&Qy);
+ FP48_YYY_smul(&lv,&lv2);
+ }
+ FP48_YYY_ssmul(&r[i],&lv);
+ }
}
/* Optimal R-ate pairing r=e(P,Q) */
void PAIR_ZZZ_ate(FP48_YYY *r,ECP8_ZZZ *P1,ECP_ZZZ *Q1)
{
- BIG_XXX x,n,n3;
- FP_YYY Qx,Qy;
+ BIG_XXX n,n3;
+ FP_YYY Qx,Qy;
int i,nb,bt;
ECP8_ZZZ A,NP,P;
- ECP_ZZZ Q;
+ ECP_ZZZ Q;
FP48_YYY lv,lv2;
- nb=PAIR_ZZZ_nbits(n3,n);
+ nb=PAIR_ZZZ_nbits(n3,n);
- ECP8_ZZZ_copy(&P,P1);
- ECP_ZZZ_copy(&Q,Q1);
+ ECP8_ZZZ_copy(&P,P1);
+ ECP_ZZZ_copy(&Q,Q1);
- ECP8_ZZZ_affine(&P);
- ECP_ZZZ_affine(&Q);
+ ECP8_ZZZ_affine(&P);
+ ECP_ZZZ_affine(&Q);
FP_YYY_copy(&Qx,&(Q.x));
FP_YYY_copy(&Qy,&(Q.y));
ECP8_ZZZ_copy(&A,&P);
- ECP8_ZZZ_copy(&NP,&P); ECP8_ZZZ_neg(&NP);
+ ECP8_ZZZ_copy(&NP,&P);
+ ECP8_ZZZ_neg(&NP);
FP48_YYY_one(r);
/* Main Miller Loop */
for (i=nb-2; i>=1; i--)
{
- FP48_YYY_sqr(r,r);
+ FP48_YYY_sqr(r,r);
PAIR_ZZZ_line(&lv,&A,&A,&Qx,&Qy);
- bt= BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i); // BIG_bit(n,i);
+ bt= BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i); // BIG_bit(n,i);
if (bt==1)
{
PAIR_ZZZ_line(&lv2,&A,&P,&Qx,&Qy);
FP48_YYY_smul(&lv,&lv2);
}
- if (bt==-1)
- {
+ if (bt==-1)
+ {
PAIR_ZZZ_line(&lv2,&A,&NP,&Qx,&Qy);
FP48_YYY_smul(&lv,&lv2);
- }
+ }
FP48_YYY_ssmul(r,&lv);
}
@@ -281,26 +283,26 @@ void PAIR_ZZZ_ate(FP48_YYY *r,ECP8_ZZZ *P1,ECP_ZZZ *Q1)
/* Optimal R-ate double pairing e(P,Q).e(R,S) */
void PAIR_ZZZ_double_ate(FP48_YYY *r,ECP8_ZZZ *P1,ECP_ZZZ *Q1,ECP8_ZZZ *R1,ECP_ZZZ *S1)
{
- BIG_XXX x,n,n3;
- FP_YYY Qx,Qy,Sx,Sy;
+ BIG_XXX n,n3;
+ FP_YYY Qx,Qy,Sx,Sy;
int i,nb,bt;
ECP8_ZZZ A,B,NP,NR,P,R;
- ECP_ZZZ Q,S;
+ ECP_ZZZ Q,S;
FP48_YYY lv,lv2;
- nb=PAIR_ZZZ_nbits(n3,n);
+ nb=PAIR_ZZZ_nbits(n3,n);
- ECP8_ZZZ_copy(&P,P1);
- ECP_ZZZ_copy(&Q,Q1);
+ ECP8_ZZZ_copy(&P,P1);
+ ECP_ZZZ_copy(&Q,Q1);
- ECP8_ZZZ_affine(&P);
- ECP_ZZZ_affine(&Q);
+ ECP8_ZZZ_affine(&P);
+ ECP_ZZZ_affine(&Q);
- ECP8_ZZZ_copy(&R,R1);
- ECP_ZZZ_copy(&S,S1);
+ ECP8_ZZZ_copy(&R,R1);
+ ECP_ZZZ_copy(&S,S1);
- ECP8_ZZZ_affine(&R);
- ECP_ZZZ_affine(&S);
+ ECP8_ZZZ_affine(&R);
+ ECP_ZZZ_affine(&S);
FP_YYY_copy(&Qx,&(Q.x));
FP_YYY_copy(&Qy,&(Q.y));
@@ -310,8 +312,10 @@ void PAIR_ZZZ_double_ate(FP48_YYY *r,ECP8_ZZZ *P1,ECP_ZZZ *Q1,ECP8_ZZZ *R1,ECP_Z
ECP8_ZZZ_copy(&A,&P);
ECP8_ZZZ_copy(&B,&R);
- ECP8_ZZZ_copy(&NP,&P); ECP8_ZZZ_neg(&NP);
- ECP8_ZZZ_copy(&NR,&R); ECP8_ZZZ_neg(&NR);
+ ECP8_ZZZ_copy(&NP,&P);
+ ECP8_ZZZ_neg(&NP);
+ ECP8_ZZZ_copy(&NR,&R);
+ ECP8_ZZZ_neg(&NR);
FP48_YYY_one(r);
@@ -320,26 +324,26 @@ void PAIR_ZZZ_double_ate(FP48_YYY *r,ECP8_ZZZ *P1,ECP_ZZZ *Q1,ECP8_ZZZ *R1,ECP_Z
{
FP48_YYY_sqr(r,r);
PAIR_ZZZ_line(&lv,&A,&A,&Qx,&Qy);
- PAIR_ZZZ_line(&lv2,&B,&B,&Sx,&Sy);
+ PAIR_ZZZ_line(&lv2,&B,&B,&Sx,&Sy);
FP48_YYY_smul(&lv,&lv2);
FP48_YYY_ssmul(r,&lv);
- bt=BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i); // bt=BIG_bit(n,i);
+ bt=BIG_XXX_bit(n3,i)-BIG_XXX_bit(n,i); // bt=BIG_bit(n,i);
if (bt==1)
{
PAIR_ZZZ_line(&lv,&A,&P,&Qx,&Qy);
PAIR_ZZZ_line(&lv2,&B,&R,&Sx,&Sy);
- FP48_YYY_smul(&lv,&lv2);
+ FP48_YYY_smul(&lv,&lv2);
FP48_YYY_ssmul(r,&lv);
}
- if (bt==-1)
- {
+ if (bt==-1)
+ {
PAIR_ZZZ_line(&lv,&A,&NP,&Qx,&Qy);
PAIR_ZZZ_line(&lv2,&B,&NR,&Sx,&Sy);
FP48_YYY_smul(&lv,&lv2);
FP48_YYY_ssmul(r,&lv);
- }
- }
+ }
+ }
#if SIGN_OF_X_ZZZ==NEGATIVEX
FP48_YYY_conj(r,r);
@@ -353,8 +357,8 @@ void PAIR_ZZZ_fexp(FP48_YYY *r)
{
FP2_YYY X;
BIG_XXX x;
- FP_YYY a,b;
- FP48_YYY t1,t2,t3,t7;
+ FP_YYY a,b;
+ FP48_YYY t1,t2,t3,t7;
BIG_XXX_rcopy(x,CURVE_Bnx_ZZZ);
FP_YYY_rcopy(&a,Fra_YYY);
@@ -373,156 +377,156 @@ void PAIR_ZZZ_fexp(FP48_YYY *r)
FP48_YYY_mul(r,&t7);
- if (FP48_YYY_isunity(r))
- {
- FP48_YYY_zero(r);
- return;
- }
+ if (FP48_YYY_isunity(r))
+ {
+ FP48_YYY_zero(r);
+ return;
+ }
// f^e0.f^e1^p.f^e2^p^2.. .. f^e14^p^14.f^e15^p^15
- FP48_YYY_usqr(&t7,r); // t7=f^2
- FP48_YYY_pow(&t1,&t7,x); // t1=f^2u
+ FP48_YYY_usqr(&t7,r); // t7=f^2
+ FP48_YYY_pow(&t1,&t7,x); // t1=f^2u
- BIG_XXX_fshr(x,1);
- FP48_YYY_pow(&t2,&t1,x); // t2=f^2u^(u/2) = f^u^2
- BIG_XXX_fshl(x,1); // x must be even
+ BIG_XXX_fshr(x,1);
+ FP48_YYY_pow(&t2,&t1,x); // t2=f^2u^(u/2) = f^u^2
+ BIG_XXX_fshl(x,1); // x must be even
#if SIGN_OF_X_ZZZ==NEGATIVEX
- FP48_YYY_conj(&t1,&t1);
+ FP48_YYY_conj(&t1,&t1);
#endif
- FP48_YYY_conj(&t3,&t1); // t3=f^-2u
- FP48_YYY_mul(&t2,&t3); // t2=f^u^2.f^-2u
- FP48_YYY_mul(&t2,r); // t2=f^u^2.f^-2u.f = f^(u^2-2u+1) = f^e15
+ FP48_YYY_conj(&t3,&t1); // t3=f^-2u
+ FP48_YYY_mul(&t2,&t3); // t2=f^u^2.f^-2u
+ FP48_YYY_mul(&t2,r); // t2=f^u^2.f^-2u.f = f^(u^2-2u+1) = f^e15
- FP48_YYY_mul(r,&t7); // f^3
+ FP48_YYY_mul(r,&t7); // f^3
- FP48_YYY_pow(&t1,&t2,x); // f^e15^u = f^(u.e15) = f^(u^3-2u^2+u) = f^(e14)
+ FP48_YYY_pow(&t1,&t2,x); // f^e15^u = f^(u.e15) = f^(u^3-2u^2+u) = f^(e14)
#if SIGN_OF_X_ZZZ==NEGATIVEX
- FP48_YYY_conj(&t1,&t1);
+ FP48_YYY_conj(&t1,&t1);
#endif
- FP48_YYY_copy(&t3,&t1);
- FP48_YYY_frob(&t3,&X,14); // f^(u^3-2u^2+u)^p^14
- FP48_YYY_mul(r,&t3); // f^3.f^(u^3-2u^2+u)^p^14
+ FP48_YYY_copy(&t3,&t1);
+ FP48_YYY_frob(&t3,&X,14); // f^(u^3-2u^2+u)^p^14
+ FP48_YYY_mul(r,&t3); // f^3.f^(u^3-2u^2+u)^p^14
- FP48_YYY_pow(&t1,&t1,x); // f^(u.e14) = f^(u^4-2u^3+u^2) = f^(e13)
+ FP48_YYY_pow(&t1,&t1,x); // f^(u.e14) = f^(u^4-2u^3+u^2) = f^(e13)
#if SIGN_OF_X_ZZZ==NEGATIVEX
- FP48_YYY_conj(&t1,&t1);
+ FP48_YYY_conj(&t1,&t1);
#endif
- FP48_YYY_copy(&t3,&t1);
- FP48_YYY_frob(&t3,&X,13); // f^(e13)^p^13
- FP48_YYY_mul(r,&t3); // f^3.f^(u^3-2u^2+u)^p^14.f^(u^4-2u^3+u^2)^p^13
+ FP48_YYY_copy(&t3,&t1);
+ FP48_YYY_frob(&t3,&X,13); // f^(e13)^p^13
+ FP48_YYY_mul(r,&t3); // f^3.f^(u^3-2u^2+u)^p^14.f^(u^4-2u^3+u^2)^p^13
- FP48_YYY_pow(&t1,&t1,x); // f^(u.e13)
+ FP48_YYY_pow(&t1,&t1,x); // f^(u.e13)
#if SIGN_OF_X_ZZZ==NEGATIVEX
- FP48_YYY_conj(&t1,&t1);
+ FP48_YYY_conj(&t1,&t1);
#endif
- FP48_YYY_copy(&t3,&t1);
- FP48_YYY_frob(&t3,&X,12); // f^(e12)^p^12
- FP48_YYY_mul(r,&t3);
+ FP48_YYY_copy(&t3,&t1);
+ FP48_YYY_frob(&t3,&X,12); // f^(e12)^p^12
+ FP48_YYY_mul(r,&t3);
- FP48_YYY_pow(&t1,&t1,x); // f^(u.e12)
+ FP48_YYY_pow(&t1,&t1,x); // f^(u.e12)
#if SIGN_OF_X_ZZZ==NEGATIVEX
- FP48_YYY_conj(&t1,&t1);
+ FP48_YYY_conj(&t1,&t1);
#endif
- FP48_YYY_copy(&t3,&t1);
- FP48_YYY_frob(&t3,&X,11); // f^(e11)^p^11
- FP48_YYY_mul(r,&t3);
+ FP48_YYY_copy(&t3,&t1);
+ FP48_YYY_frob(&t3,&X,11); // f^(e11)^p^11
+ FP48_YYY_mul(r,&t3);
- FP48_YYY_pow(&t1,&t1,x); // f^(u.e11)
+ FP48_YYY_pow(&t1,&t1,x); // f^(u.e11)
#if SIGN_OF_X_ZZZ==NEGATIVEX
- FP48_YYY_conj(&t1,&t1);
+ FP48_YYY_conj(&t1,&t1);
#endif
- FP48_YYY_copy(&t3,&t1);
- FP48_YYY_frob(&t3,&X,10); // f^(e10)^p^10
- FP48_YYY_mul(r,&t3);
+ FP48_YYY_copy(&t3,&t1);
+ FP48_YYY_frob(&t3,&X,10); // f^(e10)^p^10
+ FP48_YYY_mul(r,&t3);
- FP48_YYY_pow(&t1,&t1,x); // f^(u.e10)
+ FP48_YYY_pow(&t1,&t1,x); // f^(u.e10)
#if SIGN_OF_X_ZZZ==NEGATIVEX
- FP48_YYY_conj(&t1,&t1);
+ FP48_YYY_conj(&t1,&t1);
#endif
- FP48_YYY_copy(&t3,&t1);
- FP48_YYY_frob(&t3,&X,9); // f^(e9)^p^9
- FP48_YYY_mul(r,&t3);
+ FP48_YYY_copy(&t3,&t1);
+ FP48_YYY_frob(&t3,&X,9); // f^(e9)^p^9
+ FP48_YYY_mul(r,&t3);
- FP48_YYY_pow(&t1,&t1,x); // f^(u.e9)
+ FP48_YYY_pow(&t1,&t1,x); // f^(u.e9)
#if SIGN_OF_X_ZZZ==NEGATIVEX
- FP48_YYY_conj(&t1,&t1);
+ FP48_YYY_conj(&t1,&t1);
#endif
- FP48_YYY_copy(&t3,&t1);
- FP48_YYY_frob(&t3,&X,8); // f^(e8)^p^8
- FP48_YYY_mul(r,&t3);
+ FP48_YYY_copy(&t3,&t1);
+ FP48_YYY_frob(&t3,&X,8); // f^(e8)^p^8
+ FP48_YYY_mul(r,&t3);
- FP48_YYY_pow(&t1,&t1,x); // f^(u.e8)
+ FP48_YYY_pow(&t1,&t1,x); // f^(u.e8)
#if SIGN_OF_X_ZZZ==NEGATIVEX
- FP48_YYY_conj(&t1,&t1);
+ FP48_YYY_conj(&t1,&t1);
#endif
- FP48_YYY_conj(&t3,&t2);
- FP48_YYY_mul(&t1,&t3); // f^(u.e8).f^-e15
- FP48_YYY_copy(&t3,&t1);
- FP48_YYY_frob(&t3,&X,7); // f^(e7)^p^7
- FP48_YYY_mul(r,&t3);
+ FP48_YYY_conj(&t3,&t2);
+ FP48_YYY_mul(&t1,&t3); // f^(u.e8).f^-e15
+ FP48_YYY_copy(&t3,&t1);
+ FP48_YYY_frob(&t3,&X,7); // f^(e7)^p^7
+ FP48_YYY_mul(r,&t3);
- FP48_YYY_pow(&t1,&t1,x); // f^(u.e7)
+ FP48_YYY_pow(&t1,&t1,x); // f^(u.e7)
#if SIGN_OF_X_ZZZ==NEGATIVEX
- FP48_YYY_conj(&t1,&t1);
+ FP48_YYY_conj(&t1,&t1);
#endif
- FP48_YYY_copy(&t3,&t1);
- FP48_YYY_frob(&t3,&X,6); // f^(e6)^p^6
... 367 lines suppressed ...