#ifndef _HW_ZENCOD_H_
#define _HW_ZENCOD_H_
#include <stdio.h>
#ifdef __cplusplus
extern "C" {
#endif
#define ZENBRIDGE_MAX_KEYSIZE_RSA 2048
#define ZENBRIDGE_MAX_KEYSIZE_RSA_CRT 1024
#define ZENBRIDGE_MAX_KEYSIZE_DSA_SIGN 1024
#define ZENBRIDGE_MAX_KEYSIZE_DSA_VRFY 1024
#define ZENBRIDGE_VERSION_MAJOR(x) (((x) >> 16) | 0xff)
#define ZENBRIDGE_VERSION_MINOR(x) (((x) >> 8) | 0xff)
#define ZENBRIDGE_VERSION_PATCH(x) (((x) >> 0) | 0xff)
#define ZENBRIDGE_VERSION(x, y, z) ((x) << 16 | (y) << 8 | (z))
typedef struct zencod_number_s {
unsigned long len;
unsigned char *data;
} zen_nb_t;
#define KEY zen_nb_t
typedef int t_zencod_lib_version (void);
typedef int t_zencod_hw_version (void);
typedef int t_zencod_test (void);
typedef int t_zencod_dump_key (FILE *stream, char *msg, KEY *key);
typedef KEY *t_zencod_new_number (unsigned long len, unsigned char *data);
typedef int t_zencod_init_number (KEY *n, unsigned long len, unsigned char *data);
typedef unsigned long t_zencod_bytes2bits (unsigned char *n, unsigned long bytes);
typedef unsigned long t_zencod_bits2bytes (unsigned long bits);
typedef int t_zencod_rsa_mod_exp (KEY *y, KEY *x, KEY *n, KEY *e);
typedef int t_zencod_rsa_mod_exp_crt (KEY *y, KEY *x, KEY *p, KEY *q,
KEY *edp, KEY *edq, KEY *qinv);
typedef int t_zencod_dsa_do_sign (unsigned int hash, KEY *data, KEY *random,
KEY *p, KEY *q, KEY *g, KEY *x, KEY *r, KEY *s);
typedef int t_zencod_dsa_do_verify (unsigned int hash, KEY *data,
KEY *p, KEY *q, KEY *g, KEY *y,
KEY *r, KEY *s, KEY *v);
typedef int t_zencod_dh_generate_key (KEY *y, KEY *x, KEY *g, KEY *n, int gen_x);
typedef int t_zencod_dh_compute_key (KEY *k, KEY *y, KEY *x, KEY *n);
#define ZENBRIDGE_RNG_DIRECT 0
#define ZENBRIDGE_RNG_SHA1 1
typedef int t_zencod_rand_bytes (KEY *rand, unsigned int flags);
typedef int t_zencod_math_mod_exp (KEY *r, KEY *a, KEY *e, KEY *n);
typedef struct ZEN_data_st
{
unsigned int HashBufferSize ;
unsigned char *HashBuffer ;
} ZEN_MD_DATA ;
typedef int t_zencod_md5_init ( ZEN_MD_DATA *data ) ;
typedef int t_zencod_md5_update ( ZEN_MD_DATA *data, const KEY *input ) ;
typedef int t_zencod_md5_do_final ( ZEN_MD_DATA *data, KEY *output ) ;
typedef int t_zencod_sha1_init ( ZEN_MD_DATA *data ) ;
typedef int t_zencod_sha1_update ( ZEN_MD_DATA *data, const KEY *input ) ;
typedef int t_zencod_sha1_do_final ( ZEN_MD_DATA *data, KEY *output ) ;
typedef int t_zencod_rc4_cipher ( KEY *output, const KEY *input, const KEY *key,
unsigned char *index_1, unsigned char *index_2, int mode ) ;
typedef int t_zencod_xdes_cipher ( KEY *output, const KEY *input, const KEY *key_1,
const KEY *key_2, const KEY *key_3, const KEY *iv, int mode ) ;
#undef KEY
#ifdef __cplusplus
}
#endif
#endif