Impls the standard AEAD API from the `aead` crate.
Eventually we can split this API out into a separate crate, e.g.
`ascon-aead`, but for now this just gets things working initially.
Uses weak/namespaced features which requires MSRV 1.60.
Adds a type alias for Ascon nonces, set to `[u8; 16]`.
From the Ascon paper section 2.4:
https://link.springer.com/article/10.1007/s00145-021-09398-9
> The 320-bit initial state of Ascon is formed by the secret key K of
> k bits and nonce N of 128 bits
- Adds a type alias for Ascon keys (16-byte)
- Stores key internally in `struct Ascon` so it doesn't need to be
passed separately to `Ascon::finalize`.
Adds a struct which wraps the permutation state, using const generics as
well as `feature(const_generics_defaults)` to express the `A`/`B`
parameters for `Ascon(a,b)`.
The permutation does not have any `std`/`alloc` dependency.
The current AEAD interface requires `alloc` (though we should migrate it
to use the `aead` crate anyway).