001package org.apache.commons.ssl.org.bouncycastle.asn1.cms; 002 003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Choice; 004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object; 005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive; 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject; 007import org.apache.commons.ssl.org.bouncycastle.asn1.DERTaggedObject; 008 009/** 010 * <a href="http://tools.ietf.org/html/rfc5544">RFC 5544</a>: 011 * Binding Documents with Time-Stamps; Evidence object. 012 * <p> 013 * <pre> 014 * Evidence ::= CHOICE { 015 * tstEvidence [0] TimeStampTokenEvidence, -- see RFC 3161 016 * ersEvidence [1] EvidenceRecord, -- see RFC 4998 017 * otherEvidence [2] OtherEvidence 018 * } 019 * </pre> 020 */ 021public class Evidence 022 extends ASN1Object 023 implements ASN1Choice 024{ 025 private TimeStampTokenEvidence tstEvidence; 026 027 public Evidence(TimeStampTokenEvidence tstEvidence) 028 { 029 this.tstEvidence = tstEvidence; 030 } 031 032 private Evidence(ASN1TaggedObject tagged) 033 { 034 if (tagged.getTagNo() == 0) 035 { 036 this.tstEvidence = TimeStampTokenEvidence.getInstance(tagged, false); 037 } 038 } 039 040 /** 041 * Return an Evidence object from the given object. 042 * <p> 043 * Accepted inputs: 044 * <ul> 045 * <li> {@link Evidence} object 046 * <li> {@link org.bouncycastle.asn1.ASN1TaggedObject#getInstance(java.lang.Object) ASN1TaggedObject} input formats with Evidence data inside 047 * </ul> 048 * 049 * @param obj the object we want converted. 050 * @exception IllegalArgumentException if the object cannot be converted. 051 */ 052 public static Evidence getInstance(Object obj) 053 { 054 if (obj == null || obj instanceof Evidence) 055 { 056 return (Evidence)obj; 057 } 058 else if (obj instanceof ASN1TaggedObject) 059 { 060 return new Evidence(ASN1TaggedObject.getInstance(obj)); 061 } 062 063 throw new IllegalArgumentException("unknown object in getInstance"); 064 } 065 066 public TimeStampTokenEvidence getTstEvidence() 067 { 068 return tstEvidence; 069 } 070 071 public ASN1Primitive toASN1Primitive() 072 { 073 if (tstEvidence != null) 074 { 075 return new DERTaggedObject(false, 0, tstEvidence); 076 } 077 078 return null; 079 } 080}