Renvoyer une valeur...
int padding(unsigned char *data, int len, char*)
Euh... lol ?
Tu voudrais que je poste sur le forum Epitech qu'un tek1 de Lyon, en Juin, écrit ça comme prototype de fonction C qui renvoie un char* ? 
Là je vais te laisser trouver ton erreur quand même.
Attention au strlen !
strlen travaille sur des chaîne ASCII et va donc s'arrêter au premier '\0' rencontré !
Un bloc de données peut contenir autant de '\0' qu'il souhaite, mais il aura quand même une autre taille !
Ne t'embête pas avec strlen, utilise seulement S comme le dis le sujet (car au pire tu feras un read tant qu'il ne te renvoie pas "moins" de caractères que la taille de ton buffer, donc tu connaitras "toujours" la taille de ce que tu envoies).
EDIT : le sujet explique-t-il comment sera testé ton md4 ?
Un binaire appelé dans un shell avec un nom de fichier ?...
Ouverture de stdin pour lire ce qui y est entré ?...
Création d'une lib et on donne en paramètre un char* à une fonction nommée MyMD4 ?....
Partager