| package org.bouncycastle.asn1.x9; |
| |
| import java.util.Enumeration; |
| |
| import org.bouncycastle.asn1.ASN1Encodable; |
| import org.bouncycastle.asn1.ASN1EncodableVector; |
| import org.bouncycastle.asn1.ASN1Sequence; |
| import org.bouncycastle.asn1.ASN1TaggedObject; |
| import org.bouncycastle.asn1.DEREncodable; |
| import org.bouncycastle.asn1.DERInteger; |
| import org.bouncycastle.asn1.DERObject; |
| import org.bouncycastle.asn1.DERSequence; |
| |
| public class DHDomainParameters |
| extends ASN1Encodable |
| { |
| private DERInteger 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(DERInteger p, DERInteger g, DERInteger q, DERInteger 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 = DERInteger.getInstance(e.nextElement()); |
| this.g = DERInteger.getInstance(e.nextElement()); |
| this.q = DERInteger.getInstance(e.nextElement()); |
| |
| DEREncodable next = getNext(e); |
| |
| if (next != null && next instanceof DERInteger) |
| { |
| this.j = DERInteger.getInstance(next); |
| next = getNext(e); |
| } |
| |
| if (next != null) |
| { |
| this.validationParms = DHValidationParms.getInstance(next.getDERObject()); |
| } |
| } |
| |
| private static DEREncodable getNext(Enumeration e) |
| { |
| return e.hasMoreElements() ? (DEREncodable)e.nextElement() : null; |
| } |
| |
| public DERInteger getP() |
| { |
| return this.p; |
| } |
| |
| public DERInteger getG() |
| { |
| return this.g; |
| } |
| |
| public DERInteger getQ() |
| { |
| return this.q; |
| } |
| |
| public DERInteger getJ() |
| { |
| return this.j; |
| } |
| |
| public DHValidationParms getValidationParms() |
| { |
| return this.validationParms; |
| } |
| |
| public DERObject toASN1Object() |
| { |
| 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); |
| } |
| } |