#[derive(Debug, PartialEq, Eq, Clone, Copy)]
#[repr(u16)]
pub enum CipherSuite {
#[cfg(aes_ctr)]
AesCtr128HmacSha256_80 = 0x0001,
#[cfg(aes_ctr)]
AesCtr128HmacSha256_64 = 0x0002,
#[cfg(aes_ctr)]
AesCtr128HmacSha256_32 = 0x0003,
AesGcm128Sha256 = 0x0004,
AesGcm256Sha512 = 0x0005,
}
impl std::fmt::Display for CipherSuite {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let str = match self {
#[cfg(aes_ctr)]
CipherSuite::AesCtr128HmacSha256_80 => "AesCtr128HmacSha256_80",
#[cfg(aes_ctr)]
CipherSuite::AesCtr128HmacSha256_64 => "AesCtr128HmacSha256_64",
#[cfg(aes_ctr)]
CipherSuite::AesCtr128HmacSha256_32 => "AesCtr128HmacSha256_32",
CipherSuite::AesGcm128Sha256 => "AesGcm128Sha256",
CipherSuite::AesGcm256Sha512 => "AesGcm256Sha512",
};
f.write_str(str)
}
}
impl CipherSuite {
pub const fn hash_len(&self) -> usize {
match self {
#[cfg(aes_ctr)]
CipherSuite::AesCtr128HmacSha256_80
| CipherSuite::AesCtr128HmacSha256_64
| CipherSuite::AesCtr128HmacSha256_32 => 32,
CipherSuite::AesGcm128Sha256 => 32,
CipherSuite::AesGcm256Sha512 => 64,
}
}
pub const fn key_len(&self) -> usize {
match self {
#[cfg(aes_ctr)]
CipherSuite::AesCtr128HmacSha256_80
| CipherSuite::AesCtr128HmacSha256_64
| CipherSuite::AesCtr128HmacSha256_32 => 48,
CipherSuite::AesGcm128Sha256 => 16,
CipherSuite::AesGcm256Sha512 => 32,
}
}
pub const fn nonce_len(&self) -> usize {
match self {
#[cfg(aes_ctr)]
CipherSuite::AesCtr128HmacSha256_80
| CipherSuite::AesCtr128HmacSha256_64
| CipherSuite::AesCtr128HmacSha256_32 => 12,
CipherSuite::AesGcm128Sha256 | CipherSuite::AesGcm256Sha512 => 12,
}
}
pub const fn auth_tag_len(&self) -> usize {
match self {
#[cfg(aes_ctr)]
CipherSuite::AesCtr128HmacSha256_80 => 10,
#[cfg(aes_ctr)]
CipherSuite::AesCtr128HmacSha256_64 => 8,
#[cfg(aes_ctr)]
CipherSuite::AesCtr128HmacSha256_32 => 4,
CipherSuite::AesGcm128Sha256 | CipherSuite::AesGcm256Sha512 => 16,
}
}
#[cfg(any(aes_ctr, test))]
pub const fn is_ctr_mode(&self) -> bool {
match self {
#[cfg(aes_ctr)]
CipherSuite::AesCtr128HmacSha256_80
| CipherSuite::AesCtr128HmacSha256_64
| CipherSuite::AesCtr128HmacSha256_32 => true,
CipherSuite::AesGcm128Sha256 | CipherSuite::AesGcm256Sha512 => false,
}
}
}