Non-Malleable Codes And Public-Key Encryption