**********************************************************************/
#include <openssl/core_dispatch.h>
+#include <openssl/core_names.h>
#include "gost_prov.h"
#include "gost_lcl.h"
#include "prov/err.h" /* libprov err functions */
proverr_free_handle(ctx->proverr_handle);
OSSL_LIB_CTX_free(ctx->libctx);
}
- free(ctx);
+ OPENSSL_free(ctx);
}
extern int populate_gost_engine(ENGINE *e);
{
PROV_CTX *ctx;
- if ((ctx = malloc(sizeof(*ctx))) != NULL
+ if ((ctx = OPENSSL_zalloc(sizeof(*ctx))) != NULL
&& (ctx->proverr_handle = proverr_new_handle(core, in)) != NULL
&& (ctx->libctx = OSSL_LIB_CTX_new()) != NULL
&& (ctx->e = ENGINE_new()) != NULL
return GOST_prov_ciphers;
case OSSL_OP_DIGEST:
return GOST_prov_digests;
+ case OSSL_OP_MAC:
+ return GOST_prov_macs;
}
return NULL;
}
static int gost_get_params(void *provctx, OSSL_PARAM *params)
{
+ OSSL_PARAM *p;
+
+ p = OSSL_PARAM_locate(params, OSSL_PROV_PARAM_NAME);
+ if (p != NULL && !OSSL_PARAM_set_utf8_ptr(p, "OpenSSL GOST Provider"))
+ return 0;
+ p = OSSL_PARAM_locate(params, OSSL_PROV_PARAM_STATUS);
+ if (p != NULL && !OSSL_PARAM_set_int(p, 1)) /* We never fail. */
+ return 0;
+
return 1;
}
{
GOST_prov_deinit_ciphers();
GOST_prov_deinit_digests();
+ GOST_prov_deinit_mac_digests();
provider_ctx_free(vprovctx);
}
# define OSSL_provider_init GOST_provider_init
#endif
+OPENSSL_EXPORT
int OSSL_provider_init(const OSSL_CORE_HANDLE *core,
const OSSL_DISPATCH *in,
const OSSL_DISPATCH **out,