void EVP_PKEY_free(EVP_PKEY *x) { int i; if (x == NULL) return; i=CRYPTO_add(&x->references,-1,CRYPTO_LOCK_EVP_PKEY); #ifdef REF_PRINT REF_PRINT("EVP_PKEY",x); #endif if (i > 0) return; #ifdef REF_CHECK if (i < 0) { fprintf(stderr,"EVP_PKEY_free, bad reference count\n"); abort(); } #endif EVP_PKEY_free_it(x); #ifndef OPENSSL_NO_X509 if (x->attributes) sk_X509_ATTRIBUTE_pop_free(x->attributes, X509_ATTRIBUTE_free); #endif OPENSSL_free(x); }
void EC_KEY_free(EC_KEY *r) { int i; if (r == NULL) return; i=CRYPTO_add(&r->references,-1,CRYPTO_LOCK_EC); #ifdef REF_PRINT REF_PRINT("EC_KEY",r); #endif if (i > 0) return; #ifdef REF_CHECK if (i < 0) { fprintf(stderr,"EC_KEY_free, bad reference count\n"); abort(); } #endif if (r->group != NULL) EC_GROUP_free(r->group); if (r->pub_key != NULL) EC_POINT_free(r->pub_key); if (r->priv_key != NULL) BN_clear_free(r->priv_key); EC_EX_DATA_free_all_data(&r->method_data); OPENSSL_cleanse((void *)r, sizeof(EC_KEY)); OPENSSL_free(r); }
void DSA_free(DSA *r) { int i; if (r == NULL) return; i=CRYPTO_add(&r->references,-1,CRYPTO_LOCK_DSA); #ifdef REF_PRINT REF_PRINT("DSA",r); #endif if (i > 0) return; #ifdef REF_CHECK if (i < 0) { fprintf(stderr,"DSA_free, bad reference count\n"); abort(); } #endif CRYPTO_free_ex_data(dsa_meth, r, &r->ex_data); if(r->meth->finish) r->meth->finish(r); if (r->p != NULL) BN_clear_free(r->p); if (r->q != NULL) BN_clear_free(r->q); if (r->g != NULL) BN_clear_free(r->g); if (r->pub_key != NULL) BN_clear_free(r->pub_key); if (r->priv_key != NULL) BN_clear_free(r->priv_key); if (r->kinv != NULL) BN_clear_free(r->kinv); if (r->r != NULL) BN_clear_free(r->r); OPENSSL_free(r); }
void EC_KEY_free(EC_KEY *r) { int i; if (r == NULL) return; i = CRYPTO_add(&r->references, -1, CRYPTO_LOCK_EC); #ifdef REF_PRINT REF_PRINT("EC_KEY", r); #endif if (i > 0) return; #ifdef REF_CHECK if (i < 0) { fprintf(stderr, "EC_KEY_free, bad reference count\n"); abort(); } #endif if (r->meth->finish != NULL) r->meth->finish(r); #ifndef OPENSSL_NO_ENGINE if (r->engine != NULL) ENGINE_finish(r->engine); #endif CRYPTO_free_ex_data(CRYPTO_EX_INDEX_EC_KEY, r, &r->ex_data); EC_GROUP_free(r->group); EC_POINT_free(r->pub_key); BN_clear_free(r->priv_key); OPENSSL_clear_free((void *)r, sizeof(EC_KEY)); }
int BIO_free(BIO *a) { int ret=0,i; if (a == NULL) return(0); i=CRYPTO_add(&a->references,-1,CRYPTO_LOCK_BIO); #ifdef REF_PRINT REF_PRINT("BIO",a); #endif if (i > 0) return(1); #ifdef REF_CHECK if (i < 0) { TINYCLR_SSL_FPRINTF(OPENSSL_TYPE__FILE_STDERR,"BIO_free, bad reference count\n"); TINYCLR_SSL_ABORT(); } #endif if ((a->callback != NULL) && ((i=(int)a->callback(a,BIO_CB_FREE,NULL,0,0L,1L)) <= 0)) return(i); CRYPTO_free_ex_data(CRYPTO_EX_INDEX_BIO, a, &a->ex_data); if ((a->method == NULL) || (a->method->destroy == NULL)) return(1); ret=a->method->destroy(a); OPENSSL_free(a); return(1); }
X509 *STORE_get_certificate(STORE *s, OPENSSL_ITEM attributes[], OPENSSL_ITEM parameters[]) { STORE_OBJECT *object; X509 *x; check_store(s,STORE_F_STORE_GET_CERTIFICATE, get_object,STORE_R_NO_GET_OBJECT_FUNCTION); object = s->meth->get_object(s, STORE_OBJECT_TYPE_X509_CERTIFICATE, attributes, parameters); if (!object || !object->data.x509.certificate) { STOREerr(STORE_F_STORE_GET_CERTIFICATE, STORE_R_FAILED_GETTING_CERTIFICATE); return 0; } CRYPTO_add(&object->data.x509.certificate->references,1,CRYPTO_LOCK_X509); #ifdef REF_PRINT REF_PRINT("X509",data); #endif x = object->data.x509.certificate; STORE_OBJECT_free(object); return x; }
void DH_free(DH *r) { int i; if(r == NULL) return; i = CRYPTO_add(&r->references, -1, CRYPTO_LOCK_DH); #ifdef REF_PRINT REF_PRINT("DH",r); #endif if (i > 0) return; #ifdef REF_CHECK if (i < 0) { fprintf(stderr,"DH_free, bad reference count\n"); abort(); } #endif if(r->meth->finish) r->meth->finish(r); CRYPTO_free_ex_data(dh_meth, r, &r->ex_data); if (r->p != NULL) BN_clear_free(r->p); if (r->g != NULL) BN_clear_free(r->g); if (r->q != NULL) BN_clear_free(r->q); if (r->j != NULL) BN_clear_free(r->j); if (r->seed) Free(r->seed); if (r->counter != NULL) BN_clear_free(r->counter); if (r->pub_key != NULL) BN_clear_free(r->pub_key); if (r->priv_key != NULL) BN_clear_free(r->priv_key); Free(r); }
void X509_INFO_free(X509_INFO *x) { int i; if (x == NULL) return; i=CRYPTO_add(&x->references,-1,CRYPTO_LOCK_X509_INFO); #ifdef REF_PRINT REF_PRINT("X509_INFO",x); #endif if (i > 0) return; #ifdef REF_CHECK if (i < 0) { fprintf(stderr,"X509_INFO_free, bad reference count\n"); abort(); } #endif if (x->x509 != NULL) X509_free(x->x509); if (x->crl != NULL) X509_CRL_free(x->crl); if (x->x_pkey != NULL) X509_PKEY_free(x->x_pkey); if (x->enc_data != NULL) OPENSSL_free(x->enc_data); OPENSSL_free(x); }
int BIO_free(BIO *a) { int i; if (a == NULL) return(0); i=CRYPTO_add(&a->references,-1,CRYPTO_LOCK_BIO); #ifdef REF_PRINT REF_PRINT("BIO",a); #endif if (i > 0) return(1); #ifdef REF_CHECK if (i < 0) { fprintf(stderr,"BIO_free, bad reference count\n"); abort(); } #endif if ((a->callback != NULL) && ((i=(int)a->callback(a,BIO_CB_FREE,NULL,0,0L,1L)) <= 0)) return(i); CRYPTO_free_ex_data(CRYPTO_EX_INDEX_BIO, a, &a->ex_data); if ((a->method == NULL) || (a->method->destroy == NULL)) return(1); a->method->destroy(a); OPENSSL_free(a); return(1); }
EVP_PKEY *STORE_get_public_key(STORE *s, OPENSSL_ITEM attributes[], OPENSSL_ITEM parameters[]) { STORE_OBJECT *object; EVP_PKEY *pkey; check_store(s,STORE_F_STORE_GET_PUBLIC_KEY, get_object,STORE_R_NO_GET_OBJECT_FUNCTION); object = s->meth->get_object(s, STORE_OBJECT_TYPE_PUBLIC_KEY, attributes, parameters); if (!object || !object->data.key || !object->data.key) { STOREerr(STORE_F_STORE_GET_PUBLIC_KEY, STORE_R_FAILED_GETTING_KEY); return 0; } CRYPTO_add(&object->data.key->references,1,CRYPTO_LOCK_EVP_PKEY); #ifdef REF_PRINT REF_PRINT("EVP_PKEY",data); #endif pkey = object->data.key; STORE_OBJECT_free(object); return pkey; }
void X509_STORE_free(X509_STORE *vfy) { int i; STACK_OF(X509_LOOKUP) *sk; X509_LOOKUP *lu; if (vfy == NULL) return; i = CRYPTO_add(&vfy->references, -1, CRYPTO_LOCK_X509_STORE); #ifdef REF_PRINT REF_PRINT("X509_STORE", vfy); #endif if (i > 0) return; #ifdef REF_CHECK if (i < 0) { fprintf(stderr, "X509_STORE_free, bad reference count\n"); abort(); /* ok */ } #endif sk = vfy->get_cert_methods; for (i = 0; i < sk_X509_LOOKUP_num(sk); i++) { lu = sk_X509_LOOKUP_value(sk, i); X509_LOOKUP_shutdown(lu); X509_LOOKUP_free(lu); } sk_X509_LOOKUP_free(sk); sk_X509_OBJECT_pop_free(vfy->objs, cleanup); CRYPTO_free_ex_data(CRYPTO_EX_INDEX_X509_STORE, vfy, &vfy->ex_data); X509_VERIFY_PARAM_free(vfy->param); OPENSSL_free(vfy); }
X509_CRL *STORE_get_crl(STORE *s, OPENSSL_ITEM attributes[], OPENSSL_ITEM parameters[]) { STORE_OBJECT *object; X509_CRL *crl; check_store(s,STORE_F_STORE_GET_CRL, get_object,STORE_R_NO_GET_OBJECT_FUNCTION); object = s->meth->get_object(s, STORE_OBJECT_TYPE_X509_CRL, attributes, parameters); if (!object || !object->data.crl) { STOREerr(STORE_F_STORE_GET_CRL, STORE_R_FAILED_GETTING_KEY); return 0; } CRYPTO_add(&object->data.crl->references,1,CRYPTO_LOCK_X509_CRL); #ifdef REF_PRINT REF_PRINT("X509_CRL",data); #endif crl = object->data.crl; STORE_OBJECT_free(object); return crl; }
void X509_PKEY_free(X509_PKEY *x) { int i; if (x == NULL) return; i = CRYPTO_add(&x->references, -1, CRYPTO_LOCK_X509_PKEY); #ifdef REF_PRINT REF_PRINT("X509_PKEY", x); #endif if (i > 0) return; #ifdef REF_CHECK if (i < 0) { fprintf(stderr, "X509_PKEY_free, bad reference count\n"); abort(); } #endif X509_ALGOR_free(x->enc_algor); ASN1_OCTET_STRING_free(x->enc_pkey); EVP_PKEY_free(x->dec_pkey); if (x->key_free) OPENSSL_free(x->key_data); OPENSSL_free(x); }
void ssl_cert_free(CERT *c) { int i; if (c == NULL) return; i = CRYPTO_add(&c->references, -1, CRYPTO_LOCK_SSL_CERT); #ifdef REF_PRINT REF_PRINT("CERT", c); #endif if (i > 0) return; #ifdef REF_CHECK if (i < 0) { fprintf(stderr, "ssl_cert_free, bad reference count\n"); abort(); /* ok */ } #endif #ifndef OPENSSL_NO_RSA RSA_free(c->rsa_tmp); #endif #ifndef OPENSSL_NO_DH DH_free(c->dh_tmp); #endif #ifndef OPENSSL_NO_EC EC_KEY_free(c->ecdh_tmp); #endif ssl_cert_clear_certs(c); if (c->peer_sigalgs) OPENSSL_free(c->peer_sigalgs); if (c->conf_sigalgs) OPENSSL_free(c->conf_sigalgs); if (c->client_sigalgs) OPENSSL_free(c->client_sigalgs); if (c->shared_sigalgs) OPENSSL_free(c->shared_sigalgs); if (c->ctypes) OPENSSL_free(c->ctypes); if (c->verify_store) X509_STORE_free(c->verify_store); if (c->chain_store) X509_STORE_free(c->chain_store); if (c->ciphers_raw) OPENSSL_free(c->ciphers_raw); #ifndef OPENSSL_NO_TLSEXT custom_exts_free(&c->cli_ext); custom_exts_free(&c->srv_ext); #endif if (c->pms) { OPENSSL_cleanse(c->pms, c->pmslen); OPENSSL_free(c->pms); c->pms = NULL; } OPENSSL_free(c); }
void RSA_free(RSA *r) { int i; if (r == NULL) return; i=CRYPTO_add(&r->references,-1,CRYPTO_LOCK_RSA); #ifdef REF_PRINT REF_PRINT("RSA",r); #endif if (i > 0) return; #ifdef REF_CHECK if (i < 0) { fprintf(stderr,"RSA_free, bad reference count\n"); abort(); } #endif if (r->meth->finish) r->meth->finish(r); #ifndef OPENSSL_NO_ENGINE if (r->engine) ENGINE_finish(r->engine); #endif CRYPTO_free_ex_data(CRYPTO_EX_INDEX_RSA, r, &r->ex_data); if (r->n != NULL) BN_clear_free(r->n); if (r->e != NULL) BN_clear_free(r->e); if (r->d != NULL) BN_clear_free(r->d); if (r->p != NULL) BN_clear_free(r->p); if (r->q != NULL) BN_clear_free(r->q); if (r->dmp1 != NULL) BN_clear_free(r->dmp1); if (r->dmq1 != NULL) BN_clear_free(r->dmq1); if (r->iqmp != NULL) BN_clear_free(r->iqmp); if (r->blinding != NULL) BN_BLINDING_free(r->blinding); if (r->mt_blinding != NULL) BN_BLINDING_free(r->mt_blinding); if (r->bignum_data != NULL) OPENSSL_free_locked(r->bignum_data); if (r->additional_primes != NULL) { int j; for (j = 0; j < sk_RSA_additional_prime_num(r->additional_primes); j++) { RSA_additional_prime *ap = sk_RSA_additional_prime_value(r->additional_primes, j); BN_clear_free(ap->prime); BN_clear_free(ap->exp); BN_clear_free(ap->coeff); BN_clear_free(ap->r); } sk_RSA_additional_prime_pop_free(r->additional_primes, int_rsa_free_additional_prime); } OPENSSL_free(r); }
int RSA_up_ref(RSA *r) { int i = CRYPTO_add(&r->references, 1, CRYPTO_LOCK_RSA); #ifdef REF_PRINT REF_PRINT("RSA",r); #endif #if 0//def REF_CHECK if (i < 2) { abort(); } #endif return ((i > 1) ? 1 : 0); }
int EC_KEY_up_ref(EC_KEY *r) { int i = CRYPTO_add(&r->references, 1, CRYPTO_LOCK_EC); #ifdef REF_PRINT REF_PRINT("EC_KEY", r); #endif #ifdef REF_CHECK if (i < 2) { fprintf(stderr, "EC_KEY_up, bad reference count\n"); abort(); } #endif return ((i > 1) ? 1 : 0); }
int RSA_up_ref(RSA *r) { int i = CRYPTO_add(&r->references, 1, CRYPTO_LOCK_RSA); #ifdef REF_PRINT REF_PRINT("RSA", r); #endif #ifdef REF_CHECK if (i < 2) { fprintf(stderr, "RSA_up_ref, bad reference count\n"); abort(); } #endif return ((i > 1) ? 1 : 0); }
int DH_up_ref(DH *r) { int i = CRYPTO_add(&r->references, 1, CRYPTO_LOCK_DH); #ifdef REF_PRINT REF_PRINT("DH", r); #endif #ifdef REF_CHECK if (i < 2) { fprintf(stderr, "DH_up, bad reference count\n"); abort(); } #endif return ((i > 1) ? 1 : 0); }
int DH_up_ref(DH *r) { int i = CRYPTO_add(&r->references, 1, CRYPTO_LOCK_DH); #ifdef REF_PRINT REF_PRINT("DH",r); #endif #ifdef REF_CHECK if (i < 2) { TINYCLR_SSL_FPRINTF(OPENSSL_TYPE__FILE_STDERR, "DH_up, bad reference count\n"); TINYCLR_SSL_ABORT(); } #endif return ((i > 1) ? 1 : 0); }
int DSO_free(DSO *dso) { int i; if(dso == NULL) { DSOerr(DSO_F_DSO_FREE,ERR_R_PASSED_NULL_PARAMETER); return(0); } i=CRYPTO_add(&dso->references,-1,CRYPTO_LOCK_DSO); #ifdef REF_PRINT REF_PRINT("DSO",dso); #endif if(i > 0) return(1); #ifdef REF_CHECK if(i < 0) { fprintf(stderr,"DSO_free, bad reference count\n"); abort(); } #endif if((dso->meth->dso_unload != NULL) && !dso->meth->dso_unload(dso)) { DSOerr(DSO_F_DSO_FREE,DSO_R_UNLOAD_FAILED); return(0); } if((dso->meth->finish != NULL) && !dso->meth->finish(dso)) { DSOerr(DSO_F_DSO_FREE,DSO_R_FINISH_FAILED); return(0); } sk_void_free(dso->meth_data); if(dso->filename != NULL) OPENSSL_free(dso->filename); if(dso->loaded_filename != NULL) OPENSSL_free(dso->loaded_filename); OPENSSL_free(dso); return(1); }
int STORE_store_public_key(STORE *s, EVP_PKEY *data, OPENSSL_ITEM attributes[], OPENSSL_ITEM parameters[]) { STORE_OBJECT *object; int i; check_store(s,STORE_F_STORE_STORE_PUBLIC_KEY, store_object,STORE_R_NO_STORE_OBJECT_FUNCTION); object = STORE_OBJECT_new(); if (!object) { STOREerr(STORE_F_STORE_STORE_PUBLIC_KEY, ERR_R_MALLOC_FAILURE); return 0; } object->data.key = EVP_PKEY_new(); if (!object->data.key) { STOREerr(STORE_F_STORE_STORE_PUBLIC_KEY, ERR_R_MALLOC_FAILURE); return 0; } CRYPTO_add(&data->references,1,CRYPTO_LOCK_EVP_PKEY); #ifdef REF_PRINT REF_PRINT("EVP_PKEY",data); #endif object->data.key = data; i = s->meth->store_object(s, STORE_OBJECT_TYPE_PUBLIC_KEY, object, attributes, parameters); STORE_OBJECT_free(object); if (!i) { STOREerr(STORE_F_STORE_STORE_PUBLIC_KEY, STORE_R_FAILED_STORING_KEY); return 0; } return i; }
void RSA_free(RSA *r) { int i; if (r == NULL) return; i=CRYPTO_add(&r->references,-1,CRYPTO_LOCK_RSA); #ifdef REF_PRINT REF_PRINT("RSA",r); #endif if (i > 0) return; #ifdef REF_CHECK if (i < 0) { fprintf(stderr,"RSA_free, bad reference count\n"); abort(); } #endif if (r->meth->finish) r->meth->finish(r); #ifndef OPENSSL_NO_ENGINE if (r->engine) ENGINE_finish(r->engine); #endif CRYPTO_free_ex_data(CRYPTO_EX_INDEX_RSA, r, &r->ex_data); if (r->n != NULL) BN_clear_free(r->n); if (r->e != NULL) BN_clear_free(r->e); if (r->d != NULL) BN_clear_free(r->d); if (r->p != NULL) BN_clear_free(r->p); if (r->q != NULL) BN_clear_free(r->q); if (r->dmp1 != NULL) BN_clear_free(r->dmp1); if (r->dmq1 != NULL) BN_clear_free(r->dmq1); if (r->iqmp != NULL) BN_clear_free(r->iqmp); #ifndef OPERA_SMALL_VERSION if (r->blinding != NULL) BN_BLINDING_free(r->blinding); if (r->mt_blinding != NULL) BN_BLINDING_free(r->mt_blinding); if (r->bignum_data != NULL) OPENSSL_free_locked(r->bignum_data); #endif OPENSSL_free(r); }
void RSA_free(RSA *r) { int i; if (r == NULL) return; i=CRYPTO_add(&r->references,-1,CRYPTO_LOCK_RSA); #ifdef REF_PRINT REF_PRINT("RSA",r); #endif if (i > 0) return; #ifdef REF_CHECK if (i < 0) { TINYCLR_SSL_FPRINTF(OPENSSL_TYPE__FILE_STDERR,"RSA_free, bad reference count\n"); TINYCLR_SSL_ABORT(); } #endif if (r->meth->finish) r->meth->finish(r); #ifndef OPENSSL_NO_ENGINE if (r->engine) ENGINE_finish(r->engine); #endif CRYPTO_free_ex_data(CRYPTO_EX_INDEX_RSA, r, &r->ex_data); if (r->n != NULL) BN_clear_free(r->n); if (r->e != NULL) BN_clear_free(r->e); if (r->d != NULL) BN_clear_free(r->d); if (r->p != NULL) BN_clear_free(r->p); if (r->q != NULL) BN_clear_free(r->q); if (r->dmp1 != NULL) BN_clear_free(r->dmp1); if (r->dmq1 != NULL) BN_clear_free(r->dmq1); if (r->iqmp != NULL) BN_clear_free(r->iqmp); if (r->blinding != NULL) BN_BLINDING_free(r->blinding); if (r->mt_blinding != NULL) BN_BLINDING_free(r->mt_blinding); if (r->bignum_data != NULL) OPENSSL_free_locked(r->bignum_data); OPENSSL_free(r); }
void EVP_PKEY_free(EVP_PKEY *x) { int i; if (x == NULL) return; i=CRYPTO_add(&x->references,-1,CRYPTO_LOCK_EVP_PKEY); #ifdef REF_PRINT REF_PRINT("EVP_PKEY",x); #endif if (i > 0) return; #ifdef REF_CHECK if (i < 0) { fprintf(stderr,"EVP_PKEY_free, bad reference count\n"); abort(); } #endif EVP_PKEY_free_it(x); OPENSSL_free(x); }
void DSA_free(DSA *r) { int i; if (r == NULL) return; i = CRYPTO_add(&r->references, -1, CRYPTO_LOCK_DSA); #ifdef REF_PRINT REF_PRINT("DSA", r); #endif if (i > 0) return; #ifdef REF_CHECK if (i < 0) { fprintf(stderr, "DSA_free, bad reference count\n"); abort(); } #endif if (r->meth->finish) r->meth->finish(r); #ifndef OPENSSL_NO_ENGINE if (r->engine) ENGINE_finish(r->engine); #endif CRYPTO_free_ex_data(CRYPTO_EX_INDEX_DSA, r, &r->ex_data); BN_clear_free(r->p); BN_clear_free(r->q); BN_clear_free(r->g); BN_clear_free(r->pub_key); BN_clear_free(r->priv_key); BN_clear_free(r->kinv); BN_clear_free(r->r); OPENSSL_free(r); }
void ssl_cert_free(CERT *c) { int i; if (c == NULL) return; i = CRYPTO_add(&c->references, -1, CRYPTO_LOCK_SSL_CERT); #ifdef REF_PRINT REF_PRINT("CERT", c); #endif if (i > 0) return; #ifdef REF_CHECK if (i < 0) { fprintf(stderr, "ssl_cert_free, bad reference count\n"); abort(); /* ok */ } #endif #ifndef OPENSSL_NO_DH DH_free(c->dh_tmp); #endif ssl_cert_clear_certs(c); OPENSSL_free(c->conf_sigalgs); OPENSSL_free(c->client_sigalgs); OPENSSL_free(c->shared_sigalgs); OPENSSL_free(c->ctypes); X509_STORE_free(c->verify_store); X509_STORE_free(c->chain_store); custom_exts_free(&c->cli_ext); custom_exts_free(&c->srv_ext); #ifndef OPENSSL_NO_PSK OPENSSL_free(c->psk_identity_hint); #endif OPENSSL_free(c); }
X509 *STORE_list_certificate_next(STORE *s, void *handle) { STORE_OBJECT *object; X509 *x; check_store(s,STORE_F_STORE_LIST_CERTIFICATE_NEXT, list_object_next,STORE_R_NO_LIST_OBJECT_NEXT_FUNCTION); object = s->meth->list_object_next(s, handle); if (!object || !object->data.x509.certificate) { STOREerr(STORE_F_STORE_LIST_CERTIFICATE_NEXT, STORE_R_FAILED_LISTING_CERTIFICATES); return 0; } CRYPTO_add(&object->data.x509.certificate->references,1,CRYPTO_LOCK_X509); #ifdef REF_PRINT REF_PRINT("X509",data); #endif x = object->data.x509.certificate; STORE_OBJECT_free(object); return x; }
EVP_PKEY *STORE_list_public_key_next(STORE *s, void *handle) { STORE_OBJECT *object; EVP_PKEY *pkey; check_store(s,STORE_F_STORE_LIST_PUBLIC_KEY_NEXT, list_object_next,STORE_R_NO_LIST_OBJECT_NEXT_FUNCTION); object = s->meth->list_object_next(s, handle); if (!object || !object->data.key || !object->data.key) { STOREerr(STORE_F_STORE_LIST_PUBLIC_KEY_NEXT, STORE_R_FAILED_LISTING_KEYS); return 0; } CRYPTO_add(&object->data.key->references,1,CRYPTO_LOCK_EVP_PKEY); #ifdef REF_PRINT REF_PRINT("EVP_PKEY",data); #endif pkey = object->data.key; STORE_OBJECT_free(object); return pkey; }
void EVP_PKEY_free(EVP_PKEY *x) { int i; if (x == NULL) return; i=CRYPTO_add(&x->references,-1,CRYPTO_LOCK_EVP_PKEY); #ifdef REF_PRINT REF_PRINT("EVP_PKEY",x); #endif if (i > 0) return; #ifdef REF_CHECK if (i < 0) { TINYCLR_SSL_FPRINTF(OPENSSL_TYPE__FILE_STDERR,"EVP_PKEY_free, bad reference count\n"); TINYCLR_SSL_ABORT(); } #endif EVP_PKEY_free_it(x); if (x->attributes) sk_X509_ATTRIBUTE_pop_free(x->attributes, X509_ATTRIBUTE_free); OPENSSL_free(x); }