comparison nss/lib/softoken/softoken.h @ 0:1e5118fa0cb1

This is NSS with a Cmake Buildsyste To compile a static NSS library for Windows we've used the Chromium-NSS fork and added a Cmake buildsystem to compile it statically for Windows. See README.chromium for chromium changes and README.trustbridge for our modifications.
author Andre Heinecke <andre.heinecke@intevation.de>
date Mon, 28 Jul 2014 10:47:06 +0200
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:1e5118fa0cb1
1 /*
2 * softoken.h - private data structures and prototypes for the softoken lib
3 *
4 * This Source Code Form is subject to the terms of the Mozilla Public
5 * License, v. 2.0. If a copy of the MPL was not distributed with this
6 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7
8 #ifndef _SOFTOKEN_H_
9 #define _SOFTOKEN_H_
10
11 #include "blapi.h"
12 #include "lowkeyti.h"
13 #include "softoknt.h"
14 #include "secoidt.h"
15
16 #include "pkcs11t.h"
17
18 SEC_BEGIN_PROTOS
19
20 /*
21 * Convenience wrapper for doing a single PKCS#1 v1.5 RSA operations where the
22 * encoded digest info is computed internally, rather than by the caller.
23 *
24 * The HashSign variants expect as input the value of H, the computed hash
25 * from RFC 3447, Section 9.2, Step 1, and will compute the DER-encoded
26 * DigestInfo structure internally prior to signing/verifying.
27 */
28 extern SECStatus
29 RSA_HashSign(SECOidTag hashOid, NSSLOWKEYPrivateKey *key,
30 unsigned char *sig, unsigned int *sigLen, unsigned int maxLen,
31 const unsigned char *hash, unsigned int hashLen);
32
33 extern SECStatus
34 RSA_HashCheckSign(SECOidTag hashOid, NSSLOWKEYPublicKey *key,
35 const unsigned char *sig, unsigned int sigLen,
36 const unsigned char *hash, unsigned int hashLen);
37
38 /*
39 ** Prepare a buffer for padded CBC encryption, growing to the appropriate
40 ** boundary, filling with the appropriate padding.
41 **
42 ** blockSize must be a power of 2.
43 **
44 ** We add from 1 to blockSize bytes -- we *always* grow.
45 ** The extra bytes contain the value of the length of the padding:
46 ** if we have 2 bytes of padding, then the padding is "0x02, 0x02".
47 **
48 ** NOTE: If arena is non-NULL, we re-allocate from there, otherwise
49 ** we assume (and use) PR memory (re)allocation.
50 */
51 extern unsigned char * CBC_PadBuffer(PLArenaPool *arena, unsigned char *inbuf,
52 unsigned int inlen, unsigned int *outlen,
53 int blockSize);
54
55
56 /****************************************/
57 /*
58 ** Power-Up selftests required for FIPS and invoked only
59 ** under PKCS #11 FIPS mode.
60 */
61 extern CK_RV sftk_fipsPowerUpSelfTest( void );
62
63 /*
64 ** make known fixed PKCS #11 key types to their sizes in bytes
65 */
66 unsigned long sftk_MapKeySize(CK_KEY_TYPE keyType);
67
68 /*
69 ** FIPS 140-2 auditing
70 */
71 extern PRBool sftk_audit_enabled;
72
73 extern void sftk_LogAuditMessage(NSSAuditSeverity severity,
74 NSSAuditType, const char *msg);
75
76 extern void sftk_AuditCreateObject(CK_SESSION_HANDLE hSession,
77 CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount,
78 CK_OBJECT_HANDLE_PTR phObject, CK_RV rv);
79
80 extern void sftk_AuditCopyObject(CK_SESSION_HANDLE hSession,
81 CK_OBJECT_HANDLE hObject,
82 CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount,
83 CK_OBJECT_HANDLE_PTR phNewObject, CK_RV rv);
84
85 extern void sftk_AuditDestroyObject(CK_SESSION_HANDLE hSession,
86 CK_OBJECT_HANDLE hObject, CK_RV rv);
87
88 extern void sftk_AuditGetObjectSize(CK_SESSION_HANDLE hSession,
89 CK_OBJECT_HANDLE hObject, CK_ULONG_PTR pulSize,
90 CK_RV rv);
91
92 extern void sftk_AuditGetAttributeValue(CK_SESSION_HANDLE hSession,
93 CK_OBJECT_HANDLE hObject, CK_ATTRIBUTE_PTR pTemplate,
94 CK_ULONG ulCount, CK_RV rv);
95
96 extern void sftk_AuditSetAttributeValue(CK_SESSION_HANDLE hSession,
97 CK_OBJECT_HANDLE hObject, CK_ATTRIBUTE_PTR pTemplate,
98 CK_ULONG ulCount, CK_RV rv);
99
100 extern void sftk_AuditCryptInit(const char *opName,
101 CK_SESSION_HANDLE hSession,
102 CK_MECHANISM_PTR pMechanism,
103 CK_OBJECT_HANDLE hKey, CK_RV rv);
104
105 extern void sftk_AuditGenerateKey(CK_SESSION_HANDLE hSession,
106 CK_MECHANISM_PTR pMechanism,
107 CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount,
108 CK_OBJECT_HANDLE_PTR phKey, CK_RV rv);
109
110 extern void sftk_AuditGenerateKeyPair(CK_SESSION_HANDLE hSession,
111 CK_MECHANISM_PTR pMechanism,
112 CK_ATTRIBUTE_PTR pPublicKeyTemplate,
113 CK_ULONG ulPublicKeyAttributeCount,
114 CK_ATTRIBUTE_PTR pPrivateKeyTemplate,
115 CK_ULONG ulPrivateKeyAttributeCount,
116 CK_OBJECT_HANDLE_PTR phPublicKey,
117 CK_OBJECT_HANDLE_PTR phPrivateKey, CK_RV rv);
118
119 extern void sftk_AuditWrapKey(CK_SESSION_HANDLE hSession,
120 CK_MECHANISM_PTR pMechanism,
121 CK_OBJECT_HANDLE hWrappingKey, CK_OBJECT_HANDLE hKey,
122 CK_BYTE_PTR pWrappedKey,
123 CK_ULONG_PTR pulWrappedKeyLen, CK_RV rv);
124
125 extern void sftk_AuditUnwrapKey(CK_SESSION_HANDLE hSession,
126 CK_MECHANISM_PTR pMechanism,
127 CK_OBJECT_HANDLE hUnwrappingKey,
128 CK_BYTE_PTR pWrappedKey, CK_ULONG ulWrappedKeyLen,
129 CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulAttributeCount,
130 CK_OBJECT_HANDLE_PTR phKey, CK_RV rv);
131
132 extern void sftk_AuditDeriveKey(CK_SESSION_HANDLE hSession,
133 CK_MECHANISM_PTR pMechanism,
134 CK_OBJECT_HANDLE hBaseKey,
135 CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulAttributeCount,
136 CK_OBJECT_HANDLE_PTR phKey, CK_RV rv);
137
138 extern void sftk_AuditDigestKey(CK_SESSION_HANDLE hSession,
139 CK_OBJECT_HANDLE hKey, CK_RV rv);
140
141 /*
142 ** FIPS 140-2 Error state
143 */
144 extern PRBool sftk_fatalError;
145
146 /*
147 ** macros to check for forked child process after C_Initialize
148 */
149 #if defined(XP_UNIX) && !defined(NO_FORK_CHECK)
150
151 #ifdef DEBUG
152
153 #define FORK_ASSERT() \
154 { \
155 char* forkAssert = getenv("NSS_STRICT_NOFORK"); \
156 if ( (!forkAssert) || (0 == strcmp(forkAssert, "1")) ) { \
157 PORT_Assert(0); \
158 } \
159 }
160
161 #else
162
163 #define FORK_ASSERT()
164
165 #endif
166
167 /* we have 3 methods of implementing the fork checks :
168 * - Solaris "mixed" method
169 * - pthread_atfork method
170 * - getpid method
171 */
172
173 #if !defined (CHECK_FORK_MIXED) && !defined(CHECK_FORK_PTHREAD) && \
174 !defined (CHECK_FORK_GETPID)
175
176 /* Choose fork check method automatically unless specified
177 * This section should be updated as more platforms get pthread fixes
178 * to unregister fork handlers in dlclose.
179 */
180
181 #ifdef SOLARIS
182
183 /* Solaris 8, s9 use PID checks, s10 uses pthread_atfork */
184
185 #define CHECK_FORK_MIXED
186
187 #elif defined(LINUX)
188
189 #define CHECK_FORK_PTHREAD
190
191 #else
192
193 /* Other Unix platforms use only PID checks. Even if pthread_atfork is
194 * available, the behavior of dlclose isn't guaranteed by POSIX to
195 * unregister the fork handler. */
196
197 #define CHECK_FORK_GETPID
198
199 #endif
200
201 #endif
202
203 #if defined(CHECK_FORK_MIXED)
204
205 extern PRBool usePthread_atfork;
206 #include <unistd.h>
207 extern pid_t myPid;
208 extern PRBool forked;
209
210 #define PARENT_FORKED() (usePthread_atfork ? forked : (myPid && myPid != getpid()))
211
212 #elif defined(CHECK_FORK_PTHREAD)
213
214 extern PRBool forked;
215
216 #define PARENT_FORKED() forked
217
218 #elif defined(CHECK_FORK_GETPID)
219
220 #include <unistd.h>
221 extern pid_t myPid;
222
223 #define PARENT_FORKED() (myPid && myPid != getpid())
224
225 #endif
226
227 extern PRBool parentForkedAfterC_Initialize;
228 extern PRBool sftkForkCheckDisabled;
229
230 #define CHECK_FORK() \
231 do { \
232 if (!sftkForkCheckDisabled && PARENT_FORKED()) { \
233 FORK_ASSERT(); \
234 return CKR_DEVICE_ERROR; \
235 } \
236 } while (0)
237
238 #define SKIP_AFTER_FORK(x) if (!parentForkedAfterC_Initialize) x
239
240 #define ENABLE_FORK_CHECK() \
241 { \
242 char* doForkCheck = getenv("NSS_STRICT_NOFORK"); \
243 if ( doForkCheck && !strcmp(doForkCheck, "DISABLED") ) { \
244 sftkForkCheckDisabled = PR_TRUE; \
245 } \
246 }
247
248
249 #else
250
251 /* non-Unix platforms, or fork check disabled */
252
253 #define CHECK_FORK()
254 #define SKIP_AFTER_FORK(x) x
255 #define ENABLE_FORK_CHECK()
256
257 #ifndef NO_FORK_CHECK
258 #define NO_FORK_CHECK
259 #endif
260
261 #endif
262
263
264 SEC_END_PROTOS
265
266 #endif /* _SOFTOKEN_H_ */
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)