0abdbe5a7d
Former-commit-id: 7467d4b717762eeaf652d77f1486dd11ffb1ff1f
37 lines
827 B
C#
37 lines
827 B
C#
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);
|
|
}
|
|
}
|