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