1use clap::Subcommand;
2use std::path::PathBuf;
3
4#[derive(Debug, Clone, clap::ValueEnum)]
5pub enum HashAlgorithmChoice {
6 Sha256,
7 Sha384,
8 Sha512,
9}
10
11impl HashAlgorithmChoice {
12 pub fn to_cose_algorithm(&self) -> atlas_c2pa_lib::cose::HashAlgorithm {
13 match self {
14 HashAlgorithmChoice::Sha256 => atlas_c2pa_lib::cose::HashAlgorithm::Sha256,
15 HashAlgorithmChoice::Sha384 => atlas_c2pa_lib::cose::HashAlgorithm::Sha384,
16 HashAlgorithmChoice::Sha512 => atlas_c2pa_lib::cose::HashAlgorithm::Sha512,
17 }
18 }
19}
20
21#[derive(Debug, Subcommand)]
22pub enum DatasetCommands {
23 Create {
25 #[arg(long = "paths", num_args = 1.., value_delimiter = ',')]
26 paths: Vec<PathBuf>,
27
28 #[arg(long = "ingredient-names", num_args = 1.., value_delimiter = ',')]
30 ingredient_names: Vec<String>,
31
32 #[arg(long = "name")]
34 name: String,
35
36 #[arg(long = "author-org")]
38 author_org: Option<String>,
39
40 #[arg(long = "author-name")]
42 author_name: Option<String>,
43
44 #[arg(long = "description")]
46 description: Option<String>,
47
48 #[arg(long = "linked-manifests")]
50 linked_manifests: Option<Vec<String>>,
51
52 #[arg(long = "key")]
54 key: Option<PathBuf>,
55
56 #[arg(long = "cert")]
58 cert: Option<PathBuf>,
59
60 #[arg(long = "fulcio", default_value = "false")]
62 fulcio: bool,
63
64 #[arg(long = "oidc-token")]
66 oidc_token: Option<String>,
67
68 #[arg(long = "hash-alg", value_enum, default_value = "sha384")]
70 hash_alg: HashAlgorithmChoice,
71
72 #[arg(long = "print")]
74 print: bool,
75
76 #[arg(long = "encoding", default_value = "json")]
78 encoding: String,
79
80 #[arg(long = "storage-type", default_value = "database")]
82 storage_type: Box<String>,
83
84 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
86 storage_url: Box<String>,
87
88 #[arg(long = "with-tdx", default_value = "false")]
90 with_tdx: bool,
91 },
92 List {
94 #[arg(long = "storage-type", default_value = "database")]
96 storage_type: Box<String>,
97
98 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
100 storage_url: Box<String>,
101 },
102 Verify {
103 #[arg(long = "id")]
105 id: String,
106 #[arg(long = "storage-type", default_value = "database")]
108 storage_type: Box<String>,
109
110 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
112 storage_url: Box<String>,
113 },
114}
115
116#[derive(Debug, Subcommand)]
117pub enum ModelCommands {
118 Create {
120 #[arg(long = "paths", num_args = 1.., value_delimiter = ',')]
122 paths: Vec<PathBuf>,
123
124 #[arg(long = "ingredient-names", num_args = 1.., value_delimiter = ',')]
126 ingredient_names: Vec<String>,
127
128 #[arg(long = "name")]
130 name: String,
131
132 #[arg(long = "author-org")]
134 author_org: Option<String>,
135
136 #[arg(long = "author-name")]
138 author_name: Option<String>,
139
140 #[arg(long = "description")]
142 description: Option<String>,
143
144 #[arg(long = "linked-manifests")]
146 linked_manifests: Option<Vec<String>>,
147
148 #[arg(long = "key")]
150 key: Option<PathBuf>,
151
152 #[arg(long = "cert")]
154 cert: Option<PathBuf>,
155
156 #[arg(long = "fulcio", default_value = "false")]
158 fulcio: bool,
159
160 #[arg(long = "oidc-token")]
162 oidc_token: Option<String>,
163
164 #[arg(long = "hash-alg", value_enum, default_value = "sha384")]
166 hash_alg: HashAlgorithmChoice,
167
168 #[arg(long = "print")]
170 print: bool,
171
172 #[arg(long = "encoding", default_value = "json")]
174 encoding: String,
175
176 #[arg(long = "format", default_value = "standalone")]
178 format: String,
179
180 #[arg(long = "storage-type", default_value = "database")]
182 storage_type: Box<String>,
183
184 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
186 storage_url: Box<String>,
187
188 #[arg(long = "with-tdx", default_value = "false")]
190 with_tdx: bool,
191 },
192 List {
194 #[arg(long = "storage-type", default_value = "database")]
196 storage_type: Box<String>,
197
198 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
200 storage_url: Box<String>,
201 },
202 Verify {
203 #[arg(long = "id")]
205 id: String,
206 #[arg(long = "storage-type", default_value = "database")]
208 storage_type: Box<String>,
209
210 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
212 storage_url: Box<String>,
213 },
214 LinkDataset {
215 #[arg(long = "model-id")]
217 model_id: String,
218
219 #[arg(long = "dataset-id")]
221 dataset_id: String,
222
223 #[arg(long = "storage-type", default_value = "database")]
225 storage_type: Box<String>,
226
227 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
229 storage_url: Box<String>,
230 },
231}
232
233#[derive(Subcommand)]
234pub enum ManifestCommands {
235 Link {
237 #[arg(short, long)]
239 source: String,
240
241 #[arg(short, long)]
243 target: String,
244
245 #[arg(long = "storage-type", default_value = "database")]
247 storage_type: Box<String>,
248
249 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
251 storage_url: Box<String>,
252 },
253
254 Show {
256 #[arg(short, long)]
258 id: String,
259
260 #[arg(long = "storage-type", default_value = "database")]
262 storage_type: Box<String>,
263
264 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
266 storage_url: Box<String>,
267 },
268
269 Validate {
271 #[arg(short, long)]
273 id: String,
274
275 #[arg(long = "storage-type", default_value = "database")]
277 storage_type: Box<String>,
278
279 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
281 storage_url: Box<String>,
282 },
283
284 VerifyLink {
286 #[arg(short, long)]
288 source: String,
289
290 #[arg(short, long)]
292 target: String,
293
294 #[arg(long = "storage-type", default_value = "database")]
296 storage_type: Box<String>,
297
298 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
300 storage_url: Box<String>,
301 },
302 Export {
304 #[arg(short, long)]
306 id: String,
307
308 #[arg(long = "storage-type", default_value = "database")]
310 storage_type: Box<String>,
311
312 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
314 storage_url: Box<String>,
315
316 #[arg(long = "encoding", default_value = "json")]
318 encoding: String,
319
320 #[arg(short, long)]
322 output: Option<String>,
323
324 #[arg(long = "max-depth", default_value = "10")]
326 max_depth: u32,
327 },
328}
329#[derive(Subcommand)]
331pub enum EvaluationCommands {
332 Create {
334 #[arg(long = "path")]
336 path: PathBuf,
337
338 #[arg(long = "name")]
340 name: String,
341
342 #[arg(long = "model-id")]
344 model_id: String,
345
346 #[arg(long = "dataset-id")]
348 dataset_id: String,
349
350 #[arg(long = "metrics", num_args = 1.., value_delimiter = ',')]
352 metrics: Vec<String>,
353
354 #[arg(long = "author-org")]
356 author_org: Option<String>,
357
358 #[arg(long = "author-name")]
360 author_name: Option<String>,
361
362 #[arg(long = "description")]
364 description: Option<String>,
365
366 #[arg(long = "key")]
368 key: Option<PathBuf>,
369
370 #[arg(long = "cert")]
372 cert: Option<PathBuf>,
373
374 #[arg(long = "fulcio", default_value = "false")]
376 fulcio: bool,
377
378 #[arg(long = "oidc-token")]
380 oidc_token: Option<String>,
381
382 #[arg(long = "hash-alg", value_enum, default_value = "sha384")]
384 hash_alg: HashAlgorithmChoice,
385
386 #[arg(long = "print")]
388 print: bool,
389
390 #[arg(long = "encoding", default_value = "json")]
392 encoding: String,
393
394 #[arg(long = "storage-type", default_value = "database")]
396 storage_type: Box<String>,
397
398 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
400 storage_url: Box<String>,
401 },
402
403 List {
405 #[arg(long = "storage-type", default_value = "database")]
407 storage_type: Box<String>,
408
409 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
411 storage_url: Box<String>,
412 },
413
414 Verify {
416 #[arg(long = "id")]
418 id: String,
419
420 #[arg(long = "storage-type", default_value = "database")]
422 storage_type: Box<String>,
423
424 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
426 storage_url: Box<String>,
427 },
428}
429
430#[derive(Subcommand)]
433pub enum CCAttestationCommands {
434 Show,
436 GetLaunchMeasurement,
438 VerifyLaunch {
440 #[arg(long = "host-platform", default_value = "gcp-tdx")]
442 host_platform: String,
443 },
444}
445
446#[derive(Debug, Subcommand)]
447pub enum SoftwareCommands {
448 Create {
450 #[arg(long = "paths", num_args = 1.., value_delimiter = ',')]
451 paths: Vec<PathBuf>,
452
453 #[arg(long = "ingredient-names", num_args = 1.., value_delimiter = ',')]
455 ingredient_names: Vec<String>,
456
457 #[arg(long = "name")]
459 name: String,
460
461 #[arg(long = "software-type")]
463 software_type: String,
464
465 #[arg(long = "version")]
467 version: Option<String>,
468
469 #[arg(long = "author-org")]
471 author_org: Option<String>,
472
473 #[arg(long = "author-name")]
475 author_name: Option<String>,
476
477 #[arg(long = "description")]
479 description: Option<String>,
480
481 #[arg(long = "linked-manifests")]
483 linked_manifests: Option<Vec<String>>,
484
485 #[arg(long = "key")]
487 key: Option<PathBuf>,
488
489 #[arg(long = "cert")]
491 cert: Option<PathBuf>,
492
493 #[arg(long = "fulcio", default_value = "false")]
495 fulcio: bool,
496
497 #[arg(long = "oidc-token")]
499 oidc_token: Option<String>,
500
501 #[arg(long = "hash-alg", value_enum, default_value = "sha384")]
503 hash_alg: HashAlgorithmChoice,
504
505 #[arg(long = "print")]
507 print: bool,
508
509 #[arg(long = "encoding", default_value = "json")]
511 encoding: String,
512
513 #[arg(long = "storage-type", default_value = "database")]
515 storage_type: Box<String>,
516
517 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
519 storage_url: Box<String>,
520
521 #[arg(long = "with-tdx", default_value = "false")]
523 with_tdx: bool,
524 },
525 List {
527 #[arg(long = "storage-type", default_value = "database")]
529 storage_type: Box<String>,
530
531 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
533 storage_url: Box<String>,
534 },
535 Verify {
537 #[arg(long = "id")]
539 id: String,
540 #[arg(long = "storage-type", default_value = "database")]
542 storage_type: Box<String>,
543
544 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
546 storage_url: Box<String>,
547 },
548 LinkModel {
550 #[arg(long = "software-id")]
552 software_id: String,
553
554 #[arg(long = "model-id")]
556 model_id: String,
557
558 #[arg(long = "storage-type", default_value = "database")]
560 storage_type: Box<String>,
561
562 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
564 storage_url: Box<String>,
565 },
566 LinkDataset {
568 #[arg(long = "software-id")]
570 software_id: String,
571
572 #[arg(long = "dataset-id")]
574 dataset_id: String,
575
576 #[arg(long = "storage-type", default_value = "database")]
578 storage_type: Box<String>,
579
580 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
582 storage_url: Box<String>,
583 },
584}
585
586#[derive(Debug, Subcommand)]
587pub enum RekorCommands {
588 Verify {
590 #[arg(long = "uuid")]
592 uuid: String,
593
594 #[arg(long = "manifest")]
596 manifest: PathBuf,
597
598 #[arg(long = "rekor-url", default_value = "https://rekor.sigstore.dev")]
600 rekor_url: String,
601 },
602 Get {
604 #[arg(long = "uuid")]
606 uuid: String,
607
608 #[arg(long = "rekor-url", default_value = "https://rekor.sigstore.dev")]
610 rekor_url: String,
611 },
612}
613
614#[derive(Debug, Subcommand)]
615pub enum PipelineCommands {
616 GenerateProvenance {
618 #[arg(long = "inputs", num_args = 1.., value_delimiter = ',')]
620 inputs: Vec<PathBuf>,
621
622 #[arg(long = "pipeline")]
624 pipeline: PathBuf,
625
626 #[arg(long = "products", num_args = 1.., value_delimiter = ',')]
628 products: Vec<PathBuf>,
629
630 #[arg(long = "key")]
632 key: Option<PathBuf>,
633
634 #[arg(long = "hash-alg", value_enum, default_value = "sha384")]
636 hash_alg: HashAlgorithmChoice,
637
638 #[arg(long = "print")]
640 print: bool,
641
642 #[arg(long = "encoding", default_value = "json")]
644 encoding: String,
645
646 #[arg(long = "storage-type", default_value = "local-fs")]
648 storage_type: Box<String>,
649
650 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
652 storage_url: Box<String>,
653
654 #[arg(long = "with-tdx", default_value = "false")]
656 with_tdx: bool,
657 },
658}