TPDFlibCSCClient

Sikkerhed og signaturer

Beskrivelse

Leverer en synkron klient til Cloud Signature Consortiums slutpunkter for legitimationsoplysninger, godkendelse og digest-signering

Klienten henter signeringscertifikatet og understøttede algoritme-OID'er fra credentials/info, henter signaturaktiveringsdata fra credentials/authorize og sender en eller flere allerede beregnede hashes til signatures/signHash

SignDigest implementerer TPDFlibExternalDigestSignEvent og kan tildeles direkte til TPDFlib.OnExternalDigestSign, så oprettelse af PDF ByteRange, CMS-godkendte attributter, størrelsesfastsættelse af pladsholdere og verificering af den returnerede signatur forbliver i biblioteket

Unit

PDFlibCSC

Konstruktion

Constructor TPDFlibCSCClient.Create;
Destructor TPDFlibCSCClient.Destroy;

Søgning efter legitimationsoplysninger

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 skal lykkes før direkte godkendelse eller batchsigneringskald

Signeringscertifikatet eksponeres gennem SigningCertificateDER, yderligere certifikater gennem CertificateChainCount og GetCertificateChainDER og loftet for fjernbatcher gennem 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;

For legitimationsoplysninger med HashPinningRequired=True er digest-arrayet obligatorisk og skal indeholde nøjagtigt NumSignatures værdier

Forhåndshentet SAD kontrolleres for udløb og hashbinding og forbruges præcis én gang

Signering

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;

Hver digest i en batch skal bruge den samme algoritme og have præcis den længde, som DigestAlgorithm angiver

SignatureAlgorithm understøtter PDF_EXTERNAL_SIGNATURE_RSA_PKCS1 og PDF_EXTERNAL_SIGNATURE_ECDSA_DER; CSC ECDSA-signaturer er DER-kodede, så P1363-output udledes ikke

Parametre

ServiceURLBasistjeneste-URL før /csc/<version>
APIVersionSlutpunktets versionssegment, som standard v1
CredentialIDLeverandørdefineret legitimationsidentifikator
OAuthTokenBearer-token kun til skrivning, som føjes til hver standardtransportanmodning
TimeoutMSTimeout for anmodning, standard 300000 millisekunder
MaxResponseBytesMaksimal accepteret svarstørrelse, standard 8 MiB
ClientDataValgfri leverandørdefineret værdi, der sendes med signeringsanmodninger
AuthorizationPINSkrivebeskyttet PIN, der bruges af automatisk callbackgodkendelse
AuthorizationOTPSkrivebeskyttet engangsadgangskode, der slettes efter callbackgodkendelse
AuthorizationDescriptionValgfri beskrivelse, der bruges ved automatisk callbackgodkendelse
OnTransportValgfri transportcallback til mTLS-, proxy-, leverandørspecifik eller deterministisk testintegration

Statusegenskaber

CredentialLoaded, SigningCertificateDER, CertificateChainCount, SupportedAlgorithmCount, MaxBatchSize, HashPinningRequired, LastAuthorizationExpiresAt, LastHTTPStatus og LastError eksponerer den aktuelle tilstand uden at returnere OAuth-, PIN-, OTP- eller SAD-hemmeligheder

Eksempel

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;

Adfærd ved fejl

Metoder returnerer False og indstiller LastError, når validering af konfiguration, transport, JSON, Base64, X.509, algoritme, batch, aktivering eller svarantal mislykkes

Den eksterne digest-signeringssti verificerer uafhængigt hver returneret rå signatur mod SigningCertificateDER, før PDF-dokumentet accepteres

Se også

OnExternalDigestSign, SetSignProcessExternalDigestSigner, SetSignProcessDigestAlgorithm