Post-Quantum Cryptography in Flutter

tests

This repository is parameter selection and lightweight wrapper around a number of Rust cryptographic libraries. Its purpose isn't to implement primitives, rather to unify the API surface of existing libraries; limited to the tiny subset needed by the Dark Bio project.

The library is opinionated. Parameters and primitives were selected to provide matching levels of security in a post-quantum world. APIs were designed to make the library easy to use and hard to misuse. Flexibility will always be rejected in favor of safety.

  • Certificates
  • Digital signatures
  • Encryption
    • xHPKE (RFC-9180): X-WING, HKDF, SHA256, ChaCha20, Poly1305
    • STREAM (RFC N/A, Rage): ChaCha20, Poly1305, 16B tag, 64KB chunk
  • Key derivation
  • Serialization
    • CBOR (RFC-8949): restricted to bool,null, integer, text, bytes, array, map[int], option
    • COSE (RFC-8152): COSE_Sign1, COSE_Encrypt0, dark-bio-v1: domain prefix

Acknowledgements

Shoutout to Filippo Valsorda (@filosottile) for lots of tips and nudges on what kind of cryptographic primitives to use and how to combine them properly; and also for his work in general on cryptography standards.

Naturally, many thanks to the authors of all the libraries this project depends on.

Libraries

argon2
Argon2id cryptography wrappers and parametrization.
cose
COSE wrappers for xDSA and xHPKE.
darkbio_crypto
Post-quantum cryptography primitives.
hkdf
HKDF cryptography wrappers and parametrization.
rand
Cryptographically secure random number generation.
rsa
RSA cryptography wrappers and parametrization.
stream
I/O helper structs for age file encryption and decryption.
xdsa
Composite ML-DSA cryptography wrappers and parametrization.
xhpke
HPKE cryptography wrappers and parametrization.