There's a name clash between OpenSSL and RSAref. Since this engine handles
[openssl.git] / demos / engines / zencod / hw_zencod.h
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.
5  */
6
7
8  #ifndef        _HW_ZENCOD_H_
9 #define _HW_ZENCOD_H_
10
11 #include <stdio.h>
12
13 #ifdef  __cplusplus
14 extern "C" {
15 #endif  /* __cplusplus */
16
17 #define ZENBRIDGE_MAX_KEYSIZE_RSA       2048
18 #define ZENBRIDGE_MAX_KEYSIZE_RSA_CRT   1024
19 #define ZENBRIDGE_MAX_KEYSIZE_DSA_SIGN  1024
20 #define ZENBRIDGE_MAX_KEYSIZE_DSA_VRFY  1024
21
22 /* Library version computation */
23 #define ZENBRIDGE_VERSION_MAJOR(x)      (((x) >> 16) | 0xff)
24 #define ZENBRIDGE_VERSION_MINOR(x)      (((x) >>  8) | 0xff)
25 #define ZENBRIDGE_VERSION_PATCH(x)      (((x) >>  0) | 0xff)
26 #define ZENBRIDGE_VERSION(x, y, z)              ((x) << 16 | (y) << 8 | (z))
27
28 /*
29  * Memory type
30  */
31 typedef struct zencod_number_s {
32         unsigned long len;
33         unsigned char *data;
34 } zen_nb_t;
35
36 #define KEY     zen_nb_t
37
38
39 /*
40  * Misc
41  */
42 typedef int t_zencod_lib_version (void);
43 typedef int t_zencod_hw_version (void);
44 typedef int t_zencod_test (void);
45 typedef int t_zencod_dump_key (FILE *stream, char *msg, KEY *key);
46
47
48 /*
49  * Key managment tools
50  */
51 typedef KEY *t_zencod_new_number (unsigned long len, unsigned char *data);
52 typedef int t_zencod_init_number (KEY *n, unsigned long len, unsigned char *data);
53 typedef unsigned long t_zencod_bytes2bits (unsigned char *n, unsigned long bytes);
54 typedef unsigned long t_zencod_bits2bytes (unsigned long bits);
55
56
57 /*
58  * RSA API
59  */
60 /* Compute modular exponential : y = x**e | n */
61 typedef int t_zencod_rsa_mod_exp (KEY *y, KEY *x, KEY *n, KEY *e);
62 /* Compute modular exponential : y1 = (x | p)**edp | p, y2 = (x | p)**edp | p, y = y2 + (qinv * (y1 - y2) | p) * q */
63 typedef int t_zencod_rsa_mod_exp_crt (KEY *y, KEY *x, KEY *p, KEY *q,
64                                         KEY *edp, KEY *edq, KEY *qinv);
65
66
67 /*
68  * DSA API
69  */
70 typedef int t_zencod_dsa_do_sign (unsigned int hash, KEY *data, KEY *random,
71                                     KEY *p, KEY *q, KEY *g, KEY *x, KEY *r, KEY *s);
72 typedef int t_zencod_dsa_do_verify (unsigned int hash, KEY *data,
73                                       KEY *p, KEY *q, KEY *g, KEY *y,
74                                       KEY *r, KEY *s, KEY *v);
75
76
77 /*
78  * DH API
79  */
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, int gen_x);
82 typedef int t_zencod_dh_compute_key (KEY *k, KEY *y, KEY *x, KEY *n);
83
84
85 /*
86  * RNG API
87  */
88 #define ZENBRIDGE_RNG_DIRECT            0
89 #define ZENBRIDGE_RNG_SHA1              1
90 typedef int t_zencod_rand_bytes (KEY *rand, unsigned int flags);
91
92
93 /*
94  * Math API
95  */
96 typedef int t_zencod_math_mod_exp (KEY *r, KEY *a, KEY *e, KEY *n);
97
98
99
100
101 /*
102  * Symetric API
103  */
104 /* Define a data structure for digests operations */
105 typedef struct ZEN_data_st
106 {
107         unsigned int HashBufferSize ;
108         unsigned char *HashBuffer ;
109 } ZEN_MD_DATA ;
110
111 /*
112  * Functions for Digest (MD5, SHA1) stuff
113  */
114 /* output : output data buffer */
115 /* input : input data buffer */
116 /* algo : hash algorithm, MD5 or SHA1 */
117 /* typedef int t_zencod_hash ( KEY *output, const KEY *input, int algo ) ;
118  * typedef int t_zencod_sha_hash ( KEY *output, const KEY *input, int algo ) ;
119  */
120 /* For now separate this stuff that mad it easier to test */
121 typedef int t_zencod_md5_init ( ZEN_MD_DATA *data ) ;
122 typedef int t_zencod_md5_update ( ZEN_MD_DATA *data, const KEY *input ) ;
123 typedef int t_zencod_md5_do_final ( ZEN_MD_DATA *data, KEY *output ) ;
124
125 typedef int t_zencod_sha1_init ( ZEN_MD_DATA *data ) ;
126 typedef int t_zencod_sha1_update ( ZEN_MD_DATA *data, const KEY *input ) ;
127 typedef int t_zencod_sha1_do_final ( ZEN_MD_DATA *data, KEY *output ) ;
128
129
130 /*
131  * Functions for Cipher (RC4, DES, 3DES) stuff
132  */
133 /* output : output data buffer */
134 /* input : input data buffer */
135 /* key : rc4 key data */
136 /* index_1 : value of index x from RC4 key structure */
137 /* index_2 : value of index y from RC4 key structure */
138 /* Be carefull : RC4 key should be expanded before calling this method (Should we provide an expand function ??) */
139 typedef int t_zencod_rc4_cipher ( KEY *output, const KEY *input, const KEY *key,
140                 unsigned char *index_1, unsigned char *index_2, int mode ) ;
141
142 /* output : output data buffer */
143 /* input : input data buffer */
144 /* key_1 : des first key data */
145 /* key_2 : des second key data */
146 /* key_3 : des third key data */
147 /* iv : initial vector */
148 /* mode : xdes mode (encrypt or decrypt) */
149 /* Be carefull : In DES mode key_1 = key_2 = key_3 (as far as i can see !!) */
150 typedef int t_zencod_xdes_cipher ( KEY *output, const KEY *input, const KEY *key_1,
151                 const KEY *key_2, const KEY *key_3, const KEY *iv, int mode ) ;
152
153
154 #undef KEY
155
156 #ifdef  __cplusplus
157 }
158 #endif  /* __cplusplus */
159
160 #endif  /* !_HW_ZENCOD_H_ */