PDFium Delphi Component Docs

Unidade FPdfCryptoMac

Unidade: FPdfCryptoMac
Back-end do Keychain do macOS para assinatura PAdES, além de verificação de CMS e avaliação de confiança de certificados por meio do Security.framework

Sintaxe

EPdfKeychainError = class(Exception);

TPdfKeychainSignerProvider = class(TInterfacedObject, IPadesSignerProvider)
  function BackendName: string;
  function Resolve(const Options: TPadesSignerOptions): TPadesResolvedSigner;
end;

TPdfKeychainCmsVerifier = class(TInterfacedObject, IPdfCmsVerifier)
  function BackendName: string;
  function VerifyDetached(const CmsDer: TBytes; Segment1: Pointer; Segment1Length: Cardinal; Segment2: Pointer; Segment2Length: Cardinal; const Options: TPdfCmsVerifyOptions): TPdfCmsVerifyResult;
  function VerifyAttached(const CmsDer: TBytes; const Options: TPdfCmsVerifyOptions): TPdfCmsVerifyResult;
end;

function KeychainAvailable: Boolean;
function KeychainMissingSymbols: string;
function KeychainVerificationAvailable: Boolean;
function ConfigureKeychainSignerProvider: IPadesSignerProvider;
function ConfigureKeychainCmsVerifier: IPdfCmsVerifier;

Descrição

FPdfCryptoMac é o back-end criptográfico do macOS consumido por FPdfCrypto e FPdfCms, e cobre as duas metades da integração com a plataforma: assinatura PAdES por meio de uma identidade do Keychain e verificação de CMS por meio do decodificador de CMS do sistema e da avaliação de confiança. Security.framework e CoreFoundation são carregados e resolvidos por nome em tempo de execução, e não vinculados, de modo que a unidade compila em qualquer alvo e relata em tempo de execução se os serviços da plataforma estão realmente acessíveis

No lado da assinatura, TPdfKeychainSignerProvider implementa IPadesSignerProvider. Seu método Resolve enumera as identidades do Keychain, seleciona aquela cujo certificado corresponde à impressão digital SHA-1 carregada em TPadesSignerOptions, lê o DER do certificado e a referência à chave privada correspondente, e retorna um TPadesResolvedSigner cujo ICmsSigner assina os CMS signed attributes por meio do Security.framework, de modo que a chave privada nunca deixa o Keychain. O esquema de preenchimento solicitado pelas opções é reconciliado com o que a chave realmente suporta, e os parâmetros RSASSA-PSS são os mesmos que os outros back-ends emitem, de modo que um documento assinado no macOS carrega um AlgorithmIdentifier idêntico. ConfigureKeychainSignerProvider constrói o provedor e o instala como o back-end de assinatura PAdES ativo, retornando a interface registrada

No lado da verificação, TPdfKeychainCmsVerifier implementa IPdfCmsVerifier sobre o CMSDecoder e o SecTrust. VerifyDetached junta as duas faixas de bytes assinadas dos dois lados da lacuna de assinatura no conteúdo destacado que o decodificador espera, e então verifica o valor CMS contra ele; VerifyAttached verifica um valor CMS que carrega o próprio conteúdo, que é o que um token de timestamp precisa. Ambos retornam um TPdfCmsVerifyResult que relata separadamente o status da assinatura, o status de confiança e o status de revogação, opcionalmente coletando o certificado do assinante e a cadeia avaliada, e ambos respeitam as configurações de revogação, recuperação online e checkpoints em TPdfCmsVerifyOptions. ConfigureKeychainCmsVerifier constrói o verificador e o instala como o back-end de verificação de CMS ativo

A validade da assinatura e a confiança no certificado permanecem resultados independentes, de modo que uma assinatura autêntica sob uma cadeia não confiável ou autoassinada continua distinguível de conteúdo adulterado

Para um token RFC 3161 anexado, a análise DER delimitada fornece os octetos TSTInfo encapsulados originais ao decodificador nativo sem alterar seu content type nem seus atributos assinados. A passagem comum de verificação de CMS exclui atributos não assinados de sua entrada nativa, de modo que o processamento automático de timestamp não possa substituir a integridade ou o resultado de cadeia da própria assinatura externa. Esta passagem não valida contrasassinaturas nem outros atributos não assinados; ValidatePadesTrust verifica separadamente cada token de timestamp original, a impressão de mensagem, o papel do certificado TSA, a confiança e o resultado de revogação

