@@ -0,0 +1,1644 @@
+package ml.alternet.test.security.auth.hashers;%0A%0Aimport java.util.function.Predicate;%0A%0Aimport ml.alternet.security.auth.hashers.ModularCryptFormatHashers;%0Aimport ml.alternet.security.auth.hashers.impl.Argon2Hasher;%0A%0Apublic class Argon2Test extends CryptTestBase%3CArgon2Hasher, Argon2Hasher.Argon2Parts%3E %7B%0A%0A    String data%5B%5D%5B%5D = %7B // in CryptTestBase it is %5B %22PASSWORD%22, %22SALT%22, %22HASH%22 %5D%0A            // but for Argon2, the SALT can't be cut from the hash, because the hash length is a parameter%0A            %7B %22password%22, %22$argon2i$v=19$m=512,t=2,p=2$aI2R0hpDyLm3ltLa+1/rvQ$LqPKjd6n8yniKtAithoR7A%22,%0A            %22$argon2i$v=19$m=512,t=2,p=2$aI2R0hpDyLm3ltLa+1/rvQ$LqPKjd6n8yniKtAithoR7A%22 %7D,%0A%0A            %7B %22password%22, %22$argon2i$v=19$m=512,t=4,p=2$eM+ZMyYkpDRGaI3xXmuNcQ$c5DeJg3eb5dskVt1mDdxfw%22,%0A                %22$argon2i$v=19$m=512,t=4,p=2$eM+ZMyYkpDRGaI3xXmuNcQ$c5DeJg3eb5dskVt1mDdxfw%22%7D%0A%0A    %7D;%0A%0A    @Override%0A    protected String%5B%5D%5B%5D getData() %7B%0A        return this.data;%0A    %7D%0A%0A    @Override%0A    protected Predicate%3CString%5B%5D%3E acceptWrongCred() %7B%0A        return s -%3E true;%0A    %7D%0A%0A    @Override%0A    protected Argon2Hasher newHasher() %7B%0A        return (Argon2Hasher) ModularCryptFormatHashers.$argon2i$.get().build();%0A    %7D%0A%0A    @Override%0A    protected Argon2Hasher newHasher(String salt) %7B%0A        return (Argon2Hasher) mcf.resolve(salt).get().build();%0A    %7D%0A%0A    @Override%0A    protected boolean altAlgo() %7B%0A        return false;%0A    %7D%0A%0A    @Override%0A    protected String altCrypt(String plain, String salt) %7B%0A        return null;%0A    %7D%0A%0A    @Override%0A    protected boolean altCheck(String plain, String expected) %7B%0A        return false;%0A    %7D%0A%0A%7D%0A

Add Argon2 tests