1 /* ****************************************************************************
2 
3  * eID Middleware Project.
4  * Copyright (C) 2014 FedICT.
5  *
6  * This is free software; you can redistribute it and/or modify it
7  * under the terms of the GNU Lesser General Public License version
8  * 3.0 as published by the Free Software Foundation.
9  *
10  * This software is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this software; if not, see
17  * http://www.gnu.org/licenses/.
18 
19 **************************************************************************** */
20 #ifdef WIN32
21 #include <win32.h>
22 #pragma pack(push, cryptoki, 1)
23 #include "pkcs11.h"
24 #pragma pack(pop, cryptoki)
25 #else
26 #include <unix.h>
27 #include <pkcs11.h>
28 #endif
29 #include <stdio.h>
30 
31 #include "testlib.h"
32 
33 /*
34  * Check that C_GetFunctionList returns a table of function pointers that point to the right location
35  */
36 
TEST_FUNC(funclist)37 TEST_FUNC(funclist) {
38 	CK_FUNCTION_LIST_PTR ptr;
39 
40 	check_rv_long(C_GetFunctionList(NULL_PTR), m_p11_badarg);
41 	check_rv(C_GetFunctionList(&ptr));
42 	verbose_assert(ptr->C_Initialize == C_Initialize);
43 	verbose_assert(ptr->C_Finalize == C_Finalize);
44 	verbose_assert(ptr->C_GetInfo == C_GetInfo);
45 	verbose_assert(ptr->C_GetFunctionList == C_GetFunctionList);
46 	verbose_assert(ptr->C_GetSlotList == C_GetSlotList);
47 	verbose_assert(ptr->C_GetSlotInfo == C_GetSlotInfo);
48 	verbose_assert(ptr->C_GetTokenInfo == C_GetTokenInfo);
49 	verbose_assert(ptr->C_GetMechanismList == C_GetMechanismList);
50 	verbose_assert(ptr->C_GetMechanismInfo == C_GetMechanismInfo);
51 	verbose_assert(ptr->C_InitToken == C_InitToken);
52 	verbose_assert(ptr->C_InitPIN == C_InitPIN);
53 	verbose_assert(ptr->C_SetPIN == C_SetPIN);
54 	verbose_assert(ptr->C_OpenSession == C_OpenSession);
55 	verbose_assert(ptr->C_CloseSession == C_CloseSession);
56 	verbose_assert(ptr->C_CloseAllSessions == C_CloseAllSessions);
57 	verbose_assert(ptr->C_GetSessionInfo == C_GetSessionInfo);
58 	verbose_assert(ptr->C_GetOperationState == C_GetOperationState);
59 	verbose_assert(ptr->C_SetOperationState == C_SetOperationState);
60 	verbose_assert(ptr->C_Login == C_Login);
61 	verbose_assert(ptr->C_Logout == C_Logout);
62 	verbose_assert(ptr->C_CreateObject == C_CreateObject);
63 	verbose_assert(ptr->C_CopyObject == C_CopyObject);
64 	verbose_assert(ptr->C_DestroyObject == C_DestroyObject);
65 	verbose_assert(ptr->C_GetObjectSize == C_GetObjectSize);
66 	verbose_assert(ptr->C_GetAttributeValue == C_GetAttributeValue);
67 	verbose_assert(ptr->C_SetAttributeValue == C_SetAttributeValue);
68 	verbose_assert(ptr->C_FindObjectsInit == C_FindObjectsInit);
69 	verbose_assert(ptr->C_FindObjects == C_FindObjects);
70 	verbose_assert(ptr->C_FindObjectsFinal == C_FindObjectsFinal);
71 	verbose_assert(ptr->C_EncryptInit == C_EncryptInit);
72 	verbose_assert(ptr->C_Encrypt == C_Encrypt);
73 	verbose_assert(ptr->C_EncryptUpdate == C_EncryptUpdate);
74 	verbose_assert(ptr->C_EncryptFinal == C_EncryptFinal);
75 	verbose_assert(ptr->C_DecryptInit == C_DecryptInit);
76 	verbose_assert(ptr->C_Decrypt == C_Decrypt);
77 	verbose_assert(ptr->C_DecryptUpdate == C_DecryptUpdate);
78 	verbose_assert(ptr->C_DecryptFinal == C_DecryptFinal);
79 	verbose_assert(ptr->C_DigestInit == C_DigestInit);
80 	verbose_assert(ptr->C_Digest == C_Digest);
81 	verbose_assert(ptr->C_DigestUpdate == C_DigestUpdate);
82 	verbose_assert(ptr->C_DigestKey == C_DigestKey);
83 	verbose_assert(ptr->C_DigestFinal == C_DigestFinal);
84 	verbose_assert(ptr->C_SignInit == C_SignInit);
85 	verbose_assert(ptr->C_Sign == C_Sign);
86 	verbose_assert(ptr->C_SignUpdate == C_SignUpdate);
87 	verbose_assert(ptr->C_SignFinal == C_SignFinal);
88 	verbose_assert(ptr->C_SignRecoverInit == C_SignRecoverInit);
89 	verbose_assert(ptr->C_SignRecover == C_SignRecover);
90 	verbose_assert(ptr->C_VerifyInit == C_VerifyInit);
91 	verbose_assert(ptr->C_Verify == C_Verify);
92 	verbose_assert(ptr->C_VerifyUpdate == C_VerifyUpdate);
93 	verbose_assert(ptr->C_VerifyFinal == C_VerifyFinal);
94 	verbose_assert(ptr->C_VerifyRecoverInit == C_VerifyRecoverInit);
95 	verbose_assert(ptr->C_VerifyRecover == C_VerifyRecover);
96 	verbose_assert(ptr->C_DigestEncryptUpdate == C_DigestEncryptUpdate);
97 	verbose_assert(ptr->C_DecryptDigestUpdate == C_DecryptDigestUpdate);
98 	verbose_assert(ptr->C_SignEncryptUpdate == C_SignEncryptUpdate);
99 	verbose_assert(ptr->C_DecryptVerifyUpdate == C_DecryptVerifyUpdate);
100 	verbose_assert(ptr->C_GenerateKey == C_GenerateKey);
101 	verbose_assert(ptr->C_GenerateKeyPair == C_GenerateKeyPair);
102 	verbose_assert(ptr->C_WrapKey == C_WrapKey);
103 	verbose_assert(ptr->C_UnwrapKey == C_UnwrapKey);
104 	verbose_assert(ptr->C_DeriveKey == C_DeriveKey);
105 	verbose_assert(ptr->C_SeedRandom == C_SeedRandom);
106 	verbose_assert(ptr->C_GenerateRandom == C_GenerateRandom);
107 	verbose_assert(ptr->C_GetFunctionStatus == C_GetFunctionStatus);
108 	verbose_assert(ptr->C_CancelFunction == C_CancelFunction);
109 	verbose_assert(ptr->C_WaitForSlotEvent == C_WaitForSlotEvent);
110 
111 	return TEST_RV_OK;
112 }
113