symmetric-encryption 3.6.0 → 3.7.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -85,18 +85,18 @@ module SymmetricEncryption
85
85
  # Recommended: true
86
86
  #
87
87
  def initialize(params={})
88
- parms = params.dup
89
- @key = parms.delete(:key)
90
- @iv = parms.delete(:iv)
91
- @cipher_name = parms.delete(:cipher_name) || parms.delete(:cipher) || 'aes-256-cbc'
92
- @version = parms.delete(:version)
93
- @always_add_header = parms.delete(:always_add_header) || false
94
- @encoding = (parms.delete(:encoding) || :base64).to_sym
95
-
96
- raise "Missing mandatory parameter :key" unless @key
97
- raise "Invalid Encoding: #{@encoding}" unless ENCODINGS.include?(@encoding)
98
- raise "Cipher version has a valid rage of 0 to 255. #{@version} is too high, or negative" if (@version.to_i > 255) || (@version.to_i < 0)
99
- parms.each_pair {|k,v| warn "SymmetricEncryption::Cipher Ignoring unknown option #{k.inspect} = #{v.inspect}"}
88
+ params = params.dup
89
+ @key = params.delete(:key)
90
+ @iv = params.delete(:iv)
91
+ @cipher_name = params.delete(:cipher_name) || params.delete(:cipher) || 'aes-256-cbc'
92
+ @version = params.delete(:version)
93
+ @always_add_header = params.delete(:always_add_header) || false
94
+ @encoding = (params.delete(:encoding) || :base64).to_sym
95
+
96
+ raise(ArgumentError, "Missing mandatory parameter :key") unless @key
97
+ raise(ArgumentError, "Invalid Encoding: #{@encoding}") unless ENCODINGS.include?(@encoding)
98
+ raise(ArgumentError, "Cipher version has a valid range of 0 to 255. #{@version} is too high, or negative") if (@version.to_i > 255) || (@version.to_i < 0)
99
+ raise(ArgumentError, "SymmetricEncryption::Cipher Invalid options #{params.inspect}") if params.size > 0
100
100
  end
101
101
 
102
102
  # Encrypt and then encode a string
@@ -286,7 +286,7 @@ module SymmetricEncryption
286
286
  # otherwise to decrypt the data following the header
287
287
  version = flags & 0b0000_0000_1111_1111
288
288
  decryption_cipher = SymmetricEncryption.cipher(version)
289
- raise "Cipher with version:#{version.inspect} not found in any of the configured SymmetricEncryption ciphers" unless decryption_cipher
289
+ raise(SymmetricEncryption::CipherError, "Cipher with version:#{version.inspect} not found in any of the configured SymmetricEncryption ciphers") unless decryption_cipher
290
290
  iv, key, cipher_name = nil
291
291
 
292
292
  if include_iv
@@ -0,0 +1,15 @@
1
+ module SymmetricEncryption
2
+
3
+ # Exceptions created by SymmetricEncryption
4
+ class Error < StandardError
5
+ end
6
+
7
+ # Exceptions when working with Ciphers
8
+ class CipherError < Error
9
+ end
10
+
11
+ # Exceptions when trying to use the keys before they have been configured
12
+ class ConfigError < Error
13
+ end
14
+
15
+ end
@@ -112,7 +112,7 @@ module MongoMapper
112
112
  encrypted_key_name = options.delete(:encrypt_as) || "encrypted_#{key_name}"
113
113
  options[:type] = COERCION_MAP[type] unless [:yaml, :json].include?(options[:type])
114
114
 
115
- raise "Invalid type: #{type.inspect}. Valid types: #{COERCION_MAP.keys.join(',')}" unless options[:type]
115
+ raise(ArgumentError, "Invalid type: #{type.inspect}. Valid types: #{COERCION_MAP.keys.join(',')}") unless options[:type]
116
116
 
117
117
  SymmetricEncryption::Generator.generate_decrypted_accessors(self, key_name, encrypted_key_name, options)
118
118
 
@@ -99,7 +99,7 @@ Mongoid::Fields.option :encrypted do |model, field, options|
99
99
  end
100
100
 
101
101
  if decrypted_field_name.nil?
102
- raise "SymmetricEncryption for Mongoid. Encryption enabled for field #{encrypted_field_name}. It must either start with 'encrypted_' or the option :decrypt_as must be supplied"
102
+ raise(ArgumentError, "SymmetricEncryption for Mongoid. Encryption enabled for field #{encrypted_field_name}. It must either start with 'encrypted_' or the option :decrypt_as must be supplied")
103
103
  end
