linux-packaging-mono/mcs/class/corlib/corefx/Interop.GetRandomBytes.Mono.cs

37 lines
827 B
C#
Raw Normal View History

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);
}
}