PDFium Delphi Component Docs

Unidade FPdfPkcs11

Unidade: FPdfPkcs11
Back-end de assinatura PKCS#11 para PAdES, que resolve um certificado de assinante e sua chave privada a partir de um token e produz a assinatura SignerInfo dentro do token

Sintaxe

EPdfPkcs11Error = class(Exception);

TPdfPkcs11Options = record
  ModulePath: string;
  SlotId: UInt64;
  UseSpecificSlot: Boolean;
  Pin: string;
  CertificateLabel: string;
  class function Default: TPdfPkcs11Options; static;
end;

TPdfPkcs11SignerProvider = class(TInterfacedObject, IPadesSignerProvider,
  IPdfPkcs11SignerProvider)
  constructor Create(const Options: TPdfPkcs11Options);
  destructor Destroy; override;
  function BackendName: string;
  function Resolve(const Options: TPadesSignerOptions): TPadesResolvedSigner;
  function EnumerateSlots: TPdfPkcs11Slots;
  function EnumerateCertificates(SlotID: UInt64): TPdfPkcs11Certificates;
  procedure CloseProtectedSessions;
end;

function Pkcs11ModuleAvailable(const ModulePath: string): Boolean;
function Pkcs11ModuleVersion(const ModulePath: string): string;
function Pkcs11AbiLayout: string;
function ConfigurePkcs11SignerProvider(
  const Options: TPdfPkcs11Options): IPdfPkcs11SignerProvider;

Descrição

FPdfPkcs11 é o back-end de assinatura PAdES portátil e a contraparte do back-end CNG do Windows. Ele resolve um certificado de assinante e sua chave privada a partir de um token PKCS#11 e, em seguida, retorna um TPadesResolvedSigner cujo ICmsSigner produz a assinatura SignerInfo por meio do token, de modo que a chave nunca o deixa

O módulo é carregado em tempo de execução por caminho — opensc-pkcs11.so, libsofthsm2.so, uma DLL do fornecedor — de modo que nada é ligado em tempo de compilação e um módulo ausente é relatado em vez de ser fatal. Apenas C_GetFunctionList é resolvido pelo nome; todos os outros pontos de entrada saem da tabela de funções que ele retorna, que é como o padrão pretende que um módulo seja acessado

ConfigurePkcs11SignerProvider constrói um TPdfPkcs11SignerProvider a partir de um valor TPdfPkcs11Options e o instala como o back-end de assinantes PAdES ativo, retornando a interface IPdfPkcs11SignerProvider que também carrega os métodos de enumeração de tokens

Pkcs11ModuleAvailable e Pkcs11ModuleVersion relatam se um determinado módulo carrega e expõe uma tabela de funções utilizável, de modo que o aplicativo possa decidir na inicialização se a assinatura por token é possível nesta máquina. Os módulos carregados são armazenados em cache por caminho, porque o padrão permite apenas uma inicialização por processo por módulo

Resolve seleciona o certificado por TPadesSignerOptions.CertificateThumbprint quando um é fornecido e por CertificateLabel caso contrário, e então localiza o objeto de chave privada que carrega o mesmo identificador de token do certificado. O algoritmo da chave do certificado decide a família de algoritmos: uma chave EC assina com ECDSA e sua assinatura bruta é recodificada como a SEQUENCE DER que o CMS espera, enquanto uma chave RSA segue o esquema de preenchimento solicitado

EnumerateSlots e EnumerateCertificates servem a interfaces de usuário de seleção, permitindo que o aplicativo liste os slots que um módulo relata e os certificados que um slot escolhido contém antes de qualquer opção de assinatura ser fixada

Funções

FunçãoDescrição
Pkcs11ModuleAvailableRetorna True quando o módulo no caminho indicado carrega e expõe uma tabela de funções utilizável
Pkcs11ModuleVersionRetorna a string de versão que o módulo relata, ou uma string vazia quando o módulo não carrega
Pkcs11AbiLayoutRetorna o layout de ABI que esta compilação resolveu, como ulong=<n> attr=<n> pss=<n> table=<n>
ConfigurePkcs11SignerProviderConstrói um provedor a partir das opções fornecidas, instala-o como o back-end de assinantes PAdES e o retorna como IPdfPkcs11SignerProvider

Tipos

TipoFinalidade
EPdfPkcs11ErrorExceção lançada quando nenhum caminho de módulo está configurado, o módulo não pode ser carregado, uma chamada ao token falha ou nenhum certificado ou chave privada correspondente é encontrado
TPdfPkcs11OptionsRegistro que nomeia o módulo, o slot, o PIN e o certificado com os quais o provedor trabalha
TPdfPkcs11SignerProviderClasse de provedor que implementa IPadesSignerProvider e IPdfPkcs11SignerProvider sobre um módulo PKCS#11

Campos de TPdfPkcs11Options

CampoDescrição
ModulePathCaminho para o módulo PKCS#11; obrigatório, porque qual módulo atende a um token é uma decisão de implantação e não há padrão útil
SlotIdSlot de token a ser aberto, respeitado apenas quando UseSpecificSlot é True
UseSpecificSlotDeixe False para usar o primeiro slot que relatar um token presente
PinPIN do usuário; o provedor limpa sua própria cópia assim que o token a consome, e o chamador permanece responsável pelo tempo de vida da string que passar
CertificateLabelRótulo de objeto opcional do certificado com o qual assinar, usado apenas quando TPadesSignerOptions.CertificateThumbprint está vazio
DefaultFábrica estática que retorna opções com caminho de módulo vazio, slot 0, seleção automática de slot e sem PIN ou rótulo

Membros de TPdfPkcs11SignerProvider

MembroDescrição
CreateConstrói o provedor a partir de um valor TPdfPkcs11Options; o módulo em si é aberto no primeiro uso
DestroyFecha qualquer sessão de token aberta antes de a instância ser liberada
BackendNameRetorna o nome do back-end, com o nome do arquivo do módulo acrescentado quando um caminho de módulo está configurado
ResolveResolve TPadesSignerOptions em um TPadesResolvedSigner contendo o assinante do token e o DER do certificado do assinante
EnumerateSlotsRetorna todos os slots que o módulo relata como TPdfPkcs11Slots, incluindo slots sem token presente
EnumerateCertificatesRetorna os certificados contidos em um slot como TPdfPkcs11Certificates, abrindo antes uma sessão nesse slot
CloseProtectedSessionsFaz logout onde houve login e fecha a sessão aberta, liberando o token para outros consumidores

Observações

Consulte também

FPdfCrypto, FPdfCryptoWin, FPdfCms