TPDFlibCSCClient

보안 및 서명

설명

Cloud Signature Consortium 자격 증명, 권한 부여 및 다이제스트 서명 엔드포인트를 위한 동기 클라이언트를 제공합니다

클라이언트는 credentials/info에서 서명 인증서와 지원되는 알고리즘 OID를 가져오고, credentials/authorize에서 서명 활성화 데이터를 얻은 다음, 이미 계산된 하나 이상의 다이제스트를 signatures/signHash에 제출합니다

SignDigest는 TPDFlibExternalDigestSignEvent를 구현하며 TPDFlib.OnExternalDigestSign에 직접 할당할 수 있어 PDF ByteRange 생성, CMS 인증 특성, 자리 표시자 크기 지정 및 반환 서명 검증을 라이브러리 내부에 유지함

유닛

PDFlibCSC

구성

Constructor TPDFlibCSCClient.Create;
Destructor TPDFlibCSCClient.Destroy;

자격 증명 검색

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가 성공해야 함

서명 인증서는 SigningCertificateDER를 통해, 추가 인증서는 CertificateChainCount 및 GetCertificateChainDER를 통해, 원격 배치 상한은 MaxBatchSize를 통해 제공됩니다

권한 부여

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;

HashPinningRequired=True인 자격 증명에는 다이제스트 배열이 필수이며 정확히 NumSignatures개의 값을 포함해야 합니다

미리 가져온 SAD의 만료와 해시 바인딩을 검사하고 정확히 한 번만 사용합니다

서명

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;

배치의 모든 다이제스트는 같은 알고리즘을 사용해야 하며 DigestAlgorithm이 의미하는 정확한 길이를 가져야 합니다

SignatureAlgorithm은 PDF_EXTERNAL_SIGNATURE_RSA_PKCS1 및 PDF_EXTERNAL_SIGNATURE_ECDSA_DER을 지원합니다 CSC ECDSA 서명은 DER로 인코딩되므로 P1363 출력으로 추론하지 않습니다

매개변수

ServiceURL/csc/<version> 앞의 기본 서비스 URL
APIVersion엔드포인트 버전 세그먼트이며 기본값은 v1
CredentialID공급업체 정의 자격 증명 식별자
OAuthToken모든 기본 전송 요청에 추가되는 쓰기 전용 bearer 토큰
TimeoutMS요청 시간 제한이며 기본값은 300000밀리초입니다
MaxResponseBytes허용되는 최대 응답 크기, 기본값 8 MiB
ClientData서명 요청과 함께 전송되는 선택적 공급업체 정의 값
AuthorizationPIN자동 콜백 권한 부여에 사용하는 쓰기 전용 PIN
AuthorizationOTP콜백 인증 후 지워지는 쓰기 전용 일회용 암호
AuthorizationDescription자동 콜백 권한 부여에 사용하는 선택적 설명
OnTransportmTLS, 프록시, 공급업체별 통합 또는 결정론적 테스트 통합을 위한 선택적 전송 콜백

상태 속성

CredentialLoaded, SigningCertificateDER, CertificateChainCount, SupportedAlgorithmCount, MaxBatchSize, HashPinningRequired, LastAuthorizationExpiresAt, LastHTTPStatus 및 LastError는 OAuth, PIN, OTP 또는 SAD 비밀 정보를 반환하지 않고 현재 상태를 노출합니다

예제

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;

실패 동작

구성, 전송, JSON, Base64, X.509, 알고리즘, 일괄 처리, 활성화 또는 응답 수 검증에 실패하면 메서드는 False를 반환하고 LastError를 설정함

외부 다이제스트 서명 경로는 반환된 각 원시 서명을 PDF에 수락하기 전에 SigningCertificateDER에 대해 독립적으로 검증함

참고 항목

OnExternalDigestSign, SetSignProcessExternalDigestSigner, SetSignProcessDigestAlgorithm