X-Git-Url: http://www.wagner.pp.ru/gitweb/?a=blobdiff_plain;f=gost_md.c;h=b8824eb48d5c99f6138c42eed2afc9b72ef41d9b;hb=HEAD;hp=1de9ffd67abb4d9d57e902c8a8f6e80cde6a3cdd;hpb=2893b979bdb5ff1d902dc78c478162854eeb4a4b;p=openssl-gost%2Fengine.git diff --git a/gost_md.c b/gost_md.c index 1de9ffd..b8824eb 100644 --- a/gost_md.c +++ b/gost_md.c @@ -1,6 +1,7 @@ /********************************************************************** * md_gost.c * * Copyright (c) 2005-2006 Cryptocom LTD * + * Copyright (c) 2020 Vitaly Chikunov * * This file is distributed under the same license as OpenSSL * * * * OpenSSL interface to GOST R 34.11-94 hash functions * @@ -36,7 +37,7 @@ GOST_digest GostR3411_94_digest = { * Note: that you cannot template 0 value. */ #define TPL(st,field) ( \ - ((st)->field) ?: TPL_VAL(st,field) \ + ((st)->field) ? ((st)->field) : TPL_VAL(st,field) \ ) #define TPL_VAL(st,field) ( \ @@ -63,27 +64,21 @@ EVP_MD *GOST_init_digest(GOST_digest *d) EVP_MD_meth_free(md); md = NULL; } + if (md && d->alias) + EVP_add_digest_alias(EVP_MD_name(md), d->alias); d->digest = md; return md; } void GOST_deinit_digest(GOST_digest *d) { + if (d->alias) + EVP_delete_digest_alias(d->alias); EVP_MD_meth_free(d->digest); d->digest = NULL; } -EVP_MD *digest_gost(void) -{ - return GOST_init_digest(&GostR3411_94_digest); -} - -void digest_gost_destroy(void) -{ - GOST_deinit_digest(&GostR3411_94_digest); -} - -int gost_digest_init(EVP_MD_CTX *ctx) +static int gost_digest_init(EVP_MD_CTX *ctx) { struct ossl_gost_digest_ctx *c = EVP_MD_CTX_md_data(ctx); memset(&(c->dctx), 0, sizeof(gost_hash_ctx)); @@ -92,18 +87,18 @@ int gost_digest_init(EVP_MD_CTX *ctx) return 1; } -int gost_digest_update(EVP_MD_CTX *ctx, const void *data, size_t count) +static int gost_digest_update(EVP_MD_CTX *ctx, const void *data, size_t count) { return hash_block((gost_hash_ctx *) EVP_MD_CTX_md_data(ctx), data, count); } -int gost_digest_final(EVP_MD_CTX *ctx, unsigned char *md) +static int gost_digest_final(EVP_MD_CTX *ctx, unsigned char *md) { return finish_hash((gost_hash_ctx *) EVP_MD_CTX_md_data(ctx), md); } -int gost_digest_copy(EVP_MD_CTX *to, const EVP_MD_CTX *from) +static int gost_digest_copy(EVP_MD_CTX *to, const EVP_MD_CTX *from) { struct ossl_gost_digest_ctx *md_ctx = EVP_MD_CTX_md_data(to); if (EVP_MD_CTX_md_data(to) && EVP_MD_CTX_md_data(from)) { @@ -114,7 +109,7 @@ int gost_digest_copy(EVP_MD_CTX *to, const EVP_MD_CTX *from) return 1; } -int gost_digest_cleanup(EVP_MD_CTX *ctx) +static int gost_digest_cleanup(EVP_MD_CTX *ctx) { if (EVP_MD_CTX_md_data(ctx)) memset(EVP_MD_CTX_md_data(ctx), 0,