Esempio n. 1
0
/* Multiply P by e in group G1 */
    public static ECP G1mul(ECP P, BIG e)
    {
        ECP R;

        if (ROM.USE_GLV)
        {
            P.affine();
            R = new ECP();
            R.copy(P);
            int i, np, nn;
            ECP Q = new ECP();
            Q.copy(P);
            BIG   q   = new BIG(ROM.CURVE_Order);
            FP    cru = new FP(new BIG(ROM.CURVE_Cru));
            BIG   t   = new BIG(0);
            BIG[] u   = glv(e);
            Q.getx().mul(cru);

            np = u[0].nbits();
            t.copy(BIG.modneg(u[0], q));
            nn = t.nbits();
            if (nn < np)
            {
                u[0].copy(t);
                R.neg();
            }

            np = u[1].nbits();
            t.copy(BIG.modneg(u[1], q));
            nn = t.nbits();
            if (nn < np)
            {
                u[1].copy(t);
                Q.neg();
            }

            R = R.mul2(u[0], Q, u[1]);
        }
        else
        {
            R = P.mul(e);
        }
        return(R);
    }
Esempio n. 2
0
/* Constant time select from pre-computed table */
    private void select(ECP[] W, int b)
    {
        ECP MP   = new ECP();
        int m    = b >> 31;
        int babs = (b ^ m) - m;

        babs = (babs - 1) / 2;

        cmove(W[0], teq(babs, 0));       // conditional move
        cmove(W[1], teq(babs, 1));
        cmove(W[2], teq(babs, 2));
        cmove(W[3], teq(babs, 3));
        cmove(W[4], teq(babs, 4));
        cmove(W[5], teq(babs, 5));
        cmove(W[6], teq(babs, 6));
        cmove(W[7], teq(babs, 7));

        MP.copy(this);
        MP.neg();
        cmove(MP, (int)(m & 1));
    }
Esempio n. 3
0
/* this-=Q */
    public void sub(ECP Q)
    {
        Q.neg();
        add(Q);
        Q.neg();
    }