319 } else if(xstreq(node->name, "type")) { |
319 } else if(xstreq(node->name, "type")) { |
320 if(!strcmp(value, "aes128")) { |
320 if(!strcmp(value, "aes128")) { |
321 key->type = KEY_AES128; |
321 key->type = KEY_AES128; |
322 } else if(!strcmp(value, "aes256")) { |
322 } else if(!strcmp(value, "aes256")) { |
323 key->type = KEY_AES256; |
323 key->type = KEY_AES256; |
|
324 } else if(!strcmp(value, "password")) { |
|
325 key->type = KEY_PASSWORD; |
324 } |
326 } |
325 } |
327 } |
326 |
328 |
327 } |
329 } |
328 node = node->next; |
330 node = node->next; |
329 } |
331 } |
330 |
332 |
331 if(key->name) { |
333 if(key->name) { |
332 if(key->type == KEY_AES128) { |
334 if(key->type == KEY_AES128) { |
333 if(key->length < 16) { |
335 if(key->length < 16) { |
|
336 fprintf( |
|
337 stderr, |
|
338 "Error: Key %s is too small (%d < 16)\n", |
|
339 key->name, |
|
340 key->length); |
334 return; |
341 return; |
335 } |
342 } |
336 key->length = 16; |
343 key->length = 16; |
337 } |
344 } |
338 if(key->type == KEY_AES256) { |
345 if(key->type == KEY_AES256) { |
339 if(key->length < 32) { |
346 if(key->length < 32) { |
|
347 fprintf( |
|
348 stderr, |
|
349 "Error: Key %s is too small (%d < 32)\n", |
|
350 key->name, |
|
351 key->length); |
340 return; |
352 return; |
341 } |
353 } |
342 key->length = 32; |
354 key->length = 32; |
|
355 } |
|
356 if(key->type == KEY_PASSWORD) { |
|
357 key->length = 0; |
|
358 if(key->data) { |
|
359 // make sure the pw-key is not loaded from a file |
|
360 free(key->data); |
|
361 key->data = NULL; |
|
362 } |
343 } |
363 } |
344 ucx_map_cstr_put(keys, key->name, key); |
364 ucx_map_cstr_put(keys, key->name, key); |
345 dav_context_add_key(context, key); |
365 dav_context_add_key(context, key); |
346 } else { |
366 } else { |
347 // TODO: free |
367 if(key->data) { |
|
368 free(key->data); |
|
369 free(key); |
|
370 } |
348 } |
371 } |
349 } |
372 } |
350 |
373 |
351 sstr_t load_key_file(char *filename) { |
374 sstr_t load_key_file(char *filename) { |
352 sstr_t k; |
375 sstr_t k; |