ChaCha20 with an extended (96 bit) nonce and a 32-bit counter has
been implemented as crypto_stream_chacha20_ietf() from LibSodium 1.0.4
Please refer to https://tools.ietf.org/html/rfc7539 for details.
Signed-off-by: Syrone Wong <wong.syrone@gmail.com>
The stock code use class Random to generate IV, the Random is pseudo random number generator. The IV maybe repeat, this will cause shadowsocks-libev closed the sockets with the error message 'invalid password or cipher'. Reference https://github.com/shadowsocks/shadowsocks-libev/issues/389
Solution is use class RNGCryptoServiceProvider to generate IV, of course it's lower performance, but a little bit.