Package: strongswan
Version: 4.1.10-1
Tags: patch

I'm using strongSwan with RSA private keys on a smartcard via opencryptoki's 
pkcs11 library. The opencryptoki pkcs11 libraries link with OpenSSL's 
libcrypto which includes a function AES_cbc_encrypt. That function also 
exists in strongSwan's builtin libcrypto but it takes different parameters 
and generally functions differently. So, when pluto attempts to use the 
AES_cbc_encrypt after dlopen*ing opencryptoki's pkcs11 library, it segfaults 
because it has been overwritten with OpenSSL's different AES_cbc_encrypt in 
the symbol table.

I've written a trivial patch to rename strongSwan's AES_cbc_encrypt to 
ss_AES_cbc_encrypt to avoid this conflict. With the patch, pluto functions 
normally and connections succeed. I have sent the patch upstream to 
strongSwan's mailing list twice, once in late November 2007[1] and again in 
the beginning of March 2008[2]. I have yet to receive any reply from 
upstream, neither positive or negative, so as "plan B" I ask that you please 
include it in the Debian package.

Thank you

[1] https://lists.strongswan.org/pipermail/users/2007-November/002160.html
[2] https://lists.strongswan.org/pipermail/users/2008-March/002292.html
-- 
man perl | tail -6 | head -2
commit 306736b995127de2f0ef54671c3cfac86870f94c
Author: David Smith <[EMAIL PROTECTED]>
Date:   Sat Nov 24 19:07:04 2007 +1100

    Rename AES_cbc_encrypt to ss_AES_cbc_encrypt to not conflict
    with OpenSSL's function when using opencryptoki's TPM token.

diff --git a/src/libcrypto/libaes/aes_cbc.c b/src/libcrypto/libaes/aes_cbc.c
index 962dd1a..83feeb7 100644
--- a/src/libcrypto/libaes/aes_cbc.c
+++ b/src/libcrypto/libaes/aes_cbc.c
@@ -10,4 +10,4 @@ int AES_set_key(aes_context *aes_ctx, const u_int8_t *key, int keysize) {
 	aes_set_key(aes_ctx, key, keysize, 0);
 	return 1;	
 }
-CBC_IMPL_BLK16(AES_cbc_encrypt, aes_context, u_int8_t *, aes_encrypt, aes_decrypt);
+CBC_IMPL_BLK16(ss_AES_cbc_encrypt, aes_context, u_int8_t *, aes_encrypt, aes_decrypt);
diff --git a/src/pluto/alg/ike_alg_aes.c b/src/pluto/alg/ike_alg_aes.c
index 44de09b..9df79cb 100644
--- a/src/pluto/alg/ike_alg_aes.c
+++ b/src/pluto/alg/ike_alg_aes.c
@@ -34,7 +34,7 @@ do_aes(u_int8_t *buf, size_t buf_len, u_int8_t *key, size_t key_size, u_int8_t *
 	memcpy(new_iv=iv_bak, (char*) buf + buf_len - AES_CBC_BLOCK_SIZE
 		, AES_CBC_BLOCK_SIZE);
 
-    AES_cbc_encrypt(&aes_ctx, buf, buf, buf_len, iv, enc);
+    ss_AES_cbc_encrypt(&aes_ctx, buf, buf, buf_len, iv, enc);
 
     if (enc)
 	new_iv = (char*) buf + buf_len-AES_CBC_BLOCK_SIZE;

Attachment: signature.asc
Description: This is a digitally signed message part.

Reply via email to