public override void Decode(Asn1BerDecodeBuffer buffer, bool explicitTagging, int implicitLength) { var llen = explicitTagging ? MatchTag(buffer, Tag) : implicitLength; var idx = new IntHolder(0); var lastTag = buffer.LastTag; if ((lastTag == null) || !lastTag.Constructed) { ReadSegment(buffer, llen, idx); } else { var context = new Asn1BerDecodeContext(buffer, llen); while (!context.Expired()) { var num2 = MatchTag(buffer, Asn1OctetString.Tag); if (num2 <= 0) { throw new FormatException("Asn1InvalidFormatOfConstructedValue"); } ReadSegment(buffer, num2, idx); } if (llen == Asn1Status.IndefiniteLength) { MatchTag(buffer, Asn1Tag.Eoc); } } buffer.TypeCode = UniversalStringTypeCode; }
public override void Decode(Asn1BerDecodeBuffer buffer, bool explicitTagging, int implicitLength) { var elemLength = explicitTagging ? MatchTag(buffer, Tag) : implicitLength; var lastTag = buffer.LastTag; if ((lastTag == null) || !lastTag.Constructed) { if (elemLength < 0) { throw new Exception("Asn1InvalidLengthException"); } Value = new byte[elemLength]; if (elemLength != 0) { buffer.Read(Value); } } else { var nbytes = 0; var offset = 0; var context = new Asn1BerDecodeContext(buffer, elemLength); while (!context.Expired()) { var num2 = MatchTag(buffer, Tag); if (num2 <= 0) { throw new Exception("Asn1InvalidFormatOfConstructedValue"); } nbytes += num2; if (offset == 0) { Value = new byte[nbytes]; } else { ReAllocByteArray(nbytes); } buffer.Read(Value, offset, num2); offset = nbytes; } if (elemLength == Asn1Status.IndefiniteLength) { MatchTag(buffer, Asn1Tag.Eoc); } } buffer.TypeCode = OctetStringTypeCode; }
public override void Decode(Asn1BerDecodeBuffer buffer, bool explicitTagging, int implicitLength) { var elemLength = explicitTagging ? MatchTag(buffer, Tag) : implicitLength; var len = elemLength; var sb = new StringBuilder(); var lastTag = buffer.LastTag; if ((lastTag == null) || !lastTag.Constructed) { sb.EnsureCapacity(elemLength / 2); ReadSegment(buffer, sb, len); } else { var capacity = 0; var context = new Asn1BerDecodeContext(buffer, elemLength); while (!context.Expired()) { var num3 = MatchTag(buffer, Asn1OctetString.Tag); if (num3 <= 0) { throw new Exception("Asn1 Invalid Format Of Constructed Value"); } capacity += num3; sb.EnsureCapacity(capacity); ReadSegment(buffer, sb, num3); } if (elemLength == Asn1Status.IndefiniteLength) { MatchTag(buffer, Asn1Tag.Eoc); } } Value = sb.ToString(); buffer.TypeCode = BmpStringTypeCode; }
public override void Decode(Asn1BerDecodeBuffer buffer, bool explicitTagging, int implicitLength) { var elemLength = explicitTagging ? MatchTag(buffer, Tag) : implicitLength; var lastTag = buffer.LastTag; if ((lastTag == null) || !lastTag.Constructed) { if (elemLength < 0) { throw new Exception("Asn1 invalid length exception"); } if (elemLength != 0) { var num8 = elemLength - 1; var num7 = buffer.Read(); if (num7 < 0) { throw new Exception("Asn1 end of buffer exception"); } if ((num7 < 0) || (num7 > 7)) { throw new Exception("Asn1 invalid format of bit string"); } if ((num8 == 0) && (num7 != 0)) { throw new Exception("Asn1 invalid length exception"); } NumBits = (num8 * 8) - num7; Value = new byte[num8]; buffer.Read(Value); } else { NumBits = 0; Value = null; } } else { var num3 = 0; var offset = 0; var index = -1; var num6 = 0; var context = new Asn1BerDecodeContext(buffer, elemLength); while (!context.Expired()) { var nbytes = MatchTag(buffer, Tag); if (nbytes <= 0) { throw new Exception("Asn1 invalid format of constructed value"); } num3 += nbytes; if (offset == 0) { AllocBitArray(num3 * 8); } else { ReallocBitArray(num3 * 8); } index = offset; buffer.Read(Value, offset, nbytes); offset = num3; } if (index >= 0) { num6 = Value[index]; if (((offset - index) - 1) > 0) { Array.Copy(Value, index + 1, Value, index, (offset - index) - 1); } num3--; } if ((num6 < 0) || (num6 > 7)) { throw new Exception("Asn1 invalid format of bit string"); } ReallocBitArray((num3 * 8) - num6); if (elemLength == Asn1Status.IndefiniteLength) { MatchTag(buffer, Asn1Tag.Eoc); } } buffer.TypeCode = 3; }
protected virtual void Decode(Asn1BerDecodeBuffer buffer, bool explicitTagging, int implicitLength, Asn1Tag tag) { int num2; var elemLength = explicitTagging ? MatchTag(buffer, tag) : implicitLength; var num3 = elemLength; var num4 = 0; if (StringBuffer == null) { StringBuffer = new StringBuilder(); } var lastTag = buffer.LastTag; if ((lastTag == null) || !lastTag.Constructed) { if (num3 < 0) { throw new Exception("Asn1InvalidLengthException"); } StringBuffer.Length = num3; while (num3 > 0) { num2 = buffer.Read(); if (num2 == -1) { throw new Exception("Asn1EndOfBufferException"); } StringBuffer[num4++] = (char)num2; num3--; } } else { var capacity = 0; var context = new Asn1BerDecodeContext(buffer, elemLength); while (!context.Expired()) { var num5 = MatchTag(buffer, Asn1OctetString.Tag); if (num5 <= 0) { throw new Exception("Asn1InvalidFormatOfConstructedValue"); } capacity += num5; StringBuffer.EnsureCapacity(capacity); while (num5 > 0) { num2 = buffer.Read(); if (num2 == -1) { throw new Exception("Asn1EndOfBufferException"); } StringBuffer.Append((char)num2); num5--; } } if (elemLength == Asn1Status.IndefiniteLength) { MatchTag(buffer, Asn1Tag.Eoc); } } Value = StringBuffer.ToString(); buffer.TypeCode = (short)tag.IdCode; }