1b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampackage org.bouncycastle.asn1.x509; 2b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 3b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport java.math.BigInteger; 4b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport java.util.Enumeration; 5b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 6b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1EncodableVector; 74c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Integer; 84c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Object; 94c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Primitive; 10b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1Sequence; 11b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1TaggedObject; 12b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.DERSequence; 13b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 14b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampublic class DSAParameter 154c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom extends ASN1Object 16b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam{ 174c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom ASN1Integer p, q, g; 18b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 19b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public static DSAParameter getInstance( 20b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam ASN1TaggedObject obj, 21b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam boolean explicit) 22b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 23b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return getInstance(ASN1Sequence.getInstance(obj, explicit)); 24b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 25b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 26b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public static DSAParameter getInstance( 27b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam Object obj) 28b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 2970c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom if (obj instanceof DSAParameter) 30b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 31b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return (DSAParameter)obj; 32b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 33b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 3470c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom if(obj != null) 35b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 3670c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom return new DSAParameter(ASN1Sequence.getInstance(obj)); 37b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 38b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 3970c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom return null; 40b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 41b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 42b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public DSAParameter( 43b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam BigInteger p, 44b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam BigInteger q, 45b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam BigInteger g) 46b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 474c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom this.p = new ASN1Integer(p); 484c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom this.q = new ASN1Integer(q); 494c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom this.g = new ASN1Integer(g); 50b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 51b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 5270c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom private DSAParameter( 53b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam ASN1Sequence seq) 54b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 55b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam if (seq.size() != 3) 56b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 57b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam throw new IllegalArgumentException("Bad sequence size: " + seq.size()); 58b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 59b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 60b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam Enumeration e = seq.getObjects(); 61b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 624c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom p = ASN1Integer.getInstance(e.nextElement()); 634c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom q = ASN1Integer.getInstance(e.nextElement()); 644c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom g = ASN1Integer.getInstance(e.nextElement()); 65b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 66b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 67b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public BigInteger getP() 68b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 69b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return p.getPositiveValue(); 70b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 71b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 72b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public BigInteger getQ() 73b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 74b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return q.getPositiveValue(); 75b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 76b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 77b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public BigInteger getG() 78b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 79b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return g.getPositiveValue(); 80b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 81b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 824c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public ASN1Primitive toASN1Primitive() 83b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 84b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam ASN1EncodableVector v = new ASN1EncodableVector(); 85b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 86b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam v.add(p); 87b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam v.add(q); 88b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam v.add(g); 89b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 90b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return new DERSequence(v); 91b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 92b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam} 93