WordPress at Your Fingertips
function is not described

ParagonIE_Sodium_Crypto32::aead_chacha20poly1305_ietf_encrypt() public WP 1.0

AEAD Encryption with ChaCha20-Poly1305, IETF mode (96-bit nonce)

{} It's a method of the class: ParagonIE_Sodium_Crypto32{}

No Hooks.

Return

String.

Usage

$result = ParagonIE_Sodium_Crypto32::aead_chacha20poly1305_ietf_encrypt(;

Code of ParagonIE_Sodium_Crypto32::aead_chacha20poly1305_ietf_encrypt() WP 5.8.2

public static function aead_chacha20poly1305_ietf_encrypt(
    $message = '',
    $ad = '',
    $nonce = '',
    $key = ''
) {
    /** @var int $len - Length of the plaintext message */
    $len = ParagonIE_Sodium_Core32_Util::strlen($message);

    /** @var int $adlen - Length of the associated data */
    $adlen = ParagonIE_Sodium_Core32_Util::strlen($ad);

    /** @var string The first block of the chacha20 keystream, used as a poly1305 key */
    $block0 = ParagonIE_Sodium_Core32_ChaCha20::ietfStream(
        32,
        $nonce,
        $key
    );
    $state = new ParagonIE_Sodium_Core32_Poly1305_State($block0);
    try {
        ParagonIE_Sodium_Compat::memzero($block0);
    } catch (SodiumException $ex) {
        $block0 = null;
    }

    /** @var string $ciphertext - Raw encrypted data */
    $ciphertext = ParagonIE_Sodium_Core32_ChaCha20::ietfStreamXorIc(
        $message,
        $nonce,
        $key,
        ParagonIE_Sodium_Core32_Util::store64_le(1)
    );

    $state->update($ad);
    $state->update(str_repeat("\x00", ((0x10 - $adlen) & 0xf)));
    $state->update($ciphertext);
    $state->update(str_repeat("\x00", ((0x10 - $len) & 0xf)));
    $state->update(ParagonIE_Sodium_Core32_Util::store64_le($adlen));
    $state->update(ParagonIE_Sodium_Core32_Util::store64_le($len));
    return $ciphertext . $state->finish();
}