X-Git-Url: https://git.openssl.org/?p=openssl.git;a=blobdiff_plain;f=crypto%2Fdsa%2Fdsa_meth.c;h=51a486b2ec1d22fef2da12beead2426cdd3bad8d;hp=4379d9d5d1bcf6d102620f24799a61b0fd9e1a1e;hb=7af42628c1f2864cd73659245742baabdb1a449f;hpb=d2e9e320186f0917cc940f46bdf1a7e4120da9b0 diff --git a/crypto/dsa/dsa_meth.c b/crypto/dsa/dsa_meth.c index 4379d9d5d1..51a486b2ec 100644 --- a/crypto/dsa/dsa_meth.c +++ b/crypto/dsa/dsa_meth.c @@ -17,40 +17,50 @@ #include "dsa_locl.h" #include +#include DSA_METHOD *DSA_meth_new(const char *name, int flags) { - DSA_METHOD *dsam = OPENSSL_zalloc(sizeof(DSA_METHOD)); + DSA_METHOD *dsam = OPENSSL_zalloc(sizeof(*dsam)); if (dsam != NULL) { - dsam->name = OPENSSL_strdup(name); dsam->flags = flags; + + dsam->name = OPENSSL_strdup(name); + if (dsam->name != NULL) + return dsam; + + OPENSSL_free(dsam); } - return dsam; + DSAerr(DSA_F_DSA_METH_NEW, ERR_R_MALLOC_FAILURE); + return NULL; } void DSA_meth_free(DSA_METHOD *dsam) { if (dsam != NULL) { - if (dsam->name != NULL) - OPENSSL_free(dsam->name); + OPENSSL_free(dsam->name); OPENSSL_free(dsam); } } DSA_METHOD *DSA_meth_dup(const DSA_METHOD *dsam) { - DSA_METHOD *ret; - - ret = OPENSSL_malloc(sizeof(DSA_METHOD)); + DSA_METHOD *ret = OPENSSL_malloc(sizeof(*ret)); if (ret != NULL) { memcpy(ret, dsam, sizeof(*dsam)); + ret->name = OPENSSL_strdup(dsam->name); + if (ret->name != NULL) + return ret; + + OPENSSL_free(ret); } - return ret; + DSAerr(DSA_F_DSA_METH_DUP, ERR_R_MALLOC_FAILURE); + return NULL; } const char *DSA_meth_get0_name(const DSA_METHOD *dsam) @@ -60,10 +70,17 @@ const char *DSA_meth_get0_name(const DSA_METHOD *dsam) int DSA_meth_set1_name(DSA_METHOD *dsam, const char *name) { + char *tmpname = OPENSSL_strdup(name); + + if (tmpname == NULL) { + DSAerr(DSA_F_DSA_METH_SET1_NAME, ERR_R_MALLOC_FAILURE); + return 0; + } + OPENSSL_free(dsam->name); - dsam->name = OPENSSL_strdup(name); + dsam->name = tmpname; - return dsam->name != NULL; + return 1; } int DSA_meth_get_flags(DSA_METHOD *dsam) @@ -115,7 +132,7 @@ int DSA_meth_set_sign_setup(DSA_METHOD *dsam, } int (*DSA_meth_get_verify(const DSA_METHOD *dsam)) - (const unsigned char *, int , DSA_SIG *, DSA *) + (const unsigned char *, int, DSA_SIG *, DSA *) { return dsam->dsa_do_verify; } @@ -128,29 +145,30 @@ int DSA_meth_set_verify(DSA_METHOD *dsam, } int (*DSA_meth_get_mod_exp(const DSA_METHOD *dsam)) - (DSA *, BIGNUM *, BIGNUM *, BIGNUM *, BIGNUM *, BIGNUM *, BIGNUM *, - BN_CTX *, BN_MONT_CTX *) + (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, + const BIGNUM *, const BIGNUM *, BN_CTX *, BN_MONT_CTX *) { return dsam->dsa_mod_exp; } int DSA_meth_set_mod_exp(DSA_METHOD *dsam, - int (*mod_exp) (DSA *, BIGNUM *, BIGNUM *, BIGNUM *, BIGNUM *, BIGNUM *, - BIGNUM *, BN_CTX *, BN_MONT_CTX *)) + int (*mod_exp) (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, + const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *, + BN_MONT_CTX *)) { dsam->dsa_mod_exp = mod_exp; return 1; } int (*DSA_meth_get_bn_mod_exp(const DSA_METHOD *dsam)) - (DSA *, BIGNUM *, BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *, + (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *, BN_MONT_CTX *) { return dsam->bn_mod_exp; } int DSA_meth_set_bn_mod_exp(DSA_METHOD *dsam, - int (*bn_mod_exp) (DSA *, BIGNUM *, BIGNUM *, const BIGNUM *, + int (*bn_mod_exp) (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *, BN_MONT_CTX *)) { dsam->bn_mod_exp = bn_mod_exp;