OLD | NEW |
| (Empty) |
1 /* This Source Code Form is subject to the terms of the Mozilla Public | |
2 * License, v. 2.0. If a copy of the MPL was not distributed with this | |
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | |
4 | |
5 #ifdef DEBUG | |
6 static const char CVS_ID[] = "@(#) $RCSfile: bobject.c,v $ $Revision: 1.5 $ $Dat
e: 2012/04/25 14:49:29 $"; | |
7 #endif /* DEBUG */ | |
8 | |
9 #include "builtins.h" | |
10 | |
11 /* | |
12 * builtins/object.c | |
13 * | |
14 * This file implements the NSSCKMDObject object for the | |
15 * "builtin objects" cryptoki module. | |
16 */ | |
17 | |
18 /* | |
19 * Finalize - unneeded | |
20 * Destroy - CKR_SESSION_READ_ONLY | |
21 * IsTokenObject - CK_TRUE | |
22 * GetAttributeCount | |
23 * GetAttributeTypes | |
24 * GetAttributeSize | |
25 * GetAttribute | |
26 * SetAttribute - unneeded | |
27 * GetObjectSize | |
28 */ | |
29 | |
30 static CK_RV | |
31 builtins_mdObject_Destroy | |
32 ( | |
33 NSSCKMDObject *mdObject, | |
34 NSSCKFWObject *fwObject, | |
35 NSSCKMDSession *mdSession, | |
36 NSSCKFWSession *fwSession, | |
37 NSSCKMDToken *mdToken, | |
38 NSSCKFWToken *fwToken, | |
39 NSSCKMDInstance *mdInstance, | |
40 NSSCKFWInstance *fwInstance | |
41 ) | |
42 { | |
43 return CKR_SESSION_READ_ONLY; | |
44 } | |
45 | |
46 static CK_BBOOL | |
47 builtins_mdObject_IsTokenObject | |
48 ( | |
49 NSSCKMDObject *mdObject, | |
50 NSSCKFWObject *fwObject, | |
51 NSSCKMDSession *mdSession, | |
52 NSSCKFWSession *fwSession, | |
53 NSSCKMDToken *mdToken, | |
54 NSSCKFWToken *fwToken, | |
55 NSSCKMDInstance *mdInstance, | |
56 NSSCKFWInstance *fwInstance | |
57 ) | |
58 { | |
59 return CK_TRUE; | |
60 } | |
61 | |
62 static CK_ULONG | |
63 builtins_mdObject_GetAttributeCount | |
64 ( | |
65 NSSCKMDObject *mdObject, | |
66 NSSCKFWObject *fwObject, | |
67 NSSCKMDSession *mdSession, | |
68 NSSCKFWSession *fwSession, | |
69 NSSCKMDToken *mdToken, | |
70 NSSCKFWToken *fwToken, | |
71 NSSCKMDInstance *mdInstance, | |
72 NSSCKFWInstance *fwInstance, | |
73 CK_RV *pError | |
74 ) | |
75 { | |
76 builtinsInternalObject *io = (builtinsInternalObject *)mdObject->etc; | |
77 return io->n; | |
78 } | |
79 | |
80 static CK_RV | |
81 builtins_mdObject_GetAttributeTypes | |
82 ( | |
83 NSSCKMDObject *mdObject, | |
84 NSSCKFWObject *fwObject, | |
85 NSSCKMDSession *mdSession, | |
86 NSSCKFWSession *fwSession, | |
87 NSSCKMDToken *mdToken, | |
88 NSSCKFWToken *fwToken, | |
89 NSSCKMDInstance *mdInstance, | |
90 NSSCKFWInstance *fwInstance, | |
91 CK_ATTRIBUTE_TYPE_PTR typeArray, | |
92 CK_ULONG ulCount | |
93 ) | |
94 { | |
95 builtinsInternalObject *io = (builtinsInternalObject *)mdObject->etc; | |
96 CK_ULONG i; | |
97 | |
98 if( io->n != ulCount ) { | |
99 return CKR_BUFFER_TOO_SMALL; | |
100 } | |
101 | |
102 for( i = 0; i < io->n; i++ ) { | |
103 typeArray[i] = io->types[i]; | |
104 } | |
105 | |
106 return CKR_OK; | |
107 } | |
108 | |
109 static CK_ULONG | |
110 builtins_mdObject_GetAttributeSize | |
111 ( | |
112 NSSCKMDObject *mdObject, | |
113 NSSCKFWObject *fwObject, | |
114 NSSCKMDSession *mdSession, | |
115 NSSCKFWSession *fwSession, | |
116 NSSCKMDToken *mdToken, | |
117 NSSCKFWToken *fwToken, | |
118 NSSCKMDInstance *mdInstance, | |
119 NSSCKFWInstance *fwInstance, | |
120 CK_ATTRIBUTE_TYPE attribute, | |
121 CK_RV *pError | |
122 ) | |
123 { | |
124 builtinsInternalObject *io = (builtinsInternalObject *)mdObject->etc; | |
125 CK_ULONG i; | |
126 | |
127 for( i = 0; i < io->n; i++ ) { | |
128 if( attribute == io->types[i] ) { | |
129 return (CK_ULONG)(io->items[i].size); | |
130 } | |
131 } | |
132 | |
133 *pError = CKR_ATTRIBUTE_TYPE_INVALID; | |
134 return 0; | |
135 } | |
136 | |
137 static NSSCKFWItem | |
138 builtins_mdObject_GetAttribute | |
139 ( | |
140 NSSCKMDObject *mdObject, | |
141 NSSCKFWObject *fwObject, | |
142 NSSCKMDSession *mdSession, | |
143 NSSCKFWSession *fwSession, | |
144 NSSCKMDToken *mdToken, | |
145 NSSCKFWToken *fwToken, | |
146 NSSCKMDInstance *mdInstance, | |
147 NSSCKFWInstance *fwInstance, | |
148 CK_ATTRIBUTE_TYPE attribute, | |
149 CK_RV *pError | |
150 ) | |
151 { | |
152 NSSCKFWItem mdItem; | |
153 builtinsInternalObject *io = (builtinsInternalObject *)mdObject->etc; | |
154 CK_ULONG i; | |
155 | |
156 mdItem.needsFreeing = PR_FALSE; | |
157 mdItem.item = (NSSItem*) NULL; | |
158 | |
159 for( i = 0; i < io->n; i++ ) { | |
160 if( attribute == io->types[i] ) { | |
161 mdItem.item = (NSSItem*) &io->items[i]; | |
162 return mdItem; | |
163 } | |
164 } | |
165 | |
166 *pError = CKR_ATTRIBUTE_TYPE_INVALID; | |
167 return mdItem; | |
168 } | |
169 | |
170 static CK_ULONG | |
171 builtins_mdObject_GetObjectSize | |
172 ( | |
173 NSSCKMDObject *mdObject, | |
174 NSSCKFWObject *fwObject, | |
175 NSSCKMDSession *mdSession, | |
176 NSSCKFWSession *fwSession, | |
177 NSSCKMDToken *mdToken, | |
178 NSSCKFWToken *fwToken, | |
179 NSSCKMDInstance *mdInstance, | |
180 NSSCKFWInstance *fwInstance, | |
181 CK_RV *pError | |
182 ) | |
183 { | |
184 builtinsInternalObject *io = (builtinsInternalObject *)mdObject->etc; | |
185 CK_ULONG i; | |
186 CK_ULONG rv = sizeof(CK_ULONG); | |
187 | |
188 for( i = 0; i < io->n; i++ ) { | |
189 rv += sizeof(CK_ATTRIBUTE_TYPE) + sizeof(NSSItem) + io->items[i].size; | |
190 } | |
191 | |
192 return rv; | |
193 } | |
194 | |
195 static const NSSCKMDObject | |
196 builtins_prototype_mdObject = { | |
197 (void *)NULL, /* etc */ | |
198 NULL, /* Finalize */ | |
199 builtins_mdObject_Destroy, | |
200 builtins_mdObject_IsTokenObject, | |
201 builtins_mdObject_GetAttributeCount, | |
202 builtins_mdObject_GetAttributeTypes, | |
203 builtins_mdObject_GetAttributeSize, | |
204 builtins_mdObject_GetAttribute, | |
205 NULL, /* FreeAttribute */ | |
206 NULL, /* SetAttribute */ | |
207 builtins_mdObject_GetObjectSize, | |
208 (void *)NULL /* null terminator */ | |
209 }; | |
210 | |
211 NSS_IMPLEMENT NSSCKMDObject * | |
212 nss_builtins_CreateMDObject | |
213 ( | |
214 NSSArena *arena, | |
215 builtinsInternalObject *io, | |
216 CK_RV *pError | |
217 ) | |
218 { | |
219 if ( (void*)NULL == io->mdObject.etc) { | |
220 (void) nsslibc_memcpy(&io->mdObject,&builtins_prototype_mdObject, | |
221 sizeof(builtins_prototype_mdObject)); | |
222 io->mdObject.etc = (void *)io; | |
223 } | |
224 | |
225 return &io->mdObject; | |
226 } | |
OLD | NEW |