if (ret == NULL)
return NULL;
- ret->lock = CRYPTO_THREAD_lock_new();
- if (ret->lock == NULL) {
- OPENSSL_free(ret);
- return NULL;
- }
-
ret->libctx = key->libctx;
ret->haspubkey = key->haspubkey;
ret->keylen = key->keylen;
ret->type = key->type;
- ret->references = 1;
+
+ if (!CRYPTO_NEW_REF(&ret->references, 1))
+ goto err;
if (key->propq != NULL) {
ret->propq = OPENSSL_strdup(key->propq);
return ret;
err:
+ CRYPTO_FREE_REF(&ret->references);
ossl_ecx_key_free(ret);
return NULL;
}
break;
}
ret->type = type;
- ret->references = 1;
+
+ if (!CRYPTO_NEW_REF(&ret->references, 1))
+ goto err;
if (propq != NULL) {
ret->propq = OPENSSL_strdup(propq);
if (ret->propq == NULL)
goto err;
}
-
- ret->lock = CRYPTO_THREAD_lock_new();
- if (ret->lock == NULL) {
- ERR_raise(ERR_LIB_EC, ERR_R_CRYPTO_LIB);
- goto err;
- }
return ret;
err:
if (ret != NULL) {
OPENSSL_free(ret->propq);
- CRYPTO_THREAD_lock_free(ret->lock);
+ CRYPTO_FREE_REF(&ret->references);
}
OPENSSL_free(ret);
return NULL;
if (key == NULL)
return;
- CRYPTO_DOWN_REF(&key->references, &i, key->lock);
+ CRYPTO_DOWN_REF(&key->references, &i);
REF_PRINT_COUNT("ECX_KEY", key);
if (i > 0)
return;
OPENSSL_free(key->propq);
OPENSSL_secure_clear_free(key->privkey, key->keylen);
- CRYPTO_THREAD_lock_free(key->lock);
+ CRYPTO_FREE_REF(&key->references);
OPENSSL_free(key);
}
{
int i;
- if (CRYPTO_UP_REF(&key->references, &i, key->lock) <= 0)
+ if (CRYPTO_UP_REF(&key->references, &i) <= 0)
return 0;
REF_PRINT_COUNT("ECX_KEY", key);