]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
added hooks for both mhash and mcrypt
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Sun, 12 Nov 2000 09:31:39 +0000 (09:31 +0000)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Sun, 12 Nov 2000 09:31:39 +0000 (09:31 +0000)
Makefile.am
acconfig.h
configure.in
lib/gnutls_algorithms.c
lib/gnutls_cipher.c
lib/gnutls_cipher_int.c
lib/gnutls_cipher_int.h
lib/gnutls_hash_int.c
lib/gnutls_int.h

index 6499cf7e8f129cb0728283967075c87e632405db..c75c46cf2eab2e95edaa5d43423e11df3a9939bd 100644 (file)
@@ -1,5 +1,5 @@
 ## Process this file with automake to produce Makefile.in
 
-EXTRA_DIST = gcrypt.m4
+EXTRA_DIST = 
 SUBDIRS = lib src doc
  
\ No newline at end of file
index 2098c23e2d64da5306f59193620373dfe83bc779..b0c9660f6f024e847ebfc6507a27fffc1e7c5f83 100644 (file)
@@ -3,6 +3,9 @@
 #undef NAME_OF_DEV_URANDOM
 #undef HAVE_DEV_RANDOM
 
+#undef USE_MHASH
+#undef USE_MCRYPT
+
 #undef PACKAGE
 #undef VERSION
 
index 6f9919f8c89ce62afe496061f750e9ac5ac530e7..3b312fbfaf3d3243dc096c49842972d3633e0da0 100644 (file)
@@ -66,6 +66,25 @@ AC_ARG_ENABLE(maintainer-mode,
 opt_maintainer_mode=$enableval)
 AC_MSG_RESULT($opt_maintainer_mode)
 
+AC_ARG_WITH( mcrypt, [  --with-mcrypt           enable mcrypt support],
+ [  AC_CHECK_LIB(dl, dlopen)
+  AC_CHECK_LIB(mcrypt, mcrypt_module_open,
+  LIBS="${LIBS} -lmcrypt"
+  AC_DEFINE(USE_MCRYPT),
+  [
+    AC_CHECK_LIB(dld, dld_init)
+    AC_CHECK_LIB(ltdl, lt_dlinit)
+    AC_CHECK_LIB(mcrypt, mcrypt_enc_get_key_size,
+    LIBS="${LIBS} -lmcrypt"
+    AC_DEFINE(USE_MCRYPT),
+    AC_MSG_ERROR("You need libmcrypt 2.4.x or libmcrypt-nm to compile this program. http://mcrypt.hellug.gr"))
+  ])
+ ]
+
+)
+
+AC_ARG_WITH( mhash, [  --with-mhash            enable mhash support],
+ [AC_CHECK_LIB(mhash, mhash_init_m, AC_DEFINE(USE_MHASH))])
 
 if test $ac_cv_prog_gcc != no; then
   CFLAGS="${CFLAGS} -O2 -g -ffast-math"
index 8b1937287853b91f2aa1064b4bc9b1f435a59715..bd3c57b086847fdc67f8799176f3cdf436b8e0c3 100644 (file)
@@ -38,7 +38,7 @@ typedef struct gnutls_cipher_entry gnutls_cipher_entry;
 
 static gnutls_cipher_entry algorithms[] = {
        GNUTLS_CIPHER_ENTRY(GNUTLS_3DES, 8, 24, 1, 8, -1),
-       GNUTLS_CIPHER_ENTRY(GNUTLS_ARCFOUR, 1, 16, 0, 0, -2),
+       GNUTLS_CIPHER_ENTRY(GNUTLS_ARCFOUR, 1, 16, 0, 0, -1),
        GNUTLS_CIPHER_ENTRY(GNUTLS_NULL, 1, 0, 0, 0, -1),
        {0}
 };
index 716ef51b767e65102d1917a1b246b093f0e5233c..e82d4156fa6ea44935ea254192fa567168c5f8e9 100644 (file)
@@ -146,11 +146,11 @@ int _gnutls_connection_state_init(GNUTLS_STATE state)
        gnutls_free(state->connection_state.read_mac_secret);
 
        if (state->connection_state.read_cipher_state != NULL)
