decrypt function

Future decrypt(
  1. dynamic data,
  2. dynamic pair, [
  3. DefaultAESDecryptKey? opt
])

Implementation

Future<TTValue> decrypt(dynamic data, dynamic pair,
    [DefaultAESDecryptKey? opt]) async {
  opt ??= DEFAULT_OPTS;
  final json = parse(data);
  final encoding = opt.encode ?? DEFAULT_OPTS.encode;

  final key = pair is PairReturnType ? pair.epriv : pair;

  try {
    final aeskey = await importAesKey(key, base64Decode(json['s']).buffer,
        DefaultAESKey.from(name: opt.name));

    final encrypted = base64Decode(json['ct']);

    final iv = base64Decode(json['iv']);
    final ct = await aeskey.decryptBytes(encrypted, iv, tagLength: 128);
    return parse(Shims.textDecoder(ct));
  } catch (e) {
    _debugLog('decrypt error: ${e.toString()}');
    if (opt.fallback == null || encoding == opt.fallback) {
      throw ('Could not decrypt');
    }
    return decrypt(
        data,
        pair,
        DefaultAESDecryptKey.from(
            encode: opt.fallback, name: opt.name, fallback: opt.fallback));
  }
}