Evidence
using Org.BouncyCastle.Asn1.Tsp;
using Org.BouncyCastle.Utilities;
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)
{
if (obj == null)
return null;
Evidence evidence = obj as Evidence;
if (evidence != null)
return evidence;
Asn1TaggedObject asn1TaggedObject = obj as Asn1TaggedObject;
if (asn1TaggedObject != null)
return new Evidence(Asn1Utilities.CheckContextTagClass(asn1TaggedObject));
throw new ArgumentException("Unknown object in GetInstance: " + Platform.GetTypeName(obj), "obj");
}
public static Evidence GetInstance(Asn1TaggedObject obj, bool isExplicit)
{
return Asn1Utilities.GetInstanceFromChoice(obj, isExplicit, GetInstance);
}
public Evidence(TimeStampTokenEvidence tstEvidence)
{
m_tstEvidence = tstEvidence;
}
public Evidence(EvidenceRecord ersEvidence)
{
m_ersEvidence = ersEvidence;
}
private Evidence(Asn1TaggedObject tagged)
{
if (tagged.TagNo == 0)
m_tstEvidence = TimeStampTokenEvidence.GetInstance(tagged, false);
else if (tagged.TagNo == 1) {
m_ersEvidence = EvidenceRecord.GetInstance(tagged, false);
} else {
if (tagged.TagNo != 2)
throw new ArgumentException("unknown tag in Evidence", "tagged");
m_otherEvidence = Asn1Sequence.GetInstance(tagged, false);
}
}
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);
}
}
}