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}