104
104
 
105
105
  SymmetricEncryption::Generator.generate_decrypted_accessors(model, decrypted_field_name, encrypted_field_name, options)
@@ -3,21 +3,13 @@ module SymmetricEncryption
3
3
  # Common internal method for generating accessors for decrypted accessors
4
4
  # Primarily used by extensions
5
5
  def self.generate_decrypted_accessors(model, decrypted_name, encrypted_name, options)
6
+ options = options.dup
7
+ random_iv = options.delete(:random_iv) || false
8
+ compress = options.delete(:compress) || false
9
+ type = options.delete(:type) || :string
6
10
 
7
- random_iv = options.delete(:random_iv) || false
8
- compress = options.delete(:compress) || false
9
- type = options.delete(:type) || :string
10
-
11
- # For backward compatibility
12
- if options.delete(:marshal) == true
13
- warn("The :marshal option has been deprecated in favor of :type. For example: attr_encrypted name, type: :yaml")
14
- raise "Marshal is depreacted and cannot be used in conjunction with :type, just use :type. For #{params.inspect}" if type != :string
15
- type = :yaml
16
- end
17
-
18
- options.each {|option| warn "Ignoring unknown option #{option.inspect} supplied when encrypting #{decrypted_name} with #{params.inspect}"}
19
-
20
- raise "Invalid type: #{type.inspect}. Valid types: #{SymmetricEncryption::COERCION_TYPES.inspect}" unless SymmetricEncryption::COERCION_TYPES.include?(type)
11
+ raise(ArgumentError, "SymmetricEncryption Invalid options #{options.inspect} when encrypting '#{decrypted_name}'") if options.size > 0
12
+ raise(ArgumentError, "Invalid type: #{type.inspect}. Valid types: #{SymmetricEncryption::COERCION_TYPES.inspect}") unless SymmetricEncryption::COERCION_TYPES.include?(type)
21
13
 
22
14
  if model.const_defined?(:EncryptedAttributes, _search_ancestors = false)
23
15
  mod = model.const_get(:EncryptedAttributes)
@@ -28,25 +20,25 @@ module SymmetricEncryption
28
20
 
29
21
  # Generate getter and setter methods
30
22
  mod.module_eval(<<-EOS, __FILE__, __LINE__ + 1)
