nostr_core_lib/examples/input_detection.c

85 lines
2.6 KiB
C

/*
* Example: Input Type Detection
* Demonstrates nostr_detect_input_type() and nostr_decode_nsec()
*/
#include <stdio.h>
#include <stdlib.h>
#include "nostr_core.h"
int main() {
printf("=== NOSTR Input Type Detection Example ===\n\n");
// Initialize the library
if (nostr_init() != NOSTR_SUCCESS) {
fprintf(stderr, "Failed to initialize NOSTR library\n");
return 1;
}
// Test various input types
const char* test_inputs[] = {
// Mnemonic
"abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about",
// Hex nsec (64 chars)
"5dab087e624a8a4b79e17f8b83800ee66f3bb1292618b6fd1c2f8b27ff88e0eb",
// Bech32 nsec
"nsec1tkks0lxyf9x2jetlzluxsqqwudlnwvef9xx2muxvt7tsh7lgmrhqvfmaqg",
// Invalid input
"not-a-valid-input",
// Empty string
""
};
const char* type_names[] = {
"UNKNOWN",
"MNEMONIC",
"HEX_NSEC",
"BECH32_NSEC"
};
int num_tests = sizeof(test_inputs) / sizeof(test_inputs[0]);
for (int i = 0; i < num_tests; i++) {
printf("Test %d:\n", i + 1);
printf("Input: \"%s\"\n", test_inputs[i]);
// Detect input type
nostr_input_type_t type = nostr_detect_input_type(test_inputs[i]);
printf("Detected Type: %s\n", type_names[type]);
// Try to decode if it's an nsec
if (type == NOSTR_INPUT_NSEC_HEX || type == NOSTR_INPUT_NSEC_BECH32) {
unsigned char private_key[NOSTR_PRIVATE_KEY_SIZE];
int result = nostr_decode_nsec(test_inputs[i], private_key);
if (result == NOSTR_SUCCESS) {
// Convert back to hex and bech32 to verify
char private_hex[NOSTR_HEX_KEY_SIZE];
char nsec_bech32[NOSTR_BECH32_KEY_SIZE];
nostr_bytes_to_hex(private_key, NOSTR_PRIVATE_KEY_SIZE, private_hex);
nostr_key_to_bech32(private_key, "nsec", nsec_bech32);
printf("✓ Successfully decoded nsec!\n");
printf(" Hex format: %s\n", private_hex);
printf(" Bech32 format: %s\n", nsec_bech32);
} else {
printf("✗ Failed to decode nsec: %s\n", nostr_strerror(result));
}
}
printf("\n");
}
// Cleanup
nostr_cleanup();
printf("✓ Example completed successfully!\n");
printf("💡 Input detection helps handle different key formats automatically\n");
return 0;
}