use crate::TotpError;
pub fn assert_digits(digits: u8) -> Result<(), TotpError> {
if !(6..=8).contains(&digits) {
return Err(TotpError::InvalidDigits { digits });
}
Ok(())
}
pub fn assert_secret_length(secret: &[u8]) -> Result<(), TotpError> {
if secret.as_ref().len() < 16 {
return Err(TotpError::SecretTooShort {
bits: secret.as_ref().len() * 8,
});
}
Ok(())
}
#[cfg(feature = "otpauth")]
pub fn assert_account_name_valid(account_name: &str) -> Result<(), TotpError> {
if account_name.is_empty() {
return Err(TotpError::AccountNameNotSet);
}
if account_name.contains(':') {
return Err(TotpError::InvalidAccountName {
account_name: account_name.into(),
});
}
Ok(())
}
#[cfg(feature = "otpauth")]
pub fn assert_issuer_valid(issuer: &Option<impl AsRef<str>>) -> Result<(), TotpError> {
if let Some(issuer) = issuer
&& issuer.as_ref().contains(':')
{
return Err(TotpError::InvalidIssuer {
issuer: issuer.as_ref().into(),
});
}
Ok(())
}