tags:

views:

180

answers:

4

I have the following code:

#include <openssl/bn.h>
#include <openssl/rsa.h>

unsigned char* key;
RSA* rsa = RSA_new();
rsa = RSA_generate_key(1024,65537,NULL,NULL);
//init pubkey
key[BN_num_bytes(rsa->n)] = '\0';
BN_bn2bin(rsa->n, key);
printf("RSA Pub: %s\n", key);
RSA_free( rsa );
rsa = NULL;

The debugger is telling me that I have an issue "Access violation writing location" on the line

key[BN_num_bytes(rsa->n)] = '\0';

If I comment out that line the issue just moves down to

BN_bn2bin(rsa->n, key);

any suggestions on how to fix this issue would be great.

+1  A: 

You have an access violation because you try to assign key with the null terminator but you haven't allocated any memory for key. We would need to know what you are trying to accomplish.

JonH
+1  A: 

You aren't allocating any memory for the key -- the first time it's used is when you try to set an element to 0.

the_mandrill
+2  A: 

Since key is not pointing to anything and you have referenced it with array notation subscript, that is the source. How does key get the value. You are overwriting or trampling on some other memory block that is not yours hence the 'Access violation' as trapped by windows. Double check your code and make sure that the variable has been malloc'd or new'd.

As a side note, it is best for your sanity to declare it like this

unsigned char *key = NULL;

In that way if you try access key without it being malloc'd/new'd, you will get a memory exception error (which can easily be nailed down to this). Consider it makes debugging much easier.

Hope this helps, Best regards, Tom.

tommieb75
A: 

The correct solution to allocate the right amount of memory in this case is:

key = malloc(BN_num_bytes(rsa->n));
BN_bn2bin(rsa->n, key);
caf
His tag said C++, don't use malloc in C++.
JonH