wikk_aes_256 0.1.6 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (6) hide show
  1. checksums.yaml +5 -5
  2. data/History.txt +26 -0
  3. data/README.md +4 -4
  4. data/Rakefile +13 -15
  5. data/lib/wikk_aes_256.rb +127 -103
  6. metadata +9 -10
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: d15a628c0fd990371636a7d2e066768dc71a3fdd
4
- data.tar.gz: 3becb7b50ffe9eb2c1aa1d29a424e67bb44de4d9
2
+ SHA256:
3
+ metadata.gz: 8f641efe6dea090212b60597da2f3dbe5b3ac805fccc7183eaa7dca9f4156914
4
+ data.tar.gz: 481ca75fda9a56e0929315b71e84e958d8430dd9d007a3cba78c8c180aab9eb3
5
5
  SHA512:
6
- metadata.gz: e5c3b086b36a0124de016622518ad9d15ae20132bc27e7b9a04890d9d41350ff71618a92feae34fef8a956e53f6a0c8f98768237306c9da4473015e9b0071366
7
- data.tar.gz: 28cc7ba2ec932b8a2cbcab44fe00a8048a87bfc20202d8dd2b4218dcd89165f2730ed1af4eddd8266b64525b7db3b5ebf38c77c63b912be974ce4690c2a37210
6
+ metadata.gz: 677eb9a8e8e2d251f49cf31a15105993cc57a012b5fc2b50b2d16f94f862f839d3747623a050bda5f687c432abaf7c7dd789ce82a50ce8ab340abb11b76bec63
7
+ data.tar.gz: d97f2d804f79b700cc42957720291b43a040bdf9d9044c18455b1a1e4f0bab29ae9376ade09f4a2b6a830395d077884699acf9cd57bfd2e21b01a7253304313b
data/History.txt CHANGED
@@ -1,3 +1,29 @@
1
+ robertburrowes Sun Jun 5 18:18:15 2022 +1200
2
+ left out require stringio
3
+ robertburrowes Sun Oct 25 22:11:06 2020 +1300
4
+ Tidy up yard doc comments
5
+ robertburrowes Sun Oct 25 17:45:35 2020 +1300
6
+ Chdir to cd as Mac doesn't look to have chdir in sh
7
+ robertburrowes Sun Oct 25 13:51:16 2020 +1300
8
+ New hoe layout
9
+ robertburrowes Sun Oct 25 13:50:46 2020 +1300
10
+ formatting
11
+ robertburrowes Sun Oct 25 13:50:30 2020 +1300
12
+ now including this in repo
13
+ robertburrowes Sun Oct 25 13:50:02 2020 +1300
14
+ Move dev shell scripts into sbin
15
+ robertburrowes Tue Apr 14 21:21:06 2020 +1200
16
+ moved test data to its own dir
17
+ robertburrowes Tue Apr 14 14:32:08 2020 +1200
18
+ mv test data to test/data
19
+ robertburrowes Mon Apr 13 22:55:45 2020 +1200
20
+ Add __dir__ path to access testfile
21
+ robertburrowes Tue Apr 10 11:53:52 2018 +1200
22
+ Inc Version
23
+ robertburrowes Tue Apr 10 11:53:43 2018 +1200
24
+ Inc version
25
+ robertburrowes Tue Apr 10 11:53:33 2018 +1200
26
+ Inc version
1
27
  robertburrowes Tue Apr 10 11:50:22 2018 +1200
2
28
  OpenSSL::Cipher::Cipher.new deprecated in favour of OpenSSL::Cipher.new
3
29
  robertburrowes Fri Jun 24 19:56:31 2016 +1200
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
- # wikk_aes
1
+ # wikk_aes_256
2
2
 
3
- * http://wikarekare.github.com/wikk_aes/
4
- * Source https://github.com/wikarekare/wikk_aes
5
- * Gem https://rubygems.org/gems/wikk_aes
3
+ * Docs :: https://wikarekare.github.io/wikk_aes_256/
4
+ * Source :: https://github.com/wikarekare/wikk_aes_256
5
+ * Gem :: https://rubygems.org/gems/wikk_aes_256
6
6
 
7
7
  ## DESCRIPTION:
8
8
 
data/Rakefile CHANGED
@@ -1,27 +1,25 @@
1
1
  # -*- ruby -*-
2
-
3
2
  require 'rubygems'
4
3
  require 'hoe'
5
4
  Hoe.plugin :yard
6
5
 
