OTP generation and validation library.
- Implements RFC4226 and RFC6238
- Supports alphanumeric OTP generation
- Supports
HmacSha1
,HmacSha256
, andHmacSha512
digests
Note: HmacSha1
support is provided for RFC compliance.
It is recommended to use HmacSha256
or HmacSha512
for better security.
To use the rusotp
library for HOTP, follow these steps:
-
Add
rusotp
to yourCargo.toml
:[dependencies] rusotp = "0.2.0"
-
Import the necessary components in your Rust code:
use rusotp::{Algorithm, HOTP};
-
Create a new HOTP instance and generate an OTP:
const ALGORITHM: Algorithm = Algorithm::SHA256; const SECRET: &str = "12345678901234567890"; const LENGTH: u8 = 6; const COUNTER: u64 = 1; let hotp = HOTP::new(ALGORITHM, SECRET, LENGTH, 10).unwrap(); let otp = hotp.generate(COUNTER).unwrap(); println!("Generated OTP: {}", otp);
-
Verify an OTP:
let is_valid = hotp.verify("287082", COUNTER, 0).unwrap(); println!("Is OTP valid? {}", is_valid);
-
Generate a provisioning URI for use with OTP apps like Google Authenticator:
const ISSUER: &str = "MyService"; const NAME: &str = "[email protected]"; let uri = hotp.provisioning_uri(ISSUER, NAME, COUNTER).unwrap(); println!("Provisioning URI: {}", uri);
For more examples and detailed usage, refer to the documentation.
To use the rusotp
library, follow these steps:
-
Add
rusotp
to yourCargo.toml
:[dependencies] rusotp = "0.2.0"
-
Import the necessary components in your Rust code:
use rusotp::{Algorithm, TOTP};
-
Create a new TOTP instance and generate an OTP:
const ALGORITHM: Algorithm = Algorithm::SHA256; const SECRET: &str = "12345678901234567890"; const LENGTH: u8 = 6; const RADIX: u8 = 10; const INTERVAL: u8 = 30; let totp = TOTP::new(ALGORITHM, SECRET, LENGTH, RADIX, INTERVAL).unwrap(); let otp = totp.generate().unwrap(); println!("Generated OTP: {}", otp);
-
Verify an OTP:
let is_valid = totp.verify(&otp); println!("Is OTP valid? {}", is_valid);
-
Generate a provisioning URI for use with OTP apps like Google Authenticator:
const ISSUER: &str = "MyService"; const NAME: &str = "[email protected]"; let uri = totp.provisioning_uri(ISSUER, NAME).unwrap(); println!("Provisioning URI: {}", uri);
For more examples and detailed usage, refer to the documentation.
We welcome contributions to the rusotp project! Here are some ways you can help:
- Report Bugs: If you find a bug, please report it by opening an issue on GitHub.
- Suggest Features: If you have an idea for a new feature, please open an issue to discuss it.
- Submit Pull Requests: If you want to contribute code, follow these steps:
- Fork the repository (https://github.com/eendroroy/rusotp/fork)
- Create a new branch (
git checkout -b my-new-feature
) - Make your changes and commit them (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Open a Pull Request
Please make sure your contributions adhere to our Code of Conduct.