emile: make cipher initialization optional.
This commit is contained in:
parent
f9dd639a92
commit
32c5f691c8
|
@ -106,6 +106,8 @@ EAPI int emile_shutdown(void);
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
EAPI Eina_Bool emile_cipher_init(void);
|
||||||
|
|
||||||
EAPI Eina_Binbuf *emile_binbuf_cipher(const Eina_Binbuf *in,
|
EAPI Eina_Binbuf *emile_binbuf_cipher(const Eina_Binbuf *in,
|
||||||
const char *key, unsigned int length);
|
const char *key, unsigned int length);
|
||||||
|
|
||||||
|
|
|
@ -175,6 +175,8 @@ emile_binbuf_cipher(const Eina_Binbuf *data,
|
||||||
int tmp_len;
|
int tmp_len;
|
||||||
# endif /* ifdef HAVE_GNUTLS */
|
# endif /* ifdef HAVE_GNUTLS */
|
||||||
|
|
||||||
|
if (!emile_cipher_init()) return NULL;
|
||||||
|
|
||||||
# ifdef HAVE_GNUTLS
|
# ifdef HAVE_GNUTLS
|
||||||
/* Gcrypt salt generation */
|
/* Gcrypt salt generation */
|
||||||
gcry_create_nonce((unsigned char *)&salt, sizeof(salt));
|
gcry_create_nonce((unsigned char *)&salt, sizeof(salt));
|
||||||
|
@ -338,6 +340,8 @@ emile_binbuf_decipher(const Eina_Binbuf *data,
|
||||||
int tmp = 0;
|
int tmp = 0;
|
||||||
int opened = 0;
|
int opened = 0;
|
||||||
|
|
||||||
|
if (!emile_cipher_init()) return NULL;
|
||||||
|
|
||||||
over = (unsigned int*) eina_binbuf_string_get(data);
|
over = (unsigned int*) eina_binbuf_string_get(data);
|
||||||
size = eina_binbuf_length_get(data);
|
size = eina_binbuf_length_get(data);
|
||||||
|
|
||||||
|
|
|
@ -23,24 +23,14 @@
|
||||||
GCRY_THREAD_OPTION_PTHREAD_IMPL;
|
GCRY_THREAD_OPTION_PTHREAD_IMPL;
|
||||||
#endif /* ifdef HAVE_GNUTLS */
|
#endif /* ifdef HAVE_GNUTLS */
|
||||||
|
|
||||||
|
static Eina_Bool _emile_cipher_init = EINA_FALSE;
|
||||||
static unsigned int _emile_init_count = 0;
|
static unsigned int _emile_init_count = 0;
|
||||||
int _emile_log_dom_global = -1;
|
int _emile_log_dom_global = -1;
|
||||||
|
|
||||||
EAPI int
|
EAPI Eina_Bool
|
||||||
emile_init(void)
|
emile_cipher_init(void)
|
||||||
{
|
{
|
||||||
if (++_emile_init_count != 1)
|
if (_emile_cipher_init) return EINA_TRUE;
|
||||||
return _emile_init_count;
|
|
||||||
|
|
||||||
if (!eina_init())
|
|
||||||
return --_emile_init_count;
|
|
||||||
|
|
||||||
_emile_log_dom_global = eina_log_domain_register("emile", EINA_COLOR_CYAN);
|
|
||||||
if (_emile_log_dom_global < 0)
|
|
||||||
{
|
|
||||||
EINA_LOG_ERR("Emile can not create a general log domain.");
|
|
||||||
goto shutdown_eina;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef HAVE_GNUTLS
|
#ifdef HAVE_GNUTLS
|
||||||
/* Before the library can be used, it must initialize itself if needed. */
|
/* Before the library can be used, it must initialize itself if needed. */
|
||||||
|
@ -50,7 +40,7 @@ emile_init(void)
|
||||||
/* Disable warning messages about problems with the secure memory subsystem.
|
/* Disable warning messages about problems with the secure memory subsystem.
|
||||||
This command should be run right after gcry_check_version. */
|
This command should be run right after gcry_check_version. */
|
||||||
if (gcry_control(GCRYCTL_DISABLE_SECMEM_WARN))
|
if (gcry_control(GCRYCTL_DISABLE_SECMEM_WARN))
|
||||||
goto shutdown_eet; /* This command is used to allocate a pool of secure memory and thus
|
return EINA_FALSE; /* This command is used to allocate a pool of secure memory and thus
|
||||||
enabling the use of secure memory. It also drops all extra privileges the
|
enabling the use of secure memory. It also drops all extra privileges the
|
||||||
process has (i.e. if it is run as setuid (root)). If the argument nbytes
|
process has (i.e. if it is run as setuid (root)). If the argument nbytes
|
||||||
is 0, secure memory will be disabled. The minimum amount of secure memory
|
is 0, secure memory will be disabled. The minimum amount of secure memory
|
||||||
|
@ -67,7 +57,7 @@ emile_init(void)
|
||||||
"YOU ARE USING PTHREADS, BUT I CANNOT INITIALIZE THREADSAFE GCRYPT OPERATIONS!");
|
"YOU ARE USING PTHREADS, BUT I CANNOT INITIALIZE THREADSAFE GCRYPT OPERATIONS!");
|
||||||
|
|
||||||
if (gnutls_global_init())
|
if (gnutls_global_init())
|
||||||
goto shutdown_eet;
|
return EINA_FALSE;
|
||||||
|
|
||||||
#endif /* ifdef HAVE_GNUTLS */
|
#endif /* ifdef HAVE_GNUTLS */
|
||||||
#ifdef HAVE_OPENSSL
|
#ifdef HAVE_OPENSSL
|
||||||
|
@ -77,6 +67,27 @@ emile_init(void)
|
||||||
OpenSSL_add_all_algorithms();
|
OpenSSL_add_all_algorithms();
|
||||||
#endif /* ifdef HAVE_OPENSSL */
|
#endif /* ifdef HAVE_OPENSSL */
|
||||||
|
|
||||||
|
_emile_cipher_init = EINA_TRUE;
|
||||||
|
|
||||||
|
return EINA_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI int
|
||||||
|
emile_init(void)
|
||||||
|
{
|
||||||
|
if (++_emile_init_count != 1)
|
||||||
|
return _emile_init_count;
|
||||||
|
|
||||||
|
if (!eina_init())
|
||||||
|
return --_emile_init_count;
|
||||||
|
|
||||||
|
_emile_log_dom_global = eina_log_domain_register("emile", EINA_COLOR_CYAN);
|
||||||
|
if (_emile_log_dom_global < 0)
|
||||||
|
{
|
||||||
|
EINA_LOG_ERR("Emile can not create a general log domain.");
|
||||||
|
goto shutdown_eina;
|
||||||
|
}
|
||||||
|
|
||||||
eina_log_timing(_emile_log_dom_global,
|
eina_log_timing(_emile_log_dom_global,
|
||||||
EINA_LOG_STATE_STOP,
|
EINA_LOG_STATE_STOP,
|
||||||
EINA_LOG_STATE_INIT);
|
EINA_LOG_STATE_INIT);
|
||||||
|
@ -99,6 +110,8 @@ emile_shutdown(void)
|
||||||
EINA_LOG_STATE_START,
|
EINA_LOG_STATE_START,
|
||||||
EINA_LOG_STATE_SHUTDOWN);
|
EINA_LOG_STATE_SHUTDOWN);
|
||||||
|
|
||||||
|
if (_emile_cipher_init)
|
||||||
|
{
|
||||||
#ifdef HAVE_GNUTLS
|
#ifdef HAVE_GNUTLS
|
||||||
/* Note that gnutls has a leak where it doesnt free stuff it alloced
|
/* Note that gnutls has a leak where it doesnt free stuff it alloced
|
||||||
* on init. valgrind trace here:
|
* on init. valgrind trace here:
|
||||||
|
@ -119,6 +132,7 @@ emile_shutdown(void)
|
||||||
EVP_cleanup();
|
EVP_cleanup();
|
||||||
ERR_free_strings();
|
ERR_free_strings();
|
||||||
#endif /* ifdef HAVE_OPENSSL */
|
#endif /* ifdef HAVE_OPENSSL */
|
||||||
|
}
|
||||||
|
|
||||||
eina_log_domain_unregister(_emile_log_dom_global);
|
eina_log_domain_unregister(_emile_log_dom_global);
|
||||||
_emile_log_dom_global = -1;
|
_emile_log_dom_global = -1;
|
||||||
|
|
Loading…
Reference in New Issue