decrypt function

Stream<List<int>> decrypt(
  1. Stream<List<int>> content,
  2. List<AgeKeyPair> keyPairs, {
  3. PassphraseProvider passphraseProvider = const PassphraseProvider(),
})

Implementation

Stream<List<int>> decrypt(Stream<List<int>> content, List<AgeKeyPair> keyPairs,
    {PassphraseProvider passphraseProvider =
        const PassphraseProvider()}) async* {
  final split = AgeStream(content);
  final header = await AgeHeader.parseContent(split,
      passphraseProvider: passphraseProvider);
  Uint8List? symmetricFileKey;
  _logger.fine(
      'We have ${keyPairs.length} keypairs and ${header.stanzas.length} stanzas');
  for (var keyPair in keyPairs) {
    for (var stanza in header.stanzas) {
      try {
        symmetricFileKey = await stanza.decryptedFileKey(keyPair);
      } catch (e) {
        _logger.info('Keypair was not valid for this stanza');
        //Ignore
      }
    }
  }
  if (symmetricFileKey == null) {
    throw Exception('Recipient not found');
  }
  await header.checkMac(symmetricFileKey);
  yield* _decryptPayload(split.payload.stream,
      symmetricFileKey: symmetricFileKey);
}