Viewing file: evp_utils.c (3.61 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */
/* Internal EVP utility functions */
#include <openssl/core.h> #include <openssl/evp.h> #include <openssl/err.h> #include <openssl/asn1.h> /* evp_local.h needs it */ #include <openssl/safestack.h> /* evp_local.h needs it */ #include "crypto/evp.h" /* evp_local.h needs it */ #include "evp_local.h"
/* * EVP_CTRL_RET_UNSUPPORTED = -1 is the returned value from any ctrl function * where the control command isn't supported, and an alternative code path * may be chosen. * Since these functions are used to implement ctrl functionality, we * use the same value, and other callers will have to compensate. */ #define PARAM_CHECK(obj, func, errfunc) \ if (obj == NULL) \ return 0; \ if (obj->prov == NULL) \ return EVP_CTRL_RET_UNSUPPORTED; \ if (obj->func == NULL) { \ errfunc(); \ return 0; \ }
#define PARAM_FUNC(name, func, type, err) \ int name (const type *obj, OSSL_PARAM params[]) \ { \ PARAM_CHECK(obj, func, err) \ return obj->func(params); \ }
#define PARAM_CTX_FUNC(name, func, type, err) \ int name (const type *obj, void *algctx, OSSL_PARAM params[]) \ { \ PARAM_CHECK(obj, func, err) \ return obj->func(algctx, params); \ }
#define PARAM_FUNCTIONS(type, \ getname, getfunc, \ getctxname, getctxfunc, \ setctxname, setctxfunc) \ PARAM_FUNC(getname, getfunc, type, geterr) \ PARAM_CTX_FUNC(getctxname, getctxfunc, type, geterr) \ PARAM_CTX_FUNC(setctxname, setctxfunc, type, seterr)
/* * These error functions are a workaround for the error scripts, which * currently require that XXXerr method appears inside a function (not a macro). */ static void geterr(void) { ERR_raise(ERR_LIB_EVP, EVP_R_CANNOT_GET_PARAMETERS); }
static void seterr(void) { ERR_raise(ERR_LIB_EVP, EVP_R_CANNOT_SET_PARAMETERS); }
PARAM_FUNCTIONS(EVP_CIPHER, evp_do_ciph_getparams, get_params, evp_do_ciph_ctx_getparams, get_ctx_params, evp_do_ciph_ctx_setparams, set_ctx_params)
PARAM_FUNCTIONS(EVP_MD, evp_do_md_getparams, get_params, evp_do_md_ctx_getparams, get_ctx_params, evp_do_md_ctx_setparams, set_ctx_params)
|