Add configure checks and stubs for gcrypt support.
authorAndre Noll <maan@systemlinux.org>
Sat, 5 Mar 2011 15:39:30 +0000 (16:39 +0100)
committerAndre Noll <maan@systemlinux.org>
Wed, 6 Jul 2011 06:41:26 +0000 (08:41 +0200)
Compiles but does not yet work as all functions are dummies ATM.

configure.ac
error.h
gcrypt.c [new file with mode: 0644]

index 1190821..e2fba30 100644 (file)
@@ -85,7 +85,7 @@ AC_DEFUN([add_cmdline],[$(for i in $@; do printf "${i}.cmdline "; done)])
 
 
 all_errlist_objs="server mp3_afh afh_common vss command net string signal time
-daemon stat crypt http_send close_on_fork ipc acl afh fade amp_filter
+daemon stat http_send close_on_fork ipc acl afh fade amp_filter
 dccp_send fd user_list chunk_queue afs aft mood score attribute blob ringbuffer
 playlist sched audiod grab_client filter_common wav_filter compress_filter
 http_recv dccp_recv recv_common write_common file_write audiod_command
@@ -117,7 +117,7 @@ audioc_ldflags=""
 audiod_cmdline_objs="add_cmdline(audiod compress_filter http_recv dccp_recv file_write client amp_filter udp_recv prebuffer_filter)"
 audiod_errlist_objs="audiod signal string daemon stat net crypt_common
        time grab_client filter_common wav_filter compress_filter amp_filter http_recv dccp_recv
-       recv_common fd sched write_common file_write audiod_command crypt fecdec_filter
+       recv_common fd sched write_common file_write audiod_command fecdec_filter
        client_common ggo udp_recv color fec prebuffer_filter audiod_command_list
        bitstream imdct wma_common wmadec_filter buffer_tree"
 audiod_ldflags="-lm"
@@ -129,7 +129,7 @@ afh_ldflags=""
 
 server_cmdline_objs="add_cmdline(server)"
 server_errlist_objs="server afh_common mp3_afh vss command net string signal
-       time daemon http_send close_on_fork mm crypt crypt_common
+       time daemon http_send close_on_fork mm crypt_common
        ipc dccp_send fd user_list chunk_queue afs aft mood score attribute
        blob playlist sched acl send_common udp_send color fec
        server_command_list afs_command_list wma_afh wma_common"
@@ -145,7 +145,7 @@ default_writer="FILE_WRITE"
 
 client_cmdline_objs="add_cmdline(client)"
 client_errlist_objs="client net string fd sched stdin stdout time
-       client_common buffer_tree crypt crypt_common"
+       client_common buffer_tree crypt_common"
 client_ldflags=""
 
 gui_cmdline_objs="add_cmdline(gui)"
@@ -273,52 +273,122 @@ fi
 CPPFLAGS="$OLD_CPPFLAGS"
 LDFLAGS="$OLD_LDFLAGS"
 LIBS="$OLD_LIBS"
+########################################################################### crypto
+AC_ARG_ENABLE(cryptolib, [AS_HELP_STRING(--enable-cryptolib=lib, [
+       Force using crypto library "lib". This package requires either
+       openssl or libgcrypt being installed. Possible values for "lib"
+       are thus "openssl" and "gcrypt". If this option is not given,
+       openssl is tried first. If openssl was not found, gcrypt is
+       tried next.])])
+
+case "$enable_cryptolib" in
+       "openssl") check_openssl="yes"; check_gcrypt="no";;
+       "gcrypt") check_openssl="no"; check_gcrypt="yes";;
+       "") check_openssl="yes"; check_gcrypt="yes";;
+       *) AC_MSG_ERROR([invalid value "$enable_cryptolib" for --enable-cryptolib]);;
+esac
 ###################################################################### openssl
