TPDFlibCSCClient

Zabezpieczenia i podpisy

Opis

Udostępnia synchronicznego klienta punktów końcowych poświadczeń, autoryzacji i podpisywania skrótów Cloud Signature Consortium

Klient pobiera certyfikat podpisujący i obsługiwane identyfikatory OID algorytmów z credentials/info, uzyskuje dane aktywacji podpisu z credentials/authorize i przekazuje co najmniej jeden już obliczony skrót do signatures/signHash

SignDigest implementuje TPDFlibExternalDigestSignEvent i może zostać przypisany bezpośrednio do TPDFlib.OnExternalDigestSign, pozostawiając tworzenie PDF ByteRange, uwierzytelnione atrybuty CMS, ustalanie rozmiaru symbolu zastępczego i weryfikację zwróconego podpisu wewnątrz biblioteki

Unit

PDFlibCSC

Konstrukcja

Constructor TPDFlibCSCClient.Create;
Destructor TPDFlibCSCClient.Destroy;

Wykrywanie poświadczeń

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 musi zakończyć się powodzeniem przed bezpośrednimi wywołaniami autoryzacji lub podpisywania wsadowego

Certyfikat podpisujący jest udostępniany przez SigningCertificateDER, dodatkowe certyfikaty przez CertificateChainCount i GetCertificateChainDER, a zdalny limit partii przez MaxBatchSize

Autoryzacja

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;

Dla poświadczeń z HashPinningRequired=True tablica skrótów jest obowiązkowa i musi zawierać dokładnie NumSignatures wartości

Wstępnie pobrane SAD jest sprawdzane pod kątem wygaśnięcia i powiązania ze skrótem oraz zużywane dokładnie jeden raz

Podpisywanie

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żdy skrót w partii musi używać tego samego algorytmu i mieć dokładną długość wynikającą z DigestAlgorithm

SignatureAlgorithm obsługuje PDF_EXTERNAL_SIGNATURE_RSA_PKCS1 i PDF_EXTERNAL_SIGNATURE_ECDSA_DER; podpisy CSC ECDSA są kodowane w DER, dlatego wynik P1363 nie jest domniemywany

Parametry

ServiceURLBazowy adres URL usługi przed /csc/<version>
APIVersionSegment wersji punktu końcowego, domyślnie v1
CredentialIDIdentyfikator poświadczenia zdefiniowany przez dostawcę
OAuthTokenToken bearer tylko do zapisu, dodawany do każdego domyślnego żądania transportowego
TimeoutMSLimit czasu żądania, domyślnie 300000 milisekund
MaxResponseBytesMaksymalny akceptowany rozmiar odpowiedzi, domyślnie 8 MiB
ClientDataOpcjonalna wartość zdefiniowana przez dostawcę, wysyłana z żądaniami podpisywania
AuthorizationPINKod PIN tylko do zapisu używany przez automatyczną autoryzację funkcji wywołania zwrotnego
AuthorizationOTPHasło jednorazowe tylko do zapisu, usuwane po autoryzacji funkcji wywołania zwrotnego
AuthorizationDescriptionOpcjonalny opis używany przez automatyczną autoryzację funkcji wywołania zwrotnego
OnTransportOpcjonalna funkcja wywołania zwrotnego transportu dla integracji mTLS, proxy, właściwej dla dostawcy lub deterministycznego testowania

Właściwości stanu

CredentialLoaded, SigningCertificateDER, CertificateChainCount, SupportedAlgorithmCount, MaxBatchSize, HashPinningRequired, LastAuthorizationExpiresAt, LastHTTPStatus i LastError udostępniają bieżący stan bez zwracania tajnych wartości OAuth, PIN, OTP ani SAD

Przykład

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;

Zachowanie przy niepowodzeniu

Metody zwracają False i ustawiają LastError, gdy nie powiedzie się walidacja konfiguracji, transportu, JSON, Base64, X.509, algorytmu, partii, aktywacji lub liczby odpowiedzi

Ścieżka zewnętrznego podpisywania skrótu niezależnie weryfikuje każdy zwrócony surowy podpis przy użyciu SigningCertificateDER przed zaakceptowaniem pliku PDF

Zobacz również

OnExternalDigestSign, SetSignProcessExternalDigestSigner, SetSignProcessDigestAlgorithm