Rizin
unix-like reverse engineering framework and cli tools
algo_xor16.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 #include "../algorithms/xor/xor.h"
8 
9 static void *plugin_xor16_context_new() {
10  return RZ_NEW0(RzXor16);
11 }
12 
13 static void plugin_xor16_context_free(void *context) {
14  free(context);
15 }
16 
19 }
20 
23 }
24 
25 static bool plugin_xor16_init(void *context) {
27 
29  return true;
30 }
31 
32 static bool plugin_xor16_update(void *context, const ut8 *data, ut64 size) {
33  rz_return_val_if_fail(context && data, false);
34 
36  return true;
37 }
38 
39 static bool plugin_xor16_final(void *context, ut8 *digest) {
40  rz_return_val_if_fail(context && digest, false);
41 
42  rz_xor16_final(digest, (RzXor16 *)context);
43  return true;
44 }
45 
46 static bool plugin_xor16_small_block(const ut8 *data, ut64 size, ut8 **digest, RzHashSize *digest_size) {
47  rz_return_val_if_fail(data && digest, false);
49  if (!dgst) {
50  return false;
51  }
52 
53  RzXor16 ctx;
55  rz_xor16_update(&ctx, data, size);
56  rz_xor16_final(dgst, &ctx);
57 
58  *digest = dgst;
59  if (digest_size) {
60  *digest_size = RZ_HASH_XOR16_DIGEST_SIZE;
61  }
62  return true;
63 }
64 
66  .name = "xor16",
67  .license = "LGPL3",
68  .author = "deroad",
69  .support_hmac = false,
70  .context_new = plugin_xor16_context_new,
71  .context_free = plugin_xor16_context_free,
72  .digest_size = plugin_xor16_digest_size,
73  .block_size = plugin_xor16_block_size,
74  .init = plugin_xor16_init,
75  .update = plugin_xor16_update,
76  .final = plugin_xor16_final,
77  .small_block = plugin_xor16_small_block,
78 };
79 
80 #ifndef RZ_PLUGIN_INCORE
83  .data = &rz_hash_plugin_xor16,
84  .version = RZ_VERSION
85 };
86 #endif
static bool plugin_xor16_final(void *context, ut8 *digest)
Definition: algo_xor16.c:39
static void plugin_xor16_context_free(void *context)
Definition: algo_xor16.c:13
static void * plugin_xor16_context_new()
Definition: algo_xor16.c:9
static bool plugin_xor16_update(void *context, const ut8 *data, ut64 size)
Definition: algo_xor16.c:32
static bool plugin_xor16_init(void *context)
Definition: algo_xor16.c:25
static RzHashSize plugin_xor16_block_size(void *context)
Definition: algo_xor16.c:21
RZ_API RzLibStruct rizin_plugin
Definition: algo_xor16.c:81
static bool plugin_xor16_small_block(const ut8 *data, ut64 size, ut8 **digest, RzHashSize *digest_size)
Definition: algo_xor16.c:46
RzHashPlugin rz_hash_plugin_xor16
Definition: algo_xor16.c:65
static RzHashSize plugin_xor16_digest_size(void *context)
Definition: algo_xor16.c:17
#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
#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
const char * name
Definition: rz_hash.h:27
ut64(WINAPI *w32_GetEnabledXStateFeatures)()
bool rz_xor16_final(ut8 *digest, RzXor16 *ctx)
Definition: xor.c:49
bool rz_xor16_init(RzXor16 *ctx)
Definition: xor.c:29
bool rz_xor16_update(RzXor16 *ctx, const ut8 *data, size_t len)
Definition: xor.c:35
#define RZ_HASH_XOR_BLOCK_LENGTH
Definition: xor.h:10
ut16 RzXor16
Definition: xor.h:20
#define RZ_HASH_XOR16_DIGEST_SIZE
Definition: xor.h:18