* denotes zero or more repeats.
InitKey(key)
{ For each packet do:
SetNonce(nonce)
{ AddAAD(aad-chunk) }*
StartEncrypt()
{ ciphertext-chunk <-- Update(plaintext-chunk) }*
tag <-- FinishEncrypt()
}*
Destroy()
InitKey(key)
{ For each packet do:
SetNonce(nonce)
{ AddAAD(aad-chunk) }*
StartDecrypt(tag-to-check)
{ plaintext-chunk <-- Update(ciphertext-chunk) }*
(OK|FAIL) <-- FinishDecrypt()
}*
Destroy()
Notes on incremental mode:
AEAD_FinishDecrypt
returns either OK or FAIL and throw it all away if FAIL is returned.
AEAD_InitKey at any time will delete any existing state ready to start again with the same key.
AEAD_Destroy is similar except all state including the key is destroyed.