S-Encrypt(zkey, label, expiration, plaintext): PRK_k := HKDF-Extract("gns-xsalsa-ctx-key", zkey) PRK_n := HKDF-Extract("gns-xsalsa-ctx-iv", zkey) K := HKDF-Expand(PRK_k, label, 256 / 8) NONCE := HKDF-Expand(PRK_n, label, 128 / 8) IV := NONCE || expiration return XSalsa20-Poly1305(K, IV, plaintext) S-Decrypt(zkey, label, expiration, ciphertext): PRK_k := HKDF-Extract("gns-xsalsa-ctx-key", zkey) PRK_n := HKDF-Extract("gns-xsalsa-ctx-iv", zkey) K := HKDF-Expand(PRK_k, label, 256 / 8) NONCE := HKDF-Expand(PRK_n, label, 128 / 8) IV := NONCE || expiration return XSalsa20-Poly1305(K, IV, ciphertext)