Add project
Basic formatting applied. Unnecessary comments have been removed. Suspicious code is covered by TODO.
This commit is contained in:
@ -0,0 +1,135 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
|
||||
namespace GostCryptography.Asn1.Ber
|
||||
{
|
||||
public class Asn1BerMessageDumpHandler : IAsn1TaggedEventHandler
|
||||
{
|
||||
private const int MaxBytesPerLine = 12;
|
||||
|
||||
private int _offset;
|
||||
private readonly StreamWriter _printStream;
|
||||
|
||||
public Asn1BerMessageDumpHandler()
|
||||
{
|
||||
_printStream = new StreamWriter(Console.OpenStandardOutput()) { AutoFlush = true };
|
||||
_offset = 0;
|
||||
}
|
||||
|
||||
public Asn1BerMessageDumpHandler(StreamWriter outs)
|
||||
{
|
||||
_printStream = outs;
|
||||
_offset = 0;
|
||||
}
|
||||
|
||||
public virtual void Contents(byte[] data)
|
||||
{
|
||||
if (data.Length != 0)
|
||||
{
|
||||
PrintOffset();
|
||||
|
||||
var flag = true;
|
||||
var builder = new StringBuilder(100);
|
||||
var builder2 = new StringBuilder(100);
|
||||
|
||||
for (var i = 0; i < data.Length; ++i)
|
||||
{
|
||||
builder.Append(Asn1Util.ToHexString(data[i]));
|
||||
builder.Append(' ');
|
||||
|
||||
int num2 = data[i];
|
||||
|
||||
if ((num2 >= 0x20) && (num2 <= 0x7f))
|
||||
{
|
||||
builder2.Append((char)num2);
|
||||
}
|
||||
else
|
||||
{
|
||||
builder2.Append('.');
|
||||
}
|
||||
|
||||
if (((i + 1) % MaxBytesPerLine) == 0)
|
||||
{
|
||||
if (!flag)
|
||||
{
|
||||
_printStream.Write(" : ");
|
||||
}
|
||||
else
|
||||
{
|
||||
flag = false;
|
||||
}
|
||||
|
||||
_printStream.WriteLine(builder + ": " + builder2);
|
||||
|
||||
builder.Length = 0;
|
||||
builder2.Length = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (builder.Length > 0)
|
||||
{
|
||||
while (builder.Length < 0x24)
|
||||
{
|
||||
builder.Append(' ');
|
||||
}
|
||||
|
||||
if (!flag)
|
||||
{
|
||||
_printStream.Write(" : ");
|
||||
}
|
||||
|
||||
_printStream.WriteLine(builder + ": " + builder2);
|
||||
}
|
||||
|
||||
_offset += data.Length;
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void EndElement(Asn1Tag tag)
|
||||
{
|
||||
}
|
||||
|
||||
public virtual void StartElement(Asn1Tag tag, int len, byte[] tagLenBytes)
|
||||
{
|
||||
PrintOffset();
|
||||
|
||||
new StringBuilder(40); // WTF?
|
||||
|
||||
var index = 0;
|
||||
|
||||
while (index < tagLenBytes.Length)
|
||||
{
|
||||
_printStream.Write(Asn1Util.ToHexString(tagLenBytes[index]));
|
||||
_printStream.Write(' ');
|
||||
index++;
|
||||
}
|
||||
|
||||
while (index < MaxBytesPerLine)
|
||||
{
|
||||
_printStream.Write(" ");
|
||||
index++;
|
||||
}
|
||||
|
||||
_printStream.Write(": ");
|
||||
_printStream.Write(tag.Constructed ? "C " : "P ");
|
||||
_printStream.Write(tag + " ");
|
||||
_printStream.WriteLine(Convert.ToString(len));
|
||||
_offset += tagLenBytes.Length;
|
||||
}
|
||||
|
||||
private void PrintOffset()
|
||||
{
|
||||
var str = Convert.ToString(_offset);
|
||||
var num = 4 - str.Length;
|
||||
|
||||
for (var i = 0; i < num; ++i)
|
||||
{
|
||||
_printStream.Write('0');
|
||||
}
|
||||
|
||||
_printStream.Write(str);
|
||||
_printStream.Write(" : ");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user