~ubuntu-branches/ubuntu/quantal/nss/quantal-updates

« back to all changes in this revision

Viewing changes to mozilla/security/nss/lib/softoken/fipsaudt.c

  • Committer: Package Import Robot
  • Author(s): Marc Deslauriers
  • Date: 2013-11-14 14:58:07 UTC
  • mfrom: (1.1.19)
  • Revision ID: package-import@ubuntu.com-20131114145807-vj6v4erz8xj6kwz3
Tags: 3.15.3-0ubuntu0.12.10.1
* SECURITY UPDATE: New upstream release to fix multiple security issues
  and add TLSv1.2 support.
  - CVE-2013-1739
  - CVE-2013-1741
  - CVE-2013-5605
  - CVE-2013-5606
* Adjusted packaging for 3.15.3:
  - debian/patches/*: refreshed.
  - debian/patches/lower-dhe-priority.patch: removed, no longer needed,
    was a workaround for an old version of firefox.
  - debian/libnss3.symbols: added new symbols.
  - debian/rules: updated for new source layout.

Show diffs side-by-side

added added

removed removed

Lines of Context:
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
 
/*
6
 
 * This file implements audit logging required by FIPS 140-2 Security
7
 
 * Level 2.
8
 
 */
9
 
 
10
 
#include "prprf.h"
11
 
#include "softoken.h"
12
 
 
13
 
/*
14
 
 * Print the value of the returned object handle in the output buffer
15
 
 * on a successful return of the PKCS #11 function.  If the PKCS #11
16
 
 * function failed or the pointer to object handle is NULL (which is
17
 
 * the case for C_DeriveKey with CKM_TLS_KEY_AND_MAC_DERIVE), an empty
18
 
 * string is stored in the output buffer.
19
 
 *
20
 
 * out: the output buffer
21
 
 * outlen: the length of the output buffer
22
 
 * argName: the name of the "pointer to object handle" argument
23
 
 * phObject: the pointer to object handle
24
 
 * rv: the return value of the PKCS #11 function
25
 
 */
26
 
static void sftk_PrintReturnedObjectHandle(char *out, PRUint32 outlen,
27
 
    const char *argName, CK_OBJECT_HANDLE_PTR phObject, CK_RV rv)
28
 
{
29
 
    if ((rv == CKR_OK) && phObject) {
30
 
        PR_snprintf(out, outlen,
31
 
            " *%s=0x%08lX", argName, (PRUint32)*phObject);
32
 
    } else {
33
 
        PORT_Assert(outlen != 0);
34
 
        out[0] = '\0';
35
 
    }
36
 
}
37
 
 
38
 
/*
39
 
 * MECHANISM_BUFSIZE needs to be large enough for sftk_PrintMechanism,
40
 
 * which uses <= 49 bytes.
41
 
 */
42
 
#define MECHANISM_BUFSIZE 64
43
 
 
44
 
static void sftk_PrintMechanism(char *out, PRUint32 outlen,
45
 
    CK_MECHANISM_PTR pMechanism)
46
 
{
47
 
    if (pMechanism) {
48
 
        /*
49
 
         * If we change the format string, we need to make sure
50
 
         * MECHANISM_BUFSIZE is still large enough.  We allow
51
 
         * 20 bytes for %p on a 64-bit platform.
52
 
         */
53
 
        PR_snprintf(out, outlen, "%p {mechanism=0x%08lX, ...}",
54
 
            pMechanism, (PRUint32)pMechanism->mechanism);
55
 
    } else {
56
 
        PR_snprintf(out, outlen, "%p", pMechanism);
57
 
    }
58
 
}
59
 
 
60
 
void sftk_AuditCreateObject(CK_SESSION_HANDLE hSession,
61
 
    CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount,
62
 
    CK_OBJECT_HANDLE_PTR phObject, CK_RV rv)
63
 
{
64
 
    char msg[256];
65
 
    char shObject[32];
66
 
    NSSAuditSeverity severity = (rv == CKR_OK) ?
67
 
        NSS_AUDIT_INFO : NSS_AUDIT_ERROR;
68
 
 
69
 
    sftk_PrintReturnedObjectHandle(shObject, sizeof shObject,
70
 
        "phObject", phObject, rv);
71
 
    PR_snprintf(msg, sizeof msg,
72
 
        "C_CreateObject(hSession=0x%08lX, pTemplate=%p, ulCount=%lu, "
73
 
        "phObject=%p)=0x%08lX%s",
74
 
        (PRUint32)hSession, pTemplate, (PRUint32)ulCount,
75
 
        phObject, (PRUint32)rv, shObject);
76
 
    sftk_LogAuditMessage(severity, NSS_AUDIT_LOAD_KEY, msg);
77
 
}
78
 
 
79
 
