Hello We recently upgraded the version of OpenSSL used in our application from 0.9.6c to 0.9.8e. Everything is fine except I have found that some of our code was using memcpy() to 'save' and 'restore' EVP_CIPHER_CTX structures. I understand now from looking at the OpenSSL code that this use was invalid since we should not assume that an EVP_CIPHER_CTX can be correctly copied via a simple memcpy().
My question: Is there a valid way to copy an EVP_CIPHER_CTX structure? I have created a function which does this as a hack to get us up and running: int EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX *out, const EVP_CIPHER_CTX *in) { int retval = EVP_CipherInit_ex(out, EVP_CIPHER_CTX_cipher(in), in->engine, NULL, /* key */ NULL, /* iv */ in->encrypt); if (retval == 1) { memcpy(out->cipher_data, in->cipher_data, in->cipher->ctx_size); } return retval; } Our goal is really to save and restore the cipher state of an RC4 cipher context. It does not seem to be possible to ask an EVP_CIPHER_CTX to save and restore it's internal state. Any ideas would be welcomed? Sam Elstob Product Developer Triometric e: [EMAIL PROTECTED] t: +44 (0)1784 497 366 f: +44 (0)1494 400 077 w: http://www.triometric.net Orchard Building, Royal Holloway, Egham, Surrey TW20 0EX UK Triometric is the trading name of Hypertrak Limited. Registered in England and Wales No. 3893713, VAT 727292030