Пример #1
0
void g(ECn& A,ECn& B,ZZn& Qx,ZZn2& Qy,ZZn2& num,BOOL precomp,ZZn* store,int& ptr)
{
    ZZn  lam,x,y,m,nx;
    ZZn2 u;
    big pointer;
    if (num.iszero()) return;

    if (!precomp)
    { // Store line start point and slope.
      // Evaluate line from A, and then evaluate vertical through destination
        extract(A,x,y); 
        pointer=A.add(B);
        if (pointer==NULL) {num=0; return;} 
        lam=pointer;

        store[ptr++]=x; store[ptr++]=y; store[ptr++]=lam; 
        if (A.iszero()) return;   
// line
        m=Qx; u=Qy;
        m-=x; m*=lam;            // 1 ZZn muls
        u-=y; u-=m;
    }
    else
    { // extract precalculated values from the store.... - nx is a peek ahead
        x=store[ptr++]; y=store[ptr++]; lam=store[ptr++]; nx=store[ptr];
        if (nx.iszero()) return;

        m=Qx; u=Qy;
        m-=x; m*=lam;              // 1 ZZn muls
        u-=y; u-=m;
    }
 
    num*=u;                        // 3 ZZn muls  
}
Пример #2
0
void g(ECn& A,ECn& B,ZZn2& Qx,ZZn2& Qy,ZZn2& num)
{
    ZZn  lam,mQy;
    ZZn2 d,u;
    big ptr;
    ECn P=A;

// Evaluate line from A
    A.add(B, &ptr, NULL, NULL);

#ifndef SCOTT
    if (A.iszero())   { u=vertical(P,Qx); d=1; }
    else
    {
#endif
        if (ptr==NULL) u=1;
        else 
        {
            lam=ptr;
            u=line(P,A,lam,Qx,Qy);
        }
#ifndef SCOTT
        d=vertical(A,Qx);
    }

    num*=(u*conj(d));    // 6 ZZn muls  
#else
// denominator elimination!
    num*=u;
#endif
}
Пример #3
0
void g(ECn& A,ECn& B,ZZn2& Qx,ZZn2& Qy,ZZn2& num)
{
    int type;
    ZZn  lam,mQy;
    ZZn2 d,u;
    big ptr;
    ECn P=A;

// Evaluate line from A
    type=A.add(B,&ptr);

#ifndef SCOTT
    if (!type)   { u=vertical(P,Qx); d=1; }
    else
    {
#endif
        lam=ptr;
        u=line(P,A,lam,Qx,Qy);
#ifndef SCOTT
        d=vertical(A,Qx);
    }

    num*=(u*conj(d));    // 6 ZZn muls  
#else
// denominator elimination!
    num*=u;
#endif        

}
Пример #4
0
ZZn6 g(ECn& A,ECn& B,ECn& C,ECn& D,ZZn3& Qx,ZZn3& Qy,ZZn3& Sx,ZZn3& Sy)
{
    ZZn6 u;

    ZZn lam;
    big ptr;
    ECn P;
 
    P=A;
    ptr=A.add(B);
    if (ptr==NULL)  return (ZZn6)1;
    lam=ptr; 
    u=line(P,A,lam,Qx,Qy);

    P=C;
    ptr=C.add(D);
    if (ptr==NULL)  return (ZZn6)1;
    lam=ptr;
    return u*line(P,C,lam,Sx,Sy);
}
Пример #5
0
ZZn6 g(ECn& A,ECn& B,ECn& C,ECn& D,ZZn3& Qx,ZZn3& Qy,ZZn3& Sx,ZZn3& Sy)
{
    ZZn6 u;
    int type;
    ZZn lam;
    big ptr;
    ECn P;
 
    P=A;
    type=A.add(B,&ptr);
    if (!type) return (ZZn6)1;
    lam=ptr; 
    u=line(P,A,lam,Qx,Qy);

    P=C;
    type=C.add(D,&ptr);
    if (!type) return (ZZn6)1;
    lam=ptr;
    return u*line(P,C,lam,Sx,Sy);
}
Пример #6
0
ZZn8 g(ECn& A,ECn& B,ZZn4& Qx,ZZn4& Qy)
{
    int type;
    ZZn  lam;
    big ptr;
    ECn P=A;

// Evaluate line from A
    type=A.add(B,&ptr);
    if (!type)   return (ZZn8)1; 

    lam=ptr;
    return line(P,A,lam,Qx,Qy);
}
Пример #7
0
ZZn4 g(ECn& A,ECn& B,ZZn2& Qx,ZZn2& Qy)
{
    int type;
    ZZn  lam,extra1,extra2;
    big ptr,ex1,ex2;
    ECn P=A;

// Evaluate line from A
    type=A.add(B,&ptr,&ex1,&ex2);
    if (!type)   return (ZZn4)1; 
    lam=ptr;
    extra1=ex1;
    extra2=ex2;
    return line(P,A,B,type,lam,extra1,extra2,Qx,Qy);
}
Пример #8
0
ZZn2 g(ECn& A,ECn& B,ZZn& Px,ZZn& Py)
{
    int type;
    ZZn  lam,extra1,extra2;
    ZZn2 u;
    ECn P=A;
    big ptr,ex1,ex2;

    type=A.add(B,&ptr,&ex1,&ex2);
    if (!type) return (ZZn2)1;
    lam=ptr;
	extra1=ex1;
	extra2=ex2;
    
    return line(P,A,B,type,lam,extra1,extra2,Px,Py);
}
Пример #9
0
ZZn2 g(ECn& A,ECn& B,ZZn& a,ZZn& d)
{
    int type;
    ZZn  lam,extra1,extra2;
    ECn P=A;
    big ptr,ex1,ex2;

// Evaluate line from A - lam is line slope

    type=A.add(B,&ptr,&ex1,&ex2);
    if (!type)   return (ZZn2)1; 
    lam=ptr;   // in projective case slope = lam/A.z
    extra1=ex1;
    extra2=ex2;
    return line(P,A,B,type,lam,extra1,extra2,a,d);
}
Пример #10
0
void g(ECn& A,ECn& B,ZZn6& Qx,ZZn6& Qy,ZZn6& num,BOOL first)
{
    ZZn  lam;
    ZZn6 u;
    big ptr;
    ECn P=A;

// Evaluate line from A
    ptr=A.add(B);
    if (ptr==NULL)    { num.clear(); return; }
    else lam=ptr;

    if (A.iszero())   return; 

    u=line(P,A,lam,Qx,Qy);

    if (first) num= u; 
    else       num*=u;    
}
Пример #11
0
void g(ECn& A,ECn& B,ZZn2& Qx,ZZn& Qy,ZZn2& num,ZZn2& denom,int as,BOOL first)
{
    ZZn  lam,mQy;
    ZZn2 d,u;
    big ptr;
    ECn P=A;

    if (as==ADD)
    { // Evaluate line from A, and then evaluate vertical through destination
        ptr=A.add(B);
        if (ptr==NULL)    { num=0; return; }
        else lam=ptr;

        if (A.iszero())   { u=vertical(P,Qx); d=1; }
        else
        {
            u=line(P,A,lam,Qx,Qy);
            d=vertical(A,Qx);
        }
    }
    else // as==SUB
    { // Evaluate Vertical at A, and then line from A to destination
      // (Note swap num and denom, Qy=-Qy, process lines "backwards")
        u=vertical(A,Qx);
        ptr=A.sub(B);
        if (ptr==NULL)    { num=0; return; }
        else lam=ptr;

        if (A.iszero())   { d=u;  } 
        else
        {
            mQy=-Qy;
            d=line(P,A,lam,Qx,mQy);
        }
    }

    if (first) {num= u; denom= d; }
    else       {num*=u; denom*=d; }   // 6 ZZn muls  
}