Refactoring and extended MD5 challenge functionality