95 lines
1.6 KiB
C#
95 lines
1.6 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.IO;
|
|
using Org.BouncyCastle.Utilities;
|
|
|
|
namespace Org.BouncyCastle.Asn1;
|
|
|
|
public class DerSet : Asn1Set
|
|
{
|
|
public static readonly DerSet Empty = new DerSet();
|
|
|
|
public static DerSet FromVector(Asn1EncodableVector v)
|
|
{
|
|
if (v.Count >= 1)
|
|
{
|
|
return new DerSet(v);
|
|
}
|
|
return Empty;
|
|
}
|
|
|
|
internal static DerSet FromVector(Asn1EncodableVector v, bool needsSorting)
|
|
{
|
|
if (v.Count >= 1)
|
|
{
|
|
return new DerSet(v, needsSorting);
|
|
}
|
|
return Empty;
|
|
}
|
|
|
|
public DerSet()
|
|
: base(0)
|
|
{
|
|
}
|
|
|
|
public DerSet(Asn1Encodable obj)
|
|
: base(1)
|
|
{
|
|
AddObject(obj);
|
|
}
|
|
|
|
public DerSet(params Asn1Encodable[] v)
|
|
: base(v.Length)
|
|
{
|
|
foreach (Asn1Encodable obj in v)
|
|
{
|
|
AddObject(obj);
|
|
}
|
|
Sort();
|
|
}
|
|
|
|
public DerSet(Asn1EncodableVector v)
|
|
: this(v, needsSorting: true)
|
|
{
|
|
}
|
|
|
|
internal DerSet(Asn1EncodableVector v, bool needsSorting)
|
|
: base(v.Count)
|
|
{
|
|
foreach (Asn1Encodable item in v)
|
|
{
|
|
AddObject(item);
|
|
}
|
|
if (needsSorting)
|
|
{
|
|
Sort();
|
|
}
|
|
}
|
|
|
|
internal override void Encode(DerOutputStream derOut)
|
|
{
|
|
MemoryStream memoryStream = new MemoryStream();
|
|
DerOutputStream derOutputStream = new DerOutputStream(memoryStream);
|
|
IEnumerator enumerator = GetEnumerator();
|
|
try
|
|
{
|
|
while (enumerator.MoveNext())
|
|
{
|
|
Asn1Encodable obj = (Asn1Encodable)enumerator.Current;
|
|
derOutputStream.WriteObject(obj);
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
IDisposable disposable = enumerator as IDisposable;
|
|
if (disposable != null)
|
|
{
|
|
disposable.Dispose();
|
|
}
|
|
}
|
|
Platform.Dispose(derOutputStream);
|
|
byte[] bytes = memoryStream.ToArray();
|
|
derOut.WriteEncoded(49, bytes);
|
|
}
|
|
}
|