-               gcry_cipher_close(state->
+               gnutls_cipher_deinit(state->
                                  connection_state.read_cipher_state);
 
        if (state->connection_state.write_cipher_state != NULL)
-               gcry_cipher_close(state->
+               gnutls_cipher_deinit(state->
                                  connection_state.write_cipher_state);
 
        gnutls_free(state->connection_state.read_compression_state);
index 8cfd03900027bd179b2f7a12062a57f77a22d070..8c6345c2aac9cf47ec2fea1fd851fc86c327f474 100644 (file)
@@ -19,8 +19,9 @@
  */
 
 #include <defines.h>
-#include "gnutls_int.h"
-#include "gnutls_errors.h"
+#include <gnutls_int.h>
+#include <gnutls_errors.h>
+#include <gnutls_cipher_int.h>
 
 GNUTLS_CIPHER_HANDLE gnutls_cipher_init( BulkCipherAlgorithm cipher, void* key, int keysize, void* iv, int ivsize)
 {
@@ -31,14 +32,32 @@ GNUTLS_CIPHER_HANDLE ret;
                ret = GNUTLS_CIPHER_FAILED;
                break;
        case GNUTLS_3DES:
+#ifdef USE_MCRYPT
+               ret = mcrypt_module_open( "tripledes", NULL, "cbc", NULL);
+#else
                ret = gcry_cipher_open(GCRY_CIPHER_3DES, GCRY_CIPHER_MODE_CBC, 0);
+#endif
+               break;
+       case GNUTLS_ARCFOUR:
+#ifdef USE_MCRYPT
+               ret = mcrypt_module_open( "arcfour", NULL, "stream", NULL);
+#else
+               ret = GNUTLS_CIPHER_FAILED;
+#endif
                break;
        default:
                ret = GNUTLS_CIPHER_FAILED;
        }
-       if (ret!=NULL) {
+       if (ret!=GNUTLS_CIPHER_FAILED) {
+#ifdef USE_MCRYPT
+               /* ivsize is assumed to be blocksize */
+               if ( mcrypt_generic_init( ret, key, keysize, iv) < 0) {
+                       return GNUTLS_CIPHER_FAILED;
+               }; 
+#else
                gcry_cipher_setkey(ret, key, keysize);
                gcry_cipher_setiv(ret, iv, ivsize);
+#endif
        }
 
 return ret;    
@@ -46,20 +65,32 @@ return ret;
 
 int gnutls_cipher_encrypt(GNUTLS_CIPHER_HANDLE handle, void* text, int textlen) {
        if (handle!=NULL) {
+#ifdef USE_MCRYPT
+               mcrypt_generic( handle, text, textlen);
+#else
                gcry_cipher_encrypt( handle, text, textlen, text, textlen);
+#endif
        }
        return 0;
 }
 
 int gnutls_cipher_decrypt(GNUTLS_CIPHER_HANDLE handle, void* ciphertext, int ciphertextlen) {
        if (handle!=NULL) {
+#ifdef USE_MCRYPT
+               mdecrypt_generic( handle, ciphertext, ciphertextlen);
+#else
                gcry_cipher_decrypt( handle, ciphertext, ciphertextlen, ciphertext, ciphertextlen);
+#endif
        }
        return 0;
 }
 
 void gnutls_cipher_deinit(GNUTLS_CIPHER_HANDLE handle) {
        if (handle!=NULL) {
+#ifdef USE_MCRYPT
+               mcrypt_generic_end( handle);
+#else
                gcry_cipher_close(handle);
+#endif
        }
 }
index d3eab5d489ebe61c96da78b9079d724833189429..6cba6eca0f29994017884d516ab8167cebc9cc73 100644 (file)
@@ -1,4 +1,19 @@
+#ifndef GNUTLS_CIPHER_INT
+# define GNUTLS_CIPHER_INT
+
+#ifdef USE_MCRYPT
+# include <mcrypt.h>
+# define GNUTLS_CIPHER_HANDLE MCRYPT
+# define GNUTLS_CIPHER_FAILED MCRYPT_FAILED
+#else
+# include <gcrypt.h>
+# define GNUTLS_CIPHER_HANDLE GCRY_CIPHER_HD
+# define GNUTLS_CIPHER_FAILED NULL
+#endif
+
 GNUTLS_CIPHER_HANDLE gnutls_cipher_init( BulkCipherAlgorithm cipher, void* key, int keysize, void* iv, int ivsize);
 int gnutls_cipher_encrypt(GNUTLS_CIPHER_HANDLE handle, void* text, int textlen);
 int gnutls_cipher_decrypt(GNUTLS_CIPHER_HANDLE handle, void* ciphertext, int ciphertextlen);
 void gnutls_cipher_deinit(GNUTLS_CIPHER_HANDLE handle);
+
+#endif /* GNUTLS_CIPHER_INT */
index f071500bcf528f7871e61cd62166b07018449d62..a2856c173b6e660c8bacba3d9b77e8b4d46ccce7 100644 (file)
@@ -37,7 +37,7 @@ GNUTLS_HASH_HANDLE ret;
                        break;
                case GNUTLS_MAC_SHA:
 #ifdef USE_MHASH
-                       ret = mhash_init( MHASH_SHA1);
+                       ret = mhash_init_m( MHASH_SHA1, gnutls_malloc);
 #else
                        ret = gcry_md_open( GCRY_MD_SHA1, 0);
 #endif
@@ -45,7 +45,7 @@ GNUTLS_HASH_HANDLE ret;
                        break;
                case GNUTLS_MAC_MD5:
 #ifdef USE_MHASH
-                       ret = mhash_init( MHASH_SHA1);
+                       ret = mhash_init_m( MHASH_MD5, gnutls_malloc);
 #else
                        ret = gcry_md_open( GCRY_MD_MD5, 0);
 #endif
@@ -74,7 +74,7 @@ int ret;
                        break;
                case GNUTLS_MAC_MD5:
 #ifdef USE_MHASH
-                       ret = mhash_get_block_size(MHASH_SHA1);
+                       ret = mhash_get_block_size(MHASH_MD5);
 #else                   
                        ret = gcry_md_get_algo_dlen( GCRY_MD_MD5);
 #endif
@@ -88,8 +88,11 @@ return ret;
 }
 
 int gnutls_hash(GNUTLS_HASH_HANDLE handle, void* text, int textlen) {
-
+#ifdef USE_MHASH
+       mhash( handle, text, textlen);
+#else
        gcry_md_write( handle, text, textlen);
+#endif
        return 0;
 }
 
@@ -122,7 +125,7 @@ GNUTLS_MAC_HANDLE ret;
                        break;
                case GNUTLS_MAC_SHA:
 #ifdef USE_MHASH
-                       ret = mhash_hmac_init( MHASH_SHA1, key, keylen, 0);
+                       ret = mhash_hmac_init_m( MHASH_SHA1, key, keylen, 0, gnutls_malloc);
 #else
                        ret = gcry_md_open( GCRY_MD_SHA1, GCRY_MD_FLAG_HMAC);
 #endif
@@ -130,7 +133,7 @@ GNUTLS_MAC_HANDLE ret;
                        break;
                case GNUTLS_MAC_MD5:
 #ifdef USE_MHASH
-                       ret = mhash_hmac_init( MHASH_SHA1, key, keylen, 0);
+                       ret = mhash_hmac_init_m( MHASH_MD5, key, keylen, 0, gnutls_malloc);
 #else
                        ret = gcry_md_open( GCRY_MD_MD5, GCRY_MD_FLAG_HMAC);
 #endif
@@ -162,7 +165,7 @@ int ret;
                        break;
                case GNUTLS_MAC_MD5:
 #ifdef USE_MHASH
-                       ret = mhash_get_block_size(MHASH_SHA1);
+                       ret = mhash_get_block_size(MHASH_MD5);
 #else                  
                        ret = gcry_md_get_algo_dlen( GCRY_MD_MD5);
 #endif
index 432f047e5f4d65c10855ce2289df6fce73f6f36b..6632f41e7c0a24e1c65759983738817c93766a18 100644 (file)
@@ -2,7 +2,7 @@
 
 #define GNUTLS_INT_H
 
-#undef HARD_DEBUG
+#define HARD_DEBUG
 #undef READ_DEBUG
 #undef WRITE_DEBUG
 #define DEBUG
 #define MAX24 16777215
 #define MAX16 65535
 
-
-/* for symmetric ciphers */
-#define GNUTLS_CIPHER_HANDLE GCRY_CIPHER_HD
-#define GNUTLS_CIPHER_FAILED NULL
-
 /* for big numbers support */ /* FIXME */
+#include <gcrypt.h>
+
 #define GNUTLS_MPI MPI
 #define gnutls_mpi_release mpi_release
 
@@ -108,6 +105,7 @@ typedef enum MACAlgorithm MACAlgorithm;
 typedef enum CompressionMethod CompressionMethod;
 
 #include <gnutls_hash_int.h>
+#include <gnutls_cipher_int.h>
 
 typedef struct {
        ConnectionEnd entity;