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 #ifndef UTILPARS_T_H
5 #define UTILPARS_T_H 1
6 #include "pkcs11t.h"
7 
8 /*
9  * macros to handle parsing strings of blank sparated arguments.
10  * Several NSSUTIL_HANDLE_STRING() macros should be places one after another with no intervening
11  * code. The first ones have precedence over the later ones. The last Macro should be
12  * NSSUTIL_HANDLE_FINAL_ARG.
13  *
14  *  param is the input parameters. On exit param will point to the next parameter to parse. If the
15  *      last paramter has been returned, param points to a null byte (*param = '0');
16  *  target is the location to store any data aquired from the parameter. Caller is responsible to free this data.
17  *  value is the string value of the parameter.
18  *  command is any commands you need to run to help process the parameter's data.
19  */
20 #define NSSUTIL_HANDLE_STRING_ARG(param, target, value, command)  \
21     if (PORT_Strncasecmp(param, value, sizeof(value) - 1) == 0) { \
22         param += sizeof(value) - 1;                               \
23         if (target)                                               \
24             PORT_Free(target);                                    \
25         target = NSSUTIL_ArgFetchValue(param, &next);             \
26         param += next;                                            \
27         command;                                                  \
28     } else
29 
30 #define NSSUTIL_HANDLE_FINAL_ARG(param)          \
31     {                                            \
32         param = NSSUTIL_ArgSkipParameter(param); \
33     }                                            \
34     param = NSSUTIL_ArgStrip(param);
35 
36 #define NSSUTIL_PATH_SEPARATOR "/"
37 
38 /* default module configuration strings */
39 #define NSSUTIL_DEFAULT_INTERNAL_INIT1 \
40     "library= name=\"NSS Internal PKCS #11 Module\" parameters="
41 #define NSSUTIL_DEFAULT_INTERNAL_INIT2 \
42     " NSS=\"Flags=internal,critical trustOrder=75 cipherOrder=100 slotParams=(1={"
43 #define NSSUTIL_DEFAULT_INTERNAL_INIT3 \
44     " askpw=any timeout=30})\""
45 #define NSSUTIL_DEFAULT_SFTKN_FLAGS \
46     "slotFlags=[ECC,RSA,DSA,DH,RC2,RC4,DES,RANDOM,SHA1,MD5,MD2,SSL,TLS,AES,Camellia,SEED,SHA256,SHA512]"
47 
48 #define NSSUTIL_DEFAULT_CIPHER_ORDER 0
49 #define NSSUTIL_DEFAULT_TRUST_ORDER 50
50 #define NSSUTIL_ARG_ESCAPE '\\'
51 
52 /* hold slot default flags until we initialize a slot. This structure is only
53  * useful between the time we define a module (either by hand or from the
54  * database) and the time the module is loaded. Not reference counted  */
55 struct NSSUTILPreSlotInfoStr {
56     CK_SLOT_ID slotID;          /* slot these flags are for */
57     unsigned long defaultFlags; /* bit mask of default implementation this slot
58                                  * provides */
59     int askpw;                  /* slot specific password bits */
60     long timeout;               /* slot specific timeout value */
61     char hasRootCerts;          /* is this the root cert PKCS #11 module? */
62     char hasRootTrust;          /* is this the root cert PKCS #11 module? */
63     int reserved0[2];
64     void *reserved1[2];
65 };
66 
67 /*
68  * private functions for softoken.
69  */
70 typedef enum {
71     NSS_DB_TYPE_NONE = 0,
72     NSS_DB_TYPE_SQL,
73     NSS_DB_TYPE_EXTERN,
74     NSS_DB_TYPE_LEGACY,
75     NSS_DB_TYPE_MULTIACCESS
76 } NSSDBType;
77 
78 #endif /* UTILPARS_T_H */
79