mystiko 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5796e4e1fa52ab52ff132e77d247b9adffd3ebb6
4
- data.tar.gz: 3e3c02ae21aa3d35e35b1651fd9eeff95e055031
3
+ metadata.gz: 3653317c8191c6dffe9aa4679789f55914e508e0
4
+ data.tar.gz: 08d04a4d984b8b84c29a5afeff1b94b6be02bf95
5
5
  SHA512:
6
- metadata.gz: a565faf5873e606e5e2bdca07f6efc9f9263e3c37405a588fd8ba7b110eef6ad705ee5985e2e25ea29d2097f4bf385f66175e63c288cb6bbbe407fbae88d1b3d
7
- data.tar.gz: 417b4ea310cca0b2959089fdb014cc9b978e8d2ec884e98303dad60883b64308b367c70ae5a76af00c4770e250bb28a11bb4841f8c14415d8efbb9fea6507a85
6
+ metadata.gz: 7a55ec569cc4f002731391e8d27a6cd03994f7bee926f3415902a07446cd3e67471eabcbfedbaccbd7f8077634e133916b450cd54005a44f60f2876156075dc4
7
+ data.tar.gz: b3fd17e8cec9de5c080808356e51d118b4051c33db7472a48924f8b130a1c2fedd64f657b84997e279d0b0986bb53d837f0b0757366e0a8bece5734d6e4c6152
data/README.md CHANGED
@@ -3,20 +3,10 @@
3
3
  The word mystikó is from the Greek language and means secret. Keeping
4
4
  secrets safe from unauthorized eyes is the very core purpose of encryption.
5
5
 
6
- Over the next few months, this code repo will grow to contain an introduction
7
- to encryption aimed at those who are curious about how it works.
6
+ This gem is only intended for educational purposes and should not be used in
7
+ serious data security applications.
8
8
 
9
- This will be done in a number of parts:
10
-
11
- - A look at the basic machinery common to all encryption systems.
12
- - A look at some famous (and infamous) encryption systems used through history.
13
- In addition to seeing how they work, we'll also take a look at how they
14
- failed and/or went obsolete.
15
- - The mystiko gem, written in ruby, that serves as a simple demonstration of
16
- the principles of data encryption.
17
- - A challenge. For as long as secret codes have existed, secret code breakers
18
- have tried to defeat them. Coming soon, see if you can decode a secret
19
- message created by the above ruby code. Prizes, if any, to be determined!
9
+ Any use for unlawful purposes is strictly forbidden.
20
10
 
21
11
  ## Installation
22
12
 
@@ -34,17 +24,141 @@ Or install it yourself as:
34
24
 
35
25
  $ gem install mystiko
36
26
 
