1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
// Copyright 2022 Adobe. All rights reserved.
// This file is licensed to you under the Apache License,
// Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
// or the MIT license (http://opensource.org/licenses/MIT),
// at your option.
// Unless required by applicable law or agreed to in writing,
// this software is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or
// implied. See the LICENSE-MIT and LICENSE-APACHE files for the
// specific language governing permissions and limitations under
// each license.
//! This library supports reading, creating, and embedding C2PA data
//! for a variety of asset types.
//!
//! Some functionality requires you to enable specific crate features,
//! as noted in the documentation.
//!
//! The library has a Builder/Reader API that focuses on simplicity
//! and stream support.
//!
//! ## Example: Reading a ManifestStore
//!
//! ```
//! # use c2pa::Result;
//! use c2pa::{assertions::Actions, Reader};
//!
//! # fn main() -> Result<()> {
//! let stream = std::fs::File::open("tests/fixtures/C.jpg")?;
//! let reader = Reader::from_stream("image/jpeg", stream)?;
//! println!("{}", reader.json());
//!
//! if let Some(manifest) = reader.active_manifest() {
//! let actions: Actions = manifest.find_assertion(Actions::LABEL)?;
//! for action in actions.actions {
//! println!("{}\n", action.action());
//! }
//! }
//! # Ok(())
//! # }
//! ```
//!
//! ## Example: Adding a Manifest to a file
//!
//! ```
//! # use c2pa::Result;
//! use std::path::PathBuf;
//!
//! use c2pa::{create_signer, Builder, SigningAlg};
//! use serde::Serialize;
//! use tempfile::tempdir;
//!
//! #[derive(Serialize)]
//! struct Test {
//! my_tag: usize,
//! }
//!
//! # fn main() -> Result<()> {
//! #[cfg(feature = "file_io")]
//! {
//! let mut builder = Builder::from_json(r#"{"title": "Test"}"#)?;
//! builder.add_assertion("org.contentauth.test", &Test { my_tag: 42 })?;
//!
//! // Create a ps256 signer using certs and key files
//! let signer = create_signer::from_files(
//! "tests/fixtures/certs/ps256.pub",
//! "tests/fixtures/certs/ps256.pem",
//! SigningAlg::Ps256,
//! None,
//! )?;
//!
//! // embed a manifest using the signer
//! std::fs::remove_file("../target/tmp/lib_sign.jpg"); // ensure the file does not exist
//! builder.sign_file(
//! &*signer,
//! "tests/fixtures/C.jpg",
//! "../target/tmp/lib_sign.jpg",
//! )?;
//! }
//! # Ok(())
//! # }
//! ```
/// The internal name of the C2PA SDK
pub const NAME: &str = "c2pa-rs";
/// The version of this C2PA SDK
pub const VERSION: &str = env!;
// Public modules
/// The assertions module contains the definitions for the assertions that are part of the C2PA specification.
/// The cose_sign module contains the definitions for the COSE signing algorithms.
/// The create_signer module contains the definitions for the signers that are part of the C2PA specification.
/// Cryptography primitives.
/// Dynamic assertions are a new feature that allows you to add assertions to a C2PA file as a part of the signing process.
/// The `identity` module provides support for the [CAWG identity assertion](https://cawg.io/identity).
/// The jumbf_io module contains the definitions for the JUMBF data in assets.
/// The settings module provides a way to configure the C2PA SDK.
/// Supports status tracking as defined in the C2PA Technical Specification.
/// The validation_results module contains the definitions for the validation results that are part of the C2PA specification.
/// The validation_status module contains the definitions for the validation status that are part of the C2PA specification.
// S2PA extensions — Streamplace's additions on top of the upstream C2PA SDK.
// (The ES256K signing alg and bare `.m4s` BMFF support are wired directly into
// the crypto/asset_handlers internals; these modules host the higher-level
// S2PA-specific surface.)
/// DID resolution and DID-document signing identity (did:key, did:plc, did:web).
/// ES256K (secp256k1) signer constructors that integrate with [`Signer`] /
/// [`CallbackSigner`].
/// DRISL-canonical CBOR helpers for DASL-compliant manifests.
///
/// See <https://github.com/n0-computer/dasl>.
// Public exports
pub use Relationship;
pub use ;
pub use ;
pub use ;
pub use ClaimGeneratorInfo;
// pub use dynamic_assertion::{
// AsyncDynamicAssertion, DynamicAssertion, DynamicAssertionContent, PartialClaim,
// };
pub use SigningAlg;
pub use ;
pub use ManifestPatchCallback;
pub use ;
pub use HashedUri;
pub use Ingredient;
pub use ;
pub use ;
pub use ;
pub use ManifestStore;
pub use ManifestStoreReport;
pub use Reader;
pub use ;
pub use RemoteSigner;
pub use ;
pub use format_from_path;
pub use ;
// Internal modules
pub
pub
pub
pub
pub
pub
pub
pub
pub
pub
pub
pub
pub
pub
pub
pub
pub
// TODO: Remove this when the feature is released (used in tests only for some builds now)
pub
pub
pub
pub
pub
pub use ;
compile_error!;
compile_error!;
compile_error!;