in src/cg21/cg21_pi_factor.c [321:491]
void CG21_PI_FACTOR_PROVE(const CG21_PiFACTOR_SECRETS *r1priv, const CG21_PiFACTOR_COMMIT *r1pub, CG21_PiFACTOR_PROOF *proof,
octet *p1, octet *q1, octet *e){
BIG_1024_58 e_[HFLEN_2048];
BIG_1024_58 e_2[FFLEN_2048 + HFLEN_2048];
BIG_1024_58 e_3[2*FFLEN_2048 + HFLEN_2048];
BIG_1024_58 t5[FFLEN_2048 + HFLEN_2048];
BIG_1024_58 t6[3*FFLEN_2048];
BIG_1024_58 t7[FFLEN_2048 + HFLEN_2048];
BIG_1024_58 t8[2*FFLEN_2048 + HFLEN_2048];
BIG_1024_58 t9[5*FFLEN_2048];
BIG_1024_58 t10[2*FFLEN_2048 + HFLEN_2048];
BIG_1024_58 pF[FFLEN_2048];
BIG_1024_58 qF[FFLEN_2048];
char oct[3*FS_2048];
octet OCT = {0, sizeof(oct), oct};
char p[FS_2048] = {0};
octet p_ = {0,sizeof(p),p};
char qq[FS_2048];
octet q_ = {0,sizeof(qq),qq};
OCT_copy(&p_, p1);
OCT_copy(&q_, q1);
OCT_pad(&p_, FS_2048);
OCT_pad(&q_, FS_2048);
FF_2048_fromOctet(pF, &p_, FFLEN_2048);
FF_2048_fromOctet(qF, &q_, FFLEN_2048);
// load e as HFLEN_2048 in e_
OCT_copy(&OCT, e);
OCT_pad(&OCT, HFS_2048);
FF_2048_fromOctet(e_, &OCT, HFLEN_2048);
// load e as FS_2048+HFS_2048 in e_2
OCT_copy(&OCT, e);
OCT_pad(&OCT, FS_2048+HFS_2048);
FF_2048_fromOctet(e_2, &OCT, FFLEN_2048 + HFLEN_2048);
// load e as 2*FS_2048+HFS_2048 in e_3
OCT_copy(&OCT, e);
OCT_pad(&OCT, 2*FS_2048+HFS_2048);
FF_2048_fromOctet(e_3, &OCT, 2*FFLEN_2048 + HFLEN_2048);
/* z1 = e*p + alpha */
// zeroise variables
FF_2048_zero(t5, FFLEN_2048+HFLEN_2048);
FF_2048_zero(t7, FFLEN_2048+HFLEN_2048);
FF_2048_zero(t8, FFLEN_2048+HFLEN_2048);
OCT_clear(&OCT);
OCT_copy(&OCT, r1priv->alpha);
OCT_pad(&OCT, FS_2048+HFS_2048);
FF_2048_fromOctet(t5, &OCT, FFLEN_2048+HFLEN_2048);
CG21_FF_2048_amul(t7, e_, HFLEN_2048, pF, FFLEN_2048); // t7 = e*p
FF_2048_add(t8, t7, t5, FFLEN_2048+HFLEN_2048); // t3 = e*p + alpha
FF_2048_norm(t8, FFLEN_2048+HFLEN_2048);
FF_2048_toOctet(proof->z1,t8,FFLEN_2048+HFLEN_2048);
/* z2 = e*q + beta */
// zeroise variables
FF_2048_zero(t5, FFLEN_2048+HFLEN_2048);
FF_2048_zero(t7, FFLEN_2048+HFLEN_2048);
FF_2048_zero(t8, FFLEN_2048+HFLEN_2048);
OCT_clear(&OCT);
OCT_copy(&OCT, r1priv->beta);
OCT_pad(&OCT, FS_2048+HFS_2048);
FF_2048_fromOctet(t5, &OCT, FFLEN_2048+HFLEN_2048);
CG21_FF_2048_amul(t7, e_, HFLEN_2048, qF, FFLEN_2048); // t7 = e*p
FF_2048_add(t8, t7, t5, FFLEN_2048+HFLEN_2048); // t3 = e*p + alpha
FF_2048_norm(t8, FFLEN_2048+HFLEN_2048);
FF_2048_toOctet(proof->z2,t8,FFLEN_2048+HFLEN_2048);
/* w1 = e*mu + x */
// zeroise variables
FF_2048_zero(t5, FFLEN_2048 + HFLEN_2048);
FF_2048_zero(t6, 3*FFLEN_2048);
FF_2048_zero(t7, FFLEN_2048 + HFLEN_2048);
// load mu
OCT_clear(&OCT);
OCT_copy(&OCT, r1priv->mu);
OCT_pad(&OCT, FS_2048+HFS_2048);
FF_2048_fromOctet(t5, &OCT, FFLEN_2048 + HFLEN_2048);
CG21_FF_2048_amul(t6, e_, HFLEN_2048, t5, FFLEN_2048 + HFLEN_2048); // t6 = e*mu
//load x
OCT_clear(&OCT);
OCT_copy(&OCT, r1priv->x);
OCT_pad(&OCT, FS_2048+HFS_2048);
FF_2048_fromOctet(t5, &OCT, FFLEN_2048 + HFLEN_2048);
FF_2048_add(t7, t6, t5, FFLEN_2048 + HFLEN_2048); // t7 = e*mu + x
FF_2048_norm(t7, FFLEN_2048 + HFLEN_2048);
FF_2048_toOctet(proof->w1,t7,FFLEN_2048 + HFLEN_2048);
/* w2 = e*nu + y */
// zeroise variables
FF_2048_zero(t5, FFLEN_2048 + HFLEN_2048);
FF_2048_zero(t6, 3*FFLEN_2048);
FF_2048_zero(t7, FFLEN_2048 + HFLEN_2048);
// load mu
OCT_clear(&OCT);
OCT_copy(&OCT, r1priv->nu);
OCT_pad(&OCT, FS_2048+HFS_2048);
FF_2048_fromOctet(t5, &OCT, FFLEN_2048 + HFLEN_2048);
CG21_FF_2048_amul(t6, e_, HFLEN_2048, t5, FFLEN_2048 + HFLEN_2048); // t6 = e*nu
//load y
OCT_clear(&OCT);
OCT_copy(&OCT, r1priv->y);
OCT_pad(&OCT, FS_2048+HFS_2048);
FF_2048_fromOctet(t5, &OCT, FFLEN_2048 + HFLEN_2048);
FF_2048_add(t7, t6, t5, FFLEN_2048 + HFLEN_2048); // t7 = e*nu + y
FF_2048_norm(t7, FFLEN_2048 + HFLEN_2048);
FF_2048_toOctet(proof->w2,t7,FFLEN_2048 + HFLEN_2048);
/* v = e*hat{sigma} + r */
// zeroise variables
FF_2048_zero(t5, FFLEN_2048 + HFLEN_2048);
FF_2048_zero(t6, 3*FFLEN_2048);
FF_2048_zero(t7, FFLEN_2048 + HFLEN_2048);
FF_2048_zero(t8, 2*FFLEN_2048 + HFLEN_2048);
FF_2048_zero(t9, 5*FFLEN_2048);
FF_2048_zero(t10, 2*FFLEN_2048 + HFLEN_2048);
//hat{sigma} = sigma - nu*p
// load sigma
OCT_clear(&OCT);
OCT_copy(&OCT, r1pub->sigma);
OCT_pad(&OCT, 2*FS_2048+HFS_2048);
FF_2048_fromOctet(t8, &OCT, 2*FFLEN_2048 + HFLEN_2048); // t8 = sigma
// load nu
OCT_clear(&OCT);
OCT_copy(&OCT, r1priv->nu);
OCT_pad(&OCT, 2*FS_2048);
FF_2048_fromOctet(t10, &OCT, 2*FFLEN_2048); // t10 = nu
// in amul xlen * k = ylen should hold, that's why we load r1priv->nu as 2*FFLEN_2048
// and not as FFLEN_2048 + HFLEN_2048
CG21_FF_2048_amul(t6, pF, FFLEN_2048, t10, 2*FFLEN_2048); // t6 = nu*p
FF_2048_zero(t10, 2*FFLEN_2048 + HFLEN_2048);
FF_2048_sub(t10, t8, t6, 2*FFLEN_2048 + HFLEN_2048); // t10 = hat{sigma} = sigma - nu*p
FF_2048_norm(t10, 2*FFLEN_2048 + HFLEN_2048);
CG21_FF_2048_amul(t9, e_, HFLEN_2048, t10, 2*FFLEN_2048 + HFLEN_2048); // t9 = e*hat{sigma}
// load r
OCT_clear(&OCT);
OCT_copy(&OCT, r1priv->r);
OCT_pad(&OCT, 2*FS_2048+HFS_2048);
FF_2048_fromOctet(t8, &OCT, 2*FFLEN_2048 + HFLEN_2048); // t8 = r
FF_2048_add(t10, t8, t9, 2*FFLEN_2048 + HFLEN_2048); // t10 = e*hat{sigma} + r
FF_2048_norm(t10, 2*FFLEN_2048 + HFLEN_2048);
FF_2048_toOctet(proof->v,t10,2*FFLEN_2048 + HFLEN_2048);
}