From fdc0e3f59fcc4121e36ae8ae0c4c4628c2c9770d Mon Sep 17 00:00:00 2001 From: the-djmaze <> Date: Sun, 13 Nov 2022 19:41:50 +0100 Subject: [PATCH] Bugfix: Crypt crash when Sodium not installed --- .../0.0.0/app/libraries/snappymail/crypt.php | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/snappymail/v/0.0.0/app/libraries/snappymail/crypt.php b/snappymail/v/0.0.0/app/libraries/snappymail/crypt.php index 823694434..d49b51454 100644 --- a/snappymail/v/0.0.0/app/libraries/snappymail/crypt.php +++ b/snappymail/v/0.0.0/app/libraries/snappymail/crypt.php @@ -95,18 +95,22 @@ abstract class Crypt { $data = \json_encode($data); - try { - $nonce = \random_bytes(\SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES); - return ['sodium', $nonce, static::SodiumEncrypt($data, $nonce, $key)]; - } catch (\Throwable $e) { - Log::error('Crypt', 'Sodium ' . $e->getMessage()); + if (\is_callable('sodium_crypto_aead_xchacha20poly1305_ietf_decrypt')) { + try { + $nonce = \random_bytes(\SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES); + return ['sodium', $nonce, static::SodiumEncrypt($data, $nonce, $key)]; + } catch (\Throwable $e) { + Log::error('Crypt', 'Sodium ' . $e->getMessage()); + } } - try { - $iv = \random_bytes(\openssl_cipher_iv_length(static::$cipher)); - return ['openssl', $iv, static::OpenSSLEncrypt($data, $iv, $key)]; - } catch (\Throwable $e) { - Log::error('Crypt', 'OpenSSL ' . $e->getMessage()); + if (\is_callable('openssl_encrypt')) { + try { + $iv = \random_bytes(\openssl_cipher_iv_length(static::$cipher)); + return ['openssl', $iv, static::OpenSSLEncrypt($data, $iv, $key)]; + } catch (\Throwable $e) { + Log::error('Crypt', 'OpenSSL ' . $e->getMessage()); + } } $salt = \random_bytes(16);