X-Git-Url: https://git.p6c8.net/jirafeau.git/blobdiff_plain/08ac1ab0d0b904bb65c6333264201ab07b195dbf..45ca48c235e1ac4634799231dff0962fce2e3fbf:/lib/functions.php diff --git a/lib/functions.php b/lib/functions.php index 805b958..b6672fb 100644 --- a/lib/functions.php +++ b/lib/functions.php @@ -1213,15 +1213,15 @@ function jirafeau_crypt_create_iv($base, $size) } /** - * Crypt file and returns decrypt key. + * Crypt file using Sodium and returns decrypt key. * @param $fp_src file path to the file to crypt. - * @param $fp_dst file path to the file to write crypted file (could be the same). - * @return decrypt key composed of the key and the iv separated by a point ('.') + * @param $fp_dst file path to the file to write crypted file (must not be the same). + * @return key used to encrypt the file */ function jirafeau_encrypt_file($fp_src, $fp_dst) { $fs = filesize($fp_src); - if ($fs === false || $fs == 0 || !(extension_loaded('sodium') == true)) { + if ($fs === false || $fs == 0 || extension_loaded('sodium') == false || $fp_src == $fp_dst) { return ''; } @@ -1253,36 +1253,41 @@ function jirafeau_encrypt_file($fp_src, $fp_dst) } /** - * Decrypt file. + * Decrypt file using Sodium. * @param $fp_src file path to the file to decrypt. - * @param $fp_dst file path to the file to write decrypted file (could be the same). - * @param $k string composed of the key and the iv separated by a point ('.') - * @return key used to decrypt. a string of length 0 is returned if failed. + * @param $fp_dst file path to the file to write decrypted file (must not be the same). + * @param $k decryption key + * @return true if decryption succeeded, false otherwise */ function jirafeau_decrypt_file($fp_src, $fp_dst, $k) { $fs = filesize($fp_src); - if ($fs === false || $fs == 0 || extension_loaded('sodium') == false) { + if ($fs === false || $fs == 0 || extension_loaded('sodium') == false || $fp_src == $fp_dst) { return false; } /* Decrypt file. */ - $r = fopen(VAR_FILES . $p . $link['hash'], 'rb'); + $r = fopen($fp_src, 'rb'); + $w = fopen($fp_dst, 'wb'); $crypt_header = fread($r, SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES); /* Init module. */ - $crypt_state = sodium_crypto_secretstream_xchacha20poly1305_init_pull($crypt_header, $crypt_key); + $crypt_state = sodium_crypto_secretstream_xchacha20poly1305_init_pull($crypt_header, $k); /* Decrypt file. */ for ($i = SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES; $i < $fs; $i += JIRAFEAU_SODIUM_CHUNKSIZE + SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES) { $to_dec = fread($r, JIRAFEAU_SODIUM_CHUNKSIZE + SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES); [$dec, $crypt_tag] = sodium_crypto_secretstream_xchacha20poly1305_pull($crypt_state, $to_dec); - echo $dec; + + if (fwrite($w, $dec) === false) { + return false; + } } fclose($r); + fclose($w); /* Cleanup. */ sodium_memzero($crypt_state); @@ -1291,11 +1296,11 @@ function jirafeau_decrypt_file($fp_src, $fp_dst, $k) } /** - * Decrypt file. + * Decrypt file using mcrypt. * @param $fp_src file path to the file to decrypt. * @param $fp_dst file path to the file to write decrypted file (could be the same). * @param $k string composed of the key and the iv separated by a point ('.') - * @return key used to decrypt. a string of length 0 is returned if failed. + * @return true if decryption succeeded, false otherwise */ function jirafeau_decrypt_file_legacy($fp_src, $fp_dst, $k) { @@ -1310,6 +1315,8 @@ function jirafeau_decrypt_file_legacy($fp_src, $fp_dst, $k) $crypt_key = $k; $hash_key = md5($crypt_key); $iv = jirafeau_crypt_create_iv($hash_key, mcrypt_enc_get_iv_size($m)); + /* Init module. */ + mcrypt_generic_init($m, $hash_key, $iv); /* Decrypt file. */ $r = fopen($fp_src, 'r'); $w = fopen($fp_dst, 'c');