16e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrompackage org.bouncycastle.asn1.x9;
26e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
36e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.ASN1Encodable;
46e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.ASN1EncodableVector;
56e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.ASN1Sequence;
66e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.ASN1TaggedObject;
76e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.DERBitString;
86e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.DERInteger;
96e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.DERObject;
106e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.DERSequence;
116e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
126e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrompublic class DHValidationParms extends ASN1Encodable
136e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom{
146e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    private DERBitString seed;
156e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    private DERInteger 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
376e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public DHValidationParms(DERBitString seed, DERInteger 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));
606e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        this.pgenCounter = DERInteger.getInstance(seq.getObjectAt(1));
616e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    }
626e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
636e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public DERBitString getSeed()
646e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    {
656e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        return this.seed;
666e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    }
676e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
686e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public DERInteger getPgenCounter()
696e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    {
706e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        return this.pgenCounter;
716e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    }
726e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
736e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public DERObject toASN1Object()
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