Skip to main content

cesr/core/primitives/
mod.rs

1#[cfg(feature = "alloc")]
2#[allow(
3    unused_imports,
4    reason = "alloc prelude items; subset used per cfg/feature combination"
5)]
6use alloc::vec;
7/// ISO-8601 datetime primitive encoded as CESR Matter.
8pub mod dater;
9/// Unsigned integer primitive with automatic CESR code selection.
10pub mod number;
11/// Sequence number primitive wrapping [`Number`].
12pub mod seqner;
13/// Indexed signature primitive with optional verfer attachment.
14pub mod siger;
15use crate::core::matter::code::{
16    DigestCode, LabelerCode, NoncerCode, SeedCode, SignatureCode, TexterCode, VerKeyCode,
17    VerserCode,
18};
19use crate::core::matter::matter::Matter;
20
21pub use dater::Dater;
22pub use number::Number;
23pub use seqner::Seqner;
24pub use siger::Siger;
25
26/// Verification key — can verify signatures
27pub type Verfer<'a> = Matter<'a, VerKeyCode>;
28
29/// Digest — holds a hash value
30pub type Diger<'a> = Matter<'a, DigestCode>;
31
32/// Signing key seed — can produce signatures (actual crypto in cesr-crypto)
33pub type Signer<'a> = Matter<'a, SeedCode>;
34
35/// Non-indexed signature
36pub type Cigar<'a> = Matter<'a, SignatureCode>;
37
38/// Self-addressing identifier (SAID) — a digest used as a content identifier
39pub type Saider<'a> = Matter<'a, DigestCode>;
40
41/// AID prefix — a verification key used as an autonomic identifier
42pub type Prefixer<'a> = Matter<'a, VerKeyCode>;
43
44/// Version primitive — encodes protocol/genus version info
45pub type Verser<'a> = Matter<'a, VerserCode>;
46
47/// Nonce/UUID primitive — salt, digest, or empty
48pub type Noncer<'a> = Matter<'a, NoncerCode>;
49
50/// Label primitive — field name or tag
51pub type Labeler<'a> = Matter<'a, LabelerCode>;
52
53/// Text primitive — variable-length byte string
54pub type Texter<'a> = Matter<'a, TexterCode>;
55
56#[cfg(test)]
57mod tests {
58    use super::*;
59    use crate::core::matter::code::{DigestCode, VerKeyCode};
60    use alloc::borrow::Cow;
61
62    #[test]
63    fn verfer_is_matter_with_verkey_code() {
64        let code = VerKeyCode::Ed25519;
65        let raw = vec![0u8; 32];
66        let verfer: Verfer<'_> =
67            crate::core::matter::matter::Matter::new(code, Cow::Owned(raw), Cow::from(""));
68        assert_eq!(*verfer.code(), VerKeyCode::Ed25519);
69    }
70
71    #[test]
72    fn saider_is_matter_with_digest_code() {
73        let code = DigestCode::Blake3_256;
74        let raw = vec![0u8; 32];
75        let saider: Saider<'_> =
76            crate::core::matter::matter::Matter::new(code, Cow::Owned(raw), Cow::from(""));
77        assert_eq!(*saider.code(), DigestCode::Blake3_256);
78    }
79
80    #[test]
81    fn prefixer_is_matter_with_verkey_code() {
82        let code = VerKeyCode::Ed25519;
83        let raw = vec![0u8; 32];
84        let prefixer: Prefixer<'_> =
85            crate::core::matter::matter::Matter::new(code, Cow::Owned(raw), Cow::from(""));
86        assert_eq!(*prefixer.code(), VerKeyCode::Ed25519);
87    }
88}