mls_spec/drafts/
sd_cwt_credential.rs

1pub const CREDENTIAL_SD_CWT: u16 = 0x0005;
2pub const CREDENTIAL_SD_JWT: u16 = 0x0006;
3
4#[derive(
5    Debug,
6    Clone,
7    PartialEq,
8    Eq,
9    Hash,
10    tls_codec::TlsSize,
11    tls_codec::TlsSerialize,
12    tls_codec::TlsDeserialize,
13)]
14#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
15pub struct SdCwtCredential {
16    #[tls_codec(with = "crate::tlspl::bytes")]
17    pub sd_kbt: Vec<u8>,
18}
19
20#[derive(
21    Debug,
22    Clone,
23    PartialEq,
24    Eq,
25    Hash,
26    tls_codec::TlsSize,
27    tls_codec::TlsSerialize,
28    tls_codec::TlsDeserialize,
29)]
30#[cfg_attr(
31    feature = "serde",
32    derive(serde_repr::Serialize_repr, serde_repr::Deserialize_repr)
33)]
34#[repr(u8)]
35pub enum SdJwtCredentialCompacted {
36    Uncompacted = 0x00,
37    Compacted = 0x01,
38}
39
40#[derive(
41    Debug,
42    Clone,
43    PartialEq,
44    Eq,
45    Hash,
46    tls_codec::TlsSize,
47    tls_codec::TlsSerialize,
48    tls_codec::TlsDeserialize,
49)]
50#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
51pub struct SdJwtDisclosure {
52    #[tls_codec(with = "crate::tlspl::bytes")]
53    pub disclosure: Vec<u8>,
54}
55
56#[derive(
57    Debug,
58    Clone,
59    PartialEq,
60    Eq,
61    Hash,
62    tls_codec::TlsSize,
63    tls_codec::TlsSerialize,
64    tls_codec::TlsDeserialize,
65)]
66#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
67#[repr(u8)]
68pub enum SdJwtCredential {
69    #[tls_codec(discriminant = "SdJwtCredentialCompacted::Uncompacted")]
70    Uncompacted {
71        #[tls_codec(with = "crate::tlspl::bytes")]
72        sd_jwt_kb: Vec<u8>,
73    },
74    #[tls_codec(discriminant = "SdJwtCredentialCompacted::Compacted")]
75    Compacted {
76        #[tls_codec(with = "crate::tlspl::bytes")]
77        protected: Vec<u8>,
78        #[tls_codec(with = "crate::tlspl::bytes")]
79        payload: Vec<u8>,
80        #[tls_codec(with = "crate::tlspl::bytes")]
81        signature: Vec<u8>,
82        disclosures: Vec<SdJwtDisclosure>,
83        #[tls_codec(with = "crate::tlspl::bytes")]
84        sd_jwt_key_binding: Vec<u8>,
85    },
86}