diff options
Diffstat (limited to 'vendor/paragonie/sodium_compat/src/Core32/XChaCha20.php')
-rw-r--r-- | vendor/paragonie/sodium_compat/src/Core32/XChaCha20.php | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/vendor/paragonie/sodium_compat/src/Core32/XChaCha20.php b/vendor/paragonie/sodium_compat/src/Core32/XChaCha20.php new file mode 100644 index 0000000..1dfc859 --- /dev/null +++ b/vendor/paragonie/sodium_compat/src/Core32/XChaCha20.php @@ -0,0 +1,64 @@ +<?php + +if (class_exists('ParagonIE_Sodium_Core32_XChaCha20', false)) { + return; +} + +/** + * Class ParagonIE_Sodium_Core32_XChaCha20 + */ +class ParagonIE_Sodium_Core32_XChaCha20 extends ParagonIE_Sodium_Core32_HChaCha20 +{ + /** + * @internal You should not use this directly from another application + * + * @param int $len + * @param string $nonce + * @param string $key + * @return string + * @throws SodiumException + * @throws TypeError + */ + public static function stream($len = 64, $nonce = '', $key = '') + { + if (self::strlen($nonce) !== 24) { + throw new SodiumException('Nonce must be 24 bytes long'); + } + return self::encryptBytes( + new ParagonIE_Sodium_Core32_ChaCha20_Ctx( + self::hChaCha20( + self::substr($nonce, 0, 16), + $key + ), + self::substr($nonce, 16, 8) + ), + str_repeat("\x00", $len) + ); + } + + /** + * @internal You should not use this directly from another application + * + * @param string $message + * @param string $nonce + * @param string $key + * @param string $ic + * @return string + * @throws SodiumException + * @throws TypeError + */ + public static function streamXorIc($message, $nonce = '', $key = '', $ic = '') + { + if (self::strlen($nonce) !== 24) { + throw new SodiumException('Nonce must be 24 bytes long'); + } + return self::encryptBytes( + new ParagonIE_Sodium_Core32_ChaCha20_Ctx( + self::hChaCha20(self::substr($nonce, 0, 16), $key), + self::substr($nonce, 16, 8), + $ic + ), + $message + ); + } +} |