use hmac_sha1_compact::HMAC; pub const INTERVAL: u64 = 30; pub fn generate_otp_token(private_key: &[u8], actual_time: u64) -> u32 { let interval = actual_time / INTERVAL; let msg = interval.to_be_bytes(); let hmac_digest = HMAC::mac(&msg, private_key); let start = (hmac_digest[19] & 0xF) as usize; let bytes: [u8; 4] = hmac_digest[start..start + 4].try_into().unwrap(); let raw_token = u32::from_be_bytes(bytes); ((raw_token & 0x7F_FF_FF_FF) % 1_000_000) as u32 }