예제 #1
0
void zzn4_powq(_MIPD_ big fr,zzn4 *w)
{
    zzn2_conj(_MIPP_ &(w->x),&(w->x));
    zzn2_conj(_MIPP_ &(w->y),&(w->y));
    nres(_MIPP_ fr,mr_mip->w1);
    zzn2_smul(_MIPP_ &(w->y),mr_mip->w1,&(w->y));
}
예제 #2
0
파일: mrzzn4.c 프로젝트: FlexCOS/code
void zzn4_lmul(_MIPD_ zzn4 *x,big y,zzn4 *w)
{
#ifdef MR_OS_THREADS
    miracl *mr_mip=get_mip();
#endif
    if (mr_mip->ERNUM) return;
    MR_IN(FUNC_BASE+15)

	if (!zzn2_iszero(&(x->a))) zzn2_smul(_MIPP_ &(x->a),y,&(w->a));
	else zzn2_zero(&(w->a));
	if (!zzn2_iszero(&(x->b))) zzn2_smul(_MIPP_ &(x->b),y,&(w->b));
	else zzn2_zero(&(w->b));
	w->unitary=FALSE;

    MR_OUT
}
예제 #3
0
void g(_MIPD_ zzn2 *Ax,zzn2 *Ay,zzn2 *Az,zzn2 *Bx,zzn2 *By,zzn2 *Bz,big Px,big Py,zzn4 *w)
{
    BOOL Doubling;
    zzn2 lam,extra1,extra2,Kx,nn,dd;

#ifndef MR_STATIC
    char *mem = memalloc(_MIPP_ 12);
#else
    char mem[MR_BIG_RESERVE(12)];
    memset(mem, 0, MR_BIG_RESERVE(12));
#endif
    lam.a=mirvar_mem(_MIPP_ mem,0);
    lam.b=mirvar_mem(_MIPP_ mem,1);
    extra1.a=mirvar_mem(_MIPP_ mem,2);
    extra1.b=mirvar_mem(_MIPP_ mem,3);
    extra2.a=mirvar_mem(_MIPP_ mem,4);
    extra2.b=mirvar_mem(_MIPP_ mem,5);
    Kx.a=mirvar_mem(_MIPP_ mem,6);
    Kx.b=mirvar_mem(_MIPP_ mem,7);
    nn.a=mirvar_mem(_MIPP_ mem,8);
    nn.b=mirvar_mem(_MIPP_ mem,9);
    dd.a=mirvar_mem(_MIPP_ mem,10);
    dd.b=mirvar_mem(_MIPP_ mem,11);

    zzn2_copy(Ax,&Kx);

    Doubling=ecurve_fp2_add(_MIPP_ Bx,By,Bz,Ax,Ay,Az,&lam,&extra1,&extra2);

    /* Get extra information from the point addition, for use in the line functions */

    if (!Doubling)
    {
        zzn2_smul(_MIPP_ Az,Py,&nn);
        zzn2_timesi(_MIPP_ &nn);
        zzn2_copy(Bx,&dd);
        zzn2_timesi(_MIPP_ &dd);
        zzn2_sadd(_MIPP_ &dd,Px,&dd);
        zzn2_mul(_MIPP_ &lam,&dd,&lam);
        zzn2_copy(By,&dd);
        zzn2_timesi(_MIPP_ &dd);
        zzn2_mul(_MIPP_ &dd,Az,&dd);
        zzn2_sub(_MIPP_ &lam,&dd,&dd);
    }
    else
    {
        zzn2_smul(_MIPP_ &extra2,Py,&nn);
        zzn2_mul(_MIPP_ &nn,Az,&nn);
        zzn2_timesi(_MIPP_ &nn);
        zzn2_timesi(_MIPP_ &Kx);
        zzn2_smul(_MIPP_ &extra2,Px,&dd);
        zzn2_add(_MIPP_ &dd,&Kx,&dd);
        zzn2_mul(_MIPP_ &lam,&dd,&lam);
        zzn2_timesi(_MIPP_ &extra1);
        zzn2_sub(_MIPP_ &lam,&extra1,&dd);

    }
    zzn2_copy(&nn,&(w->x));
    zzn2_copy(&dd,&(w->y));

#ifndef MR_STATIC
    memkill(_MIPP_ mem,12);
#else
    memset(mem,0,MR_BIG_RESERVE(12));
#endif
    return;
}