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 } |