deriveSaltedPassword static method

Uint8List deriveSaltedPassword({
  1. required String secret,
  2. required String salt,
  3. required String kdf,
  4. required int iterations,
  5. int? memory,
  6. AuthenticationStringEncoding stringEncoding = AuthenticationStringEncoding.utf8,
})

Implementation

static Uint8List deriveSaltedPassword({
  required String secret,
  required String salt,
  required String kdf,
  required int iterations,
  int? memory,
  AuthenticationStringEncoding stringEncoding =
      AuthenticationStringEncoding.utf8,
}) {
  final secretBytes = Uint8List.fromList(
    CraAuthentication.encodeString(secret, stringEncoding: stringEncoding),
  );
  final saltBytes = Uint8List.fromList(base64.decode(salt));
  try {
    if (kdf == kdfArgon) {
      return deriveScramArgonSynchronously(
        password: secretBytes,
        salt: saltBytes,
        iterations: iterations,
        memory: memory ?? 100,
        keyLength: defaultKeyLength,
      );
    }
    if (kdf != kdfPbkdf2) {
      throw ArgumentError.value(kdf, 'kdf', 'unsupported SCRAM KDF');
    }
    final derivator = PBKDF2KeyDerivator(HMac(SHA256Digest(), 64))
      ..init(Pbkdf2Parameters(saltBytes, iterations, defaultKeyLength));
    return derivator.process(secretBytes);
  } finally {
    _clear(secretBytes);
    _clear(saltBytes);
  }
}