1e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellypackage org.bouncycastle.asn1.pkcs;
261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
3e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyimport java.math.BigInteger;
4e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyimport java.util.Enumeration;
5e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
6e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyimport org.bouncycastle.asn1.ASN1EncodableVector;
7e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyimport org.bouncycastle.asn1.ASN1Integer;
8e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyimport org.bouncycastle.asn1.ASN1Object;
9e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyimport org.bouncycastle.asn1.ASN1Primitive;
10e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyimport org.bouncycastle.asn1.ASN1Sequence;
116eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalimport org.bouncycastle.asn1.DERSequence;
12e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
13e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellypublic class DHParameter
14e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    extends ASN1Object
15e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly{
16e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    ASN1Integer      p, g, l;
17e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
18e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    public DHParameter(
19e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        BigInteger  p,
20e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        BigInteger  g,
21e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        int         l)
22e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    {
23e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        this.p = new ASN1Integer(p);
24e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        this.g = new ASN1Integer(g);
25e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
26e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        if (l != 0)
27e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        {
28e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly            this.l = new ASN1Integer(l);
29e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        }
30e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        else
31e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        {
32e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly            this.l = null;
33e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        }
34e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    }
35e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
36e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    public static DHParameter getInstance(
37826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        Object  obj)
38278952ff92fab2da0c47b912daeb662130676be1Haynes Mathew George    {
39826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        if (obj instanceof DHParameter)
40e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        {
418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            return (DHParameter)obj;
428767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        }
438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        if (obj != null)
458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        {
468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            return new DHParameter(ASN1Sequence.getInstance(obj));
47e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        }
48e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
49e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        return null;
50e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    }
51e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
52e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    private DHParameter(
53e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        ASN1Sequence  seq)
54e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    {
55e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        Enumeration     e = seq.getObjects();
56e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
57e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        p = ASN1Integer.getInstance(e.nextElement());
58e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        g = ASN1Integer.getInstance(e.nextElement());
59e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
60e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        if (e.hasMoreElements())
61e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        {
62e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly            l = (ASN1Integer)e.nextElement();
638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        }
648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        else
658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        {
668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            l = null;
67e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        }
68e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    }
69e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
70e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    public BigInteger getP()
71e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    {
7261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return p.getPositiveValue();
7361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
7461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
7561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    public BigInteger getG()
7661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    {
77e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        return g.getPositiveValue();
78e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    }
7961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
8061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    public BigInteger getL()
8161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    {
8261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (l == null)
8361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        {
84e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly            return null;
858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        }
868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        return l.getPositiveValue();
888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    }
898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
90e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    public ASN1Primitive toASN1Primitive()
918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    {
928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        ASN1EncodableVector  v = new ASN1EncodableVector();
938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
94e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        v.add(p);
958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        v.add(g);
968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        if (this.getL() != null)
988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        {
99e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            v.add(l);
1008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        }
101826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
10261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return new DERSequence(v);
103826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    }
104826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
105826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev