1 /*
2  * COPYRIGHT (c) International Business Machines Corp. 2001-2017
3  *
4  * This program is provided under the terms of the Common Public License,
5  * version 1.0 (CPL-1.0). Any use, reproduction or distribution for this
6  * software constitutes recipient's acceptance of CPL-1.0 terms which can be
7  * found in the file LICENSE file or at
8  * https://opensource.org/licenses/cpl1.0.php
9  */
10 
11 //
12 // File: PKCS11Types.h
13 //
14 //
15 //----------------------------------------------------------------------------
16 
17 
18 #ifndef _PKCS1132_H_
19 #define _PKCS1132_H_
20 
21 
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 
26 
27 /* These are the new definitions need for the structures in
28  * leeds_stdll largs.h (and elsewhere)
29  */
30 
31 typedef unsigned int CK_ULONG_32;
32 typedef int CK_LONG_32;
33 typedef unsigned int *CK_ULONG_PTR_32;
34 
35 typedef CK_ULONG_32 CK_MECHANISM_TYPE_32;
36 typedef CK_ULONG_32 CK_SESSION_HANDLE_32;
37 typedef CK_ULONG_32 CK_SLOT_ID_32;
38 typedef CK_ULONG_32 CK_FLAGS_32;
39 typedef CK_ULONG_32 CK_USER_TYPE_32;
40 typedef CK_ULONG_32 CK_OBJECT_HANDLE_32;
41 typedef CK_OBJECT_HANDLE_32 *CK_OBJECT_HANDLE__PTR_32;
42 typedef CK_ULONG_32 CK_ATTRIBUTE_TYPE_32;
43 typedef CK_ULONG_32 CK_STATE_32;
44 typedef CK_ULONG_32 CK_OBJECT_CLASS_32;
45 
46 typedef CK_BYTE CK_PTR CK_BYTE_PTR_32;
47 typedef CK_CHAR CK_PTR CK_CHAR_PTR_32;
48 
49 typedef CK_ULONG_32 CK_MAC_GENERAL_PARAMS_32;
50 
51 typedef CK_MAC_GENERAL_PARAMS_32 CK_PTR CK_MAC_GENERAL_PARAMS_PTR_32;
52 
53 // SSL 3 Mechanism pointers for the Leeds card.
54 typedef struct CK_SSL3_RANDOM_DATA_32 {
55     CK_BYTE_PTR_32 pClientRandom;
56     CK_ULONG_32 ulClientRandomLen;
57     CK_BYTE_PTR_32 pServerRandom;
58     CK_ULONG_32 ulServerRandomLen;
59 } CK_SSL3_RANDOM_DATA_32;
60 
61 
62 typedef struct CK_SSL3_MASTER_KEY_DERIVE_PARAMS_32 {
63     CK_SSL3_RANDOM_DATA_32 RandomInfo;
64     CK_VERSION_PTR pVersion;
65 } CK_SSL3_MASTER_KEY_DERIVE_PARAMS_32;
66 
67 typedef struct CK_SSL3_MASTER_KEY_DERIVE_PARAMS_32 CK_PTR
68     CK_SSL3_MASTER_KEY_DERIVE_PARAMS_PTR_32;
69 
70 
71 typedef struct CK_SSL3_KEY_MAT_OUT_32 {
72     CK_OBJECT_HANDLE_32 hClientMacSecret;
73     CK_OBJECT_HANDLE_32 hServerMacSecret;
74     CK_OBJECT_HANDLE_32 hClientKey;
75     CK_OBJECT_HANDLE_32 hServerKey;
76     CK_BYTE_PTR_32 pIVClient;
77     CK_BYTE_PTR_32 pIVServer;
78 } CK_SSL3_KEY_MAT_OUT_32;
79 
80 typedef CK_SSL3_KEY_MAT_OUT_32 CK_PTR CK_SSL3_KEY_MAT_OUT_PTR_32;
81 
82 
83 typedef struct CK_SSL3_KEY_MAT_PARAMS_32 {
84     CK_ULONG_32 ulMacSizeInBits;
85     CK_ULONG_32 ulKeySizeInBits;
86     CK_ULONG_32 ulIVSizeInBits;
87     CK_BBOOL bIsExport;
88     CK_SSL3_RANDOM_DATA_32 RandomInfo;
89     CK_SSL3_KEY_MAT_OUT_PTR_32 pReturnedKeyMaterial;
90 } CK_SSL3_KEY_MAT_PARAMS_32;
91 
92 typedef CK_SSL3_KEY_MAT_PARAMS_32 CK_PTR CK_SSL3_KEY_MAT_PARAMS_PTR_32;
93 
94 
95 typedef struct CK_KEY_DERIVATION_STRING_DATA_32 {
96     CK_BYTE_PTR_32 pData;
97     CK_ULONG_32 ulLen;
98 } CK_KEY_DERIVATION_STRING_DATA_32;
99 
100 typedef CK_KEY_DERIVATION_STRING_DATA_32 CK_PTR
101     CK_KEY_DERIVATION_STRING_DATA_PTR_32;
102 
103 
104 typedef struct CK_TOKEN_INFO_32 {
105     CK_CHAR label[32];          /* blank padded */
106     CK_CHAR manufacturerID[32]; /* blank padded */
107     CK_CHAR model[16];          /* blank padded */
108     CK_CHAR serialNumber[16];   /* blank padded */
109     CK_FLAGS_32 flags;          /* see below */
110     // SAB FIXME needs to be 32 bit
111 
112     /* ulMaxSessionCount, ulSessionCount, ulMaxRwSessionCount,
113      * ulRwSessionCount, ulMaxPinLen, and ulMinPinLen have all been
114      * changed from CK_USHORT to CK_ULONG for v2.0 */
115     CK_ULONG_32 ulMaxSessionCount;      /* max open sessions */
116     CK_ULONG_32 ulSessionCount; /* sess. now open */
117     CK_ULONG_32 ulMaxRwSessionCount;    /* max R/W sessions */
118     CK_ULONG_32 ulRwSessionCount;       /* R/W sess. now open */
119     CK_ULONG_32 ulMaxPinLen;    /* in bytes */
120     CK_ULONG_32 ulMinPinLen;    /* in bytes */
121     CK_ULONG_32 ulTotalPublicMemory;    /* in bytes */
122     CK_ULONG_32 ulFreePublicMemory;     /* in bytes */
123     CK_ULONG_32 ulTotalPrivateMemory;   /* in bytes */
124     CK_ULONG_32 ulFreePrivateMemory;    /* in bytes */
125 
126     /* hardwareVersion, firmwareVersion, and time are new for
127      * v2.0 */
128     CK_VERSION hardwareVersion; /* version of hardware */
129     CK_VERSION firmwareVersion; /* version of firmware */
130     CK_CHAR utcTime[16];        /* time */
131 } CK_TOKEN_INFO_32;
132 
133 
134 typedef struct CK_SESSION_INFO_32 {
135     CK_SLOT_ID_32 slotID;
136     CK_STATE_32 state;
137     CK_FLAGS_32 flags;          /* see below */
138 
139     /* ulDeviceError was changed from CK_USHORT to CK_ULONG for
140      * v2.0 */
141     CK_ULONG_32 ulDeviceError;  /* device-dependent error code */
142 } CK_SESSION_INFO_32;
143 
144 
145 typedef struct CK_MECHANISM_INFO_32 {
146     CK_ULONG_32 ulMinKeySize;
147     CK_ULONG_32 ulMaxKeySize;
148     CK_FLAGS_32 flags;
149 } CK_MECHANISM_INFO_32;
150 
151 /* CK_MECHANISM_32 is a structure that specifies a particular
152  * mechanism  */
153 typedef struct CK_MECHANISM_32 {
154     CK_MECHANISM_TYPE_32 mechanism;
155     CK_VOID_PTR pParameter;
156 
157     /* ulParameterLen was changed from CK_USHORT to CK_ULONG for
158      * v2.0 */
159     CK_ULONG_32 ulParameterLen; /* in bytes */
160 } CK_MECHANISM_32;
161 
162 /* CK_ATTRIBUTE is a structure that includes the type, length
163  * and value of an attribute */
164 typedef struct CK_ATTRIBUTE_32 {
165     CK_ATTRIBUTE_TYPE_32 type;
166     CK_ULONG_32 pValue;         // SAB XXX XXX Was CK_VOID_PTR which is 64Bit
167 
168     /* ulValueLen went from CK_USHORT to CK_ULONG for v2.0 */
169     CK_ULONG_32 ulValueLen;     /* in bytes */
170 } CK_ATTRIBUTE_32;
171 
172 
173 
174 #pragma pack()
175 
176 
177 #ifdef __cplusplus
178 }
179 #endif
180 
181 #endif                          // _PKCS1132_HS_H_
182