diff -r b855f76e965b -r 3e55bed345f9 libidav/utils.c --- a/libidav/utils.c Tue Sep 03 12:08:35 2013 +0200 +++ b/libidav/utils.c Sat Sep 07 14:08:43 2013 +0200 @@ -197,8 +197,12 @@ } +char* util_base64decode(char *in) { + int len = 0; + return util_base64decode_len(in, &len); +} -char* util_base64decode(char* in) { +char* util_base64decode_len(char* in, int *outlen) { size_t len = strlen(in); char *out = calloc(1, len); @@ -207,12 +211,34 @@ BIO_set_flags(d, BIO_FLAGS_BASE64_NO_NL); b = BIO_push(d, b); - BIO_read(b, out, len); + *outlen = BIO_read(b, out, len); BIO_free_all(b); return out; } +char* util_base64encode(char *in, size_t len) { + BIO *b; + BIO *e; + BUF_MEM *mem; + + e = BIO_new(BIO_f_base64()); + b = BIO_new(BIO_s_mem()); + + e = BIO_push(e, b); + BIO_write(e, in, len); + BIO_flush(e); + + BIO_get_mem_ptr(e, &mem); + char *out = malloc(mem->length); + memcpy(out, mem->data, mem->length -1); + out[mem->length - 1] = '\0'; + + BIO_free_all(e); + + return out; +} + /* * gets a substring from 0 to the appearance of the token * tokens are separated by space