pub struct TOTP<T = Vec<u8>> {
pub algorithm: Algorithm,
pub digits: usize,
pub skew: u8,
pub step: u64,
pub secret: T,
}Expand description
TOTP holds informations as to how to generate an auth code and validate it. Its secret field is sensitive data, treat it accordingly
Fields
algorithm: AlgorithmSHA-1 is the most widespread algorithm used, and for totp pursposes, SHA-1 hash collisions are not a problem as HMAC-SHA-1 is not impacted. It’s also the main one cited in rfc-6238 even though the reference implementation permits the use of SHA-1, SHA-256 and SHA-512. Not all clients support other algorithms then SHA-1
digits: usizeThe number of digits composing the auth code. Per rfc-4226, this can oscilate between 6 and 8 digits
skew: u8Number of steps allowed as network delay. 1 would mean one step before current step and one step after are valids. The recommended value per rfc-6238 is 1. Anything more is sketchy, and anyone recommending more is, by definition, ugly and stupid
step: u64Duration in seconds of a step. The recommended value per rfc-6238 is 30 seconds
secret: TAs per rfc-4226 the secret should come from a strong source, most likely a CSPRNG. It should be at least 128 bits, but 160 are recommended
Implementations
Will create a new instance of TOTP with given parameters. See the doc for reference as to how to choose those values
Will generate a token according to the provided timestamp in seconds
Will check if token is valid by current time, accounting skew
Will return the base32 representation of the secret, which might be useful when users want to manually add the secret to their authenticator
Will generate a standard URL used to automatically add TOTP auths. Usually used with qr codes
Will return a qrcode to automatically add a TOTP as a base64 string. Needs feature qr to be enabled!
Errors
This will return an error in case the URL gets too long to encode into a QR code
It will also return an error in case it can’t encode the qr into a png. This shouldn’t happen unless either the qrcode library returns malformed data, or the image library doesn’t encode the data correctly
Trait Implementations
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error> where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error> where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Auto Trait Implementations
impl<T> RefUnwindSafe for TOTP<T> where
T: RefUnwindSafe,
impl<T> UnwindSafe for TOTP<T> where
T: UnwindSafe,
Blanket Implementations
Mutably borrows from an owned value. Read more
