001package org.apache.commons.ssl.org.bouncycastle.asn1.x9;
002
003import java.util.Enumeration;
004
005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector;
006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object;
007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1ObjectIdentifier;
008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1OctetString;
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
013/**
014 * ASN.1 def for Diffie-Hellman key exchange KeySpecificInfo structure. See
015 * RFC 2631, or X9.42, for further details.
016 */
017public class KeySpecificInfo
018    extends ASN1Object
019{
020    private ASN1ObjectIdentifier algorithm;
021    private ASN1OctetString      counter;
022
023    public KeySpecificInfo(
024        ASN1ObjectIdentifier algorithm,
025        ASN1OctetString      counter)
026    {
027        this.algorithm = algorithm;
028        this.counter = counter;
029    }
030
031    public KeySpecificInfo(
032        ASN1Sequence  seq)
033    {
034        Enumeration e = seq.getObjects();
035
036        algorithm = (ASN1ObjectIdentifier)e.nextElement();
037        counter = (ASN1OctetString)e.nextElement();
038    }
039
040    public ASN1ObjectIdentifier getAlgorithm()
041    {
042        return algorithm;
043    }
044
045    public ASN1OctetString getCounter()
046    {
047        return counter;
048    }
049
050    /**
051     * Produce an object suitable for an ASN1OutputStream.
052     * <pre>
053     *  KeySpecificInfo ::= SEQUENCE {
054     *      algorithm OBJECT IDENTIFIER,
055     *      counter OCTET STRING SIZE (4..4)
056     *  }
057     * </pre>
058     */
059    public ASN1Primitive toASN1Primitive()
060    {
061        ASN1EncodableVector  v = new ASN1EncodableVector();
062
063        v.add(algorithm);
064        v.add(counter);
065
066        return new DERSequence(v);
067    }
068}