scrambled_eggs 0.0.2 → 0.1.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c15a26f213ecbe33ec15f37aeb55efb646b3e8f6
4
- data.tar.gz: 5f12e23898ebd3e293a8290e37a6dcd68cbfe5e1
3
+ metadata.gz: 351118ea6a4fe0d78c3920914c1bf29fcc5ea8e9
4
+ data.tar.gz: a9809c8abee09fdd5c3317a663a34061be34c4c4
5
5
  SHA512:
6
- metadata.gz: 5041f9b365924480e3495faaedbef8954a79dd8024a74a1d5b74a0816b60405ce04b170075af0ee86b22b8d54393bf5623c044a6ac8d7580501602180704e2a0
7
- data.tar.gz: 655fd551d2c3b01d9924cd49d02aa52652cc7369f5064751de9f5e20f9a040ed64fc7482e0573980233cbf43fddd0c4216e3de37fbe3ff47013b526e2a4a0052
6
+ metadata.gz: e0627a14c49e8ffe3cd0a9ca580821cee892720b3f039c8fd18194c5d8af488daae1b190b520c48c2ff65a9247ccedd85fcdb067d4045a89116c7003b0eff4b3
7
+ data.tar.gz: c91c4d5453be9113a168ad6dc671a6a127941d90502b1a58736e73eccebcd204e2c57c00dedb8cd2920fb4924faad0175ea3c2212dc4e6108fd665f2fb146d5c
data/CHANGELOG.md CHANGED
@@ -1,7 +1,15 @@
1
+ ### 0.1.0 / 1015-02-11 sanadan <jecy00@gmail.com>
2
+
3
+ * Add generate key from key file.
4
+ * Change default key to generate key from hostname file.
5
+ * Add scramble/descramble file function.
6
+
7
+
1
8
  ### 0.0.2 / 2015-02-07 sanadan <jecy00@gmail.com>
2
9
 
3
10
  * Fixed: Can't require in gemspec file
4
11
 
12
+
5
13
  ### 0.0.1 / 2015-02-06 sanadan <jecy00@gmail.com>
6
14
 
7
15
  * First
@@ -8,15 +8,19 @@ class ScrambledEggs
8
8
  # _algorithm_ :: Algorithm (ex. 'aes-256-cbc')
9
9
  # _salt_ :: Salt (8 bytes)
10
10
  # _key_ :: Crypt key
11
+ # _key_file_ :: Crypt key file (exclude key)
11
12
  #
12
13
  # return :: ScrambledEggs object
13
- def initialize( algorithm: 'aes-256-cbc', salt: nil, key: nil )
14
+ def initialize( algorithm: 'aes-256-cbc', salt: nil, key: nil, key_file: nil )
14
15
  @@algorithm = algorithm
15
- @@salt = salt ? salt : OpenSSL::Random.random_bytes( 8 )
16
+ @@salt = salt != nil ? salt : OpenSSL::Random.random_bytes( 8 )
16
17
  if key
17
18
  @@key = key
18
19
  else
19
- @@key = File.open( '/etc/hostname' ).read
20
+ unless key_file
21
+ key_file = '/etc/hostname'
22
+ end
23
+ @@key = OpenSSL::Digest::SHA512.digest( Pathname.new( key_file ).binread )
20
24
  end
21
25
  end
22
26
 
@@ -45,5 +49,25 @@ class ScrambledEggs
45
49
  cipher.pkcs5_keyivgen( @@key, salt )
46
50
  cipher.update( data ) + cipher.final
47
51
  end
52
+
53
+ # Scramble (encrypt) file
54
+ #
55
+ # _path_ :: File for scramble
56
+ def scramble_file( path )
57
+ pathname = Pathname( path )
58
+ # Not exist Pathname#binwrite on Ruby 2.0.0
59
+ #pathname.binwrite( scramble( pathname.binread ) )
60
+ IO.binwrite( pathname, scramble( pathname.binread ) )
61
+ end
62
+
63
+ # Descramble (decrypt) file
64
+ #
65
+ # _path :: File for descramble
66
+ def descramble_file( path )
67
+ pathname = Pathname.new( path )
68
+ # Not exist Pathname#binwrite on Ruby 2.0.0
69
+ #pathname.binwrite( descramble( pathname.binread ) )
70
+ IO.binwrite( pathname, descramble( pathname.binread ) )
71
+ end
48
72
  end
49
73
 
@@ -1,3 +1,3 @@
1
1
  class ScrambledEggs
2
- VERSION = "0.0.2"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ["sanadan"]
10
10
  spec.email = ["jecy00@gmail.com"]
11
11
  spec.summary = %q{Easy data scrambler.}
12
- spec.description = %q{Easy data Scrambler. Default by hostname.}
12
+ spec.description = %q{Easy data scrambler. Default by hostname.}
13
13
  spec.homepage = "https://github.com/sanadan/scrambled_eggs"
14
14
  spec.license = "MIT"
15
15
 
@@ -1,48 +1,105 @@
1
- =begin
2
- require "tmpdir"
3
- require "pathname"
4
-
5
- class Pathname
6
- @@tempname_number = 0
7
- def self.tempname(base=$0, dir=Dir.tmpdir)
8
- @@tempname_number += 1
9
- path = new(dir) + "#{File.basename(base)}.#{$$}.#{@@tempname_number}"
10
- at_exit do
11
- path.rmtree if path.exist?
12
- end
13
- path
14
- end
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+ require 'tempfile'
3
+ require 'pathname'
4
+
5
+ def generate_random_data( size = 4096 )
6
+ random_size = OpenSSL::BN.rand_range( size ) + 1
7
+ return OpenSSL::Random.random_bytes( random_size )
15
8
  end
