Groups, codes and cryptography