3030import de .rub .nds .tlsattacker .core .protocol .message .HandshakeMessage ;
3131import de .rub .nds .tlsattacker .core .protocol .message .ProtocolMessage ;
3232import de .rub .nds .tlsattacker .core .protocol .message .SSL2HandshakeMessage ;
33+ import de .rub .nds .tlsattacker .core .protocol .message .UnknownMessage ;
3334import de .rub .nds .tlsattacker .core .record .AbstractRecord ;
35+ import de .rub .nds .tlsattacker .core .record .cipher .RecordNullCipher ;
36+ import de .rub .nds .tlsattacker .core .record .layer .RecordLayerType ;
3437import de .rub .nds .tlsattacker .core .state .TlsContext ;
3538import de .rub .nds .tlsattacker .transport .ConnectionEndType ;
3639import java .io .ByteArrayOutputStream ;
@@ -224,19 +227,24 @@ private List<AbstractRecord> parseRecords(byte[] recordBytes, TlsContext context
224227 }
225228
226229 public MessageParsingResult parseMessages (RecordGroup recordGroup , TlsContext context ) {
227- byte [] cleanProtocolMessageBytes = recordGroup . getCleanBytes ();
230+
228231 // Due to TLS 1.3 Encrypted Type it might be necessary to look for
229232 // new groups here
230233 List <ProtocolMessage > messages = new LinkedList <>();
231234 List <DtlsHandshakeMessageFragment > messageFragments = new LinkedList <>();
232235 for (RecordGroup group : RecordGroup .generateRecordGroups (recordGroup .getRecords (), context )) {
236+ boolean parseAsUnknown = false ;
237+ if ( context .getConfig ().isDoNotParseInvalidMacOrPadMessages () ) {
238+ parseAsUnknown = group .isMacOrPadInvalid (context );
239+ }
240+ byte [] cleanProtocolMessageBytes = recordGroup .getCleanBytes ();
233241
234242 if (context .getChooser ().getSelectedProtocolVersion ().isDTLS ()) {
235243 // if the protocol is DTLS, parsing HANDSHAKE messages results
236244 // in fragments.
237245 if (group .getProtocolMessageType () == ProtocolMessageType .HANDSHAKE ) {
238246 List <ProtocolMessage > parsedMessages = handleCleanBytes (cleanProtocolMessageBytes ,
239- group .getProtocolMessageType (), context , true , true );
247+ group .getProtocolMessageType (), context , true , true , parseAsUnknown );
240248 for (ProtocolMessage parsedMessage : parsedMessages ) {
241249 // we need this check since there might be
242250 // "unknown messages", note, we do not maintain ordering
@@ -258,25 +266,30 @@ public MessageParsingResult parseMessages(RecordGroup recordGroup, TlsContext co
258266 boolean onlyParse = isInOrder ? false : context .getConfig ().isDtlsUpdateOnOutOfOrder () ? false
259267 : true ;
260268 List <ProtocolMessage > parsedMessages = handleCleanBytes (cleanProtocolMessageBytes ,
261- group .getProtocolMessageType (), context , onlyParse , false );
269+ group .getProtocolMessageType (), context , onlyParse , false , parseAsUnknown );
262270 if (isInOrder || !context .getConfig ().isDtlsExcludeOutOfOrder ()) {
263271 messages .addAll (parsedMessages );
264272 }
265273 }
266274 } else {
267275 List <ProtocolMessage > parsedMessages = handleCleanBytes (cleanProtocolMessageBytes ,
268- group .getProtocolMessageType (), context , false , false );
276+ group .getProtocolMessageType (), context , false , false , parseAsUnknown );
269277 messages .addAll (parsedMessages );
270278 }
271279 }
272280 return new MessageParsingResult (messages , messageFragments );
273281 }
274282
275283 private List <ProtocolMessage > handleCleanBytes (byte [] cleanProtocolMessageBytes ,
276- ProtocolMessageType typeFromRecord , TlsContext context , boolean onlyParse ,
277- boolean handleHandshakeAsDtlsFragments ) {
284+ ProtocolMessageType typeFromRecord , TlsContext context ,
285+ boolean onlyParse , boolean handleHandshakeAsDtlsFragments , boolean parseAsUnknown ) {
278286 int dataPointer = 0 ;
279287 List <ProtocolMessage > receivedMessages = new LinkedList <>();
288+ if (parseAsUnknown ) {
289+ ParserResult result = tryHandleAsUnknownMessage (cleanProtocolMessageBytes , 0 , context );
290+ receivedMessages .add (result .getMessage ());
291+ return receivedMessages ;
292+ }
280293 while (dataPointer < cleanProtocolMessageBytes .length ) {
281294 ParserResult result = null ;
282295 try {
0 commit comments