Files
2024-12-31 19:31:59 +01:00

48 lines
1.0 KiB
C#

using System;
using System.Security.Cryptography;
namespace Shadowsocks.Encryption
{
public static class RNG
{
private static RNGCryptoServiceProvider _rng = null;
public static void Init()
{
_rng = _rng ?? new RNGCryptoServiceProvider();
}
public static void Close()
{
_rng?.Dispose();
_rng = null;
}
public static void Reload()
{
Close();
Init();
}
public static void GetBytes(byte[] buf)
{
GetBytes(buf, buf.Length);
}
public static void GetBytes(byte[] buf, int len)
{
if (_rng == null) Init();
try
{
_rng.GetBytes(buf, 0, len);
}
catch
{
// the backup way
byte[] tmp = new byte[len];
_rng.GetBytes(tmp);
Buffer.BlockCopy(tmp, 0, buf, 0, len);
}
}
}
}