linux-packaging-mono/mcs/class/corlib/corefx/Interop.GetRandomBytes.Mono.cs
Xamarin Public Jenkins (auto-signing) 0abdbe5a7d Imported Upstream version 5.18.0.142
Former-commit-id: 7467d4b717762eeaf652d77f1486dd11ffb1ff1f
2018-10-09 08:20:59 +00:00

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