
Una implementación rápida, portátil y ligera de COSE + CBOR para sistemas embebidos. Admite PQC, FIPS 140-3, DO-178 y MISRA C. Desarrollado por wolfSSL.
wolfCOSE es una biblioteca ligera en C que implementa CBOR (RFC 8949), COSE (RFC 9052/9053) y ML-DSA para COSE (RFC 9964) poscuántico, utilizando wolfSSL como backend criptográfico.
COSE_Sign con múltiples firmantes
y COSE_Encrypt / COSE_Mac con múltiples destinatariosCOSE_Key RFC 9964 (tipo de clave AKP, claves privadas basadas en semilla).data/.bss)COSE_Sign1 con ES256, ~5.1 KB solo verificación y ~6.8 KB firma + verificación.
El flash total incluyendo wolfCrypt es de ~26.2 KB solo verificación (WOLFCOSE_LEAN_VERIFY) y ~34.6 KB firma + verificaciónCOSE_Sign1 ES256, x86_64, wolfCrypt sp_256 asm): 66,538 firmas/s, 26,437 verificaciones/sCOSE_Sign1 con ML-DSA-44 incluyendo wolfCrypt es de ~20.8 KB solo verificación
(WOLFCOSE_LEAN_VERIFY_MLDSA) y ~35.8 KB firma + verificación, aproximadamente a 1 KB de ES256 clásico. La parte de wolfCOSE
por sí sola es de 4.6 KB y ~6.6 KB respectivamente. Consulte FootprintFirma: ES256, ES384, ES512, EdDSA (Ed25519/Ed448), PS256/384/512, ML-DSA-44/65/87
Cifrado: AES-GCM (128/192/256), ChaCha20-Poly1305, variantes AES-CCM
MAC: HMAC-SHA256/384/512, AES-MAC
Distribución de Claves: Directo, AES Key Wrap, ECDH-ES+HKDF
wolfCOSE ha implementado todos los mensajes RFC 9052, tanto en variantes de actor único como de múltiples actores:
| Mensaje | RFC 9052 | API | Propósito |
|---|---|---|---|
COSE_Sign1 | Sec. 4.2 | wc_CoseSign1_Sign / wc_CoseSign1_Verify | Firma de firmante único |
COSE_Sign | Sec. 4.1 | wc_CoseSign_Sign / wc_CoseSign_Verify | Múltiples firmantes (firmas independientes sobre el mismo payload) |
COSE_Encrypt0 | Sec. 5.2 | wc_CoseEncrypt0_Encrypt / wc_CoseEncrypt0_Decrypt | AEAD de destinatario único |
COSE_Encrypt | Sec. 5.1 | wc_CoseEncrypt_Encrypt / wc_CoseEncrypt_Decrypt | Múltiples destinatarios (un solo ciphertext, muchos destinatarios mediante Direct / AES-KW / ECDH-ES) |
COSE_Mac0 | Sec. 6.2 | wc_CoseMac0_Create / wc_CoseMac0_Verify | MAC de destinatario único |
COSE_Mac | Sec. 6.1 | wc_CoseMac_Create / wc_CoseMac_Verify | MAC multidestinatario (clave MAC compartida, distribuida a los destinatarios) |
COSE_Key / COSE_KeySet | Sec. 7 | wc_CoseKey_Encode / wc_CoseKey_Decode | Serialización de claves para todos los tipos de clave |
wolfCOSE requiere wolfSSL como backend criptográfico. Versión mínima soportada: v5.8.0-stable (primera versión con el símbolo público wc_ForceZero). La firma poscuántica utiliza la API canónica wc_MlDsaKey de FIPS 204, que llega a wolfSSL después de v5.9.1-stable; compilar wolfCOSE contra v5.8.0–v5.9.1 funciona para todo excepto ML-DSA. Las versiones 5.x más antiguas pueden soportarse técnicamente pero requieren cambios a nivel de código fuente; contacte con wolfSSL para soporte comercial.
Elija una configuración de compilación según los algoritmos que necesite.
Esto le proporciona COSE Sign1 (ES256/384/512) y Encrypt0 (AES-GCM):
cd wolfssl
./autogen.sh
./configure --enable-ecc --enable-aesgcm \
--enable-sha384 --enable-sha512 --enable-keygen
make && sudo make install
sudo ldconfig
Algoritmos habilitados: ES256, ES384, ES512, AES-GCM-128/192/256
Para una huella menor de wolfCrypt, añada --enable-cryptonly para eliminar la pila TLS
y deshabilite los algoritmos que una compilación Sign1 + Encrypt0 nunca utiliza:
./configure --enable-cryptonly --enable-ecc --enable-aesgcm \
--enable-sha384 --enable-sha512 --enable-keygen \
--enable-lowresource \
--disable-dh --disable-rsa --disable-aescbc \
--disable-sha --disable-md5 --disable-chacha --disable-poly1305 \
--disable-errorstrings
Consulte Tuning for Size y Tuning for Speed para exprimir aún más wolfCOSE y wolfCrypt en MCUs.
Para firma poscuántica pura con ML-DSA-44/65/87:
cd wolfssl
./autogen.sh
./configure --enable-cryptonly --enable-mldsa
make && sudo make install
sudo ldconfig
Algoritmos habilitados: ML-DSA-44, ML-DSA-65, ML-DSA-87
(SHAKE-128/256 se incorporan automáticamente con --enable-mldsa. La
API wc_MlDsaKey requiere wolfSSL posterior a v5.9.1-stable).
cd wolfssl
./autogen.sh
./configure --enable-ecc --enable-ed25519 --enable-ed448 \
--enable-curve25519 --enable-aesgcm --enable-aesccm \
--enable-sha384 --enable-sha512 --enable-keygen \
--enable-rsapss --enable-chacha --enable-poly1305 \
--enable-mldsa \
--enable-hkdf --enable-aeskeywrap
make && sudo make install
sudo ldconfig
# Biblioteca principal (libwolfcose.a)
make
# Ejecutar pruebas unitarias
make test
# Compilar y ejecutar pruebas de ida y vuelta de la herramienta CLI (todos los algoritmos)
make tool-test
# Ejecutar demo del ciclo de vida (11 algoritmos)
make demo
| Objetivo | Descripción |
|---|---|
make all | Compila libwolfcose.a (solo biblioteca principal) |
make shared | Compila libwolfcose.so |
make test | Compila + ejecuta pruebas unitarias de CBOR y COSE |
make tool | Compila la herramienta CLI (tools/wolfcose_tool) |
make tool-test | Autoprueba de ida y vuelta para los 17 algoritmos |
make demo | Compila + ejecuta demo del ciclo de vida (11 algoritmos) |
make clean | Elimina todos los artefactos de compilación |
Consulte examples/ para ver código funcional completo:
sign1_demo.c, encrypt0_demo.c, mac0_demo.c: demos de algoritmoslifecycle_demo.c: flujo de trabajo completo de extremo a nubecomprehensive/: pruebas de matriz de algoritmosscenarios/: firma de firmware, atestación, configuración de flotasSe ejecuta en cada push y PR:
-fanalyzer--addon=misra revisando todas las rutas de código de wolfCOSEbugprone-*, cert-*, clang-analyzer-*, misc-*)