protected void preparePremasterSecret(SSL2ClientMasterKeyMessage msg) { msg.getComputations().setPremasterSecret(premasterSecret); LOGGER.debug("PremasterSecret: " + ArrayConverter.bytesToHexString(msg.getComputations().getPremasterSecret().getValue())); }
protected void preparePadding(SSL2ClientMasterKeyMessage msg) { msg.getComputations().setPadding(padding); LOGGER.debug("Padding: " + ArrayConverter.bytesToHexString(msg.getComputations().getPadding().getValue())); }
protected void preparePlainPaddedPremasterSecret(SSL2ClientMasterKeyMessage msg) { msg.getComputations().setPlainPaddedPremasterSecret( ArrayConverter.concatenate(new byte[] { 0x00, 0x02 }, padding, new byte[] { 0x00 }, msg .getComputations().getPremasterSecret().getValue())); LOGGER.debug("PlainPaddedPremasterSecret: " + ArrayConverter.bytesToHexString(msg.getComputations().getPlainPaddedPremasterSecret().getValue())); }
@Override public void adjustTLSContext(SSL2ClientMasterKeyMessage message) { byte[] premasterSecret = message.getComputations().getPremasterSecret().getValue(); tlsContext.setPreMasterSecret(premasterSecret); }
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); }