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