Validação de 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 depois escolha 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 como padrão quando vazio, enquanto SignaturePolicyURI permanece um atalho de compatibilidade para um único qualificador SPuri e pode ser combinado com SignaturePolicyQualifiers

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

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

Analisar e relatar

HPDFParseCMSSignature expõe o atributo por meio de THPDFSignatureInfo.SignaturePolicy, incluindo seu identificador, algoritmo de hash, bytes do hash, sinalizador de hash desconhecido, qualificadores e status de validação

Valores de qualificadores conhecidos são decodificados em campos tipados, enquanto um qualificador não reconhecido retém seu OID e seu valor DER bruto para tratamento no nível da aplicação

HPDFSignatureValidationReportToJSON serializa os mesmos dados de política e qualificador com um status 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 ausentes, divergentes, não suportadas ou desconhecidas rejeitadas retornam svSignaturePolicyMismatch e vfcSignaturePolicyMismatch com um THPDFSignaturePolicyValidationStatus preciso

As verificações de política executam antes do trabalho de provedor de assinatura, caminho de certificado ou evidência, e se aplicam apenas a registros SignerInfo primários, de modo que a política do documento pai não restringe contrassassinaturas

Rigor e limites

O analisador rejeita atributos de política duplicados, múltiplos valores, NULL de política implícita, qualificadores conhecidos malformados, valores IA5String não ASCII, Unicode inválido, comprimentos errados de digest conhecidos 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 PDF Signature Dictionary quando esse atributo está presente; a camada CMS não consegue inspecionar o dicionário PDF, então o fluxo de trabalho que produz o PDF precisa impor essa restrição final

Veja CMS multiple primary signers, CMS digest-algorithm consistency e CMS validation reports