Remove _current methods

This commit is contained in:
Michael Pfaff 2023-05-09 23:59:40 -04:00
parent 542ed7c97f
commit 43c4eec067
Signed by: michael
GPG Key ID: CF402C4A012AA9D4
1 changed files with 18 additions and 57 deletions

View File

@ -69,7 +69,6 @@ use image::Luma;
use url::{Host, Url};
use hmac::Mac;
use std::time::{SystemTime, SystemTimeError, UNIX_EPOCH};
type HmacSha1 = hmac::Hmac<sha1::Sha1>;
type HmacSha256 = hmac::Hmac<sha2::Sha256>;
@ -129,11 +128,6 @@ impl Algorithm {
}
}
fn system_time() -> Result<u64, SystemTimeError> {
let t = SystemTime::now().duration_since(UNIX_EPOCH)?.as_secs();
Ok(t)
}
#[derive(Debug, Clone, Copy, Eq, Hash)]
#[cfg_attr(feature = "serde_support", derive(Serialize, Deserialize))]
pub struct TOTPRef<'a> {
@ -282,23 +276,9 @@ impl<'a> TOTPRef<'a> {
(step + 1) * self.step
}
/// Returns the timestamp of the first second of the next step
/// According to system time
pub fn next_step_current(&self) -> Result<u64, SystemTimeError> {
let t = system_time()?;
Ok(self.next_step(t))
}
/// Give the ttl (in seconds) of the current token
pub fn ttl(&self) -> Result<u64, SystemTimeError> {
let t = system_time()?;
Ok(self.step - (t % self.step))
}
/// Generate a token from the current system time
pub fn generate_current(&self) -> Result<String, SystemTimeError> {
let t = system_time()?;
Ok(self.generate(t))
/// Give the ttl (in seconds) of the token taken at the provided timestamp (also in seconds).
pub fn ttl(&self, time: u64) -> u64 {
self.step - (time % self.step)
}
/// Will check if token is valid given the provided timestamp in seconds, accounting [skew](struct.TOTP.html#structfield.skew)
@ -314,12 +294,6 @@ impl<'a> TOTPRef<'a> {
false
}
/// Will check if token is valid by current system time, accounting [skew](struct.TOTP.html#structfield.skew)
pub fn check_current(&self, token: &str) -> Result<bool, SystemTimeError> {
let t = system_time()?;
Ok(self.check(token, t))
}
/// Will return the base32 representation of the secret, which might be useful when users want to manually add the secret to their authenticator
pub fn get_secret_base32(&self) -> String {
base32::encode(
@ -508,23 +482,10 @@ impl TOTP {
self.as_ref().next_step(time)
}
/// Returns the timestamp of the first second of the next step
/// According to system time
/// Give the ttl (in seconds) of the token taken at the provided timestamp (also in seconds).
#[inline(always)]
pub fn next_step_current(&self) -> Result<u64, SystemTimeError> {
self.as_ref().next_step_current()
}
/// Give the ttl (in seconds) of the current token
#[inline(always)]
pub fn ttl(&self) -> Result<u64, SystemTimeError> {
self.as_ref().ttl()
}
/// Generate a token from the current system time
#[inline(always)]
pub fn generate_current(&self) -> Result<String, SystemTimeError> {
self.as_ref().generate_current()
pub fn ttl(&self, time: u64) -> u64 {
self.as_ref().ttl(time)
}
/// Will check if token is valid given the provided timestamp in seconds, accounting [skew](struct.TOTP.html#structfield.skew)
@ -533,12 +494,6 @@ impl TOTP {
self.as_ref().check(token, time)
}
/// Will check if token is valid by current system time, accounting [skew](struct.TOTP.html#structfield.skew)
#[inline(always)]
pub fn check_current(&self, token: &str) -> Result<bool, SystemTimeError> {
self.as_ref().check_current(token)
}
/// Will return the base32 representation of the secret, which might be useful when users want to manually add the secret to their authenticator
#[inline(always)]
pub fn get_secret_base32(&self) -> String {
@ -848,8 +803,15 @@ impl LabeledTOTP {
#[cfg(test)]
mod tests {
use std::time::{SystemTime, SystemTimeError, UNIX_EPOCH};
use super::*;
fn system_time() -> Result<u64, SystemTimeError> {
let t = SystemTime::now().duration_since(UNIX_EPOCH)?.as_secs();
Ok(t)
}
#[test]
#[cfg(feature = "gen_secret")]
fn default_values() {
@ -1092,7 +1054,7 @@ mod tests {
"constantoine@github.com".to_string(),
))
.unwrap();
assert!(totp.totp.ttl().is_ok());
totp.totp.ttl(system_time().unwrap());
}
#[test]
@ -1119,7 +1081,7 @@ mod tests {
.as_secs();
assert_eq!(
totp.generate(time).as_str(),
totp.generate_current().unwrap()
totp.generate(system_time().unwrap())
);
}
@ -1145,9 +1107,8 @@ mod tests {
fn checks_token_current() {
let totp = TOTP::new(Algorithm::SHA1, 6, 0, 1, "TestSecretSuperSecret".into()).unwrap();
assert!(totp
.check_current(&totp.generate_current().unwrap())
.unwrap());
assert!(!totp.check_current("bogus").unwrap());
.check(&totp.generate(system_time().unwrap()), system_time().unwrap()));
assert!(!totp.check("bogus", system_time().unwrap()));
}
#[test]
@ -1170,7 +1131,7 @@ mod tests {
fn next_step_current() {
let totp = TOTP::new(Algorithm::SHA1, 6, 1, 30, "TestSecretSuperSecret".into()).unwrap();
let t = system_time().unwrap();
assert!(totp.next_step_current().unwrap() == totp.next_step(t));
assert!(totp.next_step(system_time().unwrap()) == totp.next_step(t));
}
#[test]