openmls/schedule/
errors.rs1use openmls_traits::types::CryptoError;
4use thiserror::Error;
5
6use crate::{
7 error::LibraryError,
8 schedule::psk::{PskType, ResumptionPskUsage},
9};
10
11#[derive(Error, Debug, PartialEq, Clone)]
13pub enum PskError {
14 #[error(transparent)]
16 LibraryError(#[from] LibraryError),
17 #[error("More than 2^16 PSKs were provided.")]
19 TooManyKeys,
20 #[error("The PSK could not be found in the store.")]
22 KeyNotFound,
23 #[error("Failed to write PSK storage.")]
25 Storage,
26 #[error("Type mismatch. Expected {allowed:?}, got {got:?}.")]
28 TypeMismatch {
29 allowed: Vec<PskType>,
31 got: PskType,
33 },
34 #[error("Usage mismatch. Expected either of `{allowed:?}`, got `{got:?}`.")]
36 UsageMismatch {
37 allowed: Vec<ResumptionPskUsage>,
39 got: ResumptionPskUsage,
41 },
42 #[error("Usage conflict. First found `{first:?}`, now additionally found `{second:?}`.")]
44 UsageConflict {
45 first: ResumptionPskUsage,
47 second: ResumptionPskUsage,
49 },
50 #[error("Usage duplicate. Found two resumption PSKs with usage `{usage:?}`.")]
52 UsageDuplicate {
53 usage: ResumptionPskUsage,
55 },
56 #[error("Nonce length mismatch. Expected either of `{expected:?}`, got `{got:?}`.")]
58 NonceLengthMismatch {
59 expected: usize,
61 got: usize,
63 },
64}
65
66#[derive(Error, Debug, PartialEq, Clone)]
70pub(crate) enum ErrorState {
71 #[error("Expected to be in initial state.")]
73 Init,
74 #[error("Expected to be in epoch state.")]
76 Context,
77}
78
79#[derive(Error, Debug, PartialEq, Clone)]
81pub(crate) enum KeyScheduleError {
82 #[error(transparent)]
84 LibraryError(#[from] LibraryError),
85 #[error(transparent)]
87 InvalidState(#[from] ErrorState),
88 #[error(transparent)]
90 CryptoError(#[from] CryptoError),
91}
92
93#[cfg(any(feature = "test-utils", test))]
94#[derive(Error, Debug, PartialEq, Eq, Clone)]
96pub enum KsTestVectorError {
97 #[error("The computed joiner secret doesn't match the one in the test vector.")]
99 JoinerSecretMismatch,
100 #[error("The computed welcome secret doesn't match the one in the test vector.")]
102 WelcomeSecretMismatch,
103 #[error("The computed init secret doesn't match the one in the test vector.")]
105 InitSecretMismatch,
106 #[error("The group context doesn't match the one in the test vector.")]
108 GroupContextMismatch,
109 #[error("The computed sender data secret doesn't match the one in the test vector.")]
111 SenderDataSecretMismatch,
112 #[error("The computed encryption secret doesn't match the one in the test vector.")]
114 EncryptionSecretMismatch,
115 #[error("The computed exporter secret doesn't match the one in the test vector.")]
117 ExporterSecretMismatch,
118 #[error("The computed epoch authenticator doesn't match the one in the test vector.")]
120 EpochAuthenticatorMismatch,
121 #[error("The computed external secret doesn't match the one in the test vector.")]
123 ExternalSecretMismatch,
124 #[error("The computed confirmation key doesn't match the one in the test vector.")]
126 ConfirmationKeyMismatch,
127 #[error("The computed membership key doesn't match the one in the test vector.")]
129 MembershipKeyMismatch,
130 #[error("The computed resumption psk doesn't match the one in the test vector.")]
132 ResumptionPskMismatch,
133 #[error("The computed external public key doesn't match the one in the test vector.")]
135 ExternalPubMismatch,
136 #[error("The computed exporter secret doesn't match the on ein the test vector.")]
138 ExporterMismatch,
139}