Here's a quick example on how to use sodium_crypto_aead_chacha20poly1305_ietf_encrypt(); where you have 1 key to encrypt and decrypt.<?php$key = sodium_crypto_aead_chacha20poly1305_ietf_keygen();//--------------------------------------------------// Encrypting$message = 'hello';$nonce = random_bytes(SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES);$encrypted = sodium_crypto_aead_chacha20poly1305_ietf_encrypt($message, $nonce, $nonce, $key);echo base64_encode($encrypted) . "\n";//--------------------------------------------------// Decrypting$decrypted = sodium_crypto_aead_chacha20poly1305_ietf_decrypt($encrypted, $nonce, $nonce, $key);echo $decrypted . "\n";?>And just to confirm, the $nonce is used twice - the first time it's in the authentication tag ($ad):https://twitter.com/craigfrancis/status/949614546259513344