Pro รุ่นความเสถียร: ทดลอง
C2PA preview — การอ้างอิงเชิงลึก
ภาพรวมโดยสังเขป
หัวข้อที่มีชื่อว่า “ภาพรวมโดยสังเขป”หน้านี้เป็นการอ้างอิงระดับสัญญาสำหรับพื้นผิว C2PA (Content Credentials) preview ใน NextPDF Pro ครอบคลุมสัญลักษณ์สาธารณะห้าตัวใน NextPDF\Pro\Compliance\C2pa: SPI ของ C2paManifestEmbedder, อ็อบเจกต์ค่า ManifestStore, JumbfBoxParser, ตัวบรรยาย C2paCapabilityStatus และ Experimental\ExperimentalC2paEmbedder ที่มีเกต และยังบันทึกเกต Feature::PREVIEW_C2PA_DRAFT กับตัวแปรสภาพแวดล้อมของมัน NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT
พื้นผิวนี้เป็น experimental และแบ่งออกเป็นสองชั้น จุดเชื่อมที่เสถียร — ManifestStore, C2paManifestEmbedder, JumbfBoxParser — เข้าถึงได้เสมอและนำพาไบต์ของ Manifest Store ทั้งสองทิศทาง การสังเคราะห์ ร่าง manifest อยู่เฉพาะใน ExperimentalC2paEmbedder เท่านั้นและ ปิดโดยค่าเริ่มต้น โปรไฟล์ C2PA-PDF ยังไม่ถูกทำให้เป็นฉบับสมบูรณ์โดยคณะทำงาน รูปแบบ wire ที่สังเคราะห์ถูกตรึงไว้กับ commit ฉบับร่าง ไม่มีการอ้างความสอดคล้องใดๆ ไม่มีเส้นทางการตรวจสอบ และการเปิดแฟล็กพรีวิวไม่สามารถสร้างอย่างใดอย่างหนึ่งขึ้นมาได้ มุมมองเชิงงานอยู่ในหน้าความสามารถ
ความพร้อมใช้งานและการออกไลเซนส์
หัวข้อที่มีชื่อว่า “ความพร้อมใช้งานและการออกไลเซนส์”ความสามารถนี้จัดส่งใน NextPDF Pro (nextpdf/pro) และเปิดใช้งานด้วยซองไลเซนส์ระดับ Pro การปรับใช้งานที่ไม่มีสิทธิ์ดังกล่าวจะไม่โหลดคลาสของความสามารถนี้ เปรียบเทียบรุ่นและรับไลเซนส์
ไลเซนส์เปิดใช้งานพื้นผิวความสอดคล้อง Pro ในภาพรวม พื้นผิว C2PA ภายในยังคงเป็นพรีวิวไม่ว่าจะเป็นไลเซนส์ระดับใด การสังเคราะห์ร่างยังต้องอาศัยเกตกระบวนการที่บันทึกไว้ที่นี่เพิ่มเติม ไลเซนส์ Pro เพียงอย่างเดียวไม่เคยเปิดใช้งานมันเลย
พื้นผิว API สาธารณะ
หัวข้อที่มีชื่อว่า “พื้นผิว API สาธารณะ”| Symbol | Parameters | Default behavior | Returns | Throws or fails with | Notes |
|---|---|---|---|---|---|
C2paManifestEmbedder | — | SPI แบบฝัง/แยกไบต์ล้วน ไม่มี I/O ไม่มีการสังเคราะห์เคลม | — | — | จุดเชื่อมอินเทอร์เฟซที่ถูกตรึงและเป็นกลางต่อผู้ขาย |
C2paManifestEmbedder::embed() | string $pdfBytes, ManifestStore $store | ฝัง $store->toBytes() ที่ตำแหน่งซึ่งโปรไฟล์ประกาศไว้ Store ที่ว่างเปล่าอาจไป-กลับได้แบบไม่มีผล | string ไบต์ PDF ใหม่ | C2paException เมื่อการฝังล้มเหลวใดๆ (Store ขนาดเกิน, PDF ไม่ถูกต้อง, ตำแหน่งโปรไฟล์ชนกัน) | การนำไปใช้งานไม่เคยเปลี่ยนแปลงหรือเก็บไบต์ต้นทางไว้ |
C2paManifestEmbedder::extract() | string $pdfBytes | โพรบตรวจจับต้นทุนต่ำ กรณีไม่มี Store จัดสรรหน่วยความจำแทบไม่มีเลย | ?ManifestStore (null เมื่อไม่พบ) | คลาสย่อยของ C2paException เมื่อมี Store อยู่แต่ละเมิดค่าคงที่การเสริมความแข็งแกร่ง | Store ที่ไม่เป็น null ได้ผ่านการเสริมความแข็งแกร่งของ JumbfBoxParser มาแล้ว |
ManifestStore::fromBoxes() | array $boxes (list<JumbfBox>) | ห่อรายการกล่องแบบเรียงลำดับที่พาร์เซอร์ตรวจสอบแล้ว | self | ตัวมันเองไม่โยนข้อผิดพลาด การสร้าง JumbfBox ด้วยมือบังคับใช้การเสริมความแข็งแกร่งเดียวกัน | คอนสตรักเตอร์เป็นแบบ private ลำดับกล่องมีความสำคัญต่อความเท่ากันของการไป-กลับ |
ManifestStore::empty() | none | Store ที่มีกล่องรากเป็นศูนย์ | self | ไม่โยนข้อผิดพลาด | toBytes() ของ Store ที่ว่างเปล่าคือสตริงว่าง |
ManifestStore::isEmpty() | none | ทดสอบว่ามีกล่องรากเป็นศูนย์หรือไม่ | bool | ไม่โยนข้อผิดพลาด | — |
ManifestStore::toBytes() | none | ต่อการซีเรียลไลซ์กล่องรากเข้าด้วยกัน | string | ไม่โยนข้อผิดพลาด | ลำดับไบต์นี้คือสิ่งที่ตัวฝังเขียนออกไป |
ManifestStore::size() | none | ความยาวไบต์ของ toBytes() | int (>= 0) | ไม่โยนข้อผิดพลาด | — |
JumbfBoxParser::__construct() | การแทนที่ค่าคงที่สามตัวแบบเลือกได้ | ค่าคงที่สำหรับการผลิต: 64 MiB ต่อกล่อง, 128 MiB รวม, 4096 ลูกต่อ superbox | JumbfBoxParser | ไม่โยนข้อผิดพลาด | ค่าคงที่ความลึกถูกตรึงที่ MAX_DEPTH (8) และปรับผ่านคอนสตรักเตอร์ไม่ได้ |
JumbfBoxParser::parse() | string $bytes | ตรวจสอบและสร้างกล่องรากขึ้นมา อินพุตว่างให้ผลเป็น [] | list<JumbfBox> | JumbfBombException, JumbfCycleDetectedException, JumbfDepthExceededException, MalformedJumbfException | ไร้สถานะ ไม่เคยคืนกราฟบางส่วน การเรียกพร้อมกันบนอินสแตนซ์เดียวปลอดภัย |
C2paCapabilityStatus::__construct() | ฟิลด์ readonly ที่มีชื่อหกตัว | สร้างอินสแตนซ์ตัวบรรยายตามอำเภอใจ | C2paCapabilityStatus | ไม่โยนข้อผิดพลาด | current() คือคอนสตรักเตอร์ตามแบบแผน |
C2paCapabilityStatus::current() | none | อ่านเกตแบบสด ฮาร์ดโค้ดบูลีนของการเคลม | C2paCapabilityStatus | ไม่โยนข้อผิดพลาด | generallyAvailable และ conformanceClaimed เป็น false เสมอ |
C2paCapabilityStatus::summary() | none | ข้อความสถานะบรรทัดเดียว | string | ไม่โยนข้อผิดพลาด | เรียบเรียงให้ไม่นำพาการอ้าง GA หรือความสอดคล้องใดๆ |
Feature | enum อิงสตริง 1 เคส | เคสเดียว PREVIEW_C2PA_DRAFT ค่าคงที่ ENV_PREVIEW_C2PA_DRAFT | เคส enum | ไม่มีอะไรเมื่อเข้าถึงเคส | เกตความเสถียรแบบมีขอบเขต แยกจากสิทธิ์ไลเซนส์ |
Feature::isEnabled() | none | อ่าน getenv() แบบสด เปรียบเทียบอย่างเข้มงวดกับสตริง 1 | bool | ไม่โยนข้อผิดพลาด | ตัวแปรที่ไม่มีอยู่หรือค่าอื่นใด รวมถึง 0, true, yes ถือว่าปิด |
ExperimentalC2paEmbedder::__construct() | none | ตรวจเกตแบบปิดเมื่อพลาดตอนสร้าง | ExperimentalC2paEmbedder | LogicException เมื่อ Feature::PREVIEW_C2PA_DRAFT ปิด | ไม่มีการถอยกลับแบบเงียบ |
ExperimentalC2paEmbedder::buildManifestStore() | string $sourceBytes, string $producer (ไม่ว่าง) | สร้าง Store รูปทรงร่างที่ผูก $sourceBytes ผ่าน SHA-256 | ManifestStore | \JsonException เมื่อเข้ารหัสเพย์โหลดล้มเหลว คลาสย่อยของ C2paException จากการสร้างกล่อง | ละเว้นกล่อง c2cs Claim Signature เอาต์พุตไม่มีลายเซ็นโดยการสร้าง |
interface C2paManifestEmbedder
public function embed(string $pdfBytes, ManifestStore $store): string;public function extract(string $pdfBytes): ?ManifestStore;final readonly class ManifestStore
public static function fromBoxes(array $boxes): selfpublic static function empty(): selfpublic function isEmpty(): boolpublic function toBytes(): stringpublic function size(): intfinal class JumbfBoxParser
public const int MAX_DEPTH = 8;public const int MAX_PER_BOX_BYTES = 64 * 1024 * 1024;public const int MAX_TOTAL_BYTES = 128 * 1024 * 1024;public const int MAX_CHILDREN_PER_SUPERBOX = 4096;public const array SUPERBOX_TBOXES = ['jumb', 'c2pa', 'c2ma', 'c2as', 'c2cl', 'c2cs', 'c2vc'];
public function __construct( private readonly int $maxPerBoxBytes = self::MAX_PER_BOX_BYTES, private readonly int $maxTotalBytes = self::MAX_TOTAL_BYTES, private readonly int $maxChildrenPerSuperbox = self::MAX_CHILDREN_PER_SUPERBOX,)
public function parse(string $bytes): arrayfinal readonly class C2paCapabilityStatus
public const string MATURITY_PREVIEW_DRAFT = 'preview-draft';
public function __construct( public bool $previewEnabled, public bool $generallyAvailable, public bool $conformanceClaimed, public string $maturity, public string $specPin, public string $envGate,)
public static function current(): selfpublic function summary(): stringenum Feature: string
case PREVIEW_C2PA_DRAFT = 'preview_c2pa_draft';
public const string ENV_PREVIEW_C2PA_DRAFT = 'NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT';
public function isEnabled(): boolfinal class ExperimentalC2paEmbedder
public const string SPEC_PIN_SHA = '4e2afed8f3ace20d41317e2e386c9340d2959d55';public const string SPEC_PIN_DATE = '2026-04-26';
public function __construct()
public function buildManifestStore(string $sourceBytes, string $producer): ManifestStoreสัญญาพฤติกรรม
หัวข้อที่มีชื่อว่า “สัญญาพฤติกรรม”- การแบ่งสองชั้น จุดเชื่อมที่เสถียร (
ManifestStore,C2paManifestEmbedder,JumbfBoxParser) เข้าถึงได้เสมอ การสังเคราะห์ร่างมีอยู่เฉพาะในNextPDF\Pro\Compliance\C2pa\Experimental\ExperimentalC2paEmbedderหลังเกตที่ปิดโดยค่าเริ่มต้น การแยกและการนำพาไบต์ไม่เคยต้องอาศัยเกต การสังเคราะห์ต้องอาศัยเสมอ - ค่าคงที่ของจุดเชื่อม สัญญา
C2paManifestEmbedderเป็นแบบไบต์ล้วน: ไม่มีอ็อบเจกต์ PDF ในหน่วยความจำข้ามจุดเชื่อม การนำไปใช้งานไม่ทำ I/O เครือข่ายหรือระบบไฟล์ และจุดเชื่อมไม่เคยประกอบข้อยืนยันเคลมด้วยตัวเองextract()คืนnullเพื่อบ่งบอกการไม่มีอยู่ มันไม่เคยโยนข้อผิดพลาดสำหรับการไม่มีอยู่ - ความหมายของ Store
ManifestStoreเป็นรายการเรียงลำดับที่เปลี่ยนแปลงไม่ได้ของอินสแตนซ์JumbfBoxราก ตามโมเดล Manifest Store ของ C2PA 2.1 §11.1.1: หนึ่งคอนเทนเนอร์ JUMBF ที่รวม manifest หนึ่งรายการหรือมากกว่าเข้าด้วยกัน อ้างอิงได้ด้วย URI มันไม่เปิดเผยตัวเข้าถึงระดับเคลม ลำดับกล่องถูกรักษาไว้และมีความสำคัญต่อความเท่ากันของการไป-กลับ - ค่าคงที่การเสริมความแข็งแกร่ง
JumbfBoxParserปฏิเสธอินพุตที่เกินค่าคงที่ใดๆอย่างไม่มีเงื่อนไข: ขนาดต่อกล่องเกิน 64 MiB, store สะสมเกิน 128 MiB, การซ้อนลึกกว่า 8 ระดับ หรือลูกมากกว่า 4096 ตัวในหนึ่ง superbox ไม่มีแฟล็กนโยบายที่ปิดค่าคงที่เหล่านี้ได้ ค่าคงที่ที่เข้มงวดกว่าฉีดผ่านคอนสตรักเตอร์ได้สำหรับกระบวนการที่มีหน่วยความจำจำกัด - การปฏิเสธเชิงโครงสร้าง พาร์เซอร์ยังปฏิเสธแบบปิดเมื่อพลาดด้วย:
LBox = 0(BMFF ถึง EOF),LBox = 1(XLBox ความยาว 64 บิต),LBoxที่เล็กกว่าเฮดเดอร์ 8 ไบต์, การตัดขาดเลยอินพุตที่เหลือ, ไบต์ TBox ที่อยู่นอก ASCII ที่พิมพ์ได้ (0x20–0x7E), การเข้าออฟเซ็ตซ้ำ (วงจร) และการปูกระเบื้องลูกที่ไม่พอดีของเพย์โหลด superbox มันไม่เคยคืนกราฟที่สร้างไม่สมบูรณ์ - การกำหนดเส้นทาง superbox ค่า TBox ใน
SUPERBOX_TBOXESพาร์สแบบเรียกซ้ำเป็นลำดับลูก TBox อื่นทุกตัวเป็น leaf ที่มีเพย์โหลดทึบแสงcborถูกจัดการเป็น leaf โดยเจตนาเพื่อความปลอดภัยของพาร์เซอร์ ชั้นบนพาร์สเพย์โหลดของมันใหม่เมื่อจำเป็น - เกตกระบวนการ
Feature::PREVIEW_C2PA_DRAFTปิดโดยค่าเริ่มต้นisEnabled()คืนtrueเฉพาะเมื่อNEXTPDF_FEATURE_PREVIEW_C2PA_DRAFTเท่ากับสตริง1พอดีเท่านั้น การอ่านเป็นแบบสดในทุกการเรียก ไม่มีอะไรถูกจดจำไว้ - การสร้างแบบปิดเมื่อพลาด
new ExperimentalC2paEmbedder()โยนLogicExceptionขณะที่เกตปิด ข้อความระบุชื่อแฟล็ก ตัวแปรสภาพแวดล้อม และ SHA กับวันที่ของร่างที่ตรึงไว้ ผู้เรียกไม่สามารถเข้าถึงการสังเคราะห์ร่างโดยบังเอิญได้ - รูปทรงการสังเคราะห์
buildManifestStore()ปล่อย superboxc2paที่บรรจุ manifestc2maหนึ่งรายการ ซึ่งถือ assertion storec2as(assertionc2pa.hash.dataหนึ่งรายการ) และเคลมc2classertion บันทึก hash assertion แบบ SHA-256 เหนือ$sourceBytesเพราะกล่องc2csClaim Signature ถูกละเว้นและเอาต์พุตไม่มีลายเซ็น สิ่งนี้จึงไม่ใช่ C2PA hard binding หรือคำตัดสินเรื่องที่มา — มันเพียงเป็นไปตามรูปทรงเชิงโครงสร้างที่ §9.1 อธิบายไว้ เพย์โหลดของ Description-box นำพา type UUID, toggle0x03และ label UTF-8 ที่จบด้วย null ตาม C2PA 2.1 §11.1.4.1.1–11.1.4.1.2 - ไม่มี Claim Signature กล่อง
c2cs— ตาม C2PA 2.1 §11.1.4.4 เป็นกล่องเนื้อหา CBOR เดี่ยวที่มี labelc2pa.signature— ถูกละเว้นจาก Store ที่สังเคราะห์โดยเจตนา เอาต์พุตไม่มีลายเซ็นโดยการสร้าง นี่คือส่วนโปรไฟล์ที่ถูกตัดสินว่ามีแนวโน้มมากที่สุดที่จะเลื่อนไหลก่อนการตรึงของคณะทำงาน - การตรึงร่าง ไม่มีการรับประกัน BC รูปแบบ wire ที่สังเคราะห์ถูกตรึงกับ
SPEC_PIN_SHA(4e2afed8…ลงวันที่2026-04-26) ของc2pa-org/specificationsมันเปลี่ยนได้โดยไม่แจ้งล่วงหน้าและไม่มีการรับประกันความเข้ากันได้ย้อนหลัง - ค่าคงที่แห่งความซื่อตรง
C2paCapabilityStatus::current()ฮาร์ดโค้ดgenerallyAvailableและconformanceClaimedให้เป็นfalseไม่มีการกำหนดค่าหรือแฟล็กสภาพแวดล้อมใดที่พลิกบูลีนทั้งสอง มีเพียงpreviewEnabledที่สะท้อนเกตmaturityคือโทเคนที่ไม่อ้างเคลมpreview-draft
กรณีขอบและโหมดความล้มเหลว
หัวข้อที่มีชื่อว่า “กรณีขอบและโหมดความล้มเหลว”- การตั้งค่าตัวแปรเกตเป็น
0,true,yes,onหรือสตริงว่าง จะทำให้เกตยัง ปิด อยู่ มีเพียงสตริง1พอดีเท่านั้นที่เปิดใช้งานมัน - การเปลี่ยนแปลงด้วย
putenv()มีผลในการเรียกisEnabled()ครั้งถัดไปเพราะการอ่านเป็นแบบสด เกตที่สลับกลางกระบวนการจะถูกสังเกตทันที extract()แยกแยะผลลัพธ์สองแบบ:nullเมื่อไม่มี Store อยู่ (ต้นทุนต่ำ ไม่มีข้อผิดพลาด) และการโยนคลาสย่อยของC2paExceptionเมื่อมี Store อยู่แต่เป็นปฏิปักษ์หรือผิดรูป การไม่มีอยู่ไม่เคยเป็นข้อผิดพลาด การมีอยู่บวกความผิดรูปเป็นข้อผิดพลาดเสมอJumbfBoxParser::parse('')คืนรายการว่างManifestStoreที่ว่างเปล่าแต่มีอยู่จะไป-กลับกลับมาเป็นตัวมันเอง จุดเชื่อมไม่ยุบมันให้เป็นnull- การฝัง Store ที่ว่างเปล่าอาจคืนอินพุตแบบไม่เปลี่ยนแปลง สัญญาจุดเชื่อมอนุญาตการไม่มีผลนี้ได้แต่ไม่ได้บังคับ
- กราฟ
JumbfBoxที่สร้างด้วยมือรันการเสริมความแข็งแกร่งเดียวกันตอนสร้าง: การตรวจความยาว TBox และ ASCII, ค่าคงที่ความลึก, ค่าคงที่ความลึกของลูก, กฎการเลือกอย่างใดอย่างหนึ่งระหว่างเพย์โหลดหรือลูก และค่าคงที่ขนาดต่อกล่อง bomb ที่สร้างด้วยมือล้มเหลวตอนสร้าง ไม่ใช่ตอนฝัง - ทุกข้อผิดพลาดของพาร์เซอร์นำพาฟิลด์เชิงโครงสร้าง —
capKind/observed/cap,offsetหรือkind— เพื่อให้ telemetry ไม่ต้องขูดสตริงข้อความ คลาสย่อยทั้งหมดขยายจากC2paException(ซึ่งเองเป็นRuntimeException) อันเป็นชนิดจับแบบครอบคลุม - docblock ของพาร์เซอร์ห้ามการกลืนข้อผิดพลาดเหล่านี้อย่างเงียบๆ ผู้บริโภคต้องเปิดเผยมันหรือรีแมปมันด้วยเจตนา
buildManifestStore()เข้ารหัสเพย์โหลด JSON ด้วยJSON_THROW_ON_ERRORสตริง$producerที่ไม่ใช่ UTF-8 ที่ถูกต้องจะล้มเหลวด้วย\JsonExceptionก่อนที่จะมีการสร้างกล่องใดๆ- ผลลัพธ์
extract()ที่มีรูปแบบถูกต้องเป็นเพียงคำแถลงเชิงโครงสร้างเท่านั้น ไม่มีการตรวจสอบเคลม ไม่มีการยืนยันลายเซ็น และไม่มีการประเมินความน่าเชื่อถือที่ใดในพื้นผิวนี้ การรับรู้ไม่ใช่คำตัดสินเรื่องที่มา - ไม่มีคีย์ลงลายเซ็น ใบรับรอง หรือโครงสร้าง COSE ที่ถูกประมวลผลโดยพื้นผิวนี้ การดำเนินการเข้ารหัสเพียงอย่างเดียวคือ SHA-256 content hash ภายในเส้นทางการสังเคราะห์ที่มีเกต
ความสอดคล้อง
หัวข้อที่มีชื่อว่า “ความสอดคล้อง”| Claim | Standard | Clause |
|---|---|---|
| Manifest ซีเรียลไลซ์เป็นหนึ่ง JUMBF store ที่ถือหลาย manifest อ้างอิงได้ด้วย URI | C2PA 2.1 | §11.1.1 (p63.b) |
| Label ของ Description-box เป็น UTF-8 ที่จบด้วย null พร้อมช่วงที่ถูกยกเว้น toggle ถูกกำหนดสำหรับ Description box ทั้งหมด | C2PA 2.1 | §11.1.4.1.1–11.1.4.1.2 (p63.a) |
กล่อง Claim Signature มี label c2pa.signature ชนิด c2cs และถือกล่องเนื้อหา CBOR เดี่ยว | C2PA 2.1 | §11.1.4.4 (p63.c) |
| hard binding ผูก manifest เข้ากับ asset ของมันเชิงวิทยาการเข้ารหัสและเปิดเผยการดัดแปลง — hash assertion ที่ไม่มีลายเซ็นของพรีวิวไม่ผ่านมาตรฐานนี้ | C2PA 2.1 | §9.1 (p57) |
ทุก clause ถูกถอดความ NextPDF ไม่ได้ทำซ้ำข้อความเชิงบรรทัดฐาน NextPDF ไม่ถือการรับรองใดและไม่ให้การรับรองใด คำแถลงข้างต้นเป็นคำแถลงการจัดวางเชิงโครงสร้างเกี่ยวกับเลย์เอาต์กล่อง label และ binding — มันไม่ใช่ผลการทดสอบความสอดคล้อง ไม่ใช่การรับรองโดยบุคคลที่สาม และไม่ใช่การอ้างความสอดคล้อง C2PA หรือ ISO โปรไฟล์ C2PA-PDF ยังไม่เป็นฉบับสมบูรณ์ รูปแบบ wire ที่สังเคราะห์ติดตาม commit ฉบับร่างที่ตรึงไว้ C2paCapabilityStatus เข้ารหัสท่าทีนี้ไว้ในโค้ด: generallyAvailable และ conformanceClaimed เป็น false ในทุกการกำหนดค่า เอาต์พุตจากพื้นผิวนี้ไม่ใช่ Content Credential ที่ตรวจสอบได้ และไม่มีเส้นทางการตรวจสอบใน NextPDF
บันทึกการพัฒนา
หัวข้อที่มีชื่อว่า “บันทึกการพัฒนา”-
ไวยากรณ์กล่อง JUMBF ที่พาร์เซอร์นำมาใช้ (LBox 4 ไบต์ big-endian, TBox 4 ไบต์ ASCII, เพย์โหลด superbox ซ้อนกล่องลูก) เป็นไปตาม ISO 19566-5 มาตรฐานนั้นอยู่นอกคลังที่อ้างถึง ดังนั้นพฤติกรรมของพาร์เซอร์จึงอิงจากซอร์สของผลิตภัณฑ์ ไม่ใช่การอ้างสเปก
-
เก็บเกตให้ปิดในการผลิต การสังเคราะห์ร่างไม่เพิ่มความสามารถที่คงทน ไบต์ที่ปล่อยออกมาเป็นแบบชั่วคราวและควรถูกฝังใหม่เมื่ออะแดปเตอร์ที่เสถียรจัดส่ง
-
ยืนยัน
ExperimentalC2paEmbedder::SPEC_PIN_SHAกับ commit ฉบับร่างที่ไปป์ไลน์ของคุณคาดหวัง รันcomposer c2pa:draft-statusใน CI (exit 0 สด, 1 เตือนเบา, 2 ล้มเหลวหนัก) เพื่อตรวจจับการตรึงที่ล้าสมัย -
ปฏิบัติต่อ
C2paCapabilityStatus::current()เป็นแหล่งความจริงเดียวเมื่อแสดงสถานะ C2PA ในเครื่องมือหรือ UI อย่าแถลงบูลีนของมันซ้ำด้วยมือsummary()ปลอดภัยสำหรับ log และ endpoint สถานะ -
จับ
C2paExceptionเป็นชนิดครอบคลุมเมื่อบริโภคextract()หรือparse()แมปคลาสย่อยทั้งสี่เป็นตัวนับ telemetry ที่แยกกันโดยใช้ฟิลด์เชิงโครงสร้างของพวกมัน -
ฉีดค่าคงที่ที่เข้มงวดกว่าผ่านคอนสตรักเตอร์
JumbfBoxParserสำหรับกระบวนการตรวจสอบที่มีหน่วยความจำจำกัด ค่าเริ่มต้นเป็นค่าคงที่การผลิตที่เผื่อไว้กว้าง -
C2paCapabilityStatus::__construct()เป็นแบบ public ดังนั้นอินสแตนซ์ที่สร้างด้วยมือสามารถนำพาบูลีนตามอำเภอใจได้ อินสแตนซ์เช่นนั้นเป็นเพียงอ็อบเจกต์ค่า มันไม่เปลี่ยนพฤติกรรมใด
ดูเพิ่มเติม
หัวข้อที่มีชื่อว่า “ดูเพิ่มเติม”- สถานะความสามารถ C2PA preview — หน้าความสามารถ
- ความปลอดภัย — การอ้างอิงเชิงลึก (Pro)
- ความสอดคล้อง — การอ้างอิงเชิงลึก (Pro)
- Post-quantum signing preview — การอ้างอิงเชิงลึก (Enterprise)
- ความปลอดภัย / การลงลายเซ็น (Core)
ขอบเขตการเผยแพร่
หัวข้อที่มีชื่อว่า “ขอบเขตการเผยแพร่”หน้านี้บันทึกเฉพาะพฤติกรรมที่สังเกตได้จากภายนอกและพื้นผิว API สาธารณะที่รองรับเท่านั้น เส้นทาง namespace ภายใน คลาสตัวช่วย ตารางกลไก ชื่อไฟล์ runbook และคำนำหน้า ticket อยู่นอกขอบเขต