init commit

This commit is contained in:
2025-10-09 09:57:24 +09:00
commit 4d551bd74f
6636 changed files with 1218703 additions and 0 deletions

View File

@@ -0,0 +1,122 @@
using System;
using System.Collections;
using System.IO;
using Org.BouncyCastle.Utilities;
namespace Org.BouncyCastle.Asn1;
public class BerOctetString : DerOctetString, IEnumerable
{
private const int MaxLength = 1000;
private readonly IEnumerable octs;
public static BerOctetString FromSequence(Asn1Sequence seq)
{
IList list = Platform.CreateArrayList();
foreach (Asn1Encodable item in seq)
{
list.Add(item);
}
return new BerOctetString(list);
}
private static byte[] ToBytes(IEnumerable octs)
{
MemoryStream memoryStream = new MemoryStream();
foreach (DerOctetString oct in octs)
{
byte[] octets = oct.GetOctets();
memoryStream.Write(octets, 0, octets.Length);
}
return memoryStream.ToArray();
}
public BerOctetString(byte[] str)
: base(str)
{
}
public BerOctetString(IEnumerable octets)
: base(ToBytes(octets))
{
octs = octets;
}
public BerOctetString(Asn1Object obj)
: base(obj)
{
}
public BerOctetString(Asn1Encodable obj)
: base(obj.ToAsn1Object())
{
}
public override byte[] GetOctets()
{
return str;
}
public IEnumerator GetEnumerator()
{
if (octs == null)
{
return GenerateOcts().GetEnumerator();
}
return octs.GetEnumerator();
}
[Obsolete("Use GetEnumerator() instead")]
public IEnumerator GetObjects()
{
return GetEnumerator();
}
private IList GenerateOcts()
{
IList list = Platform.CreateArrayList();
for (int i = 0; i < str.Length; i += 1000)
{
int num = System.Math.Min(str.Length, i + 1000);
byte[] array = new byte[num - i];
Array.Copy(str, i, array, 0, array.Length);
list.Add(new DerOctetString(array));
}
return list;
}
internal override void Encode(DerOutputStream derOut)
{
if (derOut is Asn1OutputStream || derOut is BerOutputStream)
{
derOut.WriteByte(36);
derOut.WriteByte(128);
{
IEnumerator enumerator = GetEnumerator();
try
{
while (enumerator.MoveNext())
{
DerOctetString obj = (DerOctetString)enumerator.Current;
derOut.WriteObject(obj);
}
}
finally
{
IDisposable disposable = enumerator as IDisposable;
if (disposable != null)
{
disposable.Dispose();
}
}
}
derOut.WriteByte(0);
derOut.WriteByte(0);
}
else
{
base.Encode(derOut);
}
}
}