Esempio n. 1
0
        private void TestGetRandomInt64(CryptoRandomStream stream)
        {
            var value1 = stream.GetRandomUInt64();
            var value2 = stream.GetRandomUInt64();

            Assert.That(value2, Is.Not.EqualTo(value1));
        }
Esempio n. 2
0
        private void TestGetRandomInt64(CryptoRandomStream stream)
        {
            var value1 = stream.GetRandomUInt64();
            var value2 = stream.GetRandomUInt64();

            Assert.NotEqual(value2, value1);
        }
Esempio n. 3
0
        internal static void ShufflePassword(char[] pPassword,
                                             CryptoRandomStream crsRandomSource)
        {
            Debug.Assert(pPassword != null);
            if (pPassword == null)
            {
                return;
            }
            Debug.Assert(crsRandomSource != null);
            if (crsRandomSource == null)
            {
                return;
            }

            if (pPassword.Length <= 1)
            {
                return;                     // Nothing to shuffle
            }
            for (int nSelect = 0; nSelect < pPassword.Length; ++nSelect)
            {
                ulong uRandomIndex = crsRandomSource.GetRandomUInt64();
                uRandomIndex %= (ulong)(pPassword.Length - nSelect);

                char chTemp = pPassword[nSelect];
                pPassword[nSelect] = pPassword[nSelect + (int)uRandomIndex];
                pPassword[nSelect + (int)uRandomIndex] = chTemp;
            }
        }
Esempio n. 4
0
        internal static void ShufflePassword(char[] password,
                                             CryptoRandomStream crsRandomSource)
        {
            if (string.IsNullOrEmpty(password.ToString()))
            {
                return;
            }

            if (crsRandomSource == null)
            {
                return;
            }

            if (password.Length <= 1)
            {
                return; // Nothing to shuffle
            }

            for (var nSelect = 0; nSelect < password.Length; ++nSelect)
            {
                var randomIndex = crsRandomSource.GetRandomUInt64();
                randomIndex %= (ulong)(password.Length - nSelect);

                char chTemp = password[nSelect];
                password[nSelect] = password[nSelect + (int)randomIndex];
                password[nSelect + (int)randomIndex] = chTemp;
            }
        }
Esempio n. 5
0
        internal static char GenerateCharacter(PwCharSet pwCharSet,
                                               CryptoRandomStream crsRandomSource)
        {
            uint cc = pwCharSet.Size;

            if (cc == 0)
            {
                return(char.MinValue);
            }

            uint i = (uint)crsRandomSource.GetRandomUInt64(cc);

            return(pwCharSet[i]);
        }
Esempio n. 6
0
        /// <summary>
        /// Get a random value from 0..maxValue_Exclusive-1.
        ///
        /// This methods prevents mod bias - see here for more details: https://stackoverflow.com/a/10989061/56658
        ///
        /// </summary>
        /// <param name="crsRandomSource">Keepass random number generator</param>
        /// <param name="maxValue_Exclusive">Upper range for random numbers; result will be in range 0..<paramref name="maxValue_Exclusive"/>-1</param>
        /// <returns></returns>
        private ulong GetRandomIndex(CryptoRandomStream crsRandomSource, ulong maxValue_Exclusive)
        {
            var    RAND_MAX = UInt64.MaxValue;
            ulong  maxValid = RAND_MAX - (RAND_MAX % maxValue_Exclusive);
            UInt64 x;

            // Keep searching for an x in a range divisible by maxValid
            do
            {
                x = crsRandomSource.GetRandomUInt64();
            } while (x >= maxValid);

            return(x % maxValue_Exclusive);
        }