7
- Hoe.spec 'wikk_aes_256' do
8
- self.readme_file = "README.md"
9
- self.developer( "Rob Burrowes","r.burrowes@auckland.ac.nz")
6
+ Hoe.spec 'wikk_aes_256' do
7
+ self.readme_file = 'README.md'
8
+ self.developer( 'Rob Burrowes', 'r.burrowes@auckland.ac.nz')
10
9
  remote_rdoc_dir = '' # Release to root
11
-
10
+
12
11
  self.yard_title = 'wikk_aes_256'
13
- self.yard_options = ['--markup', 'markdown', '--protected']
12
+ self.yard_options = [ '--markup', 'markdown', '--protected' ]
14
13
  end
15
14
 
15
+ # Validate manfest.txt
16
+ # rake check_manifest
16
17
 
17
- #Validate manfest.txt
18
- #rake check_manifest
19
-
20
- #Local checking. Creates pkg/
21
- #rake gem
18
+ # Local checking. Creates pkg/
19
+ # rake gem
22
20
 
23
- #create doc/
24
- #rake docs
21
+ # create doc/
22
+ # rake docs
25
23
 
26
- #Copy up to rubygem.org
27
- #rake release VERSION=1.0.1
24
+ # Copy up to rubygem.org
25
+ # rake release VERSION=1.0.1
data/lib/wikk_aes_256.rb CHANGED
@@ -1,179 +1,203 @@
1
- module WIKK
2
- require "openssl"
3
- require 'digest/sha2'
4
- require 'base64'
1
+ require 'openssl'
2
+ require 'digest/sha2'
3
+ require 'base64'
4
+ require 'stringio'
5
5
 
6
- #Provides AES 256 Encryption, as well as generation of keys and initial vectors, which could be used in other places.
6
+ # Stay in our own namespace
7
+ module WIKK
8
+ # Provides AES 256 Encryption, as well as generation of keys and initial vectors, which could be used in other places.
9
+ #
7
10
  # @attr_reader [String] plain_text the decrypted text
8
11
  # @attr_reader [String] cipher_text the encrypted text
9
12
  class AES_256
10
- VERSION = "0.1.6"
11
- AES_256_CBC = "AES-256-CBC"
12
-
13
+ VERSION = '0.1.7'
14
+ AES_256_CBC = 'AES-256-CBC'
15
+
13
16
  attr_reader :plain_text, :cipher_text
14
-
15
- #Initialize
16
- # @param key_string [String] optional base64 key to be used in encryption or decryption.
17
+
18
+ # Initialize
19
+ #
20
+ # @param key_string [String] optional base64 key to be used in encryption or decryption.
17
21
  # if nil, then key and iv are generated automatically. Recover the key with key_to_s(), or key_iv_to_s()
18
- # @param iv_string [String ] optional base64 iv (initial vector) to be used in the encryption or decryption
22
+ # @param iv_string [String ] optional base64 iv (initial vector) to be used in the encryption or decryption
19
23
  # Overwritten by auto generated iv, if key_string is nil. Recover with iv_to_str() or key_iv_to_s().
20
24
  def initialize(key_string = nil, iv_string = nil)
21
- if key_string == nil
25
+ if key_string.nil?
22
26
  gen_key
23
27
  else
24
28
  str_to_key(key_string)
25
29
  end
26
30
 
27
- if iv_string == nil
31
+ if iv_string.nil?
28
32
  gen_iv
29
33
  else
30
34
  str_to_iv(iv_string)
31
35
  end
32
36
  end
33
-
34
- #Generates a new key using Digest SHA256 in @key.
35
- # @return [String] Binary string, @key
36
- def gen_key
37
+
38
+ # Generates a new key using Digest SHA256 in @key.
39
+ #
40
+ # @return [String] Binary string, @key
41
+ def gen_key
37
42
  digest = Digest::SHA256.new
38
- digest.update("symetric key")
43
+ digest.update('symetric key')
39
44
  return (@key = digest.digest)
40
45
  end
41
-
42
- # @return [String] base64 version of @key
46
+
47
+ # Convert key to a base64 string
48
+ #
49
+ # @return [String] base64 version of @key
43
50
  def key_to_s
44
- return [@key].pack('m').chomp
51
+ return [ @key ].pack('m').chomp
45
52
  end
46
53
 
47
- # @param [String] turns base64 version of key into AES_256_CBC Symetric Key.
54
+ # Convert a base64 string into a key
55
+ #
56
+ # @param [String] converts base64 version of key into AES_256_CBC Symetric Key.
57
+ # @return [String] Binary string, @key
48
58
  def str_to_key(base64_keystring)
