externalAuthenticate method

Future<Uint8List> externalAuthenticate({
  1. required Uint8List data,
  2. required int ne,
  3. int cla = ISO7816_CLA.NO_SM,
})

Sends EXTERNAL AUTHENTICATE command to ICC. ICC should return it's computed authentication data. Can throw ICCError or ComProviderError.

Implementation

Future<Uint8List> externalAuthenticate(
    {required Uint8List data,
    required int ne,
    int cla = ISO7816_CLA.NO_SM}) async {
  print('🔐 EXTERNAL AUTHENTICATE input:');
  print('  ➤ CLA: 0x${cla.toRadixString(16)}');
  print('  ➤ Data (Eifd + MAC): ${data.length} bytes → ${data.hex()}');
  print('  ➤ Ne: $ne');

  final rapdu = await _transceive(CommandAPDU(
      cla: cla,
      ins: ISO7816_INS.EXTERNAL_AUTHENTICATE,
      p1: 0x00,
      p2: 0x00,
      data: data,
      ne: ne));
  if (rapdu.status != StatusWord.success) {
    throw ICCError("External authenticate failed", rapdu.status, rapdu.data);
  }
  return rapdu.data!;
}