Update for 85088c5
[novacoin.git] / src / ecies.cpp
index f2a86dd..3f8eaf7 100644 (file)
@@ -272,16 +272,16 @@ static int store_mac_tag(const ies_ctx_t *ctx, const unsigned char *envelope_key
 
 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;
@@ -556,12 +556,18 @@ unsigned char * ecies_decrypt(const ies_ctx_t *ctx, const cryptogram_t *cryptogr
 
 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__);
+// TODO: add checking to NULL where necessary
+      return NULL;
+    }
+}
\ No newline at end of file