security/nss/lib/softoken/legacydb/lgdb.h

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /* This Source Code Form is subject to the terms of the Mozilla Public
     2  * License, v. 2.0. If a copy of the MPL was not distributed with this
     3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     4 /*
     5  * Internal data structures and functions used by pkcs11.c
     6  */
     7 #ifndef _LGDB_H_
     8 #define _LGDB_H_ 1
    10 #include "nssilock.h"
    11 #include "seccomon.h"
    12 #include "secoidt.h"
    13 #include "lowkeyti.h"
    14 #include "pkcs11t.h"
    15 #include "sdb.h"
    16 #include "cdbhdl.h" 
    19 #define MULTIACCESS "multiaccess:"
    22 /* path stuff (was machine dependent) used by dbinit.c and pk11db.c */
    23 #define PATH_SEPARATOR "/"
    24 #define SECMOD_DB "secmod.db"
    25 #define CERT_DB_FMT "%scert%s.db"
    26 #define KEY_DB_FMT "%skey%s.db"
    28 SEC_BEGIN_PROTOS
    31 /* internal utility functions used by pkcs11.c */
    32 extern const CK_ATTRIBUTE *lg_FindAttribute(CK_ATTRIBUTE_TYPE type,
    33 			const CK_ATTRIBUTE *templ, CK_ULONG count);
    34 extern CK_RV lg_Attribute2SecItem(PLArenaPool *,CK_ATTRIBUTE_TYPE type,
    35 			const CK_ATTRIBUTE *templ, CK_ULONG count,
    36 			SECItem *item);
    37 extern CK_RV lg_Attribute2SSecItem(PLArenaPool *,CK_ATTRIBUTE_TYPE type,
    38 			const CK_ATTRIBUTE *templ, CK_ULONG count,
    39 			SECItem *item);
    40 extern CK_RV lg_PrivAttr2SecItem(PLArenaPool *,CK_ATTRIBUTE_TYPE type,
    41 			const CK_ATTRIBUTE *templ, CK_ULONG count,
    42 			SECItem *item, SDB *sdbpw);
    43 extern CK_RV lg_PrivAttr2SSecItem(PLArenaPool *,CK_ATTRIBUTE_TYPE type,
    44 			const CK_ATTRIBUTE *templ, CK_ULONG count,
    45 			SECItem *item, SDB *sdbpw);
    46 extern CK_RV lg_GetULongAttribute(CK_ATTRIBUTE_TYPE type,
    47 			const CK_ATTRIBUTE *templ, CK_ULONG count, 
    48 			CK_ULONG *out);
    49 extern PRBool lg_hasAttribute(CK_ATTRIBUTE_TYPE type,
    50 			const CK_ATTRIBUTE *templ, CK_ULONG count);
    51 extern PRBool lg_isTrue(CK_ATTRIBUTE_TYPE type,
    52 			const CK_ATTRIBUTE *templ, CK_ULONG count);
    53 extern PRBool lg_isSensitive(CK_ATTRIBUTE_TYPE type, CK_OBJECT_CLASS inClass);
    54 extern char *lg_getString(CK_ATTRIBUTE_TYPE type,
    55 			const CK_ATTRIBUTE *templ, CK_ULONG count);
    56 extern unsigned int lg_MapTrust(CK_TRUST trust, PRBool clientAuth);
    58 /* clear out all the existing object ID to database key mappings.
    59  * used to reinit a token */
    60 extern CK_RV lg_ClearTokenKeyHashTable(SDB *sdb);
    63 extern void lg_FreeSearch(SDBFind *search);
    65 NSSLOWCERTCertDBHandle *lg_getCertDB(SDB *sdb);
    66 NSSLOWKEYDBHandle *lg_getKeyDB(SDB *sdb);
    68 const char *lg_EvaluateConfigDir(const char *configdir, char **domain);
    71 /*
    72  * object handle modifiers
    73  */
    74 #define LG_TOKEN_MASK		0xc0000000L
    75 #define LG_TOKEN_TYPE_MASK	0x38000000L
    76 #define LG_TOKEN_TYPE_SHIFT	27
    77 /* keydb (high bit == 0) */
    78 #define LG_TOKEN_TYPE_PRIV	0x08000000L
    79 #define LG_TOKEN_TYPE_PUB	0x10000000L
    80 #define LG_TOKEN_TYPE_KEY	0x18000000L
    81 /* certdb (high bit == 1) */
    82 #define LG_TOKEN_TYPE_TRUST	0x20000000L
    83 #define LG_TOKEN_TYPE_CRL	0x28000000L
    84 #define LG_TOKEN_TYPE_SMIME	0x30000000L
    85 #define LG_TOKEN_TYPE_CERT	0x38000000L
    87 #define LG_TOKEN_KRL_HANDLE	(LG_TOKEN_TYPE_CRL|1)
    89 #define LG_SEARCH_BLOCK_SIZE   10
    90 #define LG_BUF_SPACE	  50
    91 #define LG_STRICT   PR_FALSE
    93 /*
    94  * token object utilities
    95  */
    96 void lg_addHandle(SDBFind *search, CK_OBJECT_HANDLE handle);
    97 PRBool lg_poisonHandle(SDB *sdb, SECItem *dbkey, CK_OBJECT_HANDLE handle);
    98 PRBool lg_tokenMatch(SDB *sdb, const SECItem *dbKey, CK_OBJECT_HANDLE class,
    99 				const CK_ATTRIBUTE *templ, CK_ULONG count);
   100 const SECItem *lg_lookupTokenKeyByHandle(SDB *sdb, CK_OBJECT_HANDLE handle);
   101 CK_OBJECT_HANDLE lg_mkHandle(SDB *sdb, SECItem *dbKey, CK_OBJECT_HANDLE class);
   102 SECStatus lg_deleteTokenKeyByHandle(SDB *sdb, CK_OBJECT_HANDLE handle);
   104 SECStatus lg_util_encrypt(PLArenaPool *arena, SDB *sdbpw, 
   105 			  SECItem *plainText, SECItem **cipherText);
   106 SECStatus lg_util_decrypt(SDB *sdbpw, 
   107 			  SECItem *cipherText, SECItem **plainText);
   108 PLHashTable *lg_GetHashTable(SDB *sdb);
   109 void lg_DBLock(SDB *sdb);
   110 void lg_DBUnlock(SDB *sdb);
   112 typedef void (*LGFreeFunc)(void *);
   115 /*
   116  * database functions
   117  */
   119 /* lg_FindObjectsInit initializes a search for token and session objects 
   120  * that match a template. */
   121 CK_RV lg_FindObjectsInit(SDB *sdb, const CK_ATTRIBUTE *pTemplate, 
   122 			 CK_ULONG ulCount, SDBFind **search);
   123 /* lg_FindObjects continues a search for token and session objects 
   124  * that match a template, obtaining additional object handles. */
   125 CK_RV lg_FindObjects(SDB *sdb, SDBFind *search, 
   126     CK_OBJECT_HANDLE *phObject,CK_ULONG ulMaxObjectCount,
   127     CK_ULONG *pulObjectCount);
   129 /* lg_FindObjectsFinal finishes a search for token and session objects. */
   130 CK_RV lg_FindObjectsFinal(SDB* lgdb, SDBFind *search);
   132 /* lg_CreateObject parses the template and create an object stored in the 
   133  * DB that reflects the object specified in the template.  */
   134 CK_RV lg_CreateObject(SDB *sdb, CK_OBJECT_HANDLE *handle,
   135 			const CK_ATTRIBUTE *templ, CK_ULONG count);
   137 CK_RV lg_GetAttributeValue(SDB *sdb, CK_OBJECT_HANDLE object_id, 
   138 				CK_ATTRIBUTE *template, CK_ULONG count);
   139 CK_RV lg_SetAttributeValue(SDB *sdb, CK_OBJECT_HANDLE object_id, 
   140 			const CK_ATTRIBUTE *template, CK_ULONG count);
   141 CK_RV lg_DestroyObject(SDB *sdb, CK_OBJECT_HANDLE object_id);
   143 CK_RV lg_Close(SDB *sdb);
   144 CK_RV lg_Reset(SDB *sdb);
   146 /*
   147  * The old database doesn't share and doesn't support
   148  * transactions.
   149  */
   150 CK_RV lg_Begin(SDB *sdb);
   151 CK_RV lg_Commit(SDB *sdb);
   152 CK_RV lg_Abort(SDB *sdb);
   153 CK_RV lg_GetMetaData(SDB *sdb, const char *id, SECItem *item1, SECItem *item2);
   154 CK_RV lg_PutMetaData(SDB *sdb, const char *id, 
   155 			const SECItem *item1, const SECItem *item2);
   157 SEC_END_PROTOS
   159 #ifndef XP_UNIX
   161 #define NO_FORK_CHECK
   163 #endif
   165 #ifndef NO_FORK_CHECK
   167 extern PRBool lg_parentForkedAfterC_Initialize;
   168 #define SKIP_AFTER_FORK(x) if (!lg_parentForkedAfterC_Initialize) x
   170 #else
   172 #define SKIP_AFTER_FORK(x) x
   174 #endif /* NO_FORK_CHECK */
   176 #endif /* _LGDB_H_ */

mercurial