-OLD_CPPFLAGS="$CPPFLAGS"
-OLD_LD_FLAGS="$LDFLAGS"
-OLD_LIBS="$LIBS"
-have_openssl="yes"
-AC_ARG_WITH(openssl_headers, [AC_HELP_STRING(--with-openssl-headers=dir,
-       [look for openssl headers also in dir])])
-if test -n "$with_openssl_headers"; then
-       openssl_cppflags="-I$with_openssl_headers"
-       CPPFLAGS="$CPPFLAGS $openssl_cppflags"
-fi
-AC_ARG_WITH(openssl_libs, [AC_HELP_STRING(--with-openssl-libs=dir,
-       [look for openssl libraries also in dir])])
-if test -n "$with_openssl_libs"; then
-       openssl_libs="-L$with_openssl_libs"
-       LDFLAGS="$LDFLAGS $openssl_libs"
-fi
-AC_CHECK_HEADER(openssl/ssl.h, [], [have_openssl="no"])
-AC_CHECK_LIB([crypto], [RAND_bytes], [], [have_openssl="no"])
-if test "$have_openssl" = "no" -a -z "$with_openssl_headers$with_openssl_libs"; then
-       # try harder: openssl is sometimes installed in /usr/local/ssl
-       openssl_cppflags="-I/usr/local/ssl/include"
-       CPPFLAGS="$CPPFLAGS $openssl_cppflags"
-       openssl_libs="-L/usr/local/ssl/lib"
-       LDFLAGS="$LDFLAGS $openssl_libs"
-       # clear cache
-       unset ac_cv_header_openssl_ssl_h 2> /dev/null
-       unset ac_cv_lib_crypto_RAND_bytes 2> /dev/null
-       AC_CHECK_HEADER(openssl/ssl.h, [have_openssl="yes"], [])
+if test "$check_openssl" = "yes"; then
+       OLD_CPPFLAGS="$CPPFLAGS"
+       OLD_LD_FLAGS="$LDFLAGS"
+       OLD_LIBS="$LIBS"
+       have_openssl="yes"
+       AC_ARG_WITH(openssl_headers, [AC_HELP_STRING(--with-openssl-headers=dir,
+               [look for openssl headers also in dir])])
+       if test -n "$with_openssl_headers"; then
+               openssl_cppflags="-I$with_openssl_headers"
+               CPPFLAGS="$CPPFLAGS $openssl_cppflags"
+       fi
+       AC_ARG_WITH(openssl_libs, [AC_HELP_STRING(--with-openssl-libs=dir,
+               [look for openssl libraries also in dir])])
+       if test -n "$with_openssl_libs"; then
+               openssl_libs="-L$with_openssl_libs"
+               LDFLAGS="$LDFLAGS $openssl_libs"
+       fi
+       AC_CHECK_HEADER(openssl/ssl.h, [], [have_openssl="no"])
+       AC_CHECK_LIB([crypto], [RAND_bytes], [], [have_openssl="no"])
+       if test "$have_openssl" = "no" -a -z "$with_openssl_headers$with_openssl_libs"; then
+               # try harder: openssl is sometimes installed in /usr/local/ssl
+               openssl_cppflags="-I/usr/local/ssl/include"
+               CPPFLAGS="$CPPFLAGS $openssl_cppflags"
+               openssl_libs="-L/usr/local/ssl/lib"
+               LDFLAGS="$LDFLAGS $openssl_libs"
+               # clear cache
+               unset ac_cv_header_openssl_ssl_h 2> /dev/null
+               unset ac_cv_lib_crypto_RAND_bytes 2> /dev/null
+               AC_CHECK_HEADER(openssl/ssl.h, [have_openssl="yes"], [])
+               if test "$have_openssl" = "yes"; then
+                       AC_CHECK_LIB([crypto], [RAND_bytes], [], [have_openssl="no"])
+               fi
+       fi
        if test "$have_openssl" = "yes"; then
-               AC_CHECK_LIB([crypto], [RAND_bytes], [], [have_openssl="no"])
+               AC_DEFINE(HAVE_OPENSSL, 1, [define to 1 to turn on openssl support])
+               AC_SUBST(openssl_cppflags)
+               openssl_libs="$openssl_libs -lssl -lcrypto"
+               server_ldflags="$server_ldflags $openssl_libs"
+               client_ldflags="$client_ldflags $openssl_libs"
+               audiod_ldflags="$audiod_ldflags $openssl_libs"
+
+               all_errlist_objs="$all_errlist_objs crypt"
+               server_errlist_objs="$server_errlist_objs crypt"
+               client_errlist_objs="$client_errlist_objs crypt"
+               audiod_errlist_objs="$audiod_errlist_objs crypt"
+
+               check_gcrypt="no"
+       else
+               AC_MSG_WARN([openssl libraries not found])
        fi
-fi
-if test "$have_openssl" = "yes"; then
-       AC_DEFINE(HAVE_OPENSSL, 1, [define to 1 to turn on openssl support])
-       AC_SUBST(openssl_cppflags)
-       openssl_libs="$openssl_libs -lssl -lcrypto"
-       server_ldflags="$server_ldflags $openssl_libs"
-       client_ldflags="$client_ldflags $openssl_libs"
-       audiod_ldflags="$audiod_ldflags $openssl_libs"
+       CPPFLAGS="$OLD_CPPFLAGS"
+       LDFLAGS="$OLD_LDFLAGS"
+       LIBS="$OLD_LIBS"
 else
