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 incorpora sellos de tiempo RFC 3161 opcionales

Syntax

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);

Description

FPdfCms es el constructor de 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 una cadena de certificados opcional

La interfaz ICmsSigner es el contrato del backend criptográfico: quien llama suministra los OID de los algoritmos de resumen y de firma, el identificador del firmante y ejecuta la operación real de clave privada sobre el resumen de los atributos firmados. Esto desacopla la codificación CMS de cualquier proveedor criptográfico específico

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

ExtractSignatureValue extrae los octetos de la firma en bruto de un valor CMS terminado para poder enviarlos a una autoridad de sellado de tiempo; AddSignatureTimestampToCms luego incorpora el token de sello de tiempo devuelto como atributo no firmado, produciendo la forma conforme B-T/B-LTA

ICmsSigner methods

MétodoDescripción
GetDigestAlgorithmOidDevuelve el OID del algoritmo de hash aplicado a 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íos para ECDSA; transporta el blob de parámetros RSA-PSS para PSS)
GetSignerIdDevuelve el TCmsSignerId que identifica al firmante por emisor/número de serie o por identificador de clave de sujeto
SignSignedAttrsDigestEjecuta la firma de clave privada sobre el resumen suministrado y devuelve los octetos de la firma

Functions and procedures

RutinaDescripción
CertKeyAlgorithmOidLee el OID del algoritmo SubjectPublicKeyInfo de un certificado, que es lo que determina si se usa un algoritmo de firma RSA o ECDSA; todos los backends de firma lo necesitan, por eso vive aquí y no dentro de uno de ellos
ExtractIssuerAndSerialExtrae las TLV crudas de issuer y serialNumber que contiene un SignerIdentifier hacia IssuerTlv y SerialTlv
EcDsaP1363ToDerCodifica una firma ECDSA P1363 r||s cruda en la secuencia DER de dos INTEGER que CMS espera; los tokens y las API criptográficas de la plataforma devuelven la forma cruda
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 falla
BuildSignedDataConstruye un ContentInfo CMS RFC 5652 separado y completo con un SignerInfo CAdES, el certificado del firmante, una cadena opcional y los atributos firmados configurados
ExtractSignatureValueExtrae los octetos de firma en bruto del SignerInfo usados como entrada de impresión de mensaje del sello de tiempo RFC 3161
AddSignatureTimestampToCmsAgrega un TimeStampToken RFC 3161 completo como atributo no firmado signature-time-stamp y recodifica las longitudes envolventes

Types

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

Remarks

See Also

FPdfTsa, FPdfCrypto, FPdfSha256, TPdf.SignPades