summaryrefslogtreecommitdiffstats
path: root/vendor/paragonie/sodium_compat/src/Core32/XChaCha20.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/paragonie/sodium_compat/src/Core32/XChaCha20.php')
-rw-r--r--vendor/paragonie/sodium_compat/src/Core32/XChaCha20.php64
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
+ );
+ }
+}