Example usage for org.bouncycastle.crypto.generators SCrypt generate

List of usage examples for org.bouncycastle.crypto.generators SCrypt generate

Introduction

In this page you can find the example usage for org.bouncycastle.crypto.generators SCrypt generate.

Prototype

public static byte[] generate(byte[] P, byte[] S, int N, int r, int p, int dkLen) 

Source Link

Document

Generate a key using the scrypt key derivation function.

Usage

From source file:org.springframework.security.crypto.scrypt.SCryptPasswordEncoder.java

License:Apache License

private boolean decodeAndCheckMatches(CharSequence rawPassword, String encodedPassword) {
    String[] parts = encodedPassword.split("\\$");

    if (parts.length != 4) {
        return false;
    }/*from w w w . java  2  s.  c  o  m*/

    long params = Long.parseLong(parts[1], 16);
    byte[] salt = decodePart(parts[2]);
    byte[] derived = decodePart(parts[3]);

    int cpuCost = (int) Math.pow(2, params >> 16 & 0xffff);
    int memoryCost = (int) params >> 8 & 0xff;
    int parallelization = (int) params & 0xff;

    byte[] generated = SCrypt.generate(Utf8.encode(rawPassword), salt, cpuCost, memoryCost, parallelization,
            keyLength);

    if (derived.length != generated.length) {
        return false;
    }

    int result = 0;
    for (int i = 0; i < derived.length; i++) {
        result |= derived[i] ^ generated[i];
    }
    return result == 0;
}

From source file:org.springframework.security.crypto.scrypt.SCryptPasswordEncoder.java

License:Apache License

private String digest(CharSequence rawPassword, byte[] salt) {
    byte[] derived = SCrypt.generate(Utf8.encode(rawPassword), salt, cpuCost, memoryCost, parallelization,
            keyLength);//  w w  w  . java  2  s . co m

    String params = Long
            .toString(((int) (Math.log(cpuCost) / Math.log(2)) << 16L) | memoryCost << 8 | parallelization, 16);

    StringBuilder sb = new StringBuilder((salt.length + derived.length) * 2);
    sb.append("$").append(params).append('$');
    sb.append(encodePart(salt)).append('$');
    sb.append(encodePart(derived));

    return sb.toString();
}

From source file:org.xwiki.crypto.password.internal.kdf.BcScryptKDF.java

License:Open Source License

@Override
public KeyParameter derive(byte[] password) {
    return new KeyParameter(SCrypt.generate(password, parameters.getSalt(), parameters.getCostParameter(),
            parameters.getBlockSize(), parameters.getParallelizationParameter(), getKeySize()));
}

From source file:org.xwiki.crypto.password.internal.kdf.BcScryptKDF.java

License:Open Source License

@Override
public KeyWithIVParameters derive(byte[] password, int ivSize) {
    int keySize = getKeySize();
    byte[] keyIV = SCrypt.generate(password, parameters.getSalt(), parameters.getCostParameter(),
            parameters.getBlockSize(), parameters.getParallelizationParameter(), keySize + ivSize);

    byte[] key = new byte[keySize];
    System.arraycopy(keyIV, 0, key, 0, keySize);

    byte[] iv = new byte[ivSize];
    System.arraycopy(keyIV, keySize, iv, 0, ivSize);

    return new KeyWithIVParameters(key, iv);
}

From source file:xyz.jamescarroll.genipass.Crypto.ECKey.java

License:Open Source License

/**
 * Calculates the master extended private key using SCrypt.
 *
 * @param u RIPEMD-160 hash of the username.
 * @param p RIPEMD-160 hash of the master password.
 * @return the SCrypt digest/*from w  w  w.j  a v a  2  s .  c o  m*/
 */

private static byte[] calcMasterExtPrivateKey(BigInteger u, BigInteger p) {
    return SCrypt.generate((u.toString() + p.toString()).getBytes(), (u.xor(p)).toByteArray(),
            (int) Math.pow(2, 16), 8, 2, 64);
}