System.Security.Cryptography.RandomNumberGeneratorImplementation.GetNonZeroBytes C# (CSharp) Method

GetNonZeroBytes() public method

public GetNonZeroBytes ( byte data ) : void
data byte
return void
        public override void GetNonZeroBytes(byte[] data)
        {
            if (data == null) throw new ArgumentNullException(nameof(data));

            int offset = 0;
            while (offset < data.Length)
            {
                // Fill the remaining portion of the array with random bytes.
                GetBytesInternal(data, offset, data.Length - offset);

                // Find the first zero in the remaining portion.
                int indexOfFirst0Byte = data.Length;
                for (int i = offset; i < data.Length; i++)
                {
                    if (data[i] == 0)
                    {
                        indexOfFirst0Byte = i;
                        break;
                    }
                }

                // If there were any zeros, shift down all non-zeros.
                for (int i = indexOfFirst0Byte + 1; i < data.Length; i++)
                {
                    if (data[i] != 0)
                    {
                        data[indexOfFirst0Byte++] = data[i];
                    }
                }

                // Request new random bytes if necessary; dont re-use
                // existing bytes since they were shifted down.
                offset = indexOfFirst0Byte;
            }
        }
RandomNumberGeneratorImplementation