Passe um caminho de arquivo de Keychain para TPdfKeychainSignerProvider.Create para restringir a busca de identidade a esse Keychain por meio de uma lista de busca local à consulta, depois registre o provedor com ConfigurePadesSignerProvider. Um caminho vazio usa o escopo de busca do usuário atual. Abrir ou pesquisar o Keychain selecionado não modifica o Keychain padrão, a lista de busca do usuário nem a configuração de confiança do sistema; caminhos inválidos e símbolos de busca com escopo indisponíveis disparam EPdfKeychainError

Resolve também exporta a cadeia de emissores disponível do certificado de assinatura por meio de uma busca de certificado offline local à consulta e de construção nativa de cadeia. Os certificados candidatos são limitados a 4096 itens, 1 MiB cada e 16 MiB no total; a cadeia construída é limitada a 32 certificados, incluindo a folha, que é retornada separadamente de ChainCertDer. Exportar material de certificado não estabelece confiança nem instala uma âncora de confiança, e um emissor indisponível não pode ser sintetizado

Funções de assinatura

FunçãoDescrição
KeychainAvailableRetorna True quando Security.framework e CoreFoundation foram carregados e todos os símbolos necessários para a assinatura foram resolvidos
KeychainMissingSymbolsRetorna os nomes que não puderam ser resolvidos, separados por espaços, ou uma string vazia quando tudo foi vinculado
ConfigureKeychainSignerProviderConstrói um TPdfKeychainSignerProvider, instala-o como o back-end de assinatura PAdES e o retorna como IPadesSignerProvider
TPdfKeychainSignerProvider.CreateSeleciona um arquivo de Keychain existente opcional para busca de identidade com escopo, rejeitando caracteres NUL embutidos e caminhos com mais de 4096 unidades de código de string
TPdfKeychainSignerProvider.BackendNameRetorna o identificador de back-end relatado para o provedor de assinatura
TPdfKeychainSignerProvider.ResolveCorresponde TPadesSignerOptions às identidades do Keychain e retorna um TPadesResolvedSigner contendo o assinante, o DER do certificado e a cadeia

Funções de verificação

FunçãoDescrição
KeychainVerificationAvailableRetorna True quando os símbolos do decodificador de CMS, da política de confiança e da avaliação de confiança foram resolvidos
ConfigureKeychainCmsVerifierConstrói um TPdfKeychainCmsVerifier, instala-o como o back-end de verificação de CMS e o retorna como IPdfCmsVerifier
ConfigureKeychainTrustAnchorsClona âncoras DER explícitas para cada avaliação de confiança posterior, complementando as âncoras do sistema sem modificar o Keychain; os limites são 64 certificados, 4 MiB cada e 16 MiB no total, e um array vazio as limpa
ConfigureKeychainOcspResponsesClona evidência OCSP DER explícita para avaliação nativa do Security.framework; os limites são 8 respostas, 1 MiB cada e 4 MiB no total, e um array vazio as limpa
TPdfKeychainCmsVerifier.BackendNameRetorna o identificador de back-end relatado para o back-end de verificação
TPdfKeychainCmsVerifier.VerifyDetachedVerifica um valor CMS destacado contra os dois segmentos de conteúdo de propriedade do chamador descritos por Segment1, Segment1Length, Segment2 e Segment2Length, usando as TPdfCmsVerifyOptions fornecidas
TPdfKeychainCmsVerifier.VerifyAttachedVerifica um valor CMS anexado que carrega o próprio conteúdo assinado, usando as TPdfCmsVerifyOptions fornecidas

Tipos

TipoMembros e finalidade
EPdfKeychainErrorExceção lançada quando o Security.framework não está disponível, quando nenhuma identidade do Keychain corresponde ao assinante solicitado ou quando a chamada de assinatura da plataforma falha
TPdfKeychainSignerProviderBack-end de assinatura PAdES que implementa IPadesSignerProvider, com BackendName e Resolve
TPdfKeychainCmsVerifierBack-end de verificação de CMS que implementa IPdfCmsVerifier, com BackendName, VerifyDetached e VerifyAttached

Observações

Consulte também

FPdfCryptoWin, FPdfCrypto, FPdfCms, FPdfTrustedList, FPdfMac