001package org.apache.commons.ssl.org.bouncycastle.asn1.cms; 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.ASN1Primitive; 008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence; 009import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject; 010import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence; 011 012/** 013 * <a href="http://tools.ietf.org/html/rfc5544">RFC 5544</a> 014 * Binding Documents with Time-Stamps; TimeStampTokenEvidence object. 015 * <pre> 016 * TimeStampTokenEvidence ::= 017 * SEQUENCE SIZE(1..MAX) OF TimeStampAndCRL 018 * </pre> 019 */ 020public class TimeStampTokenEvidence 021 extends ASN1Object 022{ 023 private TimeStampAndCRL[] timeStampAndCRLs; 024 025 public TimeStampTokenEvidence(TimeStampAndCRL[] timeStampAndCRLs) 026 { 027 this.timeStampAndCRLs = timeStampAndCRLs; 028 } 029 030 public TimeStampTokenEvidence(TimeStampAndCRL timeStampAndCRL) 031 { 032 this.timeStampAndCRLs = new TimeStampAndCRL[1]; 033 034 timeStampAndCRLs[0] = timeStampAndCRL; 035 } 036 037 private TimeStampTokenEvidence(ASN1Sequence seq) 038 { 039 this.timeStampAndCRLs = new TimeStampAndCRL[seq.size()]; 040 041 int count = 0; 042 043 for (Enumeration en = seq.getObjects(); en.hasMoreElements();) 044 { 045 timeStampAndCRLs[count++] = TimeStampAndCRL.getInstance(en.nextElement()); 046 } 047 } 048 049 public static TimeStampTokenEvidence getInstance(ASN1TaggedObject tagged, boolean explicit) 050 { 051 return getInstance(ASN1Sequence.getInstance(tagged, explicit)); 052 } 053 054 /** 055 * Return a TimeStampTokenEvidence object from the given object. 056 * <p> 057 * Accepted inputs: 058 * <ul> 059 * <li> null → null 060 * <li> {@link TimeStampTokenEvidence} object 061 * <li> {@link org.bouncycastle.asn1.ASN1Sequence#getInstance(java.lang.Object) ASN1Sequence} input formats with TimeStampTokenEvidence structure inside 062 * </ul> 063 * 064 * @param obj the object we want converted. 065 * @exception IllegalArgumentException if the object cannot be converted. 066 */ 067 public static TimeStampTokenEvidence getInstance(Object obj) 068 { 069 if (obj instanceof TimeStampTokenEvidence) 070 { 071 return (TimeStampTokenEvidence)obj; 072 } 073 else if (obj != null) 074 { 075 return new TimeStampTokenEvidence(ASN1Sequence.getInstance(obj)); 076 } 077 078 return null; 079 } 080 081 public TimeStampAndCRL[] toTimeStampAndCRLArray() 082 { 083 return timeStampAndCRLs; 084 } 085 086 public ASN1Primitive toASN1Primitive() 087 { 088 ASN1EncodableVector v = new ASN1EncodableVector(); 089 090 for (int i = 0; i != timeStampAndCRLs.length; i++) 091 { 092 v.add(timeStampAndCRLs[i]); 093 } 094 095 return new DERSequence(v); 096 } 097 098}