Inkrementelle PFX-signeringsjobs

Sign-operationen understøtter en valideret inkrementel profil, der bevarer den eksakte originale PDF-revision og hver eksisterende kryptografiske signatur, samtidig med at et separat signeret artefakt returneres

Vælg en profil

{"schemaVersion":1,"type":"sign","profile":"pfx-incremental-document",
 "pfxFile":"C:/keys/signer.pfx","pfxPassword":"password",
 "fieldName":"ApprovalTwo","existingField":true,
 "budget":{"memoryBytes":268435456,"outputBytes":134217728,
           "resultBytes":16777216,"timeMilliseconds":60000,
           "objectCount":1000000,"pageCount":1024}}

Standardprofilen pfx-unsigned-document beholder den originale adfærd og accepterer kilder uden signaturfelter; den opretter et nyt felt med page, x1, y1, x2 og y2 og gendanner kildegrafen inden publicering

pfx-incremental-document vælger den nye profil; incremental: true er en ækvivalent selektor, når profile udelades, og er i konflikt med en eksplicit anderledes profil

existingField: true udfylder det navngivne tomme signaturfelt uden at tilføje et andet felt; ellers opretter operationen et nyt felt, og page og rektangel identificerer dets widget

fieldName-standarden er Signature1 og accepterer 1 til 1024 UTF-8-bytes; existingField kræver en inkrementel profil, et matchende signaturfelt og en fraværende eller null V-værdi

Skrivebeskyttet Ff-bit 1 samt misdannede eller out of range heltalsflag afvises inden forberedelse; nedarvede SV- og Lock-dictionaries opløses med unikke semantiske PDF-navne og afgrænset parent-traversal

Seed-værdier og field locks

digestMethod vælger den faktiske SHA256-, SHA384- eller SHA512 CMS-digest; SHA256 er standarden, mens cades: true vælger ETSI.CAdES.detached og inkluderer signing-certificate-v2-attributten, der binder det faktiske signeringscertifikat

reason, location og contactName er UTF-8 JSON-strenge skrevet som PDF Unicode-tekststrenge; krævede seed-årsager sammenligner deres Unicode-værdier, inklusive den specielle enkelte prik-værdi, der kræver udeladt reason

Krævede SV-begrænsninger tjekker den faktiske handler, CMS SubFilter, understøttet signeringsversion, digest, årsag, certificeringstilladelse, juridisk attestation og LockDocument-tilstand; et krævet tidsstempel bruger applikationstransporten og eksplicit trust-workflow beskrevet i Windows signerings-tidsstempler, krævet signeret revocation-evidence bruger autentificeret CRL- og OCSP-signering, og krævede navngivne appearances bruger rigtige genererede signatur-appearance-presets

Krævede SVCert-properties validerer det faktiske PFX-bladcertifikat og inkluderet issuer-kæde, tilladte certifikat-bytes, certifikatpolitik-OID'er, key usage-bits og Unicode subject DN-attributter inden signering

credentialSourceURL leverer applikationshævdet legitimationsproveniens for en krævet SVCert-URL; biblioteket sammenligner den deklarerede URL og understøttet URLType uden at åbne det endpoint eller autentificere en transportidentitet

All-, Include- og Exclude-field locks skrives som en indirekte SigFieldLock-dictionary og en matchende FieldMDP-reference bundet til dokumentkatalogen; feltnavne bruger PDF Unicode-tekststrenge og forbliver krypteret i krypterede dokumenter

En signeret Lock P-værdi begrænser senere revisioner med den originale signede felt politik uafhængigt af DocMDP-tilladelse; tilladte andensignaturer bevarer den eksakte tidligere revision og CMS, mens et låst felt eller en P1-ændring afvises inden publicering

Politik-opløsning dekoder PDF name-escapes præcis én gang, inklusive nedarvede Parent-navne; dictionaries med duplikerede semantiske navne samt ugyldige eller cykliske parents afvises inden publicering, mens gyldige escapede navne beholder deres kilde-bytes

