Skip to content

rcan-py v1.2.0 — RCAN v2.2 ML-DSA-65 hybrid signing

Choose a tag to compare

@craigm26 craigm26 released this 27 Mar 00:01
· 90 commits to main since this release

What's New

  • MLDSAKeyPair — ML-DSA-65 key generation, sign, verify, save/load (NIST FIPS 204)
  • Hybrid signing — sign_message(msg, ed_kp, pq_keypair=pq_kp) adds both Ed25519 (sig) and ML-DSA-65 (pq_sig) signatures
  • Hybrid verify — verify_message(msg, trusted, pq_trusted_keys=[...]) checks both; require_pq=True enforces ML-DSA presence (post-2028 mode)
  • RCANMessage.pq_sig — new optional field (dict), serialised/deserialised transparently
  • PQ_HYBRID_SIGNING feature flag in SUPPORTED_FEATURES
  • [pq] extra — pip install 'rcan[pq]' pulls in dilithium-py
  • 593 tests (was 571, +22 PQ signing tests)

Q-Day 2029 Timeline

  • 2026–2028: Hybrid mode — Ed25519 + ML-DSA-65 in every signed message
  • 2028: ML-DSA primary, Ed25519 verify-only
  • 2029: Ed25519 sunset — castor migrate --crypto rotates all keys

References