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