- Add argon2 implementation - Extract argon2 library check to method on Argon 2 - Add link to Wiki page on errors - Check within Argon2Test if the test cases should be run, not in the abstract parent
49 lines
1.7 KiB
Java
49 lines
1.7 KiB
Java
package fr.xephi.authme.security.crypts;
|
|
|
|
import de.mkammerer.argon2.Argon2Constants;
|
|
import de.mkammerer.argon2.Argon2Factory;
|
|
import fr.xephi.authme.ConsoleLogger;
|
|
import fr.xephi.authme.security.crypts.description.HasSalt;
|
|
import fr.xephi.authme.security.crypts.description.Recommendation;
|
|
import fr.xephi.authme.security.crypts.description.SaltType;
|
|
import fr.xephi.authme.security.crypts.description.Usage;
|
|
|
|
@Recommendation(Usage.RECOMMENDED)
|
|
@HasSalt(value = SaltType.TEXT, length = Argon2Constants.DEFAULT_SALT_LENGTH)
|
|
// Note: Argon2 is actually a salted algorithm but salt generation is handled internally
|
|
// and isn't exposed to the outside, so we treat it as an unsalted implementation
|
|
public class Argon2 extends UnsaltedMethod {
|
|
|
|
private de.mkammerer.argon2.Argon2 argon2;
|
|
|
|
public Argon2() {
|
|
argon2 = Argon2Factory.create();
|
|
}
|
|
|
|
/**
|
|
* Checks if the argon2 library is available in java.library.path.
|
|
*
|
|
* @return true if the library is present, false otherwise
|
|
*/
|
|
public static boolean isLibraryLoaded() {
|
|
try {
|
|
System.loadLibrary("argon2");
|
|
return true;
|
|
} catch (UnsatisfiedLinkError e) {
|
|
ConsoleLogger.logException(
|
|
"Cannot find argon2 library: https://github.com/AuthMe/AuthMeReloaded/wiki/Argon2-as-Password-Hash", e);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public String computeHash(String password) {
|
|
return argon2.hash(2, 65536, 1, password);
|
|
}
|
|
|
|
@Override
|
|
public boolean comparePassword(String password, HashedPassword hashedPassword, String name) {
|
|
return argon2.verify(hashedPassword.getHash(), password);
|
|
}
|
|
}
|