Pro ediçãoestabilidade: Experimental
Status de capacidade de pré-visualização do C2PA
Visão geral
Seção intitulada “Visão geral”Status de capacidade de pré-visualização. Nunca GA. Esta página declara o que a superfície C2PA faz hoje como pré-visualização. Não é uma reivindicação de conformidade, não é uma certificação e não é uma declaração de que o NextPDF produz arquivos assinados com C2PA. A superfície é uma pré-visualização e nunca é descrita como disponível em caráter geral.
O NextPDF Pro expõe uma superfície de pré-visualização de Content Credentials
(C2PA) por meio de C2paCapabilityStatus. Esta página é o limite honesto dessa
superfície: o que está sempre disponível, o que permanece por trás de uma flag
opcional de rascunho e por que nenhuma reivindicação de estado final é feita.
Duas camadas: seam estável vs. síntese restringida por flag
Seção intitulada “Duas camadas: seam estável vs. síntese restringida por flag”A superfície tem duas camadas claramente separadas, e a distinção é todo o propósito do limite:
- Sempre disponível — o seam estável.
ManifestStoree a interfaceC2paManifestEmbeddersão um seam congelado e neutro em relação a fornecedores. Eles podem transportar um Manifest Store nos dois sentidos:embed()grava os bytes de um Store fornecido pelo chamador em um PDF, eextract()analisa um Store de volta (retornandonullquando nenhum está presente). Este seam não faz síntese de claim — ele nunca monta asserções ou claims por conta própria; ele move umManifestStoreopaco que o chamador já possui. - Por trás da flag opcional — síntese de claim. Construir de fato um
Manifest Store (montar o claim e a asserção de ingredient-hash) reside apenas em
ExperimentalC2paEmbedder, restringido por trás de uma flag de ambiente desativada por padrão. Esta é a parte em formato de rascunho, que quebra sem aviso.
Então a afirmação precisa é: extração e transporte de bytes são sempre alcançáveis; a síntese do conteúdo do manifesto só é alcançável quando a flag de pré-visualização é explicitamente ativada.
Por que funciona assim
Seção intitulada “Por que funciona assim”A decisão de suporte separa um seam de transporte estável do caminho volátil de
síntese, em vez de um único embedder fazendo tudo. O perfil C2PA-PDF ainda
pertence a um grupo de trabalho externo e não está congelado. Sua caixa Claim
Signature (c2cs, uma estrutura COSE_Sign1) é a parte com maior probabilidade de
mudar. Por isso, a síntese omite essa caixa e reside por trás de uma flag
desativada por padrão, enquanto extrair-e-transportar não depende de nenhum campo
não congelado e permanece alcançável para todos. O objeto de status expõe a
maturidade como dado, com generallyAvailable e conformanceClaimed fixados em
código como false, de modo que os chamadores não possam confundir a intenção do
produtor com um resultado validado. Essa separação permite que as equipes adotem
o seam durável agora e adicionem um adaptador assinado depois, sem nenhuma
promessa de formato de fio que o NextPDF ainda não pode cumprir.
Contexto de design: Conformidade que você pode entregar a um auditor.
Status de capacidade de pré-visualização
Seção intitulada “Status de capacidade de pré-visualização”C2paCapabilityStatus informa o status da superfície explicitamente como dado,
não como prosa. Suas propriedades generallyAvailable e conformanceClaimed são
fixadas em código como false e permanecem false independentemente da flag;
ativar a pré-visualização altera apenas previewEnabled. O token maturity é o
rótulo não reivindicatório preview-draft, e specPin registra o commit de
rascunho fixado. Um chamador lê “preview”, não “assinado e verificado”.
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."A especificação C2PA é mantida por um grupo de trabalho externo, e o perfil que o NextPDF visaria não está congelado. Como o perfil não está congelado, a pré-visualização deliberadamente não faz nenhuma reivindicação de estado final. Quando o perfil do grupo de trabalho estabilizar, o que mudaria seria o status da superfície — não o seu marketing.
Ativar a pré-visualização
Seção intitulada “Ativar a pré-visualização”A opção opcional é uma única variável de ambiente de processo,
NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT. Ela é lida ao vivo e comparada de forma
estrita com a string "1" — qualquer outro valor (incluindo 0, true,
yes, a string vazia ou ausência) é tratado como OFF. Uma licença Pro sozinha
não a ativa; o operador precisa optar conscientemente.
Início rápido
Seção intitulada “Início rápido”// 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.Uso em estilo de produção
Seção intitulada “Uso em estilo de produção”Em uma implantação real, defina a flag na inicialização (não via putenv() em
runtime), condicione-a a uma opção humana explícita e verifique o status de
capacidade antes de tocar no embedder experimental, de modo que o caminho de
rascunho só seja alcançado de propósito.
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');Falha fechada quando a flag está desativada
Seção intitulada “Falha fechada quando a flag está desativada”Não há fallback silencioso. Se ExperimentalC2paEmbedder for construído enquanto
NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT não for exatamente "1", o construtor lança
uma LogicException cuja mensagem nomeia a flag, a variável de ambiente e o
SHA/data do rascunho fixado. Um chamador não pode serializar acidentalmente bytes
em formato de rascunho em um PDF de produção apenas por possuir uma licença Pro.
O caminho de extração estável também é de falha fechada, mas de forma diferente:
extract() retorna null quando nenhum Manifest Store está presente (o caso
comum, mantido barato e livre de exceções) e lança uma subclasse de
C2paException — JumbfBombException, JumbfCycleDetectedException,
JumbfDepthExceededException ou MalformedJumbfException — quando um Store
está presente, mas viola as invariantes de blindagem adversarial do parser
(profundidade, ciclo, tamanho, contagem). Essas nunca são engolidas
silenciosamente.
Limite honesto
Seção intitulada “Limite honesto”A linguagem a seguir não é usada para esta superfície, por política, e não deve aparecer em nenhuma documentação, UI ou marketing derivado dela:
- “C2PA conformant” ou “C2PA compliant”.
- “C2PA certified”.
- “C2PA signed” como uma capacidade finalizada e afirmada.
- “GA” / “generally available”.
O que a superfície honestamente é: um seam estável que pode analisar (extract) e
transportar (embed) um Manifest Store C2PA, mais um embedder experimental
desativado por padrão que sintetiza conteúdo de manifesto em formato de
rascunho, e um objeto de status que informa seu próprio estado de pré-visualização.
O que ela não é: um produtor de credenciais C2PA atestadas e verificáveis.
Notavelmente, o embedder experimental deliberadamente omite a caixa Claim
Signature (c2cs) — a parte COSE_Sign1 da especificação com maior probabilidade
de mudar — então, mesmo com a flag ativada, a saída é de bytes não assinados, em
formato de rascunho. O perfil do grupo de trabalho não está congelado; o limite é
o ponto.
O formato de fio que o embedder experimental emite é fixado a um commit de
rascunho de c2pa-org/specifications (SPEC_PIN_SHA = 4e2afed8…, datado
de 2026-04-26), exposto como uma constante pública para que os chamadores possam
fixar o SHA que esperam.
Superfície da API
Seção intitulada “Superfície da API”| Símbolo | Função |
|---|---|
C2paCapabilityStatus | Objeto de valor de status honesto e legível por máquina. current() lê a flag de ambiente ao vivo; generallyAvailable / conformanceClaimed são sempre false; summary() não carrega nenhuma reivindicação de GA/conformidade. |
ManifestStore | Objeto de valor imutável do Manifest Store. O tipo do seam estável; transporta bytes nos dois sentidos. Sem acessores de nível de claim. Sempre disponível. |
C2paManifestEmbedder | SPI congelado e neutro em relação a fornecedores: embed() / extract(). Sem síntese de claim. extract() retorna null em caso de ausência. Sempre disponível. |
ExperimentalC2paEmbedder | Síntese desativada por padrão. buildManifestStore() monta um manifesto de rascunho; o construtor lança LogicException a menos que a flag de ambiente seja exatamente "1". |
Feature::PREVIEW_C2PA_DRAFT | Flag opcional com escopo. ENV_PREVIEW_C2PA_DRAFT = NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT; isEnabled() é o estrito === '1'. |
Casos extremos e pegadinhas
Seção intitulada “Casos extremos e pegadinhas”- Desativado por padrão, opção estrita. A síntese fica por trás de
NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT, lida estritamente como=== '1'. Qualquer outra coisa é OFF; uma licença Pro sozinha não a ativa. - Falha fechada no momento da construção.
new ExperimentalC2paEmbedder()lançaLogicExceptionquando a flag está desativada — nunca um no-op silencioso. - A saída é não assinada e transitória. Mesmo com a flag ativada, a caixa Claim Signature é omitida; trate os bytes como em formato de rascunho e os reincorpore quando um adaptador estável for entregue.
- Verificação de obsolescência do pin. Execute
composer c2pa:draft-status(saída 0 atual / 1 aviso leve / 2 falha rígida) em CI para detectar quando o snapshot de rascunho fixado envelhece. - Nenhum veredicto de conformidade. O objeto de status informa o estado de pré-visualização, não um resultado de conformidade. Um validador externo e um perfil congelado de grupo de trabalho seriam pré-requisitos para qualquer discussão de conformidade, e nenhum dos dois é pressuposto.
- Disciplina de linguagem. Não descreva a saída como “C2PA signed”, “conformant”, “compliant”, “certified” ou “GA”. Use “status de capacidade de pré-visualização”.
Notas de segurança
Seção intitulada “Notas de segurança”Uma superfície de pré-visualização não é um controle de segurança. Transportar ou sintetizar um Manifest Store de rascunho não é o mesmo que produzir ou verificar uma atestação — e o embedder experimental omite inteiramente a caixa Claim Signature, então sua saída é não assinada por construção. Não dependa desta pré-visualização para garantia de procedência em produção; ela não afirma que uma credencial é válida nem que um arquivo está assinado.
Conformidade
Seção intitulada “Conformidade”Esta superfície não faz nenhuma reivindicação de conformidade. O perfil C2PA é mantido por um grupo de trabalho externo e não está congelado; portanto, o NextPDF declara um status de capacidade de pré-visualização e um limite de rascunho/grupo de trabalho, não conformidade nem certificação. Nenhum texto de norma é reproduzido.
Limite de publicação
Seção intitulada “Limite de publicação”Esta página documenta apenas o comportamento observável externamente e a superfície de API pública suportada. Caminhos de namespace internos, classes auxiliares, tabelas de mecanismos, nomes de arquivos de runbook e prefixos de tickets estão fora de escopo.
Consulte também
Seção intitulada “Consulte também”- Pré-visualização do C2PA — Referência detalhada — a referência completa da API para esta superfície.
- Segurança do Pro
- Assinatura do Core
- Página inicial de conformidade
- Status de capacidade de pré-visualização da criptografia pós-quântica