2002-08-13 12:30:27 +00:00
|
|
|
/* 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);
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
2003-06-11 22:45:53 +00:00
|
|
|
* Key management tools
|
2002-08-13 12:30:27 +00:00
|
|
|
*/
|
|
|
|
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_ */
|