From 3b512e18dc4c8fead872548bdb1a89f85681d0cf Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Wed, 17 May 2000 23:29:18 +1000 Subject: - Detect OpenSSL seperatly from RSA - Better test for RSA (more compatible with RSAref). Based on work by Ed Eden --- configure.in | 87 +++++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 59 insertions(+), 28 deletions(-) (limited to 'configure.in') diff --git a/configure.in b/configure.in index 548d2727d..ba36417aa 100644 --- a/configure.in +++ b/configure.in @@ -212,37 +212,27 @@ AC_CACHE_CHECK([for OpenSSL directory], ac_cv_openssldir, [ LDFLAGS="$saved_LDFLAGS" fi - for WANTS_RSAREF in "" 1 ; do - - if test -z "$WANTS_RSAREF" ; then - LIBS="$saved_LIBS -lcrypto" - else - LIBS="$saved_LIBS -lcrypto -lRSAglue -lrsaref" - fi + LIBS="$saved_LIBS -lcrypto" - AC_TRY_RUN( - [ + # Basic test to check for compatible version and correct linking + # *does not* test for RSA - that comes later. + AC_TRY_RUN( + [ #include #include -#include -#include -#include int main(void) { - RSA *key; char a[2048],b[2048];; - memset(a, 0, sizeof(a));memset(b, 0, sizeof(b)); + char a[2048]; + memset(a, 0, sizeof(a)); RAND_add(a, sizeof(a), sizeof(a)); - key=RSA_generate_key(32,3,NULL,NULL); - if (key==NULL) return(1); - return(-1==RSA_private_decrypt(RSA_size(key),a,b,key,RSA_NO_PADDING)); + return(RAND_status() <= 0); } - ], - [ - found_crypto=1 - break; - ], [] - ) - done + ], + [ + found_crypto=1 + break; + ], [] + ) if test ! -z "$found_crypto" ; then break; @@ -272,13 +262,54 @@ if test ! -z "$ac_cv_openssldir" -a ! "x$ac_cv_openssldir" = "x(system)" ; then blibpath="$blibpath:$ssldir:$ssldir/lib" fi fi -if test -z "$WANTS_RSAREF" ; then - LIBS="$saved_LIBS -lcrypto" +LIBS="$saved_LIBS -lcrypto" + +# Now test RSA support +saved_LIBS="$LIBS" +AC_MSG_CHECKING([for RSA support]) +for WANTS_RSAREF in "" 1 ; do + if test -z "$WANTS_RSAREF" ; then + LIBS="$saved_LIBS" + else + LIBS="$saved_LIBS -lRSAglue -lrsaref" + fi + AC_TRY_RUN([ +#include +#include +#include +#include +#include +int main(void) +{ + int num; RSA *key; static unsigned char p_in[] = "blahblah"; + unsigned char c[256], p[256]; + memset(c, 0, sizeof(c)); RAND_add(c, sizeof(c), sizeof(c)); + if ((key=RSA_generate_key(512, 3, NULL, NULL))==NULL) return(1); + num = RSA_public_encrypt(sizeof(p_in) - 1, p_in, c, key, RSA_PKCS1_PADDING); + return(-1 == RSA_private_decrypt(num, c, p, key, RSA_PKCS1_PADDING)); +} + ], + [ + rsa_works=1 + break; + ], []) +done + +if test ! -z "$no_rsa" ; then + AC_MSG_RESULT(disabled) else - LIBS="$saved_LIBS -lcrypto -lRSAglue -lrsaref" + if test -z "$rsa_works" ; then + AC_MSG_WARN([*** No RSA support found *** ]) + else + if test -z "$WANTS_RSAREF" ; then + AC_MSG_RESULT(yes) + else + AC_MSG_RESULT(using RSAref) + LIBS="$saved_LIBS -lcrypto -lRSAglue -lrsaref" + fi + fi fi - # Checks for data types AC_CHECK_SIZEOF(char, 1) AC_CHECK_SIZEOF(short int, 2) -- cgit v1.2.3