crypto.pq
criptografia pós-quântica
Sub-namespace de
crypto(não pacote separado), espelhando a forma docryptoatual. Os esquemas NIST padronizados: ML-KEM (Kyber, encapsulamento de chave) e ML-DSA (Dilithium, assinatura). Tier 1 (adição aocrypto), entra sem mexer no core.
ML-KEM: encapsulamento de chave (KEM)
Seção intitulada “ML-KEM: encapsulamento de chave (KEM)”fn pq.ml_kem_keypair() -> (public: [1184]byte, secret: [2400]byte) // ML-KEM-768 (nível 3)fn pq.ml_kem_encapsulate(their_public: [1184]byte) -> (ciphertext: [1088]byte, shared: [32]byte)fn pq.ml_kem_decapsulate(my_secret: [2400]byte, ciphertext: [1088]byte) -> Result[[32]byte, error{Invalid}](Tamanhos do nível 3, ML-KEM-768; os níveis 512/1024 seguem a mesma forma com arrays de outro tamanho.)
ML-DSA: assinatura
Seção intitulada “ML-DSA: assinatura”fn pq.ml_dsa_keypair() -> (public: [1952]byte, secret: [4032]byte) // ML-DSA-65fn pq.ml_dsa_sign(secret: [4032]byte, message: []byte) -> [3309]bytefn pq.ml_dsa_verify(public: [1952]byte, message: []byte, signature: [3309]byte) -> boolHíbrido: o modo recomendado
Seção intitulada “Híbrido: o modo recomendado”A transição é híbrida (clássico + PQ): se um quebrar, o outro segura. Combina X25519 (do crypto) com
ML-KEM num único segredo:
fn pq.hybrid_x25519_mlkem_keypair() -> (public: HybridPublic, secret: HybridSecret)fn pq.hybrid_encapsulate(their_public: HybridPublic) -> (ciphertext: HybridCiphertext, shared: [32]byte)fn pq.hybrid_decapsulate(my_secret: HybridSecret, ct: HybridCiphertext) -> Result[[32]byte, error{Invalid}]
decl HybridPublic { ... } decl HybridSecret { ... } decl HybridCiphertext { ... }Curadoria
Seção intitulada “Curadoria”- Sub-namespace, não pacote: é
cryptocom esquemas a mais; mesma forma (keypair/encapsulate/sign/verify), mesmos buffers de tamanho fixo ([N]byte), mesma postura (falha de verificação éResult/bool, não panic). - Híbrido é o default recomendado na prosa: PQ puro existe, mas a transição madura combina com o clássico.
- Só os NIST-padronizados (ML-KEM/ML-DSA); candidatos pré-padrão (Falcon/SPHINCS+) ficam de fora até
padronizarem, como o resto do
crypto.