Compare commits

..
6 Commits
Author SHA1 Message Date
KKlochko 178c85b0cb Add the simple substitution cipher.
continuous-integration/drone/push Build is passing
2023-10-21 21:45:43 +03:00
KKlochko 2db631d8da Update the diffs in the CHANGELOG.
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
2023-10-21 16:56:32 +03:00
KKlochko 05009f1a96 Update the CI/CD configuration to publish the artifacts to the release.
continuous-integration/drone/push Build is passing
2023-10-21 16:47:22 +03:00
KKlochko 7c19e48828 Update the README. 2023-10-21 16:46:57 +03:00
KKlochko 40725f55a1 Update the version. 2023-10-21 16:46:32 +03:00
KKlochko 633cdc471f Update the CHANGELOG. 2023-10-21 16:46:15 +03:00
6 changed files with 211 additions and 3 deletions
+36
View File
@@ -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
View File
@@ -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
+3 -1
View File
@@ -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
View File
@@ -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,47 @@
(ns cipher-analytical-machine.ciphers.simple-substitution
(:require [clojure.string :as cs]
[clojure.set :as set]
[cipher-analytical-machine.ciphers.caesar :as caesar])
(:gen-class))
(defn shuffled-numbers
"Generate the shuffled order for integer list."
[size]
(-> size
(take (range))
(shuffle)))
(defn generate-substitution-table
"Generate the map (char, int) for the substittion."
[symbols]
(->> (count symbols)
(shuffled-numbers)
(zipmap symbols)))
(defn find-value-in-table
"It uses the substitution table to find the value of a char or a number."
[char substitution-table symbols]
(get substitution-table char))
(defn encrypt-message
"Encrypt a message using the simple substitution cipher. The function is case-insensitive. If a symbol isn't in the symbols list, then it will be removed."
[message key substitution-table symbols]
(let [max-index (count symbols)]
(->> message
(cs/lower-case)
(caesar/encrypt-message key symbols)
(map (fn [char] (find-value-in-table char substitution-table symbols)))
(cs/join \,))))
(defn decrypt-message
"Decrypt a message using the simple substitution cipher. The function is case-insensitive."
[message key substitution-table symbols]
(let [substitution-table (set/map-invert substitution-table)
max-index (count symbols)
message (cs/split message #",")]
(->> message
(map #(Integer/parseInt %))
(map (fn [char] (find-value-in-table char substitution-table symbols)))
(caesar/encrypt-message key symbols)
(cs/join))))
@@ -0,0 +1,44 @@
(ns cipher-analytical-machine.ciphers.simple-substitution
(:require
[clojure.test :refer :all]
[cipher-analytical-machine.ciphers.simple-substitution :refer :all]))
(deftest find-value-in-table-test
(let [table {\a 1 \b 2 \c 3}
rtable {1 \a 2 \b 3 \c}]
(testing "If the symbol is in the table as a key, then the result won't nil."
(are [key expected]
(= expected (find-value-in-table key table))
\a 1
\d nil
1 nil
5 nil))
(testing "If the digit is in the reversed table as a key, then the result won't nil."
(are [key expected]
(= expected (find-value-in-table key rtable))
\a nil
\d nil
1 \a
5 nil))))
(deftest encrypt-message-text
(let [symbols "abc"
table {\a 1 \b 2 \c 3}]
(testing "The function must encrypt the message and remove unknown symbols."
(are [message key expected]
(= expected (encrypt-message message key table symbols))
"abc" 0 "1,2,3"
"abc" 1 "2,3,1"
"aDbdc" 0 "1,2,3"))))
(deftest decrypt-message-text
(let [symbols "abc"
table {\a 1 \b 2 \c 3}]
(testing "The function must decrypt the message and remove unknown numbers."
(are [message key expected]
(= expected (decrypt-message message key table symbols))
"1,2,3" 0 "abc"
"2,3,1" 1 "abc"
"1,12,2,3" 0 "abc"))))