@Override public String toString() { StringBuilder sb = new StringBuilder(super.toString()); if (getCipherKind() != null && getCipherKind().getValue() != null) { sb.append("\n Cipher Kind: ").append(getCipherKind().getValue()); } if (getClearKeyData() != null && getClearKeyData().getValue() != null) { sb.append("\n Clear Key Data: ").append(ArrayConverter.bytesToHexString(getClearKeyData().getValue())); } if (getEncryptedKeyData() != null && getEncryptedKeyData().getValue() != null) { sb.append("\n Encrypted Key Data: ").append( ArrayConverter.bytesToHexString(getEncryptedKeyData().getValue())); } if (getKeyArgData() != null && getKeyArgData().getValue() != null) { sb.append("\n Key Arg Data: ").append(ArrayConverter.bytesToHexString(getKeyArgData().getValue())); } return sb.toString(); } }
private void prepareClearKeyLength(SSL2ClientMasterKeyMessage message) { message.setClearKeyLength(message.getClearKeyData().getValue().length); LOGGER.debug("ClearKeyLength: " + message.getClearKeyLength().getValue()); }
protected void prepareEncryptedKeyDataLength(SSL2ClientMasterKeyMessage msg) { msg.setEncryptedKeyLength(msg.getEncryptedKeyData().getValue().length); LOGGER.debug("SerializedPublicKeyLength: " + msg.getEncryptedKeyLength().getValue()); }
private void prepareKeyArgLength(SSL2ClientMasterKeyMessage message2) { message.setKeyArgLength(0); LOGGER.debug("KeyArgLength: " + message.getKeyArgLength().getValue()); }
private void prepareMessageLength(SSL2ClientMasterKeyMessage message, int length) { message.setMessageLength(length); LOGGER.debug("MessageLength: " + message.getMessageLength().getValue()); }
@Override protected void prepareProtocolMessageContents() { LOGGER.debug("Prepare SSL2ClientMasterKey"); prepareType(message); prepareCipherKind(message); prepareClearKey(message); prepareClearKeyLength(message); prepareKeyArgLength(message); // TODO: Add keyArgData if we want to also support block ciphers. LOGGER.debug("RSA Modulus: " + chooser.getServerRsaModulus().toString()); prepareRSACiphertext(message); final int lengthFieldLength = 2; int length = SSL2ByteLength.MESSAGE_TYPE; length += message.getCipherKind().getValue().length; length += message.getClearKeyData().getValue().length + lengthFieldLength; length += message.getEncryptedKeyData().getValue().length + lengthFieldLength; length += lengthFieldLength; // for keyArgLength prepareMessageLength(message, length); }
private void prepareClearKey(SSL2ClientMasterKeyMessage message) { // by default we currently supply null bytes as the clear key portion message.setClearKeyData(new byte[EXPORT_RC4_NUM_OF_CLEAR_KEY_BYTES]); LOGGER.debug("ClearKey: " + ArrayConverter.bytesToHexString(message.getClearKeyData().getValue())); }
protected void prepareEncryptedKeyData(SSL2ClientMasterKeyMessage msg) { msg.setEncryptedKeyData(encryptedPremasterSecret); LOGGER.debug("SerializedPublicKey: " + ArrayConverter.bytesToHexString(msg.getEncryptedKeyData().getValue())); }
private void prepareCipherKind(SSL2ClientMasterKeyMessage message) { // by default we currently just try export RC4 message.setCipherKind(ArrayConverter.hexStringToByteArray("020080")); LOGGER.debug("CipherKind: " + ArrayConverter.bytesToHexString(message.getCipherKind().getValue())); }
private void prepareRSACiphertext(SSL2ClientMasterKeyMessage message) { // TODO: Maybe de-duplicate vs. RSAClientKeyExchangePreparator message.prepareComputations(); int keyByteLength = chooser.getServerRsaModulus().bitLength() / 8; // the number of random bytes in the pkcs1 message int unpaddedLength = EXPORT_RC4_NUM_OF_SECRET_KEY_BYTES; // Currently we only support 40-bit export RC4 int randomByteLength = keyByteLength - unpaddedLength - 3; padding = new byte[randomByteLength]; chooser.getContext().getRandom().nextBytes(padding); ArrayConverter.makeArrayNonZero(padding); preparePadding(message); premasterSecret = generatePremasterSecret(); preparePremasterSecret(message); preparePlainPaddedPremasterSecret(message); byte[] paddedPremasterSecret = message.getComputations().getPlainPaddedPremasterSecret().getValue(); BigInteger biPaddedPremasterSecret = new BigInteger(1, paddedPremasterSecret); BigInteger biEncrypted = biPaddedPremasterSecret.modPow(chooser.getServerRSAPublicKey(), chooser.getServerRsaModulus()); encryptedPremasterSecret = ArrayConverter.bigIntegerToByteArray(biEncrypted, chooser.getServerRsaModulus() .bitLength() / 8, true); prepareEncryptedKeyData(message); prepareEncryptedKeyDataLength(message); }
protected void preparePremasterSecret(SSL2ClientMasterKeyMessage msg) { msg.getComputations().setPremasterSecret(premasterSecret); LOGGER.debug("PremasterSecret: " + ArrayConverter.bytesToHexString(msg.getComputations().getPremasterSecret().getValue())); }
private void writeMessageLength(SSL2ClientMasterKeyMessage msg) { appendInt(msg.getMessageLength().getValue() ^ 0x8000, SSL2ByteLength.LENGTH); LOGGER.debug("MessageLength: " + msg.getMessageLength().getValue()); }
private void writeCipherKind(SSL2ClientMasterKeyMessage msg) { byte[] cipherKindValue = msg.getCipherKind().getValue(); appendBytes(cipherKindValue); LOGGER.debug("CipherKind: " + Arrays.toString(cipherKindValue)); } }
private void writeClearKeyLength(SSL2ClientMasterKeyMessage msg) { int length = msg.getClearKeyLength().getValue(); appendInt(length, SSL2ByteLength.CLEAR_KEY_LENGTH); LOGGER.debug("ClearKeyLength: " + length); }
private void writeKeyArgLength(SSL2ClientMasterKeyMessage msg) { int length = msg.getKeyArgLength().getValue(); appendInt(length, SSL2ByteLength.ENCRYPTED_KEY_LENGTH); LOGGER.debug("EncryptedKeyLength: " + length); }
private void writeEncryptedKeyLength(SSL2ClientMasterKeyMessage msg) { int length = msg.getEncryptedKeyLength().getValue(); appendInt(length, SSL2ByteLength.ENCRYPTED_KEY_LENGTH); LOGGER.debug("EncryptedKeyLength: " + length); }
private void writeClearKeyData(SSL2ClientMasterKeyMessage msg) { byte[] clearKeyData = msg.getClearKeyData().getValue(); appendBytes(clearKeyData); LOGGER.debug("ClearKey: " + ArrayConverter.bytesToHexString(clearKeyData)); }
private void writeEncryptedKeyData(SSL2ClientMasterKeyMessage msg) { byte[] encryptedKeyData = msg.getEncryptedKeyData().getValue(); appendBytes(encryptedKeyData); LOGGER.debug("EncryptedKey: " + ArrayConverter.bytesToHexString(encryptedKeyData)); }
WorkflowTrace trace = new WorkflowConfigurationFactory(tlsConfig).createWorkflowTrace( WorkflowTraceType.SSL2_HELLO, RunningModeType.CLIENT); trace.addTlsAction(new SendAction(new SSL2ClientMasterKeyMessage())); trace.addTlsAction(new ReceiveAction(new SSL2ServerVerifyMessage())); State state = new State(tlsConfig, trace);
protected void preparePadding(SSL2ClientMasterKeyMessage msg) { msg.getComputations().setPadding(padding); LOGGER.debug("Padding: " + ArrayConverter.bytesToHexString(msg.getComputations().getPadding().getValue())); }