37
- The mystiko gem itself will soon be found at: ( https://rubygems.org/gems/mystiko )
27
+ The mystiko gem itself is found at: ( https://rubygems.org/gems/mystiko )
38
28
 
39
29
  ## Usage
40
30
 
41
- TODO: Write usage instructions here
31
+ Mystikó is both a ruby gem and a command line utility. In order to work
32
+ with the encryption engine two things must be done:
33
+
34
+ - An instance must be created. This is easily done with the new method.
35
+ - Encryption is done with the encrypt method and appropriate parameters.
36
+ - Decryption is done with the decrypt method and appropriate parameters.
37
+
38
+ The parameters take the form of classical named/hashed parameters. Supported
39
+ parameters include:
40
+
41
+ - in_str: "value" -- a string of input data.
42
+ - in_file: "name" -- the name of a file of input data. Overrides in_str.
43
+ - key: "value" -- the key to use for processing
44
+ - generator: object -- a seeded, pseudo-random number generator. Overrides key.
45
+ - out_str: "value" -- the string output is appended to this string.
46
+ - out_file: "name" -- the name of a file of output data. Overrides out_str.
47
+ - window: value -- the size, in bytes, of the shuffling window.
48
+
49
+ The methods encrypt and decrypt both also return the resultant string of data.
50
+
51
+ The command line utility displays the following message if started with no
52
+ arguments or the "--help", "-h", or "-?" options.
53
+
54
+ Mystiko version 0.1.0
55
+
56
+ Usage summary:
57
+
58
+ $ mystiko <options>
59
+
60
+ --help, -h, -? # Display this help message.
61
+ --encrypt, -e # Data is to be encrypted.
62
+ --decrypt, -d # Data is to be decrypted.
63
+ --input, -i <input data> # Specify the input data string.
64
+ --read, -r <file name> # Specify the input data file name.
65
+ --write, -w <file name> # Specify the input data file name.
66
+ --key, -k <key data> # Specify the key data string.
67
+
68
+ Notes:
69
+ - A command option and a key are always required.
70
+ - Data input defaults to STDIN.
71
+ - Data output defaults to STDOUT.
72
+ - If -r is specified, -i is ignored.
73
+ - String data may be optionally enclosed in " ... "
74
+
75
+ ## Princples of Operation
76
+
77
+ #### The Vernam Cypher
78
+
79
+ The mystik&oacute; gem is a modified Vernam cypher. The classic approach to
80
+ this type of cypher is to have a random string of data of the same length as
81
+ the plain text data. The two streams of data are combined using the XOR
82
+ operation. To recover the original data, the cypher data is again combined with
83
+ the random data with the XOR operation. After one use, the random data is
84
+ never reused.
85
+
86
+ This works because the XOR operator exhibits the following identity:
87
+
88
+ ```ruby
89
+ (A ^ B ^ B) == A
90
+ ```
91
+ This is the result of the fact that:
92
+
93
+ ```ruby
94
+ (X ^ X) == 0
95
+ ```
96
+ and
97
+
98
+ ```ruby
99
+ (X ^ 0) == X
100
+ ```
101
+
102
+ Excepting "end run" code cracking (getting the data before/after encryption or
103
+ getting a copy of the random data) or incompetence (poor quality or reusing the
104
+ random data) this code can be shown to be unbreakable.
105
+
106
+ It is also very cumbersome to use. It requires that both parties have access to
107
+ large amounts of high quality random data that can only be used once. It
108
+ requires that random data to be kept secret and that these random data remain
109
+ synchronized.
110
+
111
+ #### The Pseudo-Random Shortcut
112
+
113
+ Given that large quantities of random data are bothersome to deal with, it was
114
+ only natural that someone would start taking short-cuts. In this case, the
115
+ one-time use random data was replaced by a pseudo-random data generator (PRNG).
116
+ This transforms the Vernam cypher from unbreakable to laughably weak. Why?
117
+
118
+ - Any PRNG used in this way, requires an initial seed value. This seed value
119
+ is effectively the key of the cypher. To crack the code, the attacker only
120
+ needs to compute the seed value.
121
+ - Many messages start with a known sequence of bytes. A header if you will.
122
+ These known bytes make it possible know what values were generated during the
123
+ encryption process. This in turn allows the internal state of the PRNG to be
124
+ modeled, greatly reducing the number of seed values that must be tested.
125
+ - Once a sequence of random values is known, it is often easy to determine
126
+ what values will follow. At this point, the code is broken.
127
+
128
+ The problem with the Vernam cypher is that it only maps input symbols to
129
+ output symbols. The order of the symbols is not changed. With one-use truly
130
+ random data, this is not a problem. Knowledge of a few random values tells
131
+ us nothing about the values to follow. With a PRNG, they tell us a very great
132
+ deal.
133
+
134
+ #### The Scrambled Vernam Cypher
135
+
136
+ To avoid the problems of the classical Vernam cypher, mystik&oacute; makes one
137
+ significant change: The PRNG not only maps input symbols to output symbols, it
138
+ also performs a controlled shuffle on those symbols.
139
+
140
+ To recover data, in addition to anti-mapping the symbols, we need to perform a
141
+ controlled anti-shuffle of the data.
142
+
143
+ This data shuffling denies any would-be attacker knowledge of the order of the
144
+ input data. Thus even with standard message headers, the content of the
145
+ original message is no longer relevant.
146
+
147
+ #### References
148
+
149
+ - One time pads and the Vernam cypher https://en.wikipedia.org/wiki/One-time_pad
150
+ - Random number generation https://en.wikipedia.org/wiki/Random_number_generation
151
+ - The Mersenne twister https://en.wikipedia.org/wiki/Mersenne_Twister
152
+ - The Random library http://ruby-doc.org/core-2.2.0/Random.html
153
+ - Testing random number generators https://en.wikipedia.org/wiki/TestU01 and
154
+ http://www.iro.umontreal.ca/~simardr/testu01/tu01.html
155
+ - Random key generator http://randomkeygen.com/ The 256 bit WEP keys work especially well.
42
156
 
43
157
  ## Contributing
44
158
 
45
- Creating a good introduction to encryption is quite an undertaking. For
46
- this reason, any input is most welcomed. There are two basic plans by which
47
- this can be accomplished.
159
+ Creating any encryption system is quite an undertaking. For this reason,
160
+ any input is most welcomed. There are two basic plans by which this can
161
+ be accomplished.
48
162
 
49
163
  #### Plan A
50
164
 
@@ -0,0 +1,109 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Standalone execution of the Mystiko gem.
4
+ #
5
+
6
+ begin
7
+ require 'mystiko'
8
+ rescue LoadError
9
+ require_relative '..\lib\mystiko'
10
+ end
11
+
12
+ require 'getoptlong'
13
+
14
+ #Display help and exit.
15
+ def help(message=nil)
16
+ puts "Mystiko version #{Mystiko::VERSION}"
17
+ puts
18
+
19
+ if message
20
+ puts message
21
+ puts
22
+ end
23
+
24
+ puts "Usage summary:"
25
+ puts
26
+ puts "$ mystiko <options>"
27
+ puts
28
+ puts "--help, -h, -? # Display this help message."
29
+ puts "--encrypt, -e # Data is to be encrypted."
30
+ puts "--decrypt, -d # Data is to be decrypted."
31
+ puts "--input, -i <input data> # Specify the input data string."
32
+ puts "--read, -r <file name> # Specify the input data file name."
33
+ puts "--write, -w <file name> # Specify the input data file name."
34
+ puts "--key, -k <key data> # Specify the key data string."
35
+ puts
36
+ puts "Notes:"
37
+ puts " - A command option and a key are always required."
38
+ puts " - Data input defaults to STDIN."
39
+ puts " - Data output defaults to STDOUT."
40
+ puts " - If -r is specified, -i is ignored."
41
+ puts " - String data may be optionally enclosed in \" ... \" "
42
+ exit
43
+ end
44
+
45
+ #Read data from stdin.
46
+ def grab_stdin
47
+ result = ""
48
+
49
+ while (line = gets)
50
+ result << line
51
+ end
52
+
53
+ result
54
+ end
55
+
56
+ opts = GetoptLong.new(
57
+ [ "--help", "-h", "-?", GetoptLong::NO_ARGUMENT ],
58
+ [ "--encrypt", "-e", GetoptLong::NO_ARGUMENT ],
59
+ [ "--decrypt", "-d", GetoptLong::NO_ARGUMENT ],
60
+ [ "--input", "-i", GetoptLong::REQUIRED_ARGUMENT ],
61
+ [ "--read", "-r", GetoptLong::REQUIRED_ARGUMENT ],
62
+ [ "--write", "-w", GetoptLong::REQUIRED_ARGUMENT ],
63
+ [ "--key", "-k", GetoptLong::REQUIRED_ARGUMENT ],
64
+ [ "--test", "-t", GetoptLong::NO_ARGUMENT ])
65
+
66
+ options_found = false
67
+ parameters = {}
68
+ command = nil
69
+ use_stdin = use_stdout = true
70
+
71
+ begin
72
+ opts.each do |opt, arg|
73
+ case opt
74
+ when "--help"
75
+ help
76
+ when "--encrypt"
77
+ fail "Only one encrypt or decrypt may be specified." if command
78
+ command = :encrypt
79
+ when "--decrypt"
80
+ fail "Only one encrypt or decrypt may be specified." if command
81
+ command = :decrypt
82
+ when "--input"
83
+ parameters[:in_str] = arg
84
+ use_stdin = false
85
+ when "--read"
86
+ parameters[:in_file] = arg
87
+ use_stdin = false
88
+ when "--write"
89
+ parameters[:out_file] = arg
90
+ use_stdout = false
91
+ when "--key"
92
+ parameters[:key] = arg
93
+ when "--test"
94
+ parameters[:filler] = 32
95
+ end
96
+
97
+ options_found = true
98
+ end
99
+
100
+ help unless options_found
101
+ fail "A key must be specified" unless parameters[:key]
102
+ fail "Either encrypt or decrypt must be specified." unless command
103
+ parameters[:in_str] = grab_stdin if use_stdin
104
+ result = Mystiko.new.send(command, parameters)
105
+ print result if use_stdout
106
+
107
+ rescue => err
108
+ help "Error: #{err.message}"
109
+ end
data/irbt.rb ADDED
@@ -0,0 +1,20 @@
1
+ # coding: utf-8
2
+ # An IRB + mystiko test bed
3
+
4
+ require 'irb'
5
+ $force_alias_read_line_module = true
6
+ require 'mini_readline'
7
+
8
+ puts "Starting an IRB console with mystiko loaded."
9
+
10
+ if ARGV[0] == 'local'
11
+ require_relative 'lib/mystiko'
12
+ puts "mystiko loaded locally: #{Mystiko::VERSION}"
13
+
14
+ ARGV.shift
15
+ else
16
+ require 'mystiko'
17
+ puts "mystiko loaded from gem: #{Mystiko::VERSION}"
18
+ end
19
+
20
+ IRB.start
@@ -1,8 +1,23 @@
1
1
  # coding: utf-8
2
2
 
3
+ require_relative "mystiko/encrypt"
4
+ require_relative "mystiko/decrypt"
5
+ require_relative "mystiko/generator"
6
+ require_relative "mystiko/inputs"
7
+ require_relative "mystiko/outputs"
3
8
  require_relative "mystiko/version"
4
9
 
5
- # The Mystiko module is where all the data encryption classes reside.
6
- module Mystiko
7
- # Your code goes here...
10
+ # The Mystiko class is where all the data encryption code resides.
11
+ class Mystiko
12
+
13
+ #Set up an encryption object.
14
+ def initialize
15
+ @filler = Random.new
16
+ end
17
+
18
+ #Get a decoy filler byte.
19
+ def filler_byte
20
+ @fill_value || @filler.rand(256)
21
+ end
22
+
8
23
  end
@@ -0,0 +1,53 @@
1
+ # coding: utf-8
2
+
3
+ require 'English'
4
+
5
+ #* decrypt.rb -- Data decryption.
6
+ class Mystiko
7
+
8
+ #Perform data decryption
9
+ def decrypt(args={})
10
+ process_inputs(args)
11
+ setup_cypher_input
12
+ do_decryption
13
+ setup_clear_output
14
+ process_outputs(args)
15
+ end
16
+
17
+ #Get the cypher (aka encrypted) input data set up.
18
+ def setup_cypher_input
19
+ @input = @input.bytes
20
+ @offsets = (0...@window).to_a
21
+ @offset = @window
22
+ end
23
+
24
+ #Do the actual decryption work.
25
+ #<br>Endemic Code Smells
26
+ #* :reek:TooManyStatements
27
+ def do_decryption
28
+ result = Array.new(@input.length + @window, 32)
29
+
30
+ @input.each do | value |
31
+ index = @generator.rand(@window)
32
+ result[@offsets[index]] = value ^ @generator.rand(256)
33
+
34
+ @offsets.delete_at(index)
35
+ @offsets << @offset
36
+ @offset += 1
37
+ end
38
+
39
+ @output = result.pack("C*")
40
+ end
41
+
42
+ #Get the clear (aka unencrypted) output data set up.
43
+ def setup_clear_output
44
+ @offsets = @offset = nil
45
+
46
+ if /^[0-9a-z]+;/ =~ @output
47
+ @output = $POSTMATCH[0...($MATCH.to_i(36))]
48
+ else
49
+ fail "Unable to recover data."
50
+ end
51
+ end
52
+
53
+ end
@@ -0,0 +1,49 @@
1
+ # coding: utf-8
2
+
3
+ #* encrypt.rb -- Data encryption.
4
+ class Mystiko
5
+
6
+ #Perform data encryption
7
+ def encrypt(args={})
8
+ process_inputs(args)
9
+ setup_clear_input
10
+ do_encryption
11
+ setup_cypher_output
12
+ process_outputs(args)
13
+ end
14
+
15
+ #Get the clear (aka unencrypted) input data set up.
16
+ def setup_clear_input
17
+ temp = @input.bytes
18
+ @input = "#{temp.length.to_s(36)};".bytes + temp
19
+ @length = @input.length
20
+ @data = @input[0...@window]
21
+
22
+ (@window - (@offset = @data.length)).times do
23
+ @data << filler_byte
24
+ end
25
+ end
26
+
27
+ #Do the actual encryption work.
28
+ def do_encryption
29
+ result, processed = [], 0
30
+
31
+ while processed < @length
32
+ index = @generator.rand(@window)
33
+ result << (@data.delete_at(index) ^ @generator.rand(256))
34
+
35
+ @data << (@input[@offset] || filler_byte)
36
+ @offset += 1
37
+
38
+ processed += 1 if (index + processed) < @length
39
+ end
40
+
41
+ @output = result.pack("C*")
42
+ end
43
+
44
+ #Get the cypher (aka encrypted) output data set up.
45
+ def setup_cypher_output
46
+ @data = @offset = nil # Just cleanup.
47
+ end
48
+
49
+ end
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+
3
+ require 'fibonacci_rng'
4
+ require 'composite_rng'
5
+
6
+ #* generator.rb -- The internal pseudo-random number generator.
7
+ class Mystiko
8
+
9
+ #A specialized variant of the composite pseudo RNG.
10
+ class Generator < CompositeRng
11
+
12
+ #Create the default pseudo random data generator.
13
+ #<br> Endemic Code Smells
14
+ #* :reek:FeatureEnvy
15
+ def initialize(key)
16
+ parent = FibonacciRng.new(key)
17
+ child = Random.new(parent.hash_value)
18
+ super(parent, child, 31, 31)
19
+ end
20
+
21
+ end
22
+
23
+ end
@@ -0,0 +1,32 @@
1
+ # coding: utf-8
2
+
3
+ #* inputs.rb -- Common input parameter processing.
4
+ class Mystiko
5
+
6
+ # The array of input bytes
7
+ attr_reader :input
8
+
9
+ # The sliding window size.
10
+ attr_reader :window
11
+
12
+ # The source of simulated entropy
13
+ attr_reader :generator
14
+
15
+ #Perform common input argument processing.
16
+ def process_inputs(args)
17
+ @input = ((name = args[:in_file]) && (IO.read(name, mode: "rb"))) ||
18
+ args[:in_str] ||
19
+ fail("An input must be specified.")
20
+
21
+ @generator = args[:generator] ||
22
+ ((key = args[:key]) && Generator.new(key)) ||
23
+ fail("A key or generator must be specified.")
24
+
25
+ @window = args[:window] || 16
26
+
27
+ #The filler value is for testing purposes only. It should
28
+ #not be specified when secure operation is desired.
29
+ @fill_value = args[:filler]
30
+ end
31
+
32
+ end
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+
3
+ #* outputs.rb -- Common output parameter processing.
4
+ class Mystiko
5
+
6
+ #Access to the output instance variable
7
+ #<br>Endemic Code Smells
8
+ # :reek:Attribute -- Access needed for testing only.
9
+ attr_accessor :output
10
+
11
+ #Perform common output argument processing.
12
+ #<br>Returns
13
+ #* The output string.
14
+ def process_outputs(args)
15
+ @input = @generator = @window = @fill_value = nil # Cover our tracks.
16
+
17
+ if (name = args[:out_file])
18
+ IO.write(name, @output, mode: "wb")
19
+ elsif (out_str = args[:out_str])
20
+ out_str << @output
21
+ end
22
+
23
+ (_, @output = @output, nil)[0] # Return output and erase it.
24
+ end
25
+
26
+ end
@@ -1,6 +1,6 @@
1
1
  # coding: utf-8
2
2
 
3
- module Mystiko
3
+ class Mystiko
4
4
  #The version of this encryption library.
5
- VERSION = "0.0.1"
5
+ VERSION = "0.1.0"
6
6
  end
@@ -9,22 +9,21 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ["Peter Camilleri"]
10
10
  spec.email = ["peter.c.camilleri@gmail.com"]
11
11
 
12
- # spec.summary = "A introduction to the world of encryption."
13
- # spec.description = "A brief primer on the fundamentals of encryption."
14
-
15
- spec.summary = "A temp place holder."
16
- spec.description = "A temp place holder. Work in progress."
12
+ spec.summary = "A simple data security system."
13
+ spec.description = "An example of a simple data security system."
17
14
 
18
15
  spec.homepage = "http://teuthida-technologies.com/"
19
16
  spec.license = "MIT"
20
17
 
21
18
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(tests)/}) }
22
- spec.bindir = "exe"
23
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
+ spec.executables = ["mystiko"]
24
20
  spec.require_paths = ["lib"]
