Pro éditionstabilité: Expérimental
Statut de capacité de prévisualisation C2PA
Statut de capacité de prévisualisation. Jamais GA. Cette page énonce ce que fait aujourd’hui la surface C2PA en tant que prévisualisation. Ce n’est pas une revendication de conformité, pas une certification, ni un énoncé selon lequel NextPDF produit des fichiers signés C2PA. La surface est une prévisualisation et n’est jamais décrite comme généralement disponible.
NextPDF Pro expose une surface de prévisualisation Content Credentials (C2PA) via
C2paCapabilityStatus. Cette page est la frontière honnête de cette surface : ce
qui est toujours disponible, ce qui reste derrière un indicateur de brouillon
opt-in, et pourquoi aucune revendication d’état final n’est faite.
Deux couches : jonction stable contre synthèse verrouillée
Section intitulée « Deux couches : jonction stable contre synthèse verrouillée »La surface comporte deux couches clairement séparées, et la distinction est tout l’enjeu de la frontière :
- Toujours disponible — la jonction stable.
ManifestStoreet l’interfaceC2paManifestEmbeddersont une jonction figée et neutre vis-à-vis du fournisseur. Elles peuvent transporter un Manifest Store dans les deux sens :embed()écrit les octets d’un Store fourni par l’appelant dans un PDF, etextract()réanalyse un Store (renvoyantnulllorsqu’aucun n’est présent). Cette jonction ne fait aucune synthèse de revendication — elle n’assemble jamais d’assertions ni de revendications elle-même ; elle déplace unManifestStoreopaque que l’appelant détient déjà. - Derrière l’indicateur opt-in — synthèse de revendication. Construire
réellement un Manifest Store (assembler la revendication et l’assertion de hachage
d’ingrédient) ne réside que dans
ExperimentalC2paEmbedder, verrouillé derrière un indicateur d’environnement désactivé par défaut. C’est la partie en forme de brouillon, susceptible de casser sans préavis.
L’énoncé précis est donc : l’extraction et le transport d’octets sont toujours joignables ; la synthèse du contenu du manifeste n’est joignable que lorsque l’indicateur de prévisualisation est explicitement activé.
Pourquoi cela fonctionne ainsi
Section intitulée « Pourquoi cela fonctionne ainsi »La décision porteuse sépare une jonction de transport stable du chemin de synthèse
volatil, plutôt qu’un seul embedder faisant tout. Le profil C2PA-PDF appartient
encore à un groupe de travail externe et n’est pas figé. Sa boîte Claim Signature
(c2cs, une structure COSE_Sign1) est la partie la plus susceptible de dériver.
Ainsi, la synthèse omet cette boîte et réside derrière un indicateur désactivé par
défaut, tandis que l’extraction-et-transport ne dépend d’aucun champ non figé et
reste joignable pour tous. L’objet de statut expose la maturité sous forme de
données, avec generallyAvailable et conformanceClaimed codés en dur à false, de
sorte que les appelants ne peuvent pas confondre l’intention du producteur avec un
résultat validé. Cette séparation permet aux équipes d’adopter la jonction durable
dès maintenant et d’ajouter un adaptateur signé plus tard, sans aucune promesse de
format de fil que NextPDF ne peut pas encore tenir.
Contexte de conception : Une conformité que tu peux remettre à un auditeur.
Statut de capacité de prévisualisation
Section intitulée « Statut de capacité de prévisualisation »C2paCapabilityStatus rapporte le statut de la surface explicitement sous forme de
données, pas de prose. Ses propriétés generallyAvailable et conformanceClaimed
sont codées en dur à false et restent false quel que soit l’indicateur ; activer
la prévisualisation ne bascule que previewEnabled. Le jeton maturity est
l’étiquette non revendicatrice preview-draft, et specPin consigne le commit de
brouillon figé. Un appelant lit « preview », pas « signé et vérifié ».
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."La spécification C2PA est maintenue par un groupe de travail externe, et le profil que NextPDF viserait n’est pas figé. Parce que le profil n’est pas figé, la prévisualisation ne fait délibérément aucune revendication d’état final. Lorsque le profil du groupe de travail se stabilisera, c’est le statut de la surface — et non son marketing — qui changerait.
Activer la prévisualisation
Section intitulée « Activer la prévisualisation »L’opt-in est une unique variable d’environnement de processus,
NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT. Elle est lue en direct et comparée
strictement à la chaîne "1" — toute autre valeur (y compris 0, true,
yes, la chaîne vide ou l’absence) est traitée comme désactivée. Une licence Pro
seule **n’**active pas la prévisualisation ; l’opérateur doit consciemment
opter pour elle.
Démarrage rapide
Section intitulée « Démarrage rapide »// 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.Usage de type production
Section intitulée « Usage de type production »Dans un déploiement réel, définis l’indicateur au démarrage (pas via putenv()
à l’exécution), conditionne-le à un opt-in humain explicite, et vérifie le statut
de la capacité avant de toucher à l’embedder expérimental afin que le chemin
brouillon ne soit atteint qu’à dessein.
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 lorsque l’indicateur est désactivé
Section intitulée « Fail-closed lorsque l’indicateur est désactivé »Il n’y a aucun repli silencieux. Si ExperimentalC2paEmbedder est construit alors
que NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT n’est pas exactement "1", le constructeur
lève une LogicException dont le message nomme l’indicateur, la variable
d’environnement et le SHA/date du brouillon figé. Un appelant ne peut pas
accidentellement sérialiser des octets en forme de brouillon dans un PDF de
production en se contentant de détenir une licence Pro.
Le chemin d’extraction stable est lui aussi fail-closed, mais différemment :
extract() renvoie null lorsqu’aucun Manifest Store n’est présent (le cas
courant, maintenu peu coûteux et sans exception), et lève une sous-classe de
C2paException — JumbfBombException, JumbfCycleDetectedException,
JumbfDepthExceededException ou MalformedJumbfException — lorsqu’un Store est
présent mais enfreint les invariants de durcissement adversarial de l’analyseur
(profondeur, cycle, taille, nombre). Ceux-ci ne sont jamais avalés silencieusement.
Frontière honnête
Section intitulée « Frontière honnête »Le langage suivant n’est pas utilisé pour cette surface, par politique, et ne devrait apparaître dans aucune documentation, interface ou marketing qui en dérive :
- « C2PA conformant » ou « C2PA compliant ».
- « C2PA certified ».
- « C2PA signed » en tant que capacité finie et affirmée.
- « GA » / « generally available ».
Ce que la surface est honnêtement : une jonction stable qui peut analyser
(extract) et transporter (embed) un Manifest Store C2PA, plus un embedder
expérimental désactivé par défaut qui synthétise un contenu de manifeste en forme
de brouillon, et un objet de statut qui rapporte son propre état de prévisualisation.
Ce qu’elle n’est pas : un producteur de Content Credentials C2PA attestés et
vérifiables. Notamment, l’embedder expérimental omet délibérément la boîte Claim
Signature (c2cs) — la partie COSE_Sign1 de la spécification la plus susceptible de
dériver — de sorte que, même avec l’indicateur activé, la sortie est constituée
d’octets non signés en forme de brouillon. Le profil du groupe de travail n’est pas
figé ; la frontière est l’enjeu.
Le format de fil que l’embedder expérimental émet est figé à un commit brouillon
de c2pa-org/specifications (SPEC_PIN_SHA = 4e2afed8…, daté du 2026-04-26),
exposé comme constante publique afin que les appelants puissent figer le SHA qu’ils
attendent.
Surface d’API
Section intitulée « Surface d’API »| Symbole | Rôle |
|---|---|
C2paCapabilityStatus | Objet valeur de statut honnête et lisible par machine. current() lit l’indicateur d’environnement en direct ; generallyAvailable / conformanceClaimed sont toujours false ; summary() ne porte aucune revendication de GA/conformité. |
ManifestStore | Objet valeur Manifest Store immuable. Le type de la jonction stable ; transporte des octets dans les deux sens. Aucun accesseur au niveau revendication. Toujours disponible. |
C2paManifestEmbedder | SPI figée et neutre vis-à-vis du fournisseur : embed() / extract(). Aucune synthèse de revendication. extract() renvoie null en cas d’absence. Toujours disponible. |
ExperimentalC2paEmbedder | Synthèse désactivée par défaut. buildManifestStore() assemble un manifeste brouillon ; le constructeur lève LogicException à moins que l’indicateur d’environnement ne soit exactement "1". |
Feature::PREVIEW_C2PA_DRAFT | Indicateur opt-in cantonné. ENV_PREVIEW_C2PA_DRAFT = NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT ; isEnabled() est strict === '1'. |
Cas limites et pièges
Section intitulée « Cas limites et pièges »- Désactivé par défaut, opt-in strict. La synthèse est derrière
NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT, lu strictement comme=== '1'. Tout le reste est désactivé ; une licence Pro seule ne l’active pas. - Fail-closed au moment de la construction.
new ExperimentalC2paEmbedder()lèveLogicExceptionlorsque l’indicateur est désactivé — jamais un no-op silencieux. - La sortie est non signée et transitoire. Même avec l’indicateur activé, la boîte Claim Signature est omise ; traite les octets comme en forme de brouillon et réintègre-les une fois qu’un adaptateur stable est livré.
- Vérification de péremption du pin. Exécute
composer c2pa:draft-status(sortie 0 frais / 1 avertissement souple / 2 échec dur) en CI pour détecter quand l’instantané de brouillon figé vieillit. - Aucun verdict de conformité. L’objet de statut rapporte l’état de prévisualisation, pas un résultat de conformité. Un validateur externe et un profil de groupe de travail figé seraient des prérequis pour toute discussion de conformité, et ni l’un ni l’autre n’est supposé.
- Discipline de langage. Ne décris pas la sortie comme « C2PA signed », « conformant », « compliant », « certified » ou « GA ». Utilise « statut de capacité de prévisualisation ».
Notes de sécurité
Section intitulée « Notes de sécurité »Une surface de prévisualisation n’est pas un contrôle de sécurité. Transporter ou synthétiser un Manifest Store brouillon n’est pas la même chose que produire ou vérifier une attestation — et l’embedder expérimental omet entièrement la boîte Claim Signature, de sorte que sa sortie est non signée par construction. Ne te fie pas à cette prévisualisation pour une assurance de provenance en production ; elle n’affirme pas qu’un credential est valide ni qu’un fichier est signé.
Conformité
Section intitulée « Conformité »Cette surface ne fait aucune revendication de conformité. Le profil C2PA est maintenu par un groupe de travail externe et n’est pas figé ; NextPDF énonce donc un statut de capacité de prévisualisation et une frontière brouillon/groupe de travail, pas une conformité ni une certification. Aucun texte de norme n’est reproduit.
Frontière de publication
Section intitulée « Frontière de publication »Cette page documente uniquement le comportement observable de l’extérieur et la surface d’API publique prise en charge. Les chemins de namespace internes, les classes utilitaires, les tables de mécanismes, les noms de fichiers de runbook et les préfixes de tickets sont hors périmètre.
Voir aussi
Section intitulée « Voir aussi »- Prévisualisation C2PA — Référence détaillée — la référence d’API complète de cette surface.
- Sécurité Pro
- Signature Core
- Page d’accueil Conformité
- Statut de capacité de prévisualisation de la cryptographie post-quantique