Пример #1
0
/* Create random BIG in portable way, one bit at a time */
    public static BIG randomnum(BIG q, RAND rng)
    {
        DBIG d = new DBIG(0);
        int  i, b, j = 0, r = 0;

        for (i = 0; i < 2 * ROM.MODBITS; i++)
        {
            if (j == 0)
            {
                r = rng.Byte;
            }
            else
            {
                r >>= 1;
            }

            b = r & 1;
            d.shl(1);
            d.w[0] += b;             // m.inc(b);
            j++;
            j &= 7;
        }
        BIG m = d.mod(q);

        return(m);
    }
Пример #2
0
/* return a^2 mod m */
    public static BIG modsqr(BIG a, BIG m)
    {
        a.mod(m);
        DBIG d = sqr(a);

        return(d.mod(m));
    }
Пример #3
0
/* this*=c mod Modulus, where c is a small int */
    public void imul(int c)
    {
        norm();
        bool s = false;

        if (c < 0)
        {
            c = -c;
            s = true;
        }
        long afx = (BIG.EXCESS(x) + 1) * (c + 1) + 1;

        if (c < ROM.NEXCESS && afx < ROM.FEXCESS)
        {
            x.imul(c);
        }
        else
        {
            if (afx < ROM.FEXCESS)
            {
                x.pmul(c);
            }
            else
            {
                DBIG d = x.pxmul(c);
                x.copy(d.mod(p));
            }
        }
        if (s)
        {
            neg();
        }
        norm();
    }
Пример #4
0
/* return a*b mod m */
    public static BIG modmul(BIG a, BIG b, BIG m)
    {
        a.mod(m);
        b.mod(m);
        DBIG d = mul(a, b);

        return(d.mod(m));
    }
Пример #5
0
/* convert to Montgomery n-residue form */
    public void nres()
    {
        if (ROM.MODTYPE != ROM.PSEUDO_MERSENNE)
        {
            DBIG d = new DBIG(x);
            d.shl(ROM.NLEN * ROM.BASEBITS);
            x.copy(d.mod(p));
        }
    }