{
  "protocol": "AdjudicaGob-Firma-1",
  "purpose": "Adaptador configurable; proveedor municipal pendiente. La validación completa del formato corresponde al servicio autorizado.",
  "transport": {
    "method": "POST",
    "endpoint": "Dominio HTTPS público configurado y aprobado; sin redirecciones. Resolución DNS pública fijada para la conexión.",
    "authorization": "Bearer SIGNATURE_GATEWAY_TOKEN (sólo servidor)",
    "timeoutSeconds": 45,
    "maxArtifactBytes": 33554432,
    "mode": "Respuesta síncrona completa; un servicio asíncrono requiere un gateway autorizado que gestione su flujo."
  },
  "request": {
    "protocol": "AdjudicaGob-Firma-1",
    "requestId": "UUID único",
    "documentId": "ID del PDF original",
    "originalSha256": "SHA256 del original",
    "profileHash": "SHA256 de la configuración aprobada",
    "signerEmail": "cuenta activa autenticada con MFA",
    "signerRfc": "RFC aprobado del firmante",
    "municipalityInegi": "clave municipal",
    "format": "PAdES o CMS",
    "originalBase64": "bytes del PDF original"
  },
  "response": {
    "attestation": {
      "requestId": "idéntico",
      "documentId": "idéntico",
      "originalSha256": "idéntico",
      "profileHash": "idéntico",
      "signerEmail": "idéntico",
      "signerRfc": "idéntico",
      "municipalityInegi": "idéntico",
      "format": "formato aprobado",
      "signedSha256": "SHA256 de signedBase64 decodificado",
      "signedAt": "ISO8601, máximo 24 horas de antigüedad y un minuto de tolerancia futura",
      "chainValid": true,
      "revocationStatus": "good",
      "revocationCheckedAt": "ISO8601 con el mismo límite",
      "timestampValid": true
    },
    "signedBase64": "bytes del PDF firmado PAdES o contenedor CMS, máximo 32 MB",
    "proof": "firma binaria codificada en base64 de attestationCanonicalText"
  },
  "attestationCanonicalText": {
    "encoding": "UTF8",
    "serialization": "JSON.stringify de la siguiente lista, en este orden y con los valores originales; booleanos JSON reales",
    "orderedValues": [
      "AdjudicaGob-Firma-1",
      "requestId",
      "documentId",
      "originalSha256",
      "profileHash",
      "signerEmail",
      "signerRfc",
      "municipalityInegi",
      "format",
      "signedSha256",
      "signedAt",
      "chainValid",
      "revocationStatus",
      "revocationCheckedAt",
      "timestampValid"
    ],
    "algorithms": "Ed25519 (firma directa), RSA-SHA256 o ECDSA-SHA256 con clave pública SPKI PEM aprobada."
  },
  "mandatoryProviderResponsibilities": [
    "Autenticar al firmante conforme al acuerdo municipal y obtener su autorización real.",
    "Verificar que el archivo firmado contenga o corresponda exactamente al PDF original.",
    "Comprobar criptografía del formato, certificados, cadena de confianza, revocación y sello de tiempo.",
    "Conservar evidencia de validación y soportar cotejo de solicitud cuando falle o agote tiempo.",
    "No usar un certificado de sello digital CFDI como habilitación automática para contratos municipales."
  ],
  "platformAcceptance": "Verificación de la constancia del proveedor, conservación de archivos y revisión independiente de Jurídico; no constituye certificación legal automática."
}