/*
 * NIP-04: Encrypted Direct Message
 * https://github.com/nostr-protocol/nips/blob/master/04.md
 */

#ifndef NOSTR_NIP004_H
#define NOSTR_NIP004_H

#include <stddef.h>

#ifdef __cplusplus
extern "C" {
#endif

// NIP-04 constants
// #define NOSTR_NIP04_MAX_PLAINTEXT_SIZE 1048576    // 1MB
// 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
