-callback algorithm(ENC) -> Algorithm when ENC :: any(), Algorithm :: iodata().
-callback bits(ENC) -> Bits when ENC :: any(), Bits :: non_neg_integer().
-callback block_decrypt({AAD, CipherText, CipherTag}, CEK, IV, ENC) -> PlainText | error when AAD :: iodata(), CipherText :: iodata(), CipherTag :: iodata(), CEK :: iodata(), IV :: iodata(), ENC :: any(), PlainText :: iodata().
-callback block_encrypt({AAD, PlainText}, CEK, IV, ENC) -> {CipherText, CipherTag} when AAD :: iodata(), PlainText :: iodata(), CEK :: iodata(), IV :: iodata(), ENC :: any(), CipherText :: iodata(), CipherTag :: iodata().
-callback next_cek(ENC) -> CEK when ENC :: any(), CEK :: iodata().
-callback next_iv(ENC) -> IV when ENC :: any(), IV :: iodata().