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à

PDFlibCSC

Costruzione

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

ServiceURLURL di base del servizio prima di /csc/<version>
APIVersionSegmento di versione dell'endpoint, valore predefinito v1
CredentialIDIdentificatore della credenziale definito dal fornitore
OAuthTokenToken bearer di sola scrittura aggiunto a ogni richiesta del trasporto predefinito
TimeoutMSTimeout della richiesta, valore predefinito 300000 millisecondi
MaxResponseBytesDimensione massima accettata della risposta, valore predefinito 8 MiB
ClientDataValore facoltativo definito dal fornitore inviato con le richieste di firma
AuthorizationPINPIN di sola scrittura usato dall'autorizzazione automatica del callback
AuthorizationOTPPassword monouso di sola scrittura cancellata dopo l'autorizzazione del callback
AuthorizationDescriptionDescrizione facoltativa usata dall'autorizzazione automatica del callback
OnTransportCallback 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