File: pkcs11.c

package info (click to toggle)
valgrind 1%3A3.24.0-3
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 176,332 kB
  • sloc: ansic: 795,029; exp: 26,134; xml: 23,472; asm: 14,393; cpp: 9,397; makefile: 7,464; sh: 6,122; perl: 5,446; python: 1,498; javascript: 981; awk: 166; csh: 1
file content (64 lines) | stat: -rw-r--r-- 1,480 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/* Test for PKCS#11 calls. */ 

#include <stdio.h>
#include <security/cryptoki.h>
#include <security/pkcs11.h>

int main(void)
{
   CK_RV ret = C_Initialize(NULL);
   if (ret != CKR_OK) {
      fprintf(stderr, "Initialize: %lu\n", ret);
      return 1;
   }

   CK_ULONG slot_count;
   ret = C_GetSlotList(0, NULL, &slot_count);
   if (ret != CKR_OK) {
      fprintf(stderr, "GetSlotList(NULL): %lu\n", ret);
      return 1;
   }

   CK_SLOT_ID_PTR slots = malloc(slot_count * sizeof(CK_SLOT_ID));
   if (slots == NULL) {
      fprintf(stderr, "malloc(slots)\n");
      return 1;
   }

   ret = C_GetSlotList(0, slots, &slot_count);
   if (ret != CKR_OK) {
      fprintf(stderr, "GetSlotList(slots): %lu\n", ret);
      return 1;
   }

   CK_ULONG i;
   for (i = 0; i < slot_count; i++) {
      CK_SLOT_ID slot_id = slots[i];

      CK_ULONG mech_count;
      ret = C_GetMechanismList(slot_id, NULL, &mech_count);
      if (ret != CKR_OK) {
         fprintf(stderr, "GetMechanismList(NULL): %lu\n", ret);
         return 1;
      }

      CK_MECHANISM_TYPE_PTR mechs = malloc(mech_count * sizeof(CK_MECHANISM_TYPE));
      if (slots == NULL) {
         fprintf(stderr, "malloc(mechs)\n");
         return 1;
      }

      ret = C_GetMechanismList(slot_id, mechs, &mech_count);
      if (ret != CKR_OK) {
         fprintf(stderr, "GetMechanismList(mechs): %lu\n", ret);
         return 1;
      }

      free(mechs);
   }

   free(slots);
   C_Finalize(NULL_PTR);
   return 0;
}