contentsBytes er som standard 16384 og accepterer 1024 til 1048576; reason, location og contactName udfylder den nye signature dictionary

Certificering og juridiske attestationer

certificationPermission er som standard 0 for approval-signering; 1, 2 eller 3 opretter en certificeringssignatur med den anmodede DocMDP-tilladelse, binder Catalog Perms DocMDP til den faktiske indirekte signature dictionary og beholder enhver uafhængig FieldMDP-transform

Certificering skal være den første signatur, og et dokument kan kun indeholde én certificeringssignatur; misdannede Catalog-tilladelser, uopløste referencer og DocMDP-værdier uden original signed felt-binding afvises

legalAttestation er en valgfri Unicode-streng til certificeringssignering og skrives til Catalog Legal Attestation; en krævet SV LegalAttestation-liste skal indeholde den valgte tekst, mens en tom krævet liste kræver udeladelse

Eksisterende P2- og P3-certificeringssignaturer tillader senere approval-signering, når field locks og revisionspolitik tillader det; P1-signaturer og låste felter afviser ændringer inden binær publicering

Kildekontrakt

Den inkrementelle jobprofil accepterer en tilbageholdt original kilde, inklusive understøttede krypterede PDF'er, og en umodificeret indlæst objektgraf; lever password i sign-operationen for en krypteret kilde, separat fra pfxPassword

Kilde-adgangskoden autentificerer et uafhængigt råt snapshot, initialiserer den originale krypteringskontekst og genåbner den signerede kandidat; den resulterende inkrementelle revision bevarer det originale ciphertext-præfiks, security dictionary og permanente dokument-ID

Dekryptering kan internt markere objekter dirty eller fjerne en security dictionary fra den dekrypterede graf; operationen sammenligner disse tilstande og afgrænsede objektserialiseringer mod en nyligt autentificeret kildebaseline, samtidig med at faktiske grafændringer og alle flushed objekttilstande afvises

For en user-adgangskode kræver et eksisterende signaturfelt form-fill- eller annotationstilladelse, og en ny signaturwidget kræver annotationstilladelse; en autentificeret owner-adgangskode autoriserer begge operationer under forbehold af eksisterende signaturpolitikker

SaveLoadedDocumentToStream kan ændre serialiseringstilstand; ved signering af en gemt eller redigeret graf skal du genindlæse de gemte bytes i et nyt handle og signere den revision

Hold original kilde-lager stabilt for handle-levetiden; file jobs nægter write sharing under indlæsning og forberedelse af deres snapshot

Det originale handle beholder sine feltantal, eksisterende felt-identitet, formularværdier, kilde-bytes samt tidligere launch- og decode-indstillinger; hver signerings-succes returnerer documentUpdated: false, og signeringsfejl efterlader handle tilgængeligt til forespørgsel, gemning eller en senere gyldig anmodning

File jobs afviser en outputsti, der er lig med eller aliaserer inputfilen, inklusive hard links; direkte stream-API'er afviser genkendelige kildestream- og kildefil-aliasser, og kaldere skal også holde opake callback-outputlager adskilt fra inputlager

Forberedelse og validering

Operationen kopierer rå kilde-bytes til et eksklusivt oprettet midlertidigt snapshot, åbner en uafhængig inkrementel klon, tilføjer placeholderen gennem afgrænset SaveIncrementalUpdate og udfylder den detached CMS gennem den native PFX stream-signer

PFX'en forbliver åben med write sharing nægtet fra størrelses-preflight til signering; midlertidige filer bruger CREATE_NEW og fjernes kun, når operationen ejer deres oprettelse

Den signerede kandidat skal indeholde det eksakte kilde-byte-præfiks og forventede formular- og signaturfelt-antal; den nye signatur skal verificeres i sit valgte felt, hver tidligere udfyldte signatur skal stadig verificeres, og hver gamle signaturs revisionsanalyse skal acceptere DocMDP-, FieldMDP-, usage-rights- og identitetsbegrænsninger

