1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
using System;
using System.Diagnostics;
using System.Security.Cryptography;
using System.Runtime.InteropServices;
internal partial class Interop
{
static class MonoGetRandomBytesFallback
{
static object _rngAccess = new object ();
static RNGCryptoServiceProvider _rng;
internal static void GetRandomBytes (byte[] buffer)
{
lock (_rngAccess) {
if (_rng == null)
_rng = new RNGCryptoServiceProvider ();
_rng.GetBytes (buffer);
}
}
internal static unsafe void GetRandomBytes (byte* buffer, int length)
{
lock (_rngAccess) {
if (_rng == null)
_rng = new RNGCryptoServiceProvider ();
_rng.GetBytes (buffer, (IntPtr)length);
}
}
}
internal static unsafe void GetRandomBytes (byte* buffer, int length)
{
MonoGetRandomBytesFallback.GetRandomBytes (buffer, length);
}
}
|