void sftk_AuditCopyObject(CK_SESSION_HANDLE hSession,
80
 
    CK_OBJECT_HANDLE hObject, CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount,
81
 
    CK_OBJECT_HANDLE_PTR phNewObject, CK_RV rv)
82
 
{
83
 
    char msg[256];
84
 
    char shNewObject[32];
85
 
    NSSAuditSeverity severity = (rv == CKR_OK) ?
86
 
        NSS_AUDIT_INFO : NSS_AUDIT_ERROR;
87
 
 
88
 
    sftk_PrintReturnedObjectHandle(shNewObject, sizeof shNewObject,
89
 
        "phNewObject", phNewObject, rv);
90
 
    PR_snprintf(msg, sizeof msg,
91
 
        "C_CopyObject(hSession=0x%08lX, hObject=0x%08lX, "
92
 
        "pTemplate=%p, ulCount=%lu, phNewObject=%p)=0x%08lX%s",
93
 
        (PRUint32)hSession, (PRUint32)hObject,
94
 
        pTemplate, (PRUint32)ulCount, phNewObject, (PRUint32)rv, shNewObject);
95
 
    sftk_LogAuditMessage(severity, NSS_AUDIT_COPY_KEY, msg);
96
 
}
97
 
 
98
 
/* WARNING: hObject has been destroyed and can only be printed. */
99
 
void sftk_AuditDestroyObject(CK_SESSION_HANDLE hSession,
100
 
    CK_OBJECT_HANDLE hObject, CK_RV rv)
101
 
{
102
 
    char msg[256];
103
 
    NSSAuditSeverity severity = (rv == CKR_OK) ?
104
 
        NSS_AUDIT_INFO : NSS_AUDIT_ERROR;
105
 
 
106
 
    PR_snprintf(msg, sizeof msg,
107
 
        "C_DestroyObject(hSession=0x%08lX, hObject=0x%08lX)=0x%08lX",
108
 
        (PRUint32)hSession, (PRUint32)hObject, (PRUint32)rv);
109
 
    sftk_LogAuditMessage(severity, NSS_AUDIT_DESTROY_KEY, msg);
110
 
}
111
 
 
112
 
void sftk_AuditGetObjectSize(CK_SESSION_HANDLE hSession,
113
 
    CK_OBJECT_HANDLE hObject, CK_ULONG_PTR pulSize, CK_RV rv)
114
 
{
115
 
    char msg[256];
116
 
    NSSAuditSeverity severity = (rv == CKR_OK) ?
117
 
        NSS_AUDIT_INFO : NSS_AUDIT_ERROR;
118
 
 
119
 
    PR_snprintf(msg, sizeof msg,
120
 
        "C_GetObjectSize(hSession=0x%08lX, hObject=0x%08lX, "
121
 
        "pulSize=%p)=0x%08lX",
122
 
        (PRUint32)hSession, (PRUint32)hObject,
123
 
        pulSize, (PRUint32)rv);
124
 
    sftk_LogAuditMessage(severity, NSS_AUDIT_ACCESS_KEY, msg);
125
 
}
126
 
 
127
 
void sftk_AuditGetAttributeValue(CK_SESSION_HANDLE hSession,
128
 
    CK_OBJECT_HANDLE hObject, CK_ATTRIBUTE_PTR pTemplate,
129
 
    CK_ULONG ulCount, CK_RV rv)
130
 
{
131
 
    char msg[256];
132
 
    NSSAuditSeverity severity = (rv == CKR_OK) ?
133
 
        NSS_AUDIT_INFO : NSS_AUDIT_ERROR;
134
 
 
135
 
    PR_snprintf(msg, sizeof msg,
136
 
        "C_GetAttributeValue(hSession=0x%08lX, hObject=0x%08lX, "
137
 
        "pTemplate=%p, ulCount=%lu)=0x%08lX",
138
 
        (PRUint32)hSession, (PRUint32)hObject,
139
 
        pTemplate, (PRUint32)ulCount, (PRUint32)rv);
140
 
    sftk_LogAuditMessage(severity, NSS_AUDIT_ACCESS_KEY, msg);
141
 
}
142
 
 
143
 
