#include "../include/Encryption.hpp" #include #include #include namespace odhtdb { void generateEncryptionKey(EncryptionKey *output) { if(!output) return; crypto_stream_xchacha20_keygen((unsigned char*)output); } int encrypt(EncryptedData *output, const EncryptionKey *key, const void *data, size_t dataSize) { if(!output || !key) return -1; if(dataSize == 0) return 0; output->data.resize(dataSize); randombytes_buf(output->nonce, NONCE_BYTE_SIZE); return crypto_stream_xchacha20_xor((unsigned char*)&output->data[0], (const unsigned char*)data, dataSize, (const unsigned char*)output->nonce, (const unsigned char*)key); } int decrypt(std::string *output, const EncryptionKey *key, const EncryptedData *encryptedData) { if(!encryptedData || !key || !output) return -1; if(encryptedData->data.empty()) return 0; output->resize(encryptedData->data.size()); return crypto_stream_xchacha20_xor((unsigned char*)&(*output)[0], (const unsigned char*)&encryptedData->data[0], encryptedData->data.size(), (const unsigned char*)encryptedData->nonce, (const unsigned char*)key); } }