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