How is the size known ?  We haven't computed strlen(origin->printable) !

Leaving off one from (*destination)->printable's size, as EVP_MAX_MD_SIZE * 4 - 1, doesn't fix the deficiencies of strncpy.
You aren't writing a '\0' byte to the end, and strncpy won't if it's over-writing.  Now, if you'd used xcalloc() instead of xmalloc(), you'd be good; but you didn't.