Incremental PFX Signing Jobs

Operace sign podporuje validovaný inkrementální profil, který zachovává přesnou původní PDF revizi i každý stávající kryptografický podpis, zatímco vrací samostatně podepsaný artefakt

Výběr profilu

{"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}}

Defaultní profil pfx-unsigned-document si uchovává původní chování a přijímá zdroje bez jakýchkoli polí podpisů; nové pole vytvoří pomocí page, x1, y1, x2 a y2 a zdrojový graf obnoví, dřív než publikace

pfx-incremental-document vybere nový profil; incremental: true je ekvivalentní selektor, když je profile vynechané, a koliduje s explicitně odlišným profilem

existingField: true vyplní pojmenované prázdné pole podpisu, aniž by přidal další pole; jinak operace vytvoří nové pole a stránka a obdélník identifikují jeho widget

Default fieldName je Signature1 a přijímá 1 až 1024 UTF-8 bajtů; existingField vyžaduje inkrementální profil, odpovídající pole podpisu a chybějící či null hodnotu V

Read-only Ff bit 1 i poškozené či mimo rozsah ležící celočíselné příznaky se odmítnou, dřív než příprava; zděděné slovníky SV a Lock se rozřeší s unikátními sémantickými PDF názvy i ohraničeným traversal rodičů

Seed hodnoty a zámky polí

digestMethod vybere skutečný CMS digest SHA256, SHA384 či SHA512; default je SHA256, zatímco cades: true vybere ETSI.CAdES.detached a zahrne atribut signing-certificate-v2 navazující skutečný podepisující certifikát

reason, location a contactName jsou UTF-8 JSON řetězce zapisované jako PDF Unicode textové řetězce; vyžadované seed důvody porovnávají své Unicode hodnoty, tedy i speciální hodnotu jediné tečky vyžadující vynechaný důvod

Vyžadovaná omezení SV kontrolují skutečný handler, SubFilter CMS, podporovanou podepisovací verzi, digest, důvod, certifikační oprávnění, právní upřesnění i režim LockDocument; vyžadovaný timestamp použije transport aplikace i explicitní trust workflow popsané v Windows podepisovacích timestampech, vyžadované podepsané revokační důkazy autentizované podepisování CRL a OCSP a vyžadované pojmenované appearance skutečně generované presety podpisových appearance

Vyžadované vlastnosti SVCert validují skutečný listový certifikát PFX i zahrnutý řetězec vystavitelů, dovolené bajty certifikátů, OID politik certifikátů, bity key usage i Unicode atributy subjektového DN, dřív než podepsání

credentialSourceURL dodá provenience přihlašovacích údajů tvrzenou aplikací pro vyžadované URL SVCert; knihovna porovná deklarované URL i podporovaný URLType, aniž by ten endpoint otevřela či autentizovala transportní identitu

Zámky polí All, Include a Exclude se zapíší jako nepřímý slovník SigFieldLock i odpovídající reference FieldMDP navázaná na katalog dokumentu; názvy polí používají PDF Unicode textové řetězce a v šifrovaných dokumentech zůstávají šifrované

Podepsaná hodnota Lock P omezuje pozdější revize podle původní politiky podepsaného pole, nezávisle na jakémkoli oprávnění DocMDP; povolené druhé podpisy zachovávají přesnou předchozí revizi i CMS, zatímco uzamčené pole či změna P1 se odmítne, dřív než publikace

Vyhledávání politik dekóduje PDF name escapování přesně jednou, tedy i zděděné názvy Parent; slovníky s duplicitními sémantickými názvy i neplatní či cykličtí rodiče se odmítnou, dřív než publikace, zatímco platné escapované názvy si uchovají své zdrojové bajty

contentsBytes defaultuje na 16384 a přijímá 1024 až 1048576; reason, location a contactName naplní nový slovník podpisu

Certifikace a právní upřesnění

certificationPermission defaultuje na 0 u schvalovacího podepisování; 1, 2 či 3 vytvoří certifikační podpis s vyžádaným oprávněním DocMDP, naváže Catalog Perms DocMDP na skutečný nepřímý slovník podpisu a zachová jakoukoli nezávislou transformaci FieldMDP

Certifikace musí být prvním podpisem a dokument může obsahovat jen jeden certifikační podpis; poškozená katalogová oprávnění, nerozřešené reference i hodnoty DocMDP bez vazby na původní podepsané pole se odmítnou

legalAttestation je volitelný Unicode řetězec pro certifikační podepisování a zapisuje se do Catalog Legal Attestation; vyžadovaný seznam SV LegalAttestation musí obsahovat vybraný text, zatímco prázdný vyžadovaný seznam vyžaduje vynechání

Stávající certifikační podpisy P2 a P3 dovolí pozdější schvalovací podepsání, když to dovolí zámky polí i politika revizí; podpisy P1 i uzamčená pole změny odmítnou, dřív než binární publikace

Zdrojový kontrakt

Inkrementální job profil přijme držený původní zdroj, tedy i podporovaná šifrovaná PDF, a nezměněný načtený objektový graf; heslo pro šifrovaný zdroj dodávejte v operaci sign, odděleně od pfxPassword

Zdrojové heslo autentizuje nezávislý surový snapshot, inicializuje původní šifrovací kontext a znovu otevře podepsaného kandidáta; výsledná inkrementální revize zachová původní ciphertext předponu, bezpečnostní slovník i permanentní ID dokumentu

Dešifrování může interně označit objekty za zašpiněné či odstranit bezpečnostní slovník z dešifrovaného grafu; operace porovná ty stavy i ohraničené objektové serializace proti čerstvě autentizované zdrojové základně, zatímco skutečné grafové změny i všechny flushnuté objektové stavy odmítne

U user hesla vyžaduje stávající pole podpisu oprávnění k vyplňování formulářů či anotacím a nový widget podpisu oprávnění k anotacím; autentizované owner heslo autorizuje kteroukoli operaci, podléhajíc stávajícím politikám podpisů

SaveLoadedDocumentToStream může změnit serializační stav; když podepisujete uložený či editovaný graf, uložené bajty znovu načtěte do nového handlu a podepište tu revizi

Původní úložiště zdroje držte stabilní po celou životnost handlu; file joby při načítání i přípravě svého snapshotu odepřou sdílení zápisu

Původní handle si uchová počty polí, identitu stávajících polí, hodnoty formulářů, zdrojové bajty i předchozí nastavení spuštění a dekódování; každý úspěch podepsání vrací documentUpdated: false a selhání podepsání ponechá handle dostupný pro dotazování, ukládání či pozdější platnou žádost

File joby odmítnou výstupní cestu rovnající se vstupnímu souboru či jeho alias, tedy i hard linky; přímé stream API odmítnou rozpoznatelné aliasy zdrojového streamu i zdrojového souboru a volající musí navíc držet neprůhledné úložiště výstupu callbacků oddělené od vstupního úložiště

Příprava a validace

Operace zkopíruje surové zdrojové bajty do výhradně vytvořeného dočasného snapshotu, otevře nezávislý inkrementální klon, připojí placeholder přes ohraničené SaveIncrementalUpdate a vyplní detached CMS nativním stream podepisovačem PFX

PFX zůstává otevřený se zakázaným sdílením zápisu od preflightu velikosti až po podepsání; dočasné soubory použijí CREATE_NEW a odstraní se jen tehdy, když operace vlastní jejich tvorbu

Podepsaný kandidát musí obsahovat přesnou zdrojovou bajtovou předponu i očekávané počty formulářových a podpisových polí; nový podpis se musí verifikovat ve svém vybraném poli, každý dřív naplněný podpis pořád verifikovat a revizní analýza každého starého podpisu musí přijmout omezení DocMDP, FieldMDP, uživatelských práv i identity

Nenaplněná stará pole se zachovají, aniž by se počítala jako preservedSignatures; poškozené, neplatné či politiku porušující stávající podpisy způsobí odmítnutí, dřív než binární publikace

Verifikace stávajících podpisů kontroluje integritu CMS proti podepsaným bajtům i nativní politice revize; když se u nového podpisu vyžaduje timestamp, jeho odpověď samostatně validuje explicitní TSA důvěru i nakonfigurované revokační důkazy, dřív než publikace

Rozpočty a publikace

Účinný strop výstupu je min(outputBytes, memoryBytes / 8) a zahrnuje celou zdrojovou předponu, připojené objekty, xref i rezervaci podpisu; effectiveOutputLimit reportuje aplikovaný strop

Nepodepsaný kandidát i podepsaný výstup se ohraničují tím stropem samostatně, bajty PFX se ořežou na memoryBytes / 8 a rozpočty dekódování zdrojové základně, klonu i kandidáta se samostatně ořežou na memoryBytes / 8 s prahy spill souborů nejvýše 1 MiB

Toto jsou rozpočty operací a bufferů, nikoli přísná záruka RSS procesu; kryptografie, metadata objektů, revizní analýza i už načtený zdroj volajícího mohou vyžadovat dodatečnou rezidentní paměť

Kontroly zrušení i uplynulého času platí pro kopii zdroje, delta serializaci a kopii, čtení kandidáta, čtení verifikace podpisu, čtení revizní analýzy i publikaci callbackem; lepivé nativní selhání streamů si u hranice jobu uchovají svou kategorii rozpočtu či zrušení

Binární výstup se odstageuje a zvaliduje, dřív než první výstupní callback a velikost výsledkového JSON se kontroluje, dřív než binární publikace; samotný výstup callbackem není atomický, takže neúspěšný binární či výsledkový callback může zanechat bajty, které musí volající zahodit

File joby zapisují do vlastněného kandidáta ve stejném adresáři, flushnou ho, zavřou handly zdroje i výstupu a atomicky vymění odlišný cíl po úspěšné validaci; selhání zachovají existující cíl

Úspěch vrací mediaType: application/pdf, fieldName, profile, incremental, existingField, certificationPermission, revocationInfo, appearanceProfile, preservedSignatures, effectiveOutputLimit, outputBytes a documentUpdated: false

Akceptace replayem

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

Runner odhalí RAD Studio přes její registrní RootDir, přijme přepisy RADStudioRoot a PythonExecutable a při zvoleném CheckFPC použije nakonfigurovaný toolchain FPC; FPCOnly přehraje jen ty nativní cíle, zatímco OpenSSLWin32Library a OpenSSLWin64Library vyberou odpovídající runtime knihovny pro každou architekturu

Non-GUI runner kontroluje nativní API Win32 i Win64 i skutečné C ABI DLL pomocí částečných callbacků, stávajících prázdných polí, předchozích podpisů, vyžadovaných seed hodnot, skutečných CAdES SHA384 a SHA512, Unicode metadat, povolených i uzamčených druhých podpisů, skutečných vlastností certifikátu PFX, transformací zámku polí AES-128 a AES-256, restrikcí oprávnění i přihlašovacích údajů vlastníkem, špatných hesel, zašpiněných dešifrovaných grafů, přesných šifrovaných zdrojových snapshotů, zotavení šifrovaného in-place writeru, skutečných CMS fixtur DocMDP P1 a P2, rozpočtů, zrušení, selhání callbacků i znovupoužití zdroje po selháních

Nezávislé kontroly pypdf, MuPDF a OpenSSL dokážou přesné předchozí předpony i bajtové rozsahy, nezměněné šifrování i permanentní ID, prohledávatelný původní text, platné staré i nové CMS hodnoty, výjimku šifrování Contents podpisu i odmítání změněného podepsaného obsahu; independent-proof.json zaznamená bajtové rozsahy i výsledky důkazů

Související témata

Dokumentové operace, CopyLoadedSourceToStream, SaveIncrementalUpdate, EHPDFIncrementalOutputBudget