/* * NIP-04: Encrypted Direct Message * https://github.com/nostr-protocol/nips/blob/master/04.md */ #ifndef NOSTR_NIP004_H #define NOSTR_NIP004_H #include #ifdef __cplusplus extern "C" { #endif // NIP-04 constants // #define NOSTR_NIP04_MAX_PLAINTEXT_SIZE 65535 // NIP-04 Constants // #define NOSTR_NIP04_MAX_PLAINTEXT_SIZE 16777216 // 16MB // #define NOSTR_NIP04_MAX_ENCRYPTED_SIZE 22369621 // ~21.3MB (accounts for base64 overhead + IV) /** * NIP-04: Encrypt a message using ECDH + AES-256-CBC * * @param sender_private_key 32-byte sender private key * @param recipient_public_key 32-byte recipient public key (x-only) * @param plaintext Message to encrypt * @param output Buffer for encrypted output (format: "ciphertext?iv=iv_base64") * @param output_size Size of output buffer * @return NOSTR_SUCCESS on success, error code on failure */ int nostr_nip04_encrypt(const unsigned char* sender_private_key, const unsigned char* recipient_public_key, const char* plaintext, char* output, size_t output_size); /** * NIP-04: Decrypt a message using ECDH + AES-256-CBC * * @param recipient_private_key 32-byte recipient private key * @param sender_public_key 32-byte sender public key (x-only) * @param encrypted_data Encrypted message (format: "ciphertext?iv=iv_base64") * @param output Buffer for decrypted plaintext * @param output_size Size of output buffer * @return NOSTR_SUCCESS on success, error code on failure */ int nostr_nip04_decrypt(const unsigned char* recipient_private_key, const unsigned char* sender_public_key, const char* encrypted_data, char* output, size_t output_size); #ifdef __cplusplus } #endif #endif // NOSTR_NIP004_H