This is a JVM binding for Argon2.
With pre-compiled Argon2 libraries:
<dependency>
<groupId>de.mkammerer</groupId>
<artifactId>argon2-jvm</artifactId>
<version>2.4</version>
</dependency>
Without pre-compiled Argon2 libraries:
<dependency>
<groupId>de.mkammerer</groupId>
<artifactId>argon2-jvm-nolibs</artifactId>
<version>2.4</version>
</dependency>
With pre-compiled Argon2 libraries:
compile 'de.mkammerer:argon2-jvm:2.4'
Without pre-compiled Argon2 libraries:
compile 'de.mkammerer:argon2-jvm-nolibs:2.4'
This binding needs the Argon2 C library. Libraries for the following operation systems are included in argon2-jvm library:
- Linux x86
- Linux x86-64
- Linux ARM
- Linux ARM-64
- Windows x86
- Windows x86-64
- Darwin (OSX)
If you'd prefer to install/compile argon2 on your own you can use argon2-jvm-nolibs instead of argon2-jvm.
If you need help to build argon2, have a look at this documentation.
// Create instance
Argon2 argon2 = Argon2Factory.create();
// Read password from user
char[] password = readPasswordFromUser();
try {
// Hash password
String hash = argon2.hash(2, 65536, 1, password);
// Verify password
if (argon2.verify(hash, password)) {
// Hash matches password
} else {
// Hash doesn't match password
}
} finally {
// Wipe confidential data
argon2.wipeArray(password);
}
The recommended parameters for the hash
call above can be found in the whitepaper, section 9.
You can use the method Argon2Helper.findIterations
to find the optimal number of iterations on your system:
Argon2 argon2 = Argon2Factory.create();
// 1000 = The hash call must take at most 1000 ms
// 65536 = Memory cost
// 1 = parallelism
int iterations = Argon2Helper.findIterations(argon2, 1000, 65536, 1);
System.out.println("Optimal number of iterations: " + iterations);
This library uses JNA to communicate with the Argon2 C library.
Run ./gradlew clean build
to build and test the software.
Licensed under LGPL v3.
Moritz Kammerer (@phXql)
See contributors page.