void sftk_AuditSetAttributeValue(CK_SESSION_HANDLE hSession,
144
 
    CK_OBJECT_HANDLE hObject, CK_ATTRIBUTE_PTR pTemplate,
145
 
    CK_ULONG ulCount, CK_RV rv)
146
 
{
147
 
    char msg[256];
148
 
    NSSAuditSeverity severity = (rv == CKR_OK) ?
149
 
        NSS_AUDIT_INFO : NSS_AUDIT_ERROR;
150
 
 
151
 
    PR_snprintf(msg, sizeof msg,
152
 
        "C_SetAttributeValue(hSession=0x%08lX, hObject=0x%08lX, "
153
 
        "pTemplate=%p, ulCount=%lu)=0x%08lX",
154
 
        (PRUint32)hSession, (PRUint32)hObject,
155
 
        pTemplate, (PRUint32)ulCount, (PRUint32)rv);
156
 
    sftk_LogAuditMessage(severity, NSS_AUDIT_CHANGE_KEY, msg);
157
 
}
158
 
 
159
 
void sftk_AuditCryptInit(const char *opName, CK_SESSION_HANDLE hSession,
160
 
    CK_MECHANISM_PTR pMechanism, CK_OBJECT_HANDLE hKey, CK_RV rv)
161
 
{
162
 
    char msg[256];
163
 
    char mech[MECHANISM_BUFSIZE];
164
 
    NSSAuditSeverity severity = (rv == CKR_OK) ?
165
 
        NSS_AUDIT_INFO : NSS_AUDIT_ERROR;
166
 
 
167
 
    sftk_PrintMechanism(mech, sizeof mech, pMechanism);
168
 
    PR_snprintf(msg, sizeof msg,
169
 
        "C_%sInit(hSession=0x%08lX, pMechanism=%s, "
170
 
        "hKey=0x%08lX)=0x%08lX",
171
 
        opName, (PRUint32)hSession, mech,
172
 
        (PRUint32)hKey, (PRUint32)rv);
173
 
    sftk_LogAuditMessage(severity, NSS_AUDIT_CRYPT, msg);
174
 
}
175
 
 
176
 
void sftk_AuditGenerateKey(CK_SESSION_HANDLE hSession,
177
 
    CK_MECHANISM_PTR pMechanism, CK_ATTRIBUTE_PTR pTemplate,
178
 
    CK_ULONG ulCount, CK_OBJECT_HANDLE_PTR phKey, CK_RV rv)
179
 
{
180
 
    char msg[256];
181
 
    char mech[MECHANISM_BUFSIZE];
182
 
    char shKey[32];
183
 
    NSSAuditSeverity severity = (rv == CKR_OK) ?
184
 
        NSS_AUDIT_INFO : NSS_AUDIT_ERROR;
185
 
 
186
 
    sftk_PrintMechanism(mech, sizeof mech, pMechanism);
187
 
    sftk_PrintReturnedObjectHandle(shKey, sizeof shKey, "phKey", phKey, rv);
188
 
    PR_snprintf(msg, sizeof msg,
189
 
        "C_GenerateKey(hSession=0x%08lX, pMechanism=%s, "
190
 
        "pTemplate=%p, ulCount=%lu, phKey=%p)=0x%08lX%s",
191
 
        (PRUint32)hSession, mech,
192
 
        pTemplate, (PRUint32)ulCount, phKey, (PRUint32)rv, shKey);
193
 
    sftk_LogAuditMessage(severity, NSS_AUDIT_GENERATE_KEY, msg);
194
 
}
195
 
 
196
 
void sftk_AuditGenerateKeyPair(CK_SESSION_HANDLE hSession,
197
 
    CK_MECHANISM_PTR pMechanism, CK_ATTRIBUTE_PTR pPublicKeyTemplate,
198
 
    CK_ULONG ulPublicKeyAttributeCount, CK_ATTRIBUTE_PTR pPrivateKeyTemplate,
199
 
    CK_ULONG ulPrivateKeyAttributeCount, CK_OBJECT_HANDLE_PTR phPublicKey,
200
 
    CK_OBJECT_HANDLE_PTR phPrivateKey, CK_RV rv)
