]> www.wagner.pp.ru Git - openssl-gost/engine.git/blobdiff - gost_md.c
tcl_tests: ca.try: Ignore openssl crl exit status for 'corrupted CRL' test
[openssl-gost/engine.git] / gost_md.c
index 1de9ffd67abb4d9d57e902c8a8f6e80cde6a3cdd..b8824eb48d5c99f6138c42eed2afc9b72ef41d9b 100644 (file)
--- 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 <vt@altlinux.org>   *
  *         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,