using Bit.Seeder.Data.Distributions; using Bit.Seeder.Data.Enums; namespace Bit.Seeder.Data.Static; /// /// Password collections by zxcvbn strength level (0-4) for realistic test data. /// internal static class Passwords { /// /// Score 0 - Too guessable: keyboard walks, simple sequences, single words. /// internal static readonly string[] VeryWeak = [ "password", "123456", "qwerty", "abc123", "letmein", "admin", "welcome", "monkey", "dragon", "master", "111111", "baseball", "iloveyou", "trustno1", "sunshine", "princess", "football", "shadow", "superman", "michael", "password1", "123456789", "12345678", "1234567", "12345", "qwerty123", "1q2w3e4r", "123123", "000000", "654321" ]; /// /// Score 1 - Very guessable: common patterns with minor complexity. /// internal static readonly string[] Weak = [ "Password1", "Qwerty123", "Welcome1", "Admin123", "Letmein1", "Dragon123", "Master123", "Shadow123", "Michael1", "Jennifer1", "abc123!", "pass123!", "test1234", "hello123", "love1234", "money123", "secret1", "access1", "login123", "super123", "changeme", "temp1234", "guest123", "user1234", "pass1234", "default1", "sample12", "demo1234", "trial123", "secure1" ]; /// /// Score 2 - Somewhat guessable: meets basic complexity but predictable patterns. /// internal static readonly string[] Fair = [ "Summer2024!", "Winter2023#", "Spring2024@", "Autumn2023$", "January2024!", "Welcome123!", "Company2024#", "Secure123!", "Access2024@", "Login2024!", "Michael123!", "Jennifer2024@", "Robert456#", "Sarah789!", "David2024!", "Password123!", "Security2024@", "Admin2024!", "User2024#", "Guest123!", "Football123!", "Baseball2024@", "Soccer456#", "Hockey789!", "Tennis2024!", "NewYork2024!", "Chicago123@", "Boston2024#", "Seattle789!", "Denver2024$" ]; /// /// Score 3 - Safely unguessable: good entropy, mixed character types. /// internal static readonly string[] Strong = [ "k#9Lm$vQ2@xR7nP!", "Yx8&mK3$pL5#wQ9@", "Nv4%jH7!bT2@sF6#", "Rm9#cX5$gW1@zK8!", "Qp3@hY6#nL9$tB2!", "Wz7!mF4@kS8#xC1$", "Jd2#pR9!vN5@bG7$", "Ht6@wL3#yK8!mQ4$", "Bf8$cM2@zT5#rX9!", "Lg1!nV7@sH4#pY6$", "Xk5#tW8@jR2$mN9!", "Cv3@yB6#pF1$qL4!", "correct-horse-battery", "purple-monkey-dishwasher", "quantum-bicycle-elephant", "velvet-thunder-crystal", "neon-wizard-cosmic", "amber-phoenix-digital", "Brave.Tiger.Runs.42", "Blue.Ocean.Deep.17", "Swift.Eagle.Soars.93", "maple#stream#winter", "ember@cloud@silent", "frost$dawn$valley" ]; /// /// Score 4 - Very unguessable: high entropy, long passphrases, random strings. /// internal static readonly string[] VeryStrong = [ "Kx9#mL4$pQ7@wR2!vN5hT8", "Yz3@hT8#bF1$cS6!nM9wK4", "Wv5!rK2@jG9#tX4$mL7nB3", "Qn7$sB3@yH6#pC1!zF8kW2", "Tm2@xD5#kW9$vL4!rJ7gN1", "Pf4!nC8@bR3#yL6$hS9mV2", "correct-horse-battery-staple", "purple-monkey-dishwasher-lamp", "quantum-bicycle-elephant-storm", "velvet-thunder-crystal-forge", "neon-wizard-cosmic-river", "amber-phoenix-digital-maze", "silver-falcon-ancient-code", "lunar-garden-frozen-spark", "echo-prism-wandering-light", "Brave.Tiger.Runs.Fast.42!", "Blue.Ocean.Deep.Wave.17@", "Swift.Eagle.Soars.High.93#", "maple#stream#winter#glow#dawn", "ember@cloud@silent@peak@mist", "frost$dawn$valley$mist$glow", "7hK$mN2@pL9#xR4!wQ8vB5&jF", "3yT@nC7#bS1$kW6!mH9rL2%xD", "9pF!vK4@jR8#tN3$yB7mL1&wS" ]; /// All passwords combined for mixed/random selection. internal static readonly string[] All = [.. VeryWeak, .. Weak, .. Fair, .. Strong, .. VeryStrong]; internal static string[] GetByStrength(PasswordStrength strength) => strength switch { PasswordStrength.VeryWeak => VeryWeak, PasswordStrength.Weak => Weak, PasswordStrength.Fair => Fair, PasswordStrength.Strong => Strong, PasswordStrength.VeryStrong => VeryStrong, _ => Strong }; /// /// Gets a password using the provided distribution to select strength. /// internal static string GetPassword(int index, int total, Distribution distribution) { var strength = distribution.Select(index, total); var passwords = GetByStrength(strength); return passwords[index % passwords.Length]; } }