X-Git-Url: https://git.syn-net.org/debian/?a=blobdiff_plain;f=src%2Fcryptinit.hpp;h=64c57b4d276c61ca072c55554c443b0fa4d114de;hb=99099a6ccd03e2917bf29f8905e376c20033252a;hp=4460de08f249349eb03d025ca75d24bd0f314ef8;hpb=058ae090a970436caec3b3059e9e18b310dd6b0d;p=anytun.git diff --git a/src/cryptinit.hpp b/src/cryptinit.hpp index 4460de0..64c57b4 100644 --- a/src/cryptinit.hpp +++ b/src/cryptinit.hpp @@ -11,14 +11,15 @@ * tunneling and relaying of packets of any protocol. * * - * Copyright (C) 2007-2008 Othmar Gsenger, Erwin Nindl, + * Copyright (C) 2007-2009 Othmar Gsenger, Erwin Nindl, * Christian Pointner * * This file is part of Anytun. * * Anytun is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 3 as - * published by the Free Software Foundation. + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. * * Anytun is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -29,76 +30,72 @@ * along with anytun. If not, see . */ -#ifndef _CRYPTINIT_HPP -#define _CRYPTINIT_HPP +#ifndef ANYTUN_cryptinit_hpp_INCLUDED +#define ANYTUN_cryptinit_hpp_INCLUDED #ifndef NO_CRYPT #ifndef USE_SSL_CRYPTO #include // boost thread callbacks for libgcrypt -#if defined(BOOST_HAS_PTHREADS) - -static int boost_mutex_init(void **priv) +static int boost_mutex_init(void** priv) { - boost::mutex *lock = new boost::mutex(); - if (!lock) + boost::mutex* lock = new boost::mutex(); + if(!lock) { return ENOMEM; + } *priv = lock; return 0; } -static int boost_mutex_destroy(void **lock) +static int boost_mutex_destroy(void** lock) { delete reinterpret_cast(*lock); return 0; } -static int boost_mutex_lock(void **lock) +static int boost_mutex_lock(void** lock) { reinterpret_cast(*lock)->lock(); return 0; } -static int boost_mutex_unlock(void **lock) +static int boost_mutex_unlock(void** lock) { reinterpret_cast(*lock)->unlock(); return 0; } -static struct gcry_thread_cbs gcry_threads_boost = -{ GCRY_THREAD_OPTION_USER, NULL, +static struct gcry_thread_cbs gcry_threads_boost = { + GCRY_THREAD_OPTION_USER, NULL, boost_mutex_init, boost_mutex_destroy, - boost_mutex_lock, boost_mutex_unlock }; -#else -#error this libgcrypt thread callbacks only work with pthreads -#endif - + boost_mutex_lock, boost_mutex_unlock +}; #define MIN_GCRYPT_VERSION "1.2.0" bool initLibGCrypt() { - // make libgcrypt thread safe + // make libgcrypt thread safe // this must be called before any other libgcrypt call - gcry_control( GCRYCTL_SET_THREAD_CBS, &gcry_threads_boost ); + gcry_control(GCRYCTL_SET_THREAD_CBS, &gcry_threads_boost); // this must be called right after the GCRYCTL_SET_THREAD_CBS command // no other function must be called till now - if( !gcry_check_version( MIN_GCRYPT_VERSION ) ) { + if(!gcry_check_version(MIN_GCRYPT_VERSION)) { std::cout << "initLibGCrypt: Invalid Version of libgcrypt, should be >= " << MIN_GCRYPT_VERSION << std::endl; return false; } - gcry_error_t err = gcry_control (GCRYCTL_DISABLE_SECMEM, 0); - if( err ) { + gcry_error_t err = gcry_control(GCRYCTL_DISABLE_SECMEM, 0); + if(err) { std::cout << "initLibGCrypt: Failed to disable secure memory: " << AnytunGpgError(err) << std::endl; return false; } // Tell Libgcrypt that initialization has completed. err = gcry_control(GCRYCTL_INITIALIZATION_FINISHED); - if( err ) { + if(err) { std::cout << "initLibGCrypt: Failed to finish initialization: " << AnytunGpgError(err) << std::endl; return false; } @@ -109,5 +106,17 @@ bool initLibGCrypt() #endif #endif +bool initCrypto() +{ +#ifndef NO_CRYPT +#ifndef USE_SSL_CRYPTO + return initLibGCrypt(); +#else + return true; #endif +#else + return true; +#endif +} +#endif