You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
159 lines
5.5 KiB
159 lines
5.5 KiB
/* File : /crypto/engine/vendor_defns/hw_zencod.h */ |
|
/* ==================================================================== |
|
* Written by Donnat Frederic (frederic.donnat@zencod.com) from ZENCOD |
|
* for "zencod" ENGINE integration in OpenSSL project. |
|
*/ |
|
|
|
#ifndef _HW_ZENCOD_H_ |
|
# define _HW_ZENCOD_H_ |
|
|
|
# include <stdio.h> |
|
|
|
# ifdef __cplusplus |
|
extern "C" { |
|
# endif /* __cplusplus */ |
|
|
|
# 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 |
|
|
|
/* Library version computation */ |
|
# 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)) |
|
|
|
/* |
|
* Memory type |
|
*/ |
|
typedef struct zencod_number_s { |
|
unsigned long len; |
|
unsigned char *data; |
|
} zen_nb_t; |
|
|
|
# define KEY zen_nb_t |
|
|
|
/* |
|
* Misc |
|
*/ |
|
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); |
|
|
|
/* |
|
* Key management tools |
|
*/ |
|
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); |
|
|
|
/* |
|
* RSA API |
|
*/ |
|
/* Compute modular exponential : y = x**e | n */ |
|
typedef int t_zencod_rsa_mod_exp(KEY * y, KEY * x, KEY * n, KEY * e); |
|
/* |
|
* Compute modular exponential : y1 = (x | p)**edp | p, y2 = (x | p)**edp |
|
* | p, y = y2 + (qinv * (y1 - y2) | p) * q |
|
*/ |
|
typedef int t_zencod_rsa_mod_exp_crt(KEY * y, KEY * x, KEY * p, KEY * q, |
|
KEY * edp, KEY * edq, KEY * qinv); |
|
|
|
/* |
|
* DSA API |
|
*/ |
|
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); |
|
|
|
/* |
|
* DH API |
|
*/ |
|
/* Key generation : compute public value y = g**x | n */ |
|
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); |
|
|
|
/* |
|
* RNG API |
|
*/ |
|
# define ZENBRIDGE_RNG_DIRECT 0 |
|
# define ZENBRIDGE_RNG_SHA1 1 |
|
typedef int t_zencod_rand_bytes(KEY * rand, unsigned int flags); |
|
|
|
/* |
|
* Math API |
|
*/ |
|
typedef int t_zencod_math_mod_exp(KEY * r, KEY * a, KEY * e, KEY * n); |
|
|
|
/* |
|
* Symetric API |
|
*/ |
|
/* Define a data structure for digests operations */ |
|
typedef struct ZEN_data_st { |
|
unsigned int HashBufferSize; |
|
unsigned char *HashBuffer; |
|
} ZEN_MD_DATA; |
|
|
|
/* |
|
* Functions for Digest (MD5, SHA1) stuff |
|
*/ |
|
/* output : output data buffer */ |
|
/* input : input data buffer */ |
|
/* algo : hash algorithm, MD5 or SHA1 */ |
|
/*- |
|
* typedef int t_zencod_hash ( KEY *output, const KEY *input, int algo ) ; |
|
* typedef int t_zencod_sha_hash ( KEY *output, const KEY *input, int algo ) ; |
|
*/ |
|
/* For now separate this stuff that mad it easier to test */ |
|
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); |
|
|
|
/* |
|
* Functions for Cipher (RC4, DES, 3DES) stuff |
|
*/ |
|
/* output : output data buffer */ |
|
/* input : input data buffer */ |
|
/* key : rc4 key data */ |
|
/* index_1 : value of index x from RC4 key structure */ |
|
/* index_2 : value of index y from RC4 key structure */ |
|
/* |
|
* Be carefull : RC4 key should be expanded before calling this method |
|
* (Should we provide an expand function ??) |
|
*/ |
|
typedef int t_zencod_rc4_cipher(KEY * output, const KEY * input, |
|
const KEY * key, unsigned char *index_1, |
|
unsigned char *index_2, int mode); |
|
|
|
/* output : output data buffer */ |
|
/* input : input data buffer */ |
|
/* key_1 : des first key data */ |
|
/* key_2 : des second key data */ |
|
/* key_3 : des third key data */ |
|
/* iv : initial vector */ |
|
/* mode : xdes mode (encrypt or decrypt) */ |
|
/* Be carefull : In DES mode key_1 = key_2 = key_3 (as far as i can see !!) */ |
|
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 /* __cplusplus */ |
|
#endif /* !_HW_ZENCOD_H_ */
|
|
|