pbkdf2 method
Implementation
Uint8List pbkdf2(
List<int> password, List<int> salt, int iterations, int length) {
final mac = crypto.Hmac(crypto.sha512, password);
final out = Uint8List(length);
final blocks = (length / 64).ceil();
for (var i = 1; i <= blocks; i++) {
var u = mac.convert([
...salt,
...Uint8List(4)..buffer.asByteData().setInt32(0, i, Endian.big)
]).bytes;
var t = Uint8List.fromList(u);
for (var j = 1; j < iterations; j++) {
u = mac.convert(u).bytes;
for (var k = 0; k < t.length; k++) t[k] ^= u[k];
}
final off = (i - 1) * 64;
out.setRange(off, off + min(64, length - off), t);
}
return out;
}