001package org.apache.commons.ssl.org.bouncycastle.asn1.x509; 002 003import java.math.BigInteger; 004import java.util.Enumeration; 005 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector; 007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Integer; 008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object; 009import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive; 010import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence; 011import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject; 012import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence; 013 014public class DSAParameter 015 extends ASN1Object 016{ 017 ASN1Integer p, q, g; 018 019 public static DSAParameter getInstance( 020 ASN1TaggedObject obj, 021 boolean explicit) 022 { 023 return getInstance(ASN1Sequence.getInstance(obj, explicit)); 024 } 025 026 public static DSAParameter getInstance( 027 Object obj) 028 { 029 if (obj instanceof DSAParameter) 030 { 031 return (DSAParameter)obj; 032 } 033 034 if(obj != null) 035 { 036 return new DSAParameter(ASN1Sequence.getInstance(obj)); 037 } 038 039 return null; 040 } 041 042 public DSAParameter( 043 BigInteger p, 044 BigInteger q, 045 BigInteger g) 046 { 047 this.p = new ASN1Integer(p); 048 this.q = new ASN1Integer(q); 049 this.g = new ASN1Integer(g); 050 } 051 052 private DSAParameter( 053 ASN1Sequence seq) 054 { 055 if (seq.size() != 3) 056 { 057 throw new IllegalArgumentException("Bad sequence size: " + seq.size()); 058 } 059 060 Enumeration e = seq.getObjects(); 061 062 p = ASN1Integer.getInstance(e.nextElement()); 063 q = ASN1Integer.getInstance(e.nextElement()); 064 g = ASN1Integer.getInstance(e.nextElement()); 065 } 066 067 public BigInteger getP() 068 { 069 return p.getPositiveValue(); 070 } 071 072 public BigInteger getQ() 073 { 074 return q.getPositiveValue(); 075 } 076 077 public BigInteger getG() 078 { 079 return g.getPositiveValue(); 080 } 081 082 public ASN1Primitive toASN1Primitive() 083 { 084 ASN1EncodableVector v = new ASN1EncodableVector(); 085 086 v.add(p); 087 v.add(q); 088 v.add(g); 089 090 return new DERSequence(v); 091 } 092}