From 8447bae77c19a2350bd48b0f0c5b3a56a35c7af9 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Sun, 28 Jun 2015 06:27:48 -0400
Subject: [PATCH] Require Mbstring and OpenSSL extensions (#1490415) - remove redundant code
---
program/lib/Roundcube/rcube.php | 113 +++++++-------------------------------------------------
1 files changed, 15 insertions(+), 98 deletions(-)
diff --git a/program/lib/Roundcube/rcube.php b/program/lib/Roundcube/rcube.php
index 02e11e2..8f75f8c 100644
--- a/program/lib/Roundcube/rcube.php
+++ b/program/lib/Roundcube/rcube.php
@@ -827,40 +827,12 @@
// Add a single canary byte to the end of the clear text, which
// will help find out how much of padding will need to be removed
// upon decryption; see http://php.net/mcrypt_generic#68082.
- $clear = pack("a*H2", $clear, "80");
- $ckey = $this->config->get_crypto_key($key);
-
- if (function_exists('openssl_encrypt')) {
- $method = 'DES-EDE3-CBC';
- $opts = defined('OPENSSL_RAW_DATA') ? OPENSSL_RAW_DATA : true;
- $iv = $this->create_iv(openssl_cipher_iv_length($method));
- $cipher = $iv . openssl_encrypt($clear, $method, $ckey, $opts, $iv);
- }
- else if (function_exists('mcrypt_module_open') &&
- ($td = mcrypt_module_open(MCRYPT_TripleDES, "", MCRYPT_MODE_CBC, ""))
- ) {
- $iv = $this->create_iv(mcrypt_enc_get_iv_size($td));
- mcrypt_generic_init($td, $ckey, $iv);
- $cipher = $iv . mcrypt_generic($td, $clear);
- mcrypt_generic_deinit($td);
- mcrypt_module_close($td);
- }
- else {
- @include_once 'des.inc';
-
- if (function_exists('des')) {
- $des_iv_size = 8;
- $iv = $this->create_iv($des_iv_size);
- $cipher = $iv . des($ckey, $clear, 1, 1, $iv);
- }
- else {
- self::raise_error(array(
- 'code' => 500, 'type' => 'php',
- 'file' => __FILE__, 'line' => __LINE__,
- 'message' => "Could not perform encryption; make sure OpenSSL or Mcrypt or lib/des.inc is available"
- ), true, true);
- }
- }
+ $clear = pack("a*H2", $clear, "80");
+ $ckey = $this->config->get_crypto_key($key);
+ $method = 'DES-EDE3-CBC';
+ $opts = defined('OPENSSL_RAW_DATA') ? OPENSSL_RAW_DATA : true;
+ $iv = rcube_utils::random_bytes(openssl_cipher_iv_length($method), true);
+ $cipher = $iv . openssl_encrypt($clear, $method, $ckey, $opts, $iv);
return $base64 ? base64_encode($cipher) : $cipher;
}
@@ -883,79 +855,24 @@
$cipher = $base64 ? base64_decode($cipher) : $cipher;
$ckey = $this->config->get_crypto_key($key);
- if (function_exists('openssl_decrypt')) {
- $method = 'DES-EDE3-CBC';
- $opts = defined('OPENSSL_RAW_DATA') ? OPENSSL_RAW_DATA : true;
- $iv_size = openssl_cipher_iv_length($method);
- $iv = substr($cipher, 0, $iv_size);
+ $method = 'DES-EDE3-CBC';
+ $opts = defined('OPENSSL_RAW_DATA') ? OPENSSL_RAW_DATA : true;
+ $iv_size = openssl_cipher_iv_length($method);
+ $iv = substr($cipher, 0, $iv_size);
- // session corruption? (#1485970)
- if (strlen($iv) < $iv_size) {
- return '';
- }
-
- $cipher = substr($cipher, $iv_size);
- $clear = openssl_decrypt($cipher, $method, $ckey, $opts, $iv);
+ // session corruption? (#1485970)
+ if (strlen($iv) < $iv_size) {
+ return '';
}
- else if (function_exists('mcrypt_module_open') &&
- ($td = mcrypt_module_open(MCRYPT_TripleDES, "", MCRYPT_MODE_CBC, ""))
- ) {
- $iv_size = mcrypt_enc_get_iv_size($td);
- $iv = substr($cipher, 0, $iv_size);
- // session corruption? (#1485970)
- if (strlen($iv) < $iv_size) {
- return '';
- }
-
- $cipher = substr($cipher, $iv_size);
- mcrypt_generic_init($td, $ckey, $iv);
- $clear = mdecrypt_generic($td, $cipher);
- mcrypt_generic_deinit($td);
- mcrypt_module_close($td);
- }
- else {
- @include_once 'des.inc';
-
- if (function_exists('des')) {
- $des_iv_size = 8;
- $iv = substr($cipher, 0, $des_iv_size);
- $cipher = substr($cipher, $des_iv_size);
- $clear = des($ckey, $cipher, 0, 1, $iv);
- }
- else {
- self::raise_error(array(
- 'code' => 500, 'type' => 'php',
- 'file' => __FILE__, 'line' => __LINE__,
- 'message' => "Could not perform decryption; make sure OpenSSL or Mcrypt or lib/des.inc is available"
- ), true, true);
- }
- }
+ $cipher = substr($cipher, $iv_size);
+ $clear = openssl_decrypt($cipher, $method, $ckey, $opts, $iv);
// Trim PHP's padding and the canary byte; see note in
// rcube::encrypt() and http://php.net/mcrypt_generic#68082
$clear = substr(rtrim($clear, "\0"), 0, -1);
return $clear;
- }
-
- /**
- * Generates encryption initialization vector (IV)
- *
- * @param int $size Vector size
- *
- * @return string Vector string
- */
- private function create_iv($size)
- {
- // mcrypt_create_iv() can be slow when system lacks entrophy
- // we'll generate IV vector manually
- $iv = '';
- for ($i = 0; $i < $size; $i++) {
- $iv .= chr(mt_rand(0, 255));
- }
-
- return $iv;
}
/**
--
Gitblit v1.9.1