Exemple #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 * q.NBits(); 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);
        }
Exemple #2
0
        /* return a^2 mod m */
        public static BIG ModSqr(BIG a1, BIG m)
        {
            BIG a = new BIG(a1);

            a.Mod(m);
            DBIG d = Sqr(a);

            return(d.Mod(m));
        }
Exemple #3
0
        /* return a*b mod m */
        public static BIG ModMul(BIG a1, BIG b1, BIG m)
        {
            BIG a = new BIG(a1);
            BIG b = new BIG(b1);

            a.Mod(m);
            b.Mod(m);
            DBIG d = Mul(a, b);

            return(d.Mod(m));
        }