My problem is that when I do public encryption, the first time I run the
following piece of code, it works OK, but then when I run the program for
the second time, the EVP_SealInit function fails and returns -1.

I seed the random number generator before calling the following piece of
code.

EVP_CIPHER_CTX ctx; /* the context used for PK encryption */
EVP_CIPHER *cipher_type;
unsigned char **ek;
int *ekl;
unsigned char *iv;
EVP_PKEY **pubk;
int npubk;
int outl; /* length of encrypted data buffer */
RSA *pkey;


/* I load the public key from a file into 'pkey' */

EVP_CIPHER_CTX_init(&ctx);
cipher_type = EVP_bf_cbc();
npubk = 1;

ek = (unsigned char **) malloc (sizeof(unsigned char *) * npubk);
ekl = (int *) malloc (sizeof(int) * npubk);

pubk = (EVP_PKEY **) malloc (sizeof(EVP_PKEY *) * npubk);
pubk[0] = EVP_PKEY_new();
EVP_PKEY_set1_RSA(pubk[0], (RSA*)pub_key);

ek[0] = (unsigned char *) malloc (EVP_PKEY_size(pubk[0]));
iv = (unsigned char *) malloc (sizeof(unsigned char) *
      EVP_CIPHER_iv_length(cipher_type));

EVP_SealInit(&ctx, cipher_type, ek, ekl, iv, pubk, npubk);

/* isc_buffer_* functions give a reference to the beggining of some buffer
*/
EVP_SealUpdate(&ctx, isc_buffer_used(buffer), &outl,
               isc_buffer_base(source), isc_buffer_usedlength(source));

/* here I move forward the 'used' pointer for the 'buffer' buffer, so now
isc_buffer_used points 'outl' bytes more than before */
isc_buffer_add(buffer, outl);

EVP_SealFinal(&ctx, isc_buffer_used(buffer), &outl);



______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    [EMAIL PROTECTED]
Automated List Manager                           [EMAIL PROTECTED]

Reply via email to