201
 
{
202
 
    char msg[512];
203
 
    char mech[MECHANISM_BUFSIZE];
204
 
    char shPublicKey[32];
205
 
    char shPrivateKey[32];
206
 
    NSSAuditSeverity severity = (rv == CKR_OK) ?
207
 
        NSS_AUDIT_INFO : NSS_AUDIT_ERROR;
208
 
 
209
 
    sftk_PrintMechanism(mech, sizeof mech, pMechanism);
210
 
    sftk_PrintReturnedObjectHandle(shPublicKey, sizeof shPublicKey,
211
 
        "phPublicKey", phPublicKey, rv);
212
 
    sftk_PrintReturnedObjectHandle(shPrivateKey, sizeof shPrivateKey,
213
 
        "phPrivateKey", phPrivateKey, rv);
214
 
    PR_snprintf(msg, sizeof msg,
215
 
        "C_GenerateKeyPair(hSession=0x%08lX, pMechanism=%s, "
216
 
        "pPublicKeyTemplate=%p, ulPublicKeyAttributeCount=%lu, "
217
 
        "pPrivateKeyTemplate=%p, ulPrivateKeyAttributeCount=%lu, "
218
 
        "phPublicKey=%p, phPrivateKey=%p)=0x%08lX%s%s",
219
 
        (PRUint32)hSession, mech,
220
 
        pPublicKeyTemplate, (PRUint32)ulPublicKeyAttributeCount,
221
 
        pPrivateKeyTemplate, (PRUint32)ulPrivateKeyAttributeCount,
222
 
        phPublicKey, phPrivateKey, (PRUint32)rv, shPublicKey, shPrivateKey);
223
 
    sftk_LogAuditMessage(severity, NSS_AUDIT_GENERATE_KEY, msg);
224
 
}
225
 
 
226
 
void sftk_AuditWrapKey(CK_SESSION_HANDLE hSession,
227
 
    CK_MECHANISM_PTR pMechanism, CK_OBJECT_HANDLE hWrappingKey,
228
 
    CK_OBJECT_HANDLE hKey, CK_BYTE_PTR pWrappedKey,
229
 
    CK_ULONG_PTR pulWrappedKeyLen, CK_RV rv)
230
 
{
231
 
    char msg[256];
232
 
    char mech[MECHANISM_BUFSIZE];
233
 
    NSSAuditSeverity severity = (rv == CKR_OK) ?
234
 
        NSS_AUDIT_INFO : NSS_AUDIT_ERROR;
235
 
 
236
 
    sftk_PrintMechanism(mech, sizeof mech, pMechanism);
237
 
    PR_snprintf(msg, sizeof msg,
238
 
        "C_WrapKey(hSession=0x%08lX, pMechanism=%s, hWrappingKey=0x%08lX, "
239
 
        "hKey=0x%08lX, pWrappedKey=%p, pulWrappedKeyLen=%p)=0x%08lX",
240
 
        (PRUint32)hSession, mech, (PRUint32)hWrappingKey,
241
 
        (PRUint32)hKey, pWrappedKey, pulWrappedKeyLen, (PRUint32)rv);
242
 
    sftk_LogAuditMessage(severity, NSS_AUDIT_WRAP_KEY, msg);
243
 
}
244
 
 
245
 
void sftk_AuditUnwrapKey(CK_SESSION_HANDLE hSession,
246
 
    CK_MECHANISM_PTR pMechanism, CK_OBJECT_HANDLE hUnwrappingKey,
247
 
    CK_BYTE_PTR pWrappedKey, CK_ULONG ulWrappedKeyLen,
248
 
    CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulAttributeCount,
249
 
    CK_OBJECT_HANDLE_PTR phKey, CK_RV rv)
250
 
