#otp #hotp #totp #password

no-std minotp

Dead simple OTP library for Rust

2 stable releases

1.1.0 Feb 9, 2024
1.0.0 Feb 5, 2024
0.1.1 Feb 4, 2024
0.1.0 Feb 4, 2024

#855 in Cryptography

24 downloads per month

MIT/Apache

19KB
246 lines

minotp

GitHub Release

Dead simple OTP library for Rust.

License: MIT or Apache-2.0

Usage

Installation

Add minotp into your project.

cargo add minotp@1

Also all hash libraries you want (e.g., SHA1 of Rust Crypto).

cargo add sha1

TOTP (commonly used)

use minotp::*;
use sha1::Sha1;

let secret = b"test";

let totp = Totp::<Sha1>::from_bytes(secret, COMMON_INTERVAL).unwrap();

// Get remaining seconds
let _remaining_seconds = totp.remaining_sec();

// Get token as a 6-digit owned string
let _token = totp.gen_6_str();

// -- snip -- //

Use an encoding crate to decode a Base32 encoded secret if you have to deal with one.

For example, using data_encoding.

use data_encoding::BASE32;
use minotp::*;
use sha1::Sha1;

let secret_base32_str = "ORSXG5A=";

let secret = BASE32.decode(secret_base32_str.as_bytes()).unwrap();

let totp = Totp::<Sha1>::from_bytes(&secret, COMMON_INTERVAL).unwrap();

let _token = totp.gen_6_str();

// -- snip -- //

Found any bug?

You must be kidding. Fire an issue right now if you found one!

Dependencies

~330–680KB
~13K SLoC