예제 #1
0
 public IEnumerable <PasswordRepresentation> GeneratePassword(PasswordFamily family, PasswordRepresentationType type, PasswordStrengthLevel level = PasswordStrengthLevel.Default)
 {
     return(DoGeneratePassword(family, type, level == PasswordStrengthLevel.Default ? DefaultStrengthLevel : level));
 }
예제 #2
0
        protected virtual IEnumerable <PasswordRepresentation> DoGeneratePassword(PasswordFamily family, PasswordRepresentationType type, PasswordStrengthLevel level)
        {
            if (family != PasswordFamily.Text && family != PasswordFamily.PIN)
            {
                yield break;
            }

            if ((type & PasswordRepresentationType.Text) != 0)
            {
                if (family == PasswordFamily.Text)
                {
                    int score = 0;
                    while (true)
                    {
                        using (var password = ExternalRandomGenerator.Instance.NextRandomWebSafeSecureBuffer(getMinLengthForLevel(family, level), getMaxLengthForLevel(family, level)))
                        {
                            score = CalculateStrenghtScore(family, password);

                            if (score >= getMinScoreForLevel(family, level))
                            {
                                var content     = password.Content;
                                var length      = content.Length;
                                var reprContent = new byte[length];
                                Array.Copy(content, reprContent, length);

                                yield return(new PasswordRepresentation(PasswordRepresentationType.Text, "plain/text", reprContent));

                                break;
                            }
                        }
                    }
                }

                if (family == PasswordFamily.PIN)
                {
                    var min = getMinLengthForLevel(family, level);
                    var max = getMaxLengthForLevel(family, level);

                    var minValue = (int)IntMath.Pow(10, min - 1);
                    var maxValue = (int)IntMath.Pow(10, max) - 1;
                    var value    = (uint)ExternalRandomGenerator.Instance.NextScaledRandomInteger(minValue, maxValue);

                    var content     = value.ToString();
                    var reprContent = new byte[content.Length];
                    for (int i = 0; i < content.Length; i++)
                    {
                        reprContent[i] = (byte)content[i];
                    }

                    yield return(new PasswordRepresentation(PasswordRepresentationType.Text, "plain/text", reprContent));
                }
            }
        }
예제 #3
0
 public PasswordRepresentation(PasswordRepresentationType type, string contentType, byte[] content)
 {
     m_Type        = type;
     m_ContentType = contentType;
     m_Content     = content;
 }