private static void TestTextualParsing(ReadablePassphraseGenerator generator, PhraseStrength strength)
        {
            Console.WriteLine("Testing parsing of textual phrase strength {0}...", strength);
            var description = Clause.CreatePhraseDescription(strength, generator.Randomness);
            var sb          = new StringBuilder();

            foreach (var c in description)
            {
                c.ToStringBuilder(sb);
            }
            var textualDescription = sb.ToString();

            Console.Write("    Generation OK.");
            var customStrength = Clause.CreateCollectionFromTextString(textualDescription);

            Console.Write(" Parsing OK.");
            generator.Generate(customStrength);
            Console.WriteLine(" Passphrase OK.");
        }
Example #2
0
        private void ParseConfig(string configFromKeePass)
        {
            // Load the config up from ToConfigString().
            var  reader = XmlReader.Create(new System.IO.StringReader(configFromKeePass));
            bool inPhraseDescription = false;

            while (reader.Read())
            {
                if (reader.NodeType == XmlNodeType.Element && reader.Name.ToLower() == "readablepassphraseconfig")
                {
                }      // NoOp
                else if (reader.NodeType == XmlNodeType.Element && reader.Name.ToLower() == "spacesbetweenwords")
#pragma warning disable CS0618
                {
                    this.SpacesBetweenWords = Boolean.Parse(reader.GetAttribute("value"));
                }
#pragma warning restore
                else if (reader.NodeType == XmlNodeType.Element && reader.Name.ToLower() == "wordseparator")
                {
                    this.WordSeparator = (WordSeparatorOption)Enum.Parse(typeof(WordSeparatorOption), reader.GetAttribute("value").Replace(" ", ""));
                }
                else if (reader.NodeType == XmlNodeType.Element && reader.Name.ToLower() == "customseparator")
                {
                    this.CustomSeparator = reader.GetAttribute("value");
                }
                else if (reader.NodeType == XmlNodeType.Element && reader.Name.ToLower() == "phrasestrength")
                {
                    this.PhraseStrength = (PhraseStrength)Enum.Parse(typeof(PhraseStrength), reader.GetAttribute("value").Replace("Speach", "Speech"));
                }
                else if (reader.NodeType == XmlNodeType.Element && reader.Name.ToLower() == "usecustomdictionary")
                {
                    this.UseCustomDictionary = Boolean.Parse(reader.GetAttribute("value"));
                }
                else if (reader.NodeType == XmlNodeType.Element && reader.Name.ToLower() == "pathofcustomdictionary")
                {
                    this.PathOfCustomDictionary = reader.GetAttribute("value");
                }
                else if (reader.NodeType == XmlNodeType.Element && reader.Name.ToLower() == "phrasedescription")
                {
                    inPhraseDescription = true;
                }
                else if (reader.NodeType == XmlNodeType.Element && reader.Name.ToLower() == "maxlength")
                {
                    this.MaxLength = Int32.Parse(reader.GetAttribute("value"));
                }
                else if (reader.NodeType == XmlNodeType.Element && reader.Name.ToLower() == "minlength")
                {
                    this.MinLength = Int32.Parse(reader.GetAttribute("value"));
                }
                else if (reader.NodeType == XmlNodeType.CDATA && inPhraseDescription)
                {
                    this.PhraseDescription = Clause.CreateCollectionFromTextString(reader.Value);
                    inPhraseDescription    = false;
                }
                else if (reader.NodeType == XmlNodeType.Element && reader.Name.ToLower() == "mutator")
                {
                    this.Mutator = (MutatorOption)Enum.Parse(typeof(MutatorOption), reader.GetAttribute("value").Replace(" ", ""));
                }
                else if (reader.NodeType == XmlNodeType.Element && reader.Name.ToLower() == "upperstyle")
                {
                    this.UpperStyle = (AllUppercaseStyles)Enum.Parse(typeof(AllUppercaseStyles), reader.GetAttribute("value").Replace(" ", ""));
                }
                else if (reader.NodeType == XmlNodeType.Element && reader.Name.ToLower() == "uppercount")
                {
                    this.UpperCount = Int32.Parse(reader.GetAttribute("value"));
                }
                else if (reader.NodeType == XmlNodeType.Element && reader.Name.ToLower() == "numericstyle")
                {
                    this.NumericStyle = (NumericStyles)Enum.Parse(typeof(NumericStyles), reader.GetAttribute("value").Replace(" ", ""));
                }
                else if (reader.NodeType == XmlNodeType.Element && reader.Name.ToLower() == "numericcount")
                {
                    this.NumericCount = Int32.Parse(reader.GetAttribute("value"));
                }
                else if (reader.NodeType == XmlNodeType.Element && reader.Name.ToLower() == "constantstyle")
                {
                    this.ConstantStyle = (ConstantStyles)Enum.Parse(typeof(ConstantStyles), reader.GetAttribute("value").Replace(" ", ""));
                }
                else if (reader.NodeType == XmlNodeType.Element && reader.Name.ToLower() == "constantvalue")
                {
                    this.ConstantValue = reader.GetAttribute("value");
                }
            }

            if (this.PhraseStrength != PhraseStrength.Custom)
            {
                this.PhraseDescription = this.GetPhraseDescription();
            }

            if (MinLength < 1)
            {
                MinLength = 1;
            }
            if (MinLength > 999)
            {
                MinLength = 999;
            }
            if (MaxLength < 1)
            {
                MaxLength = 1;
            }
            if (MaxLength > 999)
            {
                MaxLength = 999;
            }

            if (UpperCount < 0)
            {
                UpperCount = 0;
            }
            if (UpperCount > 999)
            {
                UpperCount = 999;
            }
            if (NumericCount < 0)
            {
                NumericCount = 0;
            }
            if (NumericCount > 999)
            {
                NumericCount = 999;
            }

#pragma warning disable CS0618
            if (WordSeparator == WordSeparatorOption.Unknown && SpacesBetweenWords)
            {
                WordSeparator = WordSeparatorOption.Space;
            }
            else if (WordSeparator == WordSeparatorOption.Unknown && !SpacesBetweenWords)
            {
                WordSeparator = WordSeparatorOption.None;
            }
#pragma warning restore
        }