internal OpenPgpPacketHeader(byte firstByte, Stream inputStream) { if ((firstByte & NewHeaderHighBits) != NewHeaderHighBits) { throw new ArgumentException(); } _TagId = firstByte & ~NewHeaderHighBits; // See 4.2.2.1: "A one-octet Body Length header encodes a length of 0 to 191 octets." int firstLengthByte = inputStream.ReadByte(); if (firstLengthByte < 0) { throw new EndOfStreamException(); } if (firstLengthByte < 192) { Length = firstLengthByte; return; } // See 4.2.2.2: "A two-octet Body Length header encodes a length of 192 to 8383 octets." if ((firstLengthByte >= 192) && (firstLengthByte <= 223)) { int secondLengthByte = inputStream.ReadByte(); if (secondLengthByte < 0) { throw new EndOfStreamException(); } Length = ((firstLengthByte - 192) << 8) + secondLengthByte + 192; return; } // 4.2.2.3: "A five-octet Body Length header consists of a single octet holding the value 255, followed by a four-octet scalar." if (firstLengthByte != 255) { throw new InvalidDataException(); } Length = OpenPgpScalarNumber.Read(inputStream, 4); }
public static OpenPgpTimeField Read(Stream inputStream) { return(new OpenPgpTimeField(OpenPgpScalarNumber.Read(inputStream, 4))); }