mls_spec/drafts/mls_extensions/
multi_credentials.rs

1use 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}