Example #1
0
        public PasswordSequenceConfiguration LoadFromFile(string path)
        {
            if (path == null || path == string.Empty)
            {
                throw new Exception("path must be a valid file path");
            }

            PasswordSequenceConfiguration config = null;

            try
            {
                if (File.Exists(path))
                {
                    using (FileStream configStream = File.OpenRead(path))
                    {
                        config = LoadFromStream(configStream);
                    }
                }
                else
                {
                    /* Config file not found; create empty config */
                    config = new PasswordSequenceConfiguration(true);
                    /* TODO: pop up an error message or something? */
                }
            }
            catch (InvalidOperationException)
            {
                config = null;
            }
            return(config);
        }
Example #2
0
        public string GenerateSequence(PasswordSequenceConfiguration globalConfiguration,
                                       CryptoRandomRange cryptoRandom)
        {
            if (globalConfiguration == null)
            {
                return(string.Empty);
            }
            string targetSequence = string.Empty;

            foreach (SequenceItem sequenceItem in globalConfiguration.Sequence)
            {
                targetSequence += new ItemGenerator.ItemGenerator(globalConfiguration)
                                  .Generate(sequenceItem, cryptoRandom);
            }
            return(targetSequence);
        }
Example #3
0
        public void Save(PasswordSequenceConfiguration configuration)
        {
            if (Sequencer.GetAdvancedOptionRequired(configuration) && Sequencer.AdvancedOptionsDialog("Configuring password sequence using the advanced mode can result in the password being weaker that what is displaied by the strength bar. " +
                                                                                                      "Click Ok if you want to save the sequence anyway.") == System.Windows.Forms.DialogResult.Cancel)
            {
                return;
            }


            /* pass "true" to GetConfigurationPath to default to the user config
             * even when it doesn't exist yet; we'll create it here
             */
            PasswordSequenceConfigurationFactory factory = new PasswordSequenceConfigurationFactory();

            string configFile = factory.GetUserFilePath(configuration.Name);

            if (null != configFile)
            {
                XmlSerializer serializer =
                    new XmlSerializer(typeof(PasswordSequenceConfiguration),
                                      "http://quasivirtuel.com/PasswordSequenceConfiguration.xsd");

                /* create the config file's directory if needed */
                Directory.CreateDirectory(Path.GetDirectoryName(configFile));

                /* open the file for writing, creating a new one if needed */
                FileStream configStream = File.Open(configFile, FileMode.Create);

                try
                {
                    serializer.Serialize(configStream, configuration);
                }
                finally
                {
                    configStream.Close();
                }
            }

            /* TODO: should we pop up an error message or something in the
             * "else" case (i.e. when getting config file path fails)?
             */
        }
Example #4
0
        internal static bool GetAdvancedOptionRequired(PasswordSequenceConfiguration configuration)
        {
            bool usesAdvancedOptions = false;

            foreach (SequenceItem item in configuration.Sequence)
            {
                WordSequenceItem word = item as WordSequenceItem;
                if (word != null)
                {
                    usesAdvancedOptions = word.Probability < PercentEnum.Always;
                }
                CharacterSequenceItem characters = item as CharacterSequenceItem;
                if (characters != null)
                {
                    usesAdvancedOptions = characters.Probability < PercentEnum.Always || characters.LengthStrength < StrengthEnum.Full;
                }
                if (usesAdvancedOptions)
                {
                    break;
                }
            }
            return(usesAdvancedOptions);
        }
Example #5
0
 public ItemGenerator(PasswordSequenceConfiguration globalConfiguration)
 {
     _globalConfiguration = globalConfiguration;
 }
Example #6
0
        public override ProtectedString Generate(PwProfile prf, CryptoRandomStream crsRandomSource)
        {
            PasswordSequenceConfiguration config = Load(prf.CustomAlgorithmOptions);

            return(new ProtectedString(true, GenerateSequence(config, new CryptoRandomRange(crsRandomSource))));
        }
Example #7
0
 public SubstitutionsVisitor(PasswordSequenceConfiguration globalConfiguration)
 {
     _globalConfiguration = globalConfiguration;
 }