mirror of https://github.com/vitalif/grive2
use libgcrypt instead of OpenSSL
parent
5cba612084
commit
a09ba40dbc
|
@ -0,0 +1,50 @@
|
||||||
|
|
||||||
|
# - Try to find the Gcrypt library
|
||||||
|
# Once run this will define
|
||||||
|
#
|
||||||
|
# LIBGCRYPT_FOUND - set if the system has the gcrypt library
|
||||||
|
# LIBGCRYPT_CFLAGS - the required gcrypt compilation flags
|
||||||
|
# LIBGCRYPT_LIBRARIES - the linker libraries needed to use the gcrypt library
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006 Brad Hards <bradh@kde.org>
|
||||||
|
#
|
||||||
|
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||||
|
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
|
||||||
|
|
||||||
|
# libgcrypt is moving to pkg-config, but earlier version don't have it
|
||||||
|
|
||||||
|
#search in typical paths for libgcrypt-config
|
||||||
|
FIND_PROGRAM(LIBGCRYPTCONFIG_EXECUTABLE NAMES libgcrypt-config)
|
||||||
|
|
||||||
|
#reset variables
|
||||||
|
set(LIBGCRYPT_LIBRARIES)
|
||||||
|
set(LIBGCRYPT_CFLAGS)
|
||||||
|
|
||||||
|
# if libgcrypt-config has been found
|
||||||
|
IF(LIBGCRYPTCONFIG_EXECUTABLE)
|
||||||
|
|
||||||
|
EXEC_PROGRAM(${LIBGCRYPTCONFIG_EXECUTABLE} ARGS --libs RETURN_VALUE _return_VALUE OUTPUT_VARIABLE LIBGCRYPT_LIBRARIES)
|
||||||
|
|
||||||
|
EXEC_PROGRAM(${LIBGCRYPTCONFIG_EXECUTABLE} ARGS --cflags RETURN_VALUE _return_VALUE OUTPUT_VARIABLE LIBGCRYPT_CFLAGS)
|
||||||
|
|
||||||
|
IF(${LIBGCRYPT_CFLAGS} MATCHES "\n")
|
||||||
|
SET(LIBGCRYPT_CFLAGS " ")
|
||||||
|
ENDIF(${LIBGCRYPT_CFLAGS} MATCHES "\n")
|
||||||
|
|
||||||
|
IF(LIBGCRYPT_LIBRARIES AND LIBGCRYPT_CFLAGS)
|
||||||
|
SET(LIBGCRYPT_FOUND TRUE)
|
||||||
|
ENDIF(LIBGCRYPT_LIBRARIES AND LIBGCRYPT_CFLAGS)
|
||||||
|
|
||||||
|
ENDIF(LIBGCRYPTCONFIG_EXECUTABLE)
|
||||||
|
|
||||||
|
if (LIBGCRYPT_FOUND)
|
||||||
|
if (NOT LibGcrypt_FIND_QUIETLY)
|
||||||
|
message(STATUS "Found libgcrypt: ${LIBGCRYPT_LIBRARIES}")
|
||||||
|
endif (NOT LibGcrypt_FIND_QUIETLY)
|
||||||
|
else (LIBGCRYPT_FOUND)
|
||||||
|
if (LibGcrypt_FIND_REQUIRED)
|
||||||
|
message(FATAL_ERROR "Could not find libgcrypt libraries")
|
||||||
|
endif (LibGcrypt_FIND_REQUIRED)
|
||||||
|
endif (LIBGCRYPT_FOUND)
|
||||||
|
|
||||||
|
MARK_AS_ADVANCED(LIBGCRYPT_CFLAGS LIBGCRYPT_LIBRARIES)
|
|
@ -32,6 +32,8 @@
|
||||||
|
|
||||||
#include <boost/exception/all.hpp>
|
#include <boost/exception/all.hpp>
|
||||||
|
|
||||||
|
#include <gcrypt.h>
|
||||||
|
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
@ -40,10 +42,25 @@
|
||||||
const std::string client_id = "22314510474.apps.googleusercontent.com" ;
|
const std::string client_id = "22314510474.apps.googleusercontent.com" ;
|
||||||
const std::string client_secret = "bl4ufi89h-9MkFlypcI7R785" ;
|
const std::string client_secret = "bl4ufi89h-9MkFlypcI7R785" ;
|
||||||
|
|
||||||
|
// libgcrypt insist this to be done in application, not library
|
||||||
|
void InitGCrypt()
|
||||||
|
{
|
||||||
|
if ( !gcry_check_version(GCRYPT_VERSION) )
|
||||||
|
throw gr::Exception() << gr::expt::ErrMsg( "libgcrypt version mismatch" ) ;
|
||||||
|
|
||||||
|
// disable secure memory
|
||||||
|
gcry_control(GCRYCTL_DISABLE_SECMEM, 0);
|
||||||
|
|
||||||
|
// tell Libgcrypt that initialization has completed
|
||||||
|
gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0);
|
||||||
|
}
|
||||||
|
|
||||||
int main( int argc, char **argv )
|
int main( int argc, char **argv )
|
||||||
{
|
{
|
||||||
using namespace gr ;
|
using namespace gr ;
|
||||||
|
|
||||||
|
InitGCrypt() ;
|
||||||
|
|
||||||
Config config ;
|
Config config ;
|
||||||
|
|
||||||
std::auto_ptr<log::CompositeLog> comp_log(new log::CompositeLog) ;
|
std::auto_ptr<log::CompositeLog> comp_log(new log::CompositeLog) ;
|
||||||
|
|
|
@ -2,7 +2,7 @@ project(libgrive)
|
||||||
|
|
||||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
|
||||||
|
|
||||||
find_package(OpenSSL REQUIRED)
|
find_package(LibGcrypt REQUIRED)
|
||||||
find_package(JSONC REQUIRED)
|
find_package(JSONC REQUIRED)
|
||||||
find_package(CURL REQUIRED)
|
find_package(CURL REQUIRED)
|
||||||
find_package(EXPAT REQUIRED)
|
find_package(EXPAT REQUIRED)
|
||||||
|
@ -73,7 +73,7 @@ add_library( grive SHARED ${LIBGRIVE_SRC} ${OPT_SRC} )
|
||||||
target_link_libraries( grive
|
target_link_libraries( grive
|
||||||
${CURL_LIBRARIES}
|
${CURL_LIBRARIES}
|
||||||
${JSONC_LIBRARY}
|
${JSONC_LIBRARY}
|
||||||
${OPENSSL_LIBRARIES}
|
${LIBGCRYPT_LIBRARIES}
|
||||||
${GDBM_LIBRARIES}
|
${GDBM_LIBRARIES}
|
||||||
${Boost_LIBRARIES}
|
${Boost_LIBRARIES}
|
||||||
${IBERTY_LIBRARY}
|
${IBERTY_LIBRARY}
|
||||||
|
|
|
@ -20,12 +20,14 @@
|
||||||
#include "Crypt.hh"
|
#include "Crypt.hh"
|
||||||
|
|
||||||
#include "StdioFile.hh"
|
#include "StdioFile.hh"
|
||||||
|
#include "Exception.hh"
|
||||||
|
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
|
||||||
// dependent libraries
|
// dependent libraries
|
||||||
#include <openssl/evp.h>
|
#include <gcrypt.h>
|
||||||
|
#include <boost/throw_exception.hpp>
|
||||||
|
|
||||||
namespace gr { namespace crypt {
|
namespace gr { namespace crypt {
|
||||||
|
|
||||||
|
@ -47,23 +49,28 @@ std::string MD5( const fs::path& file )
|
||||||
std::string MD5( StdioFile& file )
|
std::string MD5( StdioFile& file )
|
||||||
{
|
{
|
||||||
char buf[read_size] ;
|
char buf[read_size] ;
|
||||||
EVP_MD_CTX md ;
|
|
||||||
EVP_MD_CTX_init( &md );
|
gcry_md_hd_t hd ;
|
||||||
EVP_DigestInit_ex( &md, EVP_md5(), 0 ) ;
|
gcry_error_t err = gcry_md_open( &hd, GCRY_MD_MD5, GCRY_MD_FLAG_HMAC ) ;
|
||||||
|
if ( err != GPG_ERR_NO_ERROR )
|
||||||
|
{
|
||||||
|
BOOST_THROW_EXCEPTION( Exception() << expt::ErrMsg( gcry_strerror(err) ) ) ;
|
||||||
|
}
|
||||||
|
|
||||||
std::size_t count = 0 ;
|
std::size_t count = 0 ;
|
||||||
while ( (count = file.Read( buf, sizeof(buf) )) > 0 )
|
while ( (count = file.Read( buf, sizeof(buf) )) > 0 )
|
||||||
EVP_DigestUpdate( &md, buf, count ) ;
|
gcry_md_write( hd, buf, count ) ;
|
||||||
|
gcry_md_final(hd) ;
|
||||||
|
|
||||||
unsigned int md5_size = EVP_MAX_MD_SIZE ;
|
unsigned char *md5 = gcry_md_read( hd, GCRY_MD_MD5 ) ;
|
||||||
unsigned char md5[EVP_MAX_MD_SIZE] ;
|
|
||||||
EVP_DigestFinal_ex( &md, md5, &md5_size ) ;
|
|
||||||
|
|
||||||
// format the MD5 string
|
// format the MD5 string
|
||||||
std::ostringstream ss ;
|
std::ostringstream ss ;
|
||||||
for ( unsigned int i = 0 ; i < md5_size ; i++ )
|
for ( unsigned int i = 0 ; i < gcry_md_get_algo_dlen(GCRY_MD_MD5) ; i++ )
|
||||||
ss << std::hex << std::setw(2) << std::setfill('0') << static_cast<int>(md5[i]) ;
|
ss << std::hex << std::setw(2) << std::setfill('0') << static_cast<int>(md5[i]) ;
|
||||||
|
|
||||||
|
gcry_md_close( hd ) ;
|
||||||
|
|
||||||
return ss.str() ;
|
return ss.str() ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue