mls_spec/drafts/
sd_cwt_credential.rs1pub 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}