Integra Originum en tu aplicación
Originum se integra mediante un SDK nativo que tu aplicación llama directamente. Aquí tienes el modelo de integración, el flujo real y los ejemplos por lenguaje. El SDK, las credenciales y la guía completa se entregan bajo solicitud.
01 Modelo de integración
Originum no es una API REST que llamas con peticiones HTTP sueltas. Es un SDK nativo que tu aplicación carga e invoca directamente, y que encapsula toda la criptografía, la comunicación con el registry y la verificación.
El concepto central es el publisher: la identidad criptográfica de cada usuario que firma. Cada publisher tiene su propio par de claves ECDSA P-256, generadas localmente por el SDK. La clave privada se sella con una passphrase que define tu aplicación y nunca sale del SDK en claro — Originum jamás la ve.
Un publisher por usuario. El publisher es la identidad notarial estable de cada persona: se crea una vez (al dar de alta al usuario) y se reutiliza para todos sus documentos. No se crea uno por documento ni por sesión.
Qué hace el SDK
- Crea publishers y genera su par de claves localmente.
- Notariza el hash SHA-256 de cualquier archivo con una firma ECDSA P-256.
- Descarga el bundle de verificación (receipt + prueba Merkle + cadena de confianza).
- Verifica offline que un bundle es genuino.
- Rota claves de publisher de forma autenticada.
Qué NO hace
- No transmite nunca el contenido del archivo, solo su hash.
- No gestiona ni almacena passphrases: las recibe y las usa.
- No corre procesos en segundo plano ni escribe en disco.
02 Flujo en 4 pasos
La integración real sigue cuatro operaciones. Tu aplicación persiste los resultados (publisher y recibos) en su propia base de datos.
Inicializar & crear publisher · originum_publisher_create
Al dar de alta a un usuario, se crea su publisher. El SDK genera el par de claves, las sella con la passphrase del usuario y devuelve el publisher_id, el certificado y la API key. Tu app los persiste.
Notarizar · originum_notarize
Se calcula el SHA-256 del archivo y se notariza. El registry devuelve síncronamente un recibo (receipt) firmado que ya prueba criptográficamente la existencia del documento en ese instante.
Descargar bundle · originum_fetch_compact_bundle
Tras el sellado del lote (≈5 minutos, con árbol de Merkle), se descarga el bundle completo: recibo, prueba Merkle y cadena de confianza. El documento pasa de pending a complete.
Verificar · originum_verify
Con el bundle y el archivo original, cualquiera puede verificar offline la autenticidad, sin contactar con Originum. Ejecuta cinco comprobaciones criptográficas del protocolo ORP-001 — más una comprobación adicional del anclaje en Bitcoin — contra la cadena de confianza.
Anclaje automático en Bitcoin. Cada lote sellado se ancla automáticamente en la blockchain de Bitcoin vía OpenTimestamps. No requiere ninguna acción por tu parte.
03 Ejemplos por lenguaje
El SDK se distribuye con bindings nativos. Este es el patrón de una notarización, con los parámetros reales que recibe la operación. Los ejemplos son ilustrativos del flujo; la guía completa con todas las firmas se entrega con el SDK.
// Notarizar un archivo con un publisher existente var Res: TNotarizeResult; begin HashHex := ComputeFileHash(Path); // SHA-256 del archivo Res := NotarizeHash(Creds, HashHex, ExtractFileName(Path), Passphrase); // El receipt ya prueba la existencia. Estado: PENDING GuardarDocumentoNotarizado(UserID, Path, HashHex, Res); ShowMessage('Job ID: ' + Res.JobID); end;
// Notarizar un archivo con un publisher existente var hashHex = Originum.ComputeFileHash(path); // SHA-256 var res = Originum.Notarize( creds, hashHex, Path.GetFileName(path), passphrase); // El receipt ya prueba la existencia. Estado: PENDING db.SaveNotarizedDoc(userId, path, hashHex, res); Console.WriteLine($"Job ID: {res.JobId}");
// Notarizar un archivo con un publisher existente String hashHex = Originum.computeFileHash(path); // SHA-256 NotarizeResult res = Originum.notarize( creds, hashHex, Paths.get(path).getFileName().toString(), passphrase); // El receipt ya prueba la existencia. Estado: PENDING db.saveNotarizedDoc(userId, path, hashHex, res); System.out.println("Job ID: " + res.jobId);
// Notarizar un archivo con un publisher existente const hashHex = await originum.computeFileHash(path); // SHA-256 const res = await originum.notarize({ creds, hashHex, fileName: path.basename(path), passphrase, }); // El receipt ya prueba la existencia. Estado: PENDING await db.saveNotarizedDoc(userId, path, hashHex, res); console.log(`Job ID: ${res.jobId}`);
# Notarizar un archivo con un publisher existente hash_hex = originum.compute_file_hash(path) # SHA-256 res = originum.notarize( creds, hash_hex, os.path.basename(path), passphrase) # El receipt ya prueba la existencia. Estado: PENDING db.save_notarized_doc(user_id, path, hash_hex, res) print(f"Job ID: {res.job_id}")
Tras notarizar, el documento queda en estado PENDING hasta que se sella el lote (≈5 min). Tu aplicación persiste el recibo y luego descarga el bundle completo para pasarlo a SEALED.
04 Verificación offline
La verificación es el corazón del protocolo. Con el bundle y el archivo original, originum_verify ejecuta cinco comprobaciones criptográficas independientes del protocolo ORP-001 contra la cadena de confianza, sin necesidad de contactar con Originum ni con tu organización. Como sexto check adicional, valida también el anclaje del lote en Bitcoin vía OpenTimestamps.
Cada check devuelve un estado true / false / null. Los tres primeros pasan ya con el recibo síncrono; los dos siguientes (merkle_proof y batch_signature), tras el sellado del lote. El sexto check (bitcoin_anchor) es una comprobación adicional, no necesaria para la validez ORP-001: refuerza la prueba con un testigo público en Bitcoin, pero la prueba se sostiene por sí sola sin él. Como el bundle contiene la cadena de confianza completa en el momento de la firma, la verificación sigue funcionando años después aunque Originum dejara de existir. Existe una implementación de referencia independiente de los seis checks en orp-verifier (Python, Apache 2.0).
05 Protocolo ORP-001
Originum se construye sobre el Originum Registry Protocol (ORP-001), una especificación abierta y autosuficiente que permite implementar verificadores compatibles de forma independiente. Define el modelo de registro, la construcción determinista del árbol de Merkle, los requisitos de firma COSE y el algoritmo de verificación de la cadena.
ORP-001 v1.0 es una especificación Standards Track — Frozen: ningún cambio estructural está permitido dentro de la versión 1.x. Usa SHA-256 (obligatorio) como función hash y ES256 (obligatorio) como algoritmo de firma. Para solicitar la especificación completa, escríbenos.
Implementación de referencia independiente disponible. El cliente orp-verifier en Python (Apache 2.0) implementa los seis checks completos contra el bundle y verifica además el anclaje en Bitcoin. Es la prueba viva de que ORP-001 cumple su promesa: cualquier tercero puede auditar, reproducir e implementar el protocolo sin depender de Originum.
06 Acceso al SDK
Originum es infraestructura de integración enterprise: el SDK, las credenciales y la guía de implementación se entregan de forma acompañada, no en autoservicio. Así garantizamos una integración correcta y un soporte real.
Solicita acceso al SDK y al sandbox
Cuéntanos tu caso de uso y te damos acceso al entorno de pruebas, el SDK para tu lenguaje y la guía de integración completa. Sin coste hasta que pasas a producción.
- SDK nativo para tu lenguaje
- Credenciales de sandbox
- Guía de integración paso a paso
- Especificación ORP-001 completa