49
- return( @key = base64_keystring.unpack('m')[0] )
59
+ return( @key = base64_keystring.unpack1('m') )
50
60
  end
51
61
 
52
- #Generate random AES_256_CBC initialization vector.
53
- # @return [String] Binary initialization vector @iv
62
+ # Generate random AES_256_CBC initialization vector.
63
+ #
64
+ # @return [String] Binary initialization vector @iv
54
65
  def gen_iv
55
66
  return (@iv = OpenSSL::Cipher.new(AES_256_CBC).random_iv)
56
- end
67
+ end
57
68
 
58
- # @return [String] return Base64 version of initialization vector @iv
69
+ # Convert initialization vector to base64 string
70
+ #
71
+ # @return [String] return Base64 version of initialization vector @iv
59
72
  def iv_to_s
60
- return([@iv].pack('m')).chomp
73
+ return [ @iv ].pack('m').chomp
61
74
  end
62
-
63
- # @param [String] turns base64 version of iv into AES_256_CBC initialization vector.
64
- # @return [Array] AES_256_CBC initialization vector @iv.
75
+
76
+ # Convert base64 string into an initialization vector
77
+ #
78
+ # @param [String] turns base64 version of iv into AES_256_CBC initialization vector.
79
+ # @return [Array] AES_256_CBC initialization vector @iv.
65
80
  def str_to_iv(base64_iv_string)
66
- return (@iv = base64_iv_string.unpack('m')[0])
81
+ return (@iv = base64_iv_string.unpack1('m'))
67
82
  end
68
83
 
69
- # @return [String] base64 version of @key
70
- # @return [String] return Base64 version of initialization vector @iv
84
+ # Convert key and the initialization vector into base64 strings
85
+ #
86
+ # @return [String,String] base64 version of @key;
87
+ # Base64 version of initialization vector @iv
71
88
  def key_iv_to_s
72
89
  return key_to_s, iv_to_s
73
90
  end
74
-
75
- #Encrypts source using AES 256 CBC, using @key and @iv
76
- # @param unencrypted_source [String|File]
77
- # @return [String] Binary string representing encrypted source
91
+
92
+ # Encrypts source using AES 256 CBC, using @key and @iv
93
+ #
94
+ # @param unencrypted_source [String|File]
95
+ # @return [String] Binary string representing encrypted source
78
96
  def encrypt(unencrypted_source)
79
- unencrypted_source = StringIO.new(unencrypted_source) if(unencrypted_source.class == String)
97
+ unencrypted_source = StringIO.new(unencrypted_source) if unencrypted_source.instance_of?(String)
80
98
  aes = OpenSSL::Cipher.new(AES_256_CBC)
81
99
  aes.encrypt
82
100
  aes.key = @key
83
101
  aes.iv = @iv
84
- @cipher_text = ""
102
+ @cipher_text = ''
85
103
  while (s = unencrypted_source.read(4096)) != nil do @cipher_text << aes.update(s); end
86
104
  @cipher_text << aes.final
87
105
  end
88
-
89
- #Converts encrypted source String, @cipher_text, into Base64 String
90
- # @param unencrypted_source [String|File] If present, then this source is encrypted, otherwise assumes already encrypted.
91
- # @return [String] Base64 string representing encrypted source
106
+
107
+ # Converts encrypted source String, @cipher_text, into Base64 String
108
+ #
109
+ # @param unencrypted_source [String|File] If present, then this source is encrypted, otherwise assumes already encrypted.
110
+ # @return [String] Base64 string representing encrypted source
92
111
  def cipher_to_s(unencrypted_source = nil)
93
- encrypt(unencrypted_source) if(unencrypted_source != nil)
94
- return [@cipher_text].pack('m').chomp
112
+ encrypt(unencrypted_source) if unencrypted_source != nil
113
+ return [ @cipher_text ].pack('m').chomp
95
114
  end
96
115
 
97
- #Decrypts source using AES 256 CBC, using @key and @iv
98
- # @param encrypted_source [String|File]
99
- # @param base64_source [Boolean] if true, then source is assumed to be base64 encoded.
100
- # @return [String] String representing the original unencypted source
116
+ # Decrypts source using AES 256 CBC, using @key and @iv
117
+ #
118
+ # @param encrypted_source [String|File]
119
+ # @param base64_source [Boolean] if true, then source is assumed to be base64 encoded.
120
+ # @return [String] String representing the original unencypted source
101
121
  def decrypt(encrypted_source, base64_source = false)
