xmlenc 0.7.1 → 0.8.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
- SHA1:
3
- metadata.gz: 6ad3763ea55708060757d9024fcefd94616376ce
4
- data.tar.gz: 8349e784ef7fd73c5a8da5ccfc26f1f5d370b42c
2
+ SHA256:
3
+ metadata.gz: 189069caca22405d127c3d7814b26a34203962b33537d39684d7bcf54bec40cd
4
+ data.tar.gz: b3d3b202f281123001ded9d4a01e210fdfa4d70408a693e73d1d6017f7164df2
5
5
  SHA512:
6
- metadata.gz: 8f234a88d0712b2eab9c3527ff0a7e098c1fa3d6313147624bfdd02e2a25f6f9d74f515cfdadb5d4dc137bb2673e10412d6018b125be1cdc03a4cde8a32d861b
7
- data.tar.gz: 1e0048cfb4b07b267acd259db2ac64ecde2ba8c40f31a4426dbc864f2513af6524c67425c2c6703402309d2dbcbde387cb95b77967fe9017d5c8b7d073ad4477
6
+ metadata.gz: e0e2f5fed7fe6be20f00b009d8346f76dddfdf72ed042adc328bd0b5dfbd81b77651eecc82e4201086b18f0c5c96db73df75855bac4ed7ddc2aeb8345bea90c2
7
+ data.tar.gz: 533f7b9c88eba4686ea805b7aadfa1f2a02a745e0dd1926e9d6e5459f8163bacb6ed5b3ae56f1372bbb041ecc00b21bc74a4807403abeddf42e23f64ef91ed7d
data/.travis.yml CHANGED
@@ -1,11 +1,10 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9.3
4
- - 2.0
5
- - 2.1
6
- - 2.2
7
- - jruby-19mode
8
- matrix:
9
- allow_failures:
10
- - rvm: jruby-19mode
3
+ - 2.0.0
4
+ - 2.1.10
5
+ - 2.2.10
6
+ - 2.5.9
7
+ - 2.6.8
8
+ - 2.7.4
9
+ - 3.0.2
11
10
  sudo: false
