#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[non_exhaustive]
pub enum KdfAlgorithm {
Argon2id,
Pbkdf2,
ConcatKdf,
Kmac256,
}
impl core::fmt::Display for KdfAlgorithm {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
let detail = match self {
KdfAlgorithm::Argon2id => "Argon2id",
KdfAlgorithm::Pbkdf2 => "PBKDF2",
KdfAlgorithm::ConcatKdf => "Concat KDF",
KdfAlgorithm::Kmac256 => "KMAC256",
};
write!(f, "{detail}")
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[non_exhaustive]
pub enum KdfProfile {
Argon2idV1,
Argon2idV2,
Pbkdf2HmacSha256,
Pbkdf2HmacSha512,
JwaEcdhEsSha256,
Sp800185Kmac256,
}
impl core::fmt::Display for KdfProfile {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
let detail = match self {
KdfProfile::Argon2idV1 => "Argon2id v1",
KdfProfile::Argon2idV2 => "Argon2id v2",
KdfProfile::Pbkdf2HmacSha256 => "PBKDF2-HMAC-SHA-256",
KdfProfile::Pbkdf2HmacSha512 => "PBKDF2-HMAC-SHA-512",
KdfProfile::JwaEcdhEsSha256 => "JWA ECDH-ES Concat KDF SHA-256",
KdfProfile::Sp800185Kmac256 => "SP 800-185 KMAC256",
};
write!(f, "{detail}")
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[non_exhaustive]
pub enum KdfFailureKind {
InvalidSecretLength,
InvalidSaltLength,
InvalidOutputLength,
InvalidIterationCount,
InvalidParams,
DerivationFailed,
}
impl core::fmt::Display for KdfFailureKind {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
let detail = match self {
KdfFailureKind::InvalidSecretLength => "invalid secret length",
KdfFailureKind::InvalidSaltLength => "invalid salt length",
KdfFailureKind::InvalidOutputLength => "invalid output length",
KdfFailureKind::InvalidIterationCount => "invalid iteration count",
KdfFailureKind::InvalidParams => "invalid parameters",
KdfFailureKind::DerivationFailed => "derivation failed",
};
write!(f, "{detail}")
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[non_exhaustive]
pub enum HkdfHash {
Sha2_256,
Sha2_384,
Sha3_256,
}
impl core::fmt::Display for HkdfHash {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
let detail = match self {
HkdfHash::Sha2_256 => "SHA2-256",
HkdfHash::Sha2_384 => "SHA2-384",
HkdfHash::Sha3_256 => "SHA3-256",
};
write!(f, "{detail}")
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[non_exhaustive]
pub enum HkdfFailureKind {
InvalidIkmLength,
InvalidDomainTagLength,
InvalidDomainTagByte,
LengthOverflow,
InvalidOutputLength,
ExpandFailed,
}
impl core::fmt::Display for HkdfFailureKind {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
let detail = match self {
HkdfFailureKind::InvalidIkmLength => "invalid input key material length",
HkdfFailureKind::InvalidDomainTagLength => "invalid domain tag length",
HkdfFailureKind::InvalidDomainTagByte => "invalid domain tag byte",
HkdfFailureKind::LengthOverflow => "length overflow",
HkdfFailureKind::InvalidOutputLength => "invalid output length",
HkdfFailureKind::ExpandFailed => "expand failed",
};
write!(f, "{detail}")
}
}