16
- =end
17
9
 
18
- require File.dirname(__FILE__) + '/test_helper.rb'
10
+ def generate_random_file( data )
11
+ file = Tempfile.open( 'ScrambledEggs' )
12
+ path = Pathname( file.path )
13
+ # Not exist Pathname#binwrite on Ruby 2.0.0
14
+ #path.binwrite( data )
15
+ IO.binwrite( path, data )
16
+ return path
17
+ end
19
18
 
20
19
  class ScrambledEggsTest < Test::Unit::TestCase
21
20
  def test_scramble_text
22
21
  text = 'Test text'
23
22
  egg = ScrambledEggs.new
24
23
  scrambled = egg.scramble( text )
24
+ assert_not_equal( scrambled, text )
25
25
  assert_equal( egg.descramble( scrambled ), text )
26
26
  end
27
+
27
28
  def test_scramble_binary
28
- size = OpenSSL::BN.rand_range( 4096 ) + 1
29
- data = OpenSSL::Random.random_bytes( size )
29
+ data = generate_random_data
30
30
  egg = ScrambledEggs.new
31
31
  scrambled = egg.scramble( data )
32
+ assert_not_equal( scrambled, data )
32
33
  assert_equal( egg.descramble( scrambled ), data )
33
34
  end
34
- def test_scramble
35
- text = 'Test texti 2'
35
+
36
+ def test_scramble_another_parameter
37
+ text = 'Test text 2'
36
38
  egg = ScrambledEggs.new( algorithm: 'aes-128-cbc', salt: '01234567', key: 'Test key' )
37
39
  scrambled = egg.scramble( text )
38
40
  # puts scrambled.unpack( 'H*' )
39
- assert_equal( scrambled, [ '30313233343536371c24bce6e1bc9562162f4625602fb608' ].pack( 'H*' ) )
41
+ assert_equal( scrambled, [ '30313233343536374d34d042eecb111955e73b3630a399e5' ].pack( 'H*' ) )
40
42
  assert_equal( egg.descramble( scrambled ), text )
41
43
  end
44
+
42
45
  def test_another_eggs
43
46
  text = 'Test text 3'
44
47
  scrambled = ScrambledEggs.new.scramble( text )
45
48
  assert_equal( ScrambledEggs.new.descramble( scrambled ), text )
49
+ assert_raise OpenSSL::Cipher::CipherError do
50
+ ScrambledEggs.new( key: generate_random_data( 256 ) ).descramble( scrambled )
51
+ end
52
+
53
+ algorithm = 'aes-192-cbc'
54
+ salt = '98765432'
55
+ key = 'Test key 2'
56
+ scrambled = ScrambledEggs.new( algorithm: algorithm, salt: salt, key: key ).scramble( text )
57
+ assert_equal( ScrambledEggs.new( algorithm: algorithm, salt: salt, key: key ).descramble( scrambled ), text )
58
+ assert_raise OpenSSL::Cipher::CipherError do
59
+ ScrambledEggs.new( algorithm: algorithm, salt: salt, key: generate_random_data( 256 ) ).descramble( scrambled )
60
+ end
61
+ end
62
+
63
+ def test_salt
64
+ text = 'Test text 4'
65
+ 256.times do |i|
66
+ salt = []
67
+ 8.times do
68
+ salt << i
69
+ end
70
+ salt = salt.pack( 'C*' )
71
+ scrambled = ''
72
+ assert_nothing_raised do
73
+ scrambled = ScrambledEggs.new( salt: salt ).scramble( text )
74
+ end
75
+ assert_nothing_raised do
76
+ ScrambledEggs.new.descramble( scrambled )
77
+ end
78
+ end
79
+ end
80
+
81
+ def test_file
82
+ data = generate_random_data
83
+ path = generate_random_file( data )
84
+ ScrambledEggs.new.scramble_file( path )
85
+ assert_not_equal( path.binread, data )
86
+ ScrambledEggs.new.descramble_file( path )
87
+ assert_equal( path.binread, data )
88
+ assert_raise OpenSSL::Cipher::CipherError do
89
+ ScrambledEggs.new( key: generate_random_data( 256 ) ).descramble_file( path )
90
+ end
91
+ end
92
+
93
+ def test_key_file
94
+ text = 'Test text 5'
95
+ key_path = generate_random_file( generate_random_data )
96
+ scrambled = ScrambledEggs.new( key_file: key_path ).scramble( text )
97
+ assert_not_equal( scrambled, text )
98
+ assert_equal( ScrambledEggs.new( key_file: key_path ).descramble( scrambled ), text )
99
+ key_path2 = generate_random_file( generate_random_data )
100
+ assert_raise OpenSSL::Cipher::CipherError do
101
+ ScrambledEggs.new( key_file: key_path2 ).descramble( scrambled )
102
+ end
46
103
  end
47
104
  end
48
105
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scrambled_eggs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - sanadan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-07 00:00:00.000000000 Z
11
+ date: 2015-02-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -38,7 +38,7 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
- description: Easy data Scrambler. Default by hostname.
41
+ description: Easy data scrambler. Default by hostname.
42
42
  email:
43
43
  - jecy00@gmail.com
44
44
  executables: []