using System; using Org.BouncyCastle.Math; namespace Org.BouncyCastle.Crypto.Parameters { public class DsaParameters : ICipherParameters { private readonly BigInteger p, q , g; private readonly DsaValidationParameters validation; public DsaParameters( BigInteger p, BigInteger q, BigInteger g) : this(p, q, g, null) { } public DsaParameters( BigInteger p, BigInteger q, BigInteger g, DsaValidationParameters parameters) { if (p == null) throw new ArgumentNullException("p"); if (q == null) throw new ArgumentNullException("q"); if (g == null) throw new ArgumentNullException("g"); this.p = p; this.q = q; this.g = g; this.validation = parameters; } public BigInteger P { get { return p; } } public BigInteger Q { get { return q; } } public BigInteger G { get { return g; } } public DsaValidationParameters ValidationParameters { get { return validation; } } public override bool Equals( object obj) { if (obj == this) return true; DsaParameters other = obj as DsaParameters; if (other == null) return false; return Equals(other); } protected bool Equals( DsaParameters other) { return p.Equals(other.p) && q.Equals(other.q) && g.Equals(other.g); } public override int GetHashCode() { return p.GetHashCode() ^ q.GetHashCode() ^ g.GetHashCode(); } } }