@Override protected FinishedMessage createHandshakeMessage() { return new FinishedMessage(); }
/** * Reads the next bytes as the VerifyData and writes them in the message * * @param msg * Message to write in */ private void parseVerifyData(FinishedMessage msg) { msg.setVerifyData(parseByteArrayField(msg.getLength().getValue())); LOGGER.debug("VerifiyData: " + ArrayConverter.bytesToHexString(msg.getVerifyData().getValue())); }
private void prepareVerifyData(FinishedMessage msg) { msg.setVerifyData(verifyData); LOGGER.debug("VerifyData: " + ArrayConverter.bytesToHexString(msg.getVerifyData().getValue())); }
/** * Writes the VerifyData of the ECDHEServerKeyExchangeMessage into the final * byte[] */ private void writeVerifyData(FinishedMessage msg) { appendBytes(msg.getVerifyData().getValue()); LOGGER.debug("VerifyData: " + ArrayConverter.bytesToHexString(msg.getVerifyData().getValue())); }
@Override public void adjustTLSContext(FinishedMessage message) { if (tlsContext.getChooser().getSelectedProtocolVersion().isTLS13()) { if (tlsContext.getTalkingConnectionEndType() != tlsContext.getChooser().getConnectionEndType()) { if (tlsContext.getTalkingConnectionEndType() == ConnectionEndType.SERVER) { adjustApplicationTrafficSecrets(); setServerRecordCipher(Tls13KeySetType.APPLICATION_TRAFFIC_SECRETS); } else { setClientRecordCipher(Tls13KeySetType.APPLICATION_TRAFFIC_SECRETS); } } else if (tlsContext.getChooser().getConnectionEndType() == ConnectionEndType.CLIENT || tlsContext.isExtensionNegotiated(ExtensionType.EARLY_DATA) == false) { setClientRecordCipher(Tls13KeySetType.HANDSHAKE_TRAFFIC_SECRETS); } } if (tlsContext.getTalkingConnectionEndType() == ConnectionEndType.CLIENT) { tlsContext.setLastClientVerifyData(message.getVerifyData().getValue()); } else { tlsContext.setLastServerVerifyData(message.getVerifyData().getValue()); } }
messages.add(new FinishedMessage(config)); workflowTrace.addTlsAction(MessageActionFactory.createAction(connection, ConnectionEndType.CLIENT, messages)); if (!config.getHighestProtocolVersion().isTLS13()) { messages = new LinkedList<>(); messages.add(new ChangeCipherSpecMessage(config)); messages.add(new FinishedMessage(config));
messages.add(new FinishedMessage(tlsConfig)); workflowTrace.addTlsAction(MessageActionFactory.createAction(connection, ConnectionEndType.SERVER, messages));
private WorkflowTrace createResumptionWorkflow() { AliasedConnection connection = getConnection(); WorkflowTrace trace = new WorkflowTrace(); MessageAction action = MessageActionFactory.createAction(connection, ConnectionEndType.CLIENT, new ClientHelloMessage(config)); trace.addTlsAction(action); action = MessageActionFactory.createAction(connection, ConnectionEndType.SERVER, new ServerHelloMessage(config), new ChangeCipherSpecMessage(config), new FinishedMessage(config)); trace.addTlsAction(action); action = MessageActionFactory.createAction(connection, ConnectionEndType.CLIENT, new ChangeCipherSpecMessage( config), new FinishedMessage(config)); trace.addTlsAction(action); return trace; }
FinishedMessage serverFin = new FinishedMessage(config); clientMessages.add(new FinishedMessage(config)); clientMessages.add(new ApplicationMessage(config)); trace.addTlsAction(MessageActionFactory.createAction(connection, ConnectionEndType.CLIENT, clientMessages));
/** * * @param config * @return */ @Override public List<WorkflowTrace> getPaddingOracleVectors(Config config) { List<WorkflowTrace> traceList = new LinkedList<>(); for (Record record : recordGenerator.getRecords(config.getDefaultSelectedCipherSuite(), config.getDefaultSelectedProtocolVersion())) { WorkflowTrace trace = new WorkflowTrace(); trace.addTlsAction(new SendAction(new ClientHelloMessage(config))); trace.addTlsAction(new ReceiveTillAction(new ServerHelloDoneMessage())); trace.addTlsAction(new SendDynamicClientKeyExchangeAction()); trace.addTlsAction(new SendAction(new ChangeCipherSpecMessage(), new FinishedMessage())); trace.addTlsAction(new ReceiveAction(new ChangeCipherSpecMessage(), new FinishedMessage())); ApplicationMessage applicationMessage = new ApplicationMessage(config); SendAction sendAction = new SendAction(applicationMessage); sendAction.setRecords(new LinkedList<AbstractRecord>()); sendAction.getRecords().add(record); trace.addTlsAction(sendAction); trace.addTlsAction(new GenericReceiveAction()); traceList.add(trace); } return traceList; } }
workflowTrace.addTlsAction(new ChangeMasterSecretAction(emptyMasterSecret)); workflowTrace.addTlsAction(new SendAction(new FinishedMessage(tlsConfig))); messageList.add(new FinishedMessage(tlsConfig)); workflowTrace.addTlsAction(new ReceiveAction(messageList));
case CKE_CCS_FIN: trace.addTlsAction(new SendAction(new ChangeCipherSpecMessage(tlsConfig))); trace.addTlsAction(new SendAction(new FinishedMessage(tlsConfig))); break; case CKE_FIN: trace.addTlsAction(new SendAction(new FinishedMessage(tlsConfig))); break; default:
messages.add(new FinishedMessage(config)); } else { CipherSuite selectedCipherSuite = config.getDefaultSelectedCipherSuite();
private WorkflowTrace executeProtocolFlow() { Config tlsConfig = getTlsConfig(); WorkflowTrace trace = new WorkflowConfigurationFactory(tlsConfig).createWorkflowTrace(WorkflowTraceType.HELLO, RunningModeType.CLIENT); trace.addTlsAction(new SendAction(new ECDHClientKeyExchangeMessage(tlsConfig), new ChangeCipherSpecMessage( tlsConfig), new FinishedMessage(tlsConfig))); trace.addTlsAction(new ReceiveAction(new ChangeCipherSpecMessage(), new FinishedMessage())); State state = new State(tlsConfig, trace); WorkflowExecutor workflowExecutor = WorkflowExecutorFactory.createWorkflowExecutor( tlsConfig.getWorkflowExecutorType(), state); ECDHClientKeyExchangeMessage message = (ECDHClientKeyExchangeMessage) WorkflowTraceUtil.getFirstSendMessage( HandshakeMessageType.CLIENT_KEY_EXCHANGE, trace); ModifiableByteArray serializedPublicKey = ModifiableVariableFactory.createByteArrayModifiableVariable(); byte[] points = ArrayConverter.concatenate(ArrayConverter.bigIntegerToByteArray(config.getPublicPointBaseX()), ArrayConverter.bigIntegerToByteArray(config.getPublicPointBaseY())); byte[] serialized = ArrayConverter.concatenate(new byte[] { 4 }, points); serializedPublicKey.setModification(ByteArrayModificationFactory.explicitValue(serialized)); message.setPublicKey(serializedPublicKey); ModifiableByteArray pms = ModifiableVariableFactory.createByteArrayModifiableVariable(); byte[] explicitPMS = BigIntegers.asUnsignedByteArray(config.getCurveFieldSize(), premasterSecret); pms.setModification(ByteArrayModificationFactory.explicitValue(explicitPMS)); message.prepareComputations(); message.getComputations().setPremasterSecret(pms); LOGGER.info("working with the follwoing premaster secret: " + ArrayConverter.bytesToHexString(explicitPMS)); workflowExecutor.executeWorkflow(); return trace; } }