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}