The current design uses the PostfixTagged marker trait to provide the blanket impls of AeadInPlace and Aead traits. Meanwhile prefix AEAD construction are responsible for implementing AeadInPlace explicitly. It means that an AEAD implementation may not have implementation of the Aead trait, the "go-to" trait which we recommend to users.
I think we should instead introduce const IS_POSTFIX: bool; associated constant to the AeadCore trait. It would allow us to write generic implementation of AeadInPlace/Aead traits which would cover both prefix and postfix constructions. Blanket impl for the prefix construction would involve overlapping copies, but in future it may be overwritten by a more efficient implementation (e.g. after development of offsetting encryption/decryption APIs) in downstream crates.
We can not do the same with the PostfixTagged trait without relying on specialization, which is currently unstable with no clear path for stabilization.
There is a small wrinkle with the IS_POSTFIX approach. Some constructions (e.g. MGM) do not explicitly specify tag position. But I think it's fine to default to the postfix mode (which is the de facto standard) unless explicitly specified otherwise.
Previous discussions:
The current design uses the
PostfixTaggedmarker trait to provide the blanket impls ofAeadInPlaceandAeadtraits. Meanwhile prefix AEAD construction are responsible for implementingAeadInPlaceexplicitly. It means that an AEAD implementation may not have implementation of theAeadtrait, the "go-to" trait which we recommend to users.I think we should instead introduce
const IS_POSTFIX: bool;associated constant to theAeadCoretrait. It would allow us to write generic implementation ofAeadInPlace/Aeadtraits which would cover both prefix and postfix constructions. Blanket impl for the prefix construction would involve overlapping copies, but in future it may be overwritten by a more efficient implementation (e.g. after development of offsetting encryption/decryption APIs) in downstream crates.We can not do the same with the
PostfixTaggedtrait without relying on specialization, which is currently unstable with no clear path for stabilization.There is a small wrinkle with the
IS_POSTFIXapproach. Some constructions (e.g. MGM) do not explicitly specify tag position. But I think it's fine to default to the postfix mode (which is the de facto standard) unless explicitly specified otherwise.Previous discussions:
AeadInPlace/*Detached#1714 (comment)