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); }
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; }
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); } }
/** * 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); }
static void wrap_nettle_rnd_deinit (void *ctx) { RND_LOCK; close (device_fd); RND_UNLOCK; gnutls_mutex_deinit (&rnd_mutex); rnd_mutex = NULL; }
static void wrap_nettle_rnd_deinit (void *ctx) { RND_LOCK; CryptReleaseContext (device_fd, 0); RND_UNLOCK; gnutls_mutex_deinit (&rnd_mutex); rnd_mutex = NULL; }
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); }
/** * 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--; }