1/********************************************************************** 2 * md_gost.c * 3 * Copyright (c) 2005-2006 Cryptocom LTD * 4 * This file is distributed under the same license as OpenSSL * 5 * * 6 * OpenSSL interface to GOST R 34.11-94 hash functions * 7 * Requires OpenSSL 0.9.9 for compilation * 8 **********************************************************************/ 9#include <string.h> 10#include "gost_lcl.h" 11#include "gosthash.h" 12#include "e_gost_err.h" 13 14/* implementation of GOST 34.11 hash function See gost_md.c*/ 15static int gost_digest_init(EVP_MD_CTX *ctx);
| 1/********************************************************************** 2 * md_gost.c * 3 * Copyright (c) 2005-2006 Cryptocom LTD * 4 * This file is distributed under the same license as OpenSSL * 5 * * 6 * OpenSSL interface to GOST R 34.11-94 hash functions * 7 * Requires OpenSSL 0.9.9 for compilation * 8 **********************************************************************/ 9#include <string.h> 10#include "gost_lcl.h" 11#include "gosthash.h" 12#include "e_gost_err.h" 13 14/* implementation of GOST 34.11 hash function See gost_md.c*/ 15static int gost_digest_init(EVP_MD_CTX *ctx);
|
16static int gost_digest_update(EVP_MD_CTX *ctx, const void *data, size_t count); 17static int gost_digest_final(EVP_MD_CTX *ctx,unsigned char *md); 18static int gost_digest_copy(EVP_MD_CTX *to,const EVP_MD_CTX *from);
| 16static int gost_digest_update(EVP_MD_CTX *ctx, const void *data, 17 size_t count); 18static int gost_digest_final(EVP_MD_CTX *ctx, unsigned char *md); 19static int gost_digest_copy(EVP_MD_CTX *to, const EVP_MD_CTX *from);
|
19static int gost_digest_cleanup(EVP_MD_CTX *ctx); 20
| 20static int gost_digest_cleanup(EVP_MD_CTX *ctx); 21
|
21EVP_MD digest_gost= 22 { 23 NID_id_GostR3411_94, 24 NID_undef, 25 32, 26 EVP_MD_FLAG_PKEY_METHOD_SIGNATURE, 27 gost_digest_init, 28 gost_digest_update, 29 gost_digest_final, 30 gost_digest_copy, 31 gost_digest_cleanup, 32 NULL, 33 NULL, 34 {NID_undef,NID_undef,0,0,0}, 35 32, 36 sizeof(struct ossl_gost_digest_ctx ), 37 NULL 38 };
| 22EVP_MD digest_gost = { 23 NID_id_GostR3411_94, 24 NID_undef, 25 32, 26 EVP_MD_FLAG_PKEY_METHOD_SIGNATURE, 27 gost_digest_init, 28 gost_digest_update, 29 gost_digest_final, 30 gost_digest_copy, 31 gost_digest_cleanup, 32 NULL, 33 NULL, 34 {NID_undef, NID_undef, 0, 0, 0}, 35 32, 36 sizeof(struct ossl_gost_digest_ctx), 37 NULL 38};
|
39
| 39
|
40int gost_digest_init(EVP_MD_CTX *ctx) 41 { 42 struct ossl_gost_digest_ctx *c = ctx->md_data; 43 memset(&(c->dctx),0,sizeof(gost_hash_ctx)); 44 gost_init(&(c->cctx),&GostR3411_94_CryptoProParamSet); 45 c->dctx.cipher_ctx= &(c->cctx); 46 return 1; 47 }
| 40int gost_digest_init(EVP_MD_CTX *ctx) 41{ 42 struct ossl_gost_digest_ctx *c = ctx->md_data; 43 memset(&(c->dctx), 0, sizeof(gost_hash_ctx)); 44 gost_init(&(c->cctx), &GostR3411_94_CryptoProParamSet); 45 c->dctx.cipher_ctx = &(c->cctx); 46 return 1; 47}
|
48
| 48
|
49int gost_digest_update(EVP_MD_CTX *ctx,const void *data,size_t count) 50 { 51 return hash_block((gost_hash_ctx *)ctx->md_data,data,count); 52 }
| 49int gost_digest_update(EVP_MD_CTX *ctx, const void *data, size_t count) 50{ 51 return hash_block((gost_hash_ctx *) ctx->md_data, data, count); 52}
|
53
| 53
|
54int gost_digest_final(EVP_MD_CTX *ctx,unsigned char *md) 55 { 56 return finish_hash((gost_hash_ctx *)ctx->md_data,md); 57 58 }
| 54int gost_digest_final(EVP_MD_CTX *ctx, unsigned char *md) 55{ 56 return finish_hash((gost_hash_ctx *) ctx->md_data, md);
|
59
| 57
|
60int gost_digest_copy(EVP_MD_CTX *to,const EVP_MD_CTX *from) 61 { 62 struct ossl_gost_digest_ctx *md_ctx=to->md_data; 63 if (to->md_data && from->md_data) { 64 memcpy(to->md_data,from->md_data,sizeof(struct ossl_gost_digest_ctx)); 65 md_ctx->dctx.cipher_ctx=&(md_ctx->cctx); 66 } 67 return 1; 68 }
| 58}
|
69
| 59
|
70int gost_digest_cleanup(EVP_MD_CTX *ctx) 71 { 72 if (ctx->md_data) 73 memset(ctx->md_data,0,sizeof(struct ossl_gost_digest_ctx)); 74 return 1; 75 }
| 60int gost_digest_copy(EVP_MD_CTX *to, const EVP_MD_CTX *from) 61{ 62 struct ossl_gost_digest_ctx *md_ctx = to->md_data; 63 if (to->md_data && from->md_data) { 64 memcpy(to->md_data, from->md_data, 65 sizeof(struct ossl_gost_digest_ctx)); 66 md_ctx->dctx.cipher_ctx = &(md_ctx->cctx); 67 } 68 return 1; 69} 70 71int gost_digest_cleanup(EVP_MD_CTX *ctx) 72{ 73 if (ctx->md_data) 74 memset(ctx->md_data, 0, sizeof(struct ossl_gost_digest_ctx)); 75 return 1; 76}
|
| |