ParagonIE_Sodium_Compat::crypto_aead_xchacha20poly1305_ietf_encrypt

Advertisement

Summery Summery

Authenticated Encryption with Associated Data

Syntax Syntax

ParagonIE_Sodium_Compat::crypto_aead_xchacha20poly1305_ietf_encrypt( string $plaintext = '', string $assocData = '', string $nonce = '', string $key = '', bool $dontFallback = false )

Description Description

Algorithm: XChaCha20-Poly1305

This mode uses a 64-bit random nonce with a 64-bit counter. IETF mode uses a 96-bit random nonce with a 32-bit counter.

Parameters Parameters

$plaintext

(Optional) Message to be encrypted

Default value: ''

$assocData

(Optional) Authenticated Associated Data (unencrypted)

Default value: ''

$nonce

(Optional) Number to be used only Once; must be 8 bytes

Default value: ''

$key

(Optional) Encryption key

Default value: ''

$dontFallback

(Optional) Don't fallback to ext/sodium

Default value: false

Return Return

(string) Ciphertext with a 16-byte Poly1305 message authentication code appended

Source Source

File: wp-includes/sodium_compat/src/Compat.php

    public static function crypto_aead_xchacha20poly1305_ietf_encrypt(
        $plaintext = '',
        $assocData = '',
        $nonce = '',
        $key = '',
        $dontFallback = false
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($plaintext, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($assocData, 'string', 2);
        ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 3);
        ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES) {
            throw new SodiumException('Nonce must be CRYPTO_AEAD_XCHACHA20POLY1305_NPUBBYTES long');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES) {
            throw new SodiumException('Key must be CRYPTO_AEAD_XCHACHA20POLY1305_KEYBYTES long');
        }
        if (self::useNewSodiumAPI() && !$dontFallback) {
            if (is_callable('sodium_crypto_aead_xchacha20poly1305_ietf_encrypt')) {
                return sodium_crypto_aead_xchacha20poly1305_ietf_encrypt(
                    $plaintext,
                    $assocData,
                    $nonce,
                    $key
                );
            }
        }

        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Crypto32::aead_xchacha20poly1305_ietf_encrypt(
                $plaintext,
                $assocData,
                $nonce,
                $key
            );
        }
        return ParagonIE_Sodium_Crypto::aead_xchacha20poly1305_ietf_encrypt(
            $plaintext,
            $assocData,
            $nonce,
            $key
        );
    }

Advertisement

Advertisement

Leave a Reply