]> arthur.barton.de Git - netatalk.git/commitdiff
Alternate libgcrypt support for uams_randnum.c.
authorsrittau <srittau>
Wed, 11 Jun 2003 07:49:52 +0000 (07:49 +0000)
committersrittau <srittau>
Wed, 11 Jun 2003 07:49:52 +0000 (07:49 +0000)
etc/uams/Makefile.am
etc/uams/crypt.c

index bea955acdbe1bd2e3514e9db8e5c56ffc23d037c..4d027619514114a448bd8da2254f558ccfd6a1e9 100644 (file)
@@ -59,7 +59,7 @@ uams_dhx_pam_la_SOURCES    = uams_dhx_pam.c crypt.c crypt.h
 INCLUDES = @SSL_CFLAGS@
 
 uams_guest_la_CFLAGS      = @CFLAGS@
-uams_randnum_la_CFLAGS    = @CFLAGS@ @SSL_CFLAGS@
+uams_randnum_la_CFLAGS    = @CFLAGS@ $(CRYPT_CFLAGS)
 uams_passwd_la_CFLAGS     = @CFLAGS@
 uams_pam_la_CFLAGS        = @CFLAGS@
 uams_pgp_la_CFLAGS        = @CFLAGS@ $(CRYPT_CFLAGS)
@@ -67,7 +67,7 @@ uams_dhx_passwd_la_CFLAGS = @CFLAGS@ @SSL_CFLAGS@
 uams_dhx_pam_la_CFLAGS    = @CFLAGS@ @SSL_CFLAGS@
 
 uams_guest_la_LDFLAGS      = -module -avoid-version
-uams_randnum_la_LDFLAGS    = -module -avoid-version @SSL_LIBS@
+uams_randnum_la_LDFLAGS    = -module -avoid-version $(CRYPT_LIBS)
 uams_passwd_la_LDFLAGS     = -module -avoid-version
 uams_pam_la_LDFLAGS        = -module -avoid-version -lpam
 uams_pgp_la_LDFLAGS        = -module -avoid-version $(CRYPT_LIBS)
index 3d1015162afbb51ceb2a9dd0bde6bbf18f6f40b5..484ae26db082a3c7986f6f427a6591f768b769d0 100644 (file)
@@ -1,18 +1,28 @@
 /*
- * $Id: crypt.c,v 1.2 2003-06-11 07:14:09 srittau Exp $
+ * $Id: crypt.c,v 1.3 2003-06-11 07:49:52 srittau Exp $
  *
  * Copyright (c) 1990,1993 Regents of The University of Michigan.
  * Copyright (c) 1999 Adrian Sun (asun@u.washington.edu)
+ * Copyright (C) 2003 Sebastian Rittau (srittau@debian.org)
  * All Rights Reserved.  See COPYRIGHT.
  */
 
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include <assert.h>
 #include <ctype.h>
 #include <stdlib.h>
 #include <string.h>
 #include <sys/types.h>
 
+#ifdef HAVE_GCRYPT
+#include <gcrypt.h>
+#define DES_KEY_SZ 8
+#else /* HAVE_GCRYPT */
 #include <des.h>
+#endif /* HAVE_GCRYPT */
 
 #include <atalk/afp.h>
 
@@ -48,30 +58,71 @@ void atalk_unhexify(u_int8_t *dst, size_t dstlen, const u_int8_t *src, size_t sr
 
 int atalk_encrypt_start(CryptHandle *handle, u_int8_t *key)
 {
+#ifdef HAVE_GCRYPT
+       GcryCipherHd hd;
+
+       hd = gcry_cipher_open(GCRY_CIPHER_DES, GCRY_CIPHER_MODE_ECB, 0);
+       if (!hd)
+               return AFPERR_PARAM;
+       gcry_cipher_setkey(hd, key, DES_KEY_SZ);
+
+       *handle = hd;
+
+       return AFP_OK;
+#else /* HAVE_GCRYPT */
        DES_key_schedule *sched = malloc(sizeof(DES_key_schedule));
        DES_set_key_unchecked((DES_cblock *) key, sched);
 
        *handle = sched;
 
        return AFP_OK;
+#endif /* HAVE_GCRYPT */
 }
 
 int atalk_encrypt_do(CryptHandle handle, u_int8_t *dst, u_int8_t *src)
 {
+#ifdef HAVE_GCRYPT
+       int ret;
+
+       ret = gcry_cipher_encrypt(*(GcryCipherHd *) handle,
+                                 dst, DES_KEY_SZ, src, DES_KEY_SZ);
+
+       return ret == 0 ? AFP_OK : AFPERR_PARAM;
+#else /* HAVE_GCRYPT */
        DES_ecb_encrypt((DES_cblock *) src, (DES_cblock *) dst,
                        (DES_key_schedule *) handle, DES_ENCRYPT);
 
        return AFP_OK;
+#endif /* HAVE_GCRYPT */
 }
 
 void atalk_encrypt_end(CryptHandle handle)
 {
+#ifdef HAVE_GCRYPT
+       gcry_cipher_close(*(GcryCipherHd *) handle);
+#else /* HAVE_GCRYPT */
        memset(handle, 0, sizeof(DES_key_schedule));
        free(handle);
+#endif /* HAVE_GCRYPT */
 }
 
 int atalk_encrypt(u_int8_t *key, u_int8_t *dst, u_int8_t *src)
 {
+#ifdef HAVE_GCRYPT
+       GcryCipherHd hd;
+       int ret;
+                                                                                
+       hd = gcry_cipher_open(GCRY_CIPHER_DES, GCRY_CIPHER_MODE_ECB, 0);
+       if (!hd)
+               return AFPERR_PARAM;
+       gcry_cipher_setkey(hd, key, DES_KEY_SZ);
+
+       ret = gcry_cipher_encrypt(hd, dst, DES_KEY_SZ, src, DES_KEY_SZ);
+
+       gcry_cipher_close(hd);
+
+       return ret == 0 ? AFP_OK : AFPERR_PARAM;
+#else /* HAVE_GCRYPT */
        DES_key_schedule sched;
 
        DES_set_key_unchecked((DES_cblock *) key, &sched);
@@ -81,10 +132,26 @@ int atalk_encrypt(u_int8_t *key, u_int8_t *dst, u_int8_t *src)
        memset(&sched, 0, sizeof(sched));
 
        return AFP_OK;
+#endif /* HAVE_GCRYPT */
 }
 
 int atalk_decrypt(u_int8_t *key, u_int8_t *dst, u_int8_t *src)
 {
+#ifdef HAVE_GCRYPT
+       GcryCipherHd hd;
+       int ret;
+
+       hd = gcry_cipher_open(GCRY_CIPHER_DES, GCRY_CIPHER_MODE_ECB, 0);
+       if (!hd)
+               return AFPERR_PARAM;
+       gcry_cipher_setkey(hd, key, DES_KEY_SZ);
+
+       ret = gcry_cipher_encrypt(hd, dst, DES_KEY_SZ, src, DES_KEY_SZ);
+
+       gcry_cipher_close(hd);
+
+       return ret == 0 ? AFP_OK : AFPERR_PARAM;
+#else /* HAVE_GCRYPT */
        DES_key_schedule sched;
 
        DES_set_key_unchecked((DES_cblock *) key, &sched);
@@ -94,4 +161,5 @@ int atalk_decrypt(u_int8_t *key, u_int8_t *dst, u_int8_t *src)
        memset(&sched, 0, sizeof(sched));
 
        return AFP_OK;
+#endif /* HAVE_GCRYPT */
 }