Documentación

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.

1

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.

2

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.

3

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.

4

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.

trust_anchor — la authority firma el ancla de confianza
registry_chain — un root firma el registry
receipt — el hash del archivo coincide con el recibo firmado
merkle_proof — el documento está incluido en el lote
batch_signature — el lote está firmado por el registry
bitcoin_anchoradicional — el lote está anclado 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.

EN · English
ORP-001
Originum Registry Protocol — English edition
Versión 1.0Estado FrozenFecha 2026-03-03
ES · Español
ORP-001
Originum Registry Protocol — edición en español
Versión 1.0Estado FrozenFecha 2026-03-03

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.

Bajo solicitud

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
Solicitar acceso