1 /* File : /crypto/engine/vendor_defns/hw_zencod.h */
2 /* ====================================================================
3 * Written by Donnat Frederic (frederic.donnat@zencod.com) from ZENCOD
4 * for "zencod" ENGINE integration in OpenSSL project.
14 # endif /* __cplusplus */
16 # define ZENBRIDGE_MAX_KEYSIZE_RSA 2048
17 # define ZENBRIDGE_MAX_KEYSIZE_RSA_CRT 1024
18 # define ZENBRIDGE_MAX_KEYSIZE_DSA_SIGN 1024
19 # define ZENBRIDGE_MAX_KEYSIZE_DSA_VRFY 1024
21 /* Library version computation */
22 # define ZENBRIDGE_VERSION_MAJOR(x) (((x) >> 16) | 0xff)
23 # define ZENBRIDGE_VERSION_MINOR(x) (((x) >> 8) | 0xff)
24 # define ZENBRIDGE_VERSION_PATCH(x) (((x) >> 0) | 0xff)
25 # define ZENBRIDGE_VERSION(x, y, z) ((x) << 16 | (y) << 8 | (z))
30 typedef struct zencod_number_s
{
40 typedef int t_zencod_lib_version(void);
41 typedef int t_zencod_hw_version(void);
42 typedef int t_zencod_test(void);
43 typedef int t_zencod_dump_key(FILE *stream
, char *msg
, KEY
* key
);
46 * Key management tools
48 typedef KEY
*t_zencod_new_number(unsigned long len
, unsigned char *data
);
49 typedef int t_zencod_init_number(KEY
* n
, unsigned long len
,
51 typedef unsigned long t_zencod_bytes2bits(unsigned char *n
,
53 typedef unsigned long t_zencod_bits2bytes(unsigned long bits
);
58 /* Compute modular exponential : y = x**e | n */
59 typedef int t_zencod_rsa_mod_exp(KEY
* y
, KEY
* x
, KEY
* n
, KEY
* e
);
61 * Compute modular exponential : y1 = (x | p)**edp | p, y2 = (x | p)**edp
62 * | p, y = y2 + (qinv * (y1 - y2) | p) * q
64 typedef int t_zencod_rsa_mod_exp_crt(KEY
* y
, KEY
* x
, KEY
* p
, KEY
* q
,
65 KEY
* edp
, KEY
* edq
, KEY
* qinv
);
70 typedef int t_zencod_dsa_do_sign(unsigned int hash
, KEY
* data
,
71 KEY
* random
, KEY
* p
, KEY
* q
, KEY
* g
,
72 KEY
* x
, KEY
* r
, KEY
* s
);
73 typedef int t_zencod_dsa_do_verify(unsigned int hash
, KEY
* data
, KEY
* p
,
74 KEY
* q
, KEY
* g
, KEY
* y
, KEY
* r
,
80 /* Key generation : compute public value y = g**x | n */
81 typedef int t_zencod_dh_generate_key(KEY
* y
, KEY
* x
, KEY
* g
, KEY
* n
,
83 typedef int t_zencod_dh_compute_key(KEY
* k
, KEY
* y
, KEY
* x
, KEY
* n
);
88 # define ZENBRIDGE_RNG_DIRECT 0
89 # define ZENBRIDGE_RNG_SHA1 1
90 typedef int t_zencod_rand_bytes(KEY
* rand
, unsigned int flags
);
95 typedef int t_zencod_math_mod_exp(KEY
* r
, KEY
* a
, KEY
* e
, KEY
* n
);
100 /* Define a data structure for digests operations */
101 typedef struct ZEN_data_st
{
102 unsigned int HashBufferSize
;
103 unsigned char *HashBuffer
;
107 * Functions for Digest (MD5, SHA1) stuff
109 /* output : output data buffer */
110 /* input : input data buffer */
111 /* algo : hash algorithm, MD5 or SHA1 */
113 * typedef int t_zencod_hash ( KEY *output, const KEY *input, int algo ) ;
114 * typedef int t_zencod_sha_hash ( KEY *output, const KEY *input, int algo ) ;
116 /* For now separate this stuff that mad it easier to test */
117 typedef int t_zencod_md5_init(ZEN_MD_DATA
*data
);
118 typedef int t_zencod_md5_update(ZEN_MD_DATA
*data
, const KEY
* input
);
119 typedef int t_zencod_md5_do_final(ZEN_MD_DATA
*data
, KEY
* output
);
121 typedef int t_zencod_sha1_init(ZEN_MD_DATA
*data
);
122 typedef int t_zencod_sha1_update(ZEN_MD_DATA
*data
, const KEY
* input
);
123 typedef int t_zencod_sha1_do_final(ZEN_MD_DATA
*data
, KEY
* output
);
126 * Functions for Cipher (RC4, DES, 3DES) stuff
128 /* output : output data buffer */
129 /* input : input data buffer */
130 /* key : rc4 key data */
131 /* index_1 : value of index x from RC4 key structure */
132 /* index_2 : value of index y from RC4 key structure */
134 * Be carefull : RC4 key should be expanded before calling this method
135 * (Should we provide an expand function ??)
137 typedef int t_zencod_rc4_cipher(KEY
* output
, const KEY
* input
,
138 const KEY
* key
, unsigned char *index_1
,
139 unsigned char *index_2
, int mode
);
141 /* output : output data buffer */
142 /* input : input data buffer */
143 /* key_1 : des first key data */
144 /* key_2 : des second key data */
145 /* key_3 : des third key data */
146 /* iv : initial vector */
147 /* mode : xdes mode (encrypt or decrypt) */
148 /* Be carefull : In DES mode key_1 = key_2 = key_3 (as far as i can see !!) */
149 typedef int t_zencod_xdes_cipher(KEY
* output
, const KEY
* input
,
150 const KEY
* key_1
, const KEY
* key_2
,
151 const KEY
* key_3
, const KEY
* iv
,
158 # endif /* __cplusplus */
159 #endif /* !_HW_ZENCOD_H_ */