102
- encrypted_source = StringIO.new(encrypted_source) if(encrypted_source.class == String)
103
- read_count = base64_source ? 5464:4096
122
+ encrypted_source = StringIO.new(encrypted_source) if encrypted_source.instance_of?(String)
123
+ read_count = base64_source ? 5464 : 4096
104
124
  decode_cipher = OpenSSL::Cipher.new(AES_256_CBC)
105
125
  decode_cipher.decrypt
106
126
  decode_cipher.key = @key
107
127
  decode_cipher.iv = @iv
108
- @plain_text = ""
109
- while (et = encrypted_source.read(read_count)) != nil do
110
- @plain_text << (base64_source ? decode_cipher.update(et.unpack('m')[0]) : decode_cipher.update(et))
128
+ @plain_text = ''
129
+ while (et = encrypted_source.read(read_count)) != nil
130
+ @plain_text << (base64_source ? decode_cipher.update(et.unpack1('m')) : decode_cipher.update(et))
111
131
  end
112
132
  @plain_text << decode_cipher.final
113
133
  end
114
-
115
- #Generates a new key using Digest SHA256 in @key.
116
- # @return [String] Base64 encoded string, @key
117
- def self.gen_key_to_s
118
- digest = Digest::SHA256.new
119
- digest.update("symetric key")
120
- return ([digest.digest].pack('m')).chomp
121
- end
122
-
123
- #Generate random AES_256_CBC initialization vector.
124
- # @return [String] Base64 encoded initialization vector @iv
125
- def self.gen_iv_to_s
126
- return ([OpenSSL::Cipher.new(AES_256_CBC).random_iv].pack('m')).chomp
127
- end
128
-
129
- #Generates a new key using Digest SHA256 in @key, and random AES_256_CBC initialization vector in @iv
130
- # @return [String] Base64 encoded string, @key
131
- # @return [String] Base64 encoded initialization vector @iv
134
+
135
+ # Generates a new key using Digest SHA256 in @key.
136
+ #
137
+ # @return [String] Base64 encoded string, @key
138
+ def self.gen_key_to_s
139
+ digest = Digest::SHA256.new
140
+ digest.update('symetric key')
141
+ return [ digest.digest ].pack('m').chomp
142
+ end
143
+
144
+ # Generate random AES_256_CBC initialization vector.
145
+ #
146
+ # @return [String] Base64 encoded initialization vector @iv
147
+ def self.gen_iv_to_s
148
+ return [ OpenSSL::Cipher.new(AES_256_CBC).random_iv ].pack('m').chomp
149
+ end
150
+
151
+ # Generates a new key using Digest SHA256 in @key, and random AES_256_CBC initialization vector in @iv
152
+ #
153
+ # @return [String,String] Base64 encoded string, @key;
154
+ # Base64 encoded initialization vector @iv
132
155
  def self.gen_key_iv_to_s
133
- return self.gen_key_to_s, self.gen_iv_to_s
156
+ return self.gen_key_to_s, self.gen_iv_to_s
134
157
  end
135
-
136
- #Encrypts source using AES 256 CBC, using @key and @iv
137
- # @param unencrypted_source [String|File]
138
- # @param key_string [String] optional base64 key to be used in encryption or decryption.
158
+
159
+ # Encrypts source using AES 256 CBC, using @key and @iv
160
+ #
161
+ # @param unencrypted_source [String|File]
162
+ # @param key_string [String] optional base64 key to be used in encryption or decryption.
139
163
  # if nil, then key and iv are generated automatically. Recover the key with key_to_s(), or key_iv_to_s()
140
- # @param iv_string [String ] optional base64 iv (initial vector) to be used in the encryption or decryption
164
+ # @param iv_string [String ] optional base64 iv (initial vector) to be used in the encryption or decryption
141
165
  # Overwritten by auto generated iv, if key_string is nil. Recover with iv_to_str() or key_iv_to_s().
142
- # @return [String] Binary string representing encrypted source
143
- # @return [String] base64 key, @key, so later decryption can be done
144
- # @return [String] base64 initial vector, @iv, so later decryption can be done
166
+ # @return [String,String,String] Binary string representing encrypted source;
167
+ # base64 key, @key, so later decryption can be done;
168
+ # base64 initial vector, @iv, so later decryption can be done
145
169
  def self.encrypt(unencrypted_source, key_string = nil, iv_string = nil)
146
170
  aes = self.new(key_string, iv_string)
147
- return aes.encrypt(unencrypted_source), aes.key_to_s, aes.iv_to_s
171
+ return aes.encrypt(unencrypted_source), aes.key_to_s, aes.iv_to_s
148
172
  end
