#include "ies.h"
#include <iostream>
#include <vector>
-#include <openssl/ecdh.h>
#define SET_ERROR(string) \
sprintf(error, "%s %s:%d", (string), __FILE__, __LINE__)
cryptogram_t * ecies_encrypt(const ies_ctx_t *ctx, const unsigned char *data, size_t length, char *error) {
- const size_t block_length = EVP_CIPHER_block_size(ctx->cipher);
- const size_t mac_length = EVP_MD_size(ctx->md);
- cryptogram_t *cryptogram = NULL;
- unsigned char *envelope_key = NULL;
-
if (!ctx || !data || !length) {
SET_ERROR("Invalid arguments");
return NULL;
}
+ const size_t block_length = EVP_CIPHER_block_size(ctx->cipher);
+ const size_t mac_length = EVP_MD_size(ctx->md);
+ cryptogram_t *cryptogram = NULL;
+ unsigned char *envelope_key = NULL;
+
if (block_length == 0 || block_length > EVP_MAX_BLOCK_LENGTH) {
SET_ERROR("Derived block size is incorrect");
return NULL;
ies_ctx_t *create_context(EC_KEY *user_key)
{
- ies_ctx_t* ctx = (ies_ctx_t*) malloc(sizeof(ies_ctx_t));
- ctx->cipher = EVP_aes_128_cbc();
- ctx->md = EVP_sha1();
- ctx->kdf_md = EVP_sha1();
- ctx->stored_key_length = 33;
- ctx->user_key = user_key;
-
- return ctx;
+ try {
+ ies_ctx_t* ctx = new ies_ctx_t;
+ ctx->cipher = EVP_aes_128_cbc();
+ ctx->md = EVP_sha1();
+ ctx->kdf_md = EVP_sha1();
+ ctx->stored_key_length = 33;
+ ctx->user_key = user_key;
+ return ctx;
+ }
+ catch (const std::bad_alloc& e) {
+ printf("Error: %s in %s:%d\n", e.what(), __FILE__, __LINE__);
+ return NULL;
+ }
}