Exemplo n.º 1
0
/* GLV method */
    public static BIG[] glv(BIG e)
    {
        int i, j;
        BIG t = new BIG(0);
        BIG q = new BIG(ROM.CURVE_Order);

        BIG[] u = new BIG[2];
        BIG[] v = new BIG[2];
        for (i = 0; i < 2; i++)
        {
            t.copy(new BIG(ROM.CURVE_W[i]));             // why not just t=new BIG(ROM.CURVE_W[i]);
            DBIG d = BIG.mul(t, e);
            v[i] = new BIG(d.div(q));
            u[i] = new BIG(0);
        }
        u[0].copy(e);
        for (i = 0; i < 2; i++)
        {
            for (j = 0; j < 2; j++)
            {
                t.copy(new BIG(ROM.CURVE_SB[j][i]));
                t.copy(BIG.modmul(v[j], t, q));
                u[i].add(q);
                u[i].sub(t);
                u[i].mod(q);
            }
        }
        return(u);
    }
Exemplo n.º 2
0
/* Galbraith & Scott Method */
    public static BIG[] gs(BIG e)
    {
        int i, j;
        BIG t = new BIG(0);
        BIG q = new BIG(ROM.CURVE_Order);

        BIG[] u = new BIG[4];
        BIG[] v = new BIG[4];
        for (i = 0; i < 4; i++)
        {
            t.copy(new BIG(ROM.CURVE_WB[i]));
            DBIG d = BIG.mul(t, e);
            v[i] = new BIG(d.div(q));
            u[i] = new BIG(0);
        }
        u[0].copy(e);
        for (i = 0; i < 4; i++)
        {
            for (j = 0; j < 4; j++)
            {
                t.copy(new BIG(ROM.CURVE_BB[j][i]));
                t.copy(BIG.modmul(v[j], t, q));
                u[i].add(q);
                u[i].sub(t);
                u[i].mod(q);
            }
        }
        return(u);
    }
Exemplo n.º 3
0
/* this*=b mod Modulus */
    public void mul(FP b)
    {
        long ea = BIG.EXCESS(x);
        long eb = BIG.EXCESS(b.x);

        if ((ea + 1) * (eb + 1) + 1 >= ROM.FEXCESS)
        {
            reduce();
        }

        DBIG d = BIG.mul(x, b.x);

        x.copy(BIG.mod(d));
    }
Exemplo n.º 4
0
/* z=x*y, t is workspace */
    private void karmul(int vp, FF x, int xp, FF y, int yp, FF t, int tp, int n)
    {
        int nd2;

        if (n == 1)
        {
            DBIG d = BIG.mul(x.v[xp], y.v[yp]);
            v[vp + 1] = d.Split(8 * ROM.MODBYTES);
            v[vp].copy(d);
            return;
        }
        nd2 = n / 2;
        radd(vp, x, xp, x, xp + nd2, nd2);
        //rnorm(vp,nd2);
        radd(vp + nd2, y, yp, y, yp + nd2, nd2);
        //rnorm(vp+nd2,nd2);
        t.karmul(tp, this, vp, this, vp + nd2, t, tp + n, nd2);
        karmul(vp, x, xp, y, yp, t, tp + n, nd2);
        karmul(vp + n, x, xp + nd2, y, yp + nd2, t, tp + n, nd2);
        t.rdec(tp, this, vp, n);
        t.rdec(tp, this, vp + n, n);
        rinc(vp + nd2, t, tp, n);
        rnorm(vp, 2 * n);
    }