@Override public double exec(Match match) { if (match.guesses != null) return match.guesses; int minGuesses = 1; if (match.token.length() < password.length()) { minGuesses = match.token.length() == 1 ? MIN_SUBMATCH_GUESSES_SINGLE_CHAR : MIN_SUBMATCH_GUESSES_MULTI_CHAR; } final Guess guess; switch (match.pattern) { case Bruteforce: guess = new BruteforceGuess(); break; case Dictionary: guess = new DictionaryGuess(); break; case Spatial: guess = new SpatialGuess(); break; case Repeat: guess = new RepeatGuess(); break; case Sequence: guess = new SequenceGuess(); break; case Regex: guess = new RegexGuess(); break; case Date: guess = new DateGuess(); break; default: guess = null; break; } double guesses = guess != null ? guess.exec(match) : 0; match.guesses = Math.max(guesses, minGuesses); match.guessesLog10 = Scoring.log10(match.guesses); return match.guesses; } }
@Override public double exec(Match match) { if (match.guesses != null) return match.guesses; int minGuesses = 1; if (match.token.length() < password.length()) { minGuesses = match.token.length() == 1 ? MIN_SUBMATCH_GUESSES_SINGLE_CHAR : MIN_SUBMATCH_GUESSES_MULTI_CHAR; } final Guess guess; switch (match.pattern) { case Bruteforce: guess = new BruteforceGuess(); break; case Dictionary: guess = new DictionaryGuess(); break; case Spatial: guess = new SpatialGuess(); break; case Repeat: guess = new RepeatGuess(); break; case Sequence: guess = new SequenceGuess(); break; case Regex: guess = new RegexGuess(); break; case Date: guess = new DateGuess(); break; default: guess = null; break; } double guesses = guess != null ? guess.exec(match) : 0; match.guesses = Math.max(guesses, minGuesses); match.guessesLog10 = Scoring.log10(match.guesses); return match.guesses; } }
@Test public void testCalcGuessesYear() throws Exception { Match match = MatchFactory.createDateMatch(0, 0, "1977", "/", 1977, 7, 14); String msg = "estimate_guesses delegates based on pattern"; assertEquals(msg, new EstimateGuess("1977").exec(match), new DateGuess().exec(match), 0.0); }