1 package org.bouncycastle.asn1.x509; 2 3 import java.math.BigInteger; 4 import java.util.Enumeration; 5 6 import org.bouncycastle.asn1.ASN1Encodable; 7 import org.bouncycastle.asn1.ASN1EncodableVector; 8 import org.bouncycastle.asn1.ASN1Sequence; 9 import org.bouncycastle.asn1.ASN1TaggedObject; 10 import org.bouncycastle.asn1.DERInteger; 11 import org.bouncycastle.asn1.DERObject; 12 import org.bouncycastle.asn1.DERSequence; 13 14 public class DSAParameter 15 extends ASN1Encodable 16 { 17 DERInteger p, q, g; 18 19 public static DSAParameter getInstance( 20 ASN1TaggedObject obj, 21 boolean explicit) 22 { 23 return getInstance(ASN1Sequence.getInstance(obj, explicit)); 24 } 25 26 public static DSAParameter getInstance( 27 Object obj) 28 { 29 if(obj == null || obj instanceof DSAParameter) 30 { 31 return (DSAParameter)obj; 32 } 33 34 if(obj instanceof ASN1Sequence) 35 { 36 return new DSAParameter((ASN1Sequence)obj); 37 } 38 39 throw new IllegalArgumentException("Invalid DSAParameter: " + obj.getClass().getName()); 40 } 41 42 public DSAParameter( 43 BigInteger p, 44 BigInteger q, 45 BigInteger g) 46 { 47 this.p = new DERInteger(p); 48 this.q = new DERInteger(q); 49 this.g = new DERInteger(g); 50 } 51 52 public DSAParameter( 53 ASN1Sequence seq) 54 { 55 if (seq.size() != 3) 56 { 57 throw new IllegalArgumentException("Bad sequence size: " + seq.size()); 58 } 59 60 Enumeration e = seq.getObjects(); 61 62 p = DERInteger.getInstance(e.nextElement()); 63 q = DERInteger.getInstance(e.nextElement()); 64 g = DERInteger.getInstance(e.nextElement()); 65 } 66 67 public BigInteger getP() 68 { 69 return p.getPositiveValue(); 70 } 71 72 public BigInteger getQ() 73 { 74 return q.getPositiveValue(); 75 } 76 77 public BigInteger getG() 78 { 79 return g.getPositiveValue(); 80 } 81 82 public DERObject toASN1Object() 83 { 84 ASN1EncodableVector v = new ASN1EncodableVector(); 85 86 v.add(p); 87 v.add(q); 88 v.add(g); 89 90 return new DERSequence(v); 91 } 92 } 93