Rizin
unix-like reverse engineering framework and cli tools
algo_md4.c
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: 2021 deroad <wargio@libero.it>
2 // SPDX-License-Identifier: LGPL-3.0-only
3 
4 #include <rz_hash.h>
5 #include <rz_util/rz_assert.h>
6 
7 #if HAVE_LIB_SSL
12 #include "../algorithms/openssl_common.h"
13 rz_openssl_plugin_define_hash_cfg(md4, EVP_md4, true);
14 
15 #else /* HAVE_LIB_SSL */
20 #include "../algorithms/md4/md4.h"
21 
22 static void *plugin_md4_context_new() {
23  return RZ_NEW0(RzMD4);
24 }
25 
26 static void plugin_md4_context_free(void *context) {
27  free(context);
28 }
29 
32 }
33 
36 }
37 
38 static bool plugin_md4_init(void *context) {
40 
42  return true;
43 }
44 
45 static bool plugin_md4_update(void *context, const ut8 *data, ut64 size) {
46  rz_return_val_if_fail(context && data, false);
47 
48  rz_md4_update((RzMD4 *)context, data, size);
49  return true;
50 }
51 
52 static bool plugin_md4_final(void *context, ut8 *digest) {
53  rz_return_val_if_fail(context && digest, false);
54 
55  rz_md4_fini(digest, (RzMD4 *)context);
56  return true;
57 }
58 
59 static bool plugin_md4_small_block(const ut8 *data, ut64 size, ut8 **digest, RzHashSize *digest_size) {
60  rz_return_val_if_fail(data && digest, false);
62  if (!dgst) {
63  return false;
64  }
65 
66  RzMD4 ctx;
67  rz_md4_init(&ctx);
68  rz_md4_update(&ctx, data, size);
69  rz_md4_fini(dgst, &ctx);
70 
71  *digest = dgst;
72  if (digest_size) {
73  *digest_size = RZ_HASH_MD4_DIGEST_SIZE;
74  }
75  return true;
76 }
77 
79  .name = "md4",
80  .license = "LGPL3",
81  .author = "deroad",
82  .support_hmac = true,
83  .context_new = plugin_md4_context_new,
84  .context_free = plugin_md4_context_free,
85  .digest_size = plugin_md4_digest_size,
86  .block_size = plugin_md4_block_size,
87  .init = plugin_md4_init,
88  .update = plugin_md4_update,
89  .final = plugin_md4_final,
90  .small_block = plugin_md4_small_block,
91 };
92 
93 #endif /* HAVE_LIB_SSL */
94 
95 #ifndef RZ_PLUGIN_INCORE
98  .data = &rz_hash_plugin_md4,
99  .version = RZ_VERSION
100 };
101 #endif
RzHashPlugin rz_hash_plugin_md4
Definition: algo_md4.c:78
static void * plugin_md4_context_new()
Definition: algo_md4.c:22
static bool plugin_md4_final(void *context, ut8 *digest)
Definition: algo_md4.c:52
static bool plugin_md4_small_block(const ut8 *data, ut64 size, ut8 **digest, RzHashSize *digest_size)
Definition: algo_md4.c:59
RZ_API RzLibStruct rizin_plugin
Definition: algo_md4.c:96
static RzHashSize plugin_md4_digest_size(void *context)
Definition: algo_md4.c:30
static RzHashSize plugin_md4_block_size(void *context)
Definition: algo_md4.c:34
static bool plugin_md4_init(void *context)
Definition: algo_md4.c:38
static void plugin_md4_context_free(void *context)
Definition: algo_md4.c:26
static bool plugin_md4_update(void *context, const ut8 *data, ut64 size)
Definition: algo_md4.c:45
#define RZ_API
RZ_API void Ht_() free(HtName_(Ht) *ht)
Definition: ht_inc.c:130
voidpf void uLong size
Definition: ioapi.h:138
uint8_t ut8
Definition: lh5801.h:11
void * malloc(size_t size)
Definition: malloc.c:123
bool rz_md4_update(RzMD4 *context, const ut8 *data, ut64 length)
Definition: md4.c:105
void rz_md4_init(RzMD4 *context)
Definition: md4.c:17
void rz_md4_fini(ut8 *hash, RzMD4 *context)
Definition: md4.c:154
#define RZ_HASH_MD4_BLOCK_LENGTH
Definition: md4.h:10
#define RZ_HASH_MD4_DIGEST_SIZE
Definition: md4.h:9
#define rz_openssl_plugin_define_hash_cfg(pluginname, evpmd, canhmac)
#define rz_return_val_if_fail(expr, val)
Definition: rz_assert.h:108
ut32 RzHashSize
Definition: rz_hash.h:24
@ RZ_LIB_TYPE_HASH
Definition: rz_lib.h:82
#define RZ_NEW0(x)
Definition: rz_types.h:284
#define RZ_VERSION
Definition: rz_version.h:8
Definition: md4.h:11
const char * name
Definition: rz_hash.h:27
ut64(WINAPI *w32_GetEnabledXStateFeatures)()