File: | libxmlsec/unxlngi6.pro/misc/build/xmlsec1-1.2.14/src/keysdata.c |
Location: | line 257, column 5 |
Description: | Value stored to 'ret' is never read |
1 | /** |
2 | * XML Security Library (http://www.aleksey.com/xmlsec). |
3 | * |
4 | * Key data. |
5 | * |
6 | * This is free software; see Copyright file in the source |
7 | * distribution for preciese wording. |
8 | * |
9 | * Copyright (C) 2002-2003 Aleksey Sanin <aleksey@aleksey.com> |
10 | */ |
11 | |
12 | #include "globals.h" |
13 | |
14 | #include <stdlib.h> |
15 | #include <string.h> |
16 | |
17 | #include <libxml/tree.h> |
18 | |
19 | #include <xmlsec/xmlsec.h> |
20 | #include <xmlsec/xmltree.h> |
21 | #include <xmlsec/keys.h> |
22 | #include <xmlsec/keyinfo.h> |
23 | #include <xmlsec/transforms.h> |
24 | #include <xmlsec/base64.h> |
25 | #include <xmlsec/keyinfo.h> |
26 | #include <xmlsec/errors.h> |
27 | |
28 | |
29 | /************************************************************************** |
30 | * |
31 | * Global xmlSecKeyDataIds list functions |
32 | * |
33 | *************************************************************************/ |
34 | static xmlSecPtrList xmlSecAllKeyDataIds; |
35 | |
36 | /** |
37 | * xmlSecKeyDataIdsGet: |
38 | * |
39 | * Gets global registered key data klasses list. |
40 | * |
41 | * Returns: the pointer to list of all registered key data klasses. |
42 | */ |
43 | xmlSecPtrListPtr |
44 | xmlSecKeyDataIdsGet(void) { |
45 | return(&xmlSecAllKeyDataIds); |
46 | } |
47 | |
48 | /** |
49 | * xmlSecKeyDataIdsInit: |
50 | * |
51 | * Initializes the key data klasses. This function is called from the |
52 | * #xmlSecInit function and the application should not call it directly. |
53 | * |
54 | * Returns: 0 on success or a negative value if an error occurs. |
55 | */ |
56 | int |
57 | xmlSecKeyDataIdsInit(void) { |
58 | int ret; |
59 | |
60 | ret = xmlSecPtrListInitialize(xmlSecKeyDataIdsGet(), xmlSecKeyDataIdListIdxmlSecKeyDataIdListGetKlass()); |
61 | if(ret < 0) { |
62 | xmlSecError(XMLSEC_ERRORS_HERE"keysdata.c",62,__FUNCTION__, |
63 | NULL((void*)0), |
64 | "xmlSecPtrListPtrInitialize", |
65 | XMLSEC_ERRORS_R_XMLSEC_FAILED1, |
66 | "xmlSecKeyDataIdListId"); |
67 | return(-1); |
68 | } |
69 | |
70 | ret = xmlSecKeyDataIdsRegisterDefault(); |
71 | if(ret < 0) { |
72 | xmlSecError(XMLSEC_ERRORS_HERE"keysdata.c",72,__FUNCTION__, |
73 | NULL((void*)0), |
74 | "xmlSecKeyDataIdsRegisterDefault", |
75 | XMLSEC_ERRORS_R_XMLSEC_FAILED1, |
76 | XMLSEC_ERRORS_NO_MESSAGE" "); |
77 | return(-1); |
78 | } |
79 | |
80 | return(0); |
81 | } |
82 | |
83 | /** |
84 | * xmlSecKeyDataIdsShutdown: |
85 | * |
86 | * Shuts down the keys data klasses. This function is called from the |
87 | * #xmlSecShutdown function and the application should not call it directly. |
88 | */ |
89 | void |
90 | xmlSecKeyDataIdsShutdown(void) { |
91 | xmlSecPtrListFinalize(xmlSecKeyDataIdsGet()); |
92 | } |
93 | |
94 | /** |
95 | * xmlSecKeyDataIdsRegister: |
96 | * @id: the key data klass. |
97 | * |
98 | * Registers @id in the global list of key data klasses. |
99 | * |
100 | * Returns: 0 on success or a negative value if an error occurs. |
101 | */ |
102 | int |
103 | xmlSecKeyDataIdsRegister(xmlSecKeyDataId id) { |
104 | int ret; |
105 | |
106 | xmlSecAssert2(id != xmlSecKeyDataIdUnknown, -1)if(!( id != ((xmlSecKeyDataId)((void*)0)) ) ) { xmlSecError("keysdata.c" ,106,__FUNCTION__, ((void*)0), "id != xmlSecKeyDataIdUnknown" , 100, " "); return(-1); }; |
107 | |
108 | ret = xmlSecPtrListAdd(xmlSecKeyDataIdsGet(), (xmlSecPtr)id); |
109 | if(ret < 0) { |
110 | xmlSecError(XMLSEC_ERRORS_HERE"keysdata.c",110,__FUNCTION__, |
111 | NULL((void*)0), |
112 | "xmlSecPtrListAdd", |
113 | XMLSEC_ERRORS_R_XMLSEC_FAILED1, |
114 | "dataId=%s", |
115 | xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id))((((((id)) ? ((id)->name) : ((void*)0))) != ((void*)0)) ? ( (char*)((((id)) ? ((id)->name) : ((void*)0)))) : (char*)"NULL" )); |
116 | return(-1); |
117 | } |
118 | |
119 | return(0); |
120 | } |
121 | |
122 | /** |
123 | * xmlSecKeyDataIdsRegisterDefault: |
124 | * |
125 | * Registers default (implemented by XML Security Library) |
126 | * key data klasses: <dsig:KeyName/> element processing klass, |
127 | * <dsig:KeyValue/> element processing klass, ... |
128 | * |
129 | * Returns: 0 on success or a negative value if an error occurs. |
130 | */ |
131 | int |
132 | xmlSecKeyDataIdsRegisterDefault(void) { |
133 | if(xmlSecKeyDataIdsRegister(xmlSecKeyDataNameIdxmlSecKeyDataNameGetKlass()) < 0) { |
134 | xmlSecError(XMLSEC_ERRORS_HERE"keysdata.c",134,__FUNCTION__, |
135 | NULL((void*)0), |
136 | "xmlSecKeyDataIdsRegister", |
137 | XMLSEC_ERRORS_R_XMLSEC_FAILED1, |
138 | "xmlSecKeyDataNameId"); |
139 | return(-1); |
140 | } |
141 | |
142 | if(xmlSecKeyDataIdsRegister(xmlSecKeyDataValueIdxmlSecKeyDataValueGetKlass()) < 0) { |
143 | xmlSecError(XMLSEC_ERRORS_HERE"keysdata.c",143,__FUNCTION__, |
144 | NULL((void*)0), |
145 | "xmlSecKeyDataIdsRegister", |
146 | XMLSEC_ERRORS_R_XMLSEC_FAILED1, |
147 | "xmlSecKeyDataValueId"); |
148 | return(-1); |
149 | } |
150 | |
151 | if(xmlSecKeyDataIdsRegister(xmlSecKeyDataRetrievalMethodIdxmlSecKeyDataRetrievalMethodGetKlass()) < 0) { |
152 | xmlSecError(XMLSEC_ERRORS_HERE"keysdata.c",152,__FUNCTION__, |
153 | NULL((void*)0), |
154 | "xmlSecKeyDataIdsRegister", |
155 | XMLSEC_ERRORS_R_XMLSEC_FAILED1, |
156 | "xmlSecKeyDataRetrievalMethodId"); |
157 | return(-1); |
158 | } |
159 | |
160 | #ifndef XMLSEC_NO_XMLENC |
161 | if(xmlSecKeyDataIdsRegister(xmlSecKeyDataEncryptedKeyIdxmlSecKeyDataEncryptedKeyGetKlass()) < 0) { |
162 | xmlSecError(XMLSEC_ERRORS_HERE"keysdata.c",162,__FUNCTION__, |
163 | NULL((void*)0), |
164 | "xmlSecKeyDataIdsRegister", |
165 | XMLSEC_ERRORS_R_XMLSEC_FAILED1, |
166 | "xmlSecKeyDataEncryptedKeyId"); |
167 | return(-1); |
168 | } |
169 | #endif /* XMLSEC_NO_XMLENC */ |
170 | |
171 | return(0); |
172 | } |
173 | |
174 | /************************************************************************** |
175 | * |
176 | * xmlSecKeyData functions |
177 | * |
178 | *************************************************************************/ |
179 | /** |
180 | * xmlSecKeyDataCreate: |
181 | * @id: the data id. |
182 | * |
183 | * Allocates and initializes new key data of the specified type @id. |
184 | * Caller is responsible for destroing returend object with |
185 | * #xmlSecKeyDataDestroy function. |
186 | * |
187 | * Returns: the pointer to newly allocated key data structure |
188 | * or NULL if an error occurs. |
189 | */ |
190 | xmlSecKeyDataPtr |
191 | xmlSecKeyDataCreate(xmlSecKeyDataId id) { |
192 | xmlSecKeyDataPtr data; |
193 | int ret; |
194 | |
195 | xmlSecAssert2(id != NULL, NULL)if(!( id != ((void*)0) ) ) { xmlSecError("keysdata.c",195,__FUNCTION__ , ((void*)0), "id != NULL", 100, " "); return(((void*)0)); }; |
196 | xmlSecAssert2(id->klassSize >= sizeof(xmlSecKeyDataKlass), NULL)if(!( id->klassSize >= sizeof(xmlSecKeyDataKlass) ) ) { xmlSecError("keysdata.c",196,__FUNCTION__, ((void*)0), "id->klassSize >= sizeof(xmlSecKeyDataKlass)" , 100, " "); return(((void*)0)); }; |
197 | xmlSecAssert2(id->objSize >= sizeof(xmlSecKeyData), NULL)if(!( id->objSize >= sizeof(xmlSecKeyData) ) ) { xmlSecError ("keysdata.c",197,__FUNCTION__, ((void*)0), "id->objSize >= sizeof(xmlSecKeyData)" , 100, " "); return(((void*)0)); }; |
198 | xmlSecAssert2(id->name != NULL, NULL)if(!( id->name != ((void*)0) ) ) { xmlSecError("keysdata.c" ,198,__FUNCTION__, ((void*)0), "id->name != NULL", 100, " " ); return(((void*)0)); }; |
199 | |
200 | /* Allocate a new xmlSecKeyData and fill the fields. */ |
201 | data = (xmlSecKeyDataPtr)xmlMalloc(id->objSize); |
202 | if(data == NULL((void*)0)) { |
203 | xmlSecError(XMLSEC_ERRORS_HERE"keysdata.c",203,__FUNCTION__, |
204 | xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id))((((((id)) ? ((id)->name) : ((void*)0))) != ((void*)0)) ? ( (char*)((((id)) ? ((id)->name) : ((void*)0)))) : (char*)"NULL" ), |
205 | NULL((void*)0), |
206 | XMLSEC_ERRORS_R_MALLOC_FAILED2, |
207 | "size=%d", id->objSize); |
208 | return(NULL((void*)0)); |
209 | } |
210 | memset(data, 0, id->objSize); |
211 | data->id = id; |
212 | |
213 | if(id->initialize != NULL((void*)0)) { |
214 | ret = (id->initialize)(data); |
215 | if(ret < 0) { |
216 | xmlSecError(XMLSEC_ERRORS_HERE"keysdata.c",216,__FUNCTION__, |
217 | xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id))((((((id)) ? ((id)->name) : ((void*)0))) != ((void*)0)) ? ( (char*)((((id)) ? ((id)->name) : ((void*)0)))) : (char*)"NULL" ), |
218 | "id->initialize", |
219 | XMLSEC_ERRORS_R_XMLSEC_FAILED1, |
220 | XMLSEC_ERRORS_NO_MESSAGE" "); |
221 | xmlSecKeyDataDestroy(data); |
222 | return(NULL((void*)0)); |
223 | } |
224 | } |
225 | |
226 | return(data); |
227 | } |
228 | |
229 | /** |
230 | * xmlSecKeyDataDuplicate: |
231 | * @data: the pointer to the key data. |
232 | * |
233 | * Creates a duplicate of the given @data. Caller is responsible for |
234 | * destroing returend object with #xmlSecKeyDataDestroy function. |
235 | * |
236 | * Returns: the pointer to newly allocated key data structure |
237 | * or NULL if an error occurs. |
238 | */ |
239 | xmlSecKeyDataPtr |
240 | xmlSecKeyDataDuplicate(xmlSecKeyDataPtr data) { |
241 | xmlSecKeyDataPtr newData; |
242 | int ret; |
243 | |
244 | xmlSecAssert2(xmlSecKeyDataIsValid(data), NULL)if(!( ((( data ) != ((void*)0)) && (( data )->id != ((void*)0)) && (( data )->id->klassSize >= sizeof (xmlSecKeyDataKlass)) && (( data )->id->objSize >= sizeof(xmlSecKeyData)) && (( data )->id-> name != ((void*)0))) ) ) { xmlSecError("keysdata.c",244,__FUNCTION__ , ((void*)0), "xmlSecKeyDataIsValid(data)", 100, " "); return (((void*)0)); }; |
245 | xmlSecAssert2(data->id->duplicate != NULL, NULL)if(!( data->id->duplicate != ((void*)0) ) ) { xmlSecError ("keysdata.c",245,__FUNCTION__, ((void*)0), "data->id->duplicate != NULL" , 100, " "); return(((void*)0)); }; |
246 | |
247 | newData = xmlSecKeyDataCreate(data->id); |
248 | if(newData == NULL((void*)0)) { |
249 | xmlSecError(XMLSEC_ERRORS_HERE"keysdata.c",249,__FUNCTION__, |
250 | xmlSecErrorsSafeString(xmlSecKeyDataGetName(data))(((((((( (data) ) != ((void*)0)) && (( (data) )->id != ((void*)0)) && (( (data) )->id->klassSize >= sizeof(xmlSecKeyDataKlass)) && (( (data) )->id-> objSize >= sizeof(xmlSecKeyData)) && (( (data) )-> id->name != ((void*)0)))) ? ((((data)->id)) ? (((data)-> id)->name) : ((void*)0)) : ((void*)0))) != ((void*)0)) ? ( (char*)(((((( (data) ) != ((void*)0)) && (( (data) )-> id != ((void*)0)) && (( (data) )->id->klassSize >= sizeof(xmlSecKeyDataKlass)) && (( (data) )-> id->objSize >= sizeof(xmlSecKeyData)) && (( (data ) )->id->name != ((void*)0)))) ? ((((data)->id)) ? ( ((data)->id)->name) : ((void*)0)) : ((void*)0)))) : (char *)"NULL"), |
251 | "xmlSecKeyDataCreate", |
252 | XMLSEC_ERRORS_R_XMLSEC_FAILED1, |
253 | XMLSEC_ERRORS_NO_MESSAGE" "); |
254 | return(NULL((void*)0)); |
255 | } |
256 | |
257 | ret = (data->id->duplicate)(newData, data); |
Value stored to 'ret' is never read | |
258 | if(newData == NULL((void*)0)) { |
259 | xmlSecError(XMLSEC_ERRORS_HERE"keysdata.c",259,__FUNCTION__, |
260 | xmlSecErrorsSafeString(xmlSecKeyDataGetName(data))(((((((( (data) ) != ((void*)0)) && (( (data) )->id != ((void*)0)) && (( (data) )->id->klassSize >= sizeof(xmlSecKeyDataKlass)) && (( (data) )->id-> objSize >= sizeof(xmlSecKeyData)) && (( (data) )-> id->name != ((void*)0)))) ? ((((data)->id)) ? (((data)-> id)->name) : ((void*)0)) : ((void*)0))) != ((void*)0)) ? ( (char*)(((((( (data) ) != ((void*)0)) && (( (data) )-> id != ((void*)0)) && (( (data) )->id->klassSize >= sizeof(xmlSecKeyDataKlass)) && (( (data) )-> id->objSize >= sizeof(xmlSecKeyData)) && (( (data ) )->id->name != ((void*)0)))) ? ((((data)->id)) ? ( ((data)->id)->name) : ((void*)0)) : ((void*)0)))) : (char *)"NULL"), |
261 | "id->duplicate", |
262 | XMLSEC_ERRORS_R_XMLSEC_FAILED1, |
263 | XMLSEC_ERRORS_NO_MESSAGE" "); |
264 | xmlSecKeyDataDestroy(newData); |
265 | return(NULL((void*)0)); |
266 | } |
267 | |
268 | return(newData); |
269 | } |
270 | |
271 | /** |
272 | * xmlSecKeyDataDestroy: |
273 | * @data: the pointer to the key data. |
274 | * |
275 | * Destroys the data and frees all allocated memory. |
276 | */ |
277 | void |
278 | xmlSecKeyDataDestroy(xmlSecKeyDataPtr data) { |
279 | xmlSecAssert(xmlSecKeyDataIsValid(data))if(!( ((( data ) != ((void*)0)) && (( data )->id != ((void*)0)) && (( data )->id->klassSize >= sizeof (xmlSecKeyDataKlass)) && (( data )->id->objSize >= sizeof(xmlSecKeyData)) && (( data )->id-> name != ((void*)0))) ) ) { xmlSecError("keysdata.c",279,__FUNCTION__ , ((void*)0), "xmlSecKeyDataIsValid(data)", 100, " "); return ; }; |
280 | xmlSecAssert(data->id->objSize > 0)if(!( data->id->objSize > 0 ) ) { xmlSecError("keysdata.c" ,280,__FUNCTION__, ((void*)0), "data->id->objSize > 0" , 100, " "); return; }; |
281 | |
282 | if(data->id->finalize != NULL((void*)0)) { |
283 | (data->id->finalize)(data); |
284 | } |
285 | memset(data, 0, data->id->objSize); |
286 | xmlFree(data); |
287 | } |
288 | |
289 | |
290 | /** |
291 | * xmlSecKeyDataXmlRead: |
292 | * @id: the data klass. |
293 | * @key: the destination key. |
294 | * @node: the pointer to an XML node. |
295 | * @keyInfoCtx: the pointer to <dsig:KeyInfo/> element processing context. |
296 | * |
297 | * Reads the key data of klass @id from XML @node and adds them to @key. |
298 | * |
299 | * Returns: 0 on success or a negative value otherwise. |
300 | */ |
301 | int |
302 | xmlSecKeyDataXmlRead(xmlSecKeyDataId id, xmlSecKeyPtr key, xmlNodePtr node, xmlSecKeyInfoCtxPtr keyInfoCtx) { |
303 | xmlSecAssert2(id != NULL, -1)if(!( id != ((void*)0) ) ) { xmlSecError("keysdata.c",303,__FUNCTION__ , ((void*)0), "id != NULL", 100, " "); return(-1); }; |
304 | xmlSecAssert2(id->xmlRead != NULL, -1)if(!( id->xmlRead != ((void*)0) ) ) { xmlSecError("keysdata.c" ,304,__FUNCTION__, ((void*)0), "id->xmlRead != NULL", 100, " "); return(-1); }; |
305 | xmlSecAssert2(key != NULL, -1)if(!( key != ((void*)0) ) ) { xmlSecError("keysdata.c",305,__FUNCTION__ , ((void*)0), "key != NULL", 100, " "); return(-1); }; |
306 | xmlSecAssert2(node != NULL, -1)if(!( node != ((void*)0) ) ) { xmlSecError("keysdata.c",306,__FUNCTION__ , ((void*)0), "node != NULL", 100, " "); return(-1); }; |
307 | |
308 | return((id->xmlRead)(id, key, node, keyInfoCtx)); |
309 | } |
310 | |
311 | /** |
312 | * xmlSecKeyDataXmlWrite: |
313 | * @id: the data klass. |
314 | * @key: the source key. |
315 | * @node: the pointer to an XML node. |
316 | * @keyInfoCtx: the pointer to <dsig:KeyInfo/> element processing context. |
317 | * |
318 | * Writes the key data of klass @id from @key to an XML @node. |
319 | * |
320 | * Returns: 0 on success or a negative value otherwise. |
321 | */ |
322 | int |
323 | xmlSecKeyDataXmlWrite(xmlSecKeyDataId id, xmlSecKeyPtr key, xmlNodePtr node, xmlSecKeyInfoCtxPtr keyInfoCtx) { |
324 | xmlSecAssert2(id != NULL, -1)if(!( id != ((void*)0) ) ) { xmlSecError("keysdata.c",324,__FUNCTION__ , ((void*)0), "id != NULL", 100, " "); return(-1); }; |
325 | xmlSecAssert2(id->xmlWrite != NULL, -1)if(!( id->xmlWrite != ((void*)0) ) ) { xmlSecError("keysdata.c" ,325,__FUNCTION__, ((void*)0), "id->xmlWrite != NULL", 100 , " "); return(-1); }; |
326 | xmlSecAssert2(key != NULL, -1)if(!( key != ((void*)0) ) ) { xmlSecError("keysdata.c",326,__FUNCTION__ , ((void*)0), "key != NULL", 100, " "); return(-1); }; |
327 | xmlSecAssert2(node != NULL, -1)if(!( node != ((void*)0) ) ) { xmlSecError("keysdata.c",327,__FUNCTION__ , ((void*)0), "node != NULL", 100, " "); return(-1); }; |
328 | |
329 | return((id->xmlWrite)(id, key, node, keyInfoCtx)); |
330 | } |
331 | |
332 | /** |
333 | * xmlSecKeyDataBinRead: |
334 | * @id: the data klass. |
335 | * @key: the destination key. |
336 | * @buf: the input binary buffer. |
337 | * @bufSize: the input buffer size. |
338 | * @keyInfoCtx: the <dsig:KeyInfo/> node processing context. |
339 | * |
340 | * Reads the key data of klass @id from binary buffer @buf to @key. |
341 | * |
342 | * Returns: 0 on success or a negative value if an error occurs. |
343 | */ |
344 | int |
345 | xmlSecKeyDataBinRead(xmlSecKeyDataId id, xmlSecKeyPtr key, |
346 | const xmlSecByteunsigned char* buf, xmlSecSizesize_t bufSize, |
347 | xmlSecKeyInfoCtxPtr keyInfoCtx) { |
348 | xmlSecAssert2(id != NULL, -1)if(!( id != ((void*)0) ) ) { xmlSecError("keysdata.c",348,__FUNCTION__ , ((void*)0), "id != NULL", 100, " "); return(-1); }; |
349 | xmlSecAssert2(id->binRead != NULL, -1)if(!( id->binRead != ((void*)0) ) ) { xmlSecError("keysdata.c" ,349,__FUNCTION__, ((void*)0), "id->binRead != NULL", 100, " "); return(-1); }; |
350 | xmlSecAssert2(key != NULL, -1)if(!( key != ((void*)0) ) ) { xmlSecError("keysdata.c",350,__FUNCTION__ , ((void*)0), "key != NULL", 100, " "); return(-1); }; |
351 | xmlSecAssert2(buf != NULL, -1)if(!( buf != ((void*)0) ) ) { xmlSecError("keysdata.c",351,__FUNCTION__ , ((void*)0), "buf != NULL", 100, " "); return(-1); }; |
352 | |
353 | return((id->binRead)(id, key, buf, bufSize, keyInfoCtx)); |
354 | } |
355 | |
356 | /** |
357 | * xmlSecKeyDataBinWrite: |
358 | * @id: the data klass. |
359 | * @key: the source key. |
360 | * @buf: the output binary buffer. |
361 | * @bufSize: the output buffer size. |
362 | * @keyInfoCtx: the <dsig:KeyInfo/> node processing context. |
363 | * |
364 | * Writes the key data of klass @id from the @key to a binary buffer @buf. |
365 | * |
366 | * Returns: 0 on success or a negative value if an error occurs. |
367 | */ |
368 | int |
369 | xmlSecKeyDataBinWrite(xmlSecKeyDataId id, xmlSecKeyPtr key, |
370 | xmlSecByteunsigned char** buf, xmlSecSizesize_t* bufSize, |
371 | xmlSecKeyInfoCtxPtr keyInfoCtx) { |
372 | xmlSecAssert2(id != NULL, -1)if(!( id != ((void*)0) ) ) { xmlSecError("keysdata.c",372,__FUNCTION__ , ((void*)0), "id != NULL", 100, " "); return(-1); }; |
373 | xmlSecAssert2(id->binWrite != NULL, -1)if(!( id->binWrite != ((void*)0) ) ) { xmlSecError("keysdata.c" ,373,__FUNCTION__, ((void*)0), "id->binWrite != NULL", 100 , " "); return(-1); }; |
374 | xmlSecAssert2(key != NULL, -1)if(!( key != ((void*)0) ) ) { xmlSecError("keysdata.c",374,__FUNCTION__ , ((void*)0), "key != NULL", 100, " "); return(-1); }; |
375 | xmlSecAssert2(buf != NULL, -1)if(!( buf != ((void*)0) ) ) { xmlSecError("keysdata.c",375,__FUNCTION__ , ((void*)0), "buf != NULL", 100, " "); return(-1); }; |
376 | |
377 | return((id->binWrite)(id, key, buf, bufSize, keyInfoCtx)); |
378 | } |
379 | |
380 | /** |
381 | * xmlSecKeyDataGenerate: |
382 | * @data: the pointer to key data. |
383 | * @sizeBits: the desired key data size (in bits). |
384 | * @type: the desired key data type. |
385 | * |
386 | * Generates new key data of given size and type. |
387 | * |
388 | * Returns: 0 on success or a negative value otherwise. |
389 | */ |
390 | int |
391 | xmlSecKeyDataGenerate(xmlSecKeyDataPtr data, xmlSecSizesize_t sizeBits, |
392 | xmlSecKeyDataType type) { |
393 | int ret; |
394 | |
395 | xmlSecAssert2(xmlSecKeyDataIsValid(data), -1)if(!( ((( data ) != ((void*)0)) && (( data )->id != ((void*)0)) && (( data )->id->klassSize >= sizeof (xmlSecKeyDataKlass)) && (( data )->id->objSize >= sizeof(xmlSecKeyData)) && (( data )->id-> name != ((void*)0))) ) ) { xmlSecError("keysdata.c",395,__FUNCTION__ , ((void*)0), "xmlSecKeyDataIsValid(data)", 100, " "); return (-1); }; |
396 | xmlSecAssert2(data->id->generate != NULL, -1)if(!( data->id->generate != ((void*)0) ) ) { xmlSecError ("keysdata.c",396,__FUNCTION__, ((void*)0), "data->id->generate != NULL" , 100, " "); return(-1); }; |
397 | |
398 | /* write data */ |
399 | ret = data->id->generate(data, sizeBits, type); |
400 | if(ret < 0) { |
401 | xmlSecError(XMLSEC_ERRORS_HERE"keysdata.c",401,__FUNCTION__, |
402 | xmlSecErrorsSafeString(xmlSecKeyDataGetName(data))(((((((( (data) ) != ((void*)0)) && (( (data) )->id != ((void*)0)) && (( (data) )->id->klassSize >= sizeof(xmlSecKeyDataKlass)) && (( (data) )->id-> objSize >= sizeof(xmlSecKeyData)) && (( (data) )-> id->name != ((void*)0)))) ? ((((data)->id)) ? (((data)-> id)->name) : ((void*)0)) : ((void*)0))) != ((void*)0)) ? ( (char*)(((((( (data) ) != ((void*)0)) && (( (data) )-> id != ((void*)0)) && (( (data) )->id->klassSize >= sizeof(xmlSecKeyDataKlass)) && (( (data) )-> id->objSize >= sizeof(xmlSecKeyData)) && (( (data ) )->id->name != ((void*)0)))) ? ((((data)->id)) ? ( ((data)->id)->name) : ((void*)0)) : ((void*)0)))) : (char *)"NULL"), |
403 | "id->generate", |
404 | XMLSEC_ERRORS_R_XMLSEC_FAILED1, |
405 | "size=%d", sizeBits); |
406 | return(-1); |
407 | } |
408 | return(0); |
409 | } |
410 | |
411 | /** |
412 | * xmlSecKeyDataGetType: |
413 | * @data: the pointer to key data. |
414 | * |
415 | * Gets key data type. |
416 | * |
417 | * Returns: key data type. |
418 | */ |
419 | xmlSecKeyDataType |
420 | xmlSecKeyDataGetType(xmlSecKeyDataPtr data) { |
421 | xmlSecAssert2(xmlSecKeyDataIsValid(data), xmlSecKeyDataTypeUnknown)if(!( ((( data ) != ((void*)0)) && (( data )->id != ((void*)0)) && (( data )->id->klassSize >= sizeof (xmlSecKeyDataKlass)) && (( data )->id->objSize >= sizeof(xmlSecKeyData)) && (( data )->id-> name != ((void*)0))) ) ) { xmlSecError("keysdata.c",421,__FUNCTION__ , ((void*)0), "xmlSecKeyDataIsValid(data)", 100, " "); return (0x0000); }; |
422 | xmlSecAssert2(data->id->getType != NULL, xmlSecKeyDataTypeUnknown)if(!( data->id->getType != ((void*)0) ) ) { xmlSecError ("keysdata.c",422,__FUNCTION__, ((void*)0), "data->id->getType != NULL" , 100, " "); return(0x0000); }; |
423 | |
424 | return(data->id->getType(data)); |
425 | } |
426 | |
427 | /** |
428 | * xmlSecKeyDataGetSize: |
429 | * @data: the pointer to key data. |
430 | * |
431 | * Gets key data size. |
432 | * |
433 | * Returns: key data size (in bits). |
434 | */ |
435 | xmlSecSizesize_t |
436 | xmlSecKeyDataGetSize(xmlSecKeyDataPtr data) { |
437 | xmlSecAssert2(xmlSecKeyDataIsValid(data), 0)if(!( ((( data ) != ((void*)0)) && (( data )->id != ((void*)0)) && (( data )->id->klassSize >= sizeof (xmlSecKeyDataKlass)) && (( data )->id->objSize >= sizeof(xmlSecKeyData)) && (( data )->id-> name != ((void*)0))) ) ) { xmlSecError("keysdata.c",437,__FUNCTION__ , ((void*)0), "xmlSecKeyDataIsValid(data)", 100, " "); return (0); }; |
438 | xmlSecAssert2(data->id->getSize != NULL, 0)if(!( data->id->getSize != ((void*)0) ) ) { xmlSecError ("keysdata.c",438,__FUNCTION__, ((void*)0), "data->id->getSize != NULL" , 100, " "); return(0); }; |
439 | |
440 | return(data->id->getSize(data)); |
441 | } |
442 | |
443 | /** |
444 | * xmlSecKeyDataGetIdentifier: |
445 | * @data: the pointer to key data. |
446 | * |
447 | * Gets key data identifier string. |
448 | * |
449 | * Returns: key data id string. |
450 | */ |
451 | const xmlChar* |
452 | xmlSecKeyDataGetIdentifier(xmlSecKeyDataPtr data) { |
453 | xmlSecAssert2(xmlSecKeyDataIsValid(data), NULL)if(!( ((( data ) != ((void*)0)) && (( data )->id != ((void*)0)) && (( data )->id->klassSize >= sizeof (xmlSecKeyDataKlass)) && (( data )->id->objSize >= sizeof(xmlSecKeyData)) && (( data )->id-> name != ((void*)0))) ) ) { xmlSecError("keysdata.c",453,__FUNCTION__ , ((void*)0), "xmlSecKeyDataIsValid(data)", 100, " "); return (((void*)0)); }; |
454 | xmlSecAssert2(data->id->getIdentifier != NULL, NULL)if(!( data->id->getIdentifier != ((void*)0) ) ) { xmlSecError ("keysdata.c",454,__FUNCTION__, ((void*)0), "data->id->getIdentifier != NULL" , 100, " "); return(((void*)0)); }; |
455 | |
456 | return(data->id->getIdentifier(data)); |
457 | } |
458 | |
459 | /** |
460 | * xmlSecKeyDataDebugDump: |
461 | * @data: the pointer to key data. |
462 | * @output: the pointer to output FILE. |
463 | * |
464 | * Prints key data debug info. |
465 | */ |
466 | void |
467 | xmlSecKeyDataDebugDump(xmlSecKeyDataPtr data, FILE *output) { |
468 | xmlSecAssert(xmlSecKeyDataIsValid(data))if(!( ((( data ) != ((void*)0)) && (( data )->id != ((void*)0)) && (( data )->id->klassSize >= sizeof (xmlSecKeyDataKlass)) && (( data )->id->objSize >= sizeof(xmlSecKeyData)) && (( data )->id-> name != ((void*)0))) ) ) { xmlSecError("keysdata.c",468,__FUNCTION__ , ((void*)0), "xmlSecKeyDataIsValid(data)", 100, " "); return ; }; |
469 | xmlSecAssert(data->id->debugDump != NULL)if(!( data->id->debugDump != ((void*)0) ) ) { xmlSecError ("keysdata.c",469,__FUNCTION__, ((void*)0), "data->id->debugDump != NULL" , 100, " "); return; }; |
470 | xmlSecAssert(output != NULL)if(!( output != ((void*)0) ) ) { xmlSecError("keysdata.c",470 ,__FUNCTION__, ((void*)0), "output != NULL", 100, " "); return ; }; |
471 | |
472 | data->id->debugDump(data, output); |
473 | } |
474 | |
475 | /** |
476 | * xmlSecKeyDataDebugXmlDump: |
477 | * @data: the pointer to key data. |
478 | * @output: the pointer to output FILE. |
479 | * |
480 | * Prints key data debug info in XML format. |
481 | */ |
482 | void |
483 | xmlSecKeyDataDebugXmlDump(xmlSecKeyDataPtr data, FILE *output) { |
484 | xmlSecAssert(xmlSecKeyDataIsValid(data))if(!( ((( data ) != ((void*)0)) && (( data )->id != ((void*)0)) && (( data )->id->klassSize >= sizeof (xmlSecKeyDataKlass)) && (( data )->id->objSize >= sizeof(xmlSecKeyData)) && (( data )->id-> name != ((void*)0))) ) ) { xmlSecError("keysdata.c",484,__FUNCTION__ , ((void*)0), "xmlSecKeyDataIsValid(data)", 100, " "); return ; }; |
485 | xmlSecAssert(data->id->debugXmlDump != NULL)if(!( data->id->debugXmlDump != ((void*)0) ) ) { xmlSecError ("keysdata.c",485,__FUNCTION__, ((void*)0), "data->id->debugXmlDump != NULL" , 100, " "); return; }; |
486 | xmlSecAssert(output != NULL)if(!( output != ((void*)0) ) ) { xmlSecError("keysdata.c",486 ,__FUNCTION__, ((void*)0), "output != NULL", 100, " "); return ; }; |
487 | |
488 | data->id->debugXmlDump(data, output); |
489 | } |
490 | |
491 | /************************************************************************** |
492 | * |
493 | * xmlSecKeyDataBinary methods |
494 | * |
495 | * key (xmlSecBuffer) is located after xmlSecKeyData structure |
496 | * |
497 | *************************************************************************/ |
498 | /** |
499 | * xmlSecKeyDataBinaryValueInitialize: |
500 | * @data: the pointer to binary key data. |
501 | * |
502 | * Initializes key data. |
503 | * |
504 | * Returns: 0 on success or a negative value otherwise. |
505 | */ |
506 | int |
507 | xmlSecKeyDataBinaryValueInitialize(xmlSecKeyDataPtr data) { |
508 | xmlSecBufferPtr buffer; |
509 | int ret; |
510 | |
511 | xmlSecAssert2(xmlSecKeyDataIsValid(data), -1)if(!( ((( data ) != ((void*)0)) && (( data )->id != ((void*)0)) && (( data )->id->klassSize >= sizeof (xmlSecKeyDataKlass)) && (( data )->id->objSize >= sizeof(xmlSecKeyData)) && (( data )->id-> name != ((void*)0))) ) ) { xmlSecError("keysdata.c",511,__FUNCTION__ , ((void*)0), "xmlSecKeyDataIsValid(data)", 100, " "); return (-1); }; |
512 | xmlSecAssert2(xmlSecKeyDataCheckSize(data, xmlSecKeyDataBinarySize), -1)if(!( (((( ( data ) ) != ((void*)0)) && (( ( data ) ) ->id != ((void*)0)) && (( ( data ) )->id->klassSize >= sizeof(xmlSecKeyDataKlass)) && (( ( data ) )-> id->objSize >= sizeof(xmlSecKeyData)) && (( ( data ) )->id->name != ((void*)0))) && (( data )-> id->objSize >= (sizeof(xmlSecKeyData) + sizeof(xmlSecBuffer )))) ) ) { xmlSecError("keysdata.c",512,__FUNCTION__, ((void* )0), "xmlSecKeyDataCheckSize(data, xmlSecKeyDataBinarySize)", 100, " "); return(-1); }; |
513 | |
514 | /* initialize buffer */ |
515 | buffer = xmlSecKeyDataBinaryValueGetBuffer(data); |
516 | xmlSecAssert2(buffer != NULL, -1)if(!( buffer != ((void*)0) ) ) { xmlSecError("keysdata.c",516 ,__FUNCTION__, ((void*)0), "buffer != NULL", 100, " "); return (-1); }; |
517 | |
518 | ret = xmlSecBufferInitialize(buffer, 0); |
519 | if(ret < 0) { |
520 | xmlSecError(XMLSEC_ERRORS_HERE"keysdata.c",520,__FUNCTION__, |
521 | xmlSecErrorsSafeString(xmlSecKeyDataGetName(data))(((((((( (data) ) != ((void*)0)) && (( (data) )->id != ((void*)0)) && (( (data) )->id->klassSize >= sizeof(xmlSecKeyDataKlass)) && (( (data) )->id-> objSize >= sizeof(xmlSecKeyData)) && (( (data) )-> id->name != ((void*)0)))) ? ((((data)->id)) ? (((data)-> id)->name) : ((void*)0)) : ((void*)0))) != ((void*)0)) ? ( (char*)(((((( (data) ) != ((void*)0)) && (( (data) )-> id != ((void*)0)) && (( (data) )->id->klassSize >= sizeof(xmlSecKeyDataKlass)) && (( (data) )-> id->objSize >= sizeof(xmlSecKeyData)) && (( (data ) )->id->name != ((void*)0)))) ? ((((data)->id)) ? ( ((data)->id)->name) : ((void*)0)) : ((void*)0)))) : (char *)"NULL"), |
522 | "xmlSecBufferInitialize", |
523 | XMLSEC_ERRORS_R_XMLSEC_FAILED1, |
524 | XMLSEC_ERRORS_NO_MESSAGE" "); |
525 | return(-1); |
526 | } |
527 | |
528 | return(0); |
529 | } |
530 | |
531 | /** |
532 | * xmlSecKeyDataBinaryValueDuplicate: |
533 | * @dst: the pointer to destination binary key data. |
534 | * @src: the pointer to source binary key data. |
535 | * |
536 | * Copies binary key data from @src to @dst. |
537 | * |
538 | * Returns: 0 on success or a negative value otherwise. |
539 | */ |
540 | int |
541 | xmlSecKeyDataBinaryValueDuplicate(xmlSecKeyDataPtr dst, xmlSecKeyDataPtr src) { |
542 | xmlSecBufferPtr buffer; |
543 | int ret; |
544 | |
545 | xmlSecAssert2(xmlSecKeyDataIsValid(dst), -1)if(!( ((( dst ) != ((void*)0)) && (( dst )->id != ( (void*)0)) && (( dst )->id->klassSize >= sizeof (xmlSecKeyDataKlass)) && (( dst )->id->objSize >= sizeof(xmlSecKeyData)) && (( dst )->id->name != ((void*)0))) ) ) { xmlSecError("keysdata.c",545,__FUNCTION__ , ((void*)0), "xmlSecKeyDataIsValid(dst)", 100, " "); return( -1); }; |
546 | xmlSecAssert2(xmlSecKeyDataCheckSize(dst, xmlSecKeyDataBinarySize), -1)if(!( (((( ( dst ) ) != ((void*)0)) && (( ( dst ) )-> id != ((void*)0)) && (( ( dst ) )->id->klassSize >= sizeof(xmlSecKeyDataKlass)) && (( ( dst ) )-> id->objSize >= sizeof(xmlSecKeyData)) && (( ( dst ) )->id->name != ((void*)0))) && (( dst )-> id->objSize >= (sizeof(xmlSecKeyData) + sizeof(xmlSecBuffer )))) ) ) { xmlSecError("keysdata.c",546,__FUNCTION__, ((void* )0), "xmlSecKeyDataCheckSize(dst, xmlSecKeyDataBinarySize)", 100 , " "); return(-1); }; |
547 | xmlSecAssert2(xmlSecKeyDataIsValid(src), -1)if(!( ((( src ) != ((void*)0)) && (( src )->id != ( (void*)0)) && (( src )->id->klassSize >= sizeof (xmlSecKeyDataKlass)) && (( src )->id->objSize >= sizeof(xmlSecKeyData)) && (( src )->id->name != ((void*)0))) ) ) { xmlSecError("keysdata.c",547,__FUNCTION__ , ((void*)0), "xmlSecKeyDataIsValid(src)", 100, " "); return( -1); }; |
548 | xmlSecAssert2(xmlSecKeyDataCheckSize(src, xmlSecKeyDataBinarySize), -1)if(!( (((( ( src ) ) != ((void*)0)) && (( ( src ) )-> id != ((void*)0)) && (( ( src ) )->id->klassSize >= sizeof(xmlSecKeyDataKlass)) && (( ( src ) )-> id->objSize >= sizeof(xmlSecKeyData)) && (( ( src ) )->id->name != ((void*)0))) && (( src )-> id->objSize >= (sizeof(xmlSecKeyData) + sizeof(xmlSecBuffer )))) ) ) { xmlSecError("keysdata.c",548,__FUNCTION__, ((void* )0), "xmlSecKeyDataCheckSize(src, xmlSecKeyDataBinarySize)", 100 , " "); return(-1); }; |
549 | |
550 | buffer = xmlSecKeyDataBinaryValueGetBuffer(src); |
551 | xmlSecAssert2(buffer != NULL, -1)if(!( buffer != ((void*)0) ) ) { xmlSecError("keysdata.c",551 ,__FUNCTION__, ((void*)0), "buffer != NULL", 100, " "); return (-1); }; |
552 | |
553 | /* copy data */ |
554 | ret = xmlSecKeyDataBinaryValueSetBuffer(dst, |
555 | xmlSecBufferGetData(buffer), |
556 | xmlSecBufferGetSize(buffer)); |
557 | if(ret < 0) { |
558 | xmlSecError(XMLSEC_ERRORS_HERE"keysdata.c",558,__FUNCTION__, |
559 | xmlSecErrorsSafeString(xmlSecKeyDataGetName(dst))(((((((( (dst) ) != ((void*)0)) && (( (dst) )->id != ((void*)0)) && (( (dst) )->id->klassSize >= sizeof(xmlSecKeyDataKlass)) && (( (dst) )->id-> objSize >= sizeof(xmlSecKeyData)) && (( (dst) )-> id->name != ((void*)0)))) ? ((((dst)->id)) ? (((dst)-> id)->name) : ((void*)0)) : ((void*)0))) != ((void*)0)) ? ( (char*)(((((( (dst) ) != ((void*)0)) && (( (dst) )-> id != ((void*)0)) && (( (dst) )->id->klassSize >= sizeof(xmlSecKeyDataKlass)) && (( (dst) )->id-> objSize >= sizeof(xmlSecKeyData)) && (( (dst) )-> id->name != ((void*)0)))) ? ((((dst)->id)) ? (((dst)-> id)->name) : ((void*)0)) : ((void*)0)))) : (char*)"NULL"), |
560 | "xmlSecKeyDataBinaryValueSetBuffer", |
561 | XMLSEC_ERRORS_R_XMLSEC_FAILED1, |
562 | XMLSEC_ERRORS_NO_MESSAGE" "); |
563 | return(-1); |
564 | } |
565 | |
566 | return(0); |
567 | } |
568 | |
569 | /** |
570 | * xmlSecKeyDataBinaryValueFinalize: |
571 | * @data: the pointer to binary key data. |
572 | * |
573 | * Cleans up binary key data. |
574 | */ |
575 | void |
576 | xmlSecKeyDataBinaryValueFinalize(xmlSecKeyDataPtr data) { |
577 | xmlSecBufferPtr buffer; |
578 | |
579 | xmlSecAssert(xmlSecKeyDataIsValid(data))if(!( ((( data ) != ((void*)0)) && (( data )->id != ((void*)0)) && (( data )->id->klassSize >= sizeof (xmlSecKeyDataKlass)) && (( data )->id->objSize >= sizeof(xmlSecKeyData)) && (( data )->id-> name != ((void*)0))) ) ) { xmlSecError("keysdata.c",579,__FUNCTION__ , ((void*)0), "xmlSecKeyDataIsValid(data)", 100, " "); return ; }; |
580 | xmlSecAssert(xmlSecKeyDataCheckSize(data, xmlSecKeyDataBinarySize))if(!( (((( ( data ) ) != ((void*)0)) && (( ( data ) ) ->id != ((void*)0)) && (( ( data ) )->id->klassSize >= sizeof(xmlSecKeyDataKlass)) && (( ( data ) )-> id->objSize >= sizeof(xmlSecKeyData)) && (( ( data ) )->id->name != ((void*)0))) && (( data )-> id->objSize >= (sizeof(xmlSecKeyData) + sizeof(xmlSecBuffer )))) ) ) { xmlSecError("keysdata.c",580,__FUNCTION__, ((void* )0), "xmlSecKeyDataCheckSize(data, xmlSecKeyDataBinarySize)", 100, " "); return; }; |
581 | |
582 | /* initialize buffer */ |
583 | buffer = xmlSecKeyDataBinaryValueGetBuffer(data); |
584 | xmlSecAssert(buffer != NULL)if(!( buffer != ((void*)0) ) ) { xmlSecError("keysdata.c",584 ,__FUNCTION__, ((void*)0), "buffer != NULL", 100, " "); return ; }; |
585 | |
586 | xmlSecBufferFinalize(buffer); |
587 | } |
588 | |
589 | /** |
590 | * xmlSecKeyDataBinaryValueXmlRead: |
591 | * @id: the data klass. |
592 | * @key: the pointer to destination key. |
593 | * @node: the pointer to an XML node. |
594 | * @keyInfoCtx: the pointer to <dsig:KeyInfo/> element processing context. |
595 | * |
596 | * Reads binary key data from @node to the key by base64 decoding the @node content. |
597 | * |
598 | * Returns: 0 on success or a negative value otherwise. |
599 | */ |
600 | int |
601 | xmlSecKeyDataBinaryValueXmlRead(xmlSecKeyDataId id, xmlSecKeyPtr key, |
602 | xmlNodePtr node, xmlSecKeyInfoCtxPtr keyInfoCtx) { |
603 | xmlChar* str; |
604 | xmlSecSizesize_t len; |
605 | xmlSecKeyDataPtr data; |
606 | int ret; |
607 | |
608 | xmlSecAssert2(id != xmlSecKeyDataIdUnknown, -1)if(!( id != ((xmlSecKeyDataId)((void*)0)) ) ) { xmlSecError("keysdata.c" ,608,__FUNCTION__, ((void*)0), "id != xmlSecKeyDataIdUnknown" , 100, " "); return(-1); }; |
609 | xmlSecAssert2(key != NULL, -1)if(!( key != ((void*)0) ) ) { xmlSecError("keysdata.c",609,__FUNCTION__ , ((void*)0), "key != NULL", 100, " "); return(-1); }; |
610 | xmlSecAssert2(node != NULL, -1)if(!( node != ((void*)0) ) ) { xmlSecError("keysdata.c",610,__FUNCTION__ , ((void*)0), "node != NULL", 100, " "); return(-1); }; |
611 | xmlSecAssert2(keyInfoCtx != NULL, -1)if(!( keyInfoCtx != ((void*)0) ) ) { xmlSecError("keysdata.c" ,611,__FUNCTION__, ((void*)0), "keyInfoCtx != NULL", 100, " " ); return(-1); }; |
612 | |
613 | str = xmlNodeGetContent(node); |
614 | if(str == NULL((void*)0)) { |
615 | xmlSecError(XMLSEC_ERRORS_HERE"keysdata.c",615,__FUNCTION__, |
616 | xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id))((((((id)) ? ((id)->name) : ((void*)0))) != ((void*)0)) ? ( (char*)((((id)) ? ((id)->name) : ((void*)0)))) : (char*)"NULL" ), |
617 | xmlSecErrorsSafeString(xmlSecNodeGetName(node))((((((node)) ? ((const char*)((node)->name)) : ((void*)0)) ) != ((void*)0)) ? ((char*)((((node)) ? ((const char*)((node) ->name)) : ((void*)0)))) : (char*)"NULL"), |
618 | XMLSEC_ERRORS_R_INVALID_NODE_CONTENT22, |
619 | XMLSEC_ERRORS_NO_MESSAGE" "); |
620 | return(-1); |
621 | } |
622 | |
623 | /* usual trick: decode into the same buffer */ |
624 | ret = xmlSecBase64Decode(str, (xmlSecByteunsigned char*)str, xmlStrlen(str)); |
625 | if(ret < 0) { |
626 | xmlSecError(XMLSEC_ERRORS_HERE"keysdata.c",626,__FUNCTION__, |
627 | xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id))((((((id)) ? ((id)->name) : ((void*)0))) != ((void*)0)) ? ( (char*)((((id)) ? ((id)->name) : ((void*)0)))) : (char*)"NULL" ), |
628 | "xmlSecBase64Decode", |
629 | XMLSEC_ERRORS_R_XMLSEC_FAILED1, |
630 | XMLSEC_ERRORS_NO_MESSAGE" "); |
631 | xmlFree(str); |
632 | return(-1); |
633 | } |
634 | len = ret; |
635 | |
636 | /* check do we have a key already */ |
637 | data = xmlSecKeyGetValue(key); |
638 | if(data != NULL((void*)0)) { |
639 | xmlSecBufferPtr buffer; |
640 | |
641 | if(!xmlSecKeyDataCheckId(data, id)(((( ( data ) ) != ((void*)0)) && (( ( data ) )->id != ((void*)0)) && (( ( data ) )->id->klassSize >= sizeof(xmlSecKeyDataKlass)) && (( ( data ) )-> id->objSize >= sizeof(xmlSecKeyData)) && (( ( data ) )->id->name != ((void*)0))) && ((( data )-> id) == ( id )))) { |
642 | xmlSecError(XMLSEC_ERRORS_HERE"keysdata.c",642,__FUNCTION__, |
643 | xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id))((((((id)) ? ((id)->name) : ((void*)0))) != ((void*)0)) ? ( (char*)((((id)) ? ((id)->name) : ((void*)0)))) : (char*)"NULL" ), |
644 | xmlSecErrorsSafeString(xmlSecKeyDataGetName(data))(((((((( (data) ) != ((void*)0)) && (( (data) )->id != ((void*)0)) && (( (data) )->id->klassSize >= sizeof(xmlSecKeyDataKlass)) && (( (data) )->id-> objSize >= sizeof(xmlSecKeyData)) && (( (data) )-> id->name != ((void*)0)))) ? ((((data)->id)) ? (((data)-> id)->name) : ((void*)0)) : ((void*)0))) != ((void*)0)) ? ( (char*)(((((( (data) ) != ((void*)0)) && (( (data) )-> id != ((void*)0)) && (( (data) )->id->klassSize >= sizeof(xmlSecKeyDataKlass)) && (( (data) )-> id->objSize >= sizeof(xmlSecKeyData)) && (( (data ) )->id->name != ((void*)0)))) ? ((((data)->id)) ? ( ((data)->id)->name) : ((void*)0)) : ((void*)0)))) : (char *)"NULL"), |
645 | XMLSEC_ERRORS_R_KEY_DATA_ALREADY_EXIST43, |
646 | XMLSEC_ERRORS_NO_MESSAGE" "); |
647 | xmlFree(str); |
648 | return(-1); |
649 | } |
650 | |
651 | buffer = xmlSecKeyDataBinaryValueGetBuffer(data); |
652 | if((buffer != NULL((void*)0)) && ((xmlSecSizesize_t)xmlSecBufferGetSize(buffer) != len)) { |
653 | xmlSecError(XMLSEC_ERRORS_HERE"keysdata.c",653,__FUNCTION__, |
654 | xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id))((((((id)) ? ((id)->name) : ((void*)0))) != ((void*)0)) ? ( (char*)((((id)) ? ((id)->name) : ((void*)0)))) : (char*)"NULL" ), |
655 | xmlSecErrorsSafeString(xmlSecKeyDataGetName(data))(((((((( (data) ) != ((void*)0)) && (( (data) )->id != ((void*)0)) && (( (data) )->id->klassSize >= sizeof(xmlSecKeyDataKlass)) && (( (data) )->id-> objSize >= sizeof(xmlSecKeyData)) && (( (data) )-> id->name != ((void*)0)))) ? ((((data)->id)) ? (((data)-> id)->name) : ((void*)0)) : ((void*)0))) != ((void*)0)) ? ( (char*)(((((( (data) ) != ((void*)0)) && (( (data) )-> id != ((void*)0)) && (( (data) )->id->klassSize >= sizeof(xmlSecKeyDataKlass)) && (( (data) )-> id->objSize >= sizeof(xmlSecKeyData)) && (( (data ) )->id->name != ((void*)0)))) ? ((((data)->id)) ? ( ((data)->id)->name) : ((void*)0)) : ((void*)0)))) : (char *)"NULL"), |
656 | XMLSEC_ERRORS_R_KEY_DATA_ALREADY_EXIST43, |
657 | "cur-data-size=%d;new-data-size=%d", |
658 | xmlSecBufferGetSize(buffer), len); |
659 | xmlFree(str); |
660 | return(-1); |
661 | } |
662 | if((buffer != NULL((void*)0)) && (len > 0) && (memcmp(xmlSecBufferGetData(buffer), str, len) != 0)) { |
663 | xmlSecError(XMLSEC_ERRORS_HERE"keysdata.c",663,__FUNCTION__, |
664 | xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id))((((((id)) ? ((id)->name) : ((void*)0))) != ((void*)0)) ? ( (char*)((((id)) ? ((id)->name) : ((void*)0)))) : (char*)"NULL" ), |
665 | xmlSecErrorsSafeString(xmlSecKeyDataGetName(data))(((((((( (data) ) != ((void*)0)) && (( (data) )->id != ((void*)0)) && (( (data) )->id->klassSize >= sizeof(xmlSecKeyDataKlass)) && (( (data) )->id-> objSize >= sizeof(xmlSecKeyData)) && (( (data) )-> id->name != ((void*)0)))) ? ((((data)->id)) ? (((data)-> id)->name) : ((void*)0)) : ((void*)0))) != ((void*)0)) ? ( (char*)(((((( (data) ) != ((void*)0)) && (( (data) )-> id != ((void*)0)) && (( (data) )->id->klassSize >= sizeof(xmlSecKeyDataKlass)) && (( (data) )-> id->objSize >= sizeof(xmlSecKeyData)) && (( (data ) )->id->name != ((void*)0)))) ? ((((data)->id)) ? ( ((data)->id)->name) : ((void*)0)) : ((void*)0)))) : (char *)"NULL"), |
666 | XMLSEC_ERRORS_R_KEY_DATA_ALREADY_EXIST43, |
667 | "key already has a different value"); |
668 | xmlFree(str); |
669 | return(-1); |
670 | } |
671 | if(buffer != NULL((void*)0)) { |
672 | /* we already have exactly the same key */ |
673 | xmlFree(str); |
674 | return(0); |
675 | } |
676 | |
677 | /* we have binary key value with empty buffer */ |
678 | } |
679 | |
680 | |
681 | data = xmlSecKeyDataCreate(id); |
682 | if(data == NULL((void*)0) ) { |
683 | xmlSecError(XMLSEC_ERRORS_HERE"keysdata.c",683,__FUNCTION__, |
684 | xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id))((((((id)) ? ((id)->name) : ((void*)0))) != ((void*)0)) ? ( (char*)((((id)) ? ((id)->name) : ((void*)0)))) : (char*)"NULL" ), |
685 | "xmlSecKeyDataCreate", |
686 | XMLSEC_ERRORS_R_XMLSEC_FAILED1, |
687 | XMLSEC_ERRORS_NO_MESSAGE" "); |
688 | xmlFree(str); |
689 | return(-1); |
690 | } |
691 | |
692 | ret = xmlSecKeyDataBinaryValueSetBuffer(data, (xmlSecByteunsigned char*)str, len); |
693 | if(ret < 0) { |
694 | xmlSecError(XMLSEC_ERRORS_HERE"keysdata.c",694,__FUNCTION__, |
695 | xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id))((((((id)) ? ((id)->name) : ((void*)0))) != ((void*)0)) ? ( (char*)((((id)) ? ((id)->name) : ((void*)0)))) : (char*)"NULL" ), |
696 | "xmlSecKeyDataBinaryValueSetBuffer", |
697 | XMLSEC_ERRORS_R_XMLSEC_FAILED1, |
698 | "size=%d", len); |
699 | xmlSecKeyDataDestroy(data); |
700 | xmlFree(str); |
701 | return(-1); |
702 | } |
703 | xmlFree(str); |
704 | |
705 | if(xmlSecKeyReqMatchKeyValue(&(keyInfoCtx->keyReq), data) != 1) { |
706 | xmlSecError(XMLSEC_ERRORS_HERE"keysdata.c",706,__FUNCTION__, |
707 | xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id))((((((id)) ? ((id)->name) : ((void*)0))) != ((void*)0)) ? ( (char*)((((id)) ? ((id)->name) : ((void*)0)))) : (char*)"NULL" ), |
708 | "xmlSecKeyReqMatchKeyValue", |
709 | XMLSEC_ERRORS_R_XMLSEC_FAILED1, |
710 | XMLSEC_ERRORS_NO_MESSAGE" "); |
711 | xmlSecKeyDataDestroy(data); |
712 | return(0); |
713 | } |
714 | |
715 | ret = xmlSecKeySetValue(key, data); |
716 | if(ret < 0) { |
717 | xmlSecError(XMLSEC_ERRORS_HERE"keysdata.c",717,__FUNCTION__, |
718 | xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id))((((((id)) ? ((id)->name) : ((void*)0))) != ((void*)0)) ? ( (char*)((((id)) ? ((id)->name) : ((void*)0)))) : (char*)"NULL" ), |
719 | "xmlSecKeySetValue", |
720 | XMLSEC_ERRORS_R_XMLSEC_FAILED1, |
721 | XMLSEC_ERRORS_NO_MESSAGE" "); |
722 | xmlSecKeyDataDestroy(data); |
723 | return(-1); |
724 | } |
725 | |
726 | return(0); |
727 | } |
728 | |
729 | /** |
730 | * xmlSecKeyDataBinaryValueXmlWrite: |
731 | * @id: the data klass. |
732 | * @key: the pointer to source key. |
733 | * @node: the pointer to an XML node. |
734 | * @keyInfoCtx: the pointer to <dsig:KeyInfo/> element processing context. |
735 | * |
736 | * Base64 encodes binary key data of klass @id from the @key and |
737 | * sets to the @node content. |
738 | * |
739 | * Returns: 0 on success or a negative value otherwise. |
740 | */ |
741 | int |
742 | xmlSecKeyDataBinaryValueXmlWrite(xmlSecKeyDataId id, xmlSecKeyPtr key, |
743 | xmlNodePtr node, xmlSecKeyInfoCtxPtr keyInfoCtx) { |
744 | xmlSecBufferPtr buffer; |
745 | xmlSecKeyDataPtr value; |
746 | xmlChar* str; |
747 | |
748 | xmlSecAssert2(id != xmlSecKeyDataIdUnknown, -1)if(!( id != ((xmlSecKeyDataId)((void*)0)) ) ) { xmlSecError("keysdata.c" ,748,__FUNCTION__, ((void*)0), "id != xmlSecKeyDataIdUnknown" , 100, " "); return(-1); }; |
749 | xmlSecAssert2(key != NULL, -1)if(!( key != ((void*)0) ) ) { xmlSecError("keysdata.c",749,__FUNCTION__ , ((void*)0), "key != NULL", 100, " "); return(-1); }; |
750 | xmlSecAssert2(node != NULL, -1)if(!( node != ((void*)0) ) ) { xmlSecError("keysdata.c",750,__FUNCTION__ , ((void*)0), "node != NULL", 100, " "); return(-1); }; |
751 | xmlSecAssert2(keyInfoCtx != NULL, -1)if(!( keyInfoCtx != ((void*)0) ) ) { xmlSecError("keysdata.c" ,751,__FUNCTION__, ((void*)0), "keyInfoCtx != NULL", 100, " " ); return(-1); }; |
752 | |
753 | if((xmlSecKeyDataTypeSymmetric0x0004 & keyInfoCtx->keyReq.keyType) == 0) { |
754 | /* we can have only symmetric key */ |
755 | return(0); |
756 | } |
757 | |
758 | value = xmlSecKeyGetValue(key); |
759 | xmlSecAssert2(xmlSecKeyDataIsValid(value), -1)if(!( ((( value ) != ((void*)0)) && (( value )->id != ((void*)0)) && (( value )->id->klassSize >= sizeof(xmlSecKeyDataKlass)) && (( value )->id-> objSize >= sizeof(xmlSecKeyData)) && (( value )-> id->name != ((void*)0))) ) ) { xmlSecError("keysdata.c",759 ,__FUNCTION__, ((void*)0), "xmlSecKeyDataIsValid(value)", 100 , " "); return(-1); }; |
760 | |
761 | buffer = xmlSecKeyDataBinaryValueGetBuffer(value); |
762 | xmlSecAssert2(buffer != NULL, -1)if(!( buffer != ((void*)0) ) ) { xmlSecError("keysdata.c",762 ,__FUNCTION__, ((void*)0), "buffer != NULL", 100, " "); return (-1); }; |
763 | |
764 | str = xmlSecBase64Encode(xmlSecBufferGetData(buffer), |
765 | xmlSecBufferGetSize(buffer), |
766 | keyInfoCtx->base64LineSize); |
767 | if(str == NULL((void*)0)) { |
768 | xmlSecError(XMLSEC_ERRORS_HERE"keysdata.c",768,__FUNCTION__, |
769 | xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id))((((((id)) ? ((id)->name) : ((void*)0))) != ((void*)0)) ? ( (char*)((((id)) ? ((id)->name) : ((void*)0)))) : (char*)"NULL" ), |
770 | "xmlSecBase64Encode", |
771 | XMLSEC_ERRORS_R_XMLSEC_FAILED1, |
772 | XMLSEC_ERRORS_NO_MESSAGE" "); |
773 | return(-1); |
774 | } |
775 | xmlNodeSetContent(node, str); |
776 | xmlFree(str); |
777 | return(0); |
778 | } |
779 | |
780 | /** |
781 | * xmlSecKeyDataBinaryValueBinRead: |
782 | * @id: the data klass. |
783 | * @key: the pointer to destination key. |
784 | * @buf: the source binary buffer. |
785 | * @bufSize: the source binary buffer size. |
786 | * @keyInfoCtx: the pointer to <dsig:KeyInfo/> element processing context. |
787 | * |
788 | * Reads binary key data of the klass @id from @buf to the @key. |
789 | * |
790 | * Returns: 0 on success or a negative value otherwise. |
791 | */ |
792 | int |
793 | xmlSecKeyDataBinaryValueBinRead(xmlSecKeyDataId id, xmlSecKeyPtr key, |
794 | const xmlSecByteunsigned char* buf, xmlSecSizesize_t bufSize, |
795 | xmlSecKeyInfoCtxPtr keyInfoCtx) { |
796 | xmlSecKeyDataPtr data; |
797 | int ret; |
798 | |
799 | xmlSecAssert2(id != xmlSecKeyDataIdUnknown, -1)if(!( id != ((xmlSecKeyDataId)((void*)0)) ) ) { xmlSecError("keysdata.c" ,799,__FUNCTION__, ((void*)0), "id != xmlSecKeyDataIdUnknown" , 100, " "); return(-1); }; |
800 | xmlSecAssert2(key != NULL, -1)if(!( key != ((void*)0) ) ) { xmlSecError("keysdata.c",800,__FUNCTION__ , ((void*)0), "key != NULL", 100, " "); return(-1); }; |
801 | xmlSecAssert2(buf != NULL, -1)if(!( buf != ((void*)0) ) ) { xmlSecError("keysdata.c",801,__FUNCTION__ , ((void*)0), "buf != NULL", 100, " "); return(-1); }; |
802 | xmlSecAssert2(bufSize > 0, -1)if(!( bufSize > 0 ) ) { xmlSecError("keysdata.c",802,__FUNCTION__ , ((void*)0), "bufSize > 0", 100, " "); return(-1); }; |
803 | xmlSecAssert2(keyInfoCtx != NULL, -1)if(!( keyInfoCtx != ((void*)0) ) ) { xmlSecError("keysdata.c" ,803,__FUNCTION__, ((void*)0), "keyInfoCtx != NULL", 100, " " ); return(-1); }; |
804 | |
805 | /* check do we have a key already */ |
806 | data = xmlSecKeyGetValue(key); |
807 | if(data != NULL((void*)0)) { |
808 | xmlSecBufferPtr buffer; |
809 | |
810 | if(!xmlSecKeyDataCheckId(data, id)(((( ( data ) ) != ((void*)0)) && (( ( data ) )->id != ((void*)0)) && (( ( data ) )->id->klassSize >= sizeof(xmlSecKeyDataKlass)) && (( ( data ) )-> id->objSize >= sizeof(xmlSecKeyData)) && (( ( data ) )->id->name != ((void*)0))) && ((( data )-> id) == ( id )))) { |
811 | xmlSecError(XMLSEC_ERRORS_HERE"keysdata.c",811,__FUNCTION__, |
812 | xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id))((((((id)) ? ((id)->name) : ((void*)0))) != ((void*)0)) ? ( (char*)((((id)) ? ((id)->name) : ((void*)0)))) : (char*)"NULL" ), |
813 | xmlSecErrorsSafeString(xmlSecKeyDataGetName(data))(((((((( (data) ) != ((void*)0)) && (( (data) )->id != ((void*)0)) && (( (data) )->id->klassSize >= sizeof(xmlSecKeyDataKlass)) && (( (data) )->id-> objSize >= sizeof(xmlSecKeyData)) && (( (data) )-> id->name != ((void*)0)))) ? ((((data)->id)) ? (((data)-> id)->name) : ((void*)0)) : ((void*)0))) != ((void*)0)) ? ( (char*)(((((( (data) ) != ((void*)0)) && (( (data) )-> id != ((void*)0)) && (( (data) )->id->klassSize >= sizeof(xmlSecKeyDataKlass)) && (( (data) )-> id->objSize >= sizeof(xmlSecKeyData)) && (( (data ) )->id->name != ((void*)0)))) ? ((((data)->id)) ? ( ((data)->id)->name) : ((void*)0)) : ((void*)0)))) : (char *)"NULL"), |
814 | XMLSEC_ERRORS_R_KEY_DATA_ALREADY_EXIST43, |
815 | XMLSEC_ERRORS_NO_MESSAGE" "); |
816 | return(-1); |
817 | } |
818 | |
819 | buffer = xmlSecKeyDataBinaryValueGetBuffer(data); |
820 | if((buffer != NULL((void*)0)) && ((xmlSecSizesize_t)xmlSecBufferGetSize(buffer) != bufSize)) { |
821 | xmlSecError(XMLSEC_ERRORS_HERE"keysdata.c",821,__FUNCTION__, |
822 | xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id))((((((id)) ? ((id)->name) : ((void*)0))) != ((void*)0)) ? ( (char*)((((id)) ? ((id)->name) : ((void*)0)))) : (char*)"NULL" ), |
823 | xmlSecErrorsSafeString(xmlSecKeyDataGetName(data))(((((((( (data) ) != ((void*)0)) && (( (data) )->id != ((void*)0)) && (( (data) )->id->klassSize >= sizeof(xmlSecKeyDataKlass)) && (( (data) )->id-> objSize >= sizeof(xmlSecKeyData)) && (( (data) )-> id->name != ((void*)0)))) ? ((((data)->id)) ? (((data)-> id)->name) : ((void*)0)) : ((void*)0))) != ((void*)0)) ? ( (char*)(((((( (data) ) != ((void*)0)) && (( (data) )-> id != ((void*)0)) && (( (data) )->id->klassSize >= sizeof(xmlSecKeyDataKlass)) && (( (data) )-> id->objSize >= sizeof(xmlSecKeyData)) && (( (data ) )->id->name != ((void*)0)))) ? ((((data)->id)) ? ( ((data)->id)->name) : ((void*)0)) : ((void*)0)))) : (char *)"NULL"), |
824 | XMLSEC_ERRORS_R_KEY_DATA_ALREADY_EXIST43, |
825 | "cur-data-size=%d;new-data-size=%d", |
826 | xmlSecBufferGetSize(buffer), bufSize); |
827 | return(-1); |
828 | } |
829 | if((buffer != NULL((void*)0)) && (bufSize > 0) && (memcmp(xmlSecBufferGetData(buffer), buf, bufSize) != 0)) { |
830 | xmlSecError(XMLSEC_ERRORS_HERE"keysdata.c",830,__FUNCTION__, |
831 | xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id))((((((id)) ? ((id)->name) : ((void*)0))) != ((void*)0)) ? ( (char*)((((id)) ? ((id)->name) : ((void*)0)))) : (char*)"NULL" ), |
832 | xmlSecErrorsSafeString(xmlSecKeyDataGetName(data))(((((((( (data) ) != ((void*)0)) && (( (data) )->id != ((void*)0)) && (( (data) )->id->klassSize >= sizeof(xmlSecKeyDataKlass)) && (( (data) )->id-> objSize >= sizeof(xmlSecKeyData)) && (( (data) )-> id->name != ((void*)0)))) ? ((((data)->id)) ? (((data)-> id)->name) : ((void*)0)) : ((void*)0))) != ((void*)0)) ? ( (char*)(((((( (data) ) != ((void*)0)) && (( (data) )-> id != ((void*)0)) && (( (data) )->id->klassSize >= sizeof(xmlSecKeyDataKlass)) && (( (data) )-> id->objSize >= sizeof(xmlSecKeyData)) && (( (data ) )->id->name != ((void*)0)))) ? ((((data)->id)) ? ( ((data)->id)->name) : ((void*)0)) : ((void*)0)))) : (char *)"NULL"), |
833 | XMLSEC_ERRORS_R_KEY_DATA_ALREADY_EXIST43, |
834 | "key already has a different value"); |
835 | return(-1); |
836 | } |
837 | if(buffer != NULL((void*)0)) { |
838 | /* we already have exactly the same key */ |
839 | return(0); |
840 | } |
841 | |
842 | /* we have binary key value with empty buffer */ |
843 | } |
844 | |
845 | data = xmlSecKeyDataCreate(id); |
846 | if(data == NULL((void*)0) ) { |
847 | xmlSecError(XMLSEC_ERRORS_HERE"keysdata.c",847,__FUNCTION__, |
848 | xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id))((((((id)) ? ((id)->name) : ((void*)0))) != ((void*)0)) ? ( (char*)((((id)) ? ((id)->name) : ((void*)0)))) : (char*)"NULL" ), |
849 | "xmlSecKeyDataCreate", |
850 | XMLSEC_ERRORS_R_XMLSEC_FAILED1, |
851 | XMLSEC_ERRORS_NO_MESSAGE" "); |
852 | return(-1); |
853 | } |
854 | |
855 | ret = xmlSecKeyDataBinaryValueSetBuffer(data, buf, bufSize); |
856 | if(ret < 0) { |
857 | xmlSecError(XMLSEC_ERRORS_HERE"keysdata.c",857,__FUNCTION__, |
858 | xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id))((((((id)) ? ((id)->name) : ((void*)0))) != ((void*)0)) ? ( (char*)((((id)) ? ((id)->name) : ((void*)0)))) : (char*)"NULL" ), |
859 | "xmlSecKeyDataBinaryValueSetBuffer", |
860 | XMLSEC_ERRORS_R_XMLSEC_FAILED1, |
861 | "size=%d", bufSize); |
862 | xmlSecKeyDataDestroy(data); |
863 | return(-1); |
864 | } |
865 | |
866 | if(xmlSecKeyReqMatchKeyValue(&(keyInfoCtx->keyReq), data) != 1) { |
867 | xmlSecError(XMLSEC_ERRORS_HERE"keysdata.c",867,__FUNCTION__, |
868 | xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id))((((((id)) ? ((id)->name) : ((void*)0))) != ((void*)0)) ? ( (char*)((((id)) ? ((id)->name) : ((void*)0)))) : (char*)"NULL" ), |
869 | "xmlSecKeyReqMatchKeyValue", |
870 | XMLSEC_ERRORS_R_XMLSEC_FAILED1, |
871 | XMLSEC_ERRORS_NO_MESSAGE" "); |
872 | xmlSecKeyDataDestroy(data); |
873 | return(0); |
874 | } |
875 | |
876 | ret = xmlSecKeySetValue(key, data); |
877 | if(ret < 0) { |
878 | xmlSecError(XMLSEC_ERRORS_HERE"keysdata.c",878,__FUNCTION__, |
879 | xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id))((((((id)) ? ((id)->name) : ((void*)0))) != ((void*)0)) ? ( (char*)((((id)) ? ((id)->name) : ((void*)0)))) : (char*)"NULL" ), |
880 | "xmlSecKeySetValue", |
881 | XMLSEC_ERRORS_R_XMLSEC_FAILED1, |
882 | XMLSEC_ERRORS_NO_MESSAGE" "); |
883 | xmlSecKeyDataDestroy(data); |
884 | return(-1); |
885 | } |
886 | |
887 | return(0); |
888 | } |
889 | |
890 | /** |
891 | * xmlSecKeyDataBinaryValueBinWrite: |
892 | * @id: the data klass. |
893 | * @key: the pointer to source key. |
894 | * @buf: the destination binary buffer. |
895 | * @bufSize: the destination binary buffer size. |
896 | * @keyInfoCtx: the pointer to <dsig:KeyInfo/> element processing context. |
897 | * |
898 | * Writes binary key data of klass @id from the @key to @buf. |
899 | * |
900 | * Returns: 0 on success or a negative value otherwise. |
901 | */ |
902 | int |
903 | xmlSecKeyDataBinaryValueBinWrite(xmlSecKeyDataId id, xmlSecKeyPtr key, |
904 | xmlSecByteunsigned char** buf, xmlSecSizesize_t* bufSize, |
905 | xmlSecKeyInfoCtxPtr keyInfoCtx) { |
906 | xmlSecKeyDataPtr value; |
907 | xmlSecBufferPtr buffer; |
908 | |
909 | xmlSecAssert2(id != xmlSecKeyDataIdUnknown, -1)if(!( id != ((xmlSecKeyDataId)((void*)0)) ) ) { xmlSecError("keysdata.c" ,909,__FUNCTION__, ((void*)0), "id != xmlSecKeyDataIdUnknown" , 100, " "); return(-1); }; |
910 | xmlSecAssert2(key != NULL, -1)if(!( key != ((void*)0) ) ) { xmlSecError("keysdata.c",910,__FUNCTION__ , ((void*)0), "key != NULL", 100, " "); return(-1); }; |
911 | xmlSecAssert2(buf != NULL, -1)if(!( buf != ((void*)0) ) ) { xmlSecError("keysdata.c",911,__FUNCTION__ , ((void*)0), "buf != NULL", 100, " "); return(-1); }; |
912 | xmlSecAssert2(bufSize != NULL, -1)if(!( bufSize != ((void*)0) ) ) { xmlSecError("keysdata.c",912 ,__FUNCTION__, ((void*)0), "bufSize != NULL", 100, " "); return (-1); }; |
913 | xmlSecAssert2(keyInfoCtx != NULL, -1)if(!( keyInfoCtx != ((void*)0) ) ) { xmlSecError("keysdata.c" ,913,__FUNCTION__, ((void*)0), "keyInfoCtx != NULL", 100, " " ); return(-1); }; |
914 | |
915 | if((xmlSecKeyDataTypeSymmetric0x0004 & keyInfoCtx->keyReq.keyType) == 0) { |
916 | /* we can have only symmetric key */ |
917 | return(0); |
918 | } |
919 | |
920 | value = xmlSecKeyGetValue(key); |
921 | xmlSecAssert2(xmlSecKeyDataIsValid(value), -1)if(!( ((( value ) != ((void*)0)) && (( value )->id != ((void*)0)) && (( value )->id->klassSize >= sizeof(xmlSecKeyDataKlass)) && (( value )->id-> objSize >= sizeof(xmlSecKeyData)) && (( value )-> id->name != ((void*)0))) ) ) { xmlSecError("keysdata.c",921 ,__FUNCTION__, ((void*)0), "xmlSecKeyDataIsValid(value)", 100 , " "); return(-1); }; |
922 | |
923 | buffer = xmlSecKeyDataBinaryValueGetBuffer(key->value); |
924 | xmlSecAssert2(buffer != NULL, -1)if(!( buffer != ((void*)0) ) ) { xmlSecError("keysdata.c",924 ,__FUNCTION__, ((void*)0), "buffer != NULL", 100, " "); return (-1); }; |
925 | |
926 | (*bufSize) = xmlSecBufferGetSize(buffer); |
927 | (*buf) = (xmlSecByteunsigned char*) xmlMalloc((*bufSize)); |
928 | if((*buf) == NULL((void*)0)) { |
929 | xmlSecError(XMLSEC_ERRORS_HERE"keysdata.c",929,__FUNCTION__, |
930 | xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id))((((((id)) ? ((id)->name) : ((void*)0))) != ((void*)0)) ? ( (char*)((((id)) ? ((id)->name) : ((void*)0)))) : (char*)"NULL" ), |
931 | NULL((void*)0), |
932 | XMLSEC_ERRORS_R_MALLOC_FAILED2, |
933 | XMLSEC_ERRORS_NO_MESSAGE" "); |
934 | return(-1); |
935 | } |
936 | memcpy((*buf), xmlSecBufferGetData(buffer), (*bufSize)); |
937 | return(0); |
938 | } |
939 | |
940 | /** |
941 | * xmlSecKeyDataBinaryValueDebugDump: |
942 | * @data: the pointer to binary key data. |
943 | * @output: the pointer to output FILE. |
944 | * |
945 | * Prints binary key data debug information to @output. |
946 | */ |
947 | void |
948 | xmlSecKeyDataBinaryValueDebugDump(xmlSecKeyDataPtr data, FILE* output) { |
949 | xmlSecBufferPtr buffer; |
950 | |
951 | xmlSecAssert(xmlSecKeyDataIsValid(data))if(!( ((( data ) != ((void*)0)) && (( data )->id != ((void*)0)) && (( data )->id->klassSize >= sizeof (xmlSecKeyDataKlass)) && (( data )->id->objSize >= sizeof(xmlSecKeyData)) && (( data )->id-> name != ((void*)0))) ) ) { xmlSecError("keysdata.c",951,__FUNCTION__ , ((void*)0), "xmlSecKeyDataIsValid(data)", 100, " "); return ; }; |
952 | xmlSecAssert(xmlSecKeyDataCheckSize(data, xmlSecKeyDataBinarySize))if(!( (((( ( data ) ) != ((void*)0)) && (( ( data ) ) ->id != ((void*)0)) && (( ( data ) )->id->klassSize >= sizeof(xmlSecKeyDataKlass)) && (( ( data ) )-> id->objSize >= sizeof(xmlSecKeyData)) && (( ( data ) )->id->name != ((void*)0))) && (( data )-> id->objSize >= (sizeof(xmlSecKeyData) + sizeof(xmlSecBuffer )))) ) ) { xmlSecError("keysdata.c",952,__FUNCTION__, ((void* )0), "xmlSecKeyDataCheckSize(data, xmlSecKeyDataBinarySize)", 100, " "); return; }; |
953 | xmlSecAssert(data->id->dataNodeName != NULL)if(!( data->id->dataNodeName != ((void*)0) ) ) { xmlSecError ("keysdata.c",953,__FUNCTION__, ((void*)0), "data->id->dataNodeName != NULL" , 100, " "); return; }; |
954 | xmlSecAssert(output != NULL)if(!( output != ((void*)0) ) ) { xmlSecError("keysdata.c",954 ,__FUNCTION__, ((void*)0), "output != NULL", 100, " "); return ; }; |
955 | |
956 | buffer = xmlSecKeyDataBinaryValueGetBuffer(data); |
957 | xmlSecAssert(buffer != NULL)if(!( buffer != ((void*)0) ) ) { xmlSecError("keysdata.c",957 ,__FUNCTION__, ((void*)0), "buffer != NULL", 100, " "); return ; }; |
958 | |
959 | /* print only size, everything else is sensitive */ |
960 | fprintf(output, "=== %s: size=%d\n", data->id->dataNodeName, |
961 | xmlSecKeyDataGetSize(data)); |
962 | } |
963 | |
964 | /** |
965 | * xmlSecKeyDataBinaryValueDebugXmlDump: |
966 | * @data: the pointer to binary key data. |
967 | * @output: the pointer to output FILE. |
968 | * |
969 | * Prints binary key data debug information to @output in XML format. |
970 | */ |
971 | void |
972 | xmlSecKeyDataBinaryValueDebugXmlDump(xmlSecKeyDataPtr data, FILE* output) { |
973 | xmlSecBufferPtr buffer; |
974 | |
975 | xmlSecAssert(xmlSecKeyDataIsValid(data))if(!( ((( data ) != ((void*)0)) && (( data )->id != ((void*)0)) && (( data )->id->klassSize >= sizeof (xmlSecKeyDataKlass)) && (( data )->id->objSize >= sizeof(xmlSecKeyData)) && (( data )->id-> name != ((void*)0))) ) ) { xmlSecError("keysdata.c",975,__FUNCTION__ , ((void*)0), "xmlSecKeyDataIsValid(data)", 100, " "); return ; }; |
976 | xmlSecAssert(xmlSecKeyDataCheckSize(data, xmlSecKeyDataBinarySize))if(!( (((( ( data ) ) != ((void*)0)) && (( ( data ) ) ->id != ((void*)0)) && (( ( data ) )->id->klassSize >= sizeof(xmlSecKeyDataKlass)) && (( ( data ) )-> id->objSize >= sizeof(xmlSecKeyData)) && (( ( data ) )->id->name != ((void*)0))) && (( data )-> id->objSize >= (sizeof(xmlSecKeyData) + sizeof(xmlSecBuffer )))) ) ) { xmlSecError("keysdata.c",976,__FUNCTION__, ((void* )0), "xmlSecKeyDataCheckSize(data, xmlSecKeyDataBinarySize)", 100, " "); return; }; |
977 | xmlSecAssert(data->id->dataNodeName != NULL)if(!( data->id->dataNodeName != ((void*)0) ) ) { xmlSecError ("keysdata.c",977,__FUNCTION__, ((void*)0), "data->id->dataNodeName != NULL" , 100, " "); return; }; |
978 | xmlSecAssert(output != NULL)if(!( output != ((void*)0) ) ) { xmlSecError("keysdata.c",978 ,__FUNCTION__, ((void*)0), "output != NULL", 100, " "); return ; }; |
979 | |
980 | buffer = xmlSecKeyDataBinaryValueGetBuffer(data); |
981 | xmlSecAssert(buffer != NULL)if(!( buffer != ((void*)0) ) ) { xmlSecError("keysdata.c",981 ,__FUNCTION__, ((void*)0), "buffer != NULL", 100, " "); return ; }; |
982 | |
983 | /* print only size, everything else is sensitive */ |
984 | fprintf(output, "<%s size=\"%d\" />\n", data->id->dataNodeName, |
985 | xmlSecKeyDataGetSize(data)); |
986 | } |
987 | |
988 | /** |
989 | * xmlSecKeyDataBinaryValueGetSize: |
990 | * @data: the pointer to binary key data. |
991 | * |
992 | * Gets the binary key data size. |
993 | * |
994 | * Returns: binary key data size in bits. |
995 | */ |
996 | xmlSecSizesize_t |
997 | xmlSecKeyDataBinaryValueGetSize(xmlSecKeyDataPtr data) { |
998 | xmlSecBufferPtr buffer; |
999 | |
1000 | xmlSecAssert2(xmlSecKeyDataIsValid(data), 0)if(!( ((( data ) != ((void*)0)) && (( data )->id != ((void*)0)) && (( data )->id->klassSize >= sizeof (xmlSecKeyDataKlass)) && (( data )->id->objSize >= sizeof(xmlSecKeyData)) && (( data )->id-> name != ((void*)0))) ) ) { xmlSecError("keysdata.c",1000,__FUNCTION__ , ((void*)0), "xmlSecKeyDataIsValid(data)", 100, " "); return (0); }; |
1001 | xmlSecAssert2(xmlSecKeyDataCheckSize(data, xmlSecKeyDataBinarySize), 0)if(!( (((( ( data ) ) != ((void*)0)) && (( ( data ) ) ->id != ((void*)0)) && (( ( data ) )->id->klassSize >= sizeof(xmlSecKeyDataKlass)) && (( ( data ) )-> id->objSize >= sizeof(xmlSecKeyData)) && (( ( data ) )->id->name != ((void*)0))) && (( data )-> id->objSize >= (sizeof(xmlSecKeyData) + sizeof(xmlSecBuffer )))) ) ) { xmlSecError("keysdata.c",1001,__FUNCTION__, ((void *)0), "xmlSecKeyDataCheckSize(data, xmlSecKeyDataBinarySize)" , 100, " "); return(0); }; |
1002 | |
1003 | buffer = xmlSecKeyDataBinaryValueGetBuffer(data); |
1004 | xmlSecAssert2(buffer != NULL, 0)if(!( buffer != ((void*)0) ) ) { xmlSecError("keysdata.c",1004 ,__FUNCTION__, ((void*)0), "buffer != NULL", 100, " "); return (0); }; |
1005 | |
1006 | /* return size in bits */ |
1007 | return(8 * xmlSecBufferGetSize(buffer)); |
1008 | } |
1009 | |
1010 | /** |
1011 | * xmlSecKeyDataBinaryValueGetBuffer: |
1012 | * @data: the pointer to binary key data. |
1013 | * |
1014 | * Gets the binary key data buffer. |
1015 | * |
1016 | * Returns: pointer to binary key data buffer. |
1017 | */ |
1018 | xmlSecBufferPtr |
1019 | xmlSecKeyDataBinaryValueGetBuffer(xmlSecKeyDataPtr data) { |
1020 | xmlSecAssert2(xmlSecKeyDataIsValid(data), NULL)if(!( ((( data ) != ((void*)0)) && (( data )->id != ((void*)0)) && (( data )->id->klassSize >= sizeof (xmlSecKeyDataKlass)) && (( data )->id->objSize >= sizeof(xmlSecKeyData)) && (( data )->id-> name != ((void*)0))) ) ) { xmlSecError("keysdata.c",1020,__FUNCTION__ , ((void*)0), "xmlSecKeyDataIsValid(data)", 100, " "); return (((void*)0)); }; |
1021 | xmlSecAssert2(xmlSecKeyDataCheckSize(data, xmlSecKeyDataBinarySize), NULL)if(!( (((( ( data ) ) != ((void*)0)) && (( ( data ) ) ->id != ((void*)0)) && (( ( data ) )->id->klassSize >= sizeof(xmlSecKeyDataKlass)) && (( ( data ) )-> id->objSize >= sizeof(xmlSecKeyData)) && (( ( data ) )->id->name != ((void*)0))) && (( data )-> id->objSize >= (sizeof(xmlSecKeyData) + sizeof(xmlSecBuffer )))) ) ) { xmlSecError("keysdata.c",1021,__FUNCTION__, ((void *)0), "xmlSecKeyDataCheckSize(data, xmlSecKeyDataBinarySize)" , 100, " "); return(((void*)0)); }; |
1022 | |
1023 | /* key (xmlSecBuffer) is located after xmlSecKeyData structure */ |
1024 | return((xmlSecBufferPtr)(((xmlSecByteunsigned char*)data) + sizeof(xmlSecKeyData))); |
1025 | } |
1026 | |
1027 | /** |
1028 | * xmlSecKeyDataBinaryValueSetBuffer: |
1029 | * @data: the pointer to binary key data. |
1030 | * @buf: the pointer to binary buffer. |
1031 | * @bufSize: the binary buffer size. |
1032 | * |
1033 | * Sets the value of @data to @buf. |
1034 | * |
1035 | * Returns: 0 on success or a negative value otherwise. |
1036 | */ |
1037 | int |
1038 | xmlSecKeyDataBinaryValueSetBuffer(xmlSecKeyDataPtr data, |
1039 | const xmlSecByteunsigned char* buf, xmlSecSizesize_t bufSize) { |
1040 | xmlSecBufferPtr buffer; |
1041 | |
1042 | xmlSecAssert2(xmlSecKeyDataIsValid(data), -1)if(!( ((( data ) != ((void*)0)) && (( data )->id != ((void*)0)) && (( data )->id->klassSize >= sizeof (xmlSecKeyDataKlass)) && (( data )->id->objSize >= sizeof(xmlSecKeyData)) && (( data )->id-> name != ((void*)0))) ) ) { xmlSecError("keysdata.c",1042,__FUNCTION__ , ((void*)0), "xmlSecKeyDataIsValid(data)", 100, " "); return (-1); }; |
1043 | xmlSecAssert2(xmlSecKeyDataCheckSize(data, xmlSecKeyDataBinarySize), -1)if(!( (((( ( data ) ) != ((void*)0)) && (( ( data ) ) ->id != ((void*)0)) && (( ( data ) )->id->klassSize >= sizeof(xmlSecKeyDataKlass)) && (( ( data ) )-> id->objSize >= sizeof(xmlSecKeyData)) && (( ( data ) )->id->name != ((void*)0))) && (( data )-> id->objSize >= (sizeof(xmlSecKeyData) + sizeof(xmlSecBuffer )))) ) ) { xmlSecError("keysdata.c",1043,__FUNCTION__, ((void *)0), "xmlSecKeyDataCheckSize(data, xmlSecKeyDataBinarySize)" , 100, " "); return(-1); }; |
1044 | xmlSecAssert2(buf != NULL, -1)if(!( buf != ((void*)0) ) ) { xmlSecError("keysdata.c",1044,__FUNCTION__ , ((void*)0), "buf != NULL", 100, " "); return(-1); }; |
1045 | xmlSecAssert2(bufSize > 0, -1)if(!( bufSize > 0 ) ) { xmlSecError("keysdata.c",1045,__FUNCTION__ , ((void*)0), "bufSize > 0", 100, " "); return(-1); }; |
1046 | |
1047 | buffer = xmlSecKeyDataBinaryValueGetBuffer(data); |
1048 | xmlSecAssert2(buffer != NULL, -1)if(!( buffer != ((void*)0) ) ) { xmlSecError("keysdata.c",1048 ,__FUNCTION__, ((void*)0), "buffer != NULL", 100, " "); return (-1); }; |
1049 | |
1050 | return(xmlSecBufferSetData(buffer, buf, bufSize)); |
1051 | } |
1052 | |
1053 | /*********************************************************************** |
1054 | * |
1055 | * Keys Data list |
1056 | * |
1057 | **********************************************************************/ |
1058 | static xmlSecPtrListKlass xmlSecKeyDataListKlass = { |
1059 | BAD_CAST(xmlChar *) "key-data-list", |
1060 | (xmlSecPtrDuplicateItemMethod)xmlSecKeyDataDuplicate, /* xmlSecPtrDuplicateItemMethod duplicateItem; */ |
1061 | (xmlSecPtrDestroyItemMethod)xmlSecKeyDataDestroy, /* xmlSecPtrDestroyItemMethod destroyItem; */ |
1062 | (xmlSecPtrDebugDumpItemMethod)xmlSecKeyDataDebugDump, /* xmlSecPtrDebugDumpItemMethod debugDumpItem; */ |
1063 | (xmlSecPtrDebugDumpItemMethod)xmlSecKeyDataDebugXmlDump, /* xmlSecPtrDebugDumpItemMethod debugXmlDumpItem; */ |
1064 | }; |
1065 | |
1066 | /** |
1067 | * xmlSecKeyDataListGetKlass: |
1068 | * |
1069 | * The key data list klass. |
1070 | * |
1071 | * Returns: pointer to the key data list klass. |
1072 | */ |
1073 | xmlSecPtrListId |
1074 | xmlSecKeyDataListGetKlass(void) { |
1075 | return(&xmlSecKeyDataListKlass); |
1076 | } |
1077 | |
1078 | |
1079 | /*********************************************************************** |
1080 | * |
1081 | * Keys Data Ids list |
1082 | * |
1083 | **********************************************************************/ |
1084 | static xmlSecPtrListKlass xmlSecKeyDataIdListKlass = { |
1085 | BAD_CAST(xmlChar *) "key-data-ids-list", |
1086 | NULL((void*)0), /* xmlSecPtrDuplicateItemMethod duplicateItem; */ |
1087 | NULL((void*)0), /* xmlSecPtrDestroyItemMethod destroyItem; */ |
1088 | NULL((void*)0), /* xmlSecPtrDebugDumpItemMethod debugDumpItem; */ |
1089 | NULL((void*)0), /* xmlSecPtrDebugDumpItemMethod debugXmlDumpItem; */ |
1090 | }; |
1091 | |
1092 | /** |
1093 | * xmlSecKeyDataIdListGetKlass: |
1094 | * |
1095 | * The key data id list klass. |
1096 | * |
1097 | * Returns: pointer to the key data id list klass. |
1098 | */ |
1099 | xmlSecPtrListId |
1100 | xmlSecKeyDataIdListGetKlass(void) { |
1101 | return(&xmlSecKeyDataIdListKlass); |
1102 | } |
1103 | |
1104 | /** |
1105 | * xmlSecKeyDataIdListFind: |
1106 | * @list: the pointer to key data ids list. |
1107 | * @dataId: the key data klass. |
1108 | * |
1109 | * Lookups @dataId in @list. |
1110 | * |
1111 | * Returns: 1 if @dataId is found in the @list, 0 if not and a negative |
1112 | * value if an error occurs. |
1113 | */ |
1114 | int |
1115 | xmlSecKeyDataIdListFind(xmlSecPtrListPtr list, xmlSecKeyDataId dataId) { |
1116 | xmlSecSizesize_t i, size; |
1117 | |
1118 | xmlSecAssert2(xmlSecPtrListCheckId(list, xmlSecKeyDataIdListId), 0)if(!( (((( ( list ) ) != ((void*)0)) && ((( ( list ) ) ->id) != ((void*)0))) && ((( list )->id) == ( xmlSecKeyDataIdListGetKlass () ))) ) ) { xmlSecError("keysdata.c",1118,__FUNCTION__, ((void *)0), "xmlSecPtrListCheckId(list, xmlSecKeyDataIdListId)", 100 , " "); return(0); }; |
1119 | xmlSecAssert2(dataId != NULL, 0)if(!( dataId != ((void*)0) ) ) { xmlSecError("keysdata.c",1119 ,__FUNCTION__, ((void*)0), "dataId != NULL", 100, " "); return (0); }; |
1120 | |
1121 | size = xmlSecPtrListGetSize(list); |
1122 | for(i = 0; i < size; ++i) { |
1123 | if((xmlSecKeyDataId)xmlSecPtrListGetItem(list, i) == dataId) { |
1124 | return(1); |
1125 | } |
1126 | } |
1127 | return(0); |
1128 | } |
1129 | |
1130 | /** |
1131 | * xmlSecKeyDataIdListFindByNode: |
1132 | * @list: the pointer to key data ids list. |
1133 | * @nodeName: the desired key data klass XML node name. |
1134 | * @nodeNs: the desired key data klass XML node namespace. |
1135 | * @usage: the desired key data usage. |
1136 | * |
1137 | * Lookups data klass in the list with given @nodeName, @nodeNs and |
1138 | * @usage in the @list. |
1139 | * |
1140 | * Returns: key data klass is found and NULL otherwise. |
1141 | */ |
1142 | xmlSecKeyDataId |
1143 | xmlSecKeyDataIdListFindByNode(xmlSecPtrListPtr list, const xmlChar* nodeName, |
1144 | const xmlChar* nodeNs, xmlSecKeyDataUsage usage) { |
1145 | xmlSecKeyDataId dataId; |
1146 | xmlSecSizesize_t i, size; |
1147 | |
1148 | xmlSecAssert2(xmlSecPtrListCheckId(list, xmlSecKeyDataIdListId), xmlSecKeyDataIdUnknown)if(!( (((( ( list ) ) != ((void*)0)) && ((( ( list ) ) ->id) != ((void*)0))) && ((( list )->id) == ( xmlSecKeyDataIdListGetKlass () ))) ) ) { xmlSecError("keysdata.c",1148,__FUNCTION__, ((void *)0), "xmlSecPtrListCheckId(list, xmlSecKeyDataIdListId)", 100 , " "); return(((xmlSecKeyDataId)((void*)0))); }; |
1149 | xmlSecAssert2(nodeName != NULL, xmlSecKeyDataIdUnknown)if(!( nodeName != ((void*)0) ) ) { xmlSecError("keysdata.c",1149 ,__FUNCTION__, ((void*)0), "nodeName != NULL", 100, " "); return (((xmlSecKeyDataId)((void*)0))); }; |
1150 | |
1151 | size = xmlSecPtrListGetSize(list); |
1152 | for(i = 0; i < size; ++i) { |
1153 | dataId = (xmlSecKeyDataId)xmlSecPtrListGetItem(list, i); |
1154 | xmlSecAssert2(dataId != xmlSecKeyDataIdUnknown, xmlSecKeyDataIdUnknown)if(!( dataId != ((xmlSecKeyDataId)((void*)0)) ) ) { xmlSecError ("keysdata.c",1154,__FUNCTION__, ((void*)0), "dataId != xmlSecKeyDataIdUnknown" , 100, " "); return(((xmlSecKeyDataId)((void*)0))); }; |
1155 | |
1156 | if(((usage & dataId->usage) != 0) && |
1157 | xmlStrEqual(nodeName, dataId->dataNodeName) && |
1158 | xmlStrEqual(nodeNs, dataId->dataNodeNs)) { |
1159 | |
1160 | return(dataId); |
1161 | } |
1162 | } |
1163 | return(xmlSecKeyDataIdUnknown((xmlSecKeyDataId)((void*)0))); |
1164 | } |
1165 | |
1166 | /** |
1167 | * xmlSecKeyDataIdListFindByHref: |
1168 | * @list: the pointer to key data ids list. |
1169 | * @href: the desired key data klass href. |
1170 | * @usage: the desired key data usage. |
1171 | * |
1172 | * Lookups data klass in the list with given @href and @usage in @list. |
1173 | * |
1174 | * Returns: key data klass is found and NULL otherwise. |
1175 | */ |
1176 | xmlSecKeyDataId |
1177 | xmlSecKeyDataIdListFindByHref(xmlSecPtrListPtr list, const xmlChar* href, |
1178 | xmlSecKeyDataUsage usage) { |
1179 | xmlSecKeyDataId dataId; |
1180 | xmlSecSizesize_t i, size; |
1181 | |
1182 | xmlSecAssert2(xmlSecPtrListCheckId(list, xmlSecKeyDataIdListId), xmlSecKeyDataIdUnknown)if(!( (((( ( list ) ) != ((void*)0)) && ((( ( list ) ) ->id) != ((void*)0))) && ((( list )->id) == ( xmlSecKeyDataIdListGetKlass () ))) ) ) { xmlSecError("keysdata.c",1182,__FUNCTION__, ((void *)0), "xmlSecPtrListCheckId(list, xmlSecKeyDataIdListId)", 100 , " "); return(((xmlSecKeyDataId)((void*)0))); }; |
1183 | xmlSecAssert2(href != NULL, xmlSecKeyDataIdUnknown)if(!( href != ((void*)0) ) ) { xmlSecError("keysdata.c",1183, __FUNCTION__, ((void*)0), "href != NULL", 100, " "); return(( (xmlSecKeyDataId)((void*)0))); }; |
1184 | |
1185 | size = xmlSecPtrListGetSize(list); |
1186 | for(i = 0; i < size; ++i) { |
1187 | dataId = (xmlSecKeyDataId)xmlSecPtrListGetItem(list, i); |
1188 | xmlSecAssert2(dataId != xmlSecKeyDataIdUnknown, xmlSecKeyDataIdUnknown)if(!( dataId != ((xmlSecKeyDataId)((void*)0)) ) ) { xmlSecError ("keysdata.c",1188,__FUNCTION__, ((void*)0), "dataId != xmlSecKeyDataIdUnknown" , 100, " "); return(((xmlSecKeyDataId)((void*)0))); }; |
1189 | |
1190 | if(((usage & dataId->usage) != 0) && (dataId->href != NULL((void*)0)) && |
1191 | xmlStrEqual(href, dataId->href)) { |
1192 | |
1193 | return(dataId); |
1194 | } |
1195 | } |
1196 | return(xmlSecKeyDataIdUnknown((xmlSecKeyDataId)((void*)0))); |
1197 | } |
1198 | |
1199 | /** |
1200 | * xmlSecKeyDataIdListFindByName: |
1201 | * @list: the pointer to key data ids list. |
1202 | * @name: the desired key data klass name. |
1203 | * @usage: the desired key data usage. |
1204 | * |
1205 | * Lookups data klass in the list with given @name and @usage in @list. |
1206 | * |
1207 | * Returns: key data klass is found and NULL otherwise. |
1208 | */ |
1209 | xmlSecKeyDataId |
1210 | xmlSecKeyDataIdListFindByName(xmlSecPtrListPtr list, const xmlChar* name, |
1211 | xmlSecKeyDataUsage usage) { |
1212 | xmlSecKeyDataId dataId; |
1213 | xmlSecSizesize_t i, size; |
1214 | |
1215 | xmlSecAssert2(xmlSecPtrListCheckId(list, xmlSecKeyDataIdListId), xmlSecKeyDataIdUnknown)if(!( (((( ( list ) ) != ((void*)0)) && ((( ( list ) ) ->id) != ((void*)0))) && ((( list )->id) == ( xmlSecKeyDataIdListGetKlass () ))) ) ) { xmlSecError("keysdata.c",1215,__FUNCTION__, ((void *)0), "xmlSecPtrListCheckId(list, xmlSecKeyDataIdListId)", 100 , " "); return(((xmlSecKeyDataId)((void*)0))); }; |
1216 | xmlSecAssert2(name != NULL, xmlSecKeyDataIdUnknown)if(!( name != ((void*)0) ) ) { xmlSecError("keysdata.c",1216, __FUNCTION__, ((void*)0), "name != NULL", 100, " "); return(( (xmlSecKeyDataId)((void*)0))); }; |
1217 | |
1218 | size = xmlSecPtrListGetSize(list); |
1219 | for(i = 0; i < size; ++i) { |
1220 | dataId = (xmlSecKeyDataId)xmlSecPtrListGetItem(list, i); |
1221 | xmlSecAssert2(dataId != xmlSecKeyDataIdUnknown, xmlSecKeyDataIdUnknown)if(!( dataId != ((xmlSecKeyDataId)((void*)0)) ) ) { xmlSecError ("keysdata.c",1221,__FUNCTION__, ((void*)0), "dataId != xmlSecKeyDataIdUnknown" , 100, " "); return(((xmlSecKeyDataId)((void*)0))); }; |
1222 | |
1223 | if(((usage & dataId->usage) != 0) && (dataId->name != NULL((void*)0)) && |
1224 | xmlStrEqual(name, BAD_CAST(xmlChar *) dataId->name)) { |
1225 | |
1226 | return(dataId); |
1227 | } |
1228 | } |
1229 | return(xmlSecKeyDataIdUnknown((xmlSecKeyDataId)((void*)0))); |
1230 | } |
1231 | |
1232 | /** |
1233 | * xmlSecKeyDataIdListDebugDump: |
1234 | * @list: the pointer to key data ids list. |
1235 | * @output: the pointer to output FILE. |
1236 | * |
1237 | * Prints binary key data debug information to @output. |
1238 | */ |
1239 | void |
1240 | xmlSecKeyDataIdListDebugDump(xmlSecPtrListPtr list, FILE* output) { |
1241 | xmlSecKeyDataId dataId; |
1242 | xmlSecSizesize_t i, size; |
1243 | |
1244 | xmlSecAssert(xmlSecPtrListCheckId(list, xmlSecKeyDataIdListId))if(!( (((( ( list ) ) != ((void*)0)) && ((( ( list ) ) ->id) != ((void*)0))) && ((( list )->id) == ( xmlSecKeyDataIdListGetKlass () ))) ) ) { xmlSecError("keysdata.c",1244,__FUNCTION__, ((void *)0), "xmlSecPtrListCheckId(list, xmlSecKeyDataIdListId)", 100 , " "); return; }; |
1245 | xmlSecAssert(output != NULL)if(!( output != ((void*)0) ) ) { xmlSecError("keysdata.c",1245 ,__FUNCTION__, ((void*)0), "output != NULL", 100, " "); return ; }; |
1246 | |
1247 | size = xmlSecPtrListGetSize(list); |
1248 | for(i = 0; i < size; ++i) { |
1249 | dataId = (xmlSecKeyDataId)xmlSecPtrListGetItem(list, i); |
1250 | xmlSecAssert(dataId != NULL)if(!( dataId != ((void*)0) ) ) { xmlSecError("keysdata.c",1250 ,__FUNCTION__, ((void*)0), "dataId != NULL", 100, " "); return ; }; |
1251 | xmlSecAssert(dataId->name != NULL)if(!( dataId->name != ((void*)0) ) ) { xmlSecError("keysdata.c" ,1251,__FUNCTION__, ((void*)0), "dataId->name != NULL", 100 , " "); return; }; |
1252 | |
1253 | if(i > 0) { |
1254 | fprintf(output, ",\"%s\"", dataId->name); |
1255 | } else { |
1256 | fprintf(output, "\"%s\"", dataId->name); |
1257 | } |
1258 | } |
1259 | fprintf(output, "\n"); |
1260 | } |
1261 | |
1262 | /** |
1263 | * xmlSecKeyDataIdListDebugXmlDump: |
1264 | * @list: the pointer to key data ids list. |
1265 | * @output: the pointer to output FILE. |
1266 | * |
1267 | * Prints binary key data debug information to @output in XML format. |
1268 | */ |
1269 | void |
1270 | xmlSecKeyDataIdListDebugXmlDump(xmlSecPtrListPtr list, FILE* output) { |
1271 | xmlSecKeyDataId dataId; |
1272 | xmlSecSizesize_t i, size; |
1273 | |
1274 | xmlSecAssert(xmlSecPtrListCheckId(list, xmlSecKeyDataIdListId))if(!( (((( ( list ) ) != ((void*)0)) && ((( ( list ) ) ->id) != ((void*)0))) && ((( list )->id) == ( xmlSecKeyDataIdListGetKlass () ))) ) ) { xmlSecError("keysdata.c",1274,__FUNCTION__, ((void *)0), "xmlSecPtrListCheckId(list, xmlSecKeyDataIdListId)", 100 , " "); return; }; |
1275 | xmlSecAssert(output != NULL)if(!( output != ((void*)0) ) ) { xmlSecError("keysdata.c",1275 ,__FUNCTION__, ((void*)0), "output != NULL", 100, " "); return ; }; |
1276 | |
1277 | fprintf(output, "<KeyDataIdsList>\n"); |
1278 | size = xmlSecPtrListGetSize(list); |
1279 | for(i = 0; i < size; ++i) { |
1280 | dataId = (xmlSecKeyDataId)xmlSecPtrListGetItem(list, i); |
1281 | xmlSecAssert(dataId != NULL)if(!( dataId != ((void*)0) ) ) { xmlSecError("keysdata.c",1281 ,__FUNCTION__, ((void*)0), "dataId != NULL", 100, " "); return ; }; |
1282 | xmlSecAssert(dataId->name != NULL)if(!( dataId->name != ((void*)0) ) ) { xmlSecError("keysdata.c" ,1282,__FUNCTION__, ((void*)0), "dataId->name != NULL", 100 , " "); return; }; |
1283 | |
1284 | fprintf(output, "<DataId name=\""); |
1285 | xmlSecPrintXmlString(output, dataId->name); |
1286 | fprintf(output, "\"/>"); |
1287 | } |
1288 | fprintf(output, "</KeyDataIdsList>\n"); |
1289 | } |
1290 | |
1291 | /************************************************************************** |
1292 | * |
1293 | * xmlSecKeyDataStore functions |
1294 | * |
1295 | *************************************************************************/ |
1296 | /** |
1297 | * xmlSecKeyDataStoreCreate: |
1298 | * @id: the store id. |
1299 | * |
1300 | * Creates new key data store of the specified klass @id. Caller is responsible |
1301 | * for freeng returned object with #xmlSecKeyDataStoreDestroy function. |
1302 | * |
1303 | * Returns: the pointer to newly allocated key data store structure |
1304 | * or NULL if an error occurs. |
1305 | */ |
1306 | xmlSecKeyDataStorePtr |
1307 | xmlSecKeyDataStoreCreate(xmlSecKeyDataStoreId id) { |
1308 | xmlSecKeyDataStorePtr store; |
1309 | int ret; |
1310 | |
1311 | xmlSecAssert2(id != NULL, NULL)if(!( id != ((void*)0) ) ) { xmlSecError("keysdata.c",1311,__FUNCTION__ , ((void*)0), "id != NULL", 100, " "); return(((void*)0)); }; |
1312 | xmlSecAssert2(id->objSize > 0, NULL)if(!( id->objSize > 0 ) ) { xmlSecError("keysdata.c",1312 ,__FUNCTION__, ((void*)0), "id->objSize > 0", 100, " ") ; return(((void*)0)); }; |
1313 | |
1314 | /* Allocate a new xmlSecKeyDataStore and fill the fields. */ |
1315 | store = (xmlSecKeyDataStorePtr)xmlMalloc(id->objSize); |
1316 | if(store == NULL((void*)0)) { |
1317 | xmlSecError(XMLSEC_ERRORS_HERE"keysdata.c",1317,__FUNCTION__, |
1318 | xmlSecErrorsSafeString(xmlSecKeyDataStoreKlassGetName(id))((((((id)) ? ((id)->name) : ((void*)0))) != ((void*)0)) ? ( (char*)((((id)) ? ((id)->name) : ((void*)0)))) : (char*)"NULL" ), |
1319 | NULL((void*)0), |
1320 | XMLSEC_ERRORS_R_MALLOC_FAILED2, |
1321 | "size=%d", id->objSize); |
1322 | return(NULL((void*)0)); |
1323 | } |
1324 | memset(store, 0, id->objSize); |
1325 | store->id = id; |
1326 | |
1327 | if(id->initialize != NULL((void*)0)) { |
1328 | ret = (id->initialize)(store); |
1329 | if(ret < 0) { |
1330 | xmlSecError(XMLSEC_ERRORS_HERE"keysdata.c",1330,__FUNCTION__, |
1331 | xmlSecErrorsSafeString(xmlSecKeyDataStoreKlassGetName(id))((((((id)) ? ((id)->name) : ((void*)0))) != ((void*)0)) ? ( (char*)((((id)) ? ((id)->name) : ((void*)0)))) : (char*)"NULL" ), |
1332 | "id->initialize", |
1333 | XMLSEC_ERRORS_R_XMLSEC_FAILED1, |
1334 | XMLSEC_ERRORS_NO_MESSAGE" "); |
1335 | xmlSecKeyDataStoreDestroy(store); |
1336 | return(NULL((void*)0)); |
1337 | } |
1338 | } |
1339 | |
1340 | return(store); |
1341 | } |
1342 | |
1343 | /** |
1344 | * xmlSecKeyDataStoreDestroy: |
1345 | * @store: the pointer to the key data store.. |
1346 | * |
1347 | * Destroys the key data store created with #xmlSecKeyDataStoreCreate |
1348 | * function. |
1349 | */ |
1350 | void |
1351 | xmlSecKeyDataStoreDestroy(xmlSecKeyDataStorePtr store) { |
1352 | xmlSecAssert(xmlSecKeyDataStoreIsValid(store))if(!( ((( store ) != ((void*)0)) && ((( store )->id ) != ((void*)0))) ) ) { xmlSecError("keysdata.c",1352,__FUNCTION__ , ((void*)0), "xmlSecKeyDataStoreIsValid(store)", 100, " "); return ; }; |
1353 | xmlSecAssert(store->id->objSize > 0)if(!( store->id->objSize > 0 ) ) { xmlSecError("keysdata.c" ,1353,__FUNCTION__, ((void*)0), "store->id->objSize > 0" , 100, " "); return; }; |
1354 | |
1355 | if(store->id->finalize != NULL((void*)0)) { |
1356 | (store->id->finalize)(store); |
1357 | } |
1358 | memset(store, 0, store->id->objSize); |
1359 | xmlFree(store); |
1360 | } |
1361 | |
1362 | /*********************************************************************** |
1363 | * |
1364 | * Keys Data Store list |
1365 | * |
1366 | **********************************************************************/ |
1367 | static xmlSecPtrListKlass xmlSecKeyDataStorePtrListKlass = { |
1368 | BAD_CAST(xmlChar *) "keys-data-store-list", |
1369 | NULL((void*)0), /* xmlSecPtrDuplicateItemMethod duplicateItem; */ |
1370 | (xmlSecPtrDestroyItemMethod)xmlSecKeyDataStoreDestroy, /* xmlSecPtrDestroyItemMethod destroyItem; */ |
1371 | NULL((void*)0), /* xmlSecPtrDebugDumpItemMethod debugDumpItem; */ |
1372 | NULL((void*)0), /* xmlSecPtrDebugDumpItemMethod debugXmlDumpItem; */ |
1373 | }; |
1374 | |
1375 | /** |
1376 | * xmlSecKeyDataStorePtrListGetKlass: |
1377 | * |
1378 | * Key data stores list. |
1379 | * |
1380 | * Returns: key data stores list klass. |
1381 | */ |
1382 | xmlSecPtrListId |
1383 | xmlSecKeyDataStorePtrListGetKlass(void) { |
1384 | return(&xmlSecKeyDataStorePtrListKlass); |
1385 | } |
1386 | |
1387 |