Hello,
> P.S. Here is my source code:
> 
> #define EVP_ERR(_errVal) do { ret = _errVal; goto err; } while (0)
> 
> int
> evpEncrypt(int keyIdx, BYTE *dstPtr, BYTE *srcPtr, int cryptLen, int
> *errCode)
> { // Call the OpenSSL encryption routine
>    EVP_CIPHER_CTX ctx;
>    static unsigned char iv[EVP_MAX_IV_LENGTH];
>    int retLen, outLen, ret, evpErr;
> 
>    if (cryptLen <= 0)
>       EVP_ERR(-1);
>    if (!EVP_EncryptInit(&ctx, EVP_aes_256_ecb(),
> sysblk.keyData[keyIdx], iv))
>       EVP_ERR(-2);
>    retLen = cryptLen + AES_BLOCK_SIZE;
>    if (!EVP_EncryptUpdate(&ctx, dstPtr, &retLen, srcPtr, cryptLen))
>       EVP_ERR(-3);
>    outLen = retLen;
>    retLen = cryptLen + AES_BLOCK_SIZE*2;
>    if (!EVP_EncryptFinal(&ctx, &dstPtr[outLen], &retLen))
>       EVP_ERR(-4);
>    return outLen + retLen;
> 
> err:
>    while ((evpErr = ERR_get_error()) != 0)
>       *errCode = evpErr;
>    return ret;
> }
> 
> int
> evpDecrypt(int keyIdx, BYTE *dstPtr, BYTE *srcPtr, int cryptLen, int
> *errCode)
> { // Call the OpenSSL decryption routine
>    EVP_CIPHER_CTX ctx;
>    static unsigned char iv[EVP_MAX_IV_LENGTH];
>    int retLen, outLen, ret, evpErr;
> 
>    if (cryptLen < AES_BLOCK_SIZE)
>       EVP_ERR(-10);
>    if (!EVP_DecryptInit(&ctx, EVP_aes_256_ecb(),
> sysblk.keyData[keyIdx], iv))
>       EVP_ERR(-11);
>    retLen = cryptLen + AES_BLOCK_SIZE;
>    if (!EVP_DecryptUpdate(&ctx, dstPtr, &retLen, srcPtr, cryptLen))
>       EVP_ERR(-12);
>    outLen = retLen;
>    retLen = cryptLen + AES_BLOCK_SIZE;
>    if (!EVP_DecryptFinal(&ctx, &dstPtr[outLen], &retLen))
>       EVP_ERR(-13);
>    return outLen + retLen;
> 
> err:
>    while ((evpErr = ERR_get_error()) != 0)
>       *errCode = evpErr;
>    return ret;
> }
You should call EVP_CIPHER_CTX_cleanup() after EVP_DecryptFinal().

Best regards,
-- 
Marek Marcola <[EMAIL PROTECTED]>

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

Reply via email to