cipherworld-amelia2021 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: caf315ba572bebe826ebcfabd510dd725135fd2a13d3dbebd9aa8e48fb50d694
4
+ data.tar.gz: 6d3563d51e4b2d13d0b829d4e135d5442edf94309f582b67002bd97922765b26
5
+ SHA512:
6
+ metadata.gz: bd977ae91e9c97d65364ccdfcf947b976c0be6e2d7b2f18acd23f588429a425b50ae79db86031083da054bf5c63c063a4c6a90cb09c12af82e167ab52eb24345
7
+ data.tar.gz: 50eeb5f05af0cb48f785cbc9f67a0dc3809339262e1be99b0ddf1d8a7b9c94b9dae53e75ced4a574b95d925b133d2c45cbd0b53847d890dbcec173a7614661b9
data/assets/llc.txt ADDED
@@ -0,0 +1,98 @@
1
+ character, value
2
+ , m
3
+ a, X
4
+ b, p
5
+ c, M
6
+ d, *
7
+ e, D
8
+ f, 3
9
+ g, £
10
+ h, §
11
+ i, t
12
+ j, Y
13
+ k, y
14
+ l, 7
15
+ m, .
16
+ n, w
17
+ o, !
18
+ p, %
19
+ q, g
20
+ r, A
21
+ s, u
22
+ t, 2
23
+ u, J
24
+ v, 9
25
+ w, _
26
+ x, @
27
+ y, [
28
+ z, L
29
+ A, h
30
+ B, q
31
+ C, 0
32
+ D, G
33
+ E, j
34
+ F, ^
35
+ G, Z
36
+ H, ]
37
+ I, I
38
+ J, |
39
+ K, >
40
+ L, B
41
+ M, c
42
+ N, i
43
+ O, e
44
+ P, ;
45
+ Q, ~
46
+ R, :
47
+ S, P
48
+ T, ±
49
+ U, k
50
+ V, S
51
+ W, &
52
+ X, +
53
+ Y, l
54
+ Z, a
55
+ !,
56
+ @, R
57
+ £, ,
58
+ $, }
59
+ %, n
60
+ ^, z
61
+ &, F
62
+ *, 8
63
+ (, C
64
+ ), -
65
+ -, ?
66
+ _, x
67
+ =, 5
68
+ +, U
69
+ [, K
70
+ ], v
71
+ {, =
72
+ }, <
73
+ ;, 1
74
+ :, d
75
+ ', {
76
+ ", N
77
+ \, O
78
+ |, b
79
+ ,, $
80
+ ., Q
81
+ <, H
82
+ >, (
83
+ /, \
84
+ ?, 4
85
+ `, )
86
+ ~, s
87
+ §, 6
88
+ ±, V
89
+ 1, o
90
+ 2, W
91
+ 3, "
92
+ 4, E
93
+ 5, '
94
+ 6, r
95
+ 7, /
96
+ 8, `
97
+ 9, f
98
+ 0, T
data/assets/lnc.txt ADDED
@@ -0,0 +1,98 @@
1
+ character, value
2
+ , 1
3
+ a, 2
4
+ b, 3
5
+ c, 4
6
+ d, 5
7
+ e, 6
8
+ f, 7
9
+ g, 8
10
+ h, 9
11
+ i, 10
12
+ j, 11
13
+ k, 12
14
+ l, 13
15
+ m, 14
16
+ n, 15
17
+ o, 16
18
+ p, 17
19
+ q, 18
20
+ r, 19
21
+ s, 20
22
+ t, 21
23
+ u, 22
24
+ v, 23
25
+ w, 24
26
+ x, 25
27
+ y, 26
28
+ z, 27
29
+ A, 28
30
+ B, 29
31
+ C, 30
32
+ D, 31
33
+ E, 32
34
+ F, 33
35
+ G, 34
36
+ H, 35
37
+ I, 36
38
+ J, 37
39
+ K, 38
40
+ L, 39
41
+ M, 40
42
+ N, 41
43
+ O, 42
44
+ P, 43
45
+ Q, 44
46
+ R, 45
47
+ S, 46
48
+ T, 47
49
+ U, 48
50
+ V, 49
51
+ W, 50
52
+ X, 51
53
+ Y, 52
54
+ Z, 53
55
+ !, 54
56
+ @, 55
57
+ £, 56
58
+ $, 57
59
+ %, 58
60
+ ^, 59
61
+ &, 60
62
+ *, 61
63
+ (, 62
64
+ ), 63
65
+ -, 64
66
+ _, 65
67
+ =, 66
68
+ +, 67
69
+ [, 68
70
+ ], 69
71
+ {, 70
72
+ }, 71
73
+ ;, 72
74
+ :, 73
75
+ ', 74
76
+ ", 75
77
+ \, 76
78
+ |, 77
79
+ ,, 78
80
+ ., 79
81
+ <, 80
82
+ >, 81
83
+ /, 82
84
+ ?, 83
85
+ `, 84
86
+ ~, 85
87
+ §, 86
88
+ ±, 87
89
+ 1, 88
90
+ 2, 89
91
+ 3, 90
92
+ 4, 91
93
+ 5, 92
94
+ 6, 93
95
+ 7, 94
96
+ 8, 95
97
+ 9, 96
98
+ 0, 97
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'cipherworld-amelia2021'
4
+
5
+ cipher, method, filename, key = ARGV
6
+
7
+ lnc_dict_path = File.join(File.dirname(__FILE__), "../assets/lnc.txt")
8
+ llc_dict_path = File.join(File.dirname(__FILE__), "../assets/llc.txt")
9
+
10
+ # Handle bad command line arguments
11
+
12
+ if ['ln', 'll'].none? cipher
13
+ puts "Unknown Cipher: #{cipher}. Available ciphers are ln and ll"
14
+ return
15
+ end
16
+
17
+ if ['enc', 'dec'].none? method
18
+ puts "Unknown Action: #{method}. Available actions are enc and dec"
19
+ return
20
+ end
21
+
22
+ unless File.file? filename
23
+ puts "No file found ./#{filename}."
24
+ return
25
+ end
26
+
27
+ key = key.to_i ||= 0
28
+
29
+ # Main Script
30
+
31
+ newname = method == 'enc' ? "#{filename}.enc" : "#{filename.sub(/\.enc$/, '')}"
32
+ text = File.read filename
33
+
34
+ if cipher == 'ln'
35
+ lnc = Cipher::LetterNumber.new(charset: lnc_dict_path, key: key)
36
+ result = method == 'enc' ? lnc.encrypt(text) : lnc.decrypt(text)
37
+ else
38
+ llc = Cipher::LetterLetter.new(charset: llc_dict_path)
39
+ result = method == 'enc' ? llc.encrypt(text) : llc.decrypt(text)
40
+ end
41
+
42
+ File.write(newname, result)
@@ -0,0 +1,50 @@
1
+ module Cipher
2
+ class LetterNumber
3
+ def initialize(args)
4
+ @charset = {}
5
+ @key = args[:key]
6
+
7
+ File.open(args[:charset], 'r') do |f|
8
+ f.readlines.map(&:chomp).each { |str| @charset[str[0]] = str[str.rindex(",") + 2..-1] }
9
+ end
10
+ end
11
+
12
+ def encrypt plaintext
13
+ plaintext.chars.map do |char|
14
+ "#{ (@charset[char].to_i + @key) % 99 }"
15
+ .sub(/^[0-9]{1}$/) { |num| "0#{num}" }
16
+ end.join
17
+ end
18
+
19
+ def decrypt ciphertext
20
+ plaintext = ""
21
+
22
+ ciphertext.chars.each_slice(2).map(&:join).each do |char|
23
+ char = char[1..-1] if char[0] == "0"
24
+ char = @charset.invert[(( char.to_i - @key ) % 99 ).to_s ]
25
+ plaintext << char
26
+ end
27
+
28
+ plaintext
29
+ end
30
+ end
31
+
32
+ class LetterLetter
33
+ def initialize(args)
34
+ @charset = {}
35
+ @key = args[:key]
36
+
37
+ File.open(args[:charset], 'r') do |f|
38
+ f.readlines.map(&:chomp).each { |str| @charset[str[0]] = str[str.rindex(",") + 2..-1] }
39
+ end
40
+ end
41
+
42
+ def encrypt plaintext
43
+ plaintext.chars.map { |char| @charset[char] }.join
44
+ end
45
+
46
+ def decrypt ciphertext
47
+ ciphertext.chars.map { |char| @charset.invert[char] }.join
48
+ end
49
+ end
50
+ end
metadata ADDED
@@ -0,0 +1,47 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cipherworld-amelia2021
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.5
5
+ platform: ruby
6
+ authors:
7
+ - Amelia Scott
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-07-15 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A gem for encrypting and decrypting strings
14
+ email: abc.scott@gmail.com
15
+ executables:
16
+ - cipherworld-amelia2021
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - assets/llc.txt
21
+ - assets/lnc.txt
22
+ - bin/cipherworld-amelia2021
23
+ - lib/cipherworld-amelia2021.rb
24
+ homepage:
25
+ licenses:
26
+ - MIT
27
+ metadata: {}
28
+ post_install_message:
29
+ rdoc_options: []
30
+ require_paths:
31
+ - lib
32
+ required_ruby_version: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: '0'
37
+ required_rubygems_version: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ requirements: []
43
+ rubygems_version: 3.2.15
44
+ signing_key:
45
+ specification_version: 4
46
+ summary: Cipherworld
47
+ test_files: []