{
251
 
    char msg[256];
252
 
    char mech[MECHANISM_BUFSIZE];
253
 
    char shKey[32];
254
 
    NSSAuditSeverity severity = (rv == CKR_OK) ?
255
 
        NSS_AUDIT_INFO : NSS_AUDIT_ERROR;
256
 
 
257
 
    sftk_PrintMechanism(mech, sizeof mech, pMechanism);
258
 
    sftk_PrintReturnedObjectHandle(shKey, sizeof shKey, "phKey", phKey, rv);
259
 
    PR_snprintf(msg, sizeof msg,
260
 
        "C_UnwrapKey(hSession=0x%08lX, pMechanism=%s, "
261
 
        "hUnwrappingKey=0x%08lX, pWrappedKey=%p, ulWrappedKeyLen=%lu, "
262
 
        "pTemplate=%p, ulAttributeCount=%lu, phKey=%p)=0x%08lX%s",
263
 
        (PRUint32)hSession, mech,
264
 
        (PRUint32)hUnwrappingKey, pWrappedKey, (PRUint32)ulWrappedKeyLen,
265
 
        pTemplate, (PRUint32)ulAttributeCount, phKey, (PRUint32)rv, shKey);
266
 
    sftk_LogAuditMessage(severity, NSS_AUDIT_UNWRAP_KEY, msg);
267
 
}
268
 
 
269
 
void sftk_AuditDeriveKey(CK_SESSION_HANDLE hSession,
270
 
    CK_MECHANISM_PTR pMechanism, CK_OBJECT_HANDLE hBaseKey,
271
 
    CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulAttributeCount,
272
 
    CK_OBJECT_HANDLE_PTR phKey, CK_RV rv)
273
 
{
274
 
    char msg[512];
275
 
    char mech[MECHANISM_BUFSIZE];
276
 
    char shKey[32];
277
 
    char sTlsKeys[128];
278
 
    NSSAuditSeverity severity = (rv == CKR_OK) ?
279
 
        NSS_AUDIT_INFO : NSS_AUDIT_ERROR;
280
 
 
281
 
    sftk_PrintMechanism(mech, sizeof mech, pMechanism);
282
 
    sftk_PrintReturnedObjectHandle(shKey, sizeof shKey, "phKey", phKey, rv);
283
 
    if ((rv == CKR_OK) &&
284
 
        (pMechanism->mechanism == CKM_TLS_KEY_AND_MAC_DERIVE)) {
285
 
        CK_SSL3_KEY_MAT_PARAMS *param =
286
 
            (CK_SSL3_KEY_MAT_PARAMS *)pMechanism->pParameter;
287
 
        CK_SSL3_KEY_MAT_OUT *keymat = param->pReturnedKeyMaterial;
288
 
        PR_snprintf(sTlsKeys, sizeof sTlsKeys,
289
 
            " hClientMacSecret=0x%08lX hServerMacSecret=0x%08lX"
290
 
            " hClientKey=0x%08lX hServerKey=0x%08lX",
291
 
            (PRUint32)keymat->hClientMacSecret,
292
 
            (PRUint32)keymat->hServerMacSecret,
293
 
            (PRUint32)keymat->hClientKey,
294
 
            (PRUint32)keymat->hServerKey);
295
 
    } else {
296
 
        sTlsKeys[0] = '\0';
297
 
    }
298
 
    PR_snprintf(msg, sizeof msg,
299
 
        "C_DeriveKey(hSession=0x%08lX, pMechanism=%s, "
300
 
        "hBaseKey=0x%08lX, pTemplate=%p, ulAttributeCount=%lu, "
301
 
        "phKey=%p)=0x%08lX%s%s",
302
 
        (PRUint32)hSession, mech,
303
 
        (PRUint32)hBaseKey, pTemplate,(PRUint32)ulAttributeCount,
304
 
        phKey, (PRUint32)rv, shKey, sTlsKeys);
305
 
    sftk_LogAuditMessage(severity, NSS_AUDIT_DERIVE_KEY, msg);
306
 
}
307
 
 
308
 
void sftk_AuditDigestKey(CK_SESSION_HANDLE hSession,
309
 
    CK_OBJECT_HANDLE hKey, CK_RV rv)
310
 
{
311
 
    char msg[256];
312
 
    NSSAuditSeverity severity = (rv == CKR_OK) ?
313
 
        NSS_AUDIT_INFO : NSS_AUDIT_ERROR;
314
 
 
315
 
    PR_snprintf(msg, sizeof msg,
316
 
        "C_DigestKey(hSession=0x%08lX, hKey=0x%08lX)=0x%08lX",
317
 
        (PRUint32)hSession, (PRUint32)hKey, (PRUint32)rv);
318
 
    sftk_LogAuditMessage(severity, NSS_AUDIT_DIGEST_KEY, msg);
319
 
}