149
-
150
- #Converts encrypted source String, @cipher_text, into Base64 String
151
- # @param unencrypted_source [String|File] which must be present, as AES_256 class is created here.
152
- # @param key_string [String] optional base64 key to be used in encryption or decryption.
173
+
174
+ # Converts encrypted source String, @cipher_text, into Base64 String
175
+ #
176
+ # @param unencrypted_source [String|File] which must be present, as AES_256 class is created here.
177
+ # @param key_string [String] optional base64 key to be used in encryption or decryption.
153
178
  # if nil, then key and iv are generated automatically. Recover the key with key_to_s(), or key_iv_to_s()
154
- # @param iv_string [String ] optional base64 iv (initial vector) to be used in the encryption or decryption
179
+ # @param iv_string [String ] optional base64 iv (initial vector) to be used in the encryption or decryption
155
180
  # Overwritten by auto generated iv, if key_string is nil. Recover with iv_to_str() or key_iv_to_s().
156
- # @return [String] Base64 string representing encrypted source
157
- # @return [String] base64 key, @key, so later decryption can be done
158
- # @return [String] base64 initial vector, @iv, so later decryption can be done
181
+ # @return [String,String,String] Base64 string representing encrypted source;
182
+ # base64 key, @key, so later decryption can be done;
183
+ # base64 initial vector, @iv, so later decryption can be done
159
184
  def self.cipher_to_s(unencrypted_source, key_string = nil, iv_string = nil)
160
185
  aes = self.new(key_string, iv_string)
161
- return aes.cipher_to_s(unencrypted_source), aes.key_to_s, aes.iv_to_s
186
+ return aes.cipher_to_s(unencrypted_source), aes.key_to_s, aes.iv_to_s
162
187
  end
163
-
164
- #Creates an AES class and then Decrypts source using AES 256 CBC, using @key and @iv
165
- # @param encrypted_source [String|File]
166
- # @param base64_source [Boolean] if true, then source is assumed to be base64 encoded.
167
- # @param key_string [String] optional base64 key to be used in encryption or decryption.
188
+
189
+ # Creates an AES class and then Decrypts source using AES 256 CBC, using @key and @iv
190
+ #
191
+ # @param encrypted_source [String|File]
192
+ # @param base64_source [Boolean] if true, then source is assumed to be base64 encoded.
193
+ # @param key_string [String] optional base64 key to be used in encryption or decryption.
168
194
  # if nil, then key and iv are generated automatically. Recover the key with key_to_s(), or key_iv_to_s()
169
- # @param iv_string [String ] optional base64 iv (initial vector) to be used in the encryption or decryption
195
+ # @param iv_string [String ] optional base64 iv (initial vector) to be used in the encryption or decryption
170
196
  # Overwritten by auto generated iv, if key_string is nil. Recover with iv_to_str() or key_iv_to_s().
171
- # @return [String] String representing the original unencypted source
172
- def self.decrypt(encrypted_source, base64_source=false, key_string = nil, iv_string = nil)
197
+ # @return [String] String representing the original unencypted source
198
+ def self.decrypt(encrypted_source, base64_source = false, key_string = nil, iv_string = nil)
173
199
  aes = self.new(key_string, iv_string)
174
200
  return aes.decrypt(encrypted_source, base64_source)
175
201
  end
176
202
  end
177
203
  end
178
-
179
-
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wikk_aes_256
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rob Burrowes
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-10 00:00:00.000000000 Z
11
+ date: 2022-06-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hoe-yard
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '3.16'
33
+ version: '3.23'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '3.16'
40
+ version: '3.23'
41
41
  description: Class for AES 256 encryption of text.
42
42
  email:
43
43
  - r.burrowes@auckland.ac.nz
@@ -53,11 +53,11 @@ files:
53
53
  - README.md
54
54
  - Rakefile
55
55
  - lib/wikk_aes_256.rb
56
- homepage: http://wikarekare.github.com/wikk_aes/
56
+ homepage: https://wikarekare.github.io/wikk_aes_256/
57
57
  licenses:
58
58
  - MIT
59
59
  metadata: {}
60
- post_install_message:
60
+ post_install_message:
61
61
  rdoc_options:
62
62
  - "--markup"
63
63
  - markdown
@@ -78,9 +78,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
78
78
  - !ruby/object:Gem::Version
79
79
  version: '0'
80
80
  requirements: []
81
- rubyforge_project:
82
- rubygems_version: 2.6.13
83
- signing_key:
81
+ rubygems_version: 3.2.22
82
+ signing_key:
84
83
  specification_version: 4
85
84
  summary: Class for AES 256 encryption of text.
86
85
  test_files: []