mls_spec/drafts/mls_extensions/
multi_credentials.rs1use crate::{
2 SensitiveBytes,
3 credential::Credential,
4 crypto::{SignaturePublicKey, SignaturePublicKeyRef},
5 defs::CiphersuiteId,
6};
7
8pub const MULTI_CREDENTIAL: u16 = 0x0003;
9pub const WEAK_MULTI_CREDENTIAL: u16 = 0x0004;
10
11#[derive(
12 Debug,
13 Clone,
14 PartialEq,
15 Eq,
16 Hash,
17 tls_codec::TlsSerialize,
18 tls_codec::TlsDeserialize,
19 tls_codec::TlsSize,
20)]
21#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
22pub struct CredentialBinding {
23 pub cipher_suite: CiphersuiteId,
24 pub credential: Credential,
25 pub credential_key: SignaturePublicKey,
26 pub signature: SensitiveBytes,
27}
28
29#[derive(
30 Debug,
31 Clone,
32 PartialEq,
33 Eq,
34 Hash,
35 tls_codec::TlsSerialize,
36 tls_codec::TlsDeserialize,
37 tls_codec::TlsSize,
38)]
39#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
40pub struct MultiCredential {
41 pub bindings: Vec<CredentialBinding>,
42}
43
44#[derive(
45 Debug,
46 Clone,
47 PartialEq,
48 Eq,
49 Hash,
50 tls_codec::TlsSerialize,
51 tls_codec::TlsDeserialize,
52 tls_codec::TlsSize,
53)]
54#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
55pub struct WeakMultiCredential {
56 pub bindings: Vec<CredentialBinding>,
57}
58
59#[derive(Debug, Clone, PartialEq, Eq, tls_codec::TlsSerialize, tls_codec::TlsSize)]
60#[cfg_attr(feature = "serde", derive(serde::Serialize))]
61pub struct CredentialBindingTBS<'a> {
62 pub cipher_suite: &'a CiphersuiteId,
63 pub credential: &'a Credential,
64 pub credential_key: SignaturePublicKeyRef<'a>,
65 pub signature_key: SignaturePublicKeyRef<'a>,
66}