Incremental PFX imzalama işleri

Sign operation, kesin orijinal PDF revizyonunu ve her mevcut kriptografik signature'ı koruyan ve ayrı olarak imzalanmış bir artefakt döndüren doğrulanmış bir incremental profil destekler

Bir profil seçin

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

Default pfx-unsigned-document profili, orijinal davranışı korur ve signature field'sız kaynakları kabul eder; page, x1, y1, x2 ve y2 kullanarak yeni bir field oluşturur ve yayımdan önce kaynak grafiğini geri alır

pfx-incremental-document, yeni profili seçer; profile atlanmışken incremental: true eşdeğer bir selector'dur ve açıkça farklı bir profille çelişir

existingField: true, başka bir field eklemeden adlandırılmış boş signature field'ını doldurur; aksi hâlde operation yeni bir field oluşturur ve sayfa ile dikdörtgen onun widget'ını tanımlar

fieldName default'u Signature1'dır ve 1'den 1024'e UTF-8 bayt kabul eder; existingField, incremental bir profil, eşleşen bir signature field ve yok veya null bir V value gerektirir

Read-only Ff bit 1 ve bozuk veya aralık-dışı integer flag'leri hazırlıktan önce reddedilir; kalıtılan SV ve Lock dictionary'leri, eşsiz semantik PDF adları ve sınırlı parent traversal'ı ile çözümlenir

Seed value'ları ve field kilitleri

digestMethod, gerçek SHA256, SHA384 veya SHA512 CMS digest'ini seçer; SHA256 default'tur, cades: true ise ETSI.CAdES.detached seçer ve gerçek imzalayan certificate'ı bağlayan signing-certificate-v2 attribute'unu içerir

reason, location ve contactName, PDF Unicode text string'leri olarak yazılan UTF-8 JSON string'leridir; zorunlu seed reason'ları Unicode value'larını karşılaştırır — atlanmış bir reason gerektiren özel tek-nokta value'su dâhil

Zorunlu SV kısıtları, gerçek handler'ı, CMS SubFilter'ı, desteklenen imzalama version'ını, digest'i, reason'u, certification iznini, legal attestation'ı ve LockDocument modunu denetler; zorunlu bir timestamp, Windows imzalama timestamp'lerinde anlatılan uygulama transport'u ve açık trust workflow'unu kullanır; zorunlu imzalı revocation evidence, authenticated CRL ve OCSP imzalamayı kullanır ve zorunlu adlandırılmış görünümler gerçek üretilmiş signature appearance preset'lerini kullanır

Zorunlu SVCert özellikleri, gerçek PFX leaf certificate'ını ve dâhil edilen issuer zincirini, izin verilen certificate baytlarını, certificate policy OID'lerini, key usage bit'lerini ve Unicode subject DN attribute'larını imzalamadan önce doğrular

credentialSourceURL, zorunlu bir SVCert URL'i için uygulamanın öne sürdüğü credential provenance'ı sağlar; kütüphane, o endpoint'i açmadan veya transport identity'sini doğrulamadan bildirilen URL'yi ve desteklenen URLType'ı karşılaştırır

All, Include ve Exclude field kilitleri, dolaylı bir SigFieldLock dictionary olarak ve belge Catalog'una bağlı eşleşen bir FieldMDP referansıyla yazılır; field adları, PDF Unicode text string'leri kullanır ve şifreli belgelerde şifreli kalır

İmzalı bir Lock P value, sonraki revizyonları orijinal imzalı field politikasını kullanarak sınırlar — herhangi bir DocMDP izninden bağımsız; izin verilen ikinci signature'lar, kesin önceki revizyonu ve CMS'i korurken, kilitli bir field veya P1 değişikliği yayımdan önce reddedilir

Politika araması, PDF ad escape'lerini — kalıtılan Parent adları dâhil — tam olarak bir kez decode eder; duplicate semantik adlı dictionary'ler ve geçersiz veya cycle'lı parent'lar yayımdan önce reddedilirken, geçerli escape'li adlar kaynak baytlarını korur

contentsBytes default'ta 16384'tür ve 1024'ten 1048576'ya kabul eder; reason, location ve contactName, yeni signature dictionary'sini doldurur

Certification ve legal attestation'lar

