TPDFlibCSCClient

Zabezpečení a podpisy

Popis

Poskytuje synchronního klienta pro koncové body pověření, autorizace a podepisování digestu konsorzia Cloud Signature Consortium

Klient získává podpisový certifikát a podporované OID algoritmů z credentials/info, získává data aktivace podpisu z credentials/authorize a předkládá jeden či více už vypočítaných digestů do signatures/signHash

SignDigest implementuje TPDFlibExternalDigestSignEvent a lze jej přiřadit přímo na TPDFlib.OnExternalDigestSign, přičemž tvorba ByteRange PDF, ověřené atributy CMS, rozměrování zástupného symbolu a ověření vráceného podpisu zůstávají uvnitř knihovny

Unit

PDFlibCSC

Konstrukce

Constructor TPDFlibCSCClient.Create;
Destructor TPDFlibCSCClient.Destroy;

Objevování pověření

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 musí uspět před voláními přímé autorizace nebo dávkového podpisování

Podpisový certifikát je vystaven přes SigningCertificateDER, další certifikáty přes CertificateChainCount a GetCertificateChainDER a strop vzdálené dávky přes MaxBatchSize

Autorizace

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;

U pověření s HashPinningRequired=True je pole digestů povinné a musí obsahovat přesně NumSignatures hodnot

Přednačtené SAD se kontroluje na vypršení a vazbu hashe a konzumuje se přesně jednou

Podpisování

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;

Každý digest v dávce musí používat stejný algoritmus a mít přesnou délku implikovanou DigestAlgorithm

SignatureAlgorithm podporuje PDF_EXTERNAL_SIGNATURE_RSA_PKCS1 a PDF_EXTERNAL_SIGNATURE_ECDSA_DER; podpisy ECDSA CSC jsou kódovány v DER, takže výstup P1363 se neodvozuje

Vlastnosti konfigurace

ServiceURLZákladní URL služby před /csc/<version>
APIVersionSegment verze koncového bodu, výchozí v1
CredentialIDIdentifikátor pověření definovaný dodavatelem
OAuthTokenToken nosiče jen pro zápis přidávaný ke každému výchozímu přenosovému požadavku
TimeoutMSČasový limit požadavku, výchozí 300000 milisekund
MaxResponseBytesMaximální přijímaná velikost odpovědi, výchozí 8 MiB
ClientDataVolitelná hodnota definovaná dodavatelem posílaná s požadavky na podpis
AuthorizationPINPIN jen pro zápis používaný automatickou autorizací zpětných volání
AuthorizationOTPJednorázové heslo jen pro zápis vymazané po autorizaci zpětného volání
AuthorizationDescriptionVolitelný popis používaný automatickou autorizací zpětných volání
OnTransportVolitelné přenosové zpětné volání pro mTLS, proxy, integraci specifickou pro dodavatele nebo deterministické testování

Vlastnosti stavu

CredentialLoaded, SigningCertificateDER, CertificateChainCount, SupportedAlgorithmCount, MaxBatchSize, HashPinningRequired, LastAuthorizationExpiresAt, LastHTTPStatus a LastError vystavují aktuální stav, aniž by vracely tajemství OAuth, PIN, OTP nebo SAD

Příklad

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;

Chování při selhání

Metody vrací False a nastaví LastError, když selže validace konfigurace, přenosu, JSON, Base64, X.509, algoritmu, dávky, aktivace nebo počtu odpovědí

Cesta externího digestového podpisování nezávisle ověří každý vrácený surový podpis proti SigningCertificateDER, než PDF přijme

Viz také

OnExternalDigestSign, SetSignProcessExternalDigestSigner, SetSignProcessDigestAlgorithm