1/* 2 * bsafeUtils.h - common routines for CDSA/BSAFE compatibility testing 3 */ 4 5/* 6 * Clients of this module do not need to know about or see anything from the 7 * BSAFE headers. 8 */ 9#ifndef _BSAFE_UTILS_H_ 10#define _BSAFE_UTILS_H_ 11#include <Security/cssmtype.h> 12 13#ifdef __cplusplus 14extern "C" { 15#endif 16 17/* Actually the same as a B_KEY_OBJ, but our callers don't need to know that */ 18typedef void *BU_KEY; 19 20/* 21 * Create a symmetric key. 22 */ 23CSSM_RETURN buGenSymKey( 24 uint32 keySizeInBits, 25 const CSSM_DATA *keyData, 26 BU_KEY *key); // RETURNED 27 28/* 29 * Create asymmetric key pair. 30 * FIXME - additional params (e.g. DSA params, RSA exponent)? 31 */ 32CSSM_RETURN buGenKeyPair( 33 uint32 keySizeInBits, 34 CSSM_ALGORITHMS keyAlg, // CSSM_ALGID_{RSA,DSA} 35 BU_KEY *pubKey, // RETURNED 36 BU_KEY *privKey); // RETURNED 37 38/* 39 * Free a key created in buGenSymKey or buGenKeyPair 40 */ 41CSSM_RETURN buFreeKey( 42 BU_KEY key); 43 44/* 45 * encrypt/decrypt 46 */ 47CSSM_RETURN buEncryptDecrypt( 48 BU_KEY key, 49 CSSM_BOOL forEncrypt, 50 CSSM_ALGORITHMS encrAlg, 51 CSSM_ENCRYPT_MODE mode, // CSSM_ALGMODE_CBC, etc. 52 const CSSM_DATA *iv, //�optional per mode 53 uint32 effectiveKeyBits, // optional per key alg (actually just RC2) 54 // for RSA, key size in bits 55 uint32 rounds, // optional, RC5 only 56 const CSSM_DATA *inData, 57 CSSM_DATA_PTR outData); // mallocd and RETURNED 58 59/* 60 * Sign/verify 61 */ 62CSSM_RETURN buSign( 63 BU_KEY key, 64 CSSM_ALGORITHMS sigAlg, 65 const CSSM_DATA *ptext, 66 uint32 keySizeInBits, // to set up sig 67 CSSM_DATA_PTR sig); // mallocd and RETURNED 68 69CSSM_RETURN buVerify( 70 BU_KEY key, 71 CSSM_ALGORITHMS sigAlg, 72 const CSSM_DATA *ptext, 73 const CSSM_DATA *sig); // mallocd and RETURNED 74 75/* 76 * generate MAC either one update (updateSizes == NULL) or 77 * specified set of update sizes. 78 */ 79CSSM_RETURN buGenMac( 80 BU_KEY key, // any key, any size 81 CSSM_ALGORITHMS macAlg, // only CSSM_ALGID_SHA1HMAC for now 82 const CSSM_DATA *ptext, 83 unsigned *updateSizes, // NULL --> random updates 84 // else null-terminated list of sizes 85 CSSM_DATA_PTR mac); // mallocd and RETURNED 86 87/* generate digest */ 88CSSM_RETURN buGenDigest( 89 CSSM_ALGORITHMS macAlg, // CSSM_ALGID_SHA1, etc. */ 90 const CSSM_DATA *ptext, 91 CSSM_DATA_PTR digest); // mallocd and RETURNED 92 93/* 94 * Convert between BSAFE and CDSA private keys 95 */ 96CSSM_RETURN buBsafePrivKeyToCdsa( 97 CSSM_ALGORITHMS keyAlg, 98 uint32 keySizeInBits, 99 BU_KEY bsafePrivKey, 100 CSSM_KEY_PTR cdsaPrivKey); 101CSSM_RETURN buCdsaPrivKeyToBsafe( 102 CSSM_KEY_PTR cdsaPrivKey, 103 BU_KEY *bsafePrivKey); 104 105#ifdef __cplusplus 106} 107#endif 108 109#endif /* _BSAFE_UTILS_H_ */ 110