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); }
padding = new byte[randomByteLength]; chooser.getContext().getRandom().nextBytes(padding); ArrayConverter.makeArrayNonZero(padding); preparePadding(msg); premasterSecret = generatePremasterSecret();