1mod crypto_box;
31mod keys;
32mod message;
33
34#[cfg(test)]
35mod tests;
36
37pub use keys::{SealingKey, UnsealingKey};
38pub use message::SealedMessage;
39use thiserror::Error;
40
41#[derive(Debug, Clone, Copy, PartialEq, Eq)]
46#[repr(u8)]
47enum IesScheme {
48 K256XChaCha20Poly1305 = 0,
49 X25519XChaCha20Poly1305 = 1,
50 K256AeadRpo = 2,
51 X25519AeadRpo = 3,
52}
53
54impl TryFrom<u8> for IesScheme {
55 type Error = IesError;
56 fn try_from(value: u8) -> Result<Self, Self::Error> {
57 match value {
58 0 => Ok(IesScheme::K256XChaCha20Poly1305),
59 1 => Ok(IesScheme::X25519XChaCha20Poly1305),
60 2 => Ok(IesScheme::K256AeadRpo),
61 3 => Ok(IesScheme::X25519AeadRpo),
62 _ => Err(IesError::UnsupportedScheme),
63 }
64 }
65}
66
67impl From<IesScheme> for u8 {
68 fn from(algo: IesScheme) -> Self {
69 algo as u8
70 }
71}
72
73impl core::fmt::Display for IesScheme {
74 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
75 write!(f, "{}", self.name())
76 }
77}
78
79impl IesScheme {
80 pub fn name(self) -> &'static str {
81 match self {
82 IesScheme::K256XChaCha20Poly1305 => "K256+XChaCha20-Poly1305",
83 IesScheme::X25519XChaCha20Poly1305 => "X25519+XChaCha20-Poly1305",
84 IesScheme::K256AeadRpo => "K256+AeadRpo",
85 IesScheme::X25519AeadRpo => "X25519+AeadRpo",
86 }
87 }
88}
89
90#[derive(Debug, Error)]
95pub enum IesError {
96 #[error("key agreement failed")]
97 KeyAgreementFailed,
98 #[error("encryption failed")]
99 EncryptionFailed,
100 #[error("decryption failed")]
101 DecryptionFailed,
102 #[error("invalid key size")]
103 InvalidKeySize,
104 #[error("invalid nonce")]
105 InvalidNonce,
106 #[error("ephemeral public key deserialization failed")]
107 EphemeralPublicKeyDeserializationFailed,
108 #[error("scheme mismatch")]
109 SchemeMismatch,
110 #[error("unsupported scheme")]
111 UnsupportedScheme,
112 #[error("failed to extract key material for encryption/decryption")]
113 FailedExtractKeyMaterial,
114 #[error("failed to construct the encryption/decryption key from the provided bytes")]
115 EncryptionKeyCreationFailed,
116}