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