certificationPermission, approval imzalama için default'ta 0'dır; 1, 2 veya 3, istenen DocMDP izniyle bir certification signature oluşturur, Catalog Perms DocMDP'yi gerçek dolaylı signature dictionary'sine bağlar ve bağımsız bir FieldMDP transform'u varsa korur

Certification ilk signature olmalıdır ve bir belge yalnızca bir certification signature içerebilir; bozuk Catalog izinleri, çözümlenmemiş referanslar ve orijinal imzalı field binding'siz DocMDP value'ları reddedilir

legalAttestation, certification imzalama için opsiyonel bir Unicode string'dir ve Catalog Legal Attestation'a yazılır; zorunlu bir SV LegalAttestation listesi seçilen metni içermelidir ve boş bir zorunlu liste, atlanmayı gerektirir

Mevcut P2 ve P3 certification signature'ları, field kilitleri ve revizyon politikası izin verdiğinde sonraki approval imzalamaya izin verir; P1 signature'ları ve kilitli field'lar, binary yayımdan önce değişiklikleri reddeder

Kaynak sözleşmesi

Incremental iş profili, tutulan bir orijinal kaynağı — desteklenen şifreli PDF'ler dâhil — ve değişmemiş bir yüklenmiş object grafını kabul eder; şifreli bir kaynak için, pfxPassword'dan ayrı olarak sign operation'ında password sağlayın

Kaynak password'ı, bağımsız bir ham snapshot'ı doğrular, orijinal encryption context'ini başlatır ve imzalı adayı yeniden açar; sonuçlanan incremental revizyon, orijinal ciphertext prefix'ini, security dictionary'yi ve kalıcı belge ID'sini korur

Decryption, object'leri dahili dirty işaretleyebilir veya şifresi çözülmüş grafikten bir security dictionary kaldırabilir; operation bu state'leri ve sınırlı object serialize etmelerini, taze doğrulanmış bir kaynak baseline'ına karşı karşılaştırırken gerçek graf değişikliklerini ve tüm flush edilmiş object state'lerini reddeder

Bir user password'ı için, mevcut bir signature field form-fill veya anotasyon izni gerektirir ve yeni bir signature widget anotasyon izni gerektirir; authenticated bir owner password, mevcut signature politikalarına tabi olarak her iki operation'ı da yetkilendirir

SaveLoadedDocumentToStream, serialize etme state'ini değiştirebilir; kaydedilmiş veya düzenlenmiş bir grafı imzalarken, kaydedilmiş baytları yeni bir handle'a yeniden yükleyin ve o revizyonu imzalayın

Orijinal kaynak depolamasını, handle lifetime'ı için kararlı tutun; dosya işleri, snapshot'larını yüklerken ve hazırlarken write sharing'i reddeder

Orijinal handle, kendi field sayılarını, mevcut field identity'sini, form value'larını, kaynak baytlarını ve önceki launch ve decode ayarlarını tutar; her imzalama başarısı documentUpdated: false döndürür ve imzalama başarısızlıkları, handle'ı sorgulama, kaydetme veya sonraki geçerli bir istek için kullanılabilir bırakır

Dosya işleri, hard link'ler dâhil, input dosyasına eşit veya alias olan bir output path reddeder; doğrudan stream API'leri, tanınabilir kaynak-stream ve kaynak-dosya alias'larını reddeder ve çağıranlar ayrıca opak callback output depolamasını input depolamasından ayrı tutmalıdır

Hazırlık ve doğrulama

Operation, ham kaynak baytlarını münhasıran oluşturulmuş geçici bir snapshot'a kopyalar, bağımsız bir incremental klon açar, placeholder'ı sınırlı SaveIncrementalUpdate ile ekler ve ayrık CMS'i native PFX stream signer'ı üzerinden doldurur

PFX, boyut preflight'tan imzalamaya kadar write sharing reddedilmiş açık kalır; geçici dosyalar CREATE_NEW kullanır ve yalnızca operation onların oluşturulmasına sahipken kaldırılır

İmzalı aday, kesin kaynak bayt prefix'ini ve beklenen form ve signature field sayılarını içermelidir; yeni signature kendi seçili field'ında doğrulanmalıdır, önceden doldurulmuş her signature hâlâ doğrulanmalıdır ve her eski signature'ın revizyon analizi DocMDP'yi, FieldMDP'yi, usage-rights'i ve identity kısıtlarını kabul etmelidir

