Bug Summary

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

Annotated Source Code

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 *************************************************************************/
34static 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 */
43xmlSecPtrListPtr
44xmlSecKeyDataIdsGet(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 */
56int
57xmlSecKeyDataIdsInit(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 */
89void
90xmlSecKeyDataIdsShutdown(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 */
102int
103xmlSecKeyDataIdsRegister(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 */
131int
132xmlSecKeyDataIdsRegisterDefault(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 */
190xmlSecKeyDataPtr
191xmlSecKeyDataCreate(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 */
239xmlSecKeyDataPtr
240xmlSecKeyDataDuplicate(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 */
277void
278xmlSecKeyDataDestroy(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 */
301int
302xmlSecKeyDataXmlRead(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 */
322int
323xmlSecKeyDataXmlWrite(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 */
344int
345xmlSecKeyDataBinRead(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 */
368int
369xmlSecKeyDataBinWrite(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 */
390int
391xmlSecKeyDataGenerate(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 */
419xmlSecKeyDataType
420xmlSecKeyDataGetType(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 */
435xmlSecSizesize_t
436xmlSecKeyDataGetSize(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 */
451const xmlChar*
452xmlSecKeyDataGetIdentifier(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 */
466void
467xmlSecKeyDataDebugDump(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 */
482void
483xmlSecKeyDataDebugXmlDump(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 */
506int
507xmlSecKeyDataBinaryValueInitialize(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 */
540int
541xmlSecKeyDataBinaryValueDuplicate(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 */
575void
576xmlSecKeyDataBinaryValueFinalize(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 */
600int
601xmlSecKeyDataBinaryValueXmlRead(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 */
741int
742xmlSecKeyDataBinaryValueXmlWrite(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 */
792int
793xmlSecKeyDataBinaryValueBinRead(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 */
902int
903xmlSecKeyDataBinaryValueBinWrite(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 */
947void
948xmlSecKeyDataBinaryValueDebugDump(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 */
971void
972xmlSecKeyDataBinaryValueDebugXmlDump(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 */
996xmlSecSizesize_t
997xmlSecKeyDataBinaryValueGetSize(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 */
1018xmlSecBufferPtr
1019xmlSecKeyDataBinaryValueGetBuffer(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 */
1037int
1038xmlSecKeyDataBinaryValueSetBuffer(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 **********************************************************************/
1058static 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 */
1073xmlSecPtrListId
1074xmlSecKeyDataListGetKlass(void) {
1075 return(&xmlSecKeyDataListKlass);
1076}
1077
1078
1079/***********************************************************************
1080 *
1081 * Keys Data Ids list
1082 *
1083 **********************************************************************/
1084static 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 */
1099xmlSecPtrListId
1100xmlSecKeyDataIdListGetKlass(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 */
1114int
1115xmlSecKeyDataIdListFind(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 */
1142xmlSecKeyDataId
1143xmlSecKeyDataIdListFindByNode(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 */
1176xmlSecKeyDataId
1177xmlSecKeyDataIdListFindByHref(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 */
1209xmlSecKeyDataId
1210xmlSecKeyDataIdListFindByName(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 */
1239void
1240xmlSecKeyDataIdListDebugDump(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 */
1269void
1270xmlSecKeyDataIdListDebugXmlDump(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 */
1306xmlSecKeyDataStorePtr
1307xmlSecKeyDataStoreCreate(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 */
1350void
1351xmlSecKeyDataStoreDestroy(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 **********************************************************************/
1367static 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 */
1382xmlSecPtrListId
1383xmlSecKeyDataStorePtrListGetKlass(void) {
1384 return(&xmlSecKeyDataStorePtrListKlass);
1385}
1386
1387