You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

96 lines
2.2 KiB

using System;
using System.Collections;
namespace Org.BouncyCastle.Asn1
{
internal class LazyDerSequence
: DerSequence
{
private byte[] encoded;
internal LazyDerSequence(byte[] encoded)
: base()
{
if (null == encoded)
throw new ArgumentNullException("encoded");
this.encoded = encoded;
}
private void Parse()
{
lock (this)
{
if (null != encoded)
{
Asn1InputStream e = new LazyAsn1InputStream(encoded);
Asn1EncodableVector v = e.ReadVector();
this.elements = v.TakeElements();
this.encoded = null;
}
}
}
public override Asn1Encodable this[int index]
{
get
{
Parse();
return base[index];
}
}
public override IEnumerator GetEnumerator()
{
Parse();
return base.GetEnumerator();
}
public override int Count
{
get
{
Parse();
return base.Count;
}
}
[Obsolete]
#pragma warning disable CS0809 // 过时成员重写未过时成员
internal override int EncodedLength(bool withID)
#pragma warning restore CS0809 // 过时成员重写未过时成员
{
lock (this)
{
if (encoded == null)
{
return base.EncodedLength(withID);
}
else
{
return Asn1OutputStream.GetLengthOfEncodingDL(withID, encoded.Length);
}
}
}
[Obsolete]
internal override void Encode(Asn1OutputStream asn1Out, bool withID)
{
lock (this)
{
if (encoded == null)
{
base.Encode(asn1Out, withID);
}
else
{
asn1Out.WriteEncodingDL(withID, Asn1Tags.Constructed | Asn1Tags.Sequence, encoded);
}
}
}
}
}