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;
}