Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2db631d8da | ||
|
|
05009f1a96 | ||
|
|
7c19e48828 | ||
|
|
40725f55a1 | ||
|
|
633cdc471f | ||
|
|
dab131a32e | ||
|
|
f465d1112e | ||
|
|
5919ba8864 |
+36
@@ -5,6 +5,42 @@ name: default
|
|||||||
steps:
|
steps:
|
||||||
- name: test
|
- name: test
|
||||||
image: clojure:temurin-11-lein-2.10.0-alpine
|
image: clojure:temurin-11-lein-2.10.0-alpine
|
||||||
|
volumes:
|
||||||
|
- name: package_cache
|
||||||
|
path: /root/.m2/
|
||||||
commands:
|
commands:
|
||||||
- lein test
|
- lein test
|
||||||
|
|
||||||
|
- name: build
|
||||||
|
image: clojure:temurin-11-lein-2.10.0-alpine
|
||||||
|
volumes:
|
||||||
|
- name: package_cache
|
||||||
|
path: /root/.m2/
|
||||||
|
commands:
|
||||||
|
- lein uberjar
|
||||||
|
when:
|
||||||
|
event: tag
|
||||||
|
|
||||||
|
- name: gitea_release
|
||||||
|
image: plugins/gitea-release
|
||||||
|
settings:
|
||||||
|
api_key:
|
||||||
|
from_secret: API_KEY
|
||||||
|
base_url:
|
||||||
|
from_secret: BASE_URL
|
||||||
|
files:
|
||||||
|
- target/uberjar/*.jar
|
||||||
|
checksum:
|
||||||
|
- md5
|
||||||
|
- sha1
|
||||||
|
- sha256
|
||||||
|
- sha512
|
||||||
|
- adler32
|
||||||
|
- crc32
|
||||||
|
when:
|
||||||
|
event: tag
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
- name: package_cache
|
||||||
|
temp: {}
|
||||||
|
|
||||||
|
|||||||
+80
-1
@@ -7,6 +7,76 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
## [0.7.2] - 2023-10-21
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Update the CHANGELOG.
|
||||||
|
- Update the version.
|
||||||
|
- Update the README.
|
||||||
|
- Update the CI/CD configuration to publish the artifacts to the release.
|
||||||
|
- Update the diffs in the CHANGELOG.
|
||||||
|
|
||||||
|
## [0.7.1] - 2023-10-20
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
- Remove the test for FrequencyAnalyzer.
|
||||||
|
- Remove the option for FrequencyAnalyzer.
|
||||||
|
|
||||||
|
## [0.7.0] - 2023-10-20
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Refactor to move actions to separated files.
|
||||||
|
|
||||||
|
## [0.6.3] - 2023-10-14
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add the IsNonsense interface for FrequencyAnalyzer.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Update the frequency analyzer.
|
||||||
|
|
||||||
|
## [0.6.2] - 2023-10-14
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add the analyzer options and their actions.
|
||||||
|
- Add the available ciphers and analyzer for the help.
|
||||||
|
- Add validations to check if a cipher or an analyzer is available.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Refactor to move options to a separated file.
|
||||||
|
|
||||||
|
## [0.6.1] - 2023-10-13
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add the function to make a frequency string from a map.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Fix the bug that the default language symbols override the symbols.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Update the FrequencyAnalyzer to use the frequency string instead.
|
||||||
|
|
||||||
|
## [0.6.0] - 2023-10-12
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Fix the typo "frequences" to frequencies.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Refactor the project structure.
|
||||||
|
|
||||||
|
## [0.5.5] - 2023-10-09
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add the Gitlab CI/CD configuration.
|
||||||
|
|
||||||
|
## [0.5.4] - 2023-10-05
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add the java source path.
|
||||||
|
- Add the Caesar decrypted interface for Java.
|
||||||
|
- Add a frequency analyzer as a stub.
|
||||||
|
- Add the clojure wrapper for the frequency analizer and its test.
|
||||||
|
|
||||||
## [0.5.3] - 2023-10-05
|
## [0.5.3] - 2023-10-05
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
@@ -107,7 +177,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
### Added
|
### Added
|
||||||
- Project initialization.
|
- Project initialization.
|
||||||
|
|
||||||
[Unreleased]: https://gitlab.com/KKlochko/cipher-analytical-machine/-/compare/0.5.3...main?from_project_id=50218541&straight=false
|
[Unreleased]: https://gitlab.com/KKlochko/cipher-analytical-machine/-/compare/0.7.2...main?from_project_id=50218541&straight=false
|
||||||
|
[0.7.2]: https://gitlab.com/KKlochko/cipher-analytical-machine/-/compare/0.7.1...0.7.2?from_project_id=50218541&straight=false
|
||||||
|
[0.7.1]: https://gitlab.com/KKlochko/cipher-analytical-machine/-/compare/0.7.0...0.7.1?from_project_id=50218541&straight=false
|
||||||
|
[0.7.0]: https://gitlab.com/KKlochko/cipher-analytical-machine/-/compare/0.6.3...0.7.0?from_project_id=50218541&straight=false
|
||||||
|
[0.6.3]: https://gitlab.com/KKlochko/cipher-analytical-machine/-/compare/0.6.2...0.6.3?from_project_id=50218541&straight=false
|
||||||
|
[0.6.2]: https://gitlab.com/KKlochko/cipher-analytical-machine/-/compare/0.6.1...0.6.2?from_project_id=50218541&straight=false
|
||||||
|
[0.6.1]: https://gitlab.com/KKlochko/cipher-analytical-machine/-/compare/0.6.0...0.6.1?from_project_id=50218541&straight=false
|
||||||
|
[0.6.0]: https://gitlab.com/KKlochko/cipher-analytical-machine/-/compare/0.5.5...0.6.0?from_project_id=50218541&straight=false
|
||||||
|
[0.5.5]: https://gitlab.com/KKlochko/cipher-analytical-machine/-/compare/0.5.4...0.5.5?from_project_id=50218541&straight=false
|
||||||
|
[0.5.4]: https://gitlab.com/KKlochko/cipher-analytical-machine/-/compare/0.5.3...0.5.4?from_project_id=50218541&straight=false
|
||||||
[0.5.3]: https://gitlab.com/KKlochko/cipher-analytical-machine/-/compare/0.5.2...0.5.3?from_project_id=50218541&straight=false
|
[0.5.3]: https://gitlab.com/KKlochko/cipher-analytical-machine/-/compare/0.5.2...0.5.3?from_project_id=50218541&straight=false
|
||||||
[0.5.2]: https://gitlab.com/KKlochko/cipher-analytical-machine/-/compare/0.5.1...0.5.2?from_project_id=50218541&straight=false
|
[0.5.2]: https://gitlab.com/KKlochko/cipher-analytical-machine/-/compare/0.5.1...0.5.2?from_project_id=50218541&straight=false
|
||||||
[0.5.1]: https://gitlab.com/KKlochko/cipher-analytical-machine/-/compare/0.5.0...0.5.1?from_project_id=50218541&straight=false
|
[0.5.1]: https://gitlab.com/KKlochko/cipher-analytical-machine/-/compare/0.5.0...0.5.1?from_project_id=50218541&straight=false
|
||||||
|
|||||||
@@ -11,10 +11,12 @@ Download from https://gitlab.com/KKlochko/cipher-analytical-machine.
|
|||||||
You need install java, before run the application.
|
You need install java, before run the application.
|
||||||
Run the application with a command:
|
Run the application with a command:
|
||||||
|
|
||||||
$ java -jar cipher-analytical-machine-0.1.0-standalone.jar [args]
|
$ java -jar cipher-analytical-machine-VERSION-standalone.jar [args]
|
||||||
|
$ java -jar cipher-analytical-machine-0.7.2-standalone.jar [args]
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
Copyright © 2023 Kostiantyn Klochko
|
Copyright © 2023 Kostiantyn Klochko
|
||||||
|
|
||||||
Under the GNU Lesser General Public License v3.0 or later.
|
Under the GNU Lesser General Public License v3.0 or later.
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
(defproject cipher-analytical-machine "0.1.0-SNAPSHOT"
|
(defproject cipher-analytical-machine "0.7.2"
|
||||||
:description "A program helps to learn how ciphers works."
|
:description "A program helps to learn how ciphers works."
|
||||||
:url "https://gitlab.com/KKlochko/cipher-analytical-machine"
|
:url "https://gitlab.com/KKlochko/cipher-analytical-machine"
|
||||||
:license {:name "LGPL"
|
:license {:name "LGPL"
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
(ns cipher-analytical-machine.cli.actions.cracking
|
||||||
|
(:require
|
||||||
|
[cipher-analytical-machine.analyzers.caesar :as caesar-analyzers]
|
||||||
|
[cipher-analytical-machine.symbols.frequencies :as symbol-frequencies])
|
||||||
|
(:gen-class))
|
||||||
|
|
||||||
|
(defn cracking-caesar
|
||||||
|
[options arguments]
|
||||||
|
(let [analyzer (:analyzer options)
|
||||||
|
message (:message options)
|
||||||
|
symbols (:symbols options)
|
||||||
|
frequencies symbol-frequencies/english-letter-frequencies]
|
||||||
|
(cond
|
||||||
|
(= analyzer "Chi^2")
|
||||||
|
(caesar-analyzers/get-plaintext message symbols frequencies)
|
||||||
|
|
||||||
|
:else
|
||||||
|
(caesar-analyzers/get-plaintext message symbols frequencies))))
|
||||||
|
|
||||||
|
(defn cracking-actions
|
||||||
|
[options arguments action-type]
|
||||||
|
(let [cipher (:cipher options)]
|
||||||
|
(cond
|
||||||
|
(= cipher "Caesar")
|
||||||
|
(cracking-caesar options arguments))))
|
||||||
|
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
(ns cipher-analytical-machine.cli.actions.cryptography
|
||||||
|
(:require
|
||||||
|
[cipher-analytical-machine.ciphers.caesar :as caesar])
|
||||||
|
(:gen-class))
|
||||||
|
|
||||||
|
(defn caesar-actions
|
||||||
|
[options arguments action-type]
|
||||||
|
(let [message (:message options)
|
||||||
|
key (Integer/parseInt (:key options))
|
||||||
|
symbols (:symbols options)]
|
||||||
|
(cond
|
||||||
|
(= action-type :encrypt)
|
||||||
|
(caesar/encrypt-message message key symbols)
|
||||||
|
|
||||||
|
(= action-type :decrypt)
|
||||||
|
(caesar/decrypt-message message key symbols))))
|
||||||
|
|
||||||
|
(defn cryptography-actions
|
||||||
|
[options arguments action-type]
|
||||||
|
(let [cipher (:cipher options)]
|
||||||
|
(cond
|
||||||
|
(= cipher "Caesar")
|
||||||
|
(caesar-actions options arguments action-type))))
|
||||||
|
|
||||||
@@ -1,12 +1,11 @@
|
|||||||
(ns cipher-analytical-machine.cli.cli
|
(ns cipher-analytical-machine.cli.cli
|
||||||
(:require
|
(:require
|
||||||
[cipher-analytical-machine.cli.file :as file]
|
[cipher-analytical-machine.cli.file :as file]
|
||||||
[cipher-analytical-machine.ciphers.caesar :as caesar]
|
|
||||||
[cipher-analytical-machine.analyzers.caesar :as caesar-analyzers]
|
|
||||||
[cipher-analytical-machine.symbols.factories :as sf]
|
[cipher-analytical-machine.symbols.factories :as sf]
|
||||||
[cipher-analytical-machine.symbols.frequencies :as symbol-frequencies]
|
|
||||||
[cipher-analytical-machine.cli.options :as options]
|
[cipher-analytical-machine.cli.options :as options]
|
||||||
[clojure.string :as cs]
|
[clojure.string :as cs]
|
||||||
|
[cipher-analytical-machine.cli.actions.cryptography :as cryptography]
|
||||||
|
[cipher-analytical-machine.cli.actions.cracking :as cracking]
|
||||||
[clojure.tools.cli :refer [parse-opts]])
|
[clojure.tools.cli :refer [parse-opts]])
|
||||||
(:gen-class))
|
(:gen-class))
|
||||||
|
|
||||||
@@ -148,51 +147,16 @@
|
|||||||
(save-output output options))
|
(save-output output options))
|
||||||
(println output))
|
(println output))
|
||||||
|
|
||||||
(defn cracking-caesar
|
|
||||||
[options arguments]
|
|
||||||
(let [analyzer (:analyzer options)
|
|
||||||
message (:message options)
|
|
||||||
symbols (:symbols options)
|
|
||||||
frequencies symbol-frequencies/english-letter-frequencies]
|
|
||||||
(cond
|
|
||||||
(= analyzer "Chi^2")
|
|
||||||
(caesar-analyzers/get-plaintext message symbols frequencies)
|
|
||||||
|
|
||||||
(= analyzer "Frequency")
|
|
||||||
(caesar-analyzers/frequency-analizer-get-plaintext message symbols
|
|
||||||
(symbol-frequencies/map-to-string frequencies)
|
|
||||||
(:language options "en")))))
|
|
||||||
|
|
||||||
(defn cracking-actions
|
|
||||||
[options arguments action-type]
|
|
||||||
(let [cipher (:cipher options)]
|
|
||||||
(cond
|
|
||||||
(= cipher "Caesar")
|
|
||||||
(cracking-caesar options arguments)
|
|
||||||
)))
|
|
||||||
|
|
||||||
(defn crypt-actions
|
|
||||||
[options arguments action-type]
|
|
||||||
(let [message (:message options)
|
|
||||||
key (Integer/parseInt (:key options))
|
|
||||||
symbols (:symbols options)]
|
|
||||||
(cond
|
|
||||||
(= action-type :encrypt)
|
|
||||||
(caesar/encrypt-message message key symbols)
|
|
||||||
|
|
||||||
(= action-type :decrypt)
|
|
||||||
(caesar/decrypt-message message key symbols))))
|
|
||||||
|
|
||||||
(defn actions
|
(defn actions
|
||||||
[options arguments action-type]
|
[options arguments action-type]
|
||||||
(let [options (load-all-options options)]
|
(let [options (load-all-options options)]
|
||||||
(->
|
(->
|
||||||
(cond
|
(cond
|
||||||
(contains? #{:encrypt :decrypt} action-type)
|
(contains? #{:encrypt :decrypt} action-type)
|
||||||
(crypt-actions options arguments action-type)
|
(cryptography/cryptography-actions options arguments action-type)
|
||||||
|
|
||||||
(= action-type :cracking)
|
(= action-type :cracking)
|
||||||
(cracking-actions options arguments action-type))
|
(cracking/cracking-actions options arguments action-type))
|
||||||
|
|
||||||
(show-and-save-output options))))
|
(show-and-save-output options))))
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
(option-values-as-row "Ciphers" cipher-options))
|
(option-values-as-row "Ciphers" cipher-options))
|
||||||
|
|
||||||
(def analyzers-options
|
(def analyzers-options
|
||||||
{"Caesar" #{"Chi^2" "Frequency"}})
|
{"Caesar" #{"Chi^2"}})
|
||||||
|
|
||||||
(defn get-available-analyzers-options-as-string
|
(defn get-available-analyzers-options-as-string
|
||||||
"Return the formatted string of analyzers options."
|
"Return the formatted string of analyzers options."
|
||||||
|
|||||||
@@ -74,13 +74,3 @@
|
|||||||
(is (= (cs/lower-case plaintext)
|
(is (= (cs/lower-case plaintext)
|
||||||
(get-plaintext ciphertext symbols frequencies))))))
|
(get-plaintext ciphertext symbols frequencies))))))
|
||||||
|
|
||||||
(deftest frequency-analizer-get-plaintext-test
|
|
||||||
(let [plaintext "abc"
|
|
||||||
ciphertext "bca"
|
|
||||||
key 1
|
|
||||||
symbols "abc"
|
|
||||||
frequencies "etaoinsrhldcumfpgwybvkxjqz"]
|
|
||||||
(testing "The ciphertext is 'bca' and key is 1."
|
|
||||||
(is (= plaintext
|
|
||||||
(frequency-analizer-get-plaintext ciphertext symbols frequencies))))))
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user