liboqs reúne implementaciones poscuánticas de mecanismos de encapsulación de claves (OQS_KEM) y esquemas de firma (OQS_SIG) tras una única API en C, y es el motor del proveedor Open Quantum Safe para OpenSSL 3. Los datos de esta página se comprobaron en la versión 0.16.0 (commit 5a1a854b0dc9), compilada con las opciones predeterminadas de CMake, que usan OpenSSL para las primitivas simétricas. El README dice, en mayúsculas: «ACTUALMENTE NO RECOMENDAMOS CONFIAR EN ESTA BIBLIOTECA EN UN ENTORNO DE PRODUCCIÓN NI PARA PROTEGER NINGÚN DATO SENSIBLE». Para ML-KEM y ML-DSA en producción, las páginas de OpenSSL, BoringSSL, AWS-LC y Bouncy Castle indican qué ofrecen sus API principales.
La compilación predeterminada activó 41 KEM y 221 conjuntos de parámetros de firma, y un conjunto de parámetros de cada familia superó una prueba de ida y vuelta completa: los estándares del NIST ML-KEM, ML-DSA y SLH-DSA (156 variantes de SLH-DSA, puras y pre-hash), Falcon, los candidatos a KEM HQC, Classic McEliece, FrodoKEM, BIKE, NTRU y sntrup761, el Kyber previo al estándar y los candidatos adicionales de firma MAYO, CROSS, UOV, SNOVA y MQOM. En código nuevo, usa el nombre ML-KEM-768, no Kyber768. La compilación predeterminada no activa ningún conjunto de parámetros XMSS ni LMS.
La firma ML-DSA es hedged (reforzada con aleatoriedad): dos firmas del mismo mensaje con la misma clave fueron distintas, así que las pruebas deben verificar las firmas en lugar de comparar bytes. Las cadenas de contexto de FIPS 204 se admiten mediante OQS_SIG_sign_with_ctx_str; una firma hecha con el contexto invoice-v1 falló con invoice-v2 y con OQS_SIG_verify a secas, que usa el contexto vacío, así que ambas partes deben acordarlo. Una firma truncada, un blob de 3 bytes y una firma válida sobre otros datos devolvieron todos el mismo OQS_ERROR.
La desencapsulación ML-KEM no avisa de un texto cifrado dañado: con un bit invertido, OQS_KEM_decaps devolvió OQS_SUCCESS y un secreto compartido distinto, como exige el rechazo implícito de FIPS 203. La discrepancia solo aparece al usar las claves derivadas, por ejemplo como un fallo de descifrado AEAD. Además, la función no recibe la longitud del texto cifrado y lee exactamente length_ciphertext bytes, 1088 en ML-KEM-768. Prueba ambos esquemas en la herramienta de ML-KEM y en la herramienta de firmas poscuánticas.