-       AC_MSG_ERROR([openssl libraries not found])
+       have_openssl="no"
+fi
+########################################################################### gcrypt
+if test "$check_gcrypt" = "yes"; then
+       OLD_CPPFLAGS="$CPPFLAGS"
+       OLD_LD_FLAGS="$LDFLAGS"
+       OLD_LIBS="$LIBS"
+       have_gcrypt="yes"
+       AC_ARG_WITH(gcrypt_headers, [AC_HELP_STRING(--with-gcrypt-headers=dir,
+               [look for gcrypt headers also in dir])])
+       if test -n "$with_gcrypt_headers"; then
+               gcrypt_cppflags="-I$with_gcrypt_headers"
+               CPPFLAGS="$CPPFLAGS $gcrypt_cppflags"
+       fi
+       AC_ARG_WITH(gcrypt_libs, [AC_HELP_STRING(--with-gcrypt-libs=dir,
+               [look for libgcrypt also in dir])])
+       if test -n "$with_gcrypt_libs"; then
+               gcrypt_libs="-L$with_gcrypt_libs"
+               LDFLAGS="$LDFLAGS $gcrypt_libs"
+       fi
+       AC_CHECK_HEADER(gcrypt.h, [], [have_gcrypt="no"])
+       AC_CHECK_LIB([gcrypt], [gcry_randomize], [], [have_gcrypt="no"])
+       if test "$have_gcrypt" = "yes"; then
+               AC_DEFINE(HAVE_GCRYPT, 1, [define to 1 to turn on gcrypt support])
+               AC_SUBST(gcrypt_cppflags)
+               gcrypt_libs="$gcrypt_libs -lgcrypt"
+               server_ldflags="$server_ldflags $gcrypt_libs"
+               client_ldflags="$client_ldflags $gcrypt_libs"
+               audiod_ldflags="$audiod_ldflags $gcrypt_libs"
+
+               all_errlist_objs="$all_errlist_objs gcrypt"
+               server_errlist_objs="$server_errlist_objs gcrypt"
+               client_errlist_objs="$client_errlist_objs gcrypt"
+               audiod_errlist_objs="$audiod_errlist_objs gcrypt"
+       else
+               AC_MSG_WARN([grypt library not found])
+       fi
+       CPPFLAGS="$OLD_CPPFLAGS"
+       LDFLAGS="$OLD_LDFLAGS"
+       LIBS="$OLD_LIBS"
+else
+       have_gcrypt="no"
+fi
+###########################################################################
+if test "$have_openssl" = "no" -a "$have_gcrypt" = "no"; then
+       AC_MSG_ERROR([neither openssl nor gcrypt usable])
 fi
-CPPFLAGS="$OLD_CPPFLAGS"
-LDFLAGS="$OLD_LDFLAGS"
-LIBS="$OLD_LIBS"
 ########################################################################### libsocket
 AC_CHECK_LIB([c], [socket],
        [socket_lib=],
diff --git a/error.h b/error.h
index 6c843e4..3740f09 100644 (file)
--- a/error.h
+++ b/error.h
@@ -383,6 +383,7 @@ extern const char **para_errlist[];
        PARA_ERROR(BLINDING, "failed to activate key blinding"), \
        PARA_ERROR(BIGNUM, "bignum error"), \
 
+#define GCRYPT_ERRORS \
 
 #define COMMAND_ERRORS \
        PARA_ERROR(COMMAND_SYNTAX, "syntax error in command"), \
diff --git a/gcrypt.c b/gcrypt.c
new file mode 100644 (file)
index 0000000..0de6195
--- /dev/null
+++ b/gcrypt.c
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2011 Andre Noll <maan@systemlinux.org>
+ *
+ * Licensed under the GPL v2. For licencing details see COPYING.
+ */
+
+/** \file gcrypt.c Libgrcypt-based encryption/decryption routines. */
+
+#include <regex.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+
+#include "para.h"
+#include "error.h"
+#include "string.h"
+#include "crypt.h"
+#include "fd.h"
+
+struct asymmetric_key {
+       int x;
+};
+
+void get_random_bytes_or_die(unsigned char *buf, int num)
+{
+}
+
+void init_random_seed_or_die(void)
+{
+}
+
+int get_asymmetric_key(const char *key_file, int private,
+               struct asymmetric_key **result)
+{
+       return 0;
+}
+
+void free_asymmetric_key(struct asymmetric_key *key)
+{
+}
+
+int priv_decrypt(const char *key_file, unsigned char *outbuf,
+               unsigned char *inbuf, int inlen)
+{
+       return 0;
+}
+
+int pub_encrypt(struct asymmetric_key *pub, unsigned char *inbuf,
+               unsigned len, unsigned char *outbuf)
+{
+       return 0;
+}
+
+struct stream_cipher {
+       int x;
+};
+
+struct stream_cipher *sc_new(const unsigned char *data, int len)
+{
+       return NULL;
+}
+
+void sc_free(struct stream_cipher *sc)
+{
+}
+
+int sc_send_bin_buffer(struct stream_cipher_context *scc, const char *buf,
+               size_t len)
+{
+       return 0;
+}
+
+int sc_send_buffer(struct stream_cipher_context *scc, const char *buf)
+{
+       return 0;
+}
+
+__printf_2_3 int sc_send_va_buffer(struct stream_cipher_context *scc,
+               const char *fmt, ...)
+{
+       return 0;
+}
+
+int sc_recv_bin_buffer(struct stream_cipher_context *scc, char *buf,
+               size_t size)
+{
+       return 0;
+}
+
+int sc_recv_buffer(struct stream_cipher_context *scc, char *buf, size_t size)
+{
+       return 0;
+}
+
+void hash_function(const char *data, unsigned long len, unsigned char *hash)
+{
+}