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) {
129 #ifdef HAVE_LIBCRYPTO
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)) {
164 #ifdef HAVE_LIBCRYPTO
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");