Rizin
unix-like reverse engineering framework and cli tools
xor.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 "xor.h"
5 #include <rz_util.h>
6 
9  *ctx = 0;
10  return true;
11 }
12 
13 bool rz_xor8_update(RzXor8 *ctx, const ut8 *data, size_t len) {
14  rz_return_val_if_fail(ctx && data, false);
15  ut8 value = *ctx;
16  for (size_t i = 0; i < len; ++i) {
17  value ^= data[i];
18  }
19  *ctx = value;
20  return true;
21 }
22 
23 bool rz_xor8_final(ut8 *digest, RzXor8 *ctx) {
24  rz_return_val_if_fail(digest && ctx, false);
25  *digest = *ctx;
26  return true;
27 }
28 
30  rz_return_val_if_fail(ctx, false);
31  *ctx = 0;
32  return true;
33 }
34 
35 bool rz_xor16_update(RzXor16 *ctx, const ut8 *data, size_t len) {
36  rz_return_val_if_fail(ctx && data, false);
37  ut16 value = *ctx;
38  for (size_t i = 0; i < len; i += sizeof(ut16)) {
39  if (len - i > sizeof(ut16)) {
40  value ^= rz_read_at_le16(data, i);
41  } else {
42  value ^= (((ut16)data[i]) << 8);
43  }
44  }
45  *ctx = value;
46  return true;
47 }
48 
49 bool rz_xor16_final(ut8 *digest, RzXor16 *ctx) {
50  rz_return_val_if_fail(digest && ctx, false);
51  rz_write_le16(digest, *ctx);
52  return true;
53 }
size_t len
Definition: 6502dis.c:15
lzma_index ** i
Definition: index.h:629
static int value
Definition: cmd_api.c:93
uint16_t ut16
uint8_t ut8
Definition: lh5801.h:11
#define rz_return_val_if_fail(expr, val)
Definition: rz_assert.h:108
static void rz_write_le16(void *dest, ut16 val)
Definition: rz_endian.h:222
static ut16 rz_read_at_le16(const void *src, size_t offset)
Definition: rz_endian.h:214
bool rz_xor16_final(ut8 *digest, RzXor16 *ctx)
Definition: xor.c:49
bool rz_xor8_final(ut8 *digest, RzXor8 *ctx)
Definition: xor.c:23
bool rz_xor8_init(RzXor8 *ctx)
Definition: xor.c:7
bool rz_xor8_update(RzXor8 *ctx, const ut8 *data, size_t len)
Definition: xor.c:13
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
ut8 RzXor8
Definition: xor.h:12
ut16 RzXor16
Definition: xor.h:20