A FrodoKEMExtractor holds one FrodoKEMEngine for its lifetime, so the engine must not carry
mutable state across a call. It used to keep a single SHAKE instance in a field: two threads
extracting through one extractor interleaved their absorb/squeeze phases, which produced wrong
shared secrets and threw
IllegalStateException: attempt to absorb while squeezing. The
digest is now built per call, as CMCEEngine's already was.
The generator side is exercised too, since FrodoKEMGenerator builds an engine per call but its
KEM keys and parameters are shared.