decryptJson method

Map<String, dynamic> decryptJson(
  1. String base64Data, [
  2. String? alternativeKey
])

Funcion Utilizada para desencriptar un json como opcional se puede enviar una clave alternativa alternativeKey si esta cumple con los requisitos de longitud la funcion va a utilizar esta nueva clave para encriptar el json, si este paramentro no se envia se utilizara la clave por defecto

Implementation

Map<String, dynamic> decryptJson(String base64Data,
    [String? alternativeKey]) {
  try {
    Uint8List? keyAlternative;
    if (alternativeKey != null) {
      keyAlternative = Uint8List.fromList(alternativeKey.codeUnits);
      validateKey(keyAlternative);
    }

    ///
    final ivAndCiphertext = base64Decode(base64Data);
    final iv = ivAndCiphertext.sublist(0, 12);
    final ciphertextWithMac = ivAndCiphertext.sublist(12);
    final gcmCipher = GCMBlockCipher(AESEngine());
    gcmCipher.init(
        false,
        AEADParameters(
            KeyParameter((keyAlternative == null) ? key : keyAlternative),
            128,
            iv,
            Uint8List(0))); // 128 bit MAC tag

    final plaintext = gcmCipher.process(ciphertextWithMac);
    return jsonDecode(utf8.decode(plaintext));
  } catch (error) {
    return {
      EnvironmentApiRest.dataNOk: false,
      EnvironmentApiRest.error: 'Error: $error'
    };
  }
}