wp/wp-includes/sodium_compat/src/Core32/XChaCha20.php
changeset 9 177826044cd9
child 19 3d72ae0968f4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wp/wp-includes/sodium_compat/src/Core32/XChaCha20.php	Mon Oct 14 18:28:13 2019 +0200
@@ -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
+        );
+    }
+}