verify method
Implementation
@override
Future<bool> verify(Nip01Event event) async {
// Check if signature is present
if (event.sig == null) {
return false;
}
// Convert strings to native pointers
final eventIdPtr = event.id.toNativeUtf8();
final pubKeyPtr = event.pubKey.toNativeUtf8();
final contentPtr = event.content.toNativeUtf8();
final signaturePtr = event.sig!.toNativeUtf8();
// Prepare tags data
final tags = event.tags;
final tagsCount = tags.length;
// Calculate total number of strings across all tags
int totalStrings = 0;
for (final tag in tags) {
totalStrings += tag.length;
}
// Allocate arrays for tags
final tagsLengths = calloc<Uint32>(tagsCount == 0 ? 1 : tagsCount);
final tagsData =
calloc<Pointer<Utf8>>(totalStrings == 0 ? 1 : totalStrings);
try {
// Fill tag data
int stringIndex = 0;
for (int i = 0; i < tagsCount; i++) {
tagsLengths[i] = tags[i].length;
for (final element in tags[i]) {
tagsData[stringIndex] = element.toNativeUtf8();
stringIndex++;
}
}
// Call the native function
final result = rust_lib.verifyNostrEventNative(
eventIdPtr,
pubKeyPtr,
event.createdAt,
event.kind,
tagsData,
tagsLengths,
tagsCount,
contentPtr,
signaturePtr,
);
return result == 1;
} finally {
// Free all allocated memory
calloc.free(eventIdPtr);
calloc.free(pubKeyPtr);
calloc.free(contentPtr);
calloc.free(signaturePtr);
// Free tag string pointers
for (int i = 0; i < totalStrings; i++) {
calloc.free(tagsData[i]);
}
calloc.free(tagsData);
calloc.free(tagsLengths);
}
}