Doldurulmamış eski field'lar, preservedSignatures olarak sayılmadan korunur; bozuk, geçersiz veya politikaya-aykırı mevcut signature'lar, binary yayımdan önce reddetmeye yol açar

Mevcut signature verification, CMS integrity'sini imzalı baytlara ve native revizyon politikasına karşı denetler; yeni signature için timestamp istendiğinde, onun response'u yayımdan önce açık TSA trust'ini ve yapılandırılmış revocation evidence'ını ayrı olarak doğrular

Bütçeler ve yayımlama

Etkin output sınırı min(outputBytes, memoryBytes / 8)'dir ve tüm kaynak prefix'ini, eklenmiş object'leri, xref'i ve signature rezervini içerir; effectiveOutputLimit, uygulanan sınırı raporlar

İmzasız aday ve imzalı output, o sınırla ayrı ayrı sınırlanır; PFX baytları memoryBytes / 8 ile sınırlanır ve kaynak-baseline, klon ve aday decode bütçeleri, 1 MiB'den yüksek-olmayan dosya spilling eşikleriyle ayrı ayrı memoryBytes / 8 ile sınırlanır

Bunlar, katı bir process RSS garantisi değil, operation ve buffer bütçeleridir; kripto, object metadata'ısı, revizyon analizi ve çağıranın zaten-yüklenmiş kaynağı ek resident bellek gerektirebilir

Cancellation ve geçen-süre denetimleri, kaynak kopyalamaya, delta serialize etmeye ve kopyalamaya, aday okumalarına, signature verification okumalarına, revizyon analizi okumalarına ve callback yayımına uygulanır; sticky native stream başarısızlıkları, kendi bütçe veya cancellation kategorilerini iş sınırında korur

Binary output, ilk output callback'inden önce stage edilir ve doğrulanır ve result JSON boyutu, binary yayımdan önce denetlenir; callback output'unun kendisi atomik değildir — başarısız bir binary veya result callback, çağıranın atması gereken baytlar bırakabilir

Dosya işleri, owned bir same-directory adayına yazar, onu flush eder, kaynak ve output handle'larını kapatır ve doğrulama başarılı olduktan sonra ayrık bir hedefi atomik değiştirir; başarısızlıklar mevcut hedefi korur

Başarı, mediaType: application/pdf, fieldName, profile, incremental, existingField, certificationPermission, revocationInfo, appearanceProfile, preservedSignatures, effectiveOutputLimit, outputBytes ve documentUpdated: false döndürür

Replay kabulü

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

Runner, RAD Studio'yu kendi registry RootDir'iyle keşfeder, RADStudioRoot ve PythonExecutable override'larını kabul eder ve CheckFPC seçildiğinde yapılandırılmış FPC toolchain'ini kullanır; FPCOnly yalnızca o native hedefleri replay ederken, OpenSSLWin32Library ve OpenSSLWin64Library her architektür için eşleşen runtime kütüphanelerini seçer

Non-GUI runner, hem Win32 hem Win64 native API'lerini ve gerçek C ABI DLL'lerini denetler; kısmi callback'ler, mevcut boş field'lar, önceki signature'lar, zorunlu seed value'ları, gerçek SHA384 ve SHA512 CAdES, Unicode metadata, izin verilen ve kilitli ikinci signature'lar, gerçek PFX certificate özellikleri, AES-128 ve AES-256 field kilit transform'ları, izin kısıtları ve owner credential'ları, yanlış password'lar, dirty decrypted grafikler, kesin şifreli kaynak snapshot'ları, şifreli in-place writer recovery'si, gerçek DocMDP P1 ve P2 CMS fixture'ları, bütçeler, cancellation, callback başarısızlıkları ve başarısızlıklardan sonra kaynak yeniden kullanımı kullanarak

Bağımsız pypdf, MuPDF ve OpenSSL denetimleri, kesin önceki prefix'leri ve byte range'leri, değişmemiş encryption'ı ve kalıcı ID'leri, aranabilir orijinal metni, geçerli eski ve yeni CMS value'larını, signature Contents encryption istisnasını ve değiştirilmiş imzalı içeriğin reddini kanıtlar; independent-proof.json, byte range'leri ve kanıt sonuçlarını kaydeder

İlgili konular

Belge operation'ları, CopyLoadedSourceToStream, SaveIncrementalUpdate, EHPDFIncrementalOutputBudget