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)
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)
/*
- * $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>
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);
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);
memset(&sched, 0, sizeof(sched));
return AFP_OK;
+#endif /* HAVE_GCRYPT */
}