Bcrypt.java

package sk.iway.iwcm.users.crypto;

import org.springframework.security.crypto.bcrypt.BCrypt;

import sk.iway.iwcm.Constants;
import sk.iway.iwcm.users.PasswordSecurityAlgorithm;

/**
 * Hashovanie hesiel pomocou bcrypt algoritmu
 */
public class Bcrypt implements PasswordSecurityAlgorithm {

    public String generateSalt() {
        return "bcrypt:" + BCrypt.gensalt(Constants.getInt("bcryptSaltRounds"));
    }

    public String calculateHash(String password, String salt) {
        //Check if salt does have prefix "bcrypt"
        if(salt.startsWith("bcrypt:"))
            return "bcrypt:" + BCrypt.hashpw(password, salt.replaceFirst("^bcrypt:", ""));
        else
            return "bcrypt:" + BCrypt.hashpw(password, salt);
    }

    public boolean isPasswordCorrect (String password, String salt, String hash) {
        //Check if hash does have prefix "bcrypt"
        if(hash.startsWith("bcrypt:"))
            return BCrypt.checkpw(password, hash.replaceFirst("^bcrypt:", ""));
        else
            return BCrypt.checkpw(password, hash);
    }
}