Beispiel #1
0
/* set (x,y) from two BIGs */
    public ECP(BIG ix, BIG iy)
    {
        x = new FP(ix);
        y = new FP(iy);
        z = new FP(1);
        FP rhs = RHS(x);

        if (ROM.CURVETYPE == ROM.MONTGOMERY)
        {
            if (rhs.jacobi() == 1)
            {
                INF = false;
            }
            else
            {
                inf();
            }
        }
        else
        {
            FP y2 = new FP(y);
            y2.sqr();
            if (y2.Equals(rhs))
            {
                INF = false;
            }
            else
            {
                inf();
            }
        }
    }
Beispiel #2
0
/* test for O point-at-infinity */
    public bool is_infinity()
    {
        if (ROM.CURVETYPE == ROM.EDWARDS)
        {
            x.reduce();
            y.reduce();
            z.reduce();
            return(x.iszilch() && y.Equals(z));
        }
        else
        {
            return(INF);
        }
    }
Beispiel #3
0
/* set to affine - from (x,y,z) to (x,y) */
    public void affine()
    {
        if (is_infinity())
        {
            return;
        }
        FP one = new FP(1);

        if (z.Equals(one))
        {
            return;
        }
        z.inverse();
        if (ROM.CURVETYPE == ROM.WEIERSTRASS)
        {
            FP z2 = new FP(z);
            z2.sqr();
            x.mul(z2);
            x.reduce();
            y.mul(z2);
            y.mul(z);
            y.reduce();
        }
        if (ROM.CURVETYPE == ROM.EDWARDS)
        {
            x.mul(z);
            x.reduce();
            y.mul(z);
            y.reduce();
        }
        if (ROM.CURVETYPE == ROM.MONTGOMERY)
        {
            x.mul(z);
            x.reduce();
        }
        z.copy(one);
    }
Beispiel #4
0
/* Test P == Q */
    public bool Equals(ECP Q)
    {
        if (is_infinity() && Q.is_infinity())
        {
            return(true);
        }
        if (is_infinity() || Q.is_infinity())
        {
            return(false);
        }
        if (ROM.CURVETYPE == ROM.WEIERSTRASS)
        {
            FP zs2 = new FP(z);
            zs2.sqr();
            FP zo2 = new FP(Q.z);
            zo2.sqr();
            FP zs3 = new FP(zs2);
            zs3.mul(z);
            FP zo3 = new FP(zo2);
            zo3.mul(Q.z);
            zs2.mul(Q.x);
            zo2.mul(x);
            if (!zs2.Equals(zo2))
            {
                return(false);
            }
            zs3.mul(Q.y);
            zo3.mul(y);
            if (!zs3.Equals(zo3))
            {
                return(false);
            }
        }
        else
        {
            FP a = new FP(0);
            FP b = new FP(0);
            a.copy(x);
            a.mul(Q.z);
            a.reduce();
            b.copy(Q.x);
            b.mul(z);
            b.reduce();
            if (!a.Equals(b))
            {
                return(false);
            }
            if (ROM.CURVETYPE == ROM.EDWARDS)
            {
                a.copy(y);
                a.mul(Q.z);
                a.reduce();
                b.copy(Q.y);
                b.mul(z);
                b.reduce();
                if (!a.Equals(b))
                {
                    return(false);
                }
            }
        }
        return(true);
    }
Beispiel #5
0
 /* test this=x */
 public bool Equals(FP2 x)
 {
     return(a.Equals(x.a) && b.Equals(x.b));
 }
Beispiel #6
0
        /* test this=1 ? */
        public bool IsUnity()
        {
            FP one = new FP(1);

            return(a.Equals(one) && b.IsZilch());
        }
Beispiel #7
0
/* test this=1 ? */
    public bool isunity()
    {
        FP one = new FP(1);

        return(a.Equals(one) && b.iszilch());
    }