From 796a522b460e44f2959f5b8e7514a7e7d74d789a Mon Sep 17 00:00:00 2001 From: Love Hornquist Astrand Date: Fri, 21 Aug 2009 07:43:50 -0700 Subject: [PATCH] always call cipher-init so that we can reset IV when caller wants too --- lib/hcrypto/evp-cc.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/lib/hcrypto/evp-cc.c b/lib/hcrypto/evp-cc.c index 8f6268f7b..1bf8ca8af 100644 --- a/lib/hcrypto/evp-cc.c +++ b/lib/hcrypto/evp-cc.c @@ -95,6 +95,14 @@ init_cc_key(int encp, CCAlgorithm alg, const void *key, CCOperation op = encp ? kCCEncrypt : kCCDecrypt; CCCryptorStatus ret; + if (*ref) { + if (key == NULL && iv) { + CCCryptorReset(*ref, iv); + return 1; + } + CCCryptorRelease(*ref); + } + ret = CCCryptorCreate(op, alg, 0, key, keylen, iv, ref); if (ret) return 0; @@ -127,7 +135,7 @@ EVP_cc_des_ede3_cbc(void) 8, 24, 8, - EVP_CIPH_CBC_MODE, + EVP_CIPH_CBC_MODE|EVP_CIPH_ALWAYS_CALL_INIT, cc_des_ede3_cbc_init, cc_do_cipher, cc_cleanup, @@ -170,7 +178,7 @@ EVP_cc_des_cbc(void) kCCBlockSizeDES, kCCBlockSizeDES, kCCBlockSizeDES, - EVP_CIPH_CBC_MODE, + EVP_CIPH_CBC_MODE|EVP_CIPH_ALWAYS_CALL_INIT, cc_des_cbc_init, cc_do_cipher, cc_cleanup, @@ -213,7 +221,7 @@ EVP_cc_aes_128_cbc(void) kCCBlockSizeAES128, kCCKeySizeAES128, kCCBlockSizeAES128, - EVP_CIPH_CBC_MODE, + EVP_CIPH_CBC_MODE|EVP_CIPH_ALWAYS_CALL_INIT, cc_aes_cbc_init, cc_do_cipher, cc_cleanup, @@ -242,7 +250,7 @@ EVP_cc_aes_192_cbc(void) kCCBlockSizeAES128, kCCKeySizeAES192, kCCBlockSizeAES128, - EVP_CIPH_CBC_MODE, + EVP_CIPH_CBC_MODE|EVP_CIPH_ALWAYS_CALL_INIT, cc_aes_cbc_init, cc_do_cipher, cc_cleanup, @@ -271,7 +279,7 @@ EVP_cc_aes_256_cbc(void) kCCBlockSizeAES128, kCCKeySizeAES256, kCCBlockSizeAES128, - EVP_CIPH_CBC_MODE, + EVP_CIPH_CBC_MODE|EVP_CIPH_ALWAYS_CALL_INIT, cc_aes_cbc_init, cc_do_cipher, cc_cleanup, @@ -315,7 +323,7 @@ EVP_cc_rc2_cbc(void) kCCBlockSizeRC2, 16, kCCBlockSizeRC2, - EVP_CIPH_CBC_MODE, + EVP_CIPH_CBC_MODE|EVP_CIPH_ALWAYS_CALL_INIT, cc_rc2_cbc_init, cc_do_cipher, cc_cleanup, @@ -345,7 +353,7 @@ EVP_cc_rc2_40_cbc(void) kCCBlockSizeRC2, 5, kCCBlockSizeRC2, - EVP_CIPH_CBC_MODE, + EVP_CIPH_CBC_MODE|EVP_CIPH_ALWAYS_CALL_INIT, cc_rc2_cbc_init, cc_do_cipher, cc_cleanup, @@ -376,7 +384,7 @@ EVP_cc_rc2_64_cbc(void) kCCBlockSizeRC2, 8, kCCBlockSizeRC2, - EVP_CIPH_CBC_MODE, + EVP_CIPH_CBC_MODE|EVP_CIPH_ALWAYS_CALL_INIT, cc_rc2_cbc_init, cc_do_cipher, cc_cleanup,