Loading crypto/dh/dh_pmeth.c +14 −0 Original line number Diff line number Diff line Loading @@ -93,6 +93,19 @@ static int pkey_dh_init(EVP_PKEY_CTX *ctx) return 1; } static int pkey_dh_copy(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src) { DH_PKEY_CTX *dctx, *sctx; if (!pkey_dh_init(dst)) return 0; sctx = src->data; dctx = dst->data; dctx->prime_len = sctx->prime_len; dctx->generator = sctx->generator; dctx->use_dsa = sctx->use_dsa; return 1; } static void pkey_dh_cleanup(EVP_PKEY_CTX *ctx) { DH_PKEY_CTX *dctx = ctx->data; Loading Loading @@ -208,6 +221,7 @@ const EVP_PKEY_METHOD dh_pkey_meth = EVP_PKEY_DH, EVP_PKEY_FLAG_AUTOARGLEN, pkey_dh_init, pkey_dh_copy, pkey_dh_cleanup, 0, Loading crypto/dsa/dsa_pmeth.c +13 −0 Original line number Diff line number Diff line Loading @@ -91,6 +91,18 @@ static int pkey_dsa_init(EVP_PKEY_CTX *ctx) return 1; } static int pkey_dsa_copy(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src) { DSA_PKEY_CTX *dctx, *sctx; if (!pkey_dsa_init(dst)) return 0; sctx = src->data; dctx = dst->data; dctx->nbits = sctx->nbits; dctx->md = sctx->md; return 1; } static void pkey_dsa_cleanup(EVP_PKEY_CTX *ctx) { DSA_PKEY_CTX *dctx = ctx->data; Loading Loading @@ -223,6 +235,7 @@ const EVP_PKEY_METHOD dsa_pkey_meth = EVP_PKEY_DSA, EVP_PKEY_FLAG_AUTOARGLEN, pkey_dsa_init, pkey_dsa_copy, pkey_dsa_cleanup, 0, Loading crypto/ec/ec_pmeth.c +18 −0 Original line number Diff line number Diff line Loading @@ -88,6 +88,23 @@ static int pkey_ec_init(EVP_PKEY_CTX *ctx) return 1; } static int pkey_ec_copy(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src) { EC_PKEY_CTX *dctx, *sctx; if (!pkey_ec_init(dst)) return 0; sctx = src->data; dctx = dst->data; if (sctx->gen_group) { dctx->gen_group = EC_GROUP_dup(sctx->gen_group); if (!dctx->gen_group) return 0; } dctx->md = sctx->md; return 1; } static void pkey_ec_cleanup(EVP_PKEY_CTX *ctx) { EC_PKEY_CTX *dctx = ctx->data; Loading Loading @@ -284,6 +301,7 @@ const EVP_PKEY_METHOD ec_pkey_meth = EVP_PKEY_EC, 0, pkey_ec_init, pkey_ec_copy, pkey_ec_cleanup, 0, Loading crypto/evp/evp_locl.h +1 −0 Original line number Diff line number Diff line Loading @@ -264,6 +264,7 @@ struct evp_pkey_method_st int flags; int (*init)(EVP_PKEY_CTX *ctx); int (*copy)(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src); void (*cleanup)(EVP_PKEY_CTX *ctx); int (*paramgen_init)(EVP_PKEY_CTX *ctx); Loading crypto/evp/pmeth_lib.c +42 −0 Original line number Diff line number Diff line Loading @@ -150,6 +150,7 @@ EVP_PKEY_METHOD* EVP_PKEY_meth_new(int id, int flags) pmeth->flags = flags | EVP_PKEY_FLAG_DYNAMIC; pmeth->init = 0; pmeth->copy = 0; pmeth->cleanup = 0; pmeth->paramgen_init = 0; pmeth->paramgen = 0; Loading Loading @@ -193,6 +194,41 @@ EVP_PKEY_CTX *EVP_PKEY_CTX_new_id(int id, ENGINE *e) return int_ctx_new(NULL, e, id); } EVP_PKEY_CTX *EVP_PKEY_CTX_dup(EVP_PKEY_CTX *pctx) { EVP_PKEY_CTX *rctx; if (!pctx->pmeth || !pctx->pmeth->copy) return NULL; rctx = OPENSSL_malloc(sizeof(EVP_PKEY_CTX)); if (!rctx) return NULL; rctx->pmeth = pctx->pmeth; if (pctx->pkey) { CRYPTO_add(&pctx->pkey->references,1,CRYPTO_LOCK_EVP_PKEY); rctx->pkey = pctx->pkey; } if (pctx->peerkey) { CRYPTO_add(&pctx->peerkey->references,1,CRYPTO_LOCK_EVP_PKEY); rctx->peerkey = pctx->peerkey; } rctx->data = NULL; rctx->app_data = NULL; rctx->operation = pctx->operation; if (pctx->pmeth->copy(rctx, pctx) > 0) return pctx; EVP_PKEY_CTX_free(rctx); return NULL; } int EVP_PKEY_meth_add0(const EVP_PKEY_METHOD *pmeth) { if (app_pkey_methods == NULL) Loading Loading @@ -305,6 +341,12 @@ void EVP_PKEY_meth_set_init(EVP_PKEY_METHOD *pmeth, pmeth->init = init; } void EVP_PKEY_meth_set_copy(EVP_PKEY_METHOD *pmeth, int (*copy)(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src)) { pmeth->copy = copy; } void EVP_PKEY_meth_set_cleanup(EVP_PKEY_METHOD *pmeth, void (*cleanup)(EVP_PKEY_CTX *ctx)) { Loading Loading
crypto/dh/dh_pmeth.c +14 −0 Original line number Diff line number Diff line Loading @@ -93,6 +93,19 @@ static int pkey_dh_init(EVP_PKEY_CTX *ctx) return 1; } static int pkey_dh_copy(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src) { DH_PKEY_CTX *dctx, *sctx; if (!pkey_dh_init(dst)) return 0; sctx = src->data; dctx = dst->data; dctx->prime_len = sctx->prime_len; dctx->generator = sctx->generator; dctx->use_dsa = sctx->use_dsa; return 1; } static void pkey_dh_cleanup(EVP_PKEY_CTX *ctx) { DH_PKEY_CTX *dctx = ctx->data; Loading Loading @@ -208,6 +221,7 @@ const EVP_PKEY_METHOD dh_pkey_meth = EVP_PKEY_DH, EVP_PKEY_FLAG_AUTOARGLEN, pkey_dh_init, pkey_dh_copy, pkey_dh_cleanup, 0, Loading
crypto/dsa/dsa_pmeth.c +13 −0 Original line number Diff line number Diff line Loading @@ -91,6 +91,18 @@ static int pkey_dsa_init(EVP_PKEY_CTX *ctx) return 1; } static int pkey_dsa_copy(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src) { DSA_PKEY_CTX *dctx, *sctx; if (!pkey_dsa_init(dst)) return 0; sctx = src->data; dctx = dst->data; dctx->nbits = sctx->nbits; dctx->md = sctx->md; return 1; } static void pkey_dsa_cleanup(EVP_PKEY_CTX *ctx) { DSA_PKEY_CTX *dctx = ctx->data; Loading Loading @@ -223,6 +235,7 @@ const EVP_PKEY_METHOD dsa_pkey_meth = EVP_PKEY_DSA, EVP_PKEY_FLAG_AUTOARGLEN, pkey_dsa_init, pkey_dsa_copy, pkey_dsa_cleanup, 0, Loading
crypto/ec/ec_pmeth.c +18 −0 Original line number Diff line number Diff line Loading @@ -88,6 +88,23 @@ static int pkey_ec_init(EVP_PKEY_CTX *ctx) return 1; } static int pkey_ec_copy(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src) { EC_PKEY_CTX *dctx, *sctx; if (!pkey_ec_init(dst)) return 0; sctx = src->data; dctx = dst->data; if (sctx->gen_group) { dctx->gen_group = EC_GROUP_dup(sctx->gen_group); if (!dctx->gen_group) return 0; } dctx->md = sctx->md; return 1; } static void pkey_ec_cleanup(EVP_PKEY_CTX *ctx) { EC_PKEY_CTX *dctx = ctx->data; Loading Loading @@ -284,6 +301,7 @@ const EVP_PKEY_METHOD ec_pkey_meth = EVP_PKEY_EC, 0, pkey_ec_init, pkey_ec_copy, pkey_ec_cleanup, 0, Loading
crypto/evp/evp_locl.h +1 −0 Original line number Diff line number Diff line Loading @@ -264,6 +264,7 @@ struct evp_pkey_method_st int flags; int (*init)(EVP_PKEY_CTX *ctx); int (*copy)(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src); void (*cleanup)(EVP_PKEY_CTX *ctx); int (*paramgen_init)(EVP_PKEY_CTX *ctx); Loading
crypto/evp/pmeth_lib.c +42 −0 Original line number Diff line number Diff line Loading @@ -150,6 +150,7 @@ EVP_PKEY_METHOD* EVP_PKEY_meth_new(int id, int flags) pmeth->flags = flags | EVP_PKEY_FLAG_DYNAMIC; pmeth->init = 0; pmeth->copy = 0; pmeth->cleanup = 0; pmeth->paramgen_init = 0; pmeth->paramgen = 0; Loading Loading @@ -193,6 +194,41 @@ EVP_PKEY_CTX *EVP_PKEY_CTX_new_id(int id, ENGINE *e) return int_ctx_new(NULL, e, id); } EVP_PKEY_CTX *EVP_PKEY_CTX_dup(EVP_PKEY_CTX *pctx) { EVP_PKEY_CTX *rctx; if (!pctx->pmeth || !pctx->pmeth->copy) return NULL; rctx = OPENSSL_malloc(sizeof(EVP_PKEY_CTX)); if (!rctx) return NULL; rctx->pmeth = pctx->pmeth; if (pctx->pkey) { CRYPTO_add(&pctx->pkey->references,1,CRYPTO_LOCK_EVP_PKEY); rctx->pkey = pctx->pkey; } if (pctx->peerkey) { CRYPTO_add(&pctx->peerkey->references,1,CRYPTO_LOCK_EVP_PKEY); rctx->peerkey = pctx->peerkey; } rctx->data = NULL; rctx->app_data = NULL; rctx->operation = pctx->operation; if (pctx->pmeth->copy(rctx, pctx) > 0) return pctx; EVP_PKEY_CTX_free(rctx); return NULL; } int EVP_PKEY_meth_add0(const EVP_PKEY_METHOD *pmeth) { if (app_pkey_methods == NULL) Loading Loading @@ -305,6 +341,12 @@ void EVP_PKEY_meth_set_init(EVP_PKEY_METHOD *pmeth, pmeth->init = init; } void EVP_PKEY_meth_set_copy(EVP_PKEY_METHOD *pmeth, int (*copy)(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src)) { pmeth->copy = copy; } void EVP_PKEY_meth_set_cleanup(EVP_PKEY_METHOD *pmeth, void (*cleanup)(EVP_PKEY_CTX *ctx)) { Loading