Skip to content

Latest commit

 

History

History
125 lines (88 loc) · 3.54 KB

README.md

File metadata and controls

125 lines (88 loc) · 3.54 KB

rusotp

OTP generation and validation library.

  • Implements RFC4226 and RFC6238
  • Supports alphanumeric OTP generation
  • Supports HmacSha1, HmacSha256, and HmacSha512 digests

Note: HmacSha1 support is provided for RFC compliance. It is recommended to use HmacSha256 or HmacSha512 for better security.

Usage HOTP

To use the rusotp library for HOTP, follow these steps:

  1. Add rusotp to your Cargo.toml:

    [dependencies]
    rusotp = "0.2.0"
  2. Import the necessary components in your Rust code:

    use rusotp::{Algorithm, HOTP};
  3. 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);
  4. Verify an OTP:

    let is_valid = hotp.verify("287082", COUNTER, 0).unwrap();
    println!("Is OTP valid? {}", is_valid);
  5. 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.

Usage TOTP

To use the rusotp library, follow these steps:

  1. Add rusotp to your Cargo.toml:

    [dependencies]
    rusotp = "0.2.0"
  2. Import the necessary components in your Rust code:

    use rusotp::{Algorithm, TOTP};
  3. 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);
  4. Verify an OTP:

    let is_valid = totp.verify(&otp);
    println!("Is OTP valid? {}", is_valid);
  5. 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.

Contributing

We welcome contributions to the rusotp project! Here are some ways you can help:

  1. Report Bugs: If you find a bug, please report it by opening an issue on GitHub.
  2. Suggest Features: If you have an idea for a new feature, please open an issue to discuss it.
  3. Submit Pull Requests: If you want to contribute code, follow these steps:
    1. Fork the repository (https://github.com/eendroroy/rusotp/fork)
    2. Create a new branch (git checkout -b my-new-feature)
    3. Make your changes and commit them (git commit -am 'Add some feature')
    4. Push to the branch (git push origin my-new-feature)
    5. Open a Pull Request

Please make sure your contributions adhere to our Code of Conduct.