Coverage Report

Created: 2023-08-07 06:59

/src/p11-kit/p11-kit/log.c
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright (c) 2007, Stefan Walter
3
 * Copyright (c) 2013, Red Hat Inc.
4
 *
5
 * All rights reserved.
6
 *
7
 * Redistribution and use in source and binary forms, with or without
8
 * modification, are permitted provided that the following conditions
9
 * are met:
10
 *
11
 *     * Redistributions of source code must retain the above
12
 *       copyright notice, this list of conditions and the
13
 *       following disclaimer.
14
 *     * Redistributions in binary form must reproduce the
15
 *       above copyright notice, this list of conditions and
16
 *       the following disclaimer in the documentation and/or
17
 *       other materials provided with the distribution.
18
 *     * The names of contributors to this software may not be
19
 *       used to endorse or promote products derived from this
20
 *       software without specific prior written permission.
21
 *
22
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25
 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
26
 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
27
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
28
 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
29
 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
30
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
31
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
32
 * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
33
 * DAMAGE.
34
 *
35
 *
36
 * CONTRIBUTORS
37
 *  Stef Walter <stef@memberwebs.com>
38
 */
39
40
#include "config.h"
41
42
#include "attrs.h"
43
#include "buffer.h"
44
#include "constants.h"
45
#include "debug.h"
46
#include "log.h"
47
#include "p11-kit.h"
48
#include "virtual.h"
49
50
#include <sys/types.h>
51
#include <stdlib.h>
52
#include <stdio.h>
53
#include <string.h>
54
#include <errno.h>
55
#include <stdarg.h>
56
57
bool p11_log_force = false;
58
bool p11_log_output = true;
59
60
typedef struct {
61
  p11_virtual virt;
62
  CK_X_FUNCTION_LIST *lower;
63
  p11_destroyer destroyer;
64
} LogData;
65
66
#define LOG_FLAG(buf, flags, had, flag) \
67
0
  if ((flags & flag) == flag) { \
68
0
    p11_buffer_add (buf, had ? " | " : " = ", 3); \
69
0
    p11_buffer_add (buf, #flag, -1); \
70
0
    had++; \
71
0
  }
72
73
static void
74
log_CKM (p11_buffer *buf,
75
         CK_MECHANISM_TYPE v)
76
0
{
77
0
  char temp[32];
78
0
  const char *string;
79
80
0
  string = p11_constant_name (p11_constant_mechanisms, v);
81
0
  if (string == NULL) {
82
0
    snprintf (temp, sizeof (temp), "CKM_0x%08lX", v);
83
0
    p11_buffer_add (buf, temp, -1);
84
0
  } else {
85
0
    p11_buffer_add (buf, string, -1);
86
0
  }
87
0
}
88
89
static void
90
log_CKS (p11_buffer *buf,
91
         CK_STATE v)
92
0
{
93
0
  char temp[32];
94
0
  const char *string;
95
96
0
  string = p11_constant_name (p11_constant_states, v);
97
0
  if (string == NULL) {
98
0
    snprintf (temp, sizeof (temp), "CKS_0x%08lX", v);
99
0
    p11_buffer_add (buf, temp, -1);
100
0
  } else {
101
0
    p11_buffer_add (buf, string, -1);
102
0
  }
103
0
}
104
105
static void
106
log_CKU (p11_buffer *buf,
107
         CK_USER_TYPE v)
108
0
{
109
0
  char temp[32];
110
0
  const char *string;
111
112
0
  string = p11_constant_name (p11_constant_users, v);
113
0
  if (string == NULL) {
114
0
    snprintf (temp, sizeof (temp), "CKU_0x%08lX", v);
115
0
    p11_buffer_add (buf, temp, -1);
116
0
  } else {
117
0
    p11_buffer_add (buf, string, -1);
118
0
  }
119
0
}
120
121
static void
122
log_CKR (p11_buffer *buf,
123
         CK_RV v)
124
0
{
125
0
  char temp[32];
126
0
  const char *string;
127
128
0
  string = p11_constant_name (p11_constant_returns, v);
129
0
  if (string == NULL) {
130
0
    snprintf (temp, sizeof (temp), "CKR_0x%08lX", v);
131
0
    p11_buffer_add (buf, temp, -1);
132
0
  } else {
133
0
    p11_buffer_add (buf, string, -1);
134
0
  }
135
0
}
136
137
static void
138
log_some_bytes (p11_buffer *buf,
139
                CK_BYTE_PTR arr,
140
                CK_ULONG num)
141
0
{
142
0
  CK_ULONG i;
143
0
  char temp[128];
144
0
  char *p, *e;
145
0
  CK_BYTE ch;
146
147
0
  if(!arr) {
148
0
    p11_buffer_add (buf, "NULL", 4);
149
0
    return;
150
0
  } else if (num == (CK_ULONG)-1) {
151
0
    p11_buffer_add (buf, "????", 4);
152
0
    return;
153
0
  }
154
155
0
  temp[0] = '\"';
156
0
  p = temp + 1;
157
0
  e = temp + (sizeof (temp) - 8);
158
159
0
  for(i = 0; i < num && p < e; ++i, ++p) {
160
0
    ch = arr[i];
161
0
    if (ch == '\t') {
162
0
      p[0] = '\\'; p[1] = 't';
163
0
      ++p;
164
0
    } else if (ch == '\n') {
165
0
      p[0] = '\\'; p[1] = 'n';
166
0
      ++p;
167
0
    } else if (ch == '\r') {
168
0
      p[0] = '\\'; p[1] = 'r';
169
0
      ++p;
170
0
    } else if (ch >= 32 && ch < 127) {
171
0
      *p = ch;
172
0
    } else {
173
0
      p[0] = '\\';
174
0
      p[1] = 'x';
175
0
      sprintf(p + 2, "%02X", ch);
176
0
      p += 3;
177
0
    }
178
0
  }
179
180
0
  *p = 0;
181
0
  if (p >= e)
182
0
    strcpy (e, "...");
183
0
  strcat (p, "\"");
184
0
  p11_buffer_add (buf, temp, -1);
185
0
}
186
187
static void
188
log_pointer (p11_buffer *buf,
189
             const char *pref,
190
             const char *name,
191
             CK_VOID_PTR val,
192
             CK_RV status)
193
0
{
194
0
  char temp[32];
195
196
0
  if (status != CKR_OK)
197
0
    return;
198
199
0
  p11_buffer_add (buf, pref, -1);
200
0
  p11_buffer_add (buf, name, -1);
201
0
  p11_buffer_add (buf, " = ", 3);
202
0
  if (val == NULL) {
203
0
    p11_buffer_add (buf, "NULL\n", 5);
204
0
  } else {
205
0
    snprintf (temp, sizeof (temp), "0x%08lX\n", (unsigned long)(size_t)val);
206
0
    p11_buffer_add (buf, temp, -1);
207
0
  }
208
0
}
209
210
static void
211
log_attribute_types (p11_buffer *buf,
212
                     const char *pref,
213
                     const char *name,
214
                     CK_ATTRIBUTE_PTR arr,
215
                     CK_ULONG num,
216
                     CK_RV status)
217
0
{
218
0
  const char *string;
219
0
  char temp[32];
220
0
  CK_ULONG i;
221
222
0
  if (status == CKR_BUFFER_TOO_SMALL) {
223
0
    arr = NULL;
224
0
    status = CKR_OK;
225
0
  }
226
0
  if (status != CKR_OK)
227
0
    return;
228
229
0
  p11_buffer_add (buf, pref, -1);
230
0
  p11_buffer_add (buf, name, -1);
231
0
  p11_buffer_add (buf, " = ", 3);
232
0
  if (arr == NULL) {
233
0
    snprintf (temp, sizeof (temp), "(%lu) NONE\n", num);
234
0
    p11_buffer_add (buf, temp, -1);
235
0
  } else {
236
0
    snprintf (temp, sizeof (temp), "(%lu) [ ", num);
237
0
    p11_buffer_add (buf, temp, -1);
238
0
    for (i = 0; i < num; i++) {
239
0
      if (i > 0)
240
0
        p11_buffer_add (buf, ", ", 2);
241
0
      string = p11_constant_name (p11_constant_types, arr[i].type);
242
0
      if (string != NULL) {
243
0
        p11_buffer_add (buf, string, -1);
244
0
      } else {
245
0
        snprintf (temp, sizeof (temp), "CKA_0x%08lX", arr[i].type);
246
0
        p11_buffer_add (buf, temp, -1);
247
0
      }
248
0
    }
249
250
0
    p11_buffer_add (buf, " ]\n", 3);
251
0
  }
252
0
}
253
254
static void
255
log_attribute_array (p11_buffer *buf,
256
                     const char *pref,
257
                     const char *name,
258
                     CK_ATTRIBUTE_PTR arr,
259
                     CK_ULONG num,
260
                     CK_RV status)
261
0
{
262
0
  char temp[32];
263
264
0
  if (status == CKR_BUFFER_TOO_SMALL) {
265
0
    arr = NULL;
266
0
    status = CKR_OK;
267
0
  }
268
0
  if (status != CKR_OK)
269
0
    return;
270
271
0
  p11_buffer_add (buf, pref, -1);
272
0
  p11_buffer_add (buf, name, -1);
273
0
  p11_buffer_add (buf, " = ", 3);
274
0
  if (arr == NULL) {
275
0
    snprintf (temp, sizeof (temp), "(%lu) NONE\n", num);
276
0
    p11_buffer_add (buf, temp, -1);
277
0
  } else {
278
0
    p11_attrs_format (buf, arr, num);
279
0
    p11_buffer_add (buf, "\n", 1);
280
0
  }
281
0
}
282
283
static void
284
log_bool (p11_buffer *buf,
285
          const char *pref,
286
          const char *name,
287
          CK_BBOOL val,
288
          CK_RV status)
289
0
{
290
0
  if (status == CKR_OK) {
291
0
    p11_buffer_add (buf, pref, -1);
292
0
    p11_buffer_add (buf, name, -1);
293
0
    p11_buffer_add (buf, " = ", 3);
294
0
    p11_buffer_add (buf, val ? "CK_TRUE" : "CK_FALSE", -1);
295
0
    p11_buffer_add (buf, "\n", 1);
296
0
  }
297
0
}
298
299
static void
300
log_byte_array (p11_buffer *buf,
301
                const char *pref,
302
                const char *name,
303
                CK_BYTE_PTR arr,
304
                CK_ULONG_PTR num,
305
                CK_RV status)
306
0
{
307
0
  char temp[32];
308
309
0
  if (status == CKR_BUFFER_TOO_SMALL) {
310
0
    arr = NULL;
311
0
    status = CKR_OK;
312
0
  }
313
314
0
  if (status != CKR_OK)
315
0
    return;
316
0
  p11_buffer_add (buf, pref, -1);
317
0
  p11_buffer_add (buf, name, -1);
318
0
  p11_buffer_add (buf, " = ", 3);
319
0
  if (num == NULL) {
320
0
    p11_buffer_add (buf, "(?) NOTHING\n", -1);
321
0
  } else if (arr == NULL) {
322
0
    snprintf (temp, sizeof (temp), "(%lu) NOTHING\n", *num);
323
0
    p11_buffer_add (buf, temp, -1);
324
0
  } else {
325
0
    snprintf (temp, sizeof (temp), "(%lu) ", *num);
326
0
    p11_buffer_add (buf, temp, -1);
327
0
    log_some_bytes (buf, arr, *num);
328
0
    p11_buffer_add (buf, "\n", 1);
329
0
  }
330
0
}
331
332
static void
333
log_info (p11_buffer *buf,
334
          const char *pref,
335
          const char *name,
336
          CK_INFO_PTR info,
337
          CK_RV status)
338
0
{
339
0
  char temp[32];
340
341
0
  if (status != CKR_OK)
342
0
    return;
343
0
  if (info == NULL) {
344
0
    log_pointer (buf, pref, name, info, status);
345
0
  } else {
346
0
    p11_buffer_add (buf, pref, -1);
347
0
    p11_buffer_add (buf, name, -1);
348
0
    p11_buffer_add (buf, " = {\n", 5);
349
0
    p11_buffer_add (buf, "\tcryptokiVersion: ", -1);
350
0
    snprintf (temp, sizeof (temp), "%u.%u", (unsigned int)info->cryptokiVersion.major,
351
0
              (unsigned int)info->cryptokiVersion.minor);
352
0
    p11_buffer_add (buf, temp, -1);
353
0
    p11_buffer_add (buf, "\n\tmanufacturerID: \"", -1);
354
0
    p11_buffer_add (buf, info->manufacturerID, p11_kit_space_strlen (info->manufacturerID, sizeof (info->manufacturerID)));
355
0
    p11_buffer_add (buf, "\"\n\tflags: ", -1);
356
0
    snprintf (temp, sizeof (temp), "%lX", info->flags);
357
0
    p11_buffer_add (buf, temp, -1);
358
0
    p11_buffer_add (buf, "\n\tlibraryDescription: \"", -1);
359
0
    p11_buffer_add (buf, info->libraryDescription, p11_kit_space_strlen (info->libraryDescription, sizeof (info->libraryDescription)));
360
0
    p11_buffer_add (buf, "\"\n\tlibraryVersion: ", -1);
361
0
    snprintf (temp, sizeof (temp), "%u.%u", (unsigned int)info->libraryVersion.major,
362
0
              (unsigned int)info->libraryVersion.minor);
363
0
    p11_buffer_add (buf, temp, -1);
364
0
    p11_buffer_add (buf, "\n      }\n", -1);
365
0
  }
366
0
}
367
368
static void
369
log_pInitArgs (p11_buffer *buf,
370
               const char *pref,
371
               const char *name,
372
               CK_VOID_PTR pInitArgs,
373
               CK_RV status)
374
0
{
375
0
  char temp[32];
376
0
  int had = 0;
377
378
0
  if (status != CKR_OK)
379
0
    return;
380
0
  if (pInitArgs == NULL)
381
0
    log_pointer (buf, pref, name, pInitArgs, status);
382
0
  else {
383
0
    CK_C_INITIALIZE_ARGS *args = (CK_C_INITIALIZE_ARGS*)pInitArgs;
384
0
    p11_buffer_add (buf, pref, -1);
385
0
    p11_buffer_add (buf, name, -1);
386
0
    p11_buffer_add (buf, " = {\n", 5);
387
0
    p11_buffer_add (buf, "\tCreateMutex: ", -1);
388
0
    snprintf (temp, sizeof (temp), "0x%08lX", (unsigned long)(size_t)args->CreateMutex);
389
0
    p11_buffer_add (buf, temp, -1);
390
0
    p11_buffer_add (buf, "\n\tDestroyMutex: ", -1);
391
0
    snprintf (temp, sizeof (temp), "0x%08lX", (unsigned long)(size_t)args->DestroyMutex);
392
0
    p11_buffer_add (buf, temp, -1);
393
0
    p11_buffer_add (buf, "\n\tLockMutex: ", -1);
394
0
    snprintf (temp, sizeof (temp), "0x%08lX", (unsigned long)(size_t)args->LockMutex);
395
0
    p11_buffer_add (buf, temp, -1);
396
0
    p11_buffer_add (buf, "\n\tUnlockMutex: ", -1);
397
0
    snprintf (temp, sizeof (temp), "0x%08lX", (unsigned long)(size_t)args->UnlockMutex);
398
0
    p11_buffer_add (buf, temp, -1);
399
0
    p11_buffer_add (buf, "\n\tflags: ", -1);
400
0
    snprintf (temp, sizeof (temp), "%lX", args->flags);
401
0
    LOG_FLAG (buf, args->flags, had, CKF_OS_LOCKING_OK);
402
0
    p11_buffer_add (buf, "\n\treserved: ", -1);
403
0
    snprintf (temp, sizeof (temp), "0x%08lX", (unsigned long)(size_t)args->pReserved);
404
0
    p11_buffer_add (buf, temp, -1);
405
0
    p11_buffer_add (buf, "\n      }\n", -1);
406
0
  }
407
0
}
408
409
static void
410
log_mechanism_info (p11_buffer *buf,
411
                    const char *pref,
412
                    const char *name,
413
                    CK_MECHANISM_INFO_PTR info,
414
                    CK_RV status)
415
0
{
416
0
  char temp[32];
417
0
  int had = 0;
418
419
0
  if (status != CKR_OK)
420
0
    return;
421
0
  if (info == NULL) {
422
0
    log_pointer (buf, pref, name, info, status);
423
0
  } else {
424
0
    p11_buffer_add (buf, pref, -1);
425
0
    p11_buffer_add (buf, name, -1);
426
0
    p11_buffer_add (buf, " = {\n", 5);
427
0
    p11_buffer_add (buf, "\tulMinKeySize: ", -1);
428
0
    snprintf (temp, sizeof (temp), "%lu", info->ulMinKeySize);
429
0
    p11_buffer_add (buf, temp, -1);
430
0
    p11_buffer_add (buf, "\n\tulMaxKeySize: ", -1);
431
0
    snprintf (temp, sizeof (temp), "%lu", info->ulMaxKeySize);
432
0
    p11_buffer_add (buf, temp, -1);
433
0
    p11_buffer_add (buf, "\n\tflags: ", -1);
434
0
    snprintf (temp, sizeof (temp), "%lX", info->flags);
435
0
    p11_buffer_add (buf, temp, -1);
436
0
    LOG_FLAG (buf, info->flags, had, CKF_HW);
437
0
    LOG_FLAG (buf, info->flags, had, CKF_ENCRYPT);
438
0
    LOG_FLAG (buf, info->flags, had, CKF_DECRYPT);
439
0
    LOG_FLAG (buf, info->flags, had, CKF_DIGEST);
440
0
    LOG_FLAG (buf, info->flags, had, CKF_SIGN);
441
0
    LOG_FLAG (buf, info->flags, had, CKF_SIGN_RECOVER);
442
0
    LOG_FLAG (buf, info->flags, had, CKF_VERIFY);
443
0
    LOG_FLAG (buf, info->flags, had, CKF_VERIFY_RECOVER);
444
0
    LOG_FLAG (buf, info->flags, had, CKF_GENERATE);
445
0
    LOG_FLAG (buf, info->flags, had, CKF_GENERATE_KEY_PAIR);
446
0
    LOG_FLAG (buf, info->flags, had, CKF_WRAP);
447
0
    LOG_FLAG (buf, info->flags, had, CKF_UNWRAP);
448
0
    LOG_FLAG (buf, info->flags, had, CKF_DERIVE);
449
0
    LOG_FLAG (buf, info->flags, had, CKF_EXTENSION);
450
0
    p11_buffer_add (buf, "\n      }\n", -1);
451
0
  }
452
0
}
453
454
static void
455
log_mechanism (p11_buffer *buf,
456
               const char *pref,
457
               const char *name,
458
               CK_MECHANISM_PTR mech,
459
               CK_RV status)
460
0
{
461
0
  char temp[32];
462
463
0
  if (status != CKR_OK)
464
0
    return;
465
0
  p11_buffer_add (buf, pref, -1);
466
0
  p11_buffer_add (buf, name, -1);
467
0
  p11_buffer_add (buf, " = {\n", 5);
468
0
  p11_buffer_add (buf, "\tmechanism: ", -1);
469
0
  if (mech != NULL) {
470
0
    log_CKM (buf, mech->mechanism);
471
0
    p11_buffer_add (buf, "\n\tpParameter: ", -1);
472
0
    snprintf (temp, sizeof (temp), "(%lu) ", mech->ulParameterLen);
473
0
    p11_buffer_add (buf, temp, -1);
474
0
    log_some_bytes (buf, mech->pParameter, mech->ulParameterLen);
475
0
  } else {
476
0
    p11_buffer_add (buf, "NULL", 4);
477
0
  }
478
0
  p11_buffer_add (buf, "\n      }\n", -1);
479
0
}
480
481
static void
482
log_mechanism_type (p11_buffer *buf,
483
                    const char *pref,
484
                    const char *name,
485
                    CK_MECHANISM_TYPE val,
486
                    CK_RV status)
487
0
{
488
0
  if (status != CKR_OK)
489
0
    return;
490
0
  p11_buffer_add (buf, pref, -1);
491
0
  p11_buffer_add (buf, name, -1);
492
0
  p11_buffer_add (buf, " = ", 3);
493
0
  log_CKM (buf, val);
494
0
  p11_buffer_add (buf, "\n", 1);
495
0
}
496
497
static void
498
log_mechanism_type_array (p11_buffer *buf,
499
                          const char *pref,
500
                          const char *name,
501
                          CK_MECHANISM_TYPE_PTR arr,
502
                          CK_ULONG_PTR num,
503
                          CK_RV status)
504
0
{
505
0
  char temp[32];
506
0
  CK_ULONG i;
507
508
0
  if (status == CKR_BUFFER_TOO_SMALL) {
509
0
    arr = NULL;
510
0
    status = CKR_OK;
511
0
  }
512
0
  if (status != CKR_OK)
513
0
    return;
514
515
0
  p11_buffer_add (buf, pref, -1);
516
0
  p11_buffer_add (buf, name, -1);
517
0
  p11_buffer_add (buf, " = ", 3);
518
0
  if (num == NULL) {
519
0
    p11_buffer_add (buf, "(?) NO-VALUES\n", -1);
520
0
  } else if (arr == NULL) {
521
0
    snprintf (temp, sizeof (temp), "(%lu) NO-VALUES\n", *num);
522
0
    p11_buffer_add (buf, temp, -1);
523
0
  } else {
524
0
    snprintf (temp, sizeof (temp), "(%lu) [ ", *num);
525
0
    p11_buffer_add (buf, temp, -1);
526
0
    for(i = 0; i < *num; ++i) {
527
0
      if (i > 0)
528
0
        p11_buffer_add (buf, ", ", 2);
529
0
      log_CKM (buf, arr[i]);
530
0
    }
531
0
    p11_buffer_add (buf, " ]\n", 3);
532
0
  }
533
0
}
534
535
static void
536
log_session_info (p11_buffer *buf,
537
                  const char *pref,
538
                  const char *name,
539
                  CK_SESSION_INFO_PTR info,
540
                  CK_RV status)
541
0
{
542
0
  char temp[32];
543
0
  int had = 0;
544
545
0
  if (status != CKR_OK)
546
0
    return;
547
0
  if (info == NULL) {
548
0
    log_pointer (buf, pref, name, info, status);
549
0
  } else {
550
0
    p11_buffer_add (buf, pref, -1);
551
0
    p11_buffer_add (buf, name, -1);
552
0
    p11_buffer_add (buf, " = {\n", 5);
553
0
    p11_buffer_add (buf, "\tslotID: ", -1);
554
0
    snprintf (temp, sizeof (temp), "SL%lu", info->slotID);
555
0
    p11_buffer_add (buf, temp, -1);
556
0
    p11_buffer_add (buf, "\n\tstate: ", -1);
557
0
    log_CKS (buf, info->state);
558
0
    p11_buffer_add (buf, "\n\tflags: ", -1);
559
0
    snprintf (temp, sizeof (temp), "%lX", info->flags);
560
0
    p11_buffer_add (buf, temp, -1);
561
0
    LOG_FLAG (buf, info->flags, had, CKF_SERIAL_SESSION);
562
0
    LOG_FLAG (buf, info->flags, had, CKF_RW_SESSION);
563
0
    p11_buffer_add (buf, "\n\tulDeviceError: ", -1);
564
0
    snprintf (temp, sizeof (temp), "%lu", info->ulDeviceError);
565
0
    p11_buffer_add (buf, temp, -1);
566
0
    p11_buffer_add (buf, "\n      }\n", -1);
567
0
  }
568
0
}
569
570
static void
571
log_slot_info (p11_buffer *buf,
572
               const char *pref,
573
               const char *name,
574
               CK_SLOT_INFO_PTR info,
575
               CK_RV status)
576
0
{
577
0
  char temp[32];
578
0
  int had = 0;
579
580
0
  if (status != CKR_OK)
581
0
    return;
582
0
  if (info == NULL) {
583
0
    log_pointer (buf, pref, name, info, status);
584
0
  } else {
585
0
    p11_buffer_add (buf, pref, -1);
586
0
    p11_buffer_add (buf, name, -1);
587
0
    p11_buffer_add (buf, " = {\n", 5);
588
0
    p11_buffer_add (buf, "\tslotDescription: \"", -1);
589
0
    p11_buffer_add (buf, info->slotDescription, p11_kit_space_strlen (info->slotDescription, sizeof (info->slotDescription)));
590
0
    p11_buffer_add (buf, "\"\n\tmanufacturerID: \"", -1);
591
0
    p11_buffer_add (buf, info->manufacturerID, p11_kit_space_strlen (info->manufacturerID, sizeof (info->manufacturerID)));
592
0
    p11_buffer_add (buf, "\"\n\tflags: ", -1);
593
0
    snprintf (temp, sizeof (temp), "%lu", info->flags);
594
0
    p11_buffer_add (buf, temp, -1);
595
0
    LOG_FLAG (buf, info->flags, had, CKF_TOKEN_PRESENT);
596
0
    LOG_FLAG (buf, info->flags, had, CKF_REMOVABLE_DEVICE);
597
0
    LOG_FLAG (buf, info->flags, had, CKF_HW_SLOT);
598
0
    p11_buffer_add (buf, "\n\thardwareVersion: ", -1);
599
0
    snprintf (temp, sizeof (temp), "%u.%u", (unsigned int)info->hardwareVersion.major,
600
0
              (unsigned int)info->hardwareVersion.minor);
601
0
    p11_buffer_add (buf, temp, -1);
602
0
    p11_buffer_add (buf, "\n\tfirmwareVersion: ", -1);
603
0
    snprintf (temp, sizeof (temp), "%u.%u", (unsigned int)info->firmwareVersion.major,
604
0
              (unsigned int)info->firmwareVersion.minor);
605
0
    p11_buffer_add (buf, temp, -1);
606
0
    p11_buffer_add (buf, "\n      }\n", -1);
607
0
  }
608
0
}
609
610
static void
611
log_space_string (p11_buffer *buf,
612
                  const char *pref,
613
                  const char *name,
614
                  CK_UTF8CHAR_PTR str,
615
                  CK_ULONG len,
616
                  const CK_RV status)
617
0
{
618
0
  if (status != CKR_OK)
619
0
    return;
620
0
  if (str == NULL) {
621
0
    log_pointer (buf, pref, name, str, status);
622
0
  } else {
623
0
    p11_buffer_add (buf, pref, -1);
624
0
    p11_buffer_add (buf, name, -1);
625
0
    p11_buffer_add (buf, " = \"", 4);
626
0
    p11_buffer_add (buf, str, strnlen ((const char *)str, len));
627
0
    p11_buffer_add (buf, "\"\n", 2);
628
0
  }
629
0
}
630
631
static void
632
log_token_number (p11_buffer *buf,
633
                  CK_ULONG number)
634
0
{
635
0
  char temp[32];
636
637
0
  if (number == 0) {
638
0
    p11_buffer_add (buf, "CK_UNAVAILABLE_INFORMATION", -1);
639
0
  } else if (number == (CK_ULONG)-1) {
640
0
    p11_buffer_add (buf, "CK_EFFECTIVELY_INFINITE", -1);
641
0
  } else {
642
0
    snprintf (temp, sizeof (temp), "%lu", number);
643
0
    p11_buffer_add (buf, temp, -1);
644
0
  }
645
0
}
646
647
static void
648
log_token_info (p11_buffer *buf,
649
                const char *pref,
650
                const char *name,
651
                CK_TOKEN_INFO_PTR info,
652
                CK_RV status)
653
0
{
654
0
  char temp[32];
655
0
  int had = 0;
656
657
0
  if (status != CKR_OK)
658
0
    return;
659
0
  if (info == NULL) {
660
0
    log_pointer (buf, pref, name, info, status);
661
0
  } else {
662
0
    p11_buffer_add (buf, pref, -1);
663
0
    p11_buffer_add (buf, name, -1);
664
0
    p11_buffer_add (buf, " = {\n", 5);
665
0
    p11_buffer_add (buf, "\tlabel: \"", -1);
666
0
    p11_buffer_add (buf, info->label, p11_kit_space_strlen (info->label, sizeof (info->label)));
667
0
    p11_buffer_add (buf, "\"\n\tmanufacturerID: \"", -1);
668
0
    p11_buffer_add (buf, info->manufacturerID, p11_kit_space_strlen (info->manufacturerID, sizeof (info->manufacturerID)));
669
0
    p11_buffer_add (buf, "\"\n\tmodel: \"", -1);
670
0
    p11_buffer_add (buf, info->model, p11_kit_space_strlen (info->model, sizeof (info->model)));
671
0
    p11_buffer_add (buf, "\"\n\tserialNumber: \"", -1);
672
0
    p11_buffer_add (buf, info->serialNumber, p11_kit_space_strlen (info->serialNumber, sizeof (info->serialNumber)));
673
0
    p11_buffer_add (buf, "\"\n\tflags: ", -1);
674
0
    snprintf (temp, sizeof (temp), "%lu", info->flags);
675
0
    p11_buffer_add (buf, temp, -1);
676
0
    LOG_FLAG (buf, info->flags, had, CKF_RNG);
677
0
    LOG_FLAG (buf, info->flags, had, CKF_WRITE_PROTECTED);
678
0
    LOG_FLAG (buf, info->flags, had, CKF_LOGIN_REQUIRED);
679
0
    LOG_FLAG (buf, info->flags, had, CKF_USER_PIN_INITIALIZED);
680
0
    LOG_FLAG (buf, info->flags, had, CKF_RESTORE_KEY_NOT_NEEDED);
681
0
    LOG_FLAG (buf, info->flags, had, CKF_CLOCK_ON_TOKEN);
682
0
    LOG_FLAG (buf, info->flags, had, CKF_PROTECTED_AUTHENTICATION_PATH);
683
0
    LOG_FLAG (buf, info->flags, had, CKF_DUAL_CRYPTO_OPERATIONS);
684
0
    LOG_FLAG (buf, info->flags, had, CKF_TOKEN_INITIALIZED);
685
0
    LOG_FLAG (buf, info->flags, had, CKF_SECONDARY_AUTHENTICATION);
686
0
    LOG_FLAG (buf, info->flags, had, CKF_USER_PIN_COUNT_LOW);
687
0
    LOG_FLAG (buf, info->flags, had, CKF_USER_PIN_FINAL_TRY);
688
0
    LOG_FLAG (buf, info->flags, had, CKF_USER_PIN_LOCKED);
689
0
    LOG_FLAG (buf, info->flags, had, CKF_USER_PIN_TO_BE_CHANGED);
690
0
    LOG_FLAG (buf, info->flags, had, CKF_SO_PIN_COUNT_LOW);
691
0
    LOG_FLAG (buf, info->flags, had, CKF_SO_PIN_FINAL_TRY);
692
0
    LOG_FLAG (buf, info->flags, had, CKF_SO_PIN_LOCKED);
693
0
    LOG_FLAG (buf, info->flags, had, CKF_SO_PIN_TO_BE_CHANGED);
694
0
    if (!had) {
695
0
      snprintf (temp, sizeof (temp), "%lu", info->flags);
696
0
      p11_buffer_add (buf, temp, -1);
697
0
    }
698
699
0
    p11_buffer_add (buf, "\n\tulMaxSessionCount: ", -1);
700
0
    log_token_number (buf, info->ulMaxSessionCount);
701
0
    p11_buffer_add (buf, "\n\tulSessionCount: ", -1);
702
0
    snprintf (temp, sizeof (temp), "%lu", info->ulSessionCount);
703
0
    p11_buffer_add (buf, temp, -1);
704
0
    p11_buffer_add (buf, "\n\tulMaxRwSessionCount: ", -1);
705
0
    log_token_number (buf, info->ulMaxSessionCount);
706
0
    p11_buffer_add (buf, "\n\tulRwSessionCount: ", -1);
707
0
    snprintf (temp, sizeof (temp), "%lu", info->ulRwSessionCount);
708
0
    p11_buffer_add (buf, temp, -1);
709
0
    p11_buffer_add (buf, "\n\tulMaxPinLen: ", -1);
710
0
    snprintf (temp, sizeof (temp), "%lu", info->ulMaxPinLen);
711
0
    p11_buffer_add (buf, temp, -1);
712
0
    p11_buffer_add (buf, "\n\tulMinPinLen: ", -1);
713
0
    snprintf (temp, sizeof (temp), "%lu", info->ulMinPinLen);
714
0
    p11_buffer_add (buf, temp, -1);
715
0
    p11_buffer_add (buf, "\n\tulTotalPublicMemory: ", -1);
716
0
    log_token_number (buf, info->ulMaxSessionCount);
717
0
    p11_buffer_add (buf, "\n\tulFreePublicMemory: ", -1);
718
0
    log_token_number (buf, info->ulMaxSessionCount);
719
0
    p11_buffer_add (buf, "\n\tulTotalPrivateMemory: ", -1);
720
0
    log_token_number (buf, info->ulMaxSessionCount);
721
0
    p11_buffer_add (buf, "\n\tulFreePrivateMemory: ", -1);
722
0
    log_token_number (buf, info->ulMaxSessionCount);
723
0
    p11_buffer_add (buf, "\n\tulFreePrivateMemory: ", -1);
724
0
    log_token_number (buf, info->ulMaxSessionCount);
725
0
    p11_buffer_add (buf, "\n\thardwareVersion: ", -1);
726
0
    snprintf (temp, sizeof (temp), "%u.%u", (unsigned int)info->hardwareVersion.major,
727
0
              (unsigned int)info->hardwareVersion.minor);
728
0
    p11_buffer_add (buf, temp, -1);
729
0
    p11_buffer_add (buf, "\n\tfirmwareVersion: ", -1);
730
0
    snprintf (temp, sizeof (temp), "%u.%u", (unsigned int)info->firmwareVersion.major,
731
0
              (unsigned int)info->firmwareVersion.minor);
732
0
    p11_buffer_add (buf, temp, -1);
733
0
    p11_buffer_add (buf, "\n\tutcTime: ", -1);
734
0
    p11_buffer_add (buf, (info->flags & CKF_CLOCK_ON_TOKEN) ? (const char*)info->utcTime : "", sizeof (info->utcTime));
735
0
    p11_buffer_add (buf, "\n      }\n", -1);
736
0
  }
737
0
}
738
739
static void
740
log_ulong (p11_buffer *buf,
741
           const char *pref,
742
           const char *name,
743
           CK_ULONG val,
744
           const char* npref,
745
           CK_RV status)
746
0
{
747
0
  char temp[32];
748
749
0
  if (!npref)
750
0
    npref = "";
751
0
  if (status == CKR_OK) {
752
0
    p11_buffer_add (buf, pref, -1);
753
0
    p11_buffer_add (buf, name, -1);
754
0
    p11_buffer_add (buf, " = ", 3);
755
0
    p11_buffer_add (buf, npref, -1);
756
0
    snprintf (temp, sizeof (temp), "%lu", val);
757
0
    p11_buffer_add (buf, temp, -1);
758
0
    p11_buffer_add (buf, "\n", 1);
759
0
  }
760
0
}
761
762
static void
763
log_ulong_array (p11_buffer *buf,
764
                 const char *pref,
765
                 const char *name,
766
                 CK_ULONG_PTR arr,
767
                 CK_ULONG_PTR num,
768
                 const char *npref,
769
                 CK_RV status)
770
0
{
771
0
  char temp[32];
772
0
  CK_ULONG i;
773
774
0
  if (status == CKR_BUFFER_TOO_SMALL) {
775
0
    arr = NULL;
776
0
    status = CKR_OK;
777
0
  }
778
779
0
  if (status != CKR_OK)
780
0
    return;
781
0
  if (npref == NULL)
782
0
    npref = "";
783
0
  p11_buffer_add (buf, pref, -1);
784
0
  p11_buffer_add (buf, name, -1);
785
0
  p11_buffer_add (buf, " = ", 3);
786
0
  if (num == NULL) {
787
0
    p11_buffer_add (buf, "(?) NO-VALUES\n", -1);
788
0
  } else if (arr == NULL) {
789
0
    snprintf (temp, sizeof (temp), "(%lu) NO-VALUES\n", *num);
790
0
    p11_buffer_add (buf, temp, -1);
791
0
  } else {
792
0
    snprintf (temp, sizeof (temp), "(%lu) [ ", *num);
793
0
    p11_buffer_add (buf, temp, -1);
794
0
    for (i = 0; i < *num; ++i) {
795
0
      if (i > 0)
796
0
        p11_buffer_add (buf, ", ", 2);
797
0
      p11_buffer_add (buf, npref, -1);
798
0
      snprintf (temp, sizeof (temp), "%lu", arr[i]);
799
0
      p11_buffer_add (buf, temp, -1);
800
0
    }
801
0
    p11_buffer_add (buf, " ]\n", 3);
802
0
  }
803
0
}
804
805
static void
806
log_ulong_pointer (p11_buffer *buf,
807
                   const char *pref,
808
                   const char *name,
809
                   CK_ULONG_PTR val,
810
                   const char *npref,
811
                   CK_RV status)
812
0
{
813
0
  char temp[32];
814
815
0
  if (status != CKR_OK)
816
0
    return;
817
0
  if (npref == NULL)
818
0
    npref = "";
819
0
  p11_buffer_add (buf, pref, -1);
820
0
  p11_buffer_add (buf, name, -1);
821
0
  p11_buffer_add (buf, " = ", 3);
822
0
  if (val == NULL) {
823
0
    p11_buffer_add (buf, "NULL\n", 5);
824
0
  } else {
825
0
    snprintf (temp, sizeof (temp), "0x%08lX", (unsigned long)(size_t)val);
826
0
    p11_buffer_add (buf, temp, -1);
827
0
    p11_buffer_add (buf, " = ", 3);
828
0
    p11_buffer_add (buf, npref, -1);
829
0
    snprintf (temp, sizeof (temp), "%lu", *val);
830
0
    p11_buffer_add (buf, temp, -1);
831
0
    p11_buffer_add (buf, "\n", 1);
832
0
  }
833
0
}
834
835
static void
836
log_user_type (p11_buffer *buf,
837
               const char *pref,
838
               const char *name,
839
               CK_USER_TYPE val,
840
               CK_RV status)
841
0
{
842
0
  if (status != CKR_OK)
843
0
    return;
844
0
  p11_buffer_add (buf, pref, -1);
845
0
  p11_buffer_add (buf, name, -1);
846
0
  p11_buffer_add (buf, " = ", 3);
847
0
  log_CKU (buf, val);
848
0
  p11_buffer_add (buf, "\n", 1);
849
0
}
850
851
static void
852
flush_buffer (p11_buffer *buf)
853
0
{
854
0
  if (p11_log_output) {
855
0
    fwrite (buf->data, 1, buf->len, stderr);
856
0
    fflush (stderr);
857
0
  }
858
0
  p11_buffer_reset (buf, 128);
859
0
}
860
861
#define BEGIN_CALL(name) \
862
0
  { \
863
0
    LogData *_log = (LogData *)self; \
864
0
    const char* _name = "C_" #name; \
865
0
    p11_buffer _buf; \
866
0
    CK_X_##name _func = _log->lower->C_##name; \
867
0
    CK_RV _ret = CKR_OK; \
868
0
    p11_buffer_init_null (&_buf, 128); \
869
0
    return_val_if_fail (_func != NULL, CKR_DEVICE_ERROR); \
870
0
    p11_buffer_add (&_buf, _name, -1); \
871
0
    p11_buffer_add (&_buf, "\n", 1); \
872
0
    self = _log->lower;
873
874
#define PROCESS_CALL(args) \
875
0
    flush_buffer (&_buf); \
876
0
    _ret = (_func) args;
877
878
#define DONE_CALL \
879
0
    p11_buffer_add (&_buf, _name, -1); \
880
0
    p11_buffer_add (&_buf, " = ", 3); \
881
0
    log_CKR (&_buf, _ret); \
882
0
    p11_buffer_add (&_buf, "\n", 1); \
883
0
    flush_buffer (&_buf); \
884
0
    p11_buffer_uninit (&_buf); \
885
0
    return _ret; \
886
0
  }
887
888
0
#define LIN  "  IN: "
889
0
#define LOUT " OUT: "
890
891
#define IN_ATTRIBUTE_ARRAY(a, n) \
892
0
    log_attribute_types (&_buf, LIN, #a, a, n, CKR_OK);
893
894
#define IN_BOOL(a) \
895
0
    log_bool (&_buf, LIN, #a, a, CKR_OK);
896
897
#define IN_BYTE_ARRAY(a, n) \
898
0
    log_byte_array (&_buf, LIN, #a, a, &n, CKR_OK);
899
900
#define IN_HANDLE(a) \
901
0
    log_ulong (&_buf, LIN, #a, a, "H", CKR_OK);
902
903
#define IN_INIT_ARGS(a) \
904
0
    log_pInitArgs (&_buf, LIN, #a, a, CKR_OK);
905
906
#define IN_POINTER(a) \
907
0
    log_pointer (&_buf, LIN, #a, a, CKR_OK);
908
909
#define IN_MECHANISM(a) \
910
0
    log_mechanism (&_buf, LIN, #a, a, CKR_OK);
911
912
#define IN_MECHANISM_TYPE(a) \
913
0
    log_mechanism_type (&_buf, LIN, #a, a, CKR_OK);
914
915
#define IN_SESSION(a) \
916
0
    log_ulong (&_buf, LIN, #a, a, "S", CKR_OK);
917
918
#define IN_SLOT_ID(a) \
919
0
    log_ulong (&_buf, LIN, #a, a, "SL", CKR_OK);
920
921
#define IN_SPACE_STRING(a, n) \
922
0
    log_space_string (&_buf, LIN, #a, a, n, CKR_OK);
923
924
#define IN_ULONG(a) \
925
0
    log_ulong (&_buf, LIN, #a, a, NULL, CKR_OK);
926
927
#define IN_ULONG_PTR(a) \
928
0
    log_ulong_pointer (&_buf, LIN, #a, a, NULL, CKR_OK);
929
930
#define IN_USER_TYPE(a) \
931
0
    log_user_type (&_buf, LIN, #a, a, CKR_OK);
932
933
#define OUT_ATTRIBUTE_ARRAY(a, n) \
934
0
    log_attribute_array (&_buf, LOUT, #a, a, n, _ret);
935
936
#define OUT_BYTE_ARRAY(a, n) \
937
0
    log_byte_array(&_buf, LOUT, #a, a, n, _ret);
938
939
#define OUT_HANDLE(a) \
940
0
    log_ulong_pointer (&_buf, LOUT, #a, a, "H", _ret);
941
942
#define OUT_HANDLE_ARRAY(a, n) \
943
0
    log_ulong_array (&_buf, LOUT, #a, a, n, "H", _ret);
944
945
#define OUT_INFO(a) \
946
0
    log_info (&_buf, LOUT, #a, a, _ret);
947
948
#define OUT_MECHANISM_INFO(a) \
949
0
    log_mechanism_info (&_buf, LOUT, #a, a, _ret);
950
951
#define OUT_MECHANISM_TYPE_ARRAY(a, n) \
952
0
    log_mechanism_type_array (&_buf, LOUT, #a, a, n, _ret);
953
954
#define OUT_POINTER(a) \
955
0
    log_pointer (&_buf, LOUT, #a, a, _ret);
956
957
#define OUT_SESSION(a) \
958
0
    log_ulong_pointer (&_buf, LOUT, #a, a, "S", _ret);
959
960
#define OUT_SESSION_INFO(a) \
961
0
    log_session_info (&_buf, LOUT, #a, a, _ret);
962
963
#define OUT_SLOT_ID_ARRAY(a, n) \
964
0
    log_ulong_array (&_buf, LOUT, #a, a, n, "SL", _ret);
965
966
#define OUT_SLOT_ID(a) \
967
0
    log_ulong_pointer (&_buf, LOUT, #a, a, "SL", _ret);
968
969
#define OUT_SLOT_INFO(a) \
970
0
    log_slot_info (&_buf, LOUT, #a, a, _ret);
971
972
#define OUT_TOKEN_INFO(a) \
973
0
    log_token_info (&_buf, LOUT, #a, a, _ret);
974
975
#define OUT_ULONG(a) \
976
0
    log_ulong_pointer (&_buf, LOUT, #a, a, NULL, _ret);
977
978
#define OUT_ULONG_ARRAY(a, n) \
979
    log_ulong_array (&_buf, LOUT, #a, a, n, NULL, _ret);
980
981
982
983
/* ---------------------------------------------------------------- */
984
985
static CK_RV
986
log_C_Initialize (CK_X_FUNCTION_LIST *self,
987
                  CK_VOID_PTR pInitArgs)
988
0
{
989
0
  BEGIN_CALL (Initialize)
990
0
    IN_INIT_ARGS (pInitArgs)
991
0
  PROCESS_CALL ((self, pInitArgs))
992
0
  DONE_CALL
993
0
}
994
995
static CK_RV
996
log_C_Finalize (CK_X_FUNCTION_LIST *self,
997
                CK_VOID_PTR pReserved)
998
0
{
999
0
  BEGIN_CALL (Finalize)
1000
0
    IN_POINTER (pReserved)
1001
0
  PROCESS_CALL ((self, pReserved))
1002
0
  DONE_CALL
1003
0
}
1004
1005
static CK_RV
1006
log_C_GetInfo (CK_X_FUNCTION_LIST *self,
1007
               CK_INFO_PTR pInfo)
1008
0
{
1009
0
  BEGIN_CALL (GetInfo)
1010
0
  PROCESS_CALL ((self, pInfo))
1011
0
    OUT_INFO (pInfo)
1012
0
  DONE_CALL
1013
0
}
1014
1015
static CK_RV
1016
log_C_GetSlotList (CK_X_FUNCTION_LIST *self,
1017
                   CK_BBOOL tokenPresent,
1018
                   CK_SLOT_ID_PTR pSlotList,
1019
                   CK_ULONG_PTR pulCount)
1020
0
{
1021
0
  BEGIN_CALL (GetSlotList)
1022
0
    IN_BOOL (tokenPresent)
1023
0
    IN_ULONG_PTR (pulCount)
1024
0
  PROCESS_CALL ((self, tokenPresent, pSlotList, pulCount))
1025
0
    OUT_SLOT_ID_ARRAY (pSlotList, pulCount)
1026
0
  DONE_CALL
1027
0
}
1028
1029
static CK_RV
1030
log_C_GetSlotInfo (CK_X_FUNCTION_LIST *self,
1031
                   CK_SLOT_ID slotID,
1032
                   CK_SLOT_INFO_PTR pInfo)
1033
0
{
1034
0
  BEGIN_CALL (GetSlotInfo)
1035
0
    IN_SLOT_ID (slotID)
1036
0
  PROCESS_CALL ((self, slotID, pInfo))
1037
0
    OUT_SLOT_INFO (pInfo)
1038
0
  DONE_CALL
1039
0
}
1040
1041
static CK_RV
1042
log_C_GetTokenInfo (CK_X_FUNCTION_LIST *self,
1043
                    CK_SLOT_ID slotID,
1044
                    CK_TOKEN_INFO_PTR pInfo)
1045
0
{
1046
0
  BEGIN_CALL (GetTokenInfo)
1047
0
    IN_SLOT_ID (slotID)
1048
0
  PROCESS_CALL ((self, slotID, pInfo))
1049
0
    OUT_TOKEN_INFO (pInfo)
1050
0
  DONE_CALL
1051
0
}
1052
1053
static CK_RV
1054
log_C_GetMechanismList (CK_X_FUNCTION_LIST *self,
1055
                        CK_SLOT_ID slotID,
1056
                        CK_MECHANISM_TYPE_PTR pMechanismList,
1057
                        CK_ULONG_PTR pulCount)
1058
0
{
1059
0
  BEGIN_CALL (GetMechanismList)
1060
0
    IN_SLOT_ID (slotID)
1061
0
    IN_ULONG_PTR (pulCount)
1062
0
  PROCESS_CALL ((self, slotID, pMechanismList, pulCount))
1063
0
    OUT_MECHANISM_TYPE_ARRAY (pMechanismList, pulCount)
1064
0
  DONE_CALL
1065
0
}
1066
1067
static CK_RV
1068
log_C_GetMechanismInfo (CK_X_FUNCTION_LIST *self,
1069
                        CK_SLOT_ID slotID,
1070
                        CK_MECHANISM_TYPE type,
1071
                        CK_MECHANISM_INFO_PTR pInfo)
1072
0
{
1073
0
  BEGIN_CALL (GetMechanismInfo)
1074
0
    IN_SLOT_ID (slotID)
1075
0
    IN_MECHANISM_TYPE (type)
1076
0
  PROCESS_CALL ((self, slotID, type, pInfo))
1077
0
    OUT_MECHANISM_INFO (pInfo)
1078
0
  DONE_CALL
1079
0
}
1080
1081
static CK_RV
1082
log_C_InitToken (CK_X_FUNCTION_LIST *self,
1083
                 CK_SLOT_ID slotID,
1084
                 CK_UTF8CHAR_PTR pPin,
1085
                 CK_ULONG ulPinLen,
1086
                 CK_UTF8CHAR_PTR pLabel)
1087
0
{
1088
0
  BEGIN_CALL (InitToken)
1089
0
    IN_SLOT_ID (slotID)
1090
0
    IN_BYTE_ARRAY (pPin, ulPinLen)
1091
0
    IN_SPACE_STRING (pLabel, 32)
1092
0
  PROCESS_CALL ((self, slotID, pPin, ulPinLen, pLabel))
1093
0
  DONE_CALL
1094
0
}
1095
1096
static CK_RV
1097
log_C_WaitForSlotEvent (CK_X_FUNCTION_LIST *self,
1098
                        CK_FLAGS flags,
1099
                        CK_SLOT_ID_PTR pSlot,
1100
                        CK_VOID_PTR pReserved)
1101
0
{
1102
0
  char temp[32];
1103
0
  int had = 0;
1104
1105
0
  BEGIN_CALL (WaitForSlotEvent)
1106
0
    p11_buffer_add (&_buf, "  IN: flags = ", -1);
1107
0
    snprintf (temp, sizeof (temp), "%lu", flags);
1108
0
    p11_buffer_add (&_buf, temp, -1);
1109
0
    LOG_FLAG (&_buf, flags, had, CKF_DONT_BLOCK);
1110
0
    p11_buffer_add (&_buf, "\n", 1);
1111
0
  PROCESS_CALL ((self, flags, pSlot, pReserved))
1112
0
    OUT_SLOT_ID (pSlot)
1113
0
    OUT_POINTER (pReserved)
1114
0
  DONE_CALL
1115
0
}
1116
1117
static CK_RV
1118
log_C_OpenSession (CK_X_FUNCTION_LIST *self,
1119
                   CK_SLOT_ID slotID,
1120
                   CK_FLAGS flags,
1121
                   CK_VOID_PTR pApplication,
1122
                   CK_NOTIFY Notify,
1123
                   CK_SESSION_HANDLE_PTR phSession)
1124
0
{
1125
0
  char temp[32];
1126
0
  int had = 0;
1127
1128
0
  BEGIN_CALL (OpenSession)
1129
0
    IN_SLOT_ID (slotID)
1130
0
    p11_buffer_add (&_buf, "  IN: flags = ", -1);
1131
0
    snprintf (temp, sizeof (temp), "%lu", flags);
1132
0
    p11_buffer_add (&_buf, temp, -1);
1133
0
    LOG_FLAG (&_buf, flags, had, CKF_SERIAL_SESSION);
1134
0
    LOG_FLAG (&_buf, flags, had, CKF_RW_SESSION);
1135
0
    p11_buffer_add (&_buf, "\n", 1);
1136
0
    IN_POINTER (pApplication);
1137
0
    IN_POINTER (Notify);
1138
0
  PROCESS_CALL ((self, slotID, flags, pApplication, Notify, phSession));
1139
0
    OUT_SESSION (phSession)
1140
0
  DONE_CALL
1141
0
}
1142
1143
static CK_RV
1144
log_C_CloseSession (CK_X_FUNCTION_LIST *self,
1145
                    CK_SESSION_HANDLE hSession)
1146
0
{
1147
0
  BEGIN_CALL (CloseSession)
1148
0
    IN_SESSION (hSession)
1149
0
  PROCESS_CALL ((self, hSession))
1150
0
  DONE_CALL
1151
0
}
1152
1153
static CK_RV
1154
log_C_CloseAllSessions (CK_X_FUNCTION_LIST *self,
1155
                        CK_SLOT_ID slotID)
1156
0
{
1157
0
  BEGIN_CALL (CloseAllSessions)
1158
0
    IN_SLOT_ID (slotID)
1159
0
  PROCESS_CALL ((self, slotID))
1160
0
  DONE_CALL
1161
0
}
1162
1163
static CK_RV
1164
log_C_GetSessionInfo (CK_X_FUNCTION_LIST *self,
1165
                      CK_SESSION_HANDLE hSession,
1166
                      CK_SESSION_INFO_PTR pInfo)
1167
0
{
1168
0
  BEGIN_CALL (GetSessionInfo)
1169
0
    IN_SESSION (hSession)
1170
0
  PROCESS_CALL ((self, hSession, pInfo))
1171
0
    OUT_SESSION_INFO (pInfo)
1172
0
  DONE_CALL
1173
0
}
1174
1175
static CK_RV
1176
log_C_InitPIN (CK_X_FUNCTION_LIST *self,
1177
               CK_SESSION_HANDLE hSession,
1178
               CK_UTF8CHAR_PTR pPin,
1179
               CK_ULONG ulPinLen)
1180
0
{
1181
0
  BEGIN_CALL (InitPIN)
1182
0
    IN_SESSION (hSession)
1183
0
    IN_BYTE_ARRAY (pPin, ulPinLen)
1184
0
  PROCESS_CALL ((self, hSession, pPin, ulPinLen))
1185
0
  DONE_CALL
1186
0
}
1187
1188
static CK_RV
1189
log_C_SetPIN (CK_X_FUNCTION_LIST *self,
1190
              CK_SESSION_HANDLE hSession,
1191
              CK_UTF8CHAR_PTR pOldPin,
1192
              CK_ULONG ulOldLen,
1193
              CK_UTF8CHAR_PTR pNewPin,
1194
              CK_ULONG ulNewLen)
1195
0
{
1196
0
  BEGIN_CALL (SetPIN)
1197
0
    IN_SESSION (hSession)
1198
0
    IN_BYTE_ARRAY (pOldPin, ulOldLen)
1199
0
    IN_BYTE_ARRAY (pNewPin, ulNewLen);
1200
0
  PROCESS_CALL ((self, hSession, pOldPin, ulOldLen, pNewPin, ulNewLen))
1201
0
  DONE_CALL
1202
0
}
1203
1204
static CK_RV
1205
log_C_GetOperationState (CK_X_FUNCTION_LIST *self,
1206
                         CK_SESSION_HANDLE hSession,
1207
                         CK_BYTE_PTR pOperationState,
1208
                         CK_ULONG_PTR pulOperationStateLen)
1209
0
{
1210
0
  BEGIN_CALL (GetOperationState)
1211
0
    IN_SESSION (hSession)
1212
0
    IN_ULONG_PTR (pulOperationStateLen)
1213
0
  PROCESS_CALL ((self, hSession, pOperationState, pulOperationStateLen))
1214
0
    OUT_BYTE_ARRAY (pOperationState, pulOperationStateLen)
1215
0
  DONE_CALL
1216
0
}
1217
1218
static CK_RV
1219
log_C_SetOperationState (CK_X_FUNCTION_LIST *self,
1220
                         CK_SESSION_HANDLE hSession,
1221
                         CK_BYTE_PTR pOperationState,
1222
                         CK_ULONG ulOperationStateLen,
1223
                         CK_OBJECT_HANDLE hEncryptionKey,
1224
                         CK_OBJECT_HANDLE hAuthenticationKey)
1225
0
{
1226
0
  BEGIN_CALL (SetOperationState)
1227
0
    IN_SESSION (hSession)
1228
0
    IN_BYTE_ARRAY (pOperationState, ulOperationStateLen)
1229
0
    IN_HANDLE (hEncryptionKey)
1230
0
    IN_HANDLE (hAuthenticationKey)
1231
0
  PROCESS_CALL ((self, hSession, pOperationState, ulOperationStateLen, hEncryptionKey, hAuthenticationKey))
1232
0
  DONE_CALL
1233
0
}
1234
1235
static CK_RV
1236
log_C_Login (CK_X_FUNCTION_LIST *self,
1237
             CK_SESSION_HANDLE hSession,
1238
             CK_USER_TYPE userType,
1239
             CK_UTF8CHAR_PTR pPin,
1240
             CK_ULONG ulPinLen)
1241
0
{
1242
0
  BEGIN_CALL (Login)
1243
0
    IN_SESSION (hSession)
1244
0
    IN_USER_TYPE (userType)
1245
0
    IN_BYTE_ARRAY (pPin, ulPinLen);
1246
0
  PROCESS_CALL ((self, hSession, userType, pPin, ulPinLen))
1247
0
  DONE_CALL
1248
0
}
1249
1250
static CK_RV
1251
log_C_Logout (CK_X_FUNCTION_LIST *self,
1252
              CK_SESSION_HANDLE hSession)
1253
0
{
1254
0
  BEGIN_CALL (Logout)
1255
0
    IN_SESSION (hSession)
1256
0
  PROCESS_CALL ((self, hSession))
1257
0
  DONE_CALL
1258
0
}
1259
1260
static CK_RV
1261
log_C_CreateObject (CK_X_FUNCTION_LIST *self,
1262
                    CK_SESSION_HANDLE hSession,
1263
                    CK_ATTRIBUTE_PTR pTemplate,
1264
                    CK_ULONG ulCount,
1265
                    CK_OBJECT_HANDLE_PTR phObject)
1266
0
{
1267
0
  BEGIN_CALL (CreateObject)
1268
0
    IN_SESSION (hSession)
1269
0
    IN_ATTRIBUTE_ARRAY (pTemplate, ulCount)
1270
0
  PROCESS_CALL ((self, hSession, pTemplate, ulCount, phObject))
1271
0
    OUT_HANDLE (phObject)
1272
0
  DONE_CALL
1273
0
}
1274
1275
static CK_RV
1276
log_C_CopyObject (CK_X_FUNCTION_LIST *self,
1277
                  CK_SESSION_HANDLE hSession,
1278
                  CK_OBJECT_HANDLE hObject,
1279
                  CK_ATTRIBUTE_PTR pTemplate,
1280
                  CK_ULONG ulCount,
1281
                  CK_OBJECT_HANDLE_PTR phNewObject)
1282
0
{
1283
0
  BEGIN_CALL (CopyObject)
1284
0
    IN_SESSION (hSession)
1285
0
    IN_HANDLE (hObject)
1286
0
    IN_ATTRIBUTE_ARRAY (pTemplate, ulCount)
1287
0
  PROCESS_CALL ((self, hSession, hObject, pTemplate, ulCount, phNewObject))
1288
0
    OUT_HANDLE (phNewObject)
1289
0
  DONE_CALL
1290
0
}
1291
1292
1293
static CK_RV
1294
log_C_DestroyObject (CK_X_FUNCTION_LIST *self,
1295
                     CK_SESSION_HANDLE hSession,
1296
                     CK_OBJECT_HANDLE hObject)
1297
0
{
1298
0
  BEGIN_CALL (DestroyObject);
1299
0
    IN_SESSION (hSession)
1300
0
    IN_HANDLE (hObject)
1301
0
  PROCESS_CALL ((self, hSession, hObject))
1302
0
  DONE_CALL
1303
0
}
1304
1305
static CK_RV
1306
log_C_GetObjectSize (CK_X_FUNCTION_LIST *self,
1307
                     CK_SESSION_HANDLE hSession,
1308
                     CK_OBJECT_HANDLE hObject,
1309
                     CK_ULONG_PTR size)
1310
0
{
1311
0
  BEGIN_CALL (GetObjectSize);
1312
0
    IN_SESSION (hSession)
1313
0
    IN_HANDLE (hObject)
1314
0
  PROCESS_CALL ((self, hSession, hObject, size))
1315
0
    OUT_ULONG (size)
1316
0
  DONE_CALL
1317
0
}
1318
1319
static CK_RV
1320
log_C_GetAttributeValue (CK_X_FUNCTION_LIST *self,
1321
                         CK_SESSION_HANDLE hSession,
1322
                         CK_OBJECT_HANDLE hObject,
1323
                         CK_ATTRIBUTE_PTR pTemplate,
1324
                         CK_ULONG ulCount)
1325
0
{
1326
0
  BEGIN_CALL (GetAttributeValue)
1327
0
    IN_SESSION (hSession)
1328
0
    IN_HANDLE (hObject)
1329
0
    IN_ATTRIBUTE_ARRAY (pTemplate, ulCount)
1330
0
  PROCESS_CALL ((self, hSession, hObject, pTemplate, ulCount))
1331
0
    OUT_ATTRIBUTE_ARRAY (pTemplate, ulCount)
1332
0
  DONE_CALL
1333
0
}
1334
1335
static CK_RV
1336
log_C_SetAttributeValue (CK_X_FUNCTION_LIST *self,
1337
                         CK_SESSION_HANDLE hSession,
1338
                         CK_OBJECT_HANDLE hObject,
1339
                         CK_ATTRIBUTE_PTR pTemplate,
1340
                         CK_ULONG ulCount)
1341
0
{
1342
0
  BEGIN_CALL (SetAttributeValue)
1343
0
    IN_SESSION (hSession)
1344
0
    IN_HANDLE (hObject)
1345
0
    IN_ATTRIBUTE_ARRAY (pTemplate, ulCount)
1346
0
  PROCESS_CALL ((self, hSession, hObject, pTemplate, ulCount))
1347
0
  DONE_CALL
1348
0
}
1349
1350
static CK_RV
1351
log_C_FindObjectsInit (CK_X_FUNCTION_LIST *self,
1352
                       CK_SESSION_HANDLE hSession,
1353
                       CK_ATTRIBUTE_PTR pTemplate,
1354
                       CK_ULONG ulCount)
1355
0
{
1356
0
  BEGIN_CALL (FindObjectsInit)
1357
0
    IN_SESSION (hSession)
1358
0
    IN_ATTRIBUTE_ARRAY (pTemplate, ulCount)
1359
0
  PROCESS_CALL ((self, hSession, pTemplate, ulCount))
1360
0
  DONE_CALL
1361
0
}
1362
1363
static CK_RV
1364
log_C_FindObjects (CK_X_FUNCTION_LIST *self,
1365
                   CK_SESSION_HANDLE hSession,
1366
                   CK_OBJECT_HANDLE_PTR object,
1367
                   CK_ULONG max_object_count,
1368
                   CK_ULONG_PTR object_count)
1369
0
{
1370
0
  BEGIN_CALL (FindObjects)
1371
0
    IN_SESSION (hSession)
1372
0
    IN_ULONG (max_object_count)
1373
0
  PROCESS_CALL ((self, hSession, object, max_object_count, object_count))
1374
0
    OUT_HANDLE_ARRAY (object, object_count)
1375
0
  DONE_CALL
1376
0
}
1377
1378
static CK_RV
1379
log_C_FindObjectsFinal (CK_X_FUNCTION_LIST *self,
1380
                        CK_SESSION_HANDLE hSession)
1381
0
{
1382
0
  BEGIN_CALL (FindObjectsFinal)
1383
0
    IN_SESSION (hSession)
1384
0
  PROCESS_CALL ((self, hSession))
1385
0
  DONE_CALL
1386
0
}
1387
1388
static CK_RV
1389
log_C_EncryptInit (CK_X_FUNCTION_LIST *self,
1390
                   CK_SESSION_HANDLE hSession,
1391
                   CK_MECHANISM_PTR pMechanism,
1392
                   CK_OBJECT_HANDLE hKey)
1393
0
{
1394
0
  BEGIN_CALL (EncryptInit)
1395
0
    IN_SESSION (hSession)
1396
0
    IN_MECHANISM (pMechanism)
1397
0
    IN_HANDLE (hKey)
1398
0
  PROCESS_CALL ((self, hSession, pMechanism, hKey))
1399
0
  DONE_CALL
1400
0
}
1401
1402
static CK_RV
1403
log_C_Encrypt (CK_X_FUNCTION_LIST *self,
1404
               CK_SESSION_HANDLE hSession,
1405
               CK_BYTE_PTR pData,
1406
               CK_ULONG ulDataLen,
1407
               CK_BYTE_PTR pEncryptedData,
1408
               CK_ULONG_PTR pulEncryptedDataLen)
1409
0
{
1410
0
  BEGIN_CALL (Encrypt)
1411
0
    IN_SESSION (hSession)
1412
0
    IN_BYTE_ARRAY (pData, ulDataLen)
1413
0
  PROCESS_CALL ((self, hSession, pData, ulDataLen, pEncryptedData, pulEncryptedDataLen))
1414
0
    OUT_BYTE_ARRAY (pEncryptedData, pulEncryptedDataLen)
1415
0
  DONE_CALL
1416
0
}
1417
1418
static CK_RV
1419
log_C_EncryptUpdate (CK_X_FUNCTION_LIST *self,
1420
                     CK_SESSION_HANDLE hSession,
1421
                     CK_BYTE_PTR pPart,
1422
                     CK_ULONG ulPartLen,
1423
                     CK_BYTE_PTR pEncryptedPart,
1424
                     CK_ULONG_PTR pulEncryptedPartLen)
1425
0
{
1426
0
  BEGIN_CALL (EncryptUpdate)
1427
0
    IN_SESSION (hSession)
1428
0
    IN_BYTE_ARRAY (pPart, ulPartLen)
1429
0
  PROCESS_CALL ((self, hSession, pPart, ulPartLen, pEncryptedPart, pulEncryptedPartLen))
1430
0
    OUT_BYTE_ARRAY (pEncryptedPart, pulEncryptedPartLen)
1431
0
  DONE_CALL
1432
0
}
1433
1434
static CK_RV
1435
log_C_EncryptFinal (CK_X_FUNCTION_LIST *self,
1436
                    CK_SESSION_HANDLE hSession,
1437
                    CK_BYTE_PTR pLastEncryptedPart,
1438
                    CK_ULONG_PTR pulLastEncryptedPartLen)
1439
0
{
1440
0
  BEGIN_CALL (EncryptFinal)
1441
0
    IN_SESSION (hSession)
1442
0
  PROCESS_CALL ((self, hSession, pLastEncryptedPart, pulLastEncryptedPartLen))
1443
0
    OUT_BYTE_ARRAY (pLastEncryptedPart, pulLastEncryptedPartLen)
1444
0
  DONE_CALL
1445
0
}
1446
1447
static CK_RV
1448
log_C_DecryptInit (CK_X_FUNCTION_LIST *self,
1449
                   CK_SESSION_HANDLE hSession,
1450
                   CK_MECHANISM_PTR pMechanism,
1451
                   CK_OBJECT_HANDLE hKey)
1452
0
{
1453
0
  BEGIN_CALL (DecryptInit)
1454
0
    IN_SESSION (hSession)
1455
0
    IN_MECHANISM (pMechanism)
1456
0
    IN_HANDLE (hKey)
1457
0
  PROCESS_CALL ((self, hSession, pMechanism, hKey))
1458
0
  DONE_CALL
1459
0
}
1460
1461
static CK_RV
1462
log_C_Decrypt (CK_X_FUNCTION_LIST *self,
1463
               CK_SESSION_HANDLE hSession,
1464
               CK_BYTE_PTR pEncryptedData,
1465
               CK_ULONG ulEncryptedDataLen,
1466
               CK_BYTE_PTR pData,
1467
               CK_ULONG_PTR pulDataLen)
1468
0
{
1469
0
  BEGIN_CALL (Decrypt)
1470
0
    IN_SESSION (hSession)
1471
0
    IN_BYTE_ARRAY (pEncryptedData, ulEncryptedDataLen)
1472
0
  PROCESS_CALL ((self, hSession, pEncryptedData, ulEncryptedDataLen, pData, pulDataLen))
1473
0
    OUT_BYTE_ARRAY (pData, pulDataLen)
1474
0
  DONE_CALL
1475
0
}
1476
1477
static CK_RV
1478
log_C_DecryptUpdate (CK_X_FUNCTION_LIST *self,
1479
                     CK_SESSION_HANDLE hSession,
1480
                     CK_BYTE_PTR pEncryptedPart,
1481
                     CK_ULONG ulEncryptedPartLen,
1482
                     CK_BYTE_PTR pPart,
1483
                     CK_ULONG_PTR pulPartLen)
1484
0
{
1485
0
  BEGIN_CALL (DecryptUpdate)
1486
0
    IN_SESSION (hSession)
1487
0
    IN_BYTE_ARRAY (pEncryptedPart, ulEncryptedPartLen)
1488
0
  PROCESS_CALL ((self, hSession, pEncryptedPart, ulEncryptedPartLen, pPart, pulPartLen))
1489
0
    OUT_BYTE_ARRAY (pPart, pulPartLen)
1490
0
  DONE_CALL
1491
0
}
1492
1493
static CK_RV
1494
log_C_DecryptFinal (CK_X_FUNCTION_LIST *self,
1495
                    CK_SESSION_HANDLE hSession,
1496
                    CK_BYTE_PTR pLastPart,
1497
                    CK_ULONG_PTR pulLastPartLen)
1498
0
{
1499
0
  BEGIN_CALL (DecryptFinal)
1500
0
    IN_SESSION (hSession)
1501
0
  PROCESS_CALL ((self, hSession, pLastPart, pulLastPartLen))
1502
0
    OUT_BYTE_ARRAY (pLastPart, pulLastPartLen)
1503
0
  DONE_CALL
1504
0
}
1505
1506
static CK_RV
1507
log_C_DigestInit (CK_X_FUNCTION_LIST *self,
1508
                  CK_SESSION_HANDLE hSession,
1509
                  CK_MECHANISM_PTR pMechanism)
1510
0
{
1511
0
  BEGIN_CALL (DigestInit)
1512
0
    IN_SESSION (hSession)
1513
0
    IN_MECHANISM (pMechanism)
1514
0
  PROCESS_CALL ((self, hSession, pMechanism))
1515
0
  DONE_CALL
1516
0
}
1517
1518
static CK_RV
1519
log_C_Digest (CK_X_FUNCTION_LIST *self,
1520
              CK_SESSION_HANDLE hSession,
1521
              CK_BYTE_PTR pData,
1522
              CK_ULONG ulDataLen,
1523
              CK_BYTE_PTR pDigest,
1524
              CK_ULONG_PTR pulDigestLen)
1525
0
{
1526
0
  BEGIN_CALL (Digest)
1527
0
    IN_SESSION (hSession)
1528
0
    IN_BYTE_ARRAY (pData, ulDataLen)
1529
0
  PROCESS_CALL ((self, hSession, pData, ulDataLen, pDigest, pulDigestLen))
1530
0
    OUT_BYTE_ARRAY (pDigest, pulDigestLen)
1531
0
  DONE_CALL
1532
0
}
1533
1534
static CK_RV
1535
log_C_DigestUpdate (CK_X_FUNCTION_LIST *self,
1536
                    CK_SESSION_HANDLE hSession,
1537
                    CK_BYTE_PTR pPart,
1538
                    CK_ULONG ulPartLen)
1539
0
{
1540
0
  BEGIN_CALL (DigestUpdate)
1541
0
    IN_SESSION (hSession)
1542
0
    IN_BYTE_ARRAY (pPart, ulPartLen)
1543
0
  PROCESS_CALL ((self, hSession, pPart, ulPartLen))
1544
0
  DONE_CALL
1545
0
}
1546
1547
static CK_RV
1548
log_C_DigestKey (CK_X_FUNCTION_LIST *self,
1549
                 CK_SESSION_HANDLE hSession,
1550
                 CK_OBJECT_HANDLE hKey)
1551
0
{
1552
0
  BEGIN_CALL (DigestKey)
1553
0
    IN_SESSION (hSession)
1554
0
    IN_HANDLE (hKey)
1555
0
  PROCESS_CALL ((self, hSession, hKey))
1556
0
  DONE_CALL
1557
0
}
1558
1559
static CK_RV
1560
log_C_DigestFinal (CK_X_FUNCTION_LIST *self,
1561
                   CK_SESSION_HANDLE hSession,
1562
                   CK_BYTE_PTR pDigest,
1563
                   CK_ULONG_PTR pulDigestLen)
1564
0
{
1565
0
  BEGIN_CALL (DigestFinal)
1566
0
    IN_SESSION (hSession)
1567
0
  PROCESS_CALL ((self, hSession, pDigest, pulDigestLen))
1568
0
    OUT_BYTE_ARRAY (pDigest, pulDigestLen)
1569
0
  DONE_CALL
1570
0
}
1571
1572
static CK_RV
1573
log_C_SignInit (CK_X_FUNCTION_LIST *self,
1574
                CK_SESSION_HANDLE hSession,
1575
                CK_MECHANISM_PTR pMechanism,
1576
                CK_OBJECT_HANDLE hKey)
1577
0
{
1578
0
  BEGIN_CALL (SignInit)
1579
0
    IN_SESSION (hSession)
1580
0
    IN_MECHANISM (pMechanism)
1581
0
    IN_HANDLE (hKey)
1582
0
  PROCESS_CALL ((self, hSession, pMechanism, hKey))
1583
0
  DONE_CALL
1584
0
}
1585
1586
static CK_RV
1587
log_C_Sign (CK_X_FUNCTION_LIST *self,
1588
            CK_SESSION_HANDLE hSession,
1589
            CK_BYTE_PTR pData,
1590
            CK_ULONG ulDataLen,
1591
            CK_BYTE_PTR pSignature,
1592
            CK_ULONG_PTR pulSignatureLen)
1593
0
{
1594
0
  BEGIN_CALL (Sign)
1595
0
    IN_SESSION (hSession)
1596
0
    IN_BYTE_ARRAY (pData, ulDataLen)
1597
0
  PROCESS_CALL ((self, hSession, pData, ulDataLen, pSignature, pulSignatureLen))
1598
0
    OUT_BYTE_ARRAY (pSignature, pulSignatureLen)
1599
0
  DONE_CALL
1600
0
}
1601
1602
static CK_RV
1603
log_C_SignUpdate (CK_X_FUNCTION_LIST *self,
1604
                  CK_SESSION_HANDLE hSession,
1605
                  CK_BYTE_PTR pPart,
1606
                  CK_ULONG ulPartLen)
1607
0
{
1608
0
  BEGIN_CALL (SignUpdate)
1609
0
    IN_SESSION (hSession)
1610
0
    IN_BYTE_ARRAY (pPart, ulPartLen)
1611
0
  PROCESS_CALL ((self, hSession, pPart, ulPartLen))
1612
0
  DONE_CALL
1613
0
}
1614
1615
static CK_RV
1616
log_C_SignFinal (CK_X_FUNCTION_LIST *self,
1617
                 CK_SESSION_HANDLE hSession,
1618
                 CK_BYTE_PTR pSignature,
1619
                 CK_ULONG_PTR pulSignatureLen)
1620
0
{
1621
0
  BEGIN_CALL (SignFinal)
1622
0
    IN_SESSION (hSession)
1623
0
  PROCESS_CALL ((self, hSession, pSignature, pulSignatureLen))
1624
0
    OUT_BYTE_ARRAY (pSignature, pulSignatureLen)
1625
0
  DONE_CALL
1626
0
}
1627
1628
static CK_RV
1629
log_C_SignRecoverInit (CK_X_FUNCTION_LIST *self,
1630
                       CK_SESSION_HANDLE hSession,
1631
                       CK_MECHANISM_PTR pMechanism,
1632
                       CK_OBJECT_HANDLE hKey)
1633
0
{
1634
0
  BEGIN_CALL (SignRecoverInit)
1635
0
    IN_SESSION (hSession)
1636
0
    IN_MECHANISM (pMechanism)
1637
0
    IN_HANDLE (hKey)
1638
0
  PROCESS_CALL ((self, hSession, pMechanism, hKey))
1639
0
  DONE_CALL
1640
0
}
1641
1642
static CK_RV
1643
log_C_SignRecover (CK_X_FUNCTION_LIST *self,
1644
                   CK_SESSION_HANDLE hSession,
1645
                   CK_BYTE_PTR pData,
1646
                   CK_ULONG ulDataLen,
1647
                   CK_BYTE_PTR pSignature,
1648
                   CK_ULONG_PTR pulSignatureLen)
1649
0
{
1650
0
  BEGIN_CALL (SignRecover)
1651
0
    IN_SESSION (hSession)
1652
0
    IN_BYTE_ARRAY (pData, ulDataLen)
1653
0
  PROCESS_CALL ((self, hSession, pData, ulDataLen, pSignature, pulSignatureLen))
1654
0
    OUT_BYTE_ARRAY (pSignature, pulSignatureLen)
1655
0
  DONE_CALL
1656
0
}
1657
1658
static CK_RV
1659
log_C_VerifyInit (CK_X_FUNCTION_LIST *self,
1660
                  CK_SESSION_HANDLE hSession,
1661
                  CK_MECHANISM_PTR pMechanism,
1662
                  CK_OBJECT_HANDLE hKey)
1663
0
{
1664
0
  BEGIN_CALL (VerifyInit);
1665
0
    IN_SESSION (hSession)
1666
0
    IN_MECHANISM (pMechanism)
1667
0
    IN_HANDLE (hKey)
1668
0
  PROCESS_CALL ((self, hSession, pMechanism, hKey))
1669
0
  DONE_CALL
1670
0
}
1671
1672
static CK_RV
1673
log_C_Verify (CK_X_FUNCTION_LIST *self,
1674
              CK_SESSION_HANDLE hSession,
1675
              CK_BYTE_PTR pData,
1676
              CK_ULONG ulDataLen,
1677
              CK_BYTE_PTR pSignature,
1678
              CK_ULONG ulSignatureLen)
1679
0
{
1680
0
  BEGIN_CALL (Verify)
1681
0
    IN_SESSION (hSession)
1682
0
    IN_BYTE_ARRAY (pData, ulDataLen)
1683
0
    IN_BYTE_ARRAY (pSignature, ulSignatureLen)
1684
0
  PROCESS_CALL ((self, hSession, pData, ulDataLen, pSignature, ulSignatureLen))
1685
0
  DONE_CALL
1686
0
}
1687
1688
static CK_RV
1689
log_C_VerifyUpdate (CK_X_FUNCTION_LIST *self,
1690
                    CK_SESSION_HANDLE hSession,
1691
                    CK_BYTE_PTR pPart,
1692
                    CK_ULONG ulPartLen)
1693
0
{
1694
0
  BEGIN_CALL (VerifyUpdate)
1695
0
    IN_SESSION (hSession)
1696
0
    IN_BYTE_ARRAY (pPart, ulPartLen)
1697
0
  PROCESS_CALL ((self, hSession, pPart, ulPartLen))
1698
0
  DONE_CALL
1699
0
}
1700
1701
static CK_RV
1702
log_C_VerifyFinal (CK_X_FUNCTION_LIST *self,
1703
                   CK_SESSION_HANDLE hSession,
1704
                   CK_BYTE_PTR pSignature,
1705
                   CK_ULONG ulSignatureLen)
1706
0
{
1707
0
  BEGIN_CALL (VerifyFinal)
1708
0
    IN_SESSION (hSession)
1709
0
    IN_BYTE_ARRAY (pSignature, ulSignatureLen);
1710
0
  PROCESS_CALL ((self, hSession, pSignature, ulSignatureLen))
1711
0
  DONE_CALL
1712
0
}
1713
1714
static CK_RV
1715
log_C_VerifyRecoverInit (CK_X_FUNCTION_LIST *self,
1716
                         CK_SESSION_HANDLE hSession,
1717
                         CK_MECHANISM_PTR pMechanism,
1718
                         CK_OBJECT_HANDLE hKey)
1719
0
{
1720
0
  BEGIN_CALL (VerifyRecoverInit)
1721
0
    IN_SESSION (hSession)
1722
0
    IN_MECHANISM (pMechanism)
1723
0
    IN_HANDLE (hKey)
1724
0
  PROCESS_CALL ((self, hSession, pMechanism, hKey))
1725
0
  DONE_CALL
1726
0
}
1727
1728
static CK_RV
1729
log_C_VerifyRecover (CK_X_FUNCTION_LIST *self,
1730
                     CK_SESSION_HANDLE hSession,
1731
                     CK_BYTE_PTR pSignature,
1732
                     CK_ULONG ulSignatureLen,
1733
                     CK_BYTE_PTR pData,
1734
                     CK_ULONG_PTR pulDataLen)
1735
0
{
1736
0
  BEGIN_CALL (VerifyRecover)
1737
0
    IN_SESSION (hSession)
1738
0
    IN_BYTE_ARRAY (pSignature, ulSignatureLen)
1739
0
  PROCESS_CALL ((self, hSession, pSignature, ulSignatureLen, pData, pulDataLen))
1740
0
    OUT_BYTE_ARRAY (pData, pulDataLen)
1741
0
  DONE_CALL
1742
0
}
1743
1744
static CK_RV
1745
log_C_DigestEncryptUpdate (CK_X_FUNCTION_LIST *self,
1746
                           CK_SESSION_HANDLE hSession,
1747
                           CK_BYTE_PTR pPart,
1748
                           CK_ULONG ulPartLen,
1749
                           CK_BYTE_PTR pEncryptedPart,
1750
                           CK_ULONG_PTR pulEncryptedPartLen)
1751
0
{
1752
0
  BEGIN_CALL (DigestEncryptUpdate);
1753
0
    IN_SESSION (hSession)
1754
0
    IN_BYTE_ARRAY (pPart, ulPartLen)
1755
0
  PROCESS_CALL ((self, hSession, pPart, ulPartLen, pEncryptedPart, pulEncryptedPartLen))
1756
0
    OUT_BYTE_ARRAY (pEncryptedPart, pulEncryptedPartLen)
1757
0
  DONE_CALL
1758
0
}
1759
1760
static CK_RV
1761
log_C_DecryptDigestUpdate (CK_X_FUNCTION_LIST *self,
1762
                           CK_SESSION_HANDLE hSession,
1763
                           CK_BYTE_PTR pEncryptedPart,
1764
                           CK_ULONG ulEncryptedPartLen,
1765
                           CK_BYTE_PTR pPart,
1766
                           CK_ULONG_PTR pulPartLen)
1767
0
{
1768
0
  BEGIN_CALL (DecryptDigestUpdate)
1769
0
    IN_SESSION (hSession)
1770
0
    IN_BYTE_ARRAY (pEncryptedPart, ulEncryptedPartLen)
1771
0
  PROCESS_CALL ((self, hSession, pEncryptedPart, ulEncryptedPartLen, pPart, pulPartLen))
1772
0
    OUT_BYTE_ARRAY (pPart, pulPartLen)
1773
0
  DONE_CALL
1774
0
}
1775
1776
static CK_RV
1777
log_C_SignEncryptUpdate (CK_X_FUNCTION_LIST *self,
1778
                         CK_SESSION_HANDLE hSession,
1779
                         CK_BYTE_PTR pPart,
1780
                         CK_ULONG ulPartLen,
1781
                         CK_BYTE_PTR pEncryptedPart,
1782
                         CK_ULONG_PTR pulEncryptedPartLen)
1783
0
{
1784
0
  BEGIN_CALL (SignEncryptUpdate)
1785
0
    IN_SESSION (hSession)
1786
0
    IN_BYTE_ARRAY (pPart, ulPartLen)
1787
0
  PROCESS_CALL ((self, hSession, pPart, ulPartLen, pEncryptedPart, pulEncryptedPartLen))
1788
0
    OUT_BYTE_ARRAY (pEncryptedPart, pulEncryptedPartLen)
1789
0
  DONE_CALL
1790
0
}
1791
1792
static CK_RV
1793
log_C_DecryptVerifyUpdate (CK_X_FUNCTION_LIST *self,
1794
                           CK_SESSION_HANDLE hSession,
1795
                           CK_BYTE_PTR pEncryptedPart,
1796
                           CK_ULONG ulEncryptedPartLen,
1797
                           CK_BYTE_PTR pPart,
1798
                           CK_ULONG_PTR pulPartLen)
1799
0
{
1800
0
  BEGIN_CALL (DecryptVerifyUpdate)
1801
0
    IN_SESSION (hSession)
1802
0
    IN_BYTE_ARRAY (pEncryptedPart, ulEncryptedPartLen)
1803
0
  PROCESS_CALL ((self, hSession, pEncryptedPart, ulEncryptedPartLen, pPart, pulPartLen))
1804
0
    OUT_BYTE_ARRAY (pPart, pulPartLen)
1805
0
  DONE_CALL
1806
0
}
1807
1808
static CK_RV
1809
log_C_GenerateKey (CK_X_FUNCTION_LIST *self,
1810
                   CK_SESSION_HANDLE hSession,
1811
                   CK_MECHANISM_PTR pMechanism,
1812
                   CK_ATTRIBUTE_PTR pTemplate,
1813
                   CK_ULONG ulCount,
1814
                   CK_OBJECT_HANDLE_PTR phKey)
1815
0
{
1816
0
  BEGIN_CALL (GenerateKey)
1817
0
    IN_SESSION (hSession)
1818
0
    IN_MECHANISM (pMechanism)
1819
0
    IN_ATTRIBUTE_ARRAY (pTemplate, ulCount)
1820
0
  PROCESS_CALL ((self, hSession, pMechanism, pTemplate, ulCount, phKey))
1821
0
    OUT_HANDLE (phKey)
1822
0
  DONE_CALL
1823
0
}
1824
1825
static CK_RV
1826
log_C_GenerateKeyPair (CK_X_FUNCTION_LIST *self,
1827
                       CK_SESSION_HANDLE hSession,
1828
                       CK_MECHANISM_PTR pMechanism,
1829
                       CK_ATTRIBUTE_PTR pPublicKeyTemplate,
1830
                       CK_ULONG ulPublicKeyAttributeCount,
1831
                       CK_ATTRIBUTE_PTR pPrivateKeyTemplate,
1832
                       CK_ULONG ulPrivateKeyAttributeCount,
1833
                       CK_OBJECT_HANDLE_PTR phPublicKey,
1834
                       CK_OBJECT_HANDLE_PTR phPrivateKey)
1835
0
{
1836
0
  BEGIN_CALL (GenerateKeyPair)
1837
0
    IN_SESSION (hSession)
1838
0
    IN_MECHANISM (pMechanism)
1839
0
    IN_ATTRIBUTE_ARRAY (pPublicKeyTemplate, ulPublicKeyAttributeCount)
1840
0
    IN_ATTRIBUTE_ARRAY (pPrivateKeyTemplate, ulPrivateKeyAttributeCount)
1841
0
  PROCESS_CALL ((self, hSession, pMechanism, pPublicKeyTemplate, ulPublicKeyAttributeCount,
1842
0
                 pPrivateKeyTemplate, ulPrivateKeyAttributeCount, phPublicKey, phPrivateKey))
1843
0
    OUT_HANDLE (phPublicKey)
1844
0
    OUT_HANDLE (phPrivateKey)
1845
0
  DONE_CALL
1846
0
}
1847
1848
static CK_RV
1849
log_C_WrapKey (CK_X_FUNCTION_LIST *self,
1850
               CK_SESSION_HANDLE hSession,
1851
               CK_MECHANISM_PTR pMechanism,
1852
               CK_OBJECT_HANDLE hWrappingKey,
1853
               CK_OBJECT_HANDLE hKey,
1854
               CK_BYTE_PTR pWrappedKey,
1855
               CK_ULONG_PTR pulWrappedKeyLen)
1856
0
{
1857
0
  BEGIN_CALL (WrapKey)
1858
0
    IN_SESSION (hSession)
1859
0
    IN_MECHANISM (pMechanism)
1860
0
    IN_HANDLE (hWrappingKey)
1861
0
    IN_HANDLE (hKey)
1862
0
  PROCESS_CALL ((self, hSession, pMechanism, hWrappingKey, hKey, pWrappedKey, pulWrappedKeyLen))
1863
0
    OUT_BYTE_ARRAY (pWrappedKey, pulWrappedKeyLen)
1864
0
  DONE_CALL
1865
0
}
1866
1867
static CK_RV
1868
log_C_UnwrapKey (CK_X_FUNCTION_LIST *self,
1869
                 CK_SESSION_HANDLE hSession,
1870
                 CK_MECHANISM_PTR pMechanism,
1871
                 CK_OBJECT_HANDLE hUnwrappingKey,
1872
                 CK_BYTE_PTR pWrappedKey,
1873
                 CK_ULONG ulWrappedKeyLen,
1874
                 CK_ATTRIBUTE_PTR pTemplate,
1875
                 CK_ULONG ulAttributeCount,
1876
                 CK_OBJECT_HANDLE_PTR phKey)
1877
0
{
1878
0
  BEGIN_CALL (UnwrapKey)
1879
0
    IN_SESSION (hSession)
1880
0
    IN_MECHANISM (pMechanism)
1881
0
    IN_HANDLE (hUnwrappingKey)
1882
0
    IN_BYTE_ARRAY (pWrappedKey, ulWrappedKeyLen)
1883
0
    IN_ATTRIBUTE_ARRAY (pTemplate, ulAttributeCount)
1884
0
  PROCESS_CALL ((self, hSession, pMechanism, hUnwrappingKey, pWrappedKey,
1885
0
      ulWrappedKeyLen, pTemplate, ulAttributeCount, phKey))
1886
0
    OUT_HANDLE (phKey)
1887
0
  DONE_CALL
1888
0
}
1889
1890
static CK_RV
1891
log_C_DeriveKey (CK_X_FUNCTION_LIST *self,
1892
                 CK_SESSION_HANDLE hSession,
1893
                 CK_MECHANISM_PTR pMechanism,
1894
                 CK_OBJECT_HANDLE hBaseKey,
1895
                 CK_ATTRIBUTE_PTR pTemplate,
1896
                 CK_ULONG ulAttributeCount,
1897
                 CK_OBJECT_HANDLE_PTR phObject)
1898
0
{
1899
0
  BEGIN_CALL (DeriveKey)
1900
0
    IN_SESSION (hSession)
1901
0
    IN_MECHANISM (pMechanism)
1902
0
    IN_HANDLE (hBaseKey)
1903
0
    IN_ATTRIBUTE_ARRAY (pTemplate, ulAttributeCount)
1904
0
  PROCESS_CALL ((self, hSession, pMechanism, hBaseKey, pTemplate, ulAttributeCount, phObject))
1905
0
    OUT_HANDLE (phObject)
1906
0
  DONE_CALL
1907
0
}
1908
1909
static CK_RV
1910
log_C_SeedRandom (CK_X_FUNCTION_LIST *self,
1911
                  CK_SESSION_HANDLE hSession,
1912
                  CK_BYTE_PTR pSeed,
1913
                  CK_ULONG ulSeedLen)
1914
0
{
1915
0
  BEGIN_CALL (SeedRandom)
1916
0
    IN_SESSION (hSession)
1917
0
    IN_BYTE_ARRAY (pSeed, ulSeedLen);
1918
0
  PROCESS_CALL ((self, hSession, pSeed, ulSeedLen))
1919
0
  DONE_CALL
1920
0
}
1921
1922
static CK_RV
1923
log_C_GenerateRandom (CK_X_FUNCTION_LIST *self,
1924
                      CK_SESSION_HANDLE hSession,
1925
                      CK_BYTE_PTR pRandomData,
1926
                      CK_ULONG ulRandomLen)
1927
0
{
1928
0
  BEGIN_CALL (GenerateRandom)
1929
0
    IN_SESSION (hSession)
1930
0
    IN_ULONG (ulRandomLen)
1931
0
  PROCESS_CALL ((self, hSession, pRandomData, ulRandomLen))
1932
0
    OUT_BYTE_ARRAY (pRandomData, &ulRandomLen)
1933
0
  DONE_CALL
1934
0
}
1935
1936
static CK_RV
1937
log_C_LoginUser (CK_X_FUNCTION_LIST *self,
1938
                 CK_SESSION_HANDLE session,
1939
                 CK_USER_TYPE user_type,
1940
                 CK_UTF8CHAR_PTR pin,
1941
                 CK_ULONG pin_len,
1942
                 CK_UTF8CHAR_PTR username,
1943
                 CK_ULONG username_len)
1944
0
{
1945
0
  BEGIN_CALL (LoginUser)
1946
0
    IN_SESSION (session)
1947
0
    IN_USER_TYPE (user_type)
1948
0
    IN_BYTE_ARRAY (pin, pin_len)
1949
0
    IN_BYTE_ARRAY (username, username_len)
1950
0
  PROCESS_CALL ((self, session, user_type, pin, pin_len, username, username_len))
1951
1952
0
  DONE_CALL
1953
0
}
1954
1955
static CK_RV
1956
log_C_SessionCancel (CK_X_FUNCTION_LIST *self,
1957
                     CK_SESSION_HANDLE session,
1958
                     CK_FLAGS flags)
1959
0
{
1960
0
  char temp[32];
1961
0
  int had = 0;
1962
1963
0
  BEGIN_CALL (SessionCancel)
1964
0
    IN_SESSION (session)
1965
0
    p11_buffer_add (&_buf, "  IN: flags = ", -1);
1966
0
    snprintf (temp, sizeof (temp), "%lu", flags);
1967
0
    p11_buffer_add (&_buf, temp, -1);
1968
0
    LOG_FLAG (&_buf, flags, had, CKF_MESSAGE_ENCRYPT);
1969
0
    LOG_FLAG (&_buf, flags, had, CKF_MESSAGE_DECRYPT);
1970
0
    LOG_FLAG (&_buf, flags, had, CKF_MESSAGE_SIGN);
1971
0
    LOG_FLAG (&_buf, flags, had, CKF_MESSAGE_VERIFY);
1972
0
    LOG_FLAG (&_buf, flags, had, CKF_FIND_OBJECTS);
1973
0
    LOG_FLAG (&_buf, flags, had, CKF_ENCRYPT);
1974
0
    LOG_FLAG (&_buf, flags, had, CKF_DECRYPT);
1975
0
    LOG_FLAG (&_buf, flags, had, CKF_DIGEST);
1976
0
    LOG_FLAG (&_buf, flags, had, CKF_SIGN);
1977
0
    LOG_FLAG (&_buf, flags, had, CKF_SIGN_RECOVER);
1978
0
    LOG_FLAG (&_buf, flags, had, CKF_VERIFY);
1979
0
    LOG_FLAG (&_buf, flags, had, CKF_VERIFY_RECOVER);
1980
0
    LOG_FLAG (&_buf, flags, had, CKF_GENERATE);
1981
0
    LOG_FLAG (&_buf, flags, had, CKF_GENERATE_KEY_PAIR);
1982
0
    LOG_FLAG (&_buf, flags, had, CKF_WRAP);
1983
0
    LOG_FLAG (&_buf, flags, had, CKF_UNWRAP);
1984
0
    LOG_FLAG (&_buf, flags, had, CKF_DERIVE);
1985
0
    p11_buffer_add (&_buf, "\n", 1);
1986
0
  PROCESS_CALL ((self, session, flags))
1987
0
  DONE_CALL
1988
0
}
1989
1990
static CK_RV
1991
log_C_MessageEncryptInit (CK_X_FUNCTION_LIST *self,
1992
                          CK_SESSION_HANDLE session,
1993
                          CK_MECHANISM_PTR mechanism,
1994
                          CK_OBJECT_HANDLE key)
1995
0
{
1996
0
  BEGIN_CALL (MessageEncryptInit)
1997
0
    IN_SESSION (session)
1998
0
    IN_MECHANISM (mechanism)
1999
0
    IN_HANDLE (key)
2000
0
  PROCESS_CALL ((self, session, mechanism, key))
2001
0
  DONE_CALL
2002
0
}
2003
2004
static CK_RV
2005
log_C_EncryptMessage (CK_X_FUNCTION_LIST *self,
2006
                      CK_SESSION_HANDLE session,
2007
                      CK_VOID_PTR parameter,
2008
                      CK_ULONG parameter_len,
2009
                      CK_BYTE_PTR associated_data,
2010
                      CK_ULONG associated_data_len,
2011
                      CK_BYTE_PTR plaintext,
2012
                      CK_ULONG plaintext_len,
2013
                      CK_BYTE_PTR ciphertext,
2014
                      CK_ULONG_PTR ciphertext_len)
2015
0
{
2016
0
  BEGIN_CALL (EncryptMessage)
2017
0
    IN_SESSION (session)
2018
0
    IN_POINTER (parameter)
2019
0
    IN_ULONG (parameter_len)
2020
0
    IN_BYTE_ARRAY (associated_data, associated_data_len)
2021
0
    IN_BYTE_ARRAY (plaintext, plaintext_len)
2022
0
  PROCESS_CALL ((self, session, parameter, parameter_len, associated_data, associated_data_len,
2023
0
                 plaintext, plaintext_len, ciphertext, ciphertext_len))
2024
0
    OUT_BYTE_ARRAY (ciphertext, ciphertext_len)
2025
0
  DONE_CALL
2026
0
}
2027
2028
static CK_RV
2029
log_C_EncryptMessageBegin (CK_X_FUNCTION_LIST *self,
2030
                           CK_SESSION_HANDLE session,
2031
                           CK_VOID_PTR parameter,
2032
                           CK_ULONG parameter_len,
2033
                           CK_BYTE_PTR associated_data,
2034
                           CK_ULONG associated_data_len)
2035
0
{
2036
0
  BEGIN_CALL (EncryptMessageBegin)
2037
0
    IN_SESSION (session)
2038
0
    IN_POINTER (parameter)
2039
0
    IN_ULONG (parameter_len)
2040
0
    IN_BYTE_ARRAY (associated_data, associated_data_len)
2041
0
  PROCESS_CALL ((self, session, parameter, parameter_len, associated_data, associated_data_len))
2042
0
  DONE_CALL
2043
0
}
2044
2045
static CK_RV
2046
log_C_EncryptMessageNext (CK_X_FUNCTION_LIST *self,
2047
                          CK_SESSION_HANDLE session,
2048
                          CK_VOID_PTR parameter,
2049
                          CK_ULONG parameter_len,
2050
                          CK_BYTE_PTR plaintext_part,
2051
                          CK_ULONG plaintext_part_len,
2052
                          CK_BYTE_PTR ciphertext_part,
2053
                          CK_ULONG_PTR ciphertext_part_len,
2054
                          CK_FLAGS flags)
2055
0
{
2056
0
  char temp[32];
2057
0
  int had = 0;
2058
2059
0
  BEGIN_CALL (EncryptMessageNext)
2060
0
    IN_SESSION (session)
2061
0
    IN_POINTER (parameter)
2062
0
    IN_ULONG (parameter_len)
2063
0
    IN_BYTE_ARRAY (plaintext_part, plaintext_part_len)
2064
0
    p11_buffer_add (&_buf, "  IN: flags = ", -1);
2065
0
    snprintf (temp, sizeof (temp), "%lu", flags);
2066
0
    p11_buffer_add (&_buf, temp, -1);
2067
0
    LOG_FLAG (&_buf, flags, had, CKF_END_OF_MESSAGE);
2068
0
    p11_buffer_add (&_buf, "\n", 1);
2069
0
  PROCESS_CALL ((self, session, parameter, parameter_len, plaintext_part, plaintext_part_len,
2070
0
                 ciphertext_part, ciphertext_part_len, flags))
2071
0
    OUT_BYTE_ARRAY (ciphertext_part, ciphertext_part_len)
2072
0
  DONE_CALL
2073
0
}
2074
2075
static CK_RV
2076
log_C_MessageEncryptFinal (CK_X_FUNCTION_LIST *self,
2077
                           CK_SESSION_HANDLE session)
2078
0
{
2079
0
  BEGIN_CALL (MessageEncryptFinal)
2080
0
    IN_SESSION (session)
2081
0
  PROCESS_CALL ((self, session))
2082
0
  DONE_CALL
2083
0
}
2084
2085
static CK_RV
2086
log_C_MessageDecryptInit (CK_X_FUNCTION_LIST *self,
2087
                          CK_SESSION_HANDLE session,
2088
                          CK_MECHANISM_PTR mechanism,
2089
                          CK_OBJECT_HANDLE key)
2090
0
{
2091
0
  BEGIN_CALL (MessageDecryptInit)
2092
0
    IN_SESSION (session)
2093
0
    IN_MECHANISM (mechanism)
2094
0
    IN_HANDLE (key)
2095
0
  PROCESS_CALL ((self, session, mechanism, key))
2096
0
  DONE_CALL
2097
0
}
2098
2099
static CK_RV
2100
log_C_DecryptMessage (CK_X_FUNCTION_LIST *self,
2101
                      CK_SESSION_HANDLE session,
2102
                      CK_VOID_PTR parameter,
2103
                      CK_ULONG parameter_len,
2104
                      CK_BYTE_PTR associated_data,
2105
                      CK_ULONG associated_data_len,
2106
                      CK_BYTE_PTR ciphertext,
2107
                      CK_ULONG ciphertext_len,
2108
                      CK_BYTE_PTR plaintext,
2109
                      CK_ULONG_PTR plaintext_len)
2110
0
{
2111
0
  BEGIN_CALL (DecryptMessage)
2112
0
    IN_SESSION (session)
2113
0
    IN_POINTER (parameter)
2114
0
    IN_ULONG (parameter_len)
2115
0
    IN_BYTE_ARRAY (associated_data, associated_data_len)
2116
0
    IN_BYTE_ARRAY (ciphertext, ciphertext_len)
2117
0
  PROCESS_CALL ((self, session, parameter, parameter_len, associated_data, associated_data_len,
2118
0
                 ciphertext, ciphertext_len, plaintext, plaintext_len));
2119
0
    OUT_BYTE_ARRAY (plaintext, plaintext_len)
2120
0
  DONE_CALL
2121
0
}
2122
2123
static CK_RV
2124
log_C_DecryptMessageBegin (CK_X_FUNCTION_LIST *self,
2125
                           CK_SESSION_HANDLE session,
2126
                           CK_VOID_PTR parameter,
2127
                           CK_ULONG parameter_len,
2128
                           CK_BYTE_PTR associated_data,
2129
                           CK_ULONG associated_data_len)
2130
0
{
2131
0
  BEGIN_CALL (DecryptMessageBegin)
2132
0
    IN_SESSION (session)
2133
0
    IN_POINTER (parameter)
2134
0
    IN_ULONG (parameter_len)
2135
0
    IN_BYTE_ARRAY (associated_data, associated_data_len)
2136
0
  PROCESS_CALL ((self, session, parameter, parameter_len, associated_data, associated_data_len))
2137
0
  DONE_CALL
2138
0
}
2139
2140
static CK_RV
2141
log_C_DecryptMessageNext (CK_X_FUNCTION_LIST *self,
2142
                          CK_SESSION_HANDLE session,
2143
                          CK_VOID_PTR parameter,
2144
                          CK_ULONG parameter_len,
2145
                          CK_BYTE_PTR ciphertext_part,
2146
                          CK_ULONG ciphertext_part_len,
2147
                          CK_BYTE_PTR plaintext_part,
2148
                          CK_ULONG_PTR plaintext_part_len,
2149
                          CK_FLAGS flags)
2150
0
{
2151
0
  char temp[32];
2152
0
  int had = 0;
2153
2154
0
  BEGIN_CALL (DecryptMessageNext)
2155
0
    IN_SESSION (session)
2156
0
    IN_POINTER (parameter)
2157
0
    IN_ULONG (parameter_len)
2158
0
    IN_BYTE_ARRAY (ciphertext_part, ciphertext_part_len)
2159
0
    p11_buffer_add (&_buf, "  IN: flags = ", -1);
2160
0
    snprintf (temp, sizeof (temp), "%lu", flags);
2161
0
    p11_buffer_add (&_buf, temp, -1);
2162
0
    LOG_FLAG (&_buf, flags, had, CKF_END_OF_MESSAGE);
2163
0
    p11_buffer_add (&_buf, "\n", 1);
2164
0
  PROCESS_CALL ((self, session, parameter, parameter_len, ciphertext_part, ciphertext_part_len,
2165
0
                 plaintext_part, plaintext_part_len, flags))
2166
0
    OUT_BYTE_ARRAY (plaintext_part, plaintext_part_len)
2167
0
  DONE_CALL
2168
0
}
2169
2170
static CK_RV
2171
log_C_MessageDecryptFinal (CK_X_FUNCTION_LIST *self,
2172
                           CK_SESSION_HANDLE session)
2173
0
{
2174
0
  BEGIN_CALL (MessageDecryptFinal)
2175
0
    IN_SESSION (session)
2176
0
  PROCESS_CALL ((self, session))
2177
0
  DONE_CALL
2178
0
}
2179
2180
static CK_RV
2181
log_C_MessageSignInit (CK_X_FUNCTION_LIST *self,
2182
                       CK_SESSION_HANDLE session,
2183
                       CK_MECHANISM_PTR mechanism,
2184
                       CK_OBJECT_HANDLE key)
2185
0
{
2186
0
  BEGIN_CALL (MessageSignInit)
2187
0
    IN_SESSION (session)
2188
0
    IN_MECHANISM (mechanism)
2189
0
    IN_HANDLE (key)
2190
0
  PROCESS_CALL ((self, session, mechanism, key))
2191
0
  DONE_CALL
2192
0
}
2193
2194
static CK_RV
2195
log_C_SignMessage (CK_X_FUNCTION_LIST *self,
2196
                   CK_SESSION_HANDLE session,
2197
                   CK_VOID_PTR parameter,
2198
                   CK_ULONG parameter_len,
2199
                   CK_BYTE_PTR data,
2200
                   CK_ULONG data_len,
2201
                   CK_BYTE_PTR signature,
2202
                   CK_ULONG_PTR signature_len)
2203
0
{
2204
0
  BEGIN_CALL (SignMessage)
2205
0
    IN_SESSION (session)
2206
0
    IN_POINTER (parameter)
2207
0
    IN_ULONG (parameter_len)
2208
0
    IN_BYTE_ARRAY (data, data_len)
2209
0
  PROCESS_CALL ((self, session, parameter, parameter_len, data, data_len, signature, signature_len))
2210
0
    OUT_BYTE_ARRAY (signature, signature_len)
2211
0
  DONE_CALL
2212
0
}
2213
2214
static CK_RV
2215
log_C_SignMessageBegin (CK_X_FUNCTION_LIST *self,
2216
                        CK_SESSION_HANDLE session,
2217
                        CK_VOID_PTR parameter,
2218
                        CK_ULONG parameter_len)
2219
0
{
2220
0
  BEGIN_CALL (SignMessageBegin)
2221
0
    IN_SESSION (session)
2222
0
    IN_POINTER (parameter)
2223
0
    IN_ULONG (parameter_len)
2224
0
  PROCESS_CALL ((self, session, parameter, parameter_len))
2225
0
  DONE_CALL
2226
0
}
2227
2228
static CK_RV
2229
log_C_SignMessageNext (CK_X_FUNCTION_LIST *self,
2230
                       CK_SESSION_HANDLE session,
2231
                       CK_VOID_PTR parameter,
2232
                       CK_ULONG parameter_len,
2233
                       CK_BYTE_PTR data,
2234
                       CK_ULONG data_len,
2235
                       CK_BYTE_PTR signature,
2236
                       CK_ULONG_PTR signature_len)
2237
0
{
2238
0
  BEGIN_CALL (SignMessageNext)
2239
0
    IN_SESSION (session)
2240
0
    IN_POINTER (parameter)
2241
0
    IN_ULONG (parameter_len)
2242
0
    IN_BYTE_ARRAY (data, data_len)
2243
0
  PROCESS_CALL ((self, session, parameter, parameter_len, data, data_len, signature, signature_len))
2244
0
    OUT_BYTE_ARRAY (signature, signature_len)
2245
0
  DONE_CALL
2246
0
}
2247
2248
static CK_RV
2249
log_C_MessageSignFinal (CK_X_FUNCTION_LIST *self,
2250
                        CK_SESSION_HANDLE session)
2251
0
{
2252
0
  BEGIN_CALL (MessageSignFinal)
2253
0
    IN_SESSION (session)
2254
0
  PROCESS_CALL ((self, session))
2255
0
  DONE_CALL
2256
0
}
2257
2258
static CK_RV
2259
log_C_MessageVerifyInit (CK_X_FUNCTION_LIST *self,
2260
                         CK_SESSION_HANDLE session,
2261
                         CK_MECHANISM_PTR mechanism,
2262
                         CK_OBJECT_HANDLE key)
2263
0
{
2264
0
  BEGIN_CALL (MessageVerifyInit)
2265
0
    IN_SESSION (session)
2266
0
    IN_MECHANISM (mechanism)
2267
0
    IN_HANDLE (key)
2268
0
  PROCESS_CALL ((self, session, mechanism, key))
2269
0
  DONE_CALL
2270
0
}
2271
2272
static CK_RV
2273
log_C_VerifyMessage (CK_X_FUNCTION_LIST *self,
2274
                     CK_SESSION_HANDLE session,
2275
                     CK_VOID_PTR parameter,
2276
                     CK_ULONG parameter_len,
2277
                     CK_BYTE_PTR data,
2278
                     CK_ULONG data_len,
2279
                     CK_BYTE_PTR signature,
2280
                     CK_ULONG signature_len)
2281
0
{
2282
0
  BEGIN_CALL (VerifyMessage)
2283
0
    IN_SESSION (session)
2284
0
    IN_POINTER (parameter)
2285
0
    IN_ULONG (parameter_len)
2286
0
    IN_BYTE_ARRAY (data, data_len)
2287
0
    IN_BYTE_ARRAY (signature, signature_len)
2288
0
  PROCESS_CALL ((self, session, parameter, parameter_len, data, data_len,
2289
0
                 signature, signature_len))
2290
0
  DONE_CALL
2291
0
}
2292
2293
static CK_RV
2294
log_C_VerifyMessageBegin (CK_X_FUNCTION_LIST *self,
2295
                          CK_SESSION_HANDLE session,
2296
                          CK_VOID_PTR parameter,
2297
                          CK_ULONG parameter_len)
2298
0
{
2299
0
  BEGIN_CALL (VerifyMessageBegin)
2300
0
    IN_SESSION (session)
2301
0
    IN_POINTER (parameter)
2302
0
    IN_ULONG (parameter_len)
2303
0
  PROCESS_CALL ((self, session, parameter, parameter_len))
2304
0
  DONE_CALL
2305
0
}
2306
2307
static CK_RV
2308
log_C_VerifyMessageNext (CK_X_FUNCTION_LIST *self,
2309
                         CK_SESSION_HANDLE session,
2310
                         CK_VOID_PTR parameter,
2311
                         CK_ULONG parameter_len,
2312
                         CK_BYTE_PTR data,
2313
                         CK_ULONG data_len,
2314
                         CK_BYTE_PTR signature,
2315
                         CK_ULONG signature_len)
2316
0
{
2317
0
  BEGIN_CALL (VerifyMessageNext)
2318
0
    IN_SESSION (session)
2319
0
    IN_POINTER (parameter)
2320
0
    IN_ULONG (parameter_len)
2321
0
    IN_BYTE_ARRAY (data, data_len)
2322
0
    IN_BYTE_ARRAY (signature, signature_len)
2323
0
  PROCESS_CALL ((self, session, parameter, parameter_len, data, data_len,
2324
0
                 signature, signature_len))
2325
0
  DONE_CALL
2326
0
}
2327
2328
static CK_RV
2329
log_C_MessageVerifyFinal (CK_X_FUNCTION_LIST *self,
2330
                          CK_SESSION_HANDLE session)
2331
0
{
2332
0
  BEGIN_CALL (MessageVerifyFinal)
2333
0
    IN_SESSION (session)
2334
0
  PROCESS_CALL ((self, session))
2335
0
  DONE_CALL
2336
0
}
2337
2338
static CK_X_FUNCTION_LIST log_functions = {
2339
  { -1, -1 },
2340
  log_C_Initialize,
2341
  log_C_Finalize,
2342
  log_C_GetInfo,
2343
  log_C_GetSlotList,
2344
  log_C_GetSlotInfo,
2345
  log_C_GetTokenInfo,
2346
  log_C_GetMechanismList,
2347
  log_C_GetMechanismInfo,
2348
  log_C_InitToken,
2349
  log_C_InitPIN,
2350
  log_C_SetPIN,
2351
  log_C_OpenSession,
2352
  log_C_CloseSession,
2353
  log_C_CloseAllSessions,
2354
  log_C_GetSessionInfo,
2355
  log_C_GetOperationState,
2356
  log_C_SetOperationState,
2357
  log_C_Login,
2358
  log_C_Logout,
2359
  log_C_CreateObject,
2360
  log_C_CopyObject,
2361
  log_C_DestroyObject,
2362
  log_C_GetObjectSize,
2363
  log_C_GetAttributeValue,
2364
  log_C_SetAttributeValue,
2365
  log_C_FindObjectsInit,
2366
  log_C_FindObjects,
2367
  log_C_FindObjectsFinal,
2368
  log_C_EncryptInit,
2369
  log_C_Encrypt,
2370
  log_C_EncryptUpdate,
2371
  log_C_EncryptFinal,
2372
  log_C_DecryptInit,
2373
  log_C_Decrypt,
2374
  log_C_DecryptUpdate,
2375
  log_C_DecryptFinal,
2376
  log_C_DigestInit,
2377
  log_C_Digest,
2378
  log_C_DigestUpdate,
2379
  log_C_DigestKey,
2380
  log_C_DigestFinal,
2381
  log_C_SignInit,
2382
  log_C_Sign,
2383
  log_C_SignUpdate,
2384
  log_C_SignFinal,
2385
  log_C_SignRecoverInit,
2386
  log_C_SignRecover,
2387
  log_C_VerifyInit,
2388
  log_C_Verify,
2389
  log_C_VerifyUpdate,
2390
  log_C_VerifyFinal,
2391
  log_C_VerifyRecoverInit,
2392
  log_C_VerifyRecover,
2393
  log_C_DigestEncryptUpdate,
2394
  log_C_DecryptDigestUpdate,
2395
  log_C_SignEncryptUpdate,
2396
  log_C_DecryptVerifyUpdate,
2397
  log_C_GenerateKey,
2398
  log_C_GenerateKeyPair,
2399
  log_C_WrapKey,
2400
  log_C_UnwrapKey,
2401
  log_C_DeriveKey,
2402
  log_C_SeedRandom,
2403
  log_C_GenerateRandom,
2404
  log_C_WaitForSlotEvent,
2405
  /* PKCS #11 3.0 */
2406
  log_C_LoginUser,
2407
  log_C_SessionCancel,
2408
  log_C_MessageEncryptInit,
2409
  log_C_EncryptMessage,
2410
  log_C_EncryptMessageBegin,
2411
  log_C_EncryptMessageNext,
2412
  log_C_MessageEncryptFinal,
2413
  log_C_MessageDecryptInit,
2414
  log_C_DecryptMessage,
2415
  log_C_DecryptMessageBegin,
2416
  log_C_DecryptMessageNext,
2417
  log_C_MessageDecryptFinal,
2418
  log_C_MessageSignInit,
2419
  log_C_SignMessage,
2420
  log_C_SignMessageBegin,
2421
  log_C_SignMessageNext,
2422
  log_C_MessageSignFinal,
2423
  log_C_MessageVerifyInit,
2424
  log_C_VerifyMessage,
2425
  log_C_VerifyMessageBegin,
2426
  log_C_VerifyMessageNext,
2427
  log_C_MessageVerifyFinal
2428
};
2429
2430
void
2431
p11_log_release (void *data)
2432
0
{
2433
0
  LogData *log = (LogData *)data;
2434
2435
0
  return_if_fail (data != NULL);
2436
0
  p11_virtual_uninit (&log->virt);
2437
0
  free (log);
2438
0
}
2439
2440
p11_virtual *
2441
p11_log_subclass (p11_virtual *lower,
2442
                  p11_destroyer destroyer)
2443
0
{
2444
0
  LogData *log;
2445
2446
0
  log = calloc (1, sizeof (LogData));
2447
0
  return_val_if_fail (log != NULL, NULL);
2448
2449
0
  p11_virtual_init (&log->virt, &log_functions, lower, destroyer);
2450
0
  log->lower = &lower->funcs;
2451
0
  return &log->virt;
2452
0
}