16e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrompackage org.bouncycastle.asn1.x9;
26e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
36e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.ASN1EncodableVector;
44c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Integer;
54c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Object;
64c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Primitive;
76e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.ASN1Sequence;
86e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.ASN1TaggedObject;
96e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.DERBitString;
106e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.DERSequence;
116e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
124c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrompublic class DHValidationParms extends ASN1Object
136e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom{
146e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    private DERBitString seed;
154c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    private ASN1Integer pgenCounter;
166e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
176e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static DHValidationParms getInstance(ASN1TaggedObject obj, boolean explicit)
186e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    {
196e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        return getInstance(ASN1Sequence.getInstance(obj, explicit));
206e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    }
216e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
226e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static DHValidationParms getInstance(Object obj)
236e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    {
246e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        if (obj == null || obj instanceof DHDomainParameters)
256e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        {
266e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom            return (DHValidationParms)obj;
276e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        }
286e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
296e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        if (obj instanceof ASN1Sequence)
306e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        {
316e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom            return new DHValidationParms((ASN1Sequence)obj);
326e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        }
336e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
346e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        throw new IllegalArgumentException("Invalid DHValidationParms: " + obj.getClass().getName());
356e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    }
366e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
374c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public DHValidationParms(DERBitString seed, ASN1Integer pgenCounter)
386e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    {
396e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        if (seed == null)
406e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        {
416e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom            throw new IllegalArgumentException("'seed' cannot be null");
426e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        }
436e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        if (pgenCounter == null)
446e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        {
456e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom            throw new IllegalArgumentException("'pgenCounter' cannot be null");
466e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        }
476e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
486e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        this.seed = seed;
496e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        this.pgenCounter = pgenCounter;
506e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    }
516e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
526e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    private DHValidationParms(ASN1Sequence seq)
536e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    {
546e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        if (seq.size() != 2)
556e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        {
566e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom            throw new IllegalArgumentException("Bad sequence size: " + seq.size());
576e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        }
586e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
596e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        this.seed = DERBitString.getInstance(seq.getObjectAt(0));
604c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        this.pgenCounter = ASN1Integer.getInstance(seq.getObjectAt(1));
616e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    }
626e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
636e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public DERBitString getSeed()
646e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    {
656e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        return this.seed;
666e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    }
676e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
684c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public ASN1Integer getPgenCounter()
696e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    {
706e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        return this.pgenCounter;
716e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    }
726e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
734c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public ASN1Primitive toASN1Primitive()
746e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    {
756e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        ASN1EncodableVector v = new ASN1EncodableVector();
766e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        v.add(this.seed);
776e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        v.add(this.pgenCounter);
786e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        return new DERSequence(v);
796e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    }
806e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom}
81