2014-03-27 15:34:17 +00:00
|
|
|
#ifndef R2_CRYPTO_H
|
|
|
|
#define R2_CRYPTO_H
|
2009-09-14 23:51:28 +00:00
|
|
|
|
|
|
|
#include <r_types.h>
|
2016-03-07 01:38:50 +00:00
|
|
|
#include <r_list.h>
|
2009-09-14 23:51:28 +00:00
|
|
|
|
2013-06-18 10:09:23 +00:00
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
2013-06-14 00:51:33 +00:00
|
|
|
R_LIB_VERSION_HEADER(r_crypto);
|
|
|
|
|
2009-09-14 23:51:28 +00:00
|
|
|
enum {
|
|
|
|
R_CRYPTO_MODE_ECB,
|
|
|
|
R_CRYPTO_MODE_CBC,
|
|
|
|
R_CRYPTO_MODE_OFB,
|
|
|
|
R_CRYPTO_MODE_CFB,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum {
|
|
|
|
R_CRYPTO_DIR_CIPHER,
|
|
|
|
R_CRYPTO_DIR_DECIPHER,
|
|
|
|
};
|
|
|
|
|
2010-01-04 00:25:52 +00:00
|
|
|
typedef struct r_crypto_t {
|
2010-05-25 23:42:22 +00:00
|
|
|
struct r_crypto_plugin_t* h;
|
2009-09-14 23:51:28 +00:00
|
|
|
ut8 *key;
|
|
|
|
ut8 *iv;
|
|
|
|
int key_len;
|
|
|
|
ut8 *output;
|
|
|
|
int output_len;
|
|
|
|
int output_size;
|
2017-04-28 12:12:54 +00:00
|
|
|
int dir;
|
2009-09-14 23:51:28 +00:00
|
|
|
void *user;
|
2016-03-07 01:38:50 +00:00
|
|
|
RList *plugins;
|
2010-01-26 00:28:33 +00:00
|
|
|
} RCrypto;
|
2009-09-14 23:51:28 +00:00
|
|
|
|
2010-05-25 23:42:22 +00:00
|
|
|
typedef struct r_crypto_plugin_t {
|
2009-09-14 23:51:28 +00:00
|
|
|
const char *name;
|
2017-05-02 03:05:36 +00:00
|
|
|
const char *license;
|
2012-07-21 10:11:21 +00:00
|
|
|
int (*get_key_size)(RCrypto *cry);
|
2017-01-29 22:05:02 +00:00
|
|
|
bool (*set_iv)(RCrypto *cry, const ut8 *iv, int ivlen);
|
|
|
|
bool (*set_key)(RCrypto *cry, const ut8 *key, int keylen, int mode, int direction);
|
|
|
|
bool (*update)(RCrypto *cry, const ut8 *buf, int len);
|
|
|
|
bool (*final)(RCrypto *cry, const ut8 *buf, int len);
|
2016-03-07 01:38:50 +00:00
|
|
|
bool (*use)(const char *algo);
|
2012-07-21 10:11:21 +00:00
|
|
|
int (*fini)(RCrypto *cry);
|
2010-05-25 23:42:22 +00:00
|
|
|
} RCryptoPlugin;
|
2009-09-14 23:51:28 +00:00
|
|
|
|
2009-12-24 02:17:53 +00:00
|
|
|
#ifdef R_API
|
2012-07-21 10:11:21 +00:00
|
|
|
R_API RCrypto *r_crypto_init(RCrypto *cry, int hard);
|
|
|
|
R_API RCrypto *r_crypto_as_new(RCrypto *cry);
|
|
|
|
R_API int r_crypto_add(RCrypto *cry, RCryptoPlugin *h);
|
2015-01-13 02:40:01 +00:00
|
|
|
R_API RCrypto *r_crypto_new(void);
|
2012-07-21 10:11:21 +00:00
|
|
|
R_API RCrypto *r_crypto_free(RCrypto *cry);
|
2016-03-07 01:38:50 +00:00
|
|
|
R_API bool r_crypto_use(RCrypto *cry, const char *algo);
|
2017-03-25 23:38:57 +00:00
|
|
|
R_API bool r_crypto_set_key(RCrypto *cry, const ut8* key, int keylen, int mode, int direction);
|
|
|
|
R_API bool r_crypto_set_iv(RCrypto *cry, const ut8 *iv, int ivlen);
|
2016-04-13 18:12:09 +00:00
|
|
|
R_API int r_crypto_update(RCrypto *cry, const ut8 *buf, int len);
|
|
|
|
R_API int r_crypto_final(RCrypto *cry, const ut8 *buf, int len);
|
2012-07-21 10:11:21 +00:00
|
|
|
R_API int r_crypto_append(RCrypto *cry, const ut8 *buf, int len);
|
2016-03-07 01:38:50 +00:00
|
|
|
R_API ut8 *r_crypto_get_output(RCrypto *cry, int *size);
|
2016-05-11 20:25:54 +00:00
|
|
|
R_API const char *r_crypto_name(ut64 bit);
|
2009-12-24 02:17:53 +00:00
|
|
|
#endif
|
2009-09-14 23:51:28 +00:00
|
|
|
|
|
|
|
/* plugin pointers */
|
2012-07-21 10:11:21 +00:00
|
|
|
extern RCryptoPlugin r_crypto_plugin_aes;
|
2017-01-28 11:52:39 +00:00
|
|
|
extern RCryptoPlugin r_crypto_plugin_des;
|
2016-03-07 01:38:50 +00:00
|
|
|
extern RCryptoPlugin r_crypto_plugin_rc4;
|
2016-03-08 22:24:31 +00:00
|
|
|
extern RCryptoPlugin r_crypto_plugin_xor;
|
2016-03-08 15:09:35 +00:00
|
|
|
extern RCryptoPlugin r_crypto_plugin_blowfish;
|
2016-03-07 23:25:22 +00:00
|
|
|
extern RCryptoPlugin r_crypto_plugin_rc2;
|
2016-04-09 10:18:03 +00:00
|
|
|
extern RCryptoPlugin r_crypto_plugin_rot;
|
2016-04-09 17:26:28 +00:00
|
|
|
extern RCryptoPlugin r_crypto_plugin_rol;
|
|
|
|
extern RCryptoPlugin r_crypto_plugin_ror;
|
2016-04-12 16:55:16 +00:00
|
|
|
extern RCryptoPlugin r_crypto_plugin_base64;
|
|
|
|
extern RCryptoPlugin r_crypto_plugin_base91;
|
2016-04-14 19:39:45 +00:00
|
|
|
extern RCryptoPlugin r_crypto_plugin_aes_cbc;
|
2016-05-07 10:31:13 +00:00
|
|
|
extern RCryptoPlugin r_crypto_plugin_punycode;
|
2016-05-09 14:51:26 +00:00
|
|
|
extern RCryptoPlugin r_crypto_plugin_rc6;
|
2016-08-01 15:31:36 +00:00
|
|
|
extern RCryptoPlugin r_crypto_plugin_cps2;
|
2009-12-24 02:17:53 +00:00
|
|
|
|
2016-05-11 20:25:54 +00:00
|
|
|
#define R_CRYPTO_NONE 0
|
|
|
|
#define R_CRYPTO_RC2 1
|
2016-08-01 15:31:36 +00:00
|
|
|
#define R_CRYPTO_RC4 1<<1
|
|
|
|
#define R_CRYPTO_RC6 1<<2
|
|
|
|
#define R_CRYPTO_AES_ECB 1<<3
|
|
|
|
#define R_CRYPTO_AES_CBC 1<<4
|
|
|
|
#define R_CRYPTO_ROR 1<<5
|
|
|
|
#define R_CRYPTO_ROL 1<<6
|
|
|
|
#define R_CRYPTO_ROT 1<<7
|
|
|
|
#define R_CRYPTO_BLOWFISH 1<<8
|
|
|
|
#define R_CRYPTO_CPS2 1<<9
|
2017-01-28 11:52:39 +00:00
|
|
|
#define R_CRYPTO_DES_ECB 1<<10
|
2017-03-25 23:38:57 +00:00
|
|
|
#define R_CRYPTO_XOR 1<<11
|
2016-05-11 20:25:54 +00:00
|
|
|
#define R_CRYPTO_ALL 0xFFFF
|
|
|
|
|
2013-06-18 10:09:23 +00:00
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2009-09-14 23:51:28 +00:00
|
|
|
#endif
|