예제 #1
0
static void _gnutls_global_deinit(unsigned destructor)
{
	GNUTLS_STATIC_MUTEX_LOCK(global_init_mutex);

	if (_gnutls_init == 1) {
		_gnutls_init = 0;
		gnutls_crypto_deinit();
		_gnutls_rnd_deinit();
		_gnutls_ext_deinit();
		asn1_delete_structure(&_gnutls_gnutls_asn);
		asn1_delete_structure(&_gnutls_pkix1_asn);
		_gnutls_crypto_deregister();
		gnutls_system_global_deinit();
		_gnutls_cryptodev_deinit();

#ifdef ENABLE_PKCS11
		/* Do not try to deinitialize the PKCS #11 libraries
		 * from the destructor. If we do and the PKCS #11 modules
		 * are already being unloaded, we may crash.
		 */
		if (destructor == 0) {
			gnutls_pkcs11_deinit();
		}
#endif

		gnutls_mutex_deinit(&_gnutls_file_mutex);
		gnutls_mutex_deinit(&_gnutls_pkcs11_mutex);
	} else {
		if (_gnutls_init > 0)
			_gnutls_init--;
	}
	GNUTLS_STATIC_MUTEX_UNLOCK(global_init_mutex);
}
예제 #2
0
static void wrap_nettle_rnd_deinit(void *ctx)
{
	_rnd_system_entropy_deinit();

	gnutls_mutex_deinit(&nonce_ctx.mutex);
	nonce_ctx.mutex = NULL;
	gnutls_mutex_deinit(&rnd_ctx.mutex);
	rnd_ctx.mutex = NULL;
}
예제 #3
0
static void _gnutls_global_deinit(unsigned destructor)
{
	if (!destructor) {
		GNUTLS_STATIC_MUTEX_LOCK(global_init_mutex);
	}

	if (_gnutls_init == 1) {
		_gnutls_init = 0;
		if (_gnutls_init_ret < 0) {
			/* only deinitialize if gnutls_global_init() has
			 * succeeded */
			gnutls_assert();
			goto fail;
		}

		_gnutls_system_key_deinit();
		gnutls_crypto_deinit();
		_gnutls_rnd_deinit();
		_gnutls_ext_deinit();
		asn1_delete_structure(&_gnutls_gnutls_asn);
		asn1_delete_structure(&_gnutls_pkix1_asn);

		_gnutls_crypto_deregister();
		gnutls_system_global_deinit();
		_gnutls_cryptodev_deinit();

		_gnutls_supplemental_deinit();
		_gnutls_unload_system_priorities();

#ifdef ENABLE_PKCS11
		/* Do not try to deinitialize the PKCS #11 libraries
		 * from the destructor. If we do and the PKCS #11 modules
		 * are already being unloaded, we may crash.
		 */
		if (destructor == 0) {
			gnutls_pkcs11_deinit();
		}
#endif
#ifdef HAVE_TROUSERS
		_gnutls_tpm_global_deinit();
#endif

		gnutls_mutex_deinit(&_gnutls_file_mutex);
		gnutls_mutex_deinit(&_gnutls_pkcs11_mutex);
	} else {
		if (_gnutls_init > 0)
			_gnutls_init--;
	}

 fail:
	if (!destructor) {
		GNUTLS_STATIC_MUTEX_UNLOCK(global_init_mutex);
	}
}
예제 #4
0
/**
 * gnutls_pkcs11_privkey_deinit:
 * @key: the key to be deinitialized
 *
 * This function will deinitialize a private key structure.
 **/
void gnutls_pkcs11_privkey_deinit(gnutls_pkcs11_privkey_t key)
{
	p11_kit_uri_free(key->uinfo);
	gnutls_free(key->url);
	if (key->sinfo.init != 0)
		pkcs11_close_session(&key->sinfo);
	gnutls_mutex_deinit(&key->mutex);
	gnutls_free(key);
}
예제 #5
0
static void
wrap_nettle_rnd_deinit (void *ctx)
{
  RND_LOCK;
  close (device_fd);
  RND_UNLOCK;

  gnutls_mutex_deinit (&rnd_mutex);
  rnd_mutex = NULL;
}
예제 #6
0
static void
wrap_nettle_rnd_deinit (void *ctx)
{
  RND_LOCK;
  CryptReleaseContext (device_fd, 0);
  RND_UNLOCK;

  gnutls_mutex_deinit (&rnd_mutex);
  rnd_mutex = NULL;
}
예제 #7
0
파일: rnd-fips.c 프로젝트: vote539/gnutls
static void _rngfips_deinit(void *_ctx)
{
	struct fips_ctx *ctx = _ctx;

	gnutls_mutex_deinit(&rnd_mutex);
	rnd_mutex = NULL;

	zeroize_key(ctx, sizeof(*ctx));
	free(ctx);
}
예제 #8
0
/**
 * gnutls_global_deinit:
 *
 * This function deinitializes the global data, that were initialized
 * using gnutls_global_init().
 *
 * Note!  This function is not thread safe.  See the discussion for
 * gnutls_global_init() for more information.
 **/
void
gnutls_global_deinit (void)
{
  if (_gnutls_init == 1)
    {
      gl_sockets_cleanup ();
      gnutls_crypto_deinit();
      _gnutls_rnd_deinit ();
      _gnutls_ext_deinit ();
      asn1_delete_structure (&_gnutls_gnutls_asn);
      asn1_delete_structure (&_gnutls_pkix1_asn);
      _gnutls_crypto_deregister ();
      _gnutls_cryptodev_deinit ();
      gnutls_system_global_deinit ();
#ifdef ENABLE_PKCS11
      gnutls_pkcs11_deinit ();
#endif
      gnutls_mutex_deinit(&_gnutls_file_mutex);
    }
  _gnutls_init--;
}