Replaces mcrypt with phpsec.

This commit is contained in:
Michael 2017-03-30 18:29:12 +00:00
parent bb559aaf30
commit 54c8fb2bb8

View file

@ -10,17 +10,18 @@
use \Friendica\Core\Config; use \Friendica\Core\Config;
require_once("include/items.php"); require_once 'include/items.php';
require_once("include/bb2diaspora.php"); require_once 'include/bb2diaspora.php';
require_once("include/Scrape.php"); require_once 'include/Scrape.php';
require_once("include/Contact.php"); require_once 'include/Contact.php';
require_once("include/Photo.php"); require_once 'include/Photo.php';
require_once("include/socgraph.php"); require_once 'include/socgraph.php';
require_once("include/group.php"); require_once 'include/group.php';
require_once("include/xml.php"); require_once 'include/xml.php';
require_once("include/datetime.php"); require_once 'include/datetime.php';
require_once("include/queue_fn.php"); require_once 'include/queue_fn.php';
require_once("include/cache.php"); require_once 'include/cache.php';
require_once 'library/phpsec/Crypt/AES.php';
/** /**
* @brief This class contain functions to create and send Diaspora XML files * @brief This class contain functions to create and send Diaspora XML files
@ -160,6 +161,56 @@ class Diaspora {
return $data; return $data;
} }
/**
* @brief encrypts data via AES
*
* @param string $key The AES key
* @param string $iv The IV (is used for CBC encoding)
* @param string $data The data that is to be encrypted
*
* @return string encrypted data
*/
private static function aes_encrypt($key, $iv, $data) {
$aes = new Crypt_AES();
$block_length = 128;
$aes->setKey($key);
$aes->setIV($iv);
$aes->disablePadding();
$aes->setBlockLength($block_length);
$extra = strlen($data) % $block_length;
if ($extra) {
$data .= str_repeat("\0", $block_length - $extra);
}
return $aes->encrypt($data);
}
/**
* @brief decrypts data via AES
*
* @param string $key The AES key
* @param string $iv The IV (is used for CBC encoding)
* @param string $encrypted The encrypted data
*
* @return string decrypted data
*/
private static function aes_decrypt($key, $iv, $encrypted) {
$aes = new Crypt_AES();
$block_length = 128;
$aes->setKey($key);
$aes->setIV($iv);
$aes->disablePadding();
$aes->setBlockLength($block_length);
return $aes->decrypt($encrypted);
}
/** /**
* @brief: Decodes incoming Diaspora message * @brief: Decodes incoming Diaspora message
* *
@ -199,7 +250,7 @@ class Diaspora {
$outer_iv = base64_decode($j_outer_key_bundle->iv); $outer_iv = base64_decode($j_outer_key_bundle->iv);
$outer_key = base64_decode($j_outer_key_bundle->key); $outer_key = base64_decode($j_outer_key_bundle->key);
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $outer_key, $ciphertext, MCRYPT_MODE_CBC, $outer_iv); $decrypted = self::aes_decrypt($outer_key, $outer_iv, $ciphertext);
$decrypted = pkcs5_unpad($decrypted); $decrypted = pkcs5_unpad($decrypted);
@ -261,7 +312,7 @@ class Diaspora {
// Decode the encrypted blob // Decode the encrypted blob
$inner_encrypted = base64_decode($data); $inner_encrypted = base64_decode($data);
$inner_decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $inner_aes_key, $inner_encrypted, MCRYPT_MODE_CBC, $inner_iv); $inner_decrypted = self::aes_decrypt($inner_aes_key, $inner_iv, $inner_encrypted);
$inner_decrypted = pkcs5_unpad($inner_decrypted); $inner_decrypted = pkcs5_unpad($inner_decrypted);
} }
@ -2631,7 +2682,7 @@ class Diaspora {
$handle = self::my_handle($user); $handle = self::my_handle($user);
$padded_data = pkcs5_pad($msg,16); $padded_data = pkcs5_pad($msg,16);
$inner_encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $inner_aes_key, $padded_data, MCRYPT_MODE_CBC, $inner_iv); $inner_encrypted = self::aes_decrypt($inner_aes_key, $inner_iv, $padded_data);
$b64_data = base64_encode($inner_encrypted); $b64_data = base64_encode($inner_encrypted);
@ -2655,7 +2706,7 @@ class Diaspora {
$decrypted_header = xml::from_array($xmldata, $xml, true); $decrypted_header = xml::from_array($xmldata, $xml, true);
$decrypted_header = pkcs5_pad($decrypted_header,16); $decrypted_header = pkcs5_pad($decrypted_header,16);
$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $outer_aes_key, $decrypted_header, MCRYPT_MODE_CBC, $outer_iv); $ciphertext = self::aes_decrypt($outer_aes_key, $outer_iv, $decrypted_header);
$outer_json = json_encode(array("iv" => $b_outer_iv, "key" => $b_outer_aes_key)); $outer_json = json_encode(array("iv" => $b_outer_iv, "key" => $b_outer_aes_key));