sureware.h revision 160814
1/* 2* Written by Corinne Dive-Reclus(cdive@baltimore.com) 3* 4* Copyright@2001 Baltimore Technologies Ltd. 5* * 6* THIS FILE IS PROVIDED BY BALTIMORE TECHNOLOGIES ``AS IS'' AND * 7* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * 8* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * 9* ARE DISCLAIMED. IN NO EVENT SHALL BALTIMORE TECHNOLOGIES BE LIABLE * 10* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * 11* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * 12* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * 13* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * 14* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * 15* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * 16* SUCH DAMAGE. * 17* 18* 19*/ 20#ifdef WIN32 21#define SW_EXPORT __declspec ( dllexport ) 22#else 23#define SW_EXPORT 24#endif 25 26/* 27* List of exposed SureWare errors 28*/ 29#define SUREWAREHOOK_ERROR_FAILED -1 30#define SUREWAREHOOK_ERROR_FALLBACK -2 31#define SUREWAREHOOK_ERROR_UNIT_FAILURE -3 32#define SUREWAREHOOK_ERROR_DATA_SIZE -4 33#define SUREWAREHOOK_ERROR_INVALID_PAD -5 34/* 35* -----------------WARNING----------------------------------- 36* In all the following functions: 37* msg is a string with at least 24 bytes free. 38* A 24 bytes string will be concatenated to the existing content of msg. 39*/ 40/* 41* SureWare Initialisation function 42* in param threadsafe, if !=0, thread safe enabled 43* return SureWareHOOK_ERROR_UNIT_FAILURE if failure, 1 if success 44*/ 45typedef int SureWareHook_Init_t(char*const msg,int threadsafe); 46extern SW_EXPORT SureWareHook_Init_t SureWareHook_Init; 47/* 48* SureWare Finish function 49*/ 50typedef void SureWareHook_Finish_t(void); 51extern SW_EXPORT SureWareHook_Finish_t SureWareHook_Finish; 52/* 53* PRE_CONDITION: 54* DO NOT CALL ANY OF THE FOLLOWING FUNCTIONS IN CASE OF INIT FAILURE 55*/ 56/* 57* SureWare RAND Bytes function 58* In case of failure, the content of buf is unpredictable. 59* return 1 if success 60* SureWareHOOK_ERROR_FALLBACK if function not available in hardware 61* SureWareHOOK_ERROR_FAILED if error while processing 62* SureWareHOOK_ERROR_UNIT_FAILURE if hardware failure 63* SUREWAREHOOK_ERROR_DATA_SIZE wrong size for buf 64* 65* in/out param buf : a num bytes long buffer where random bytes will be put 66* in param num : the number of bytes into buf 67*/ 68typedef int SureWareHook_Rand_Bytes_t(char*const msg,unsigned char *buf, int num); 69extern SW_EXPORT SureWareHook_Rand_Bytes_t SureWareHook_Rand_Bytes; 70 71/* 72* SureWare RAND Seed function 73* Adds some seed to the Hardware Random Number Generator 74* return 1 if success 75* SureWareHOOK_ERROR_FALLBACK if function not available in hardware 76* SureWareHOOK_ERROR_FAILED if error while processing 77* SureWareHOOK_ERROR_UNIT_FAILURE if hardware failure 78* SUREWAREHOOK_ERROR_DATA_SIZE wrong size for buf 79* 80* in param buf : the seed to add into the HRNG 81* in param num : the number of bytes into buf 82*/ 83typedef int SureWareHook_Rand_Seed_t(char*const msg,const void *buf, int num); 84extern SW_EXPORT SureWareHook_Rand_Seed_t SureWareHook_Rand_Seed; 85 86/* 87* SureWare Load Private Key function 88* return 1 if success 89* SureWareHOOK_ERROR_FAILED if error while processing 90* No hardware is contact for this function. 91* 92* in param key_id :the name of the private protected key file without the extension 93 ".sws" 94* out param hptr : a pointer to a buffer allocated by SureWare_Hook 95* out param num: the effective key length in bytes 96* out param keytype: 1 if RSA 2 if DSA 97*/ 98typedef int SureWareHook_Load_Privkey_t(char*const msg,const char *key_id,char **hptr,unsigned long *num,char *keytype); 99extern SW_EXPORT SureWareHook_Load_Privkey_t SureWareHook_Load_Privkey; 100 101/* 102* SureWare Info Public Key function 103* return 1 if success 104* SureWareHOOK_ERROR_FAILED if error while processing 105* No hardware is contact for this function. 106* 107* in param key_id :the name of the private protected key file without the extension 108 ".swp" 109* out param hptr : a pointer to a buffer allocated by SureWare_Hook 110* out param num: the effective key length in bytes 111* out param keytype: 1 if RSA 2 if DSA 112*/ 113typedef int SureWareHook_Info_Pubkey_t(char*const msg,const char *key_id,unsigned long *num, 114 char *keytype); 115extern SW_EXPORT SureWareHook_Info_Pubkey_t SureWareHook_Info_Pubkey; 116 117/* 118* SureWare Load Public Key function 119* return 1 if success 120* SureWareHOOK_ERROR_FAILED if error while processing 121* No hardware is contact for this function. 122* 123* in param key_id :the name of the public protected key file without the extension 124 ".swp" 125* in param num : the bytes size of n and e 126* out param n: where to write modulus in bn format 127* out param e: where to write exponent in bn format 128*/ 129typedef int SureWareHook_Load_Rsa_Pubkey_t(char*const msg,const char *key_id,unsigned long num, 130 unsigned long *n, unsigned long *e); 131extern SW_EXPORT SureWareHook_Load_Rsa_Pubkey_t SureWareHook_Load_Rsa_Pubkey; 132 133/* 134* SureWare Load DSA Public Key function 135* return 1 if success 136* SureWareHOOK_ERROR_FAILED if error while processing 137* No hardware is contact for this function. 138* 139* in param key_id :the name of the public protected key file without the extension 140 ".swp" 141* in param num : the bytes size of n and e 142* out param pub: where to write pub key in bn format 143* out param p: where to write prime in bn format 144* out param q: where to write sunprime (length 20 bytes) in bn format 145* out param g: where to write base in bn format 146*/ 147typedef int SureWareHook_Load_Dsa_Pubkey_t(char*const msg,const char *key_id,unsigned long num, 148 unsigned long *pub, unsigned long *p,unsigned long*q, 149 unsigned long *g); 150extern SW_EXPORT SureWareHook_Load_Dsa_Pubkey_t SureWareHook_Load_Dsa_Pubkey; 151 152/* 153* SureWare Free function 154* Destroy the key into the hardware if destroy==1 155*/ 156typedef void SureWareHook_Free_t(char *p,int destroy); 157extern SW_EXPORT SureWareHook_Free_t SureWareHook_Free; 158 159#define SUREWARE_PKCS1_PAD 1 160#define SUREWARE_ISO9796_PAD 2 161#define SUREWARE_NO_PAD 0 162/* 163* SureWare RSA Private Decryption 164* return 1 if success 165* SureWareHOOK_ERROR_FAILED if error while processing 166* SureWareHOOK_ERROR_UNIT_FAILURE if hardware failure 167* SUREWAREHOOK_ERROR_DATA_SIZE wrong size for buf 168* 169* in param flen : byte size of from and to 170* in param from : encrypted data buffer, should be a not-null valid pointer 171* out param tlen: byte size of decrypted data, if error, unexpected value 172* out param to : decrypted data buffer, should be a not-null valid pointer 173* in param prsa: a protected key pointer, should be a not-null valid pointer 174* int padding: padding id as follow 175* SUREWARE_PKCS1_PAD 176* SUREWARE_NO_PAD 177* 178*/ 179typedef int SureWareHook_Rsa_Priv_Dec_t(char*const msg,int flen,unsigned char *from, 180 int *tlen,unsigned char *to, 181 char *prsa,int padding); 182extern SW_EXPORT SureWareHook_Rsa_Priv_Dec_t SureWareHook_Rsa_Priv_Dec; 183/* 184* SureWare RSA Signature 185* return 1 if success 186* SureWareHOOK_ERROR_FAILED if error while processing 187* SureWareHOOK_ERROR_UNIT_FAILURE if hardware failure 188* SUREWAREHOOK_ERROR_DATA_SIZE wrong size for buf 189* 190* in param flen : byte size of from and to 191* in param from : encrypted data buffer, should be a not-null valid pointer 192* out param tlen: byte size of decrypted data, if error, unexpected value 193* out param to : decrypted data buffer, should be a not-null valid pointer 194* in param prsa: a protected key pointer, should be a not-null valid pointer 195* int padding: padding id as follow 196* SUREWARE_PKCS1_PAD 197* SUREWARE_ISO9796_PAD 198* 199*/ 200typedef int SureWareHook_Rsa_Sign_t(char*const msg,int flen,unsigned char *from, 201 int *tlen,unsigned char *to, 202 char *prsa,int padding); 203extern SW_EXPORT SureWareHook_Rsa_Sign_t SureWareHook_Rsa_Sign; 204/* 205* SureWare DSA Signature 206* return 1 if success 207* SureWareHOOK_ERROR_FAILED if error while processing 208* SureWareHOOK_ERROR_UNIT_FAILURE if hardware failure 209* SUREWAREHOOK_ERROR_DATA_SIZE wrong size for buf 210* 211* in param flen : byte size of from and to 212* in param from : encrypted data buffer, should be a not-null valid pointer 213* out param to : decrypted data buffer, should be a 40bytes valid pointer 214* in param pdsa: a protected key pointer, should be a not-null valid pointer 215* 216*/ 217typedef int SureWareHook_Dsa_Sign_t(char*const msg,int flen,const unsigned char *from, 218 unsigned long *r,unsigned long *s,char *pdsa); 219extern SW_EXPORT SureWareHook_Dsa_Sign_t SureWareHook_Dsa_Sign; 220 221 222/* 223* SureWare Mod Exp 224* return 1 if success 225* SureWareHOOK_ERROR_FAILED if error while processing 226* SureWareHOOK_ERROR_UNIT_FAILURE if hardware failure 227* SUREWAREHOOK_ERROR_DATA_SIZE wrong size for buf 228* 229* mod and res are mlen bytes long. 230* exp is elen bytes long 231* data is dlen bytes long 232* mlen,elen and dlen are all multiple of sizeof(unsigned long) 233*/ 234typedef int SureWareHook_Mod_Exp_t(char*const msg,int mlen,const unsigned long *mod, 235 int elen,const unsigned long *exponent, 236 int dlen,unsigned long *data, 237 unsigned long *res); 238extern SW_EXPORT SureWareHook_Mod_Exp_t SureWareHook_Mod_Exp; 239 240