S-Encrypt(zkey, label, expiration, plaintext): PRK_k := HKDF-Extract("gns-aes-ctx-key", zkey) PRK_n := HKDF-Extract("gns-aes-ctx-iv", zkey) K := HKDF-Expand(PRK_k, label, 256 / 8) NONCE := HKDF-Expand(PRK_n, label, 32 / 8) BLOCK_COUNTER := 0x0000000000000001 IV := NONCE || expiration || BLOCK_COUNTER return CTR-AES256(K, IV, plaintext) S-Decrypt(zkey, label, expiration, ciphertext): PRK_k := HKDF-Extract("gns-aes-ctx-key", zkey) PRK_n := HKDF-Extract("gns-aes-ctx-iv", zkey) K := HKDF-Expand(PRK_k, label, 256 / 8) NONCE := HKDF-Expand(PRK_n, label, 32 / 8) BLOCK_COUNTER := 0x0000000000000001 IV := NONCE || expiration || BLOCK_COUNTER return CTR-AES256(K, IV, ciphertext)