We describe the reversible programming language Hermes, which is designed for implementing encryption algorithms while eliminating certain classes of side-channels. Specifically, every program written in Hermes is reversible: It can run equally well forwards and backwards. This means that you only write the encryption algorithm and get the decryption algorithm for free. Additionally, Hermes ensures that all variables are cleared after use, thus avoiding state information leakage and the language features a type system with secret and public types that ensures that code written in Hermes is both information flow secure and resistant to timing side channel attacks.