TPDFlibSigner

Security and Signatures

Descripción

TPDFlibSigner es el motor de firma independiente que empareja un destino TPDFlibSignDoc con una identidad TPDFlibPFXFile y escribe la firma terminada como una revisión incremental nueva

Abre el PDF desde un archivo, un stream o una cadena, vincula la identidad con uno de los métodos open, selecciona el campo de destino, configura la firma y termina con AppendToFile, AppendToStream o ApplySignature

La clase cubre todo el conjunto de funciones de firma: elección de digest, reserva y estimación de contenido, información de revocación, tipos de compromiso, políticas de firma, atestaciones legales, niveles de certificación DocMDP, field locks, timestamps de documento y firmas passthrough de longitud fija

La fachada expone el mismo pipeline mediante las funciones SignProcess documentadas; usa esta clase directamente cuando el flujo de firma deba integrarse en un writer de revisiones personalizado más grande

Sintaxis

Delphi

TPDFlibSigner = Class
  Public
    Constructor Create;
    Destructor Destroy; Override;
    Function OpenPDF(Const FileName: WideString; Const Password: WideString): TPDFlibSignerResult;
    Function OpenPDFStream(SourceStream: TStream; Const Password: WideString): TPDFlibSignerResult;
    Function OpenPDFString(Const SourceString: AnsiString; Const Password: WideString): TPDFlibSignerResult;
    Function OpenPFX(Const FileName: WideString; Const Password: AnsiString; UseMachineKeyset: Boolean): TPDFlibSignerResult;
    Function OpenCertStore(Const StoreName, CertName: WideString; UseMachineStore: Boolean): TPDFlibSignerResult;
    Function OpenCertContext(CertContext: Pointer): TPDFlibSignerResult;
    Function OpenEd25519(Const CertificateDER, PrivateKeyDER: AnsiString): TPDFlibSignerResult;
    Function OpenEd25519FromFile(Const CertificateFile, PrivateKeyFile: WideString): TPDFlibSignerResult;
    Function OpenCNGKey(Const CertificateDER: AnsiString;
      Const ProviderName, KeyName: WideString; UseMachineKey, AllowUI: Boolean): TPDFlibSignerResult;
    Function OpenCNGKeyHandle(Const CertificateDER: AnsiString; KeyHandle: TPLIntPtr; AllowUI: Boolean): TPDFlibSignerResult;
    Function OpenExternalDigestSigner(Const CertificateDER: AnsiString;
      Signer: TPDFlibExternalDigestSignEvent; Sender: TObject;
      SignProcessID, SignatureAlgorithm, SignatureReserveBytes: Integer): TPDFlibSignerResult;
    Procedure SetPrivateKeyUI(AllowUI: Boolean);
    Procedure SetRSAPSSPadding(Enable: Boolean);
    Procedure SetLegalAttestation(Const Value: WideString);
    Procedure SelectField(Const FieldName: WideString; FieldPage: Integer);
    Procedure SetSignatureProperty(SignatureProperty: TPDFlibSignatureProperty; Const NewValue: AnsiString);
    Procedure SetAppearanceText(Const Text: WideString; FontSize, FontRed, FontGreen, FontBlue: Double);
    Procedure SetSignatureBounds(Left, Top, Width, Height: Double);
    Procedure SetPassthrough(SignatureLength: Integer);
    Procedure SetDocTimeStamp(SignatureLength: Integer);
    Procedure SetDigestAlgorithm(Algorithm: TPDFlibDigestAlgorithm);
    Procedure SetContentsReserveBytes(ExtraBytes: Integer);
    Procedure SetContentsEstimate(ChainBytes, CRLBytes, OCSPBytes, TimeStampBytes, SafetyMarginPercent: Integer);
    Procedure SetRevocationInfo(Const RevocationInfoDER: AnsiString);
    Procedure SetCommitmentType(CommitmentType: Integer);
    Procedure SetDocMDP(Level: Integer);
    Function SetFieldLock(Const Action: AnsiString; Const Fields: TArray): Boolean;
    Procedure SetSignaturePolicy(Const PolicyOID: AnsiString; Const PolicyHashBytes: AnsiString; HashAlgorithm: TPDFlibDigestAlgorithm);
    Function AppendToFile(Const FileName: WideString): Boolean;
    Function AppendToStream(TargetStream: TStream): Boolean;
    Function ApplySignature: Boolean;
    Function GetByteRange(Index: Integer): Int64;
    Function GetEstimatedContentsBytes: Integer;
    Procedure SetInPlace;
    Property IsDocTimeStamp: Boolean Read FIsDocTimeStamp;
  End;

Métodos

OpenPDF, OpenPDFStream, OpenPDFStringAbre el documento que se va a firmar desde un archivo, un stream o una cadena ANSI
OpenPFX, OpenCertStore, OpenCertContextVincula un archivo PFX, un certificado de almacén del sistema por nombre para mostrar o un contexto de certificado externo
OpenEd25519, OpenEd25519FromFileVincula un par de llaves Ed25519 desde memoria o desde archivos
OpenCNGKey, OpenCNGKeyHandleVincula una llave CNG por proveedor y nombre de llave, o por handle de llave
OpenExternalDigestSignerDelega la firma del digest a un callback externo
SelectFieldElige el campo de firma por nombre completo y página
SetSignaturePropertyEstablece uno de spReason, spLocation, spContactInfo, spFieldImage, spSubFilter y spFieldImageOptions
SetAppearanceTextGuarda el bloque de texto visible autogenerado que se escribe en la apariencia del campo al agregar la revisión
SetSignatureBoundsUbica el campo en coordenadas explícitas
SetPassthroughProduce una firma passthrough de exactamente la longitud indicada para firma externa
SetDocTimeStampCambia la firma a un timestamp de documento
SetDigestAlgorithmSelecciona el digest usado para la firma
SetContentsReserveBytes, SetContentsEstimateReserva bytes adicionales o dimensiona la reserva a partir de estimaciones de la cadena, CRL, OCSP y timestamp más un margen de seguridad
SetRevocationInfoIncrusta datos de revocación recolectados previamente en forma DER
SetCommitmentType, SetSignaturePolicy, SetLegalAttestationDeclara la intención de firma, la política y la atestación legal
SetDocMDPActiva una firma de certificación en el nivel DocMDP 1, 2 o 3; hay que llamarla antes de SelectField
SetFieldLockEscribe un diccionario de field lock con una acción y una lista de nombres de campos
AppendToFile, AppendToStreamEscribe la revisión firmada en un archivo o stream nuevo
ApplySignatureAplica la firma al documento in place
GetByteRange, GetEstimatedContentsBytesLee la entrada del ByteRange y el tamaño estimado de los contenidos una vez construida la revisión
SetInPlaceMarca la revisión como una actualización in place del documento abierto

Parámetros

IsDocTimeStampTrue cuando el firmante está produciendo un timestamp de documento

Observaciones

Todos los métodos open devuelven TPDFlibSignerResult

Los niveles DocMDP se corresponden con el valor P de transformación de ISO 32000: 1 sin cambios, 2 llenado de formas, 3 anotaciones; cuando no es cero se activa el bit AppendOnly de /SigFlags del AcroForm para que los visores hagan cumplir la certificación

Véase también

TPDFlibSignDoc, TPDFlibPFXFile, TPDFlibSignerResult, NewSignProcessFromFile, SetSignProcessDocMDP