diff options
Diffstat (limited to 'src/lib/libcrypto/evp/pmeth_lib.c')
| -rw-r--r-- | src/lib/libcrypto/evp/pmeth_lib.c | 55 |
1 files changed, 54 insertions, 1 deletions
diff --git a/src/lib/libcrypto/evp/pmeth_lib.c b/src/lib/libcrypto/evp/pmeth_lib.c index 5481d4b8a5..acfa7b6f87 100644 --- a/src/lib/libcrypto/evp/pmeth_lib.c +++ b/src/lib/libcrypto/evp/pmeth_lib.c | |||
| @@ -73,7 +73,7 @@ DECLARE_STACK_OF(EVP_PKEY_METHOD) | |||
| 73 | STACK_OF(EVP_PKEY_METHOD) *app_pkey_methods = NULL; | 73 | STACK_OF(EVP_PKEY_METHOD) *app_pkey_methods = NULL; |
| 74 | 74 | ||
| 75 | extern const EVP_PKEY_METHOD rsa_pkey_meth, dh_pkey_meth, dsa_pkey_meth; | 75 | extern const EVP_PKEY_METHOD rsa_pkey_meth, dh_pkey_meth, dsa_pkey_meth; |
| 76 | extern const EVP_PKEY_METHOD ec_pkey_meth, hmac_pkey_meth; | 76 | extern const EVP_PKEY_METHOD ec_pkey_meth, hmac_pkey_meth, cmac_pkey_meth; |
| 77 | 77 | ||
| 78 | static const EVP_PKEY_METHOD *standard_methods[] = | 78 | static const EVP_PKEY_METHOD *standard_methods[] = |
| 79 | { | 79 | { |
| @@ -90,6 +90,7 @@ static const EVP_PKEY_METHOD *standard_methods[] = | |||
| 90 | &ec_pkey_meth, | 90 | &ec_pkey_meth, |
| 91 | #endif | 91 | #endif |
| 92 | &hmac_pkey_meth, | 92 | &hmac_pkey_meth, |
| 93 | &cmac_pkey_meth | ||
| 93 | }; | 94 | }; |
| 94 | 95 | ||
| 95 | DECLARE_OBJ_BSEARCH_CMP_FN(const EVP_PKEY_METHOD *, const EVP_PKEY_METHOD *, | 96 | DECLARE_OBJ_BSEARCH_CMP_FN(const EVP_PKEY_METHOD *, const EVP_PKEY_METHOD *, |
| @@ -203,6 +204,8 @@ EVP_PKEY_METHOD* EVP_PKEY_meth_new(int id, int flags) | |||
| 203 | if (!pmeth) | 204 | if (!pmeth) |
| 204 | return NULL; | 205 | return NULL; |
| 205 | 206 | ||
| 207 | memset(pmeth, 0, sizeof(EVP_PKEY_METHOD)); | ||
| 208 | |||
| 206 | pmeth->pkey_id = id; | 209 | pmeth->pkey_id = id; |
| 207 | pmeth->flags = flags | EVP_PKEY_FLAG_DYNAMIC; | 210 | pmeth->flags = flags | EVP_PKEY_FLAG_DYNAMIC; |
| 208 | 211 | ||
| @@ -235,6 +238,56 @@ EVP_PKEY_METHOD* EVP_PKEY_meth_new(int id, int flags) | |||
| 235 | return pmeth; | 238 | return pmeth; |
| 236 | } | 239 | } |
| 237 | 240 | ||
| 241 | void EVP_PKEY_meth_get0_info(int *ppkey_id, int *pflags, | ||
| 242 | const EVP_PKEY_METHOD *meth) | ||
| 243 | { | ||
| 244 | if (ppkey_id) | ||
| 245 | *ppkey_id = meth->pkey_id; | ||
| 246 | if (pflags) | ||
| 247 | *pflags = meth->flags; | ||
| 248 | } | ||
| 249 | |||
| 250 | void EVP_PKEY_meth_copy(EVP_PKEY_METHOD *dst, const EVP_PKEY_METHOD *src) | ||
| 251 | { | ||
| 252 | |||
| 253 | dst->init = src->init; | ||
| 254 | dst->copy = src->copy; | ||
| 255 | dst->cleanup = src->cleanup; | ||
| 256 | |||
| 257 | dst->paramgen_init = src->paramgen_init; | ||
| 258 | dst->paramgen = src->paramgen; | ||
| 259 | |||
| 260 | dst->keygen_init = src->keygen_init; | ||
| 261 | dst->keygen = src->keygen; | ||
| 262 | |||
| 263 | dst->sign_init = src->sign_init; | ||
| 264 | dst->sign = src->sign; | ||
| 265 | |||
| 266 | dst->verify_init = src->verify_init; | ||
| 267 | dst->verify = src->verify; | ||
| 268 | |||
| 269 | dst->verify_recover_init = src->verify_recover_init; | ||
| 270 | dst->verify_recover = src->verify_recover; | ||
| 271 | |||
| 272 | dst->signctx_init = src->signctx_init; | ||
| 273 | dst->signctx = src->signctx; | ||
| 274 | |||
| 275 | dst->verifyctx_init = src->verifyctx_init; | ||
| 276 | dst->verifyctx = src->verifyctx; | ||
| 277 | |||
| 278 | dst->encrypt_init = src->encrypt_init; | ||
| 279 | dst->encrypt = src->encrypt; | ||
| 280 | |||
| 281 | dst->decrypt_init = src->decrypt_init; | ||
| 282 | dst->decrypt = src->decrypt; | ||
| 283 | |||
| 284 | dst->derive_init = src->derive_init; | ||
| 285 | dst->derive = src->derive; | ||
| 286 | |||
| 287 | dst->ctrl = src->ctrl; | ||
| 288 | dst->ctrl_str = src->ctrl_str; | ||
| 289 | } | ||
| 290 | |||
| 238 | void EVP_PKEY_meth_free(EVP_PKEY_METHOD *pmeth) | 291 | void EVP_PKEY_meth_free(EVP_PKEY_METHOD *pmeth) |
| 239 | { | 292 | { |
| 240 | if (pmeth && (pmeth->flags & EVP_PKEY_FLAG_DYNAMIC)) | 293 | if (pmeth && (pmeth->flags & EVP_PKEY_FLAG_DYNAMIC)) |
