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 virtual void WriteTo(Stream outputStream) { outputStream.WriteByte((byte)(NewHeaderHighBits | TagId)); if (Length <= 191) { outputStream.WriteByte((byte)Length); } else if (Length <= 8383) { int bodyLenRemainder = (int)(Length - 192); byte secondLengthByte = (byte)(bodyLenRemainder & 0xFF); bodyLenRemainder >>= 8; byte firstLengthByte = (byte)(bodyLenRemainder + 192); outputStream.WriteByte(firstLengthByte); outputStream.WriteByte(secondLengthByte); } else { outputStream.WriteByte(0xFF); OpenPgpScalarNumber.WriteTo((uint)Length, outputStream); } }
public void WriteTo(Stream outputStream) { OpenPgpScalarNumber.WriteTo((uint)(Date - Epoch).TotalSeconds, outputStream); }
public static OpenPgpTimeField Read(Stream inputStream) { return(new OpenPgpTimeField(OpenPgpScalarNumber.Read(inputStream, 4))); }