TPDFlibCSCClient
Sicurezza e firme
Descrizione
Fornisce un client sincrono per gli endpoint di credenziali, autorizzazione e firma dei digest del Cloud Signature Consortium
Il client recupera il certificato di firma e gli OID degli algoritmi supportati da credentials/info, ottiene i dati di attivazione della firma da credentials/authorize e invia uno o più digest già calcolati a signatures/signHash
SignDigest implementa TPDFlibExternalDigestSignEvent e può essere assegnato direttamente a TPDFlib.OnExternalDigestSign, mantenendo nella libreria la creazione di PDF ByteRange, gli attributi autenticati CMS, il dimensionamento del segnaposto e la verifica della firma restituita
Unità
PDFlibCSCCostruzione
Constructor TPDFlibCSCClient.Create;
Destructor TPDFlibCSCClient.Destroy;Individuazione delle credenziali
Function TPDFlibCSCClient.RefreshCredentialInfo: Boolean;
Function TPDFlibCSCClient.SupportsAlgorithm(DigestAlgorithm, SignatureAlgorithm: Integer): Boolean;
Function TPDFlibCSCClient.GetCertificateChainDER(Index: Integer): AnsiString;
Function TPDFlibCSCClient.GetSupportedAlgorithmOID(Index: Integer): AnsiString;
Procedure TPDFlibCSCClient.ClearCredentialInfo;RefreshCredentialInfo deve riuscire prima delle chiamate di autorizzazione diretta o firma batch
Il certificato di firma è disponibile tramite SigningCertificateDER, i certificati aggiuntivi tramite CertificateChainCount e GetCertificateChainDER, mentre il limite del batch remoto è disponibile tramite MaxBatchSize
Autorizzazione
Function TPDFlibCSCClient.Authorize(NumSignatures: Integer; Const Digests: TPDFlibCSCByteArray; Const PIN, OTP, Description, ClientData: WideString; Out SAD: AnsiString): Boolean;
Function TPDFlibCSCClient.PrefetchAuthorization(NumSignatures: Integer; Const Digests: TPDFlibCSCByteArray; Const PIN, OTP, Description, ClientData: WideString): Boolean;
Function TPDFlibCSCClient.SetPrefetchedSAD(Const SAD: AnsiString; ExpiresInSeconds: Integer; Const PinnedDigests: TPDFlibCSCByteArray): Boolean;
Procedure TPDFlibCSCClient.ClearSAD;
Procedure TPDFlibCSCClient.ClearAuthorizationSecrets;Per credenziali con HashPinningRequired=True, l'array dei digest è obbligatorio e deve contenere esattamente NumSignatures valori
Il SAD preacquisito viene controllato per scadenza e associazione hash e viene consumato esattamente una volta
Firma
Function TPDFlibCSCClient.SignHashes(Const Digests: TPDFlibCSCByteArray; DigestAlgorithm, SignatureAlgorithm: Integer; Const SAD: AnsiString; Out Signatures: TPDFlibCSCByteArray): Boolean;
Function TPDFlibCSCClient.SignAuthorizedHashes(Const Digests: TPDFlibCSCByteArray; DigestAlgorithm, SignatureAlgorithm: Integer; Out Signatures: TPDFlibCSCByteArray): Boolean;
Function TPDFlibCSCClient.SignDigest(Sender: TObject; SignProcessID: Integer; Const Digest: AnsiString; DigestAlgorithm, SignatureAlgorithm: Integer; Var Signature: AnsiString): Boolean;Ogni digest batch deve usare lo stesso algoritmo e la lunghezza esatta implicata da DigestAlgorithm
SignatureAlgorithm supporta PDF_EXTERNAL_SIGNATURE_RSA_PKCS1 e PDF_EXTERNAL_SIGNATURE_ECDSA_DER; le firme CSC ECDSA sono codificate in DER, quindi l'output P1363 non viene dedotto
Parametri
| ServiceURL | URL di base del servizio prima di /csc/<version> |
|---|---|
| APIVersion | Segmento di versione dell'endpoint, valore predefinito v1 |
| CredentialID | Identificatore della credenziale definito dal fornitore |
| OAuthToken | Token bearer di sola scrittura aggiunto a ogni richiesta del trasporto predefinito |
| TimeoutMS | Timeout della richiesta, valore predefinito 300000 millisecondi |
| MaxResponseBytes | Dimensione massima accettata della risposta, valore predefinito 8 MiB |
| ClientData | Valore facoltativo definito dal fornitore inviato con le richieste di firma |
| AuthorizationPIN | PIN di sola scrittura usato dall'autorizzazione automatica del callback |
| AuthorizationOTP | Password monouso di sola scrittura cancellata dopo l'autorizzazione del callback |
| AuthorizationDescription | Descrizione facoltativa usata dall'autorizzazione automatica del callback |
| OnTransport | Callback di trasporto facoltativa per mTLS, proxy, provider specifici o integrazione di test deterministica |
Proprietà dello stato
CredentialLoaded, SigningCertificateDER, CertificateChainCount, SupportedAlgorithmCount, MaxBatchSize, HashPinningRequired, LastAuthorizationExpiresAt, LastHTTPStatus e LastError espongono lo stato corrente senza restituire segreti OAuth, PIN, OTP o SAD
Esempio
var
CSC: TPDFlibCSCClient;
ProcessID: Integer;
begin
CSC:= TPDFlibCSCClient.Create;
try
CSC.ServiceURL:= 'https://sign.example.com';
CSC.CredentialID:= 'account/signing-key';
CSC.OAuthToken:= AccessToken;
CSC.AuthorizationPIN:= UserPIN;
CSC.AuthorizationOTP:= CurrentOTP;
if not CSC.RefreshCredentialInfo then
raise Exception.Create(String(CSC.LastError));
PDF.OnExternalDigestSign:= CSC.SignDigest;
ProcessID:= PDF.NewSignProcessFromFile(InputFile, '');
PDF.SetSignProcessField(ProcessID, 'Approval');
PDF.SetSignProcessDigestAlgorithm(ProcessID, 2);
PDF.SetSignProcessExternalDigestSigner(ProcessID,
CSC.SigningCertificateDER, PDF_EXTERNAL_SIGNATURE_RSA_PKCS1, 512);
PDF.EndSignProcessToFile(ProcessID, OutputFile);
finally
CSC.Free;
end;
end;Comportamento in caso di errore
I metodi restituiscono False e impostano LastError quando non riesce la convalida della configurazione, del trasporto, di JSON, Base64, X.509, dell'algoritmo, del batch, dell'attivazione o del numero di risposte
Il percorso di firma esterna del digest verifica indipendentemente ogni firma grezza rispetto a SigningCertificateDER prima di accettare il PDF
Vedere anche
OnExternalDigestSign, SetSignProcessExternalDigestSigner, SetSignProcessDigestAlgorithm