Pro edisistabilitas: Eksperimental
Status kapabilitas-preview C2PA
Sekilas
Bagian berjudul “Sekilas”Status kapabilitas-preview. Tidak pernah GA. Halaman ini menyatakan apa yang dilakukan permukaan C2PA hari ini sebagai preview. Ini bukan klaim konformitas, bukan sertifikasi, dan bukan pernyataan bahwa NextPDF menghasilkan berkas yang ditandatangani-C2PA. Permukaan ini adalah preview dan tidak pernah dideskripsikan sebagai tersedia umum.
NextPDF Pro mengekspos permukaan preview Content Credentials (C2PA) melalui
C2paCapabilityStatus. Halaman ini adalah batas yang jujur untuk permukaan
tersebut: apa yang selalu tersedia, apa yang tetap di balik flag draf opt-in, dan
mengapa tidak ada klaim status-akhir yang dibuat.
Dua lapisan: sambungan stabil vs. sintesis ber-flag
Bagian berjudul “Dua lapisan: sambungan stabil vs. sintesis ber-flag”Permukaan ini memiliki dua lapisan yang terpisah jelas, dan perbedaannya adalah inti dari batas tersebut:
- Selalu tersedia — sambungan stabil.
ManifestStoredan antarmukaC2paManifestEmbedderadalah sambungan yang beku dan netral-vendor. Keduanya dapat membawa Manifest Store dua arah:embed()menulis byte sebuah Store yang dipasok pemanggil ke dalam PDF, danextract()mengurai sebuah Store kembali keluar (mengembalikannullsaat tidak ada). Sambungan ini tidak melakukan sintesis claim — ia tidak pernah merakit assertion atau claim sendiri; ia memindahkanManifestStoreopak yang sudah dipegang pemanggil. - Di balik flag opt-in — sintesis claim. Membangun sebuah Manifest Store
yang sesungguhnya (merakit claim dan assertion ingredient-hash) hanya ada di
ExperimentalC2paEmbedder, digerbangi di balik flag env default-mati. Inilah bagian yang berbentuk-draf dan dapat-berubah-tanpa-pemberitahuan.
Jadi pernyataan presisnya adalah: ekstraksi dan pembawaan-byte selalu dapat dijangkau; sintesis isi manifest dapat dijangkau hanya saat flag preview diaktifkan secara eksplisit.
Mengapa ia bekerja seperti ini
Bagian berjudul “Mengapa ia bekerja seperti ini”Keputusan inti memisahkan sambungan transport yang stabil dari jalur sintesis
yang volatil, bukan satu embedder yang melakukan segalanya. Profil C2PA-PDF masih
dimiliki oleh kelompok kerja eksternal dan belum beku. Box Claim Signature-nya
(c2cs, sebuah struktur COSE_Sign1) adalah bagian yang paling mungkin bergeser.
Jadi sintesis menghilangkan box itu dan berada di balik flag default-mati,
sementara extract-and-carry tidak bergantung pada field yang belum-beku dan tetap
dapat dijangkau oleh semua orang. Objek status mengekspos maturity sebagai data,
dengan generallyAvailable dan conformanceClaimed yang di-hardcode false,
sehingga pemanggil tidak dapat mengira niat produsen sebagai hasil yang
tervalidasi. Pemisahan itu memungkinkan tim mengadopsi sambungan yang tahan lama
sekarang dan menambahkan adapter tersandatangan nanti, tanpa janji format-wire
yang belum dapat dipenuhi NextPDF.
Latar belakang desain: Kepatuhan yang dapat Anda serahkan ke auditor.
Status kapabilitas-preview
Bagian berjudul “Status kapabilitas-preview”C2paCapabilityStatus melaporkan status permukaan secara eksplisit sebagai data,
bukan prosa. Properti generallyAvailable dan conformanceClaimed-nya di-hardcode
false dan tetap false terlepas dari flag; mengaktifkan preview hanya membalik
previewEnabled. Token maturity adalah label non-klaim preview-draft, dan
specPin mencatat commit draf yang dipatok. Pemanggil membaca “preview”, bukan
“ditandatangani dan terverifikasi”.
use NextPDF\Pro\Compliance\C2pa\C2paCapabilityStatus;
// Reads the env flag live; performs no I/O.$status = C2paCapabilityStatus::current();
$status->previewEnabled; // bool — true only if the opt-in env flag is set$status->generallyAvailable; // false (always)$status->conformanceClaimed; // false (always)$status->maturity; // 'preview-draft'$status->specPin; // '4e2afed8' (pinned draft commit, short)$status->envGate; // 'NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT'
echo $status->summary();// "C2PA preview-draft surface is present but switched off;// the C2PA-PDF profile is not yet final."Spesifikasi C2PA dipelihara oleh kelompok kerja eksternal, dan profil yang akan ditargetkan NextPDF belum beku. Karena profil belum beku, preview ini sengaja tidak membuat klaim status-akhir. Saat profil kelompok kerja stabil, status permukaan — bukan pemasarannya — yang akan berubah.
Mengaktifkan preview
Bagian berjudul “Mengaktifkan preview”Opt-in-nya adalah satu variabel lingkungan-proses,
NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT. Ia dibaca secara live dan dibandingkan
secara ketat terhadap string "1" — nilai lain apa pun (termasuk 0,
true, yes, string kosong, atau ketiadaannya) diperlakukan sebagai MATI.
Lisensi Pro saja tidak mengaktifkannya; operator harus secara sadar opt-in.
Mulai cepat
Bagian berjudul “Mulai cepat”// Opt in for the current process BEFORE constructing the embedder.putenv('NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT=1');
use NextPDF\Pro\Compliance\C2pa\Experimental\ExperimentalC2paEmbedder;
$embedder = new ExperimentalC2paEmbedder();
// Synthesise a draft-shaped Manifest Store binding the host PDF by SHA-256.$pdfBytes = file_get_contents('input.pdf');$store = $embedder->buildManifestStore($pdfBytes, 'my-app/1.0.0');
// The result is an opaque ManifestStore; $store->toBytes() is its serialisation.Penggunaan gaya-produksi
Bagian berjudul “Penggunaan gaya-produksi”Dalam penyebaran nyata, setel flag pada boot (bukan melalui putenv() saat
runtime), gerbangi pada opt-in manusia yang eksplisit, dan periksa status
kapabilitas sebelum menyentuh embedder eksperimental sehingga jalur draf dicapai
hanya secara sengaja.
use NextPDF\Pro\Compliance\C2pa\C2paCapabilityStatus;use NextPDF\Pro\Compliance\C2pa\Experimental\ExperimentalC2paEmbedder;
// Set NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT=1 in the environment at process boot.
$status = C2paCapabilityStatus::current();
if (!$status->previewEnabled) { // Flag off: do NOT instantiate the experimental embedder — its // constructor would throw. Fall back to your non-preview path. return;}
// Surface the draft pin to the operator. The bytes are transient:// re-embed once a stable adapter ships. Run `composer c2pa:draft-status`// in CI to fail the build if the pinned snapshot goes stale.$pinnedDraft = ExperimentalC2paEmbedder::SPEC_PIN_SHA; // 4e2afed8…$pinnedDate = ExperimentalC2paEmbedder::SPEC_PIN_DATE; // 2026-04-26
$embedder = new ExperimentalC2paEmbedder();$store = $embedder->buildManifestStore($pdfBytes, 'my-app/1.0.0');Fail-closed saat flag mati
Bagian berjudul “Fail-closed saat flag mati”Tidak ada fallback diam. Jika ExperimentalC2paEmbedder dikonstruksi saat
NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT tidak persis "1", konstruktor melempar
LogicException yang pesannya menamai flag, variabel env, dan SHA/tanggal draf
yang dipatok. Pemanggil tidak dapat secara tak sengaja menserialisasi byte
berbentuk-draf ke dalam PDF produksi hanya dengan memegang lisensi Pro.
Jalur extract stabil juga fail-closed, tetapi secara berbeda: extract()
mengembalikan null saat tidak ada Manifest Store (kasus umum, dijaga murah dan
bebas-eksepsi), dan melempar subclass C2paException — JumbfBombException,
JumbfCycleDetectedException, JumbfDepthExceededException, atau
MalformedJumbfException — saat sebuah Store ada tetapi melanggar invarian
pengerasan-adversarial parser (kedalaman, siklus, ukuran, hitungan). Ini tidak
pernah diam-diam ditelan.
Batas yang jujur
Bagian berjudul “Batas yang jujur”Bahasa berikut tidak dipakai untuk permukaan ini, sebagai kebijakan, dan tidak boleh muncul dalam dokumentasi, UI, atau pemasaran apa pun yang diturunkan darinya:
- “C2PA conformant” atau “C2PA compliant”.
- “C2PA certified”.
- “C2PA signed” sebagai kapabilitas yang sudah jadi dan ditegaskan.
- “GA” / “generally available”.
Apa yang secara jujur merupakan permukaan ini: sambungan stabil yang dapat
mengurai (extract) dan membawa (embed) sebuah Manifest Store C2PA, plus embedder
eksperimental default-mati yang mensintesis isi manifest berbentuk-draf, dan
sebuah objek status yang melaporkan keadaan preview-nya sendiri. Apa yang bukan:
penghasil credential C2PA yang terbukti dan dapat-diverifikasi. Khususnya,
embedder eksperimental sengaja menghilangkan box Claim Signature (c2cs) — bagian
COSE_Sign1 dari spek yang paling mungkin bergeser — sehingga bahkan dengan flag
aktif, keluarannya adalah byte berbentuk-draf yang tak-ditandatangani. Profil
kelompok kerja belum beku; batasnya adalah intinya.
Format wire yang dipancarkan embedder eksperimental dipatok ke commit draf
dari c2pa-org/specifications (SPEC_PIN_SHA = 4e2afed8…, bertanggal
2026-04-26), diekspos sebagai konstanta publik agar pemanggil dapat memilih SHA
yang mereka harapkan.
Permukaan API
Bagian berjudul “Permukaan API”| Simbol | Peran |
|---|---|
C2paCapabilityStatus | Objek nilai status yang jujur dan dapat-dibaca-mesin. current() membaca flag env secara live; generallyAvailable / conformanceClaimed selalu false; summary() tidak membawa klaim GA/konformitas. |
ManifestStore | Objek nilai Manifest Store yang immutable. Tipe sambungan stabil; membawa byte dua arah. Tidak ada akses tingkat-claim. Selalu tersedia. |
C2paManifestEmbedder | SPI yang beku dan netral-vendor: embed() / extract(). Tidak ada sintesis claim. extract() mengembalikan null saat tidak ditemukan. Selalu tersedia. |
ExperimentalC2paEmbedder | Sintesis default-mati. buildManifestStore() merakit manifest draf; konstruktor melempar LogicException kecuali flag env persis "1". |
Feature::PREVIEW_C2PA_DRAFT | Flag opt-in tercakup. ENV_PREVIEW_C2PA_DRAFT = NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT; isEnabled() bersifat ketat === '1'. |
Kasus tepi & jebakan
Bagian berjudul “Kasus tepi & jebakan”- Default-mati, opt-in ketat. Sintesis berada di balik
NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT, dibaca ketat sebagai=== '1'. Apa pun selainnya MATI; lisensi Pro saja tidak mengaktifkannya. - Fail-closed pada waktu-konstruksi.
new ExperimentalC2paEmbedder()melemparLogicExceptionsaat flag mati — tidak pernah no-op diam. - Keluaran tak-ditandatangani dan transien. Bahkan dengan flag aktif, box Claim Signature dihilangkan; perlakukan byte sebagai berbentuk-draf dan embed-ulang begitu adapter stabil dikirimkan.
- Pemeriksaan keusangan pin. Jalankan
composer c2pa:draft-status(exit 0 segar / 1 peringatan-lunak / 2 gagal-keras) di CI untuk mendeteksi saat snapshot draf yang dipatok menua. - Tidak ada verdict konformitas. Objek status melaporkan keadaan preview, bukan hasil konformitas. Sebuah validator eksternal dan profil kelompok kerja yang beku akan menjadi prasyarat bagi diskusi konformitas apa pun, dan tidak satu pun diasumsikan.
- Disiplin bahasa. Jangan deskripsikan keluaran sebagai “C2PA signed”, “conformant”, “compliant”, “certified”, atau “GA”. Gunakan “status kapabilitas-preview”.
Catatan keamanan
Bagian berjudul “Catatan keamanan”Sebuah permukaan preview bukanlah kontrol keamanan. Membawa atau mensintesis Manifest Store draf tidak sama dengan menghasilkan atau memverifikasi sebuah attestation — dan embedder eksperimental menghilangkan box Claim Signature sepenuhnya, sehingga keluarannya tak-ditandatangani secara konstruksi. Jangan mengandalkan preview ini untuk jaminan provenance dalam produksi; ia tidak menegaskan bahwa sebuah credential valid atau bahwa sebuah berkas ditandatangani.
Konformitas
Bagian berjudul “Konformitas”Permukaan ini tidak membuat klaim konformitas. Profil C2PA dipelihara oleh kelompok kerja eksternal dan belum beku; oleh karena itu NextPDF menyatakan status kapabilitas-preview dan batas draf/kelompok-kerja, bukan konformitas atau sertifikasi. Tidak ada teks standar yang direproduksi.
Batas publikasi
Bagian berjudul “Batas publikasi”Halaman ini hanya mendokumentasikan perilaku yang dapat diamati secara eksternal dan permukaan API publik yang didukung. Jalur namespace internal, kelas helper, tabel mekanisme, nama berkas runbook, dan prefiks tiket berada di luar cakupan.
Lihat juga
Bagian berjudul “Lihat juga”- C2PA preview — Referensi Mendalam — referensi API lengkap untuk permukaan ini.
- Keamanan Pro
- Penandatanganan Core
- Landing konformitas
- Status kapabilitas-preview kriptografi pasca-kuantum