From: Andre Noll Date: Sat, 5 Mar 2011 15:39:30 +0000 (+0100) Subject: Add configure checks and stubs for gcrypt support. X-Git-Tag: v0.4.8~21^2~7 X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=commitdiff_plain;h=56e2e6b938e7e3d318964f095ffcabc151411446 Add configure checks and stubs for gcrypt support. Compiles but does not yet work as all functions are dummies ATM. --- diff --git a/configure.ac b/configure.ac index 1190821c..e2fba306 100644 --- a/configure.ac +++ b/configure.ac @@ -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 6c843e40..3740f09d 100644 --- 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 index 00000000..0de61959 --- /dev/null +++ b/gcrypt.c @@ -0,0 +1,96 @@ +/* + * Copyright (C) 2011 Andre Noll + * + * Licensed under the GPL v2. For licencing details see COPYING. + */ + +/** \file gcrypt.c Libgrcypt-based encryption/decryption routines. */ + +#include +#include +#include + +#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) +{ +}