Class TOTPGenerator

java.lang.Object
com.bastiaanjansen.otp.OTPGenerator
com.bastiaanjansen.otp.TOTPGenerator

public class TOTPGenerator
extends OTPGenerator
Generates time-based one-time passwords
Author:
Bastiaan Jansen
See Also:
OTPGenerator
  • Constructor Details

    • TOTPGenerator

      public TOTPGenerator​(int passwordLength, java.time.Duration period, HMACAlgorithm algorithm, byte[] secret)
      Constructs generator with custom password length, time interval and hashing algorithm
      Parameters:
      passwordLength - number of digits for generated code in range 6...8
      period - time interval between new codes
      algorithm - HMAC hash algorithm used to hash data
      secret - used to generate hash
  • Method Details

    • generate

      public String generate() throws IllegalStateException
      Generate a time-based one-time password for current time interval instant
      Returns:
      generated TOTP code
      Throws:
      IllegalStateException - when code could not be generated
    • generate

      public String generate​(java.time.Instant instant) throws IllegalStateException
      Generate a time-based one-time password for a Java instant
      Parameters:
      instant - an instant
      Returns:
      generated TOTP code
      Throws:
      IllegalStateException - when code could not be generated
    • generate

      public String generate​(Date date) throws IllegalStateException
      Generate a time-based one-time password for a specific date
      Parameters:
      date - specific date
      Returns:
      generated TOTP code
      Throws:
      IllegalStateException - when code could not be generated
    • generate

      public String generate​(long secondsPast1970) throws IllegalArgumentException
      Generate a time-based one-time password for a specific time based on seconds past 1970
      Parameters:
      secondsPast1970 - seconds past 1970
      Returns:
      generated TOTP code
      Throws:
      IllegalArgumentException - when code could not be generated
    • verify

      public boolean verify​(String code)
      Checks whether a code is valid for a specific counter
      Parameters:
      code - an OTP code
      Returns:
      a boolean, true if code is valid, otherwise false
    • verify

      public boolean verify​(String code, int delayWindow)
      Checks whether a code is valid for a specific counter taking a delay window into account
      Parameters:
      code - an OTP code
      delayWindow - window in which a code can still be deemed valid
      Returns:
      a boolean, true if code is valid, otherwise false
    • getPeriod

      public java.time.Duration getPeriod()
    • getURI

      public URI getURI​(String issuer) throws URISyntaxException
      Create a OTPAuth URI for easy on-boarding with only an issuer
      Parameters:
      issuer - name
      Returns:
      generated OTPAuth URI
      Throws:
      URISyntaxException - when URI cannot be created
    • getURI

      public URI getURI​(String issuer, String account) throws URISyntaxException
      Create a OTPAuth URI for easy user on-boarding with an issuer and account name
      Parameters:
      issuer - name
      account - name
      Returns:
      generated OTPAuth URI
      Throws:
      URISyntaxException - when URI cannot be created