/** * Reads the next bytes as the CompleteResultingMessage and writes them in * the message * * @param msg * Message to write in */ private void parseCompleteResultingMessage(ProtocolMessage msg) { msg.setCompleteResultingMessage(getAlreadyParsed()); LOGGER.debug("CompleteResultMessage: " + ArrayConverter.bytesToHexString(msg.getCompleteResultingMessage().getValue())); }
if (message instanceof HandshakeMessage) { if (((HandshakeMessage) message).getIncludeInDigest()) { tlsContext.getDigest().append(message.getCompleteResultingMessage().getValue()); LOGGER.debug(E); return message.getCompleteResultingMessage().getValue();
/** * Parses a byteArray from a Position into a MessageObject and returns the * parsed MessageObjet and parser position in a parser result. The current * Chooser is adjusted as * * @param message * The byte[] messages which should be parsed * @param pointer * The pointer (startposition) into the message bytes * @return The Parser result */ public ParserResult parseMessage(byte[] message, int pointer) { Parser<Message> parser = getParser(message, pointer); Message parsedMessage = parser.parse(); try { prepareAfterParse(parsedMessage); if (parsedMessage instanceof HandshakeMessage) { if (((HandshakeMessage) parsedMessage).getIncludeInDigest()) { tlsContext.getDigest().append(parsedMessage.getCompleteResultingMessage().getValue()); } } adjustTLSContext(parsedMessage); } catch (AdjustmentException | UnsupportedOperationException E) { LOGGER.warn("Could not adjust TLSContext"); LOGGER.debug(E); } return new ParserResult(parsedMessage, parser.getPointer()); }
private byte[] computeControlValue(WorkflowTrace trace, TlsContext tlsContext) throws CryptoException { tlsContext.getDigest().reset(); for (MessageAction messageAction : trace.getMessageActions()) { for (ProtocolMessage message : messageAction.getMessages()) { if (message instanceof ChangeCipherSpecMessage) { break; } if (message.isHandshakeMessage()) { HandshakeMessage handshakeMessage = (HandshakeMessage) message; if (handshakeMessage.getIncludeInDigest()) { tlsContext.getDigest().append(message.getCompleteResultingMessage().getValue()); } } } } byte[] handshakeMessageHash = tlsContext.getDigest().digest(tlsContext.getSelectedProtocolVersion(), tlsContext.getSelectedCipherSuite()); PRFAlgorithm prfAlgorithm = tlsContext.getChooser().getPRFAlgorithm(); byte[] control = PseudoRandomFunction.compute(prfAlgorithm, tlsContext.getMasterSecret(), PseudoRandomFunction.CLIENT_FINISHED_LABEL, handshakeMessageHash, HandshakeByteLength.VERIFY_DATA); byte[] compare = ArrayConverter.concatenate(HandshakeMessageType.FINISHED.getArrayValue(), ArrayConverter.intToBytes(control.length, HandshakeByteLength.MESSAGE_LENGTH_FIELD), control); return compare; } }