add first pass at message encryption and decryption, much cleaner, with tests