001package org.apache.commons.ssl.org.bouncycastle.asn1.pkcs;
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.DERSequence;
012
013public class DHParameter
014    extends ASN1Object
015{
016    ASN1Integer      p, g, l;
017
018    public DHParameter(
019        BigInteger  p,
020        BigInteger  g,
021        int         l)
022    {
023        this.p = new ASN1Integer(p);
024        this.g = new ASN1Integer(g);
025
026        if (l != 0)
027        {
028            this.l = new ASN1Integer(l);
029        }
030        else
031        {
032            this.l = null;
033        }
034    }
035
036    public static DHParameter getInstance(
037        Object  obj)
038    {
039        if (obj instanceof DHParameter)
040        {
041            return (DHParameter)obj;
042        }
043
044        if (obj != null)
045        {
046            return new DHParameter(ASN1Sequence.getInstance(obj));
047        }
048
049        return null;
050    }
051
052    private DHParameter(
053        ASN1Sequence  seq)
054    {
055        Enumeration     e = seq.getObjects();
056
057        p = ASN1Integer.getInstance(e.nextElement());
058        g = ASN1Integer.getInstance(e.nextElement());
059
060        if (e.hasMoreElements())
061        {
062            l = (ASN1Integer)e.nextElement();
063        }
064        else
065        {
066            l = null;
067        }
068    }
069
070    public BigInteger getP()
071    {
072        return p.getPositiveValue();
073    }
074
075    public BigInteger getG()
076    {
077        return g.getPositiveValue();
078    }
079
080    public BigInteger getL()
081    {
082        if (l == null)
083        {
084            return null;
085        }
086
087        return l.getPositiveValue();
088    }
089
090    public ASN1Primitive toASN1Primitive()
091    {
092        ASN1EncodableVector  v = new ASN1EncodableVector();
093
094        v.add(p);
095        v.add(g);
096
097        if (this.getL() != null)
098        {
099            v.add(l);
100        }
101
102        return new DERSequence(v);
103    }
104}