pk11func.h
上传用户:lyxiangda
上传日期:2007-01-12
资源大小:3042k
文件大小:22k
源码类别:

CA认证

开发平台:

WINDOWS

  1. /*
  2.  * The contents of this file are subject to the Mozilla Public
  3.  * License Version 1.1 (the "License"); you may not use this file
  4.  * except in compliance with the License. You may obtain a copy of
  5.  * the License at http://www.mozilla.org/MPL/
  6.  * 
  7.  * Software distributed under the License is distributed on an "AS
  8.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  9.  * implied. See the License for the specific language governing
  10.  * rights and limitations under the License.
  11.  * 
  12.  * The Original Code is the Netscape security libraries.
  13.  * 
  14.  * The Initial Developer of the Original Code is Netscape
  15.  * Communications Corporation.  Portions created by Netscape are 
  16.  * Copyright (C) 1994-2000 Netscape Communications Corporation.  All
  17.  * Rights Reserved.
  18.  * 
  19.  * Contributor(s):
  20.  * 
  21.  * Alternatively, the contents of this file may be used under the
  22.  * terms of the GNU General Public License Version 2 or later (the
  23.  * "GPL"), in which case the provisions of the GPL are applicable 
  24.  * instead of those above.  If you wish to allow use of your 
  25.  * version of this file only under the terms of the GPL and not to
  26.  * allow others to use your version of this file under the MPL,
  27.  * indicate your decision by deleting the provisions above and
  28.  * replace them with the notice and other provisions required by
  29.  * the GPL.  If you do not delete the provisions above, a recipient
  30.  * may use your version of this file under either the MPL or the
  31.  * GPL.
  32.  *
  33.  * PKCS #11 Wrapper functions which handles authenticating to the card's
  34.  * choosing the best cards, etc.
  35.  */
  36. #ifndef _PK11FUNC_H_
  37. #define _PK11FUNC_H_
  38. #include "plarena.h"
  39. #include "mcom_db.h"
  40. #include "seccomon.h"
  41. #include "secoidt.h"
  42. #include "secdert.h"
  43. #include "keyt.h"
  44. #include "certt.h"
  45. #include "pkcs11t.h"
  46. #include "secmodt.h"
  47. #include "seccomon.h"
  48. #include "pkcs7t.h"
  49. #include "cmsreclist.h"
  50. SEC_BEGIN_PROTOS
  51. /************************************************************
  52.  * Generic Slot Lists Management
  53.  ************************************************************/
  54. PK11SlotList * PK11_NewSlotList(void);
  55. void PK11_FreeSlotList(PK11SlotList *list);
  56. SECStatus PK11_AddSlotToList(PK11SlotList *list,PK11SlotInfo *slot);
  57. SECStatus PK11_DeleteSlotFromList(PK11SlotList *list,PK11SlotListElement *le);
  58. PK11SlotListElement * PK11_GetFirstSafe(PK11SlotList *list);
  59. PK11SlotListElement *PK11_GetNextSafe(PK11SlotList *list, 
  60. PK11SlotListElement *le, PRBool restart);
  61. PK11SlotListElement *PK11_FindSlotElement(PK11SlotList *list,
  62. PK11SlotInfo *slot);
  63. /************************************************************
  64.  * Generic Slot Management
  65.  ************************************************************/
  66. PK11SlotInfo *PK11_ReferenceSlot(PK11SlotInfo *slot);
  67. PK11SlotInfo *PK11_FindSlotByID(SECMODModuleID modID,CK_SLOT_ID slotID);
  68. void PK11_FreeSlot(PK11SlotInfo *slot);
  69. SECStatus PK11_DestroyObject(PK11SlotInfo *slot,CK_OBJECT_HANDLE object);
  70. SECStatus PK11_DestroyTokenObject(PK11SlotInfo *slot,CK_OBJECT_HANDLE object);
  71. CK_OBJECT_HANDLE PK11_CopyKey(PK11SlotInfo *slot, CK_OBJECT_HANDLE srcObject);
  72. SECStatus PK11_ReadAttribute(PK11SlotInfo *slot, CK_OBJECT_HANDLE id,
  73.          CK_ATTRIBUTE_TYPE type, PRArenaPool *arena, SECItem *result);
  74. CK_ULONG PK11_ReadULongAttribute(PK11SlotInfo *slot, CK_OBJECT_HANDLE id,
  75.          CK_ATTRIBUTE_TYPE type);
  76. PK11SlotInfo *PK11_GetInternalKeySlot(void);
  77. PK11SlotInfo *PK11_GetInternalSlot(void);
  78. char * PK11_MakeString(PRArenaPool *arena,char *space,char *staticSring,
  79. int stringLen);
  80. int PK11_MapError(CK_RV error);
  81. CK_SESSION_HANDLE PK11_GetRWSession(PK11SlotInfo *slot);
  82. void PK11_RestoreROSession(PK11SlotInfo *slot,CK_SESSION_HANDLE rwsession);
  83. PRBool PK11_RWSessionHasLock(PK11SlotInfo *slot,
  84.  CK_SESSION_HANDLE session_handle);
  85. PK11SlotInfo *PK11_NewSlotInfo(void);
  86. SECStatus PK11_Logout(PK11SlotInfo *slot);
  87. void PK11_LogoutAll(void);
  88. void PK11_EnterSlotMonitor(PK11SlotInfo *);
  89. void PK11_ExitSlotMonitor(PK11SlotInfo *);
  90. void PK11_CleanKeyList(PK11SlotInfo *slot);
  91. /************************************************************
  92.  *  Slot Password Management
  93.  ************************************************************/
  94. void PK11_SetSlotPWValues(PK11SlotInfo *slot,int askpw, int timeout);
  95. void PK11_GetSlotPWValues(PK11SlotInfo *slot,int *askpw, int *timeout);
  96. SECStatus PK11_CheckSSOPassword(PK11SlotInfo *slot, char *ssopw);
  97. SECStatus PK11_CheckUserPassword(PK11SlotInfo *slot,char *pw);
  98. SECStatus PK11_DoPassword(PK11SlotInfo *slot, PRBool loadCerts, void *wincx);
  99. PRBool PK11_IsLoggedIn(PK11SlotInfo *slot, void *wincx);
  100. SECStatus PK11_VerifyPW(PK11SlotInfo *slot,char *pw);
  101. SECStatus PK11_InitPin(PK11SlotInfo *slot,char *ssopw, char *pk11_userpwd);
  102. SECStatus PK11_ChangePW(PK11SlotInfo *slot,char *oldpw, char *newpw);
  103. void PK11_HandlePasswordCheck(PK11SlotInfo *slot,void *wincx);
  104. void PK11_SetPasswordFunc(PK11PasswordFunc func);
  105. void PK11_SetVerifyPasswordFunc(PK11VerifyPasswordFunc func);
  106. void PK11_SetIsLoggedInFunc(PK11IsLoggedInFunc func);
  107. int PK11_GetMinimumPwdLength(PK11SlotInfo *slot);
  108. SECStatus PK11_ResetToken(PK11SlotInfo *slot, char *sso_pwd);
  109. /************************************************************
  110.  * Manage the built-In Slot Lists
  111.  ************************************************************/
  112. SECStatus PK11_InitSlotLists(void);
  113. PK11SlotList *PK11_GetSlotList(CK_MECHANISM_TYPE type);
  114. void PK11_LoadSlotList(PK11SlotInfo *slot, PK11PreSlotInfo *psi, int count);
  115. void PK11_ClearSlotList(PK11SlotInfo *slot);
  116. /******************************************************************
  117.  *           Slot initialization
  118.  ******************************************************************/
  119. PRBool PK11_VerifyMechanism(PK11SlotInfo *slot,PK11SlotInfo *intern,
  120.   CK_MECHANISM_TYPE mech, SECItem *data, SECItem *iv);
  121. PRBool PK11_VerifySlotMechanisms(PK11SlotInfo *slot);
  122. SECStatus pk11_CheckVerifyTest(PK11SlotInfo *slot);
  123. SECStatus PK11_InitToken(PK11SlotInfo *slot, PRBool loadCerts);
  124. SECStatus PK11_Authenticate(PK11SlotInfo *slot, PRBool loadCerts, void *wincx);
  125. void PK11_InitSlot(SECMODModule *mod,CK_SLOT_ID slotID,PK11SlotInfo *slot);
  126. /******************************************************************
  127.  *           Slot info functions
  128.  ******************************************************************/
  129. PK11SlotInfo *PK11_FindSlotByName(char *name);
  130. PK11SlotInfo *PK11_FindSlotBySerial(char *serial);
  131. PRBool PK11_IsReadOnly(PK11SlotInfo *slot);
  132. PRBool PK11_IsInternal(PK11SlotInfo *slot);
  133. char * PK11_GetTokenName(PK11SlotInfo *slot);
  134. char * PK11_GetSlotName(PK11SlotInfo *slot);
  135. PRBool PK11_NeedLogin(PK11SlotInfo *slot);
  136. PRBool PK11_IsFriendly(PK11SlotInfo *slot);
  137. PRBool PK11_IsHW(PK11SlotInfo *slot);
  138. PRBool PK11_NeedUserInit(PK11SlotInfo *slot);
  139. int PK11_GetSlotSeries(PK11SlotInfo *slot);
  140. int PK11_GetCurrentWrapIndex(PK11SlotInfo *slot);
  141. unsigned long PK11_GetDefaultFlags(PK11SlotInfo *slot);
  142. CK_SLOT_ID PK11_GetSlotID(PK11SlotInfo *slot);
  143. SECMODModuleID PK11_GetModuleID(PK11SlotInfo *slot);
  144. SECStatus PK11_GetSlotInfo(PK11SlotInfo *slot, CK_SLOT_INFO *info);
  145. SECStatus PK11_GetTokenInfo(PK11SlotInfo *slot, CK_TOKEN_INFO *info);
  146. PRBool PK11_IsDisabled(PK11SlotInfo *slot);
  147. PRBool PK11_HasRootCerts(PK11SlotInfo *slot);
  148. PK11DisableReasons PK11_GetDisabledReason(PK11SlotInfo *slot);
  149. /* Prevents the slot from being used, and set disable reason to user-disable */
  150. /* NOTE: Mechanisms that were ON continue to stay ON */
  151. /*       Therefore, when the slot is enabled, it will remember */
  152. /*       what mechanisms needs to be turned on */
  153. PRBool PK11_UserDisableSlot(PK11SlotInfo *slot);
  154. /* Allow all mechanisms that are ON before UserDisableSlot() */
  155. /* was called to be available again */
  156. PRBool PK11_UserEnableSlot(PK11SlotInfo *slot);
  157. PRBool PK11_NeedPWInit(void);
  158. PRBool PK11_NeedPWInitForSlot(PK11SlotInfo *slot);
  159. PRBool PK11_TokenExists(CK_MECHANISM_TYPE);
  160. SECStatus PK11_GetModInfo(SECMODModule *mod, CK_INFO *info);
  161. PRBool PK11_IsFIPS(void);
  162. SECMODModule *PK11_GetModule(PK11SlotInfo *slot);
  163. /*********************************************************************
  164.  *            Slot mapping utility functions.
  165.  *********************************************************************/
  166. PRBool PK11_IsPresent(PK11SlotInfo *slot);
  167. PRBool PK11_DoesMechanism(PK11SlotInfo *slot, CK_MECHANISM_TYPE type);
  168. PK11SlotList * PK11_GetAllTokens(CK_MECHANISM_TYPE type,PRBool needRW,
  169. PRBool loadCerts, void *wincx);
  170. PK11SlotList * PK11_GetPrivateKeyTokens(CK_MECHANISM_TYPE type,
  171. PRBool needRW,void *wincx);
  172. PK11SlotInfo *PK11_GetBestSlotMultiple(CK_MECHANISM_TYPE *type, int count,
  173. void *wincx);
  174. PK11SlotInfo *PK11_GetBestSlot(CK_MECHANISM_TYPE type, void *wincx);
  175. CK_MECHANISM_TYPE PK11_GetBestWrapMechanism(PK11SlotInfo *slot);
  176. int PK11_GetBestKeyLength(PK11SlotInfo *slot, CK_MECHANISM_TYPE type);
  177. /*********************************************************************
  178.  *       Mechanism Mapping functions
  179.  *********************************************************************/
  180. void PK11_AddMechanismEntry(CK_MECHANISM_TYPE type, CK_KEY_TYPE key,
  181.   CK_MECHANISM_TYPE keygen, int ivLen, int blocksize);
  182. CK_MECHANISM_TYPE PK11_GetKeyType(CK_MECHANISM_TYPE type,unsigned long len);
  183. CK_MECHANISM_TYPE PK11_GetKeyGen(CK_MECHANISM_TYPE type);
  184. int PK11_GetBlockSize(CK_MECHANISM_TYPE type,SECItem *params);
  185. int PK11_GetIVLength(CK_MECHANISM_TYPE type);
  186. SECItem *PK11_ParamFromIV(CK_MECHANISM_TYPE type,SECItem *iv);
  187. unsigned char *PK11_IVFromParam(CK_MECHANISM_TYPE type,SECItem *param,int *len);
  188. SECItem * PK11_BlockData(SECItem *data,unsigned long size);
  189. /* PKCS #11 to DER mapping functions */
  190. SECItem *PK11_ParamFromAlgid(SECAlgorithmID *algid);
  191. SECItem *PK11_GenerateNewParam(CK_MECHANISM_TYPE, PK11SymKey *);
  192. CK_MECHANISM_TYPE PK11_AlgtagToMechanism(SECOidTag algTag);
  193. SECOidTag PK11_MechanismToAlgtag(CK_MECHANISM_TYPE type);
  194. SECOidTag PK11_FortezzaMapSig(SECOidTag algTag);
  195. SECStatus PK11_ParamToAlgid(SECOidTag algtag, SECItem *param,
  196.                                    PRArenaPool *arena, SECAlgorithmID *algid);
  197. SECStatus PK11_SeedRandom(PK11SlotInfo *,unsigned char *data,int len);
  198. SECStatus PK11_RandomUpdate(void *data, size_t bytes);
  199. SECStatus PK11_GenerateRandom(unsigned char *data,int len);
  200. CK_RV PK11_MapPBEMechanismToCryptoMechanism(CK_MECHANISM_PTR pPBEMechanism,
  201.     CK_MECHANISM_PTR pCryptoMechanism,
  202.     SECItem *pbe_pwd, PRBool bad3DES);
  203. CK_MECHANISM_TYPE PK11_GetPadMechanism(CK_MECHANISM_TYPE);
  204. /**********************************************************************
  205.  *                   Symetric, Public, and Private Keys 
  206.  **********************************************************************/
  207. PK11SymKey *PK11_CreateSymKey(PK11SlotInfo *slot, 
  208. CK_MECHANISM_TYPE type, void *wincx);
  209. void PK11_FreeSymKey(PK11SymKey *key);
  210. PK11SymKey *PK11_ReferenceSymKey(PK11SymKey *symKey);
  211. PK11SymKey *PK11_ImportSymKey(PK11SlotInfo *slot, CK_MECHANISM_TYPE type,
  212.     PK11Origin origin, CK_ATTRIBUTE_TYPE operation, SECItem *key,void *wincx);
  213. PK11SymKey *PK11_SymKeyFromHandle(PK11SlotInfo *slot, PK11SymKey *parent,
  214.     PK11Origin origin, CK_MECHANISM_TYPE type, CK_OBJECT_HANDLE keyID, 
  215.     PRBool owner, void *wincx);
  216. PK11SymKey *PK11_GetWrapKey(PK11SlotInfo *slot, int wrap,
  217.       CK_MECHANISM_TYPE type,int series, void *wincx);
  218. void PK11_SetWrapKey(PK11SlotInfo *slot, int wrap, PK11SymKey *wrapKey);
  219. CK_MECHANISM_TYPE PK11_GetMechanism(PK11SymKey *symKey);
  220. CK_OBJECT_HANDLE PK11_ImportPublicKey(PK11SlotInfo *slot, 
  221. SECKEYPublicKey *pubKey, PRBool isToken);
  222. PK11SymKey *PK11_KeyGen(PK11SlotInfo *slot,CK_MECHANISM_TYPE type,
  223. SECItem *param, int keySize,void *wincx);
  224. /* Key Generation specialized for SDR (fixed DES3 key) */
  225. PK11SymKey *PK11_GenDES3TokenKey(PK11SlotInfo *slot, SECItem *keyid, void *cx);
  226. SECStatus PK11_PubWrapSymKey(CK_MECHANISM_TYPE type, SECKEYPublicKey *pubKey,
  227. PK11SymKey *symKey, SECItem *wrappedKey);
  228. SECStatus PK11_WrapSymKey(CK_MECHANISM_TYPE type, SECItem *params,
  229.  PK11SymKey *wrappingKey, PK11SymKey *symKey, SECItem *wrappedKey);
  230. PK11SymKey *PK11_Derive(PK11SymKey *baseKey, CK_MECHANISM_TYPE mechanism,
  231.     SECItem *param, CK_MECHANISM_TYPE target, 
  232.         CK_ATTRIBUTE_TYPE operation, int keySize);
  233. PK11SymKey *PK11_DeriveWithFlags( PK11SymKey *baseKey, 
  234. CK_MECHANISM_TYPE derive, SECItem *param, CK_MECHANISM_TYPE target, 
  235. CK_ATTRIBUTE_TYPE operation, int keySize, CK_FLAGS flags);
  236. PK11SymKey *PK11_PubDerive( SECKEYPrivateKey *privKey, 
  237.  SECKEYPublicKey *pubKey, PRBool isSender, SECItem *randomA, SECItem *randomB,
  238.  CK_MECHANISM_TYPE derive, CK_MECHANISM_TYPE target,
  239.  CK_ATTRIBUTE_TYPE operation, int keySize,void *wincx) ;
  240. PK11SymKey *PK11_UnwrapSymKey(PK11SymKey *key, 
  241. CK_MECHANISM_TYPE wraptype, SECItem *param, SECItem *wrapppedKey,  
  242. CK_MECHANISM_TYPE target, CK_ATTRIBUTE_TYPE operation, int keySize);
  243. PK11SymKey *PK11_UnwrapSymKeyWithFlags(PK11SymKey *wrappingKey, 
  244. CK_MECHANISM_TYPE wrapType, SECItem *param, SECItem *wrappedKey, 
  245. CK_MECHANISM_TYPE target, CK_ATTRIBUTE_TYPE operation, int keySize, 
  246. CK_FLAGS flags);
  247. PK11SymKey *PK11_PubUnwrapSymKey(SECKEYPrivateKey *key, SECItem *wrapppedKey,
  248.  CK_MECHANISM_TYPE target, CK_ATTRIBUTE_TYPE operation, int keySize);
  249. PK11SymKey *PK11_FindFixedKey(PK11SlotInfo *slot, CK_MECHANISM_TYPE type, 
  250. SECItem *keyID, void *wincx);
  251. SECStatus PK11_DeleteTokenPrivateKey(SECKEYPrivateKey *privKey);
  252. SECStatus PK11_DeleteTokenCertAndKey(CERTCertificate *cert,void *wincx);
  253. /* size to hold key in bytes */
  254. unsigned int PK11_GetKeyLength(PK11SymKey *key);
  255. /* size of actual secret parts of key in bits */
  256. /* algid is because RC4 strength is determined by the effective bits as well
  257.  * as the key bits */
  258. unsigned int PK11_GetKeyStrength(PK11SymKey *key,SECAlgorithmID *algid);
  259. SECStatus PK11_ExtractKeyValue(PK11SymKey *symKey);
  260. SECItem * PK11_GetKeyData(PK11SymKey *symKey);
  261. PK11SlotInfo * PK11_GetSlotFromKey(PK11SymKey *symKey);
  262. void *PK11_GetWindow(PK11SymKey *symKey);
  263. SECKEYPrivateKey *PK11_GenerateKeyPair(PK11SlotInfo *slot,
  264.    CK_MECHANISM_TYPE type, void *param, SECKEYPublicKey **pubk,
  265.       PRBool isPerm, PRBool isSensitive, void *wincx);
  266. SECKEYPrivateKey *PK11_MakePrivKey(PK11SlotInfo *slot, KeyType keyType,
  267.                         PRBool isTemp, CK_OBJECT_HANDLE privID, void *wincx);
  268. SECKEYPrivateKey * PK11_FindPrivateKeyFromCert(PK11SlotInfo *slot,
  269.   CERTCertificate *cert, void *wincx);
  270. SECKEYPrivateKey * PK11_FindKeyByAnyCert(CERTCertificate *cert, void *wincx);
  271. SECKEYPrivateKey * PK11_FindKeyByKeyID(PK11SlotInfo *slot, SECItem *keyID,
  272.        void *wincx);
  273. CK_OBJECT_HANDLE PK11_FindObjectForCert(CERTCertificate *cert,
  274. void *wincx, PK11SlotInfo **pSlot);
  275. int PK11_GetPrivateModulusLen(SECKEYPrivateKey *key); 
  276. SECStatus PK11_PubDecryptRaw(SECKEYPrivateKey *key, unsigned char *data,
  277.    unsigned *outLen, unsigned int maxLen, unsigned char *enc, unsigned encLen);
  278. /* The encrypt version of the above function */
  279. SECStatus PK11_PubEncryptRaw(SECKEYPublicKey *key, unsigned char *enc,
  280.                 unsigned char *data, unsigned dataLen, void *wincx);
  281. SECStatus PK11_ImportPrivateKeyInfo(PK11SlotInfo *slot, 
  282. SECKEYPrivateKeyInfo *pki, SECItem *nickname,
  283. SECItem *publicValue, PRBool isPerm, PRBool isPrivate,
  284. unsigned int usage, void *wincx);
  285. SECStatus PK11_ImportEncryptedPrivateKeyInfo(PK11SlotInfo *slot, 
  286. SECKEYEncryptedPrivateKeyInfo *epki, SECItem *pwitem, 
  287. SECItem *nickname, SECItem *publicValue, PRBool isPerm,
  288. PRBool isPrivate, KeyType type, 
  289. unsigned int usage, void *wincx);
  290. SECKEYPrivateKeyInfo *PK11_ExportPrivateKeyInfo(
  291. CERTCertificate *cert, void *wincx);
  292. SECKEYEncryptedPrivateKeyInfo *PK11_ExportEncryptedPrivateKeyInfo(
  293. PK11SlotInfo *slot, SECOidTag algTag, SECItem *pwitem,
  294. CERTCertificate *cert, int iteration, void *wincx);
  295. SECKEYPrivateKey *PK11_FindKeyByDERCert(PK11SlotInfo *slot, 
  296. CERTCertificate *cert, void *wincx);
  297. SECKEYPublicKey *PK11_MakeKEAPubKey(unsigned char *data, int length);
  298. SECStatus PK11_DigestKey(PK11Context *context, PK11SymKey *key);
  299. PRBool PK11_VerifyKeyOK(PK11SymKey *key);
  300. SECKEYPrivateKey *PK11_UnwrapPrivKey(PK11SlotInfo *slot, 
  301. PK11SymKey *wrappingKey, CK_MECHANISM_TYPE wrapType,
  302. SECItem *param, SECItem *wrappedKey, SECItem *label, 
  303. SECItem *publicValue, PRBool token, PRBool sensitive,
  304. CK_KEY_TYPE keyType, CK_ATTRIBUTE_TYPE *usage, int usageCount,
  305. void *wincx);
  306. SECStatus PK11_WrapPrivKey(PK11SlotInfo *slot, PK11SymKey *wrappingKey,
  307.    SECKEYPrivateKey *privKey, CK_MECHANISM_TYPE wrapType,
  308.    SECItem *param, SECItem *wrappedKey, void *wincx);
  309. PK11SymKey * pk11_CopyToSlot(PK11SlotInfo *slot,CK_MECHANISM_TYPE type,
  310.   CK_ATTRIBUTE_TYPE operation, PK11SymKey *symKey);
  311. SECItem *PK11_GetKeyIDFromCert(CERTCertificate *cert, void *wincx);
  312. SECItem * PK11_GetKeyIDFromPrivateKey(SECKEYPrivateKey *key, void *wincx);
  313. /**********************************************************************
  314.  *                   Certs
  315.  **********************************************************************/
  316. SECItem *PK11_MakeIDFromPubKey(SECItem *pubKeyData);
  317. CERTCertificate *PK11_GetCertFromPrivateKey(SECKEYPrivateKey *privKey);
  318. SECStatus PK11_TraverseSlotCerts(
  319.      SECStatus(* callback)(CERTCertificate*,SECItem *,void *),
  320.                                                 void *arg, void *wincx);
  321. CERTCertificate * PK11_FindCertFromNickname(char *nickname, void *wincx);
  322. CERTCertList * PK11_FindCertsFromNickname(char *nickname, void *wincx);
  323. SECKEYPrivateKey * PK11_FindPrivateKeyFromNickname(char *nickname, void *wincx);
  324. PK11SlotInfo *PK11_ImportCertForKey(CERTCertificate *cert, char *nickname,
  325. void *wincx);
  326. CK_OBJECT_HANDLE * PK11_FindObjectsFromNickname(char *nickname,
  327. PK11SlotInfo **slotptr, CK_OBJECT_CLASS objclass, int *returnCount, 
  328. void *wincx);
  329. PK11SlotInfo *PK11_KeyForCertExists(CERTCertificate *cert,
  330. CK_OBJECT_HANDLE *keyPtr, void *wincx);
  331. CK_OBJECT_HANDLE PK11_MatchItem(PK11SlotInfo *slot,CK_OBJECT_HANDLE peer,
  332. CK_OBJECT_CLASS o_class); 
  333. CERTCertificate * PK11_FindCertByIssuerAndSN(PK11SlotInfo **slot,
  334. CERTIssuerAndSN *sn, void *wincx);
  335. CERTCertificate * PK11_FindCertAndKeyByRecipientList(PK11SlotInfo **slot,
  336. SEC_PKCS7RecipientInfo **array, SEC_PKCS7RecipientInfo **rip,
  337. SECKEYPrivateKey**privKey, void *wincx);
  338. int PK11_FindCertAndKeyByRecipientListNew(NSSCMSRecipient **recipientlist,
  339. void *wincx);
  340. CK_BBOOL PK11_HasAttributeSet( PK11SlotInfo *slot,
  341.        CK_OBJECT_HANDLE id,
  342.        CK_ATTRIBUTE_TYPE type );
  343. CK_RV PK11_GetAttributes(PRArenaPool *arena,PK11SlotInfo *slot,
  344.  CK_OBJECT_HANDLE obj,CK_ATTRIBUTE *attr, int count);
  345. int PK11_NumberCertsForCertSubject(CERTCertificate *cert);
  346. SECStatus PK11_TraverseCertsForSubject(CERTCertificate *cert, 
  347. SECStatus(*callback)(CERTCertificate *, void *), void *arg);
  348. SECStatus PK11_TraverseCertsForSubjectInSlot(CERTCertificate *cert,
  349. PK11SlotInfo *slot, SECStatus(*callback)(CERTCertificate *, void *),
  350. void *arg);
  351. CERTCertificate *PK11_FindCertFromDERCert(PK11SlotInfo *slot, 
  352.   CERTCertificate *cert, void *wincx);
  353. CERTCertificate *PK11_FindCertFromDERSubjectAndNickname(
  354. PK11SlotInfo *slot, 
  355. CERTCertificate *cert, char *nickname,
  356. void *wincx);
  357. SECStatus PK11_ImportCertForKeyToSlot(PK11SlotInfo *slot, CERTCertificate *cert,
  358. char *nickname, PRBool addUsage,
  359. void *wincx);
  360. CERTCertificate *PK11_FindBestKEAMatch(CERTCertificate *serverCert,void *wincx);
  361. SECStatus PK11_GetKEAMatchedCerts(PK11SlotInfo *slot1,
  362.    PK11SlotInfo *slot2, CERTCertificate **cert1, CERTCertificate **cert2);
  363. PRBool PK11_FortezzaHasKEA(CERTCertificate *cert);
  364. CK_OBJECT_HANDLE PK11_FindCertInSlot(PK11SlotInfo *slot, CERTCertificate *cert,
  365.      void *wincx);
  366. SECStatus PK11_TraverseCertsForNicknameInSlot(SECItem *nickname,
  367. PK11SlotInfo *slot, SECStatus(*callback)(CERTCertificate *, void *),
  368. void *arg);
  369. SECStatus PK11_TraverseCertsInSlot(PK11SlotInfo *slot,
  370.        SECStatus(* callback)(CERTCertificate*, void *), void *arg);
  371. /**********************************************************************
  372.  *                   Sign/Verify 
  373.  **********************************************************************/
  374. int PK11_SignatureLen(SECKEYPrivateKey *key);
  375. PK11SlotInfo * PK11_GetSlotFromPrivateKey(SECKEYPrivateKey *key);
  376. SECStatus PK11_Sign(SECKEYPrivateKey *key, SECItem *sig, SECItem *hash);
  377. SECStatus PK11_VerifyRecover(SECKEYPublicKey *key, SECItem *sig,
  378.  SECItem *dsig, void * wincx);
  379. SECStatus PK11_Verify(SECKEYPublicKey *key, SECItem *sig, 
  380. SECItem *hash, void *wincx);
  381. /**********************************************************************
  382.  *                   Crypto Contexts
  383.  **********************************************************************/
  384. void PK11_DestroyContext(PK11Context *context, PRBool freeit);
  385. PK11Context * PK11_CreateContextByRawKey(PK11SlotInfo *slot, 
  386.     CK_MECHANISM_TYPE type, PK11Origin origin, CK_ATTRIBUTE_TYPE operation,
  387.   SECItem *key, SECItem *param, void *wincx);
  388. PK11Context *PK11_CreateContextBySymKey(CK_MECHANISM_TYPE type,
  389. CK_ATTRIBUTE_TYPE operation, PK11SymKey *symKey, SECItem *param);
  390. PK11Context *PK11_CreateDigestContext(SECOidTag hashAlg);
  391. PK11Context *PK11_CloneContext(PK11Context *old);
  392. SECStatus PK11_DigestBegin(PK11Context *cx);
  393. SECStatus PK11_HashBuf(SECOidTag hashAlg, unsigned char *out, unsigned char *in,
  394. int32 len);
  395. SECStatus PK11_DigestOp(PK11Context *context, const unsigned char *in, 
  396.                         unsigned len);
  397. SECStatus PK11_CipherOp(PK11Context *context, unsigned char * out, int *outlen, 
  398. int maxout, unsigned char *in, int inlen);
  399. SECStatus PK11_Finalize(PK11Context *context);
  400. SECStatus PK11_DigestFinal(PK11Context *context, unsigned char *data, 
  401. unsigned int *outLen, unsigned int length);
  402. PRBool PK11_HashOK(SECOidTag hashAlg);
  403. SECStatus PK11_SaveContext(PK11Context *cx,unsigned char *save,
  404. int *len, int saveLength);
  405. SECStatus PK11_RestoreContext(PK11Context *cx,unsigned char *save,int len);
  406. SECStatus PK11_GenerateFortezzaIV(PK11SymKey *symKey,unsigned char *iv,int len);
  407. SECStatus PK11_ReadSlotCerts(PK11SlotInfo *slot);
  408. void PK11_FreeSlotCerts(PK11SlotInfo *slot);
  409. void PK11_SetFortezzaHack(PK11SymKey *symKey) ;
  410. /**********************************************************************
  411.  *                   PBE functions 
  412.  **********************************************************************/
  413. SECAlgorithmID *
  414. PK11_CreatePBEAlgorithmID(SECOidTag algorithm, int iteration, SECItem *salt);
  415. PK11SymKey *
  416. PK11_PBEKeyGen(PK11SlotInfo *slot, SECAlgorithmID *algid,  SECItem *pwitem,
  417.        PRBool faulty3DES, void *wincx);
  418. SECItem *
  419. PK11_GetPBEIV(SECAlgorithmID *algid, SECItem *pwitem);
  420. SEC_END_PROTOS
  421. #endif