public static function ParagonIE_Sodium_Crypto::secretbox in Automatic Updates 8
Same name and namespace in other branches
- 7 vendor/paragonie/sodium_compat/src/Crypto.php \ParagonIE_Sodium_Crypto::secretbox()
XSalsa20-Poly1305 authenticated symmetric-key encryption.
@internal Do not use this directly. Use ParagonIE_Sodium_Compat.
Parameters
string $plaintext:
string $nonce:
string $key:
Return value
string
Throws
SodiumException
TypeError
2 calls to ParagonIE_Sodium_Crypto::secretbox()
- ParagonIE_Sodium_Compat::crypto_secretbox in vendor/
paragonie/ sodium_compat/ src/ Compat.php - Authenticated symmetric-key encryption.
- ParagonIE_Sodium_Crypto::box in vendor/
paragonie/ sodium_compat/ src/ Crypto.php - X25519 key exchange followed by XSalsa20Poly1305 symmetric encryption
File
- vendor/
paragonie/ sodium_compat/ src/ Crypto.php, line 945
Class
- ParagonIE_Sodium_Crypto
- Class ParagonIE_Sodium_Crypto
Code
public static function secretbox($plaintext, $nonce, $key) {
/** @var string $subkey */
$subkey = ParagonIE_Sodium_Core_HSalsa20::hsalsa20($nonce, $key);
/** @var string $block0 */
$block0 = str_repeat("\0", 32);
/** @var int $mlen - Length of the plaintext message */
$mlen = ParagonIE_Sodium_Core_Util::strlen($plaintext);
$mlen0 = $mlen;
if ($mlen0 > 64 - self::secretbox_xsalsa20poly1305_ZEROBYTES) {
$mlen0 = 64 - self::secretbox_xsalsa20poly1305_ZEROBYTES;
}
$block0 .= ParagonIE_Sodium_Core_Util::substr($plaintext, 0, $mlen0);
/** @var string $block0 */
$block0 = ParagonIE_Sodium_Core_Salsa20::salsa20_xor($block0, ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8), $subkey);
/** @var string $c */
$c = ParagonIE_Sodium_Core_Util::substr($block0, self::secretbox_xsalsa20poly1305_ZEROBYTES);
if ($mlen > $mlen0) {
$c .= ParagonIE_Sodium_Core_Salsa20::salsa20_xor_ic(ParagonIE_Sodium_Core_Util::substr($plaintext, self::secretbox_xsalsa20poly1305_ZEROBYTES), ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8), 1, $subkey);
}
$state = new ParagonIE_Sodium_Core_Poly1305_State(ParagonIE_Sodium_Core_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;
}