test/cipher_test.rb in symmetric-encryption-3.0.3 vs test/cipher_test.rb in symmetric-encryption-3.1.0
- old
+ new
@@ -50,16 +50,85 @@
end
end
end
+ [false, true].each do |always_add_header|
+ SymmetricEncryption::Cipher::ENCODINGS.each do |encoding|
+ context "encoding: #{encoding} with#{'out' unless always_add_header} header" do
+ setup do
+ @social_security_number = "987654321"
+ @social_security_number_encrypted =
+ case encoding
+ when :base64
+ always_add_header ? "QEVuQwAAyTeLjsHTa8ykoO95K0KQmg==\n" : "yTeLjsHTa8ykoO95K0KQmg==\n"
+ when :base64strict
+ always_add_header ? "QEVuQwAAyTeLjsHTa8ykoO95K0KQmg==" : "yTeLjsHTa8ykoO95K0KQmg=="
+ when :base16
+ always_add_header ? "40456e430000c9378b8ec1d36bcca4a0ef792b42909a" : "c9378b8ec1d36bcca4a0ef792b42909a"
+ when :none
+ bin = always_add_header ? "@EnC\x00\x00\xC97\x8B\x8E\xC1\xD3k\xCC\xA4\xA0\xEFy+B\x90\x9A" : "\xC97\x8B\x8E\xC1\xD3k\xCC\xA4\xA0\xEFy+B\x90\x9A"
+ bin.force_encoding(Encoding.find("binary"))
+ else
+ raise "Add test for encoding: #{encoding}"
+ end
+ @social_security_number_encrypted_with_secondary_1 = "D1UCu38pqJ3jc0GvwJHiow==\n"
+ @non_utf8 = "\xc2".force_encoding('binary')
+ @cipher = SymmetricEncryption::Cipher.new(
+ key: 'ABCDEF1234567890ABCDEF1234567890',
+ iv: 'ABCDEF1234567890',
+ cipher_name: 'aes-128-cbc',
+ encoding: encoding,
+ always_add_header: always_add_header
+ )
+ end
+
+ should "encrypt simple string" do
+ assert_equal @social_security_number_encrypted, @cipher.encrypt(@social_security_number)
+ end
+
+ should "decrypt string" do
+ assert decrypted = @cipher.decrypt(@social_security_number_encrypted)
+ assert_equal @social_security_number, decrypted
+ assert_equal Encoding.find('utf-8'), decrypted.encoding, decrypted
+ end
+
+ should 'return BINARY encoding for non-UTF-8 encrypted data' do
+ assert_equal Encoding.find('binary'), @non_utf8.encoding
+ assert_equal true, @non_utf8.valid_encoding?
+ assert encrypted = @cipher.encrypt(@non_utf8)
+ assert decrypted = @cipher.decrypt(encrypted)
+ assert_equal true, decrypted.valid_encoding?
+ assert_equal Encoding.find('binary'), decrypted.encoding, decrypted
+ assert_equal @non_utf8, decrypted
+ end
+
+ should "return nil when encrypting nil" do
+ assert_equal nil, @cipher.encrypt(nil)
+ end
+
+ should "return '' when encrypting ''" do
+ assert_equal '', @cipher.encrypt('')
+ end
+
+ should "return nil when decrypting nil" do
+ assert_equal nil, @cipher.decrypt(nil)
+ end
+
+ should "return '' when decrypting ''" do
+ assert_equal '', @cipher.decrypt('')
+ end
+ end
+ end
+ end
+
context 'with configuration' do
setup do
@cipher = SymmetricEncryption::Cipher.new(
- :key => '1234567890ABCDEF1234567890ABCDEF',
- :iv => '1234567890ABCDEF',
- :encoding => :none
+ :key => '1234567890ABCDEF1234567890ABCDEF',
+ :iv => '1234567890ABCDEF',
+ :encoding => :none
)
@social_security_number = "987654321"
@social_security_number_encrypted = "A\335*\314\336\250V\340\023%\000S\177\305\372\266"
@social_security_number_encrypted.force_encoding('binary') if defined?(Encoding)
@@ -71,53 +140,17 @@
should "default to 'aes-256-cbc'" do
assert_equal 'aes-256-cbc', @cipher.cipher_name
end
- should "encrypt simple string" do
- assert_equal @social_security_number_encrypted, @cipher.encrypt(@social_security_number)
- end
-
- should "return nil when encrypting nil" do
- assert_equal nil, @cipher.encrypt(nil)
- end
-
- should "return '' when encrypting ''" do
- assert_equal '', @cipher.encrypt('')
- end
-
- should "return nil when decrypting nil" do
- assert_equal nil, @cipher.decrypt(nil)
- end
-
- should "return '' when decrypting ''" do
- assert_equal '', @cipher.decrypt('')
- end
-
- should "decrypt string" do
- assert_equal @social_security_number, @cipher.decrypt(@social_security_number_encrypted)
- end
-
- if defined?(Encoding)
- context "on Ruby 1.9" do
- should "encode encrypted data as binary" do
- assert_equal Encoding.find('binary'), @cipher.encrypt(@social_security_number).encoding
- end
-
- should "decode encrypted data as utf-8" do
- assert_equal Encoding.find('utf-8'), @cipher.decrypt(@cipher.encrypt(@social_security_number)).encoding
- end
- end
- end
-
context "with header" do
setup do
@social_security_number = "987654321"
end
should "build and parse header" do
assert random_key_pair = SymmetricEncryption::Cipher.random_key_pair('aes-128-cbc')
- assert binary_header = SymmetricEncryption::Cipher.build_header(SymmetricEncryption.cipher.version, compressed=true, random_key_pair[:iv], random_key_pair[:key], random_key_pair[:cipher_name], binary=true)
+ assert binary_header = SymmetricEncryption::Cipher.build_header(SymmetricEncryption.cipher.version, compressed=true, random_key_pair[:iv], random_key_pair[:key], random_key_pair[:cipher_name])
header = SymmetricEncryption::Cipher.parse_header!(binary_header)
assert_equal true, header.compressed
assert random_cipher = SymmetricEncryption::Cipher.new(random_key_pair)
assert_equal random_cipher.cipher_name, header.cipher_name, "Ciphers differ"
assert_equal random_cipher.send(:key), header.key, "Keys differ"
\ No newline at end of file