summaryrefslogtreecommitdiffstats
path: root/src/crypto/dsa
diff options
context:
space:
mode:
Diffstat (limited to 'src/crypto/dsa')
-rw-r--r--src/crypto/dsa/CMakeLists.txt2
-rw-r--r--src/crypto/dsa/dsa.c4
-rw-r--r--src/crypto/dsa/dsa_impl.c10
-rw-r--r--src/crypto/dsa/dsa_test.c6
4 files changed, 15 insertions, 7 deletions
diff --git a/src/crypto/dsa/CMakeLists.txt b/src/crypto/dsa/CMakeLists.txt
index dab2c4c..1bb8b63 100644
--- a/src/crypto/dsa/CMakeLists.txt
+++ b/src/crypto/dsa/CMakeLists.txt
@@ -14,6 +14,8 @@ add_executable(
dsa_test
dsa_test.c
+
+ $<TARGET_OBJECTS:test_support>
)
target_link_libraries(dsa_test crypto)
diff --git a/src/crypto/dsa/dsa.c b/src/crypto/dsa/dsa.c
index e8e3d73..65444b1 100644
--- a/src/crypto/dsa/dsa.c
+++ b/src/crypto/dsa/dsa.c
@@ -123,7 +123,7 @@ void DSA_free(DSA *dsa) {
return;
}
- if (CRYPTO_add(&dsa->references, -1, CRYPTO_LOCK_DSA) > 0) {
+ if (!CRYPTO_refcount_dec_and_test_zero(&dsa->references)) {
return;
}
@@ -146,7 +146,7 @@ void DSA_free(DSA *dsa) {
}
int DSA_up_ref(DSA *dsa) {
- CRYPTO_add(&dsa->references, 1, CRYPTO_LOCK_DSA);
+ CRYPTO_refcount_inc(&dsa->references);
return 1;
}
diff --git a/src/crypto/dsa/dsa_impl.c b/src/crypto/dsa/dsa_impl.c
index b7e1fd8..2ab8ba8 100644
--- a/src/crypto/dsa/dsa_impl.c
+++ b/src/crypto/dsa/dsa_impl.c
@@ -501,12 +501,16 @@ static int paramgen(DSA *ret, unsigned bits, const uint8_t *seed_in,
}
ctx = BN_CTX_new();
+ if (ctx == NULL) {
+ goto err;
+ }
+ BN_CTX_start(ctx);
+
mont = BN_MONT_CTX_new();
- if (ctx == NULL || mont == NULL) {
+ if (mont == NULL) {
goto err;
}
- BN_CTX_start(ctx);
r0 = BN_CTX_get(ctx);
g = BN_CTX_get(ctx);
W = BN_CTX_get(ctx);
@@ -516,7 +520,7 @@ static int paramgen(DSA *ret, unsigned bits, const uint8_t *seed_in,
p = BN_CTX_get(ctx);
test = BN_CTX_get(ctx);
- if (!BN_lshift(test, BN_value_one(), bits - 1)) {
+ if (test == NULL || !BN_lshift(test, BN_value_one(), bits - 1)) {
goto err;
}
diff --git a/src/crypto/dsa/dsa_test.c b/src/crypto/dsa/dsa_test.c
index 9b70dbe..8bdaaf4 100644
--- a/src/crypto/dsa/dsa_test.c
+++ b/src/crypto/dsa/dsa_test.c
@@ -238,8 +238,10 @@ static int test_generate(FILE *out) {
goto end;
}
- DSA_generate_key(dsa);
- DSA_sign(0, fips_digest, sizeof(fips_digest), sig, &siglen, dsa);
+ if (!DSA_generate_key(dsa) ||
+ !DSA_sign(0, fips_digest, sizeof(fips_digest), sig, &siglen, dsa)) {
+ goto end;
+ }
if (DSA_verify(0, fips_digest, sizeof(fips_digest), sig, siglen, dsa) == 1) {
ok = 1;
} else {