WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru Самая быстрая Тема-конструктор для WordPress
функция не описана

ParagonIE_Sodium_Crypto32::secretbox_xchacha20poly1305() public WP 1.0

XChaCha20-Poly1305 authenticated symmetric-key encryption.

{} Это метод класса: ParagonIE_Sodium_Crypto32{}

Хуков нет.

Возвращает

Строку.

Использование

$result = ParagonIE_Sodium_Crypto32::secretbox_xchacha20poly1305( $plaintext, $nonce, $key );
$plaintext(строка) (обязательный)
$nonce(строка) (обязательный)
$key(строка) (обязательный)

Код ParagonIE_Sodium_Crypto32::secretbox_xchacha20poly1305() WP 5.5.2

<?php
public static function secretbox_xchacha20poly1305($plaintext, $nonce, $key)
{
    /** @var string $subkey */
    $subkey = ParagonIE_Sodium_Core32_HChaCha20::hChaCha20(
        ParagonIE_Sodium_Core32_Util::substr($nonce, 0, 16),
        $key
    );
    $nonceLast = ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8);

    /** @var string $block0 */
    $block0 = str_repeat("\x00", 32);

    /** @var int $mlen - Length of the plaintext message */
    $mlen = ParagonIE_Sodium_Core32_Util::strlen($plaintext);
    $mlen0 = $mlen;
    if ($mlen0 > 64 - self::secretbox_xchacha20poly1305_ZEROBYTES) {
        $mlen0 = 64 - self::secretbox_xchacha20poly1305_ZEROBYTES;
    }
    $block0 .= ParagonIE_Sodium_Core32_Util::substr($plaintext, 0, $mlen0);

    /** @var string $block0 */
    $block0 = ParagonIE_Sodium_Core32_ChaCha20::streamXorIc(
        $block0,
        $nonceLast,
        $subkey
    );

    /** @var string $c */
    $c = ParagonIE_Sodium_Core32_Util::substr(
        $block0,
        self::secretbox_xchacha20poly1305_ZEROBYTES
    );
    if ($mlen > $mlen0) {
        $c .= ParagonIE_Sodium_Core32_ChaCha20::streamXorIc(
            ParagonIE_Sodium_Core32_Util::substr(
                $plaintext,
                self::secretbox_xchacha20poly1305_ZEROBYTES
            ),
            $nonceLast,
            $subkey,
            ParagonIE_Sodium_Core32_Util::store64_le(1)
        );
    }
    $state = new ParagonIE_Sodium_Core32_Poly1305_State(
        ParagonIE_Sodium_Core32_Util::substr(
            $block0,
            0,
            self::onetimeauth_poly1305_KEYBYTES
        )
    );
    try {
        ParagonIE_Sodium_Compat::memzero($block0);
        ParagonIE_Sodium_Compat::memzero($subkey);
    } catch (SodiumException $ex) {
        $block0 = null;
        $subkey = null;
    }

    $state->update($c);

    /** @var string $c - MAC || ciphertext */
    $c = $state->finish() . $c;
    unset($state);

    return $c;
}