package org.bouncycastle.asn1.cmc; import org.bouncycastle.asn1.ASN1Encodable; import org.bouncycastle.asn1.ASN1Object; import org.bouncycastle.asn1.ASN1ObjectIdentifier; import org.bouncycastle.asn1.ASN1Primitive; import org.bouncycastle.asn1.ASN1Sequence; import org.bouncycastle.asn1.DERSequence; /** * ExtendedFailInfo ::= SEQUENCE { * failInfoOID OBJECT IDENTIFIER, * failInfoValue ANY DEFINED BY failInfoOID * } */ public class ExtendedFailInfo extends ASN1Object { private final ASN1ObjectIdentifier failInfoOID; private final ASN1Encodable failInfoValue; public ExtendedFailInfo(ASN1ObjectIdentifier failInfoOID, ASN1Encodable failInfoValue) { this.failInfoOID = failInfoOID; this.failInfoValue = failInfoValue; } private ExtendedFailInfo(ASN1Sequence s) { if (s.size() != 2) { throw new IllegalArgumentException("Sequence must be 2 elements."); } failInfoOID = ASN1ObjectIdentifier.getInstance(s.getObjectAt(0)); failInfoValue = s.getObjectAt(1); } public static ExtendedFailInfo getInstance(Object obj) { if (obj instanceof ExtendedFailInfo) { return (ExtendedFailInfo)obj; } if (obj instanceof ASN1Encodable) { ASN1Encodable asn1Value = ((ASN1Encodable)obj).toASN1Primitive(); if (asn1Value instanceof ASN1Sequence) { return new ExtendedFailInfo( (ASN1Sequence)asn1Value ); } } else if (obj instanceof byte[]) { return getInstance(ASN1Sequence.getInstance(obj)); } return null; } public ASN1Primitive toASN1Primitive() { return new DERSequence(new ASN1Encodable[]{failInfoOID, failInfoValue}); } public ASN1ObjectIdentifier getFailInfoOID() { return failInfoOID; } public ASN1Encodable getFailInfoValue() { return failInfoValue; } }