Exemplo n.º 1
0
        public DHParameters(
            BigInteger p,
            BigInteger g,
            BigInteger q,
            int m,
            int l,
            BigInteger j,
            DHValidationParameters validation)
        {
            if (p == null)
            {
                throw new ArgumentNullException("p");
            }
            if (g == null)
            {
                throw new ArgumentNullException("g");
            }
            if (!p.TestBit(0))
            {
                throw new ArgumentException("field must be an odd prime", "p");
            }
            if (g.CompareTo(BigInteger.Two) < 0 ||
                g.CompareTo(p.Subtract(BigInteger.Two)) > 0)
            {
                throw new ArgumentException("generator must in the range [2, p - 2]", "g");
            }
            if (q != null && q.BitLength >= p.BitLength)
            {
                throw new ArgumentException("q too big to be a factor of (p-1)", "q");
            }
            if (m >= p.BitLength)
            {
                throw new ArgumentException("m value must be < bitlength of p", "m");
            }
            if (l != 0)
            {
                // TODO Check this against the Java version, which has 'l > p.BitLength' here
                if (l >= p.BitLength)
                {
                    throw new ArgumentException("when l value specified, it must be less than bitlength(p)", "l");
                }
                if (l < m)
                {
                    throw new ArgumentException("when l value specified, it may not be less than m value", "l");
                }
            }
            if (j != null && j.CompareTo(BigInteger.Two) < 0)
            {
                throw new ArgumentException("subgroup factor must be >= 2", "j");
            }

            // TODO If q, j both provided, validate p = jq + 1 ?

            this.p          = p;
            this.g          = g;
            this.q          = q;
            this.m          = m;
            this.l          = l;
            this.j          = j;
            this.validation = validation;
        }
 protected bool Equals(
     DHValidationParameters other)
 {
     return(counter == other.counter &&
            Arrays.AreEqual(this.seed, other.seed));
 }