25
21
 
26
22
  spec.platform = Gem::Platform::RUBY
27
- spec.required_ruby_version = '>=1.9.3'
23
+ spec.required_ruby_version = '>=2.1.0'
24
+
25
+ spec.add_runtime_dependency 'fibonacci_rng', ">= 1.1.1"
26
+ spec.add_runtime_dependency 'composite_rng', ">= 0.1.0"
28
27
 
29
28
  spec.add_development_dependency "bundler", "~> 1.11"
30
29
  spec.add_development_dependency "rake", "~> 10.0"
@@ -0,0 +1,112 @@
1
+ ---
2
+ Attribute:
3
+ enabled: true
4
+ exclude: []
5
+ BooleanParameter:
6
+ enabled: true
7
+ exclude: []
8
+ ClassVariable:
9
+ enabled: true
10
+ exclude: []
11
+ ControlParameter:
12
+ enabled: true
13
+ exclude: []
14
+ DataClump:
15
+ enabled: true
16
+ exclude: []
17
+ max_copies: 2
18
+ min_clump_size: 2
19
+ DuplicateMethodCall:
20
+ enabled: true
21
+ exclude: []
22
+ max_calls: 1
23
+ allow_calls: []
24
+ FeatureEnvy:
25
+ enabled: true
26
+ exclude: []
27
+ IrresponsibleModule:
28
+ enabled: true
29
+ exclude: []
30
+ LongParameterList:
31
+ enabled: true
32
+ exclude: []
33
+ max_params: 3
34
+ overrides:
35
+ initialize:
36
+ max_params: 5
37
+ LongYieldList:
38
+ enabled: true
39
+ exclude: []
40
+ max_params: 3
41
+ NestedIterators:
42
+ enabled: true
43
+ exclude: []
44
+ max_allowed_nesting: 1
45
+ ignore_iterators: []
46
+ NilCheck:
47
+ enabled: true
48
+ exclude: []
49
+ PrimaDonnaMethod:
50
+ enabled: true
51
+ exclude: []
52
+ RepeatedConditional:
53
+ enabled: true
54
+ exclude: []
55
+ max_ifs: 2
56
+ TooManyInstanceVariables:
57
+ enabled: true
58
+ exclude: []
59
+ max_instance_variables: 9
60
+ TooManyMethods:
61
+ enabled: true
62
+ exclude: []
63
+ max_methods: 25
64
+ TooManyStatements:
65
+ enabled: true
66
+ exclude:
67
+ - initialize
68
+ max_statements: 7
69
+ UncommunicativeMethodName:
70
+ enabled: true
71
+ exclude: []
72
+ reject:
73
+ - !ruby/regexp /^[a-z]$/
74
+ - !ruby/regexp /[0-9]$/
75
+ - !ruby/regexp /[A-Z]/
76
+ accept: []
77
+ UncommunicativeModuleName:
78
+ enabled: true
79
+ exclude: []
80
+ reject:
81
+ - !ruby/regexp /^.$/
82
+ - !ruby/regexp /[0-9]$/
83
+ accept:
84
+ - Inline::C
85
+ UncommunicativeParameterName:
86
+ enabled: true
87
+ exclude: []
88
+ reject:
89
+ - !ruby/regexp /^.$/
90
+ - !ruby/regexp /[0-9]$/
91
+ - !ruby/regexp /[A-Z]/
92
+ - !ruby/regexp /^_/
93
+ accept: []
94
+ UncommunicativeVariableName:
95
+ enabled: true
96
+ exclude: []
97
+ reject:
98
+ - !ruby/regexp /^.$/
99
+ - !ruby/regexp /[0-9]$/
100
+ - !ruby/regexp /[A-Z]/
101
+ accept:
102
+ - _
103
+ UnusedParameters:
104
+ enabled: true
105
+ exclude: []
106
+ UtilityFunction:
107
+ enabled: true
108
+ exclude: []
109
+ max_helper_calls: 1
110
+ UnusedPrivateMethod:
111
+ enabled: false
112
+ exclude: []
@@ -34,6 +34,11 @@ task :reek do |t|
34
34
  `reek --no-color lib > reek.txt`
