9 #define RC2_KEY_SIZE 64
13 0xD9, 0x78, 0xF9, 0xC4, 0x19, 0xDD, 0xB5, 0xED, 0x28, 0xE9, 0xFD, 0x79, 0x4A, 0xA0, 0xD8, 0x9D,
14 0xC6, 0x7E, 0x37, 0x83, 0x2B, 0x76, 0x53, 0x8E, 0x62, 0x4C, 0x64, 0x88, 0x44, 0x8B, 0xFB, 0xA2,
15 0x17, 0x9A, 0x59, 0xF5, 0x87, 0xB3, 0x4F, 0x13, 0x61, 0x45, 0x6D, 0x8D, 0x09, 0x81, 0x7D, 0x32,
16 0xBD, 0x8F, 0x40, 0xEB, 0x86, 0xB7, 0x7B, 0x0B, 0xF0, 0x95, 0x21, 0x22, 0x5C, 0x6B, 0x4E, 0x82,
17 0x54, 0xD6, 0x65, 0x93, 0xCE, 0x60, 0xB2, 0x1C, 0x73, 0x56, 0xC0, 0x14, 0xA7, 0x8C, 0xF1, 0xDC,
18 0x12, 0x75, 0xCA, 0x1F, 0x3B, 0xBE, 0xE4, 0xD1, 0x42, 0x3D, 0xD4, 0x30, 0xA3, 0x3C, 0xB6, 0x26,
19 0x6F, 0xBF, 0x0E, 0xDA, 0x46, 0x69, 0x07, 0x57, 0x27, 0xF2, 0x1D, 0x9B, 0xBC, 0x94, 0x43, 0x03,
20 0xF8, 0x11, 0xC7, 0xF6, 0x90, 0xEF, 0x3E, 0xE7, 0x06, 0xC3, 0xD5, 0x2F, 0xC8, 0x66, 0x1E, 0xD7,
21 0x08, 0xE8, 0xEA, 0xDE, 0x80, 0x52, 0xEE, 0xF7, 0x84, 0xAA, 0x72, 0xAC, 0x35, 0x4D, 0x6A, 0x2A,
22 0x96, 0x1A, 0xD2, 0x71, 0x5A, 0x15, 0x49, 0x74, 0x4B, 0x9F, 0xD0, 0x5E, 0x04, 0x18, 0xA4, 0xEC,
23 0xC2, 0xE0, 0x41, 0x6E, 0x0F, 0x51, 0xCB, 0xCC, 0x24, 0x91, 0xAF, 0x50, 0xA1, 0xF4, 0x70, 0x39,
24 0x99, 0x7C, 0x3A, 0x85, 0x23, 0xB8, 0xB4, 0x7A, 0xFC, 0x02, 0x36, 0x5B, 0x25, 0x55, 0x97, 0x31,
25 0x2D, 0x5D, 0xFA, 0x98, 0xE3, 0x8A, 0x92, 0xAE, 0x05, 0xDF, 0x29, 0x10, 0x67, 0x6C, 0xBA, 0xC9,
26 0xD3, 0x00, 0xE6, 0xCF, 0xE1, 0x9E, 0xA8, 0x2C, 0x63, 0x16, 0x01, 0x3F, 0x58, 0xE2, 0x89, 0xA9,
27 0x0D, 0x38, 0x34, 0x1B, 0xAB, 0x33, 0xFF, 0xB0, 0xBB, 0x48, 0x0C, 0x5F, 0xB9, 0xB1, 0xCD, 0x2E,
28 0xC5, 0xF3, 0xDB, 0x47, 0xE5, 0xA5, 0x9C, 0x77, 0x0A, 0xA6, 0x20, 0x68, 0xFE, 0x7F, 0xC1, 0xAD,
41 if (key_len < 1 || key_len > 128) {
47 for (
i = key_len;
i < 128;
i++) {
51 int ekey_len = (
BITS + 7) >> 3;
77 for (
i = 0;
i < 16;
i++) {
78 x10 += ((x32 & ~x76) + (x54 & x76)) +
state->ekey[4 *
i + 0];
81 x32 += ((x54 & ~
x10) + (x76 &
x10)) +
state->ekey[4 *
i + 1];
82 x32 = (x32 << 2) + (x32 >> 14 & 3);
84 x54 += ((x76 & ~x32) + (
x10 & x32)) +
state->ekey[4 *
i + 2];
85 x54 = (x54 << 3) + (x54 >> 13 & 7);
87 x76 += ((
x10 & ~x54) + (x32 & x54)) +
state->ekey[4 *
i + 3];
88 x76 = (x76 << 5) + (x76 >> 11 & 31);
90 if (
i == 4 ||
i == 10) {
93 x54 +=
state->ekey[x32 & 63];
94 x76 +=
state->ekey[x54 & 63];
117 for (
i = 15;
i >= 0;
i--) {
119 x76 = (x76 << 11) | (x76 >> 5);
120 x76 -= ((
x10 & ~x54) | (x32 & x54)) +
state->ekey[4 *
i + 3];
123 x54 = (x54 << 13) | (x54 >> 3);
124 x54 -= ((x76 & ~x32) | (
x10 & x32)) +
state->ekey[4 *
i + 2];
127 x32 = (x32 << 14) | (x32 >> 2);
128 x32 -= ((x54 & ~
x10) | (x76 &
x10)) +
state->ekey[4 *
i + 1];
132 x10 -= ((x32 & ~x76) | (x54 & x76)) +
state->ekey[4 *
i + 0];
134 if (
i == 5 ||
i == 11) {
135 x76 -=
state->ekey[x54 & 63];
136 x54 -=
state->ekey[x32 & 63];
157 char *ptr = (
char *)
outbuf;
177 char *ptr = (
char *)
outbuf;
193 data_block[
idx++] = 0;
196 strncpy(ptr, crypted_block, 8);
206 cry->
dir = direction;
207 state->key_size = 1024;
214 return state->key_size;
218 return !strcmp(algo,
"rc2");
259 .author =
"lionaneesh",
270 #ifndef RZ_PLUGIN_INCORE
RZ_API int rz_crypto_append(RzCrypto *cry, const ut8 *buf, int len)
static bool rc2_init(RzCrypto *cry)
static bool rc2_expandKey(struct rc2_state *state, const ut8 *key, int key_len)
static const ut8 PITABLE[256]
static void rc2_crypt(struct rc2_state *state, const ut8 *inbuf, ut8 *outbuf, int buflen)
static bool update(RzCrypto *cry, const ut8 *buf, int len)
static void rc2_crypt8(struct rc2_state *state, const ut8 *inbuf, ut8 *outbuf)
RZ_API RzLibStruct rizin_plugin
static void rc2_dcrypt8(struct rc2_state *state, const ut8 *inbuf, ut8 *outbuf)
static void rc2_dcrypt(struct rc2_state *state, const ut8 *inbuf, ut8 *outbuf, int buflen)
static int rc2_get_key_size(RzCrypto *cry)
static bool rc2_fini(RzCrypto *cry)
RzCryptoPlugin rz_crypto_plugin_rc2
static bool rc2_use(const char *algo)
static bool rc2_set_key(RzCrypto *cry, const ut8 *key, int keylen, int mode, int direction)
static static sync static getppid static getegid const char static filename char static len const char char static bufsiz static mask static vfork const void static prot static getpgrp const char static swapflags static arg static fd static protocol static who struct sockaddr static addrlen static backlog struct timeval struct timezone static tz const struct iovec static count static mode const void const struct sockaddr static tolen const char static pathname void static offset struct stat static buf void long static basep static whence static length const void static len key
unsigned char outbuf[SIZE]
unsigned char inbuf[SIZE]
RZ_API void Ht_() free(HtName_(Ht) *ht)
memcpy(mem, inblock.get(), min(CONTAINING_RECORD(inblock.get(), MEMBLOCK, data) ->size, size))
void * calloc(size_t number, size_t size)
#define rz_return_val_if_fail(expr, val)
if(dbg->bits==RZ_SYS_BITS_64)
static unsigned char * obuf