*siglen = 0;
return 0;
}
- *siglen = i2d_ECDSA_SIG(s, &sig);
+ *siglen = i2d_ECDSA_SIG(s, sig != NULL ? &sig : NULL);
ECDSA_SIG_free(s);
return 1;
}
if (s == NULL)
goto end;
- *siglen = i2d_ECDSA_SIG(s, &sig);
+ *siglen = i2d_ECDSA_SIG(s, sig != NULL ? &sig : NULL);
ECDSA_SIG_free(s);
ret = 1;
end:
goto done;
}
- sigleni = i2d_ECDSA_SIG(s, &sig);
+ sigleni = i2d_ECDSA_SIG(s, sig != NULL ? &sig : NULL);
if (sigleni < 0) {
ERR_raise(ERR_LIB_SM2, ERR_R_INTERNAL_ERROR);
goto done;
return test_builtin(n, EVP_PKEY_SM2);
}
# endif
+
+static int test_ecdsa_sig_NULL(void)
+{
+ int ret;
+ unsigned int siglen;
+ unsigned char dgst[128] = { 0 };
+ EC_KEY *eckey = NULL;
+
+ ret = TEST_ptr(eckey = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1))
+ && TEST_int_eq(EC_KEY_generate_key(eckey), 1)
+ && TEST_int_eq(ECDSA_sign(0, dgst, sizeof(dgst), NULL, &siglen, eckey), 1)
+ && TEST_int_gt(siglen, 0);
+ EC_KEY_free(eckey);
+ return ret;
+}
+
#endif /* OPENSSL_NO_EC */
int setup_tests(void)
return 0;
}
ADD_ALL_TESTS(test_builtin_as_ec, crv_len);
+ ADD_TEST(test_ecdsa_sig_NULL);
# ifndef OPENSSL_NO_SM2
ADD_ALL_TESTS(test_builtin_as_sm2, crv_len);
# endif