Beispiel #1
0
        public static bool TryParseEncrypted(MemoryCursor cursor, IAead aead, ulong sequenceNumber, out Record result)
        {
            var startOffsetOfMessage = cursor.AsOffset();

            result = new Record();

            if (!RecordType.TrySlice(cursor, RecordType.ApplicationData))
            {
                return(false);
            }

            var legacyVersion = ProtocolVersion.Parse(cursor);

            if (legacyVersion != ProtocolVersion.Tls12)
            {
                throw new EncodingException();
            }

            var body = RecordLength.DecryptBytes(cursor, startOffsetOfMessage, aead, sequenceNumber);

            using var bodyContext = body.SetCursor(cursor);

            var startOffsetOfBody = cursor.AsOffset();

            cursor.MoveEnd();

            var actualType = RecordType.ParseReverse(cursor);

            result = new Record(actualType, legacyVersion, new MemoryBuffer(startOffsetOfBody, cursor - startOffsetOfBody));

            return(true);
        }
Beispiel #2
0
        public static RecordLength.WritingContext StartWriting(MemoryCursor cursor, RecordType type, ProtocolVersion protocolVersion)
        {
            type.WriteBytes(cursor);
            protocolVersion.WriteBytes(cursor);

            return(RecordLength.StartWriting(cursor));
        }
Beispiel #3
0
        public static RecordLength.EncryptedWritingContext StartEncryptedWriting(MemoryCursor cursor, RecordType type, IAead aead, ulong sequenceNumber)
        {
            var startLengthOfMessage = cursor.AsOffset();

            RecordType.ApplicationData.WriteBytes(cursor);
            ProtocolVersion.Tls12.WriteBytes(cursor);

            return(RecordLength.StartEncryptedWriting(cursor, startLengthOfMessage, type, aead, sequenceNumber));
        }
Beispiel #4
0
        public static bool TryParse(MemoryCursor cursor, RecordType type, out Record result)
        {
            result = new Record();

            if (!RecordType.TrySlice(cursor, type))
            {
                return(false);
            }

            var protocolVersion = ProtocolVersion.Parse(cursor);
            var body            = RecordLength.SliceBytes(cursor);

            result = new Record(type, protocolVersion, body);

            return(true);
        }
Beispiel #5
0
 public static void SliceUnknown(MemoryCursor cursor)
 {
     RecordType.Parse(cursor);
     ProtocolVersion.Parse(cursor);
     RecordLength.SliceBytes(cursor);
 }