Metadata-Version: 2.1
Name: hashcod-constancia
Version: 1.0.1
Summary: Verifica constancias Hashcod (W3C VC eddsa-jcs-2022) y la firma de sus webhooks. Solo biblioteca estandar.
Home-page: https://hashcodcodespace.dev/integraciones
License: MIT
Requires-Python: >=3.8
Description-Content-Type: text/markdown

# SDK de constancias Hashcod

Dos paquetes mínimos, **sin dependencias**, que verifican lo que firma la plataforma sin depender de ella:

| | Node.js (≥ 18) | Python (≥ 3.8, solo biblioteca estándar) |
|---|---|---|
| Carpeta | `sdk/js` (`hashcod-constancia`) | `sdk/python` (`hashcod-constancia`) |
| Firma de la credencial | `verifyCredential(cred, did)` | `verify_credential(cred, did)` |
| Descargar y verificar | `await verifyConstancia('HC-…')` | `verify_constancia('HC-…')` |
| Huella SHA-512 | `fingerprint(cred)` | `fingerprint(cred)` |
| Webhooks | `verifyWebhook({secret, body, timestamp, signature})` | `verify_webhook(secret, body, timestamp, signature)` |
| Terminal | `npx hashcod-constancia HC-…` | `python -m hashcod_constancia HC-…` |

Qué comprueba:

- **Firma** `eddsa-jcs-2022`: Ed25519 sobre JCS (RFC 8785) con la clave del `did.json` del emisor. La clave debe
  pertenecer a ese DID.
- **Bytes canónicos**: al descargar, el SHA-512 de los bytes es exactamente la huella publicada.
- **Webhooks**: HMAC-SHA256 de `timestamp.cuerpo`, comparación en tiempo constante y ventana de 5 minutos.

La verificación Ed25519 de Python está escrita en Python puro (RFC 8032) y rechaza firmas y puntos no canónicos,
como libsodium. Pruebas: `node tests/test_constancia_sdk.js`, que firma con el código de la plataforma y verifica con
los dos SDK, más los vectores oficiales de RFC 8032.

Instalación hasta que se publiquen en npm/PyPI:

```bash
npm install ./sdk/js
```

```bash
pip install ./sdk/python
```
