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
//! # attestix
//!
//! Offline verifier for credentials and delegation chains issued by the
//! [Attestix](https://attestix.io) Python core — **no Python runtime needed**.
//!
//! It reproduces the Attestix **JCS-style canonical form** byte-for-byte (see
//! [`canonicalize`]). This is **not** strict RFC 8785: Attestix additionally
//! NFC-normalizes every string value and object key, and collapses whole-number
//! floats to integers. See the canonical-form spec at
//! <https://attestix.io/spec/bundle/v1> and the conformance vectors at
//! `spec/verify/v1/vectors.json` in <https://github.com/VibeTensor/attestix>.
//!
//! ## Quick start
//!
//! ```no_run
//! use attestix::{verify_credential, parse_rfc3339};
//! use serde_json::Value;
//!
//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
//! let vc: Value = serde_json::from_str(r#"{ "...": "a full W3C VC JSON" }"#)?;
//! let now = parse_rfc3339("2026-06-01T00:00:00+00:00")?;
//! let result = verify_credential(&vc, now)?;
//! if result.verify() {
//! println!("credential is valid");
//! }
//! # Ok(())
//! # }
//! ```
//!
//! The crate is `no_std`-friendly for the canonicalization and crypto core (the
//! `std` default feature only adds `std::error::Error` and the JSON/JWT helpers).
pub use canonicalize;
pub use ;
pub use ;
pub use ;
pub use VerifyError;
use OffsetDateTime;
/// Parse an RFC 3339 / ISO 8601 timestamp (e.g. `2026-06-01T00:00:00+00:00`)
/// into an [`OffsetDateTime`] suitable for [`verify_credential`].
/// Re-export of [`time::OffsetDateTime`] so downstream crates need not depend on
/// `time` directly to call [`verify_credential`].
pub use OffsetDateTime as DateTime;