@Test public void testDictionaryGuessesMixed() throws Exception { Map<Character, Character> sub = new HashMap<>(); sub.put('@', 'a'); Match match = new Match.Builder(Pattern.Dictionary, 0, 0, "AaA@@@").sub(sub).l33t(true).rank(32).build(); String msg = "extra guesses are added for both capitalization and common l33t substitutions"; int expected = 32 * new DictionaryGuess().l33tVariations(match) * new DictionaryGuess().uppercaseVariations(match); assertEquals(msg, expected, new DictionaryGuess().exec(match), 0.0); }
@Test public void testSequenceGuesses() throws Exception { Match match = new Match.Builder(Pattern.Sequence, 0, 0, token).ascending(ascending).build(); String msg = String.format("the sequence pattern '%s' has guesses of %s", token, expectedGuesses); assertEquals(msg, expectedGuesses, new SequenceGuess().exec(match), 0.0); }
@Test public void testRepeatGuesses() throws Exception { double baseGuesses = Scoring.mostGuessableMatchSequence( baseToken, new Matching().omnimatch(baseToken)).getGuesses(); Match match = new Match.Builder(Pattern.Repeat, 0, 0, token) .baseToken(baseToken) .baseGuesses(baseGuesses) .repeatCount(repeatCount) .build(); double expectedGuesses = baseGuesses * repeatCount; String msg = String.format("the repeat pattern '%s' has guesses of %s", token, expectedGuesses); assertEquals(msg, expectedGuesses, new RepeatGuess().exec(match), 0.0); }
public static Match createBruteforceMatch(int i, int j, String token) { return new Match.Builder(Pattern.Bruteforce, i, j, token).build(); }
public static Match createBruteforceMatch(int i, int j, String token) { return new Match.Builder(Pattern.Bruteforce, i, j, token).build(); }
public static Match createRegexMatch(int i, int j, String token, String regexName, java.util.regex.Matcher regexMatch) { return new Match.Builder(Pattern.Regex, i, j, token) .regexName(regexName) .regexMatch(regexMatch) .build(); }
@Test public void testDictionaryGuessesCapitalization() throws Exception { Match match = new Match.Builder(Pattern.Dictionary, 0, 0, "AAAaaa").rank(32).build(); String msg = "extra guesses are added for capitalization"; assertEquals(msg, 32 * new DictionaryGuess().uppercaseVariations(match), new DictionaryGuess().exec(match), 0.0); }
public static Match createRegexMatch(int i, int j, String token, String regexName, java.util.regex.Matcher regexMatch) { return new Match.Builder(Pattern.Regex, i, j, token) .regexName(regexName) .regexMatch(regexMatch) .build(); }
public static Match createSequenceMatch(int i, int j, String token, String sequenceName, int sequenceSpace, boolean ascending) { return new Match.Builder(Pattern.Sequence, i, j, token) .sequenceName(sequenceName) .sequenceSpace(sequenceSpace) .ascending(ascending) .build(); }
@Test public void testDictionaryGuessesReverse() throws Exception { Match match = new Match.Builder(Pattern.Dictionary, 0, 0, "aaa").reversed(true).rank(32).build(); String msg = "guesses are doubled when word is reversed"; assertEquals(msg, 32 * 2, new DictionaryGuess().exec(match), 0.0); }
@Test public void testCalcGuessesPassword() throws Exception { Match match = new Match.Builder(Pattern.Dictionary, 0, 8, "password").guesses(1.0).build(); String msg = "estimate_guesses returns cached guesses when available"; assertEquals(msg, 1, new EstimateGuess("password").exec(match), 0.0); }
public static Match createReversedDictionaryMatch(int i, int j, String token, String matchedWord, int rank, String dictionaryName) { return new Match.Builder(Pattern.Dictionary, i, j, token) .matchedWord(matchedWord) .rank(rank) .dictionaryName(dictionaryName) .reversed(true) .l33t(false) .build(); }
public static Match createRepeatMatch(int i, int j, String token, String baseToken, double baseGuesses, List<Match> baseMatches, int repeatCount) { return new Match.Builder(Pattern.Repeat, i, j, token) .baseToken(baseToken) .baseGuesses(baseGuesses) .baseMatches(baseMatches) .repeatCount(repeatCount) .build(); }
public static Match createSpatialMatch(int i, int j, String token, String graph, int turns, int shiftedCount) { return new Match.Builder(Pattern.Spatial, i, j, token) .graph(graph) .turns(turns) .shiftedCount(shiftedCount) .build(); }
@Test public void testDictionaryGuessesSameWithRank() throws Exception { Match match = new Match.Builder(Pattern.Dictionary, 0, 0, "aaaa").rank(32).build(); String msg = "base guesses == the rank"; assertEquals(msg, 32, new DictionaryGuess().exec(match), 0.0); }
public static Match createSequenceMatch(int i, int j, String token, String sequenceName, int sequenceSpace, boolean ascending) { return new Match.Builder(Pattern.Sequence, i, j, token) .sequenceName(sequenceName) .sequenceSpace(sequenceSpace) .ascending(ascending) .build(); }
@Test public void testDictionaryGuesses133t() throws Exception { Map<Character, Character> sub = new HashMap<>(); sub.put('@', 'a'); Match match = new Match.Builder(Pattern.Dictionary, 0, 0, "aaa@@@").sub(sub).l33t(true).rank(32).build(); String msg = "extra guesses are added for common l33t substitutions"; assertEquals(msg, 32 * new DictionaryGuess().l33tVariations(match), new DictionaryGuess().exec(match), 0.0); }
public static Match createReversedDictionaryMatch(int i, int j, String token, String matchedWord, int rank, String dictionaryName) { return new Match.Builder(Pattern.Dictionary, i, j, token) .matchedWord(matchedWord) .rank(rank) .dictionaryName(dictionaryName) .reversed(true) .l33t(false) .build(); }