Uufyldte gamle felter beholdes uden at tælles som preservedSignatures; misdannede, ugyldige eller politikkrænkende eksisterende signaturer forårsager afvisning inden binær publicering

Eksisterende signaturverifikation tjekker CMS-integritet mod signerede bytes og native revisionspolitik; når timestamp anmodes for den nye signatur, validerer dets respons separat eksplicit TSA-trust og konfigureret revocation-evidence inden publicering

Budgetter og publicering

Den effektive output-grænse er min(outputBytes, memoryBytes / 8) og inkluderer hele kildepræfikset, tilføjede objekter, xref og signaturreservation; effectiveOutputLimit rapporterer den anvendte grænse

Den usignerede kandidat og signerede output er separat afgrænsede af den grænse, PFX-bytes er begrænset til memoryBytes / 8, og kildebaseline-, klon- og kandidat-dekodebudgetter er separat begrænset til memoryBytes / 8 med file spilling-tærskler på højst 1 MiB

Disse er operations- og bufferbudgetter snarere end en streng proces-RSS-garanti; krypto, objektmetadata, revisionsanalyse og kalderens allerede indlæste kilde kan kræve yderligere resident hukommelse

Cancellation og forløbet tid-tjek gælder kildekopi, delta-serialisering og -kopi, kandidatlæsninger, signaturverifikationslæsninger, revisionsanalyselæsninger og callback-publicering; klæbende native stream-fejl beholder deres budget- eller cancellation-kategori ved jobgrænsen

Binært output stagges og valideres før den første output-callback, og resultat-JSON-størrelsen tjekkes inden binær publicering; selve callback-outputtet er ikke atomisk, så en mislykket binær eller resultat-callback kan efterlade bytes, som kalderen skal kassere

File jobs skriver til en ejet samme-mappe-kandidat, flusher den, lukker kilde- og output-handles og erstatter atomisk et distinkt target efter succesfuld validering; fejl bevarer en eksisterende destination

Succes returnerer mediaType: application/pdf, fieldName, profile, incremental, existingField, certificationPermission, revocationInfo, appearanceProfile, preservedSignatures, effectiveOutputLimit, outputBytes og documentUpdated: false

Replay-accept

$env:HOTPDF_SUPPRESS_AUTO_LAUNCH = '1'
./Tests/CABI/Run-IncrementalSigningAcceptance.ps1 -BuildDLL -CheckFPC

Runneren opdager RAD Studio gennem dets registry RootDir, accepterer RADStudioRoot- og PythonExecutable-overrides og bruger den konfigurerede FPC-toolchain, når CheckFPC er valgt; FPCOnly afspiller kun de native mål, mens OpenSSLWin32Library og OpenSSLWin64Library vælger matchende runtime-biblioteker pr. arkitektur

Den ikke-GUI-runner tjekker både Win32- og Win64-native API'er og rigtige C ABI-DLL'er med delvise callbacks, eksisterende tomme felter, tidligere signaturer, krævede seed-værdier, rigtige SHA384- og SHA512-CAdES, Unicode-metadata, tilladte og låste andensignaturer, faktiske PFX-certifikat-properties, AES-128- og AES-256-field lock-transformer, tilladelsesbegrænsninger og owner-legitimation, forkerte adgangskoder, dirty dekrypterede grafer, eksakte krypterede kilde-snapshots, krypteret in-place writer-genopretning, rigtige DocMDP P1- og P2-CMS-fixtures, budgetter, cancellation, callback-fejl og kildegenbrug efter fejl

Uafhængige pypdf-, MuPDF- og OpenSSL-tjek beviser eksakte tidligere præfikser og byte-intervaller, uændret kryptering og permanente ID'er, søgbar original tekst, gyldige gamle og nye CMS-værdier, signature Contents krypteringsundtagelse samt afvisning af ændret signeret indhold; independent-proof.json registrerer byte-intervallerne og bevisresultaterne

Relaterede emner

Dokumentoperationer, CopyLoadedSourceToStream, SaveIncrementalUpdate, EHPDFIncrementalOutputBudget