decodePpkPrivateKey static method

Uint8List decodePpkPrivateKey(
  1. List<int> encryptedPrivateKey,
  2. String password
)

This method takes a encryptedPrivateKey and decrypts it by useing the provided password.

Implementation

static Uint8List decodePpkPrivateKey(
  List<int> encryptedPrivateKey,
  String password,
) {
  var encryptedPrivateKeyList = Uint8List.fromList(encryptedPrivateKey);
  var key = Uint8List(40);
  SHA1Digest()
    ..update(Uint8List(4), 0, 4)
    ..update(
      Uint8List.fromList(password.codeUnits),
      0,
      password.codeUnits.length,
    )
    ..doFinal(key, 0);
  SHA1Digest()
    ..update(Uint8List(4)..[3] = 1, 0, 4)
    ..update(
      Uint8List.fromList(password.codeUnits),
      0,
      password.codeUnits.length,
    )
    ..doFinal(key, 20);

  final cbcBlockCipher = CBCBlockCipher(AESEngine())
    ..init(
      false,
      ParametersWithIV(KeyParameter(key.sublist(0, 32)), Uint8List(16)),
    );
  final seed = Uint8List(encryptedPrivateKeyList.length);
  var offset = 0;
  while (offset < encryptedPrivateKeyList.length) {
    offset += cbcBlockCipher.processBlock(
      encryptedPrivateKeyList,
      offset,
      seed,
      offset,
    );
  }
  assert(offset == encryptedPrivateKeyList.length);
  return seed;
}