// kit 01

PQC Toolkit

Cripto post-cuántica lista para producción. Elige stack, elige primitiva, copia el código.

$ lib/release-signing.ts
L1
TS
1import { slh_dsa_sha2_128s as slh } from '@noble/post-quantum/slh-dsa';
2import { readFileSync, writeFileSync } from 'node:fs';
3import { createHash } from 'node:crypto';
4 
5// One-shot release signing. Used for:
6// - npm package tarballs
7// - container image manifests
8// - SBOM provenance
9export function signRelease(artifactPath: string, privKey: Uint8Array) {
10 const bytes = readFileSync(artifactPath);
11 const digest = createHash('sha384').update(bytes).digest();
12 const sig = slh.sign(digest, privKey);
13 writeFileSync(artifactPath + '.slh-dsa.sig', Buffer.from(sig));
14 return sig;
15}
16 
17export function verifyRelease(artifactPath: string, sig: Uint8Array, pubKey: Uint8Array) {
18 const bytes = readFileSync(artifactPath);
19 const digest = createHash('sha384').update(bytes).digest();
20 return slh.verify(sig, digest, pubKey);
21}
TAMAÑO CLAVE
32 B pub
FIRMA / CT
7856 B sig
NIVEL NIST
L1
NOTAS

SLH-DSA-128s es la elección conservadora: la seguridad se reduce solo a la función hash.

  • Úsalo para cosas que firmas una vez y verificas para siempre.
  • Firmas de 8 KB. Aceptable para artefactos de 100 MB, pésimo para auth por request.
  • Clave pública de 32 B — trivial distribuir.