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, OpenPDFString | Abre el documento que se va a firmar desde un archivo, un stream o una cadena ANSI |
|---|---|
| OpenPFX, OpenCertStore, OpenCertContext | Vincula un archivo PFX, un certificado de almacén del sistema por nombre para mostrar o un contexto de certificado externo |
| OpenEd25519, OpenEd25519FromFile | Vincula un par de llaves Ed25519 desde memoria o desde archivos |
| OpenCNGKey, OpenCNGKeyHandle | Vincula una llave CNG por proveedor y nombre de llave, o por handle de llave |
| OpenExternalDigestSigner | Delega la firma del digest a un callback externo |
| SelectField | Elige el campo de firma por nombre completo y página |
| SetSignatureProperty | Establece uno de spReason, spLocation, spContactInfo, spFieldImage, spSubFilter y spFieldImageOptions |
| SetAppearanceText | Guarda el bloque de texto visible autogenerado que se escribe en la apariencia del campo al agregar la revisión |
| SetSignatureBounds | Ubica el campo en coordenadas explícitas |
| SetPassthrough | Produce una firma passthrough de exactamente la longitud indicada para firma externa |
| SetDocTimeStamp | Cambia la firma a un timestamp de documento |
| SetDigestAlgorithm | Selecciona el digest usado para la firma |
| SetContentsReserveBytes, SetContentsEstimate | Reserva bytes adicionales o dimensiona la reserva a partir de estimaciones de la cadena, CRL, OCSP y timestamp más un margen de seguridad |
| SetRevocationInfo | Incrusta datos de revocación recolectados previamente en forma DER |
| SetCommitmentType, SetSignaturePolicy, SetLegalAttestation | Declara la intención de firma, la política y la atestación legal |
| SetDocMDP | Activa una firma de certificación en el nivel DocMDP 1, 2 o 3; hay que llamarla antes de SelectField |
| SetFieldLock | Escribe un diccionario de field lock con una acción y una lista de nombres de campos |
| AppendToFile, AppendToStream | Escribe la revisión firmada en un archivo o stream nuevo |
| ApplySignature | Aplica la firma al documento in place |
| GetByteRange, GetEstimatedContentsBytes | Lee la entrada del ByteRange y el tamaño estimado de los contenidos una vez construida la revisión |
| SetInPlace | Marca la revisión como una actualización in place del documento abierto |
Parámetros
| IsDocTimeStamp | True 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