package com.aperture_software.glados_wiki.support;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.shiro.crypto.RandomNumberGenerator;
import org.apache.shiro.crypto.SecureRandomNumberGenerator;
import org.apache.shiro.crypto.hash.Sha256Hash;
import org.apache.shiro.util.ByteSource;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Vector;
/**
* Created by jhyun on 13. 12. 24.
*/
@Component
public class Sha256 {
public static final int HASH_ITERATION = 1024;
private List<Byte> toBytes(final ByteSource byteSource) {
Vector<Byte> v = new Vector<Byte>();
for (byte b : byteSource.getBytes()) {
v.add(b);
}
return v;
}
public Pair<List<Byte>, String> getSaltAndHash(final String plainTextPassword) {
RandomNumberGenerator rng = new SecureRandomNumberGenerator();
final ByteSource salt = rng.nextBytes();
final String hashedPasswordBase64 = new Sha256Hash(plainTextPassword, salt, HASH_ITERATION).toBase64();
return new ImmutablePair<List<Byte>, String>(toBytes(salt), hashedPasswordBase64);
}
}