TPDFlibCSCClient

Sécurité et signatures

Description

Fournit un client synchrone pour les points de terminaison d'identification, d'autorisation et de signature de condensé du Cloud Signature Consortium

Le client récupère le certificat de signature et les OID d’algorithmes pris en charge depuis credentials/info, obtient les données d’activation de signature depuis credentials/authorize et soumet un ou plusieurs condensats déjà calculés à signatures/signHash

SignDigest implémente TPDFlibExternalDigestSignEvent et peut être affecté directement à TPDFlib.OnExternalDigestSign, en conservant dans la bibliothèque la création de ByteRange PDF, les attributs CMS authentifiés, le dimensionnement de l’espace réservé et la vérification de la signature renvoyée

Unité

PDFlibCSC

Construction

Constructor TPDFlibCSCClient.Create;
Destructor TPDFlibCSCClient.Destroy;

Découverte des identifiants

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 doit réussir avant les appels d'autorisation directe ou de signature par lot

Le certificat de signature est exposé par SigningCertificateDER, les certificats supplémentaires par CertificateChainCount et GetCertificateChainDER, et la limite du lot distant par MaxBatchSize

Autorisation

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;

Pour les identifiants avec HashPinningRequired=True, le tableau de condensés est obligatoire et doit contenir exactement NumSignatures valeurs

Le SAD prérécupéré est contrôlé quant à son expiration et sa liaison de hachage, puis consommé une seule fois

Signature

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;

Chaque condensé d'un lot doit utiliser le même algorithme et avoir exactement la longueur impliquée par DigestAlgorithm

SignatureAlgorithm prend en charge PDF_EXTERNAL_SIGNATURE_RSA_PKCS1 et PDF_EXTERNAL_SIGNATURE_ECDSA_DER ; les signatures ECDSA de CSC sont encodées en DER, de sorte qu’une sortie P1363 n’est pas déduite

Paramètres

ServiceURLURL de base du service avant /csc/<version>
APIVersionSegment de version du point de terminaison, v1 par défaut
CredentialIDIdentifiant d’informations d’identification défini par le fournisseur
OAuthTokenJeton porteur en écriture seule ajouté à chaque requête de transport par défaut
TimeoutMSDélai d’expiration de la requête, 300000 millisecondes par défaut
MaxResponseBytesTaille maximale admissible de la réponse, 8 MiB par défaut
ClientDataValeur facultative définie par le fournisseur et envoyée avec les demandes de signature
AuthorizationPINPIN en écriture seule utilisé par l’autorisation automatique des rappels
AuthorizationOTPMot de passe à usage unique en écriture seule effacé après l’autorisation du rappel
AuthorizationDescriptionDescription facultative utilisée par l’autorisation automatique des rappels
OnTransportRappel de transport facultatif pour l'intégration mTLS, proxy, propre à un fournisseur ou déterministe dans les tests

Propriétés d’état

CredentialLoaded, SigningCertificateDER, CertificateChainCount, SupportedAlgorithmCount, MaxBatchSize, HashPinningRequired, LastAuthorizationExpiresAt, LastHTTPStatus et LastError exposent l’état actuel sans renvoyer de secrets OAuth, PIN, OTP ou SAD

Exemple

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;

Comportement en cas d’échec

Les méthodes renvoient False et définissent LastError si la validation de configuration, transport, JSON, Base64, X.509, algorithme, lot, activation ou nombre de réponses échoue

Le chemin de signature externe du condensé vérifie indépendamment chaque signature brute renvoyée avec SigningCertificateDER avant d'accepter le PDF

Voir aussi

OnExternalDigestSign, SetSignProcessExternalDigestSigner, SetSignProcessDigestAlgorithm