23#include <core/exceptions/software.h>
24#include <netcomm/crypto/encrypt.h>
27# include <openssl/evp.h>
85 plain_buffer_length = 0;
87 crypt_buffer_length = 0;
106 plain_buffer = buffer;
107 plain_buffer_length = buffer_length;
125 if (plain_buffer_length == 0) {
130 EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new();
131 EVP_EncryptInit(ctx, EVP_aes_128_ecb(), key, iv);
132 size_t rv = plain_buffer_length + EVP_CIPHER_CTX_block_size(ctx);
133 EVP_CIPHER_CTX_free(ctx);
136 return plain_buffer_length;
148 crypt_buffer = buffer;
149 crypt_buffer_length = buffer_length;
159 if ((plain_buffer == NULL) || (plain_buffer_length == 0) || (crypt_buffer == NULL)
160 || (crypt_buffer_length == 0)) {
165 EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new();
166 if (!EVP_EncryptInit(ctx, EVP_aes_128_ecb(), key, iv)) {
167 EVP_CIPHER_CTX_free(ctx);
171 int outl = crypt_buffer_length;
172 if (!EVP_EncryptUpdate(ctx,
173 (
unsigned char *)crypt_buffer,
175 (
unsigned char *)plain_buffer,
176 plain_buffer_length)) {
177 EVP_CIPHER_CTX_free(ctx);
182 if (!EVP_EncryptFinal_ex(ctx, (
unsigned char *)crypt_buffer + outl, &plen)) {
183 EVP_CIPHER_CTX_free(ctx);
188 EVP_CIPHER_CTX_free(ctx);
195 throw Exception(
"Encryption support not available");
Base class for exceptions in Fawkes.
Message encryption failed.
MessageEncryptionException(const char *msg)
Constructor.
MessageEncryptor(const unsigned char *key, const unsigned char *iv)
Constructor.
~MessageEncryptor()
Empty destructor.
void set_plain_buffer(void *buffer, size_t buffer_length)
Set plain buffer.
void set_crypt_buffer(void *buffer, size_t buffer_length)
Set crypted buffer.
size_t recommended_crypt_buffer_size()
Get recommended crypted buffer size.
Expected parameter is missing.
Fawkes library namespace.