31
- # Set the un-encrypted field
32
- # Also updates the encrypted field with the encrypted value
33
- # Freeze the decrypted field value so that it is not modified directly
34
- def #{decrypted_name}=(value)
35
- v = SymmetricEncryption::coerce(value, :#{type})
36
- self.#{encrypted_name} = @stored_#{encrypted_name} = ::SymmetricEncryption.encrypt(v,#{random_iv},#{compress},:#{type})
37
- @#{decrypted_name} = v.freeze
38
- end
23
+ # Set the un-encrypted field
24
+ # Also updates the encrypted field with the encrypted value
25
+ # Freeze the decrypted field value so that it is not modified directly
26
+ def #{decrypted_name}=(value)
27
+ v = SymmetricEncryption::coerce(value, :#{type})
28
+ self.#{encrypted_name} = @stored_#{encrypted_name} = ::SymmetricEncryption.encrypt(v,#{random_iv},#{compress},:#{type})
29
+ @#{decrypted_name} = v.freeze
30
+ end
39
31
 
40
- # Returns the decrypted value for the encrypted field
41
- # The decrypted value is cached and is only decrypted if the encrypted value has changed
42
- # If this method is not called, then the encrypted value is never decrypted
43
- def #{decrypted_name}
44
- if @stored_#{encrypted_name} != self.#{encrypted_name}
45
- @#{decrypted_name} = ::SymmetricEncryption.decrypt(self.#{encrypted_name},version=nil,:#{type}).freeze
46
- @stored_#{encrypted_name} = self.#{encrypted_name}
32
+ # Returns the decrypted value for the encrypted field
33
+ # The decrypted value is cached and is only decrypted if the encrypted value has changed
34
+ # If this method is not called, then the encrypted value is never decrypted
35
+ def #{decrypted_name}
36
+ if @stored_#{encrypted_name} != self.#{encrypted_name}
37
+ @#{decrypted_name} = ::SymmetricEncryption.decrypt(self.#{encrypted_name},version=nil,:#{type}).freeze
38
+ @stored_#{encrypted_name} = self.#{encrypted_name}
39
+ end
40
+ @#{decrypted_name}
47
41
  end
48
- @#{decrypted_name}
49
- end
50
42
 
51
43
  EOS
52
44
  end
@@ -11,7 +11,7 @@ namespace :symmetric_encryption do
11
11
  begin
12
12
  require 'highline'
13
13
  rescue LoadError
14
- raise "Please install gem highline before using the command line task to encrypt an entered string.\n gem install \"highline\""
14
+ raise(SymmetricEncryption::ConfigError, "Please install gem highline before using the command line task to encrypt an entered string.\n gem install \"highline\"")
15
15
  end
16
16
  password1 = nil
17
17
  password2 = 0
@@ -77,7 +77,7 @@ module SymmetricEncryption
77
77
  # csv.close if csv
78
78
  # end
79
79
  def self.open(filename_or_stream, options={}, &block)
80
- raise "options must be a hash" unless options.respond_to?(:each_pair)
80
+ raise(ArgumentError, 'options must be a hash') unless options.respond_to?(:each_pair)
81
81
  mode = options.fetch(:mode, 'rb')
82
82
  compress = options.fetch(:compress, false)
83
83
  ios = filename_or_stream.is_a?(String) ? ::File.open(filename_or_stream, mode) : filename_or_stream
@@ -115,7 +115,7 @@ module SymmetricEncryption
115
115
  @version = options[:version]
116
116
  @header_present = false
117
117
 
118
- raise "Buffer size cannot be smaller than 128" unless @buffer_size >= 128
118
+ raise(ArgumentError, 'Buffer size cannot be smaller than 128') unless @buffer_size >= 128
119
119
 
120
120
  read_header
121
121
  end
@@ -180,12 +180,14 @@ module SymmetricEncryption
180
180
  data = nil
181
181
  if length
182
182
  return '' if length == 0
183
- return nil if @ios.eof? && (@read_buffer.length == 0)
183
+ return nil if eof?
184
184
  # Read length bytes
185
185
  while (@read_buffer.length < length) && !@ios.eof?
186
186
  read_block
187
187
  end
188
- if @read_buffer.length > length
188
+ if @read_buffer.length == 0
189
+ data = nil
190
+ elsif @read_buffer.length > length
189
191
  data = @read_buffer.slice!(0..length-1)
190
192
  else
191
193
  data = @read_buffer
@@ -301,7 +303,7 @@ module SymmetricEncryption
301
303
  rewind
302
304
  offset = size + amount
303
305
  else
304
- raise "unknown whence:#{whence} supplied to seek()"
306
+ raise(ArgumentError, "unknown whence:#{whence} supplied to seek()")
305
307
  end
306
308
  read(offset) if offset > 0
307
309
  0
@@ -38,7 +38,7 @@ module SymmetricEncryption
38
38
  # cipher: 'aes-128-cbc'
39
39
  # )
40
40
  def self.cipher=(cipher)
41
- raise "Cipher must be similar to SymmetricEncryption::Ciphers" unless cipher.nil? || (cipher.respond_to?(:encrypt) && cipher.respond_to?(:decrypt))
41
+ raise(ArgumentError, 'Cipher must respond to :encrypt and :decrypt') unless cipher.nil? || (cipher.respond_to?(:encrypt) && cipher.respond_to?(:decrypt))
42
42
  @@cipher = cipher
43
43
  end
44
44
 
@@ -47,7 +47,7 @@ module SymmetricEncryption
47
47
  # Returns the primary cipher if no match was found and version == 0
48
48
  # Returns nil if no match was found and version != 0
49
49
  def self.cipher(version = nil)
50
- raise "Call SymmetricEncryption.load! or SymmetricEncryption.cipher= prior to encrypting or decrypting data" unless @@cipher
50
+ raise(SymmetricEncryption::ConfigError, 'Call SymmetricEncryption.load! or SymmetricEncryption.cipher= prior to encrypting or decrypting data') unless @@cipher
51
51
  return @@cipher if version.nil? || (@@cipher.version == version)
52
52
  secondary_ciphers.find {|c| c.version == version} || (@@cipher if version == 0)
53
53
  end
@@ -59,9 +59,9 @@ module SymmetricEncryption
59
59
 
60
60
  # Set the Secondary Symmetric Ciphers Array to be used
61
61
  def self.secondary_ciphers=(secondary_ciphers)
62
- raise "secondary_ciphers must be a collection" unless secondary_ciphers.respond_to? :each
62
+ raise(ArgumentError, "secondary_ciphers must be a collection") unless secondary_ciphers.respond_to? :each
63
63
  secondary_ciphers.each do |cipher|
64
- raise "secondary_ciphers can only consist of SymmetricEncryption::Ciphers" unless cipher.respond_to?(:encrypt) && cipher.respond_to?(:decrypt)
64
+ raise(ArgumentError, "secondary_ciphers can only consist of SymmetricEncryption::Ciphers") unless cipher.respond_to?(:encrypt) && cipher.respond_to?(:decrypt)
65
65
  end
66
66
  @@secondary_ciphers = secondary_ciphers
67
67
  end
@@ -106,7 +106,7 @@ module SymmetricEncryption
106
106
  # the incorrect key. Clearly the data returned is garbage, but it still
107
107
  # successfully returns a string of data
108
108
  def self.decrypt(encrypted_and_encoded_string, version=nil, type=:string)
109
- raise "Call SymmetricEncryption.load! or SymmetricEncryption.cipher= prior to encrypting or decrypting data" unless @@cipher
109
+ raise(SymmetricEncryption::ConfigError, 'Call SymmetricEncryption.load! or SymmetricEncryption.cipher= prior to encrypting or decrypting data') unless @@cipher
110
110
  return encrypted_and_encoded_string if encrypted_and_encoded_string.nil? || (encrypted_and_encoded_string == '')
111
111
 
112
112
  str = encrypted_and_encoded_string.to_s
@@ -176,7 +176,7 @@ module SymmetricEncryption
176
176
  # the coercible gem is available in the path.
177
177
  # Default: :string
178
178
  def self.encrypt(str, random_iv=false, compress=false, type=:string)
179
- raise "Call SymmetricEncryption.load! or SymmetricEncryption.cipher= prior to encrypting or decrypting data" unless @@cipher
179
+ raise(SymmetricEncryption::ConfigError, 'Call SymmetricEncryption.load! or SymmetricEncryption.cipher= prior to encrypting or decrypting data') unless @@cipher
180
180
 
181
181
  # Encrypt and then encode the supplied string
182
182
  @@cipher.encrypt(coerce_to_string(str, type), random_iv, compress)
@@ -194,10 +194,10 @@ module SymmetricEncryption
194
194
  # WARNING: It is possible to decrypt data using the wrong key, so the value
195
195
  # returned should not be relied upon
196
196
  def self.try_decrypt(str)
197
- raise "Call SymmetricEncryption.load! or SymmetricEncryption.cipher= prior to encrypting or decrypting data" unless @@cipher
197
+ raise(SymmetricEncryption::ConfigError, 'Call SymmetricEncryption.load! or SymmetricEncryption.cipher= prior to encrypting or decrypting data') unless @@cipher
198
198
  begin
199
199
  decrypt(str)
200
- rescue OpenSSL::Cipher::CipherError
200
+ rescue OpenSSL::Cipher::CipherError, SymmetricEncryption::CipherError
201
201
  nil
202
202
  end
203
203
  end
@@ -210,7 +210,7 @@ module SymmetricEncryption
210
210
  # symmetric encryption header. In some cases data decrypted using the
211
211
  # wrong key will decrypt and return garbage
212
212
  def self.encrypted?(encrypted_data)
213
- raise "Call SymmetricEncryption.load! or SymmetricEncryption.cipher= prior to encrypting or decrypting data" unless @@cipher
213
+ raise(SymmetricEncryption::ConfigError, 'Call SymmetricEncryption.load! or SymmetricEncryption.cipher= prior to encrypting or decrypting data') unless @@cipher
214
214
 
215
215
  # For now have to decrypt it fully
216
216
  result = try_decrypt(encrypted_data)
@@ -276,7 +276,7 @@ module SymmetricEncryption
276
276
 
277
277
  # RSA key to decrypt key files
278
278
  private_rsa_key = config.delete('private_rsa_key')
279
- raise "The configuration file must contain a 'private_rsa_key' parameter to generate symmetric keys" unless private_rsa_key
279
+ raise(SymmetricEncryption::ConfigError, "The configuration file must contain a 'private_rsa_key' parameter to generate symmetric keys") unless private_rsa_key
280
280
  rsa_key = OpenSSL::PKey::RSA.new(private_rsa_key)
281
281
 
282
282
  # Check if config file contains 1 or multiple ciphers
@@ -411,7 +411,7 @@ module SymmetricEncryption
411
411
 
412
412
  # Load Encrypted Symmetric keys
413
413
  if key_filename = config.delete(:key_filename)
414
- raise "Missing mandatory config parameter :private_rsa_key when :key_filename is supplied" unless rsa
414
+ raise(SymmetricEncryption::ConfigError, "Missing mandatory config parameter :private_rsa_key when :key_filename is supplied") unless rsa
415
415
  encrypted_key = begin
416
416
  File.open(key_filename, 'rb'){|f| f.read}
417
417
  rescue Errno::ENOENT
@@ -423,7 +423,7 @@ module SymmetricEncryption
423
423
  end
424
424
 
425
425
  if iv_filename = config.delete(:iv_filename)
426
- raise "Missing mandatory config parameter :private_rsa_key when :iv_filename is supplied" unless rsa
426
+ raise(SymmetricEncryption::ConfigError, "Missing mandatory config parameter :private_rsa_key when :iv_filename is supplied") unless rsa
427
427
  encrypted_iv = begin
428
428
  File.open(iv_filename, 'rb'){|f| f.read} if iv_filename
429
429
  rescue Errno::ENOENT
@@ -435,7 +435,7 @@ module SymmetricEncryption
435
435
  end
436
436
 
437
437
  if encrypted_key = config.delete(:encrypted_key)
438
- raise "Missing mandatory config parameter :private_rsa_key when :encrypted_key is supplied" unless rsa
438
+ raise(SymmetricEncryption::ConfigError, "Missing mandatory config parameter :private_rsa_key when :encrypted_key is supplied") unless rsa
439
439
  # Decode value first using encoding specified
440
440
  encrypted_key = ::Base64.decode64(encrypted_key)
441
441
  if !encrypted_key || encrypted_key.empty?
@@ -447,7 +447,7 @@ module SymmetricEncryption
447
447
  end
448
448
 
449
449
  if encrypted_iv = config.delete(:encrypted_iv)
450
- raise "Missing mandatory config parameter :private_rsa_key when :encrypted_iv is supplied" unless rsa
450
+ raise(SymmetricEncryption::ConfigError, "Missing mandatory config parameter :private_rsa_key when :encrypted_iv is supplied") unless rsa
451
451
  # Decode value first using encoding specified
452
452
  encrypted_iv = ::Base64.decode64(encrypted_iv)
453
453
  if !encrypted_key || encrypted_key.empty?
@@ -1,3 +1,3 @@
1
1
  module SymmetricEncryption #:nodoc
2
- VERSION = "3.6.0"
2
+ VERSION = "3.7.0"
3
3
  end
@@ -99,7 +99,7 @@ module SymmetricEncryption
99
99
  # csv.close if csv
100
100
  # end
101
101
  def self.open(filename_or_stream, options={}, &block)
102
- raise "options must be a hash" unless options.respond_to?(:each_pair)
102
+ raise(ArgumentError, 'options must be a hash') unless options.respond_to?(:each_pair)
103
103
  mode = options.fetch(:mode, 'wb')
104
104
  compress = options.fetch(:compress, false)
105
105
  ios = filename_or_stream.is_a?(String) ? ::File.open(filename_or_stream, mode) : filename_or_stream
@@ -119,19 +119,19 @@ module SymmetricEncryption
119
119
  header = options.fetch(:header, true)
120
120
  random_key = options.fetch(:random_key, true)
121
121
  random_iv = options.fetch(:random_iv, random_key)
122
- raise "When :random_key is true, :random_iv must also be true" if random_key && !random_iv
122
+ raise(ArgumentError, 'When :random_key is true, :random_iv must also be true') if random_key && !random_iv
123
123
  # Compress is only used at this point for setting the flag in the header
124
124
  compress = options.fetch(:compress, false)
125
125
  version = options[:version]
126
126
  cipher_name = options[:cipher_name]
127
- raise "Cannot supply a :cipher_name unless both :random_key and :random_iv are true" if cipher_name && !random_key && !random_iv
127
+ raise(ArgumentError, 'Cannot supply a :cipher_name unless both :random_key and :random_iv are true') if cipher_name && !random_key && !random_iv
128
128
 
129
129
  # Force header if compressed or using random iv, key
130
130
  header = true if compress || random_key || random_iv
131
131
 
132
132
  # Cipher to encrypt the random_key, or the entire file
133
133
  cipher = SymmetricEncryption.cipher(version)
134
- raise "Cipher with version:#{version} not found in any of the configured SymmetricEncryption ciphers" unless cipher
134
+ raise(SymmetricEncryption::CipherError, "Cipher with version:#{version} not found in any of the configured SymmetricEncryption ciphers") unless cipher
135
135
 
136
136
  @stream_cipher = ::OpenSSL::Cipher.new(cipher_name || cipher.cipher_name)
137
137
  @stream_cipher.encrypt
@@ -6,6 +6,7 @@ require 'coercible'
6
6
  require 'symmetric_encryption/version'
7
7
  require 'symmetric_encryption/cipher'
8
8
  require 'symmetric_encryption/symmetric_encryption'
9
+ require 'symmetric_encryption/exception'
9
10
 
10
11
  module SymmetricEncryption
11
12
  autoload :Reader, 'symmetric_encryption/reader'
@@ -1,8 +1,8 @@
1
- require File.dirname(__FILE__) + '/test_helper'
1
+ require_relative 'test_helper'
2
2
 
3
3
  ActiveRecord::Base.logger = SemanticLogger[ActiveRecord]
4
4
  ActiveRecord::Base.configurations = YAML::load(ERB.new(IO.read('test/config/database.yml')).result)
5
- ActiveRecord::Base.establish_connection('test')
5
+ ActiveRecord::Base.establish_connection(:test)
6
6
 
7
7
  ActiveRecord::Schema.define version: 0 do
8
8
  create_table :users, force: true do |t|
@@ -13,6 +13,7 @@ ActiveRecord::Schema.define version: 0 do
13
13
  t.text :encrypted_data_yaml
14
14
  t.text :encrypted_data_json
15
15
  t.string :name
16
+ t.string :encrypted_unsupported_option
16
17
 
17
18
  t.string :encrypted_integer_value
18
19
  t.string :encrypted_float_value
@@ -67,7 +68,7 @@ User.establish_connection(cfg)
67
68
  #
68
69
  # Unit Test for attr_encrypted extensions in ActiveRecord
69
70
  #
70
- class ActiveRecordTest < Test::Unit::TestCase
71
+ class ActiveRecordTest < Minitest::Test
71
72
  context 'ActiveRecord' do
72
73
  INTEGER_VALUE = 12
73
74
  FLOAT_VALUE = 88.12345
@@ -163,13 +164,15 @@ class ActiveRecordTest < Test::Unit::TestCase
163
164
  end
164
165
 
165
166
  should 'allow lookups using unencrypted or encrypted column name' do
166
- @user.save!
167
+ if ActiveRecord::VERSION::STRING.to_f < 4.1
168
+ @user.save!
167
169
 
168
- inq = User.find_by_bank_account_number(@bank_account_number)
169
- assert_equal @bank_account_number, inq.bank_account_number
170
- assert_equal @bank_account_number_encrypted, inq.encrypted_bank_account_number
170
+ inq = User.find_by_bank_account_number(@bank_account_number)
171
+ assert_equal @bank_account_number, inq.bank_account_number
172
+ assert_equal @bank_account_number_encrypted, inq.encrypted_bank_account_number
171
173
 
172
- @user.delete
174
+ @user.delete
175
+ end
173
176
  end
174
177
 
175
178
  should 'all paths should lead to the same result' do
@@ -471,4 +474,4 @@ class ActiveRecordTest < Test::Unit::TestCase
471
474
  end
472
475
  end
473
476
  end
474
- end
477
+ end
data/test/cipher_test.rb CHANGED
@@ -1,8 +1,8 @@
1
- require File.dirname(__FILE__) + '/test_helper'
1
+ require_relative 'test_helper'
2
2
 
3
3
  # Unit Test for SymmetricEncryption::Cipher
4
4
  #
5
- class CipherTest < Test::Unit::TestCase
5
+ class CipherTest < Minitest::Test
6
6
  context 'standalone' do
7
7
 
8
8
  should "allow setting the cipher_name" do
@@ -36,7 +36,7 @@ class CipherTest < Test::Unit::TestCase
36
36
  iv: '1234567890ABCDEF',
37
37
  encoding: :none
38
38
  )
39
- assert_raise OpenSSL::Cipher::CipherError do
39
+ assert_raises OpenSSL::Cipher::CipherError do
40
40
  cipher.decrypt('bad data')
41
41
  end
42
42
  end