hex2Bin method

Uint8List hex2Bin(
  1. String hexString
)

Implementation

Uint8List hex2Bin(String hexString) {
  final hexPointer = hexString.toNativeUtf8().cast<ffi.Char>();

  // Allocate memory for the binary data
  final binMaxLen = hexString.length ~/ 2;
  final binPointer = calloc<ffi.Uint8>(binMaxLen);
  final binLen = calloc<ffi.Size>();

  try {
    // Call sodium_hex2bin to perform the conversion
    final result = sodium_hex2bin(
      binPointer.cast<ffi.UnsignedChar>(),
      binMaxLen,
      hexPointer,
      hexString.length,
      ffi.nullptr,
      binLen,
      ffi.nullptr,
    );

    if (result == 0) {
      final binData = binPointer.asTypedList(binLen.value);

      // Clone the original list
      return Uint8List.fromList(List.from(binData));
    } else {
      f.debugPrint('[Lazysodium] Conversion hex2Bin failed.');
    }
    return Uint8List(0);
  } finally {
    // Free allocated memory
    calloc.free(binPointer);
    calloc.free(binLen);
    calloc.free(hexPointer);
  }
}