init commit
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
using System.IO;
|
||||
using Org.BouncyCastle.Utilities.IO;
|
||||
|
||||
namespace Org.BouncyCastle.Asn1;
|
||||
|
||||
public abstract class DerGenerator : Asn1Generator
|
||||
{
|
||||
private bool _tagged = false;
|
||||
|
||||
private bool _isExplicit;
|
||||
|
||||
private int _tagNo;
|
||||
|
||||
protected DerGenerator(Stream outStream)
|
||||
: base(outStream)
|
||||
{
|
||||
}
|
||||
|
||||
protected DerGenerator(Stream outStream, int tagNo, bool isExplicit)
|
||||
: base(outStream)
|
||||
{
|
||||
_tagged = true;
|
||||
_isExplicit = isExplicit;
|
||||
_tagNo = tagNo;
|
||||
}
|
||||
|
||||
private static void WriteLength(Stream outStr, int length)
|
||||
{
|
||||
if (length > 127)
|
||||
{
|
||||
int num = 1;
|
||||
int num2 = length;
|
||||
while ((num2 >>= 8) != 0)
|
||||
{
|
||||
num++;
|
||||
}
|
||||
outStr.WriteByte((byte)(num | 0x80));
|
||||
for (int num3 = (num - 1) * 8; num3 >= 0; num3 -= 8)
|
||||
{
|
||||
outStr.WriteByte((byte)(length >> num3));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
outStr.WriteByte((byte)length);
|
||||
}
|
||||
}
|
||||
|
||||
internal static void WriteDerEncoded(Stream outStream, int tag, byte[] bytes)
|
||||
{
|
||||
outStream.WriteByte((byte)tag);
|
||||
WriteLength(outStream, bytes.Length);
|
||||
outStream.Write(bytes, 0, bytes.Length);
|
||||
}
|
||||
|
||||
internal void WriteDerEncoded(int tag, byte[] bytes)
|
||||
{
|
||||
if (_tagged)
|
||||
{
|
||||
int num = _tagNo | 0x80;
|
||||
if (_isExplicit)
|
||||
{
|
||||
int tag2 = _tagNo | 0x20 | 0x80;
|
||||
MemoryStream memoryStream = new MemoryStream();
|
||||
WriteDerEncoded(memoryStream, tag, bytes);
|
||||
WriteDerEncoded(base.Out, tag2, memoryStream.ToArray());
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((tag & 0x20) != 0)
|
||||
{
|
||||
num |= 0x20;
|
||||
}
|
||||
WriteDerEncoded(base.Out, num, bytes);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
WriteDerEncoded(base.Out, tag, bytes);
|
||||
}
|
||||
}
|
||||
|
||||
internal static void WriteDerEncoded(Stream outStr, int tag, Stream inStr)
|
||||
{
|
||||
WriteDerEncoded(outStr, tag, Streams.ReadAll(inStr));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user