35
35
  end
36
36
 
37
+ desc "Run an IRB Session with mystiko loaded."
38
+ task :console do
39
+ system "ruby irbt.rb local"
40
+ end
41
+
37
42
  desc "What version of mystiko is this?"
38
43
  task :vers do |t|
39
44
  puts
metadata CHANGED
@@ -1,15 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mystiko
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Camilleri
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-29 00:00:00.000000000 Z
11
+ date: 2016-06-14 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: fibonacci_rng
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 1.1.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 1.1.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: composite_rng
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 0.1.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 0.1.0
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: bundler
15
43
  requirement: !ruby/object:Gem::Requirement
@@ -66,10 +94,11 @@ dependencies:
66
94
  - - ">="
67
95
  - !ruby/object:Gem::Version
68
96
  version: 0.4.8
69
- description: A temp place holder. Work in progress.
97
+ description: An example of a simple data security system.
70
98
  email:
71
99
  - peter.c.camilleri@gmail.com
72
- executables: []
100
+ executables:
101
+ - mystiko
73
102
  extensions: []
74
103
  extra_rdoc_files: []
75
104
  files:
@@ -77,10 +106,17 @@ files:
77
106
  - Gemfile
78
107
  - LICENSE.txt
79
108
  - README.md
80
- - crypto_101/part_01/README.md
109
+ - bin/mystiko
110
+ - irbt.rb
81
111
  - lib/mystiko.rb
