package org.bouncycastle.asn1.esf; import org.bouncycastle.asn1.ASN1Encodable; import org.bouncycastle.asn1.ASN1EncodableVector; import org.bouncycastle.asn1.ASN1Sequence; import org.bouncycastle.asn1.DEREncodable; import org.bouncycastle.asn1.DERObject; import org.bouncycastle.asn1.DERObjectIdentifier; import org.bouncycastle.asn1.DERSequence; /** * Commitment type qualifiers, used in the Commitment-Type-Indication attribute (RFC3126). * * <pre> * CommitmentTypeQualifier ::= SEQUENCE { * commitmentTypeIdentifier CommitmentTypeIdentifier, * qualifier ANY DEFINED BY commitmentTypeIdentifier OPTIONAL } * </pre> */ public class CommitmentTypeQualifier extends ASN1Encodable { private DERObjectIdentifier commitmentTypeIdentifier; private DEREncodable qualifier; /** * Creates a new <code>CommitmentTypeQualifier</code> instance. * * @param commitmentTypeIdentifier a <code>CommitmentTypeIdentifier</code> value */ public CommitmentTypeQualifier( DERObjectIdentifier commitmentTypeIdentifier) { this(commitmentTypeIdentifier, null); } /** * Creates a new <code>CommitmentTypeQualifier</code> instance. * * @param commitmentTypeIdentifier a <code>CommitmentTypeIdentifier</code> value * @param qualifier the qualifier, defined by the above field. */ public CommitmentTypeQualifier( DERObjectIdentifier commitmentTypeIdentifier, DEREncodable qualifier) { this.commitmentTypeIdentifier = commitmentTypeIdentifier; this.qualifier = qualifier; } /** * Creates a new <code>CommitmentTypeQualifier</code> instance. * * @param as <code>CommitmentTypeQualifier</code> structure * encoded as an ASN1Sequence. */ public CommitmentTypeQualifier( ASN1Sequence as) { commitmentTypeIdentifier = (DERObjectIdentifier)as.getObjectAt(0); if (as.size() > 1) { qualifier = as.getObjectAt(1); } } public static CommitmentTypeQualifier getInstance(Object as) { if (as instanceof CommitmentTypeQualifier || as == null) { return (CommitmentTypeQualifier)as; } else if (as instanceof ASN1Sequence) { return new CommitmentTypeQualifier((ASN1Sequence)as); } throw new IllegalArgumentException("unknown object in getInstance."); } public DERObjectIdentifier getCommitmentTypeIdentifier() { return commitmentTypeIdentifier; } public DEREncodable getQualifier() { return qualifier; } /** * Returns a DER-encodable representation of this instance. * * @return a <code>DERObject</code> value */ public DERObject toASN1Object() { ASN1EncodableVector dev = new ASN1EncodableVector(); dev.add(commitmentTypeIdentifier); if (qualifier != null) { dev.add(qualifier); } return new DERSequence(dev); } }