libidav/utils.c

changeset 150
37fb12574acd
parent 149
509e9e1cbdcc
child 151
a316613205dc
equal deleted inserted replaced
149:509e9e1cbdcc 150:37fb12574acd
47 47
48 #include "utils.h" 48 #include "utils.h"
49 #include "crypto.h" 49 #include "crypto.h"
50 #include "webdav.h" 50 #include "webdav.h"
51 51
52 #ifdef __sun
53 #include <sha2.h>
54 #endif
55 52
56 time_t util_parse_creationdate(char *str) { 53 time_t util_parse_creationdate(char *str) {
57 // example: 2012-11-29T21:35:35Z 54 // example: 2012-11-29T21:35:35Z
58 if(!str) { 55 if(!str) {
59 return 0; 56 return 0;
165 } else { 162 } else {
166 path = sstrn("", 0); 163 path = sstrn("", 0);
167 } 164 }
168 165
169 int add_separator = 0; 166 int add_separator = 0;
170 if(base.ptr[base.length-1] == '/') { 167 if(base.length != 0 && base.ptr[base.length-1] == '/') {
171 if(path.ptr[0] == '/') { 168 if(path.ptr[0] == '/') {
172 base.length--; 169 base.length--;
173 } 170 }
174 } else { 171 } else {
175 if(path.length == 0 || path.ptr[0] != '/') { 172 if(path.length == 0 || path.ptr[0] != '/') {
266 263
267 char* util_base64decode_len(char* in, int *outlen) { 264 char* util_base64decode_len(char* in, int *outlen) {
268 size_t len = strlen(in); 265 size_t len = strlen(in);
269 char *out = calloc(1, len); 266 char *out = calloc(1, len);
270 267
271 BIO* b = BIO_new_mem_buf(in, len); 268 BIO *b = BIO_new_mem_buf(in, len);
272 BIO *d = BIO_new(BIO_f_base64()); 269 BIO *d = BIO_new(BIO_f_base64());
273 BIO_set_flags(d, BIO_FLAGS_BASE64_NO_NL); 270 BIO_set_flags(d, BIO_FLAGS_BASE64_NO_NL);
274 b = BIO_push(d, b); 271 b = BIO_push(d, b);
275 272
276 *outlen = BIO_read(b, out, len); 273 *outlen = BIO_read(b, out, len);
284 BIO *e; 281 BIO *e;
285 BUF_MEM *mem; 282 BUF_MEM *mem;
286 283
287 e = BIO_new(BIO_f_base64()); 284 e = BIO_new(BIO_f_base64());
288 b = BIO_new(BIO_s_mem()); 285 b = BIO_new(BIO_s_mem());
286 BIO_set_flags(e, BIO_FLAGS_BASE64_NO_NL);
289 287
290 e = BIO_push(e, b); 288 e = BIO_push(e, b);
291 BIO_write(e, in, len); 289 BIO_write(e, in, len);
292 BIO_flush(e); 290 BIO_flush(e);
293 291
294 BIO_get_mem_ptr(e, &mem); 292 BIO_get_mem_ptr(e, &mem);
295 char *out = malloc(mem->length); 293 char *out = malloc(mem->length + 1);
296 memcpy(out, mem->data, mem->length -1); 294 memcpy(out, mem->data, mem->length);
297 out[mem->length - 1] = '\0'; 295 out[mem->length] = '\0';
298 296
299 BIO_free_all(e); 297 BIO_free_all(e);
300 298
301 return out; 299 return out;
302 } 300 }
310 308
311 return util_encrypt_str_k(sn, str, k); 309 return util_encrypt_str_k(sn, str, k);
312 } 310 }
313 311
314 char* util_encrypt_str_k(DavSession *sn, char *str, DavKey *key) { 312 char* util_encrypt_str_k(DavSession *sn, char *str, DavKey *key) {
315 char *enc_str = aes_encrypt(str, key); 313 char *enc_str = aes_encrypt(str, strlen(str), key);
316 char *ret_str = dav_session_strdup(sn, enc_str); 314 char *ret_str = dav_session_strdup(sn, enc_str);
317 free(enc_str); 315 free(enc_str);
318 return ret_str; 316 return ret_str;
319 } 317 }
320 318
327 325
328 return util_decrypt_str_k(sn, str, k); 326 return util_decrypt_str_k(sn, str, k);
329 } 327 }
330 328
331 char* util_decrypt_str_k(DavSession *sn, char *str, DavKey *key) { 329 char* util_decrypt_str_k(DavSession *sn, char *str, DavKey *key) {
332 char *dec_str = aes_decrypt(str, key); 330 size_t len = 0;
331 char *dec_str = aes_decrypt(str, &len, key);
333 char *ret_str = dav_session_strdup(sn, dec_str); 332 char *ret_str = dav_session_strdup(sn, dec_str);
334 free(dec_str); 333 free(dec_str);
335 return ret_str; 334 return ret_str;
336 } 335 }
337 336
476 sstr_t prompt = ucx_sprintf("Enter password for key (%s): ", key->name); 475 sstr_t prompt = ucx_sprintf("Enter password for key (%s): ", key->name);
477 char *password = util_password_input(prompt.ptr); 476 char *password = util_password_input(prompt.ptr);
478 free(prompt.ptr); 477 free(prompt.ptr);
479 return password; 478 return password;
480 } 479 }
480
481
482 char* util_hexstr(unsigned char *data, size_t len) {
483 size_t buflen = 2*len + 4;
484 UcxBuffer *buf = ucx_buffer_new(malloc(buflen), buflen + 1, 0);
485 for(int i=0;i<len;i++) {
486 ucx_bprintf(buf, "%x", data[i]);
487 }
488 ucx_buffer_putc(buf, 0);
489 char *str = buf->space;
490 ucx_buffer_free(buf);
491 return str;
492 }

mercurial