Class TOTP

    • Field Detail

      • passwordLength

        protected final int passwordLength
        Number of digits for generated code in range 6...8, defaults to 6
      • algorithm

        protected final HMACAlgorithm algorithm
        Hashing algorithm used to generate code, defaults to SHA1
      • secret

        protected final byte[] secret
        Secret key used to generate the code, this should be a base32 string
    • Method Detail

      • fromURI

        public static TOTP fromURI​(URI uri)
                            throws URISyntaxException
        Build a TOTPGenerator from an OTPAuth URI
        Parameters:
        uri - OTPAuth URI
        Returns:
        TOTP
        Throws:
        URISyntaxException - when URI cannot be parsed
      • withDefaultValues

        public static TOTP withDefaultValues​(byte[] secret)
        Create a TOTPGenerator with default values
        Parameters:
        secret - used to generate hash
        Returns:
        a TOTPGenerator with default values
      • at

        public String at​(long secondsPast1970)
                  throws IllegalArgumentException
        Generate a time-based one-time password for a specific time based on seconds past 1970
        Specified by:
        at in interface TOTPGenerator
        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
        Specified by:
        verify in interface TOTPVerifier
        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
        Specified by:
        verify in interface TOTPVerifier
        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 Duration getPeriod()
      • getPasswordLength

        public int getPasswordLength()
      • getSecret

        public byte[] getSecret()
      • verify

        public boolean verify​(String code,
                              long counter)
        Checks whether a code is valid for a specific counter with a delay window of 0
        Parameters:
        code - an OTP code
        counter - how many times time interval has passed since 1970
        Returns:
        a boolean, true if code is valid, otherwise false
      • verify

        public boolean verify​(String code,
                              long counter,
                              int delayWindow)
        Checks whether a code is valid for a specific counter taking a delay window into account
        Parameters:
        code - an OTP codee
        counter - how many times time interval has passed since 1970
        delayWindow - window in which a code can still be deemed valid
        Returns:
        a boolean, true if code is valid, otherwise false
      • generate

        protected String generate​(long counter)
                           throws IllegalStateException
        Generate a code
        Parameters:
        counter - how many times time interval has passed since 1970
        Returns:
        generated OTP code
        Throws:
        IllegalStateException - when hashing algorithm throws an error
      • getURI

        protected URI getURI​(String type,
                             String issuer,
                             String account,
                             Map<String,​String> query)
                      throws URISyntaxException
        Generate an OTPAuth URI
        Parameters:
        type - of OTPAuth URI: totp or hotp
        issuer - name for URI
        account - name for URI
        query - items of URI
        Returns:
        created OTPAuth URI
        Throws:
        URISyntaxException - when URI cannot be created