Esempio n. 7
0
		internal static char GenerateCharacter(PwProfile pwProfile,
			PwCharSet pwCharSet, CryptoRandomStream crsRandomSource)
		{
			if(pwCharSet.Size == 0) return char.MinValue;

			ulong uIndex = crsRandomSource.GetRandomUInt64();
			uIndex %= (ulong)pwCharSet.Size;

			char ch = pwCharSet[(uint)uIndex];

			if(pwProfile.NoRepeatingCharacters)
				pwCharSet.Remove(ch);

			return ch;
		}
Esempio n. 8
0
        public override ProtectedString Generate(PwProfile prf, CryptoRandomStream crsRandomSource)
        {
            if (prf == null)
            {
                Debug.Assert(false);
            }
            else
            {
                Debug.Assert(prf.CustomAlgorithmUuid == Convert.ToBase64String(
                                 m_uuid.UuidBytes, Base64FormattingOptions.None));
            }
            Random keylen = new Random((int)crsRandomSource.GetRandomUInt64());
            int    k      = keylen.Next(3, 7);

            return(new ProtectedString(false, cockPwdGenerator(k, keylen)));
        }
        /// <summary>
        /// Generates a random integer between <paramref name="min"/> and <paramref name="max"/>.
        /// </summary>
        /// <param name="random">A <see cref="CryptoRandomStream"/> instance.</param>
        /// <param name="min">The minimum value.</param>
        /// <param name="max">The maximum value.</param>
        /// <returns>A random value between <paramref name="min"/> and <paramref name="max"/>.</returns>
        public static int Next(this CryptoRandomStream random, int min, int max)
        {
            if (min >= max)
            {
                throw new ArgumentOutOfRangeException("min" /*nameof(min)*/);
            }

            var diff       = (long)max - min;
            var upperBound = uint.MaxValue / diff * diff;

            uint ui;

            do
            {
                ui = (uint)random.GetRandomUInt64();
            }while (ui >= upperBound);
            return((int)(min + (ui % diff)));
        }
Esempio n. 10
0
        internal static void Shuffle(char[] v, CryptoRandomStream crsRandomSource)
        {
            if (v == null)
            {
                Debug.Assert(false); return;
            }
            if (crsRandomSource == null)
            {
                Debug.Assert(false); return;
            }

            for (int i = v.Length - 1; i >= 1; --i)
            {
                int j = (int)crsRandomSource.GetRandomUInt64((ulong)(i + 1));

                char t = v[i];
                v[i] = v[j];
                v[j] = t;
            }
        }
Esempio n. 11
0
        internal static char GenerateCharacter(PwProfile pwProfile,
                                               PwCharSet pwCharSet, CryptoRandomStream crsRandomSource)
        {
            if (pwCharSet.Size == 0)
            {
                return(char.MinValue);
            }

            ulong uIndex = crsRandomSource.GetRandomUInt64();

            uIndex %= (ulong)pwCharSet.Size;

            char ch = pwCharSet[(uint)uIndex];

            if (pwProfile.NoRepeatingCharacters)
            {
                pwCharSet.Remove(ch);
            }

            return(ch);
        }
Esempio n. 12
0
		internal static void ShufflePassword(char[] pPassword,
			CryptoRandomStream crsRandomSource)
		{
			Debug.Assert(pPassword != null); if(pPassword == null) return;
			Debug.Assert(crsRandomSource != null); if(crsRandomSource == null) return;

			if(pPassword.Length <= 1) return; // Nothing to shuffle

			for(int nSelect = 0; nSelect < pPassword.Length; ++nSelect)
			{
				ulong uRandomIndex = crsRandomSource.GetRandomUInt64();
				uRandomIndex %= (ulong)(pPassword.Length - nSelect);

				char chTemp = pPassword[nSelect];
				pPassword[nSelect] = pPassword[nSelect + (int)uRandomIndex];
				pPassword[nSelect + (int)uRandomIndex] = chTemp;
			}
		}
        public static int GetRandomInt(this CryptoRandomStream crs, int max)
        {
            var rand = crs.GetRandomUInt64();

            return((int)(rand % (ulong)max));
        }