To aid with the development of new standards, new functions were exposed for ML-DSA
- `key_derive(seed) -> (pk, sk)` is a method which creates a key pair given a seed, which is used in cases where a seed rather than expanded key is stored for the private key. Contributed by ounsworth in https://github.com/GiacomoPope/dilithium-py/pull/10
- `prehash_external_mu(self, pk_bytes, m, ctx=b"") -> mu` which given a public key and message, creates a 64 byte value by hashing H(H(pk) | M') which is used internally in signing. This allows for an alternative way to rehash a message for ML-DSA without needing a specialised verification function https://github.com/GiacomoPope/dilithium-py/pull/9. Contributed by GiacomoPope
- `sign_external_mu(self, sk_bytes, external_mu, deterministic=False)` performs signing as in regular ML-DSA but instead of expecting a message and optional context, instead expects the prehashed value mu https://github.com/GiacomoPope/dilithium-py/pull/9. Contributed by GiacomoPope
Additionally, the CI has been changed so that all linting and checks are performed by [ruff](https://astral.sh/ruff) instead of black https://github.com/GiacomoPope/dilithium-py/pull/11. Contributed by GiacomoPope
New Contributors
* ounsworth made their first contribution in https://github.com/GiacomoPope/dilithium-py/pull/10
**Full Changelog**: https://github.com/GiacomoPope/dilithium-py/compare/1.0.2...1.1.0