diff --git a/src/cipher_analytical_machine/cli/actions/cracking.clj b/src/cipher_analytical_machine/cli/actions/cracking.clj index db4a8ab..4162727 100644 --- a/src/cipher_analytical_machine/cli/actions/cracking.clj +++ b/src/cipher_analytical_machine/cli/actions/cracking.clj @@ -1,6 +1,7 @@ (ns cipher-analytical-machine.cli.actions.cracking (:require [cipher-analytical-machine.analyzers.caesar :as caesar-analyzers] + [cipher-analytical-machine.analyzers.simple-substitution :as ss-analyzers] [cipher-analytical-machine.symbols.frequencies :as symbol-frequencies]) (:gen-class)) @@ -18,10 +19,27 @@ :else (caesar-analyzers/get-plaintext message symbols frequencies)))) +(defn cracking-simple-substitution-with-caesar + [options arguments] + (let [analyzer (:analyzer options) + message (:message options) + symbols (:symbols options) + frequencies (-> (get options :language "en") + (symbol-frequencies/default-frequency-factory))] + (cond + (= analyzer "Chi^2") + (ss-analyzers/get-plaintext-and-key message frequencies) + + :else + (ss-analyzers/get-plaintext-and-key message frequencies)))) + (defn cracking-actions [options arguments action-type] (let [cipher (:cipher options)] (cond (= cipher "Caesar") - (cracking-caesar options arguments)))) + (cracking-caesar options arguments) + + (= cipher "Simple substitution and Caesar") + (cracking-simple-substitution-with-caesar options arguments)))) diff --git a/src/cipher_analytical_machine/cli/options.clj b/src/cipher_analytical_machine/cli/options.clj index dd93152..61624d7 100644 --- a/src/cipher_analytical_machine/cli/options.clj +++ b/src/cipher_analytical_machine/cli/options.clj @@ -32,7 +32,8 @@ (option-values-as-row "Ciphers" cipher-options)) (def analyzers-options - {"Caesar" #{"Chi^2"}}) + {"Caesar" #{"Chi^2" "Frequency"} + "Simple substitution and Caesar" #{"Chi^2" "Frequency"}}) (defn get-available-analyzers-options-as-string "Return the formatted string of analyzers options."