Esempio n. 1
0
        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);
        }
Esempio n. 2
0
 public static OpenPgpTimeField Read(Stream inputStream)
 {
     return(new OpenPgpTimeField(OpenPgpScalarNumber.Read(inputStream, 4)));
 }