/* * Based on public domain code available at: http://cr.yp.to/snuffle.html * * This therefore is public domain. */ #ifndef ZT_SALSA20_HPP #define ZT_SALSA20_HPP #include #include #include #include #include namespace ZeroTier { /** * Salsa20 stream cipher */ class Salsa20 { public: /** * @param key 256-bit (32 byte) key * @param iv 64-bit initialization vector */ Salsa20(const void *key,const void *iv) { init(key,iv); } /** * Initialize cipher * * @param key Key bits * @param iv 64-bit initialization vector */ void init(const void *key,const void *iv); void XORKeyStream(void *out,unsigned int bytes); private: union { __m128i v[4]; uint32_t i[16]; } _state; }; } // namespace ZeroTier #endif