112
+ - lib/mystiko/decrypt.rb
113
+ - lib/mystiko/encrypt.rb
114
+ - lib/mystiko/generator.rb
115
+ - lib/mystiko/inputs.rb
116
+ - lib/mystiko/outputs.rb
82
117
  - lib/mystiko/version.rb
83
118
  - mystiko.gemspec
119
+ - mystiko.reek
84
120
  - rakefile.rb
85
121
  - reek.txt
86
122
  homepage: http://teuthida-technologies.com/
@@ -95,7 +131,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
95
131
  requirements:
96
132
  - - ">="
97
133
  - !ruby/object:Gem::Version
98
- version: 1.9.3
134
+ version: 2.1.0
99
135
  required_rubygems_version: !ruby/object:Gem::Requirement
100
136
  requirements:
101
137
  - - ">="
@@ -106,6 +142,6 @@ rubyforge_project:
106
142
  rubygems_version: 2.2.2
107
143
  signing_key:
108
144
  specification_version: 4
109
- summary: A temp place holder.
145
+ summary: A simple data security system.
110
146
  test_files: []
111
147
  has_rdoc:
@@ -1,40 +0,0 @@
1
- # Welcome to Cyrpto 101
2
-
3
- This series of lessons is a basic level primer on encryption. The target
4
- audience is programmers curious about how encryption works but not in love
5
- with pages of confusing mathematical scribblings. It is not really solid
6
- enough to use as a basis for those wishing to delve deeply into the field
7
- but may still serve as a starting point for such a path.
8
-
9
- The examination of encryption will look at a number of sources.
10
-
11
- - The theory behind how encryption works.
12
- - An examination of actual encryption systems that are deployed in the field.
13
- - A look at some examples of epic failures through the years.
14
- - We will build up a simple example encryption system in the ruby language.
15
-
16
- Keep in my that this primer will keep things on a basic level. As a result
17
- we will avoid digging into the leading edge of security apparatus. The NSA
18
- most certainly has nothing to fear here.
19
-
20
- Finally, it is a goal to keep the tone light and informal. Furthermore, since
21
- I am not particularly learned, this will _not_ be a learned dissertation.
22
-
23
- ## Encryption Basics
24
-
25
- There are many occasions that require moving and/or storing information in a
26
- secure manner. Some of these include:
27
-
28
- - Protecting personal information for customers or citizens.
29
- - Protecting financial information during business transactions.
30
- - Protecting the secrecy during military operations.
31
- - Protecting intellectual property from industrial espionage.
32
- - Protecting the operation of banking systems or power grids.
33
- - Protecting... well you get it. There's a lot that needs protecting.
34
-
35
- So, just what does protecting mean in this context? In each case above, there
36
- is information. That information is plainly visible to the originator of the
37
- information. It needs to be made plainly visible to the intended recipient of
38
- that information. It needs to be kept out of the hands who are not authorized
39
- to possess or use that information.
40
-