data/CHANGELOG.md ADDED
@@ -0,0 +1,5 @@
1
+ # CHANGELOG
2
+
3
+ ## v0.8.0 - 2021-08-23
4
+ * Add support for [AES-GCM encryption methods](https://github.com/digidentity/xmlenc/pull/30) - thanks [@cosine](https://github.com/cosine)
5
+ * Remove travis support for ruby 1.9
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- [![Build Status](https://travis-ci.org/digidentity/xmlenc.svg)](https://travis-ci.org/digidentity/xmlenc)
1
+ [![Build Status](https://app.travis-ci.com/digidentity/xmlenc.svg?branch=master)](https://app.travis-ci.com/digidentity/xmlenc)
2
2
  [![Coverage Status](https://coveralls.io/repos/digidentity/xmlenc/badge.svg?branch=master&service=github)](https://coveralls.io/github/digidentity/xmlenc?branch=master)
3
3
  [![Code Climate](https://codeclimate.com/github/digidentity/xmlenc/badges/gpa.svg)](https://codeclimate.com/github/digidentity/xmlenc)
4
4
 
@@ -39,6 +39,9 @@ Data algorithms
39
39
  * http://www.w3.org/2001/04/xmlenc#tripledes-cbc
40
40
  * http://www.w3.org/2001/04/xmlenc#aes128-cbc
41
41
  * http://www.w3.org/2001/04/xmlenc#aes256-cbc
42
+ * http://www.w3.org/2009/xmlenc11#aes128-gcm
43
+ * http://www.w3.org/2009/xmlenc11#aes192-gcm
44
+ * http://www.w3.org/2009/xmlenc11#aes256-gcm
42
45
 
43
46
  Key algorithms
44
47
 
data/Rakefile CHANGED
@@ -25,8 +25,8 @@ require "rake/testtask"
25
25
 
26
26
  require "rspec/core/rake_task"
27
27
 
28
- # RSpec::Core::RakeTask.new(:core) do |spec|
29
- # spec.rspec_opts = ['--backtrace']
30
- # end
28
+ RSpec::Core::RakeTask.new(:core) do |spec|
29
+ spec.rspec_opts = ['--backtrace']
30
+ end
31
31
 
32
32
  task :default => [:core]
data/lib/xmlenc.rb CHANGED
@@ -38,6 +38,7 @@ module Xmlenc
38
38
  autoload :RsaOaepMgf1p, 'xmlenc/algorithms/rsa_oaep_mgf1p'
39
39
  autoload :DES3CBC, 'xmlenc/algorithms/des3_cbc'
40
40
  autoload :AESCBC, 'xmlenc/algorithms/aes_cbc'
41
+ autoload :AESGCM, 'xmlenc/algorithms/aes_gcm'
41
42
  end
42
43
 
43
44
  autoload :EncryptedDocument, 'xmlenc/encrypted_document'
@@ -0,0 +1,59 @@
1
+ module Xmlenc
2
+ module Algorithms
3
+ class AESGCM
4
+ AUTH_TAG_LEN = 16
5
+
6
+ class << self
7
+ def [](size)
8
+ new(size)
9
+ end
10
+ end
11
+
12
+ def initialize(size)
13
+ @size = size
14
+ end
15
+
16
+ def setup(key = nil)
17
+ @cipher= nil
18
+ @iv = nil
19
+ @key = key || cipher.random_key
20
+ self
21
+ end
22
+
23
+ def decrypt(cipher_value, options = {})
24
+ cipher.decrypt
25
+ cipher.padding = 0
26
+ cipher.key = @key
27
+ cipher.iv = cipher_value[0...iv_len]
28
+ cipher.auth_tag = cipher_value[-AUTH_TAG_LEN..-1]
29
+ cipher.update(cipher_value[iv_len..-(AUTH_TAG_LEN + 1)]) << cipher.final
30
+ end
31
+
32
+ def encrypt(data, options = {})
33
+ cipher.encrypt
34
+ cipher.key = @key
35
+ cipher.iv = iv
36
+ cipher.auth_data = ''
37
+ iv << (cipher.update(data) << cipher.final) << cipher.auth_tag
38
+ end
39
+
40
+ def key
41
+ @key
42
+ end
43
+
44
+ private
45
+
46
+ def iv
47
+ @iv ||= cipher.random_iv
48
+ end
49
+
50
+ def iv_len
51
+ cipher.iv_len
52
+ end
53
+
54
+ def cipher
55
+ @cipher ||= OpenSSL::Cipher.new("aes-#{@size}-gcm")
56
+ end
57
+ end
58
+ end
59
+ end
@@ -31,7 +31,7 @@ module Xmlenc
31
31
 
32
32
  module XmlMapperClassMethods
33
33
  def parse(xml, options = {})
34
- raise Xmlenc::UnparseableMessage("Unable to parse nil document") if xml.nil?
34
+ raise Xmlenc::UnparseableMessage.new("Unable to parse nil document") if xml.nil?
35
35
 
36
36
  object = super
37
37
  if object.is_a?(Array)
@@ -6,7 +6,10 @@ module Xmlenc
6
6
  ALGORITHMS = {
7
7
  'http://www.w3.org/2001/04/xmlenc#tripledes-cbc' => Algorithms::DES3CBC,
8
8
  'http://www.w3.org/2001/04/xmlenc#aes128-cbc' => Algorithms::AESCBC[128],
9
- 'http://www.w3.org/2001/04/xmlenc#aes256-cbc' => Algorithms::AESCBC[256]
9
+ 'http://www.w3.org/2001/04/xmlenc#aes256-cbc' => Algorithms::AESCBC[256],
10
+ 'http://www.w3.org/2009/xmlenc11#aes128-gcm' => Algorithms::AESGCM[128],
11
+ 'http://www.w3.org/2009/xmlenc11#aes192-gcm' => Algorithms::AESGCM[192],
12
+ 'http://www.w3.org/2009/xmlenc11#aes256-gcm' => Algorithms::AESGCM[256]
10
13
  }
11
14
  TYPES = {
12
15
  'http://www.w3.org/2001/04/xmlenc#Element' => :element,
@@ -3,7 +3,10 @@ module Xmlenc
3
3
  ALGORITHMS = {
4
4
  'http://www.w3.org/2001/04/xmlenc#tripledes-cbc' => Algorithms::DES3CBC,
5
5
  'http://www.w3.org/2001/04/xmlenc#aes128-cbc' => Algorithms::AESCBC[128],
6
- 'http://www.w3.org/2001/04/xmlenc#aes256-cbc' => Algorithms::AESCBC[256]
6
+ 'http://www.w3.org/2001/04/xmlenc#aes256-cbc' => Algorithms::AESCBC[256],
7
+ 'http://www.w3.org/2009/xmlenc11#aes128-gcm' => Algorithms::AESGCM[128],
8
+ 'http://www.w3.org/2009/xmlenc11#aes192-gcm' => Algorithms::AESGCM[192],
9
+ 'http://www.w3.org/2009/xmlenc11#aes256-gcm' => Algorithms::AESGCM[256]
7
10
  }
8
11
 
9
12
  TYPES = {
@@ -1,3 +1,3 @@
1
1
  module Xmlenc
2
- VERSION = "0.7.1"
2
+ VERSION = '0.8.0'.freeze
3
3
  end
@@ -0,0 +1,65 @@
1
+ require 'spec_helper'
2
+
3
+ describe Xmlenc::Algorithms::AESGCM do
4
+ let(:data) { "<CreditCard Currency=\"USD\" Limit=\"5,000\">\r\n <Number>4019 2445 0277 5567</Number>\r\n <Issuer>Bank of the Internet</Issuer>\r\n <Expiration Time=\"04/02\"/>\r\n </CreditCard>" }
5
+
6
+ describe 'aes128-gcm' do
7
+ let(:cipher_value) { Base64.decode64 "YjIkLPqklVVN1faEgndPFXgXaOlVVaL+5X8NCDkbgQsbv6D2Jo7d9NQCyMbp1MgU2myCUynzdXMKdVIaqTt14pkr+NtYD6kBFPUkTvbcMIc86L5aqoMIEeqeJCK3aYLNGcY05xxOpuHvMzh2tEoZPFLEd9WgsNGhfv+4GqKiXxMVrjeLp7Iz9dYB4XmfLnQr62m4vYsZpxzg0mkxX6miCDNplv4wVBSwMDCvAFbAoWltKd+upjwaPQDNLIp0GYfQdCr7cu6K0ep4sIc=" }
8
+ let(:key) { %w(1e8c108fc0521dcad99ff2daad45af64).pack('H*') }
9
+ let(:iv) { %w(6232242cfaa495554dd5f684).pack('H*') }
10
+ subject { described_class.new(128).setup(key) }
11
+
12
+ describe 'encrypt' do
13
+ it 'encrypts the data' do
14
+ allow(subject).to receive(:iv).and_return(iv)
15
+ expect(subject.encrypt(data)).to be == cipher_value
16
+ end
17
+ end
18
+
19
+ describe 'decrypt' do
20
+ it 'decrypts the cipher_value' do
21
+ expect(subject.decrypt(cipher_value)).to be == data
22
+ end
23
+ end
24
+ end
25
+
26
+ describe 'aes192-gcm' do
27
+ let(:cipher_value) { Base64.decode64 "YjIkLPqklVVN1faETdI41CyJetO9+vdpho9swtvre7VRd5GpkFxp3lioUUlL2URCVx24YMHOzI6ksj0jQxASXn5uvNdIUrOxtTUzzUlIKk2Jbsi6uecP/YNz7NINxz4RqcjxiH+X8IF9etWAjRt+Z2zI/5YaUsQ/kPcrfesUxaH+6aMH9XWDXNqHdCjlxxMTw/4Sj9GqGmdC73CdokggeS8dfF05TZRF4lH2kTZ/RBgS7EEwwXZVKlq6yHfe5Jv2VxHqKJ8f/OSEyiw=" }
28
+ let(:key) { %w(68432eb84dcb27e6cf46cc8d2cb1659484bbea7d0a8131f4).pack('H*') }
29
+ let(:iv) { %w(6232242cfaa495554dd5f684).pack('H*') }
30
+ subject { described_class.new(192).setup(key) }
31
+
32
+ describe 'encrypt' do
33
+ it 'encrypts the data' do
34
+ allow(subject).to receive(:iv).and_return(iv)
35
+ expect(subject.encrypt(data)).to be == cipher_value
36
+ end
37
+ end
38
+
39
+ describe 'decrypt' do
40
+ it 'decrypts the cipher_value' do
41
+ expect(subject.decrypt(cipher_value)).to be == data
42
+ end
43
+ end
44
+ end
45
+
46
+ describe 'aes256-gcm' do
47
+ let(:cipher_value) { Base64.decode64 "YjIkLPqklVVN1faEcqScF7ALyB/fb+q3+HRW17n2rUqvdO8AmI4h7wXOwj5wgeP7KBCuR6IWQK9bUeZE+EoIR+tQNXmN8CofZ6s81QbZEPMiNdRnurXz0LNaSZUL1D1ivic62TYtfgqVX+z7wesGBviRM+vHcfRQlmN5sSzBtgPF9n5u2D6mpG9fa/+I33pAFDy2FeHI1CFPzLzbvKDqnjfM7zDd0YbsNi+5czoWl7likHNplPXR1jhLxOmKPWloKQVEG8f2KHsL/ZI=" }
48
+ let(:key) { %w(7b655b83e4821c9302d24be876b7783b2301b06b4ff89cabe8e9809d7602f207).pack('H*') }
49
+ let(:iv) { %w(6232242cfaa495554dd5f684).pack('H*') }
50
+ subject { described_class.new(256).setup(key) }
51
+
52
+ describe 'encrypt' do
53
+ it 'encrypts the data' do
54
+ allow(subject).to receive(:iv).and_return(iv)
55
+ expect(subject.encrypt(data)).to be == cipher_value
56
+ end
57
+ end
58
+
59
+ describe 'decrypt' do
60
+ it 'decrypts the cipher_value' do
61
+ expect(subject.decrypt(cipher_value)).to be == data
62
+ end
63
+ end
64
+ end
65
+ end
@@ -21,7 +21,7 @@ describe BaseDummy do
21
21
  it "raises an error if the message is nil" do
22
22
  expect {
23
23
  BaseDummy.parse(nil)
24
- }.to raise_error(Xmlenc::UnparseableMessage)
24
+ }.to raise_error(Xmlenc::UnparseableMessage, 'Unable to parse nil document')
25
25
  end
26
26
  end
27
27
  end
data/xmlenc.gemspec CHANGED
@@ -1,36 +1,28 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
1
+ $:.push File.expand_path('../lib', __FILE__)
4
2
  require 'xmlenc/version'
5
3
 
6
4
  Gem::Specification.new do |spec|
7
- spec.name = "xmlenc"
5
+ spec.name = 'xmlenc'
8
6
  spec.version = Xmlenc::VERSION
9
- spec.authors = ["Benoist"]
10
- spec.email = ["bclaassen@digidentity.eu"]
11
- spec.description = %q{A (partial)implementation of the XMLENC specificiation}
12
- spec.summary = %q{A (partial)implementation of the XMLENC specificiation}
13
- spec.homepage = "https://github.com/digidentity/xmlenc"
14
- spec.license = "MIT"
7
+ spec.authors = ['Benoist']
8
+ spec.email = ['bclaassen@digidentity.eu']
9
+ spec.description = 'A (partial)implementation of the XMLENC specificiation'
10
+ spec.summary = 'A (partial)implementation of the XMLENC specificiation'
11
+ spec.homepage = 'https://github.com/digidentity/xmlenc'
12
+ spec.license = 'MIT'
15
13
 
16
14
  spec.files = `git ls-files`.split($/)
17
15
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
16
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
- spec.require_paths = ["lib"]
17
+ spec.require_paths = ['lib']
20
18
 
21
- if RUBY_VERSION < '1.9'
22
- spec.add_dependency "activesupport", "~> 3.0.0"
23
- spec.add_dependency "activemodel", "~> 3.0.0"
24
- spec.add_dependency "nokogiri", "~> 1.5.10"
25
- else
26
- spec.add_dependency "activesupport", ">= 3.0.0"
27
- spec.add_dependency "activemodel", ">= 3.0.0"
28
- spec.add_dependency "xmlmapper", '>= 0.7.3'
29
- spec.add_runtime_dependency('nokogiri', '>= 1.6.0', '< 2.0.0')
30
- end
19
+ spec.add_runtime_dependency 'activesupport', '>= 3.0.0'
20
+ spec.add_runtime_dependency 'activemodel', '>= 3.0.0'
21
+ spec.add_runtime_dependency 'xmlmapper', '>= 0.7.3'
22
+ spec.add_runtime_dependency 'nokogiri', '>= 1.6.0', '< 2.0.0'
31
23
 
32
- spec.add_development_dependency "bundler", "~> 1.3"
33
- spec.add_development_dependency "rspec-rails", "~> 2.14"
34
- spec.add_development_dependency "rake"
35
- spec.add_development_dependency "coveralls"
24
+ spec.add_development_dependency 'bundler'
25
+ spec.add_development_dependency 'rspec-rails', '>= 2.14'
26
+ spec.add_development_dependency 'rake'
27
+ spec.add_development_dependency 'coveralls'
36
28
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xmlenc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Benoist
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-02-28 00:00:00.000000000 Z
11
+ date: 2021-08-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -76,28 +76,28 @@ dependencies:
76
76
  name: bundler
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
- - - "~>"
79
+ - - ">="
80
80
  - !ruby/object:Gem::Version
81
- version: '1.3'
81
+ version: '0'
82
82
  type: :development
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
- - - "~>"
86
+ - - ">="
87
87
  - !ruby/object:Gem::Version
88
- version: '1.3'
88
+ version: '0'
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: rspec-rails
91
91
  requirement: !ruby/object:Gem::Requirement
92
92
  requirements:
93
- - - "~>"
93
+ - - ">="
94
94
  - !ruby/object:Gem::Version
95
95
  version: '2.14'
96
96
  type: :development
97
97
  prerelease: false
98
98
  version_requirements: !ruby/object:Gem::Requirement
99
99
  requirements:
100
- - - "~>"
100
+ - - ">="
101
101
  - !ruby/object:Gem::Version
102
102
  version: '2.14'
103
103
  - !ruby/object:Gem::Dependency
@@ -138,12 +138,14 @@ files:
138
138
  - ".gitignore"
139
139
  - ".rspec"
140
140
  - ".travis.yml"
141
+ - CHANGELOG.md
141
142
  - Gemfile
142
143
  - LICENSE.txt
143
144
  - README.md
144
145
  - Rakefile
145
146
  - lib/xmlenc.rb
146
147
  - lib/xmlenc/algorithms/aes_cbc.rb
148
+ - lib/xmlenc/algorithms/aes_gcm.rb
147
149
  - lib/xmlenc/algorithms/des3_cbc.rb
148
150
  - lib/xmlenc/algorithms/rsa_15.rb
149
151
  - lib/xmlenc/algorithms/rsa_oaep_mgf1p.rb
@@ -181,6 +183,7 @@ files:
181
183
  - spec/fixtures/template.xml
182
184
  - spec/fixtures/template2.xml
183
185
  - spec/lib/xmlenc/algorithms/aes_cbc_spec.rb
186
+ - spec/lib/xmlenc/algorithms/aes_gcm_spec.rb
184
187
  - spec/lib/xmlenc/algorithms/des3_cbc_spec.rb
185
188
  - spec/lib/xmlenc/algorithms/rsa_15_spec.rb
186
189
  - spec/lib/xmlenc/algorithms/rsa_oaep_mgf1p_spec.rb
@@ -222,8 +225,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
222
225
  - !ruby/object:Gem::Version
223
226
  version: '0'
224
227
  requirements: []
225
- rubyforge_project:
226
- rubygems_version: 2.5.1
228
+ rubygems_version: 3.1.4
227
229
  signing_key:
228
230
  specification_version: 4
229
231
  summary: A (partial)implementation of the XMLENC specificiation
@@ -247,6 +249,7 @@ test_files:
247
249
  - spec/fixtures/template.xml
248
250
  - spec/fixtures/template2.xml
249
251
  - spec/lib/xmlenc/algorithms/aes_cbc_spec.rb
252
+ - spec/lib/xmlenc/algorithms/aes_gcm_spec.rb
250
253
  - spec/lib/xmlenc/algorithms/des3_cbc_spec.rb
251
254
  - spec/lib/xmlenc/algorithms/rsa_15_spec.rb
252
255
  - spec/lib/xmlenc/algorithms/rsa_oaep_mgf1p_spec.rb