1package org.bouncycastle.asn1.x509; 2 3import java.math.BigInteger; 4import java.util.Enumeration; 5 6import org.bouncycastle.asn1.ASN1EncodableVector; 7import org.bouncycastle.asn1.ASN1Integer; 8import org.bouncycastle.asn1.ASN1Object; 9import org.bouncycastle.asn1.ASN1Primitive; 10import org.bouncycastle.asn1.ASN1Sequence; 11import org.bouncycastle.asn1.ASN1TaggedObject; 12import org.bouncycastle.asn1.DERSequence; 13 14public class DSAParameter 15 extends ASN1Object 16{ 17 ASN1Integer 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 instanceof DSAParameter) 30 { 31 return (DSAParameter)obj; 32 } 33 34 if(obj != null) 35 { 36 return new DSAParameter(ASN1Sequence.getInstance(obj)); 37 } 38 39 return null; 40 } 41 42 public DSAParameter( 43 BigInteger p, 44 BigInteger q, 45 BigInteger g) 46 { 47 this.p = new ASN1Integer(p); 48 this.q = new ASN1Integer(q); 49 this.g = new ASN1Integer(g); 50 } 51 52 private 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 = ASN1Integer.getInstance(e.nextElement()); 63 q = ASN1Integer.getInstance(e.nextElement()); 64 g = ASN1Integer.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 ASN1Primitive toASN1Primitive() 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