radare2/libr/include/r_crypto.h

73 lines
1.8 KiB
C
Raw Normal View History

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>
#include <r_list.h>
2009-09-14 23:51:28 +00:00
#ifdef __cplusplus
extern "C" {
#endif
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,
};
typedef struct r_crypto_t {
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;
void *user;
RList *plugins;
} RCrypto;
2009-09-14 23:51:28 +00:00
typedef struct r_crypto_plugin_t {
2009-09-14 23:51:28 +00:00
const char *name;
2012-07-21 10:11:21 +00:00
int (*get_key_size)(RCrypto *cry);
int (*set_iv)(RCrypto *cry, const ut8 *iv);
int (*set_key)(RCrypto *cry, const ut8 *key, int keylen, int mode, int direction);
2012-07-21 10:11:21 +00:00
int (*update)(RCrypto *cry, const ut8 *buf, int len);
int (*final)(RCrypto *cry, const ut8 *buf, int len);
bool (*use)(const char *algo);
2012-07-21 10:11:21 +00:00
int (*fini)(RCrypto *cry);
} RCryptoPlugin;
2009-09-14 23:51:28 +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);
R_API RCrypto *r_crypto_new(void);
2012-07-21 10:11:21 +00:00
R_API RCrypto *r_crypto_free(RCrypto *cry);
R_API bool r_crypto_use(RCrypto *cry, const char *algo);
R_API int r_crypto_set_key(RCrypto *cry, const ut8* key, int keylen, int mode, int direction);
2012-07-21 10:11:21 +00:00
R_API int r_crypto_set_iv(RCrypto *cry, const ut8 *iv);
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);
R_API ut8 *r_crypto_get_output(RCrypto *cry, int *size);
#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;
extern RCryptoPlugin r_crypto_plugin_rc4;
2016-03-08 22:24:31 +00:00
extern RCryptoPlugin r_crypto_plugin_xor;
#ifdef __cplusplus
}
#endif
2009-09-14 23:51:28 +00:00
#endif