1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/security/nss/lib/pk11wrap/pk11priv.h Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,192 @@ 1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.7 +#ifndef _PK11PRIV_H_ 1.8 +#define _PK11PRIV_H_ 1.9 +#include "plarena.h" 1.10 +#include "seccomon.h" 1.11 +#include "secoidt.h" 1.12 +#include "secdert.h" 1.13 +#include "keyt.h" 1.14 +#include "certt.h" 1.15 +#include "pkcs11t.h" 1.16 +#include "secmodt.h" 1.17 +#include "seccomon.h" 1.18 +#include "pkcs7t.h" 1.19 +#include "cmsreclist.h" 1.20 + 1.21 +/* 1.22 + * These are the private NSS functions. They are not exported by nss.def, and 1.23 + * are not callable outside nss3.dll. 1.24 + */ 1.25 + 1.26 +SEC_BEGIN_PROTOS 1.27 + 1.28 +/************************************************************ 1.29 + * Generic Slot Lists Management 1.30 + ************************************************************/ 1.31 +PK11SlotList * PK11_NewSlotList(void); 1.32 +PK11SlotList * PK11_GetPrivateKeyTokens(CK_MECHANISM_TYPE type, 1.33 + PRBool needRW,void *wincx); 1.34 +SECStatus PK11_AddSlotToList(PK11SlotList *list,PK11SlotInfo *slot, PRBool sorted); 1.35 +SECStatus PK11_DeleteSlotFromList(PK11SlotList *list,PK11SlotListElement *le); 1.36 +PK11SlotListElement *PK11_FindSlotElement(PK11SlotList *list, 1.37 + PK11SlotInfo *slot); 1.38 +PK11SlotInfo *PK11_FindSlotBySerial(char *serial); 1.39 +int PK11_GetMaxKeyLength(CK_MECHANISM_TYPE type); 1.40 + 1.41 +/************************************************************ 1.42 + * Generic Slot Management 1.43 + ************************************************************/ 1.44 +CK_OBJECT_HANDLE PK11_CopyKey(PK11SlotInfo *slot, CK_OBJECT_HANDLE srcObject); 1.45 +SECStatus PK11_ReadAttribute(PK11SlotInfo *slot, CK_OBJECT_HANDLE id, 1.46 + CK_ATTRIBUTE_TYPE type, PLArenaPool *arena, SECItem *result); 1.47 +CK_ULONG PK11_ReadULongAttribute(PK11SlotInfo *slot, CK_OBJECT_HANDLE id, 1.48 + CK_ATTRIBUTE_TYPE type); 1.49 +char * PK11_MakeString(PLArenaPool *arena,char *space,char *staticSring, 1.50 + int stringLen); 1.51 +int PK11_MapError(CK_RV error); 1.52 +CK_SESSION_HANDLE PK11_GetRWSession(PK11SlotInfo *slot); 1.53 +void PK11_RestoreROSession(PK11SlotInfo *slot,CK_SESSION_HANDLE rwsession); 1.54 +PRBool PK11_RWSessionHasLock(PK11SlotInfo *slot, 1.55 + CK_SESSION_HANDLE session_handle); 1.56 +PK11SlotInfo *PK11_NewSlotInfo(SECMODModule *mod); 1.57 +void PK11_EnterSlotMonitor(PK11SlotInfo *); 1.58 +void PK11_ExitSlotMonitor(PK11SlotInfo *); 1.59 +void PK11_CleanKeyList(PK11SlotInfo *slot); 1.60 + 1.61 + 1.62 +/************************************************************ 1.63 + * Slot Password Management 1.64 + ************************************************************/ 1.65 +SECStatus PK11_DoPassword(PK11SlotInfo *slot, CK_SESSION_HANDLE session, 1.66 + PRBool loadCerts, void *wincx, PRBool alreadyLocked, 1.67 + PRBool contextSpecific); 1.68 +SECStatus PK11_VerifyPW(PK11SlotInfo *slot,char *pw); 1.69 +void PK11_HandlePasswordCheck(PK11SlotInfo *slot,void *wincx); 1.70 +void PK11_SetVerifyPasswordFunc(PK11VerifyPasswordFunc func); 1.71 +void PK11_SetIsLoggedInFunc(PK11IsLoggedInFunc func); 1.72 + 1.73 +/************************************************************ 1.74 + * Manage the built-In Slot Lists 1.75 + ************************************************************/ 1.76 +SECStatus PK11_InitSlotLists(void); 1.77 +void PK11_DestroySlotLists(void); 1.78 +PK11SlotList *PK11_GetSlotList(CK_MECHANISM_TYPE type); 1.79 +void PK11_LoadSlotList(PK11SlotInfo *slot, PK11PreSlotInfo *psi, int count); 1.80 +void PK11_ClearSlotList(PK11SlotInfo *slot); 1.81 + 1.82 + 1.83 +/****************************************************************** 1.84 + * Slot initialization 1.85 + ******************************************************************/ 1.86 +SECStatus PK11_InitToken(PK11SlotInfo *slot, PRBool loadCerts); 1.87 +void PK11_InitSlot(SECMODModule *mod,CK_SLOT_ID slotID,PK11SlotInfo *slot); 1.88 +PRBool PK11_NeedPWInitForSlot(PK11SlotInfo *slot); 1.89 +SECStatus PK11_ReadSlotCerts(PK11SlotInfo *slot); 1.90 +void pk11_SetInternalKeySlot(PK11SlotInfo *slot); 1.91 +PK11SlotInfo *pk11_SwapInternalKeySlot(PK11SlotInfo *slot); 1.92 +void pk11_SetInternalKeySlotIfFirst(PK11SlotInfo *slot); 1.93 + 1.94 +/********************************************************************* 1.95 + * Mechanism Mapping functions 1.96 + *********************************************************************/ 1.97 +void PK11_AddMechanismEntry(CK_MECHANISM_TYPE type, CK_KEY_TYPE key, 1.98 + CK_MECHANISM_TYPE keygen, CK_MECHANISM_TYPE pad, 1.99 + int ivLen, int blocksize); 1.100 +CK_MECHANISM_TYPE PK11_GetKeyMechanism(CK_KEY_TYPE type); 1.101 +CK_MECHANISM_TYPE PK11_GetKeyGenWithSize(CK_MECHANISM_TYPE type, int size); 1.102 + 1.103 +/********************************************************************** 1.104 + * Symetric, Public, and Private Keys 1.105 + **********************************************************************/ 1.106 +/* Key Generation specialized for SDR (fixed DES3 key) */ 1.107 +PK11SymKey *PK11_GenDES3TokenKey(PK11SlotInfo *slot, SECItem *keyid, void *cx); 1.108 +SECKEYPublicKey *PK11_ExtractPublicKey(PK11SlotInfo *slot, KeyType keyType, 1.109 + CK_OBJECT_HANDLE id); 1.110 +CK_OBJECT_HANDLE PK11_FindObjectForCert(CERTCertificate *cert, 1.111 + void *wincx, PK11SlotInfo **pSlot); 1.112 +PK11SymKey * pk11_CopyToSlot(PK11SlotInfo *slot,CK_MECHANISM_TYPE type, 1.113 + CK_ATTRIBUTE_TYPE operation, PK11SymKey *symKey); 1.114 + 1.115 +/********************************************************************** 1.116 + * Certs 1.117 + **********************************************************************/ 1.118 +SECStatus PK11_TraversePrivateKeysInSlot( PK11SlotInfo *slot, 1.119 + SECStatus(* callback)(SECKEYPrivateKey*, void*), void *arg); 1.120 +SECKEYPrivateKey * PK11_FindPrivateKeyFromNickname(char *nickname, void *wincx); 1.121 +CK_OBJECT_HANDLE * PK11_FindObjectsFromNickname(char *nickname, 1.122 + PK11SlotInfo **slotptr, CK_OBJECT_CLASS objclass, int *returnCount, 1.123 + void *wincx); 1.124 +CK_OBJECT_HANDLE PK11_MatchItem(PK11SlotInfo *slot,CK_OBJECT_HANDLE peer, 1.125 + CK_OBJECT_CLASS o_class); 1.126 +CK_BBOOL PK11_HasAttributeSet( PK11SlotInfo *slot, 1.127 + CK_OBJECT_HANDLE id, 1.128 + CK_ATTRIBUTE_TYPE type, 1.129 + PRBool haslock ); 1.130 +CK_RV PK11_GetAttributes(PLArenaPool *arena,PK11SlotInfo *slot, 1.131 + CK_OBJECT_HANDLE obj,CK_ATTRIBUTE *attr, int count); 1.132 +int PK11_NumberCertsForCertSubject(CERTCertificate *cert); 1.133 +SECStatus PK11_TraverseCertsForSubject(CERTCertificate *cert, 1.134 + SECStatus(*callback)(CERTCertificate *, void *), void *arg); 1.135 +SECStatus PK11_GetKEAMatchedCerts(PK11SlotInfo *slot1, 1.136 + PK11SlotInfo *slot2, CERTCertificate **cert1, CERTCertificate **cert2); 1.137 +SECStatus PK11_TraverseCertsInSlot(PK11SlotInfo *slot, 1.138 + SECStatus(* callback)(CERTCertificate*, void *), void *arg); 1.139 +SECStatus PK11_LookupCrls(CERTCrlHeadNode *nodes, int type, void *wincx); 1.140 + 1.141 + 1.142 +/********************************************************************** 1.143 + * Crypto Contexts 1.144 + **********************************************************************/ 1.145 +PK11Context * PK11_CreateContextByRawKey(PK11SlotInfo *slot, 1.146 + CK_MECHANISM_TYPE type, PK11Origin origin, CK_ATTRIBUTE_TYPE operation, 1.147 + SECItem *key, SECItem *param, void *wincx); 1.148 +PRBool PK11_HashOK(SECOidTag hashAlg); 1.149 + 1.150 + 1.151 +/********************************************************************** 1.152 + * Functions which are deprecated.... 1.153 + **********************************************************************/ 1.154 + 1.155 +SECItem * 1.156 +PK11_FindCrlByName(PK11SlotInfo **slot, CK_OBJECT_HANDLE *handle, 1.157 + SECItem *derName, int type, char **url); 1.158 + 1.159 +CK_OBJECT_HANDLE 1.160 +PK11_PutCrl(PK11SlotInfo *slot, SECItem *crl, 1.161 + SECItem *name, char *url, int type); 1.162 + 1.163 +SECItem * 1.164 +PK11_FindSMimeProfile(PK11SlotInfo **slotp, char *emailAddr, SECItem *derSubj, 1.165 + SECItem **profileTime); 1.166 +SECStatus 1.167 +PK11_SaveSMimeProfile(PK11SlotInfo *slot, char *emailAddr, SECItem *derSubj, 1.168 + SECItem *emailProfile, SECItem *profileTime); 1.169 + 1.170 +PRBool PK11_IsPermObject(PK11SlotInfo *slot, CK_OBJECT_HANDLE handle); 1.171 + 1.172 +char * PK11_GetObjectNickname(PK11SlotInfo *slot, CK_OBJECT_HANDLE id) ; 1.173 +SECStatus PK11_SetObjectNickname(PK11SlotInfo *slot, CK_OBJECT_HANDLE id, 1.174 + const char *nickname) ; 1.175 + 1.176 + 1.177 +/* private */ 1.178 +SECStatus pk11_TraverseAllSlots( SECStatus (*callback)(PK11SlotInfo *,void *), 1.179 + void *cbArg, PRBool forceLogin, void *pwArg); 1.180 + 1.181 +/* fetch multiple CRLs for a specific issuer */ 1.182 +SECStatus pk11_RetrieveCrls(CERTCrlHeadNode *nodes, SECItem* issuer, 1.183 + void *wincx); 1.184 + 1.185 +/* set global options for NSS PKCS#11 module loader */ 1.186 +SECStatus pk11_setGlobalOptions(PRBool noSingleThreadedModules, 1.187 + PRBool allowAlreadyInitializedModules, 1.188 + PRBool dontFinalizeModules); 1.189 + 1.190 +/* return whether NSS is allowed to call C_Finalize */ 1.191 +PRBool pk11_getFinalizeModulesOption(void); 1.192 + 1.193 +SEC_END_PROTOS 1.194 + 1.195 +#endif