twofish 1.0.6 → 1.0.7

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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/twofish.rb +11 -7
  3. metadata +8 -9
  4. data/lib/string.rb +0 -16
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 00b2bbf43d9b32ff9b0e8eed4a21195deba38bd7
4
- data.tar.gz: 6b23d440cb0cac34cbba9c37062ab51ce168b4f3
3
+ metadata.gz: 94fdd3f8675e917213219e3e7c20be6bb6ea7cca
4
+ data.tar.gz: e026a558a458513387b7b511a2b4c4334e04afac
5
5
  SHA512:
6
- metadata.gz: f591af29855dce80ccd4f922f146a5ad7bb43cd1b3eba07826f34df0e3ebf605f680eeea7d690538cb5ca9c11e5473355040a103ec1e25d15e1387821309381e
7
- data.tar.gz: 81a586774968b3511354de8979944949e55232d470cd033a2190fdf2b622a7524eefcd7e710fb4f0bc69d62fe503eb8b61980b14b048e1d4e0d74b6c240e6fc1
6
+ metadata.gz: 8b9c58fdc89dd9b7dce44500d617143fb7074b3f2f9297fd952643cabd2e97ed1e04b71f34c55bbdcec6375420604ec50516bdff23e2e6ee060aa68618652008
7
+ data.tar.gz: d3a0f83c9b58a7649942bbc5a007ea72af48cf38ff2a7194768775190a815104c0abc5a0f843b8c53a13fb487059585a7a5b611abd02048de6e299ae788d7642
@@ -9,7 +9,6 @@
9
9
  class Twofish
10
10
 
11
11
  require 'securerandom'
12
- require 'string' # monkey patch for MRI 1.8.7
13
12
  require 'twofish/mode'
14
13
  require 'twofish/padding'
15
14
 
@@ -442,7 +441,7 @@ class Twofish
442
441
  # must be a multiple of the block size.
443
442
  def iv=(iv)
444
443
  raise ArgumentError, 'cannot specify initialization vector for ECB mode' if @mode == Mode::ECB
445
- raise ArgumentError, "initialization vectcor is not a multiple of #{BLOCK_SIZE} bytes" unless (iv.length % BLOCK_SIZE).zero?
444
+ raise ArgumentError, "initialization vector is not a multiple of #{BLOCK_SIZE} bytes" unless (iv.length % BLOCK_SIZE).zero?
446
445
  @iv = iv
447
446
  end
448
447
 
@@ -471,9 +470,9 @@ class Twofish
471
470
  # Encrypt a plaintext string, chunking as required for
472
471
  # CBC mode.
473
472
  def encrypt(plaintext)
474
- plaintext = plaintext.dup.force_encoding('ASCII-8BIT')
473
+ plaintext = to_binary(plaintext.dup)
475
474
  padded_plaintext = Padding.pad!(plaintext, BLOCK_SIZE, @padding)
476
- result = ''.force_encoding('ASCII-8BIT')
475
+ result = to_binary('')
477
476
  if @mode == Mode::CBC
478
477
  @iv ||= SecureRandom.random_bytes(BLOCK_SIZE)
479
478
  @_feedback ||= @iv
@@ -490,9 +489,9 @@ class Twofish
490
489
  # chaining modes. If @iv is not set then we use the first block
491
490
  # as the initialization vector when chaining.
492
491
  def decrypt(ciphertext)
493
- ciphertext = ciphertext.dup.force_encoding('ASCII-8BIT')
492
+ ciphertext = to_binary(ciphertext.dup)
494
493
  raise ArgumentError, "ciphertext is not a multiple of #{BLOCK_SIZE} bytes" unless (ciphertext.length % BLOCK_SIZE).zero?
495
- result = ''.force_encoding('ASCII-8BIT')
494
+ result = to_binary('')
496
495
  if Mode::CBC == @mode
497
496
  if @iv
498
497
  @_feedback ||= @iv
@@ -1044,7 +1043,12 @@ class Twofish
1044
1043
  [@k[0] ^ r2, @k[1] ^ r3, @k[2] ^ r0, @k[3] ^ r1].pack("V4")
1045
1044
  end
1046
1045
 
1047
- private
1046
+ private
1047
+
1048
+ # Force String encoding to binary/8-bit ASCII. NB mutates argument.
1049
+ def to_binary(s)
1050
+ s.respond_to?(:force_encoding) ? s.force_encoding('BINARY') : s
1051
+ end
1048
1052
 
1049
1053
  # The (12, 8) Reed Solomon code has the generator polynomial:
1050
1054
  #
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twofish
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.6
4
+ version: 1.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Carpenter
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-27 00:00:00.000000000 Z
11
+ date: 2016-01-28 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Twofish symmetric cipher in pure Ruby with ECB and CBC cipher modes derived
14
14
  from an original Perl implementation by Guido Flohr
@@ -20,15 +20,14 @@ extra_rdoc_files:
20
20
  - Rakefile
21
21
  - README.rdoc
22
22
  files:
23
+ - LICENSE
24
+ - README.rdoc
25
+ - Rakefile
23
26
  - lib/twofish.rb
24
27
  - lib/twofish/mode.rb
25
28
  - lib/twofish/padding.rb
26
- - lib/string.rb
27
29
  - test/benchmark.rb
28
30
  - test/test_twofish.rb
29
- - LICENSE
30
- - Rakefile
31
- - README.rdoc
32
31
  homepage: http://mcarpenter.org/projects/twofish
33
32
  licenses:
34
33
  - BSD
@@ -39,17 +38,17 @@ require_paths:
39
38
  - lib
40
39
  required_ruby_version: !ruby/object:Gem::Requirement
41
40
  requirements:
42
- - - '>='
41
+ - - ">="
43
42
  - !ruby/object:Gem::Version
44
43
  version: '0'
45
44
  required_rubygems_version: !ruby/object:Gem::Requirement
46
45
  requirements:
47
- - - '>='
46
+ - - ">="
48
47
  - !ruby/object:Gem::Version
49
48
  version: '0'
50
49
  requirements: []
51
50
  rubyforge_project:
52
- rubygems_version: 2.0.3
51
+ rubygems_version: 2.4.8
53
52
  signing_key:
54
53
  specification_version: 4
55
54
  summary: Twofish symmetric cipher in pure Ruby
@@ -1,16 +0,0 @@
1
- class String
2
-
3
- unless method_defined?(:byteslice)
4
- def byteslice(*args)
5
- self.dup.force_encoding('ASCII-8BIT').slice!(*args)
6
- end
7
- end
8
-
9
- unless method_defined?(:force_encoding)
10
- def force_encoding(encoding)
11
- self # noop
12
- end
13
- end
14
-
15
- end
16
-