| package org.bouncycastle.asn1.x9; |
| |
| import java.util.Enumeration; |
| |
| import org.bouncycastle.asn1.ASN1Encodable; |
| import org.bouncycastle.asn1.ASN1EncodableVector; |
| import org.bouncycastle.asn1.ASN1Integer; |
| import org.bouncycastle.asn1.ASN1Object; |
| import org.bouncycastle.asn1.ASN1Primitive; |
| import org.bouncycastle.asn1.ASN1Sequence; |
| import org.bouncycastle.asn1.ASN1TaggedObject; |
| import org.bouncycastle.asn1.DERSequence; |
| |
| public class DHDomainParameters |
| extends ASN1Object |
| { |
| private ASN1Integer p, g, q, j; |
| private DHValidationParms validationParms; |
| |
| public static DHDomainParameters getInstance(ASN1TaggedObject obj, boolean explicit) |
| { |
| return getInstance(ASN1Sequence.getInstance(obj, explicit)); |
| } |
| |
| public static DHDomainParameters getInstance(Object obj) |
| { |
| if (obj == null || obj instanceof DHDomainParameters) |
| { |
| return (DHDomainParameters)obj; |
| } |
| |
| if (obj instanceof ASN1Sequence) |
| { |
| return new DHDomainParameters((ASN1Sequence)obj); |
| } |
| |
| throw new IllegalArgumentException("Invalid DHDomainParameters: " |
| + obj.getClass().getName()); |
| } |
| |
| public DHDomainParameters(ASN1Integer p, ASN1Integer g, ASN1Integer q, ASN1Integer j, |
| DHValidationParms validationParms) |
| { |
| if (p == null) |
| { |
| throw new IllegalArgumentException("'p' cannot be null"); |
| } |
| if (g == null) |
| { |
| throw new IllegalArgumentException("'g' cannot be null"); |
| } |
| if (q == null) |
| { |
| throw new IllegalArgumentException("'q' cannot be null"); |
| } |
| |
| this.p = p; |
| this.g = g; |
| this.q = q; |
| this.j = j; |
| this.validationParms = validationParms; |
| } |
| |
| private DHDomainParameters(ASN1Sequence seq) |
| { |
| if (seq.size() < 3 || seq.size() > 5) |
| { |
| throw new IllegalArgumentException("Bad sequence size: " + seq.size()); |
| } |
| |
| Enumeration e = seq.getObjects(); |
| this.p = ASN1Integer.getInstance(e.nextElement()); |
| this.g = ASN1Integer.getInstance(e.nextElement()); |
| this.q = ASN1Integer.getInstance(e.nextElement()); |
| |
| ASN1Encodable next = getNext(e); |
| |
| if (next != null && next instanceof ASN1Integer) |
| { |
| this.j = ASN1Integer.getInstance(next); |
| next = getNext(e); |
| } |
| |
| if (next != null) |
| { |
| this.validationParms = DHValidationParms.getInstance(next.toASN1Primitive()); |
| } |
| } |
| |
| private static ASN1Encodable getNext(Enumeration e) |
| { |
| return e.hasMoreElements() ? (ASN1Encodable)e.nextElement() : null; |
| } |
| |
| public ASN1Integer getP() |
| { |
| return this.p; |
| } |
| |
| public ASN1Integer getG() |
| { |
| return this.g; |
| } |
| |
| public ASN1Integer getQ() |
| { |
| return this.q; |
| } |
| |
| public ASN1Integer getJ() |
| { |
| return this.j; |
| } |
| |
| public DHValidationParms getValidationParms() |
| { |
| return this.validationParms; |
| } |
| |
| public ASN1Primitive toASN1Primitive() |
| { |
| ASN1EncodableVector v = new ASN1EncodableVector(); |
| v.add(this.p); |
| v.add(this.g); |
| v.add(this.q); |
| |
| if (this.j != null) |
| { |
| v.add(this.j); |
| } |
| |
| if (this.validationParms != null) |
| { |
| v.add(this.validationParms); |
| } |
| |
| return new DERSequence(v); |
| } |
| } |