#metadata #xmp #api-bindings #manifest-file #file-format

c2pa

Rust SDK for C2PA (内容来源与真实性联盟) 实现

82 个版本 (33 个重大更改)

1.0.0 2022 年 8 月 3 日
0.33.3 2024 年 8 月 17 日
0.33.1 2024 年 7 月 30 日
0.31.1 2024 年 3 月 25 日
0.0.1 2022 年 3 月 23 日

#45 in 密码学

Download history 1249/week @ 2024-05-04 6230/week @ 2024-05-11 14614/week @ 2024-05-18 20301/week @ 2024-05-25 26700/week @ 2024-06-01 13104/week @ 2024-06-08 11338/week @ 2024-06-15 5403/week @ 2024-06-22 3107/week @ 2024-06-29 24346/week @ 2024-07-06 33201/week @ 2024-07-13 34994/week @ 2024-07-20 37887/week @ 2024-07-27 25016/week @ 2024-08-03 49306/week @ 2024-08-10 43635/week @ 2024-08-17

每月下载量 158,419
用于 3 crates

MIT/Apache

2MB
37K SLoC

C2PA Rust 库

CI Latest Version docs.rs codecov

内容来源与真实性联盟 (C2PA) 通过制定技术标准来证明媒体内容的来源和历史(或来源),以应对网络中误导性信息的普遍存在。Adobe 和其他贡献者创建了 C2PA Rust 库,作为 内容真实性倡议开源发布 的一部分,于 2022 年 6 月发布。

关键特性

C2PA Rust 库(之前称为“Rust SDK”)实现了 C2PA 技术规范 的一个子集。

该库使桌面、移动或嵌入式应用程序能够

  • 创建和签署 C2PA 声明清单
  • 将清单嵌入某些文件格式中。
  • 解析和验证在特定文件格式中找到的清单。

该库支持几种常见的 C2PA 断言硬绑定

项目状态

这是项目的beta版本(版本0.x.x)。当有破坏性的API更改时,次要版本号(0.x.0)会递增,这种情况可能发生得比较频繁。

新API

库正在开发一个新API,最终将取代现有的读取和写入C2PA数据的方法。最终,它将支持所有语言绑定和构建环境。要使用此API,启用unstable_api功能;例如

c2pa = {version="0.33.1", features=["unstable_api"]}

新API专注于流式I/O,并支持以下结构

有关一些非正式的开发和使用说明,请参阅2024_API_NOTES.md

贡献和反馈

我们欢迎对这个项目的贡献。有关贡献、提供反馈以及关于正在进行的工作的信息,请参阅贡献

要求

库需要Rust版本1.74.0或更高版本。

支持的平台

库已经在以下操作系统上进行过测试

  • Windows(仅Intel)
  • MacOS(Intel和Apple硅)
  • Ubuntu Linux(64位Intel和ARM v8)
  • WebAssembly(Wasm)

支持的文件格式

扩展名 MIME类型
avi video/msvideovideo/x-msvideovideo/aviapplication/x-troff-msvideo
avif image/avif
c2pa application/x-c2pa-manifest-store
dng image/x-adobe-dng
heic image/heic
heif image/heif
jpgjpeg image/jpeg
m4a audio/mp4
mp4 video/mp4application/mp4
mov video/quicktime
png image/png
svg image/svg+xml
tiftiff image/tiff
wav audio/wav
webp image/webp
mp3 audio/mpeg
gif image/gif

使用方法

将此内容添加到您的Cargo.toml

[dependencies]
c2pa = "0.33.3"

如果您想读取或写入manifest文件,请将file_io依赖项添加到您的Cargo.tomladd_thumbnails功能将为JPEG和PNG文件生成缩略图。例如

c2pa = { version = "0.25.0", features = ["file_io", "add_thumbnails"] }

注意:如果您正在为WASM构建,请省略file_io依赖项。

箱子功能

Rust库箱子提供

  • file_io启用manifest生成、通过OpenSSL进行签名以及在各种文件格式中嵌入manifest。
  • add_thumbnails将自动为JPEG和PNG文件生成缩略图。(不再包含在file_io中)
  • serialize_thumbnails将二进制缩略图数据包含在Serde序列化输出中。
  • xmp_write启用使用dcterms:provenance字段更新嵌入的XMP。(需要xmp_toolkit。)
  • no_interleaved_io强制完全同步I/O;否则,库将使用线程I/O进行某些操作以提高性能。
  • fetch_remote_manifests启用验证步骤以检索外部引用的manifest存储。只有在没有嵌入的manifest存储以及没有同名的本地相邻.c2pa manifest存储文件时,才会检索外部manifest。
  • json_schemamake schema使用以生成表示ManifestStore数据结构的JSON模式文档。
  • psxxx_ocsp_stapling_experimental 这是一个演示功能,它将尝试从清单签名证书中列出的OCSP响应者获取OCSP数据。响应成为清单的一部分,并用于证明证书在签名时未被吊销。此功能仅针对PS256、PS384和PS512签名实现,并作为演示目的。
  • openssl_ffi_mutex 防止多个线程同时访问C OpenSSL库。(此库不是可重入的。)在多线程进程(如Cargo的测试运行器)中,这可能导致不可预测的行为。

示例代码

sdk/examples 目录中包含一些最小示例代码。在 client/client.rs 中提供了最富有教育意义的示例,展示了如何读取清单存储的内容,递归显示嵌套清单。

许可证

c2pa 包根据MIT许可证Apache许可证(版本2.0)的条款进行分发。

某些组件和依赖项以不同的条款进行许可;请查看每个包和组件的许可条款以获取详细信息。

夜间构建

在大多数情况下,您应通过crates.io发布的此包依赖。

Adobe团队通过nightly分支生成此包的夜间快照,我们使用该分支测试对上游依赖项的待定更改的影响。

您可能希望在我们的发布之前使用这些构建进行自己的测试,您可以通过以下Cargo.toml条目包含库

c2pa = { git = "https://github.com/contentauth/c2pa-rs.git", branch = "nightly", features = [...]}

此分支中的提交已修改sdk/Cargo.toml条目,其中包括类似于以下版本号的版本号

version = "0.25.3-nightly+2023-08-28-2f33ab3"

请注意,夜间发布中没有正式支持代码,但如果您发现任何问题,我们将非常欢迎收到包括此版本号的错误报告。

变更日志

有关从Git提交历史记录派生的详细更改,请参阅变更日志

依赖项

~31-51MB
~1M SLoC