Evidence
using Org.BouncyCastle.Asn1.Tsp;
using System;
namespace Org.BouncyCastle.Asn1.Cms
{
public class Evidence : Asn1Encodable, IAsn1Choice
{
private readonly TimeStampTokenEvidence m_tstEvidence;
private readonly EvidenceRecord m_ersEvidence;
private readonly Asn1Sequence m_otherEvidence;
public virtual TimeStampTokenEvidence TstEvidence => m_tstEvidence;
public virtual EvidenceRecord ErsEvidence => m_ersEvidence;
public static Evidence GetInstance(object obj)
{
return Asn1Utilities.GetInstanceChoice(obj, GetOptional);
}
public static Evidence GetInstance(Asn1TaggedObject obj, bool isExplicit)
{
return Asn1Utilities.GetInstanceChoice(obj, isExplicit, GetInstance);
}
public static Evidence GetOptional(Asn1Encodable element)
{
if (element == null)
throw new ArgumentNullException("element");
Evidence evidence = element as Evidence;
if (evidence != null)
return evidence;
Asn1TaggedObject optional = Asn1TaggedObject.GetOptional(element);
if (optional != null) {
if (optional.HasContextTag(0))
return new Evidence(TimeStampTokenEvidence.GetTagged(optional, false));
if (optional.HasContextTag(1))
return new Evidence(EvidenceRecord.GetTagged(optional, false));
if (optional.HasContextTag(2))
return new Evidence(Asn1Sequence.GetTagged(optional, false));
}
return null;
}
public static Evidence GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit)
{
return Asn1Utilities.GetTaggedChoice(taggedObject, declaredExplicit, GetInstance);
}
public Evidence(TimeStampTokenEvidence tstEvidence)
{
if (tstEvidence == null)
throw new ArgumentNullException("tstEvidence");
m_tstEvidence = tstEvidence;
}
public Evidence(EvidenceRecord ersEvidence)
{
if (ersEvidence == null)
throw new ArgumentNullException("ersEvidence");
m_ersEvidence = ersEvidence;
}
private Evidence(Asn1Sequence otherEvidence)
{
if (otherEvidence == null)
throw new ArgumentNullException("otherEvidence");
m_otherEvidence = otherEvidence;
}
public override Asn1Object ToAsn1Object()
{
if (m_tstEvidence != null)
return new DerTaggedObject(false, 0, m_tstEvidence);
if (m_ersEvidence != null)
return new DerTaggedObject(false, 1, m_ersEvidence);
return new DerTaggedObject(false, 2, m_otherEvidence);
}
}
}