Validação da política de assinatura PAdES

O HotPDF cria e valida o atributo assinado CMS explícito signature-policy-identifier usado por assinaturas PAdES E-EPES

Gerar uma política explícita

Defina SignaturePolicyOID e o digest do documento de política em THPDFCMSSignOptions e escolha os qualificadores estruturados opcionais

Options := HPDFCMSDefaultOptions(palExtended_E_EPES);
Options.SignaturePolicyOID := '1.2.3.4.5.1';
Options.SignaturePolicyHash := HPDFCMSDigestBytes(PolicyDocument, cmsdaSHA256);
Options.SignaturePolicyURI := 'https://policies.example/approval-v1';

SetLength(Options.SignaturePolicyQualifiers, 1);
Options.SignaturePolicyQualifiers[0].Kind := cmsqUserNotice;
Options.SignaturePolicyQualifiers[0].ExplicitText := 'Approval policy applies';

CMS := HPDFCMSBuildSignedDataEx(KeyMaterial, DocumentDigest, Options);

SignaturePolicyHashAlgOID assume SHA-256 por omissão quando está vazio, enquanto SignaturePolicyURI continua a ser um atalho de compatibilidade para um qualificador SPuri e pode ser combinado com SignaturePolicyQualifiers

O modelo de qualificadores estruturados suporta SPuri, SPUserNotice com uma referência de aviso e um texto explícito opcionais, e SPDocSpecification identificado por um OID ou URI

Defina SignaturePolicyHashIsUnknown apenas quando o signatário não conhece o hash da política; o HotPDF emite então a representação ETSI de zeros todos no comprimento de digest selecionado

Analisar e reportar

HPDFParseCMSSignature expõe o atributo através de THPDFSignatureInfo.SignaturePolicy, incluindo o identificador, o algoritmo de hash, os bytes do hash, a flag de hash desconhecido, os qualificadores e o estado de validação

Os valores de qualificadores conhecidos são descodificados em campos tipados, enquanto um qualificador não reconhecido mantém o seu OID e o valor DER em bruto para tratamento ao nível da aplicação

HPDFSignatureValidationReportToJSON serializa os mesmos dados de política e qualificadores com um estado de validação legível por máquina

Fixar uma política obrigatória

VerifyOptions := THPDFCMSVerifyOptions.Default;
VerifyOptions.RequireSignaturePolicy := True;
VerifyOptions.ExpectedSignaturePolicyOID := '1.2.3.4.5.1';
VerifyOptions.ExpectedSignaturePolicyHash := ExpectedPolicyHash;
VerifyOptions.SignaturePolicyDocument := PolicyDocument;
VerifyOptions.VerifySignaturePolicyDocumentHash := True;
VerifyOptions.RejectUnknownSignaturePolicyHash := True;

Status := HPDFVerifyCMSSignatureEx(Source, ByteRange, CMS,
  VerifyOptions, SignatureInfo);

Os campos de OID e hash esperados restringem apenas o valor correspondente, e a verificação do documento de política calcula o hash mesmo de um documento intencionalmente vazio quando VerifySignaturePolicyDocumentHash é verdadeiro

Políticas em falta, divergentes, não suportadas ou hashes desconhecidos rejeitados devolvem svSignaturePolicyMismatch e vfcSignaturePolicyMismatch com um THPDFSignaturePolicyValidationStatus preciso

As verificações de política correm antes do trabalho do fornecedor de assinatura, do caminho do certificado ou das provas, e aplicam-se apenas aos registos SignerInfo primários, pelo que a política do documento pai não restringe contrassassinaturas

Rigor e limites

O parser rejeita atributos de política duplicados, valores múltiplos, NULL de política implícita, qualificadores conhecidos malformados, valores IA5String não ASCII, Unicode inválido, comprimentos de digest conhecidos errados e tamanhos de coleção acima dos limites de implementação configurados

PAdES E-EPES exige o atributo de política explícito exatamente uma vez e proíbe a entrada /Reason do dicionário Signature do PDF quando esse atributo está presente; a camada CMS não consegue inspecionar o dicionário PDF, pelo que o fluxo de trabalho que produz o PDF tem de impor essa última restrição

Consulte Múltiplos Assinantes Primários CMS, Consistência do Algoritmo de Digest CMS e Relatórios de validação de assinaturas CMS