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); }
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); }
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)? */ }
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); }
public ItemGenerator(PasswordSequenceConfiguration globalConfiguration) { _globalConfiguration = globalConfiguration; }
public override ProtectedString Generate(PwProfile prf, CryptoRandomStream crsRandomSource) { PasswordSequenceConfiguration config = Load(prf.CustomAlgorithmOptions); return(new ProtectedString(true, GenerateSequence(config, new CryptoRandomRange(crsRandomSource)))); }
public SubstitutionsVisitor(PasswordSequenceConfiguration globalConfiguration) { _globalConfiguration = globalConfiguration; }