Just go get source code for RC4 and call it directly when you need RC4.

    --David


On 2/10/2012 6:39 AM, Erik Tkal wrote:

I am experimenting with the OpenSSL FIPS Module 2.0, but am encountering some difficulty.

I need to perform some RC4 calculations in code that does not need to be FIPS compliant, even though I want all FIPS ciphers to be performed in FIPS mode.

I'm trying to use the EVP_CIPH_FLAG_NON_FIPS_ALLOW flag, but no matter what I do it is ignored. If I set the flag via

  EVP_CIPHER_CTX_set_flags(&m_ctx, EVP_CIPH_FLAG_NON_FIPS_ALLOW);

then calling

  EVP_CipherInit(&m_ctx, EVP_rc4(), NULL, NULL, 1);

first wipes out my context via the following in evp_enc.c:

  int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,

           const unsigned char *key, const unsigned char *iv, int enc)

      {

*     if (cipher)*

*           EVP_CIPHER_CTX_init(ctx);*

      return EVP_CipherInit_ex(ctx,cipher,NULL,key,iv,enc);

      }

Even if I use the _ex version to avoid this

  EVP_CipherInit_ex(&m_ctx, EVP_rc4(), NULL, NULL, NULL, 1);

then the following code in evp_enc.c / EVP_CipherInit_ex() also ends up wiping the flags out:

*if (cipher)*

            {

/* Ensure a context left lying around from last time is cleared

            * (the previous check attempted to avoid this if the same

            * ENGINE and EVP_CIPHER could be used). */

*EVP_CIPHER_CTX_cleanup(ctx);*

Since all paths seem to cause the code to wipe out my EVP_CIPH_FLAG_NON_FIPS_ALLOW flags setting before the call to FIPS_cipherinit(ctx, cipher, key, iv, enc) gets a chance to test it in order to allow it, what is the proper mechanism for creating an EVP_CIPHER usage that will be allowed in FIPS mode?

  Thanks,

  Erik

....................................

Erik Tkal

Juniper OAC/UAC/Pulse Development

No virus found in this message.
Checked by AVG - www.avg.com <http://www.avg.com>
Version: 2012.0.1913 / Virus Database: 2112/4800 - Release Date: 02/09/12


Reply via email to