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
PDFlibCSCKonstrukce
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
| ServiceURL | Základní URL služby před /csc/<version> |
|---|---|
| APIVersion | Segment verze koncového bodu, výchozí v1 |
| CredentialID | Identifikátor pověření definovaný dodavatelem |
| OAuthToken | Token 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 |
| MaxResponseBytes | Maximální přijímaná velikost odpovědi, výchozí 8 MiB |
| ClientData | Volitelná hodnota definovaná dodavatelem posílaná s požadavky na podpis |
| AuthorizationPIN | PIN jen pro zápis používaný automatickou autorizací zpětných volání |
| AuthorizationOTP | Jednorázové heslo jen pro zápis vymazané po autorizaci zpětného volání |
| AuthorizationDescription | Volitelný popis používaný automatickou autorizací zpětných volání |
| OnTransport | Volitelné 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