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 == 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 ASN1Integer(p);
48        this.q = new ASN1Integer(q);
49        this.g = new ASN1Integer(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 = 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