PDFium Delphi Component Docs

Unidad FPdfCms

Unidad: FPdfCms
Construye estructuras SignedData de CMS / CAdES según RFC 5652, valida documentos de política de firma e incrusta sellos de tiempo RFC 3161 opcionales

Sintaxis

TCmsSignerIdKind = (sidIssuerAndSerial, sidSubjectKeyIdentifier);

TCmsSignerId = record
  Kind: TCmsSignerIdKind;
  IssuerDer: TBytes;
  SerialDer: TBytes;
  SubjectKeyId: TBytes;
end;

ICmsSigner = interface
  function GetDigestAlgorithmOid: AnsiString;
  function GetSignatureAlgorithmOid: AnsiString;
  function GetSignatureAlgorithmParams: TBytes;
  function GetSignerId: TCmsSignerId;
  function SignSignedAttrsDigest(const Digest: TSHA256Digest): TBytes;
end;

TCmsBuildOptions = record
  SigningTimeUtc: TDateTime;
  CommitmentTypeOid: AnsiString;
  SignaturePolicyOid: AnsiString;
  SignaturePolicyHash: TBytes;
  SignaturePolicyUri: AnsiString;
  SignaturePolicyDocument: TBytes;
  class function Default: TCmsBuildOptions; static;
end;

function VerifyCmsSignaturePolicyDocument(const Options: TCmsBuildOptions;
  const PolicyDocument: TBytes; out ErrorText: string): Boolean;
function BuildSignedData(const DetachedDigest: TSHA256Digest;
  const Signer: ICmsSigner; const SignerCertDer: TBytes;
  const ChainCertDer: array of TBytes;
  const Options: TCmsBuildOptions): TBytes;
function ExtractSignatureValue(const CmsDer: TBytes;
  out SignatureValueOctets: TBytes): Boolean;
procedure AddSignatureTimestampToCms(var CmsDer: TBytes;
  const TimestampTokenDer: TBytes);

Descripción

FPdfCms es el constructor CMS de bajo nivel consumido internamente por la ruta de firma PAdES. Permite a un usuario avanzado ensamblar un valor SignedData de CMS a partir de un resumen SHA-256 de los atributos firmados, una abstracción de firmante, el certificado del firmante y, opcionalmente, una cadena de certificados

La interfaz ICmsSigner es el contrato del backend criptográfico: el llamador proporciona los OID de los algoritmos de resumen y de firma, el identificador del firmante y realiza la operación de clave privada real sobre el resumen de los atributos firmados. Esto desacopla la codificación CMS de cualquier proveedor criptográfico concreto

TCmsBuildOptions puede añadir la hora de firma, el tipo de compromiso y un identificador explícito de política de firma con hash SHA-256 de la política, URI y documento de política opcional en memoria

ExtractSignatureValue extrae los octetos de firma en bruto de un valor CMS terminado, de modo que puedan enviarse a una autoridad de sellado de tiempo; AddSignatureTimestampToCms incrusta entonces el token de sello de tiempo devuelto como un atributo sin firmar, produciendo la forma conforme a B-T/B-LTA

Métodos de ICmsSigner

MétodoDescripción
GetDigestAlgorithmOidDevuelve el OID del algoritmo de hash utilizado sobre los atributos firmados (por ejemplo 2.16.840.1.101.3.4.2.1 para SHA-256)
GetSignatureAlgorithmOidDevuelve el OID del algoritmo de firma aplicado al resumen
GetSignatureAlgorithmParamsDevuelve los parámetros del algoritmo (a menudo vacío para ECDSA; transporta el blob de parámetros RSA-PSS en el caso de PSS)
GetSignerIdDevuelve el TCmsSignerId que identifica al firmante por emisor/número de serie o por identificador de clave del sujeto
SignSignedAttrsDigestRealiza la firma de clave privada sobre el resumen proporcionado y devuelve los octetos de la firma

Funciones y procedimientos

RutinaDescripción
CertKeyAlgorithmOidLee el OID del algoritmo SubjectPublicKeyInfo de un certificado, que es lo que decide entre un algoritmo de firma RSA y ECDSA; todos los backends de firma lo necesitan, por eso vive aquí en vez de dentro de uno de ellos
ExtractIssuerAndSerialExtrae las TLV en bruto de issuer y serialNumber que lleva un SignerIdentifier, hacia IssuerTlv y SerialTlv
EcDsaP1363ToDerAjusta una firma ECDSA P1363 r||s en bruto en la secuencia DER de dos INTEGER que CMS espera; los tokens y las API de criptografía de la plataforma devuelven la forma en bruto
VerifyCmsSignaturePolicyDocumentExige un SignaturePolicyOid no vacío y un SignaturePolicyHash de 32 bytes, luego verifica el documento de política suministrado con SHA-256 y devuelve texto de diagnóstico en caso de fallo
BuildSignedDataConstruye un ContentInfo CMS RFC 5652 separado completo con un SignerInfo CAdES, el certificado del firmante, la cadena opcional y los atributos firmados configurados
ExtractSignatureValueExtrae los octetos de firma en bruto del SignerInfo usados como entrada message imprint del sello de tiempo RFC 3161
AddSignatureTimestampToCmsAñade un TimeStampToken RFC 3161 completo como atributo sin firmar signature-time-stamp y recodifica las longitudes envolventes

Tipos

TipoDescripción
TCmsSignerIdKindsidIssuerAndSerial selecciona el Name del emisor más el TLV de número de serie y sidSubjectKeyIdentifier selecciona octetos en bruto del identificador de clave del sujeto
TCmsSignerIdKind, IssuerDer, SerialDer y SubjectKeyId transportan la forma de identificador de SignerInfo seleccionada
TCmsBuildOptionsSigningTimeUtc, CommitmentTypeOid, SignaturePolicyOid, SignaturePolicyHash, SignaturePolicyUri y SignaturePolicyDocument configuran los atributos firmados; Default borra todos los valores opcionales

Observaciones

Véase también

FPdfTsa, FPdfCrypto, FPdfSha256, TPdf.SignPades