MetaData
using System;
namespace Org.BouncyCastle.Asn1.Cms
{
public class MetaData : Asn1Encodable
{
private readonly DerBoolean m_hashProtected;
private readonly DerUtf8String m_fileName;
private readonly DerIA5String m_mediaType;
private readonly Attributes m_otherMetaData;
public virtual bool IsHashProtected => m_hashProtected.IsTrue;
public virtual DerUtf8String FileName => m_fileName;
public virtual DerIA5String MediaType => m_mediaType;
public virtual Attributes OtherMetaData => m_otherMetaData;
public static MetaData GetInstance(object obj)
{
if (obj == null)
return null;
MetaData metaData = obj as MetaData;
if (metaData != null)
return metaData;
return new MetaData(Asn1Sequence.GetInstance(obj));
}
public static MetaData GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit)
{
return new MetaData(Asn1Sequence.GetInstance(taggedObject, declaredExplicit));
}
public static MetaData GetOptional(Asn1Encodable element)
{
if (element == null)
throw new ArgumentNullException("element");
MetaData metaData = element as MetaData;
if (metaData != null)
return metaData;
Asn1Sequence optional = Asn1Sequence.GetOptional(element);
if (optional != null)
return new MetaData(optional);
return null;
}
public static MetaData GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit)
{
return new MetaData(Asn1Sequence.GetTagged(taggedObject, declaredExplicit));
}
public MetaData(DerBoolean hashProtected, DerUtf8String fileName, DerIA5String mediaType, Attributes otherMetaData)
{
if (hashProtected == null)
throw new ArgumentNullException("hashProtected");
m_hashProtected = hashProtected;
m_fileName = fileName;
m_mediaType = mediaType;
m_otherMetaData = otherMetaData;
}
private MetaData(Asn1Sequence seq)
{
int count = seq.Count;
int sequencePosition = 0;
if (count < 1 || count > 4)
throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq");
m_hashProtected = DerBoolean.GetInstance(seq[sequencePosition++]);
m_fileName = Asn1Utilities.ReadOptional(seq, ref sequencePosition, DerUtf8String.GetOptional);
m_mediaType = Asn1Utilities.ReadOptional(seq, ref sequencePosition, DerIA5String.GetOptional);
m_otherMetaData = Asn1Utilities.ReadOptional(seq, ref sequencePosition, Attributes.GetOptional);
if (sequencePosition != count)
throw new ArgumentException("Unexpected elements in sequence", "seq");
}
public override Asn1Object ToAsn1Object()
{
Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(4);
asn1EncodableVector.Add(m_hashProtected);
asn1EncodableVector.AddOptional(m_fileName, m_mediaType, m_otherMetaData);
return new DerSequence(asn1EncodableVector);
}
}
}