blob: 978558e64b9bb5ea575cbc274c578d1a5640d291 [file] [log] [blame]
Etienne Carriere109c1d72019-01-09 11:02:02 +01001/*
2 * Copyright (c) 2018, Linaro Limited
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License Version 2 as
6 * published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 */
13
Etienne Carrierefa7e34f2020-02-04 15:34:16 +010014#include <ck_debug.h>
Etienne Carriere109c1d72019-01-09 11:02:02 +010015#include <inttypes.h>
Etienne Carriere109c1d72019-01-09 11:02:02 +010016#include <pkcs11.h>
Etienne Carrierefa7e34f2020-02-04 15:34:16 +010017#include <stdio.h>
18#include <stdlib.h>
19#include <string.h>
Etienne Carriere109c1d72019-01-09 11:02:02 +010020
21#include "xtest_test.h"
22#include "xtest_helpers.h"
23
24static void xtest_tee_test_1000(ADBG_Case_t *c)
25{
26 CK_RV rv;
27
28 rv = C_Initialize(NULL);
29 if (!ADBG_EXPECT_CK_OK(c, rv))
30 return;
31
32 rv = C_Finalize(NULL);
33 if (!ADBG_EXPECT_CK_OK(c, rv))
34 return;
35
36 rv = C_Initialize(NULL);
37 if (!ADBG_EXPECT_CK_OK(c, rv))
38 return;
39
40 rv = C_Initialize(NULL);
41 ADBG_EXPECT_CK_RESULT(c, CKR_CRYPTOKI_ALREADY_INITIALIZED, rv);
42
43 rv = C_Finalize(NULL);
44 ADBG_EXPECT_CK_OK(c, rv);
Etienne Carriere21f4e3c2020-02-05 15:40:24 +010045
46 rv = C_Finalize(NULL);
47 ADBG_EXPECT_CK_RESULT(c, CKR_CRYPTOKI_NOT_INITIALIZED, rv);
Etienne Carriere109c1d72019-01-09 11:02:02 +010048}
49
50ADBG_CASE_DEFINE(pkcs11, 1000, xtest_tee_test_1000,
51 "Initialize and close Cryptoki library");
Etienne Carrierefa7e34f2020-02-04 15:34:16 +010052
53static void xtest_tee_test_1001(ADBG_Case_t *c)
54{
55 CK_RV rv = CKR_GENERAL_ERROR;
56 CK_SLOT_ID_PTR slot_ids = NULL;
57 CK_ULONG slot_count = 0;
58 CK_ULONG present_slot_count = 0;
59 CK_INFO lib_info = { };
60 CK_SLOT_INFO slot_info = { };
Etienne Carriere6818d5f2020-03-04 15:34:50 +010061 CK_TOKEN_INFO token_info = { };
Etienne Carrierefa7e34f2020-02-04 15:34:16 +010062 CK_FUNCTION_LIST_PTR ckfunc_list = NULL;
63 size_t i = 0;
64 CK_SLOT_ID max_slot_id = 0;
65
66 rv = C_Initialize(NULL);
67 if (!ADBG_EXPECT_CK_OK(c, rv))
68 return;
69
Etienne Carrieree90a4e42020-03-02 12:04:08 +010070 Do_ADBG_BeginSubCase(c, "Test C_GetFunctionList()");
71
Etienne Carrierefa7e34f2020-02-04 15:34:16 +010072 rv = C_GetFunctionList(&ckfunc_list);
73 if (!ADBG_EXPECT_CK_OK(c, rv))
74 goto out;
75
76 if (!ADBG_EXPECT_NOT_NULL(c, ckfunc_list->C_GetInfo) ||
77 !ADBG_EXPECT_NOT_NULL(c, ckfunc_list->C_GetSlotList) ||
Etienne Carriere6818d5f2020-03-04 15:34:50 +010078 !ADBG_EXPECT_NOT_NULL(c, ckfunc_list->C_GetSlotInfo) ||
79 !ADBG_EXPECT_NOT_NULL(c, ckfunc_list->C_GetTokenInfo))
Etienne Carrierefa7e34f2020-02-04 15:34:16 +010080 goto out;
81
Etienne Carrieree90a4e42020-03-02 12:04:08 +010082 Do_ADBG_EndSubCase(c, "Test C_GetFunctionList()");
83 Do_ADBG_BeginSubCase(c, "Test C_GetInfo()");
84
Etienne Carrierefa7e34f2020-02-04 15:34:16 +010085 rv = C_GetInfo(&lib_info);
86 if (!ADBG_EXPECT_CK_OK(c, rv))
87 goto out;
88
Etienne Carrieree90a4e42020-03-02 12:04:08 +010089 Do_ADBG_EndSubCase(c, "Test C_GetInfo()");
90 Do_ADBG_BeginSubCase(c, "Test C_GetSlotList()");
91
Etienne Carrierefa7e34f2020-02-04 15:34:16 +010092 rv = C_GetSlotList(0, NULL, &slot_count);
93 if (!ADBG_EXPECT_CK_OK(c, rv))
94 goto out;
95
96 if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, slot_count, !=, 0))
97 goto out;
98
99 rv = C_GetSlotList(1, NULL, &present_slot_count);
100 if (!ADBG_EXPECT_CK_OK(c, rv))
101 goto out;
102
103 if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, slot_count, ==,
104 present_slot_count))
105 goto out;
106
107 slot_ids = calloc(slot_count, sizeof(CK_SLOT_ID));
108 if (!ADBG_EXPECT_NOT_NULL(c, slot_ids))
109 goto out;
110
111 slot_count--;
112 rv = C_GetSlotList(1, slot_ids, &slot_count);
113 if (!ADBG_EXPECT_CK_RESULT(c, CKR_BUFFER_TOO_SMALL, rv))
114 goto out;
115
116 rv = C_GetSlotList(1, slot_ids, &slot_count);
117 if (!ADBG_EXPECT_CK_OK(c, rv))
118 goto out;
119
Etienne Carrieree90a4e42020-03-02 12:04:08 +0100120 Do_ADBG_EndSubCase(c, "Test C_GetSlotList()");
Etienne Carriere6818d5f2020-03-04 15:34:50 +0100121 Do_ADBG_BeginSubCase(c, "Test C_Get{Slot|Token}Info()");
Etienne Carrieree90a4e42020-03-02 12:04:08 +0100122
Etienne Carrierefa7e34f2020-02-04 15:34:16 +0100123 for (i = 0; i < slot_count; i++) {
124 CK_SLOT_ID slot = slot_ids[i];
125
126 rv = C_GetSlotInfo(slot, &slot_info);
127 if (!ADBG_EXPECT_CK_OK(c, rv))
128 goto out;
129
Etienne Carriere6818d5f2020-03-04 15:34:50 +0100130 rv = C_GetTokenInfo(slot, &token_info);
131 if (!ADBG_EXPECT_CK_OK(c, rv))
132 goto out;
133
Etienne Carrierefa7e34f2020-02-04 15:34:16 +0100134 if (max_slot_id < slot)
135 max_slot_id = slot;
136 }
137
Etienne Carriere6818d5f2020-03-04 15:34:50 +0100138 Do_ADBG_EndSubCase(c, "Test C_Get{Slot|Token}Info()");
Etienne Carrieree90a4e42020-03-02 12:04:08 +0100139 Do_ADBG_BeginSubCase(c, "Test C_Get*Info() with invalid reference");
140
Etienne Carrierefa7e34f2020-02-04 15:34:16 +0100141 rv = C_GetSlotInfo(max_slot_id + 1, &slot_info);
142 if (!ADBG_EXPECT_CK_RESULT(c, CKR_SLOT_ID_INVALID, rv))
143 goto out;
144
Etienne Carriere6818d5f2020-03-04 15:34:50 +0100145 rv = C_GetTokenInfo(max_slot_id + 1, &token_info);
146 if (!ADBG_EXPECT_CK_RESULT(c, CKR_SLOT_ID_INVALID, rv))
147 goto out;
148
Etienne Carrierefa7e34f2020-02-04 15:34:16 +0100149 rv = C_GetSlotInfo(ULONG_MAX, &slot_info);
150 if (!ADBG_EXPECT_CK_RESULT(c, CKR_SLOT_ID_INVALID, rv))
151 goto out;
152
Etienne Carriere6818d5f2020-03-04 15:34:50 +0100153 rv = C_GetTokenInfo(ULONG_MAX, &token_info);
154 if (!ADBG_EXPECT_CK_RESULT(c, CKR_SLOT_ID_INVALID, rv))
155 goto out;
156
Etienne Carrierefa7e34f2020-02-04 15:34:16 +0100157out:
Etienne Carrieree90a4e42020-03-02 12:04:08 +0100158 Do_ADBG_EndSubCase(c, NULL);
Etienne Carrierefa7e34f2020-02-04 15:34:16 +0100159 free(slot_ids);
160
161 rv = C_Finalize(NULL);
162 ADBG_EXPECT_CK_OK(c, rv);
163}
164
165ADBG_CASE_DEFINE(pkcs11, 1001, xtest_tee_test_1001,
166 "PKCS11: List PKCS#11 slots and get information from");