Package com.bastiaanjansen.otp
Class HOTP
- java.lang.Object
-
- com.bastiaanjansen.otp.HOTP
-
- All Implemented Interfaces:
HOTPGenerator,HOTPVerifier
public final class HOTP extends Object implements HOTPGenerator, HOTPVerifier
Generates counter-based one-time passwords- Author:
- Bastiaan Jansen
- See Also:
OTP
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classHOTP.Builder
-
Field Summary
Fields Modifier and Type Field Description protected HMACAlgorithmalgorithmHashing algorithm used to generate code, defaults to SHA1protected intpasswordLengthNumber of digits for generated code in range 6...8, defaults to 6protected byte[]secretSecret key used to generate the code, this should be a base32 string
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static HOTPfromURI(URI uri)Build a TOTPGenerator from an OTPAuth URIStringgenerate(long counter)Generate a counter-based one-time passwordHMACAlgorithmgetAlgorithm()intgetPasswordLength()byte[]getSecret()URIgetURI(int counter, String issuer)Create an OTPAuth URI for easy user on-boarding with only an issuerURIgetURI(int counter, String issuer, String account)Create an OTPAuth URI for easy user on-boarding with an issuer and account nameprotected URIgetURI(String type, String issuer, String account, Map<String,String> query)Generate an OTPAuth URIbooleanverify(String code, long counter)Checks whether a code is valid for a specific counter with a delay window of 0booleanverify(String code, long counter, int delayWindow)Checks whether a code is valid for a specific counter taking a delay window into accountstatic HOTPwithDefaultValues(byte[] secret)Create a com.bastiaanjansen.otp.HOTPGenerator with default values-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface com.bastiaanjansen.otp.HOTPVerifier
verify, verify
-
-
-
-
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 HOTP fromURI(URI uri) throws URISyntaxException
Build a TOTPGenerator from an OTPAuth URI- Parameters:
uri- OTPAuth URI- Returns:
- HOTP
- Throws:
URISyntaxException- when URI cannot be parsed
-
withDefaultValues
public static HOTP withDefaultValues(byte[] secret)
Create a com.bastiaanjansen.otp.HOTPGenerator with default values- Parameters:
secret- used to generate hash- Returns:
- a com.bastiaanjansen.otp.HOTPGenerator with default values
-
generate
public String generate(long counter) throws IllegalArgumentException
Generate a counter-based one-time password- Specified by:
generatein interfaceHOTPGenerator- Parameters:
counter- how many times time interval has passed since 1970- Returns:
- generated HOTP code
- Throws:
IllegalArgumentException- when code could not be generated
-
getURI
public URI getURI(int counter, String issuer) throws URISyntaxException
Create an OTPAuth URI for easy user on-boarding with only an issuer- Parameters:
counter- of URIissuer- name for URI- Returns:
- OTPAuth URI
- Throws:
URISyntaxException- when URI cannot be created
-
getURI
public URI getURI(int counter, String issuer, String account) throws URISyntaxException
Create an OTPAuth URI for easy user on-boarding with an issuer and account name- Parameters:
counter- of URIissuer- name for URIaccount- name for URI- Returns:
- OTPAuth URI
- Throws:
URISyntaxException- when URI cannot be created
-
getPasswordLength
public int getPasswordLength()
-
getAlgorithm
public HMACAlgorithm getAlgorithm()
-
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 codecounter- 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 codeecounter- how many times time interval has passed since 1970delayWindow- window in which a code can still be deemed valid- Returns:
- a boolean, true if code is valid, otherwise false
-
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 hotpissuer- name for URIaccount- name for URIquery- items of URI- Returns:
- created OTPAuth URI
- Throws:
URISyntaxException- when URI cannot be created
-
-