xmlenc 0.3.0 → 0.4.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 +4 -4
- data/lib/xmlenc.rb +1 -0
- data/lib/xmlenc/builder/encrypted_data.rb +18 -6
- data/lib/xmlenc/builder/encrypted_key.rb +10 -0
- data/lib/xmlenc/builder/encryption_method.rb +3 -1
- data/lib/xmlenc/builder/key_info.rb +1 -0
- data/lib/xmlenc/builder/retrieval_method.rb +17 -0
- data/lib/xmlenc/version.rb +1 -1
- data/spec/lib/xmlenc/builder/encrypted_data_spec.rb +53 -0
- data/spec/lib/xmlenc/builder/encrypted_key_spec.rb +28 -11
- data/spec/lib/xmlenc/builder/encryption_method_spec.rb +16 -0
- data/spec/lib/xmlenc/builder/key_info_spec.rb +15 -0
- data/spec/lib/xmlenc/builder/retrieval_method_spec.rb +22 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8dc37fb9c2a756e30492c8713cadbbd5757db889
|
4
|
+
data.tar.gz: 2217523b1fca27126ee8eb4cee15d95343c3c27f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5e3395a8f9d927b54334c5ce9fc981e54956708fff72f5b6ce05cfd0ed46b481eef7753bbd0e12ab56e74828ce8b55d3084e11206abe015c211fdee81fcdb4e7
|
7
|
+
data.tar.gz: 84b10748b719e2f0a844d83249cfe4da5cbb59304daeb523e27bfa8a5035c698dcea445a946e26d76d5f442937f5ac4678fc06e729de785bac9791230750f36b
|
data/lib/xmlenc.rb
CHANGED
@@ -27,6 +27,7 @@ module Xmlenc
|
|
27
27
|
autoload :DigestMethod, 'xmlenc/builder/digest_method'
|
28
28
|
autoload :ReferenceList, 'xmlenc/builder/reference_list'
|
29
29
|
autoload :DataReference, 'xmlenc/builder/data_reference'
|
30
|
+
autoload :RetrievalMethod, 'xmlenc/builder/retrieval_method'
|
30
31
|
|
31
32
|
module ComplexTypes
|
32
33
|
autoload :EncryptedType, 'xmlenc/builder/complex_types/encrypted_type'
|
@@ -23,21 +23,33 @@ module Xmlenc
|
|
23
23
|
'http://www.w3.org/2001/04/xmlenc#Element'
|
24
24
|
end
|
25
25
|
|
26
|
-
def initialize(
|
27
|
-
|
28
|
-
|
26
|
+
def initialize(*args)
|
27
|
+
options = args.extract_options!
|
28
|
+
if options.key?(:id)
|
29
|
+
self.id = options.delete(:id)
|
30
|
+
else
|
31
|
+
self.id = SecureRandom.hex(5)
|
32
|
+
end
|
33
|
+
super(*(args << options))
|
29
34
|
end
|
30
35
|
|
31
|
-
def encrypt(data)
|
36
|
+
def encrypt(data, key_options = {})
|
32
37
|
encryptor = algorithm.setup
|
33
38
|
encrypted = encryptor.encrypt(data, :node => encryption_method)
|
34
39
|
cipher_data.cipher_value = Base64.encode64(encrypted)
|
35
|
-
|
36
|
-
encrypted_key = EncryptedKey.new(
|
40
|
+
key_params = { :data => encryptor.key }
|
41
|
+
encrypted_key = EncryptedKey.new(key_params.merge(key_options))
|
37
42
|
encrypted_key.add_data_reference(id)
|
38
43
|
encrypted_key
|
39
44
|
end
|
40
45
|
|
46
|
+
def set_key_retrieval_method(retrieval_method)
|
47
|
+
if retrieval_method
|
48
|
+
self.key_info ||= KeyInfo.new
|
49
|
+
self.key_info.retrieval_method = retrieval_method
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
41
53
|
private
|
42
54
|
|
43
55
|
def algorithm
|
@@ -11,6 +11,9 @@ module Xmlenc
|
|
11
11
|
tag "EncryptedKey"
|
12
12
|
namespace "xenc"
|
13
13
|
|
14
|
+
attribute :id, String, tag: 'Id'
|
15
|
+
attribute :recipient, String, tag: 'Recipient'
|
16
|
+
|
14
17
|
has_one :reference_list, Xmlenc::Builder::ReferenceList, :xpath => "./"
|
15
18
|
|
16
19
|
attr_accessor :data
|
@@ -26,6 +29,13 @@ module Xmlenc
|
|
26
29
|
self.reference_list.add_data_reference(data_id)
|
27
30
|
end
|
28
31
|
|
32
|
+
def initialize(*args)
|
33
|
+
options = args.extract_options!
|
34
|
+
@recipient = options.delete(:recipient)
|
35
|
+
@id = options.delete(:id)
|
36
|
+
super(*(args << options))
|
37
|
+
end
|
38
|
+
|
29
39
|
private
|
30
40
|
|
31
41
|
def algorithm
|
@@ -15,7 +15,9 @@ module Xmlenc
|
|
15
15
|
|
16
16
|
def initialize(attributes = {})
|
17
17
|
digest_method_algorithm = attributes.delete(:digest_method_algorithm)
|
18
|
-
|
18
|
+
if digest_method_algorithm
|
19
|
+
attributes[:digest_method] = Xmlenc::Builder::DigestMethod.new(:algorithm => digest_method_algorithm)
|
20
|
+
end
|
19
21
|
super
|
20
22
|
end
|
21
23
|
end
|
@@ -9,6 +9,7 @@ module Xmlenc
|
|
9
9
|
namespace "ds"
|
10
10
|
|
11
11
|
element :key_name, String, :namespace => "ds", :tag => "KeyName"
|
12
|
+
has_many :retrieval_method, Xmlenc::Builder::RetrievalMethod, :tag => "RetrievalMethod"
|
12
13
|
|
13
14
|
has_one :encrypted_key, Xmlenc::Builder::EncryptedKey, :xpath => "./"
|
14
15
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Xmlenc
|
2
|
+
module Builder
|
3
|
+
class RetrievalMethod
|
4
|
+
include Xmlenc::Builder::Base
|
5
|
+
|
6
|
+
tag "RetrievalMethod"
|
7
|
+
|
8
|
+
attribute :type, String, :tag => "Type"
|
9
|
+
attribute :uri, String, :tag => "URI"
|
10
|
+
|
11
|
+
def type
|
12
|
+
'http://www.w3.org/2001/04/xmlenc#EncryptedKey'
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
data/lib/xmlenc/version.rb
CHANGED
@@ -71,4 +71,57 @@ describe Xmlenc::Builder::EncryptedData do
|
|
71
71
|
end
|
72
72
|
end
|
73
73
|
end
|
74
|
+
|
75
|
+
describe "#initialize" do
|
76
|
+
it 'sets a default #id' do
|
77
|
+
expect(described_class.new().id).to be_a String
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'sets #id to specified id' do
|
81
|
+
expect(described_class.new(id: 'TEST').id).to eq 'TEST'
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
describe "#encrypt" do
|
86
|
+
subject { described_class.new() }
|
87
|
+
|
88
|
+
before { subject.set_encryption_method(algorithm: 'http://www.w3.org/2001/04/xmlenc#aes256-cbc') }
|
89
|
+
|
90
|
+
it 'returns an EncryptedKey' do
|
91
|
+
expect(subject.encrypt('TEST')).to be_a Xmlenc::Builder::EncryptedKey
|
92
|
+
end
|
93
|
+
|
94
|
+
context "extra key_options are passed" do
|
95
|
+
let(:key_options) { { :id => '_SOME_ID', :recipient => 'SOME_RECIPIENT' } }
|
96
|
+
|
97
|
+
before do
|
98
|
+
subject.set_encryption_method(algorithm: 'http://www.w3.org/2001/04/xmlenc#aes256-cbc')
|
99
|
+
allow_message_expectations_on_nil
|
100
|
+
allow(nil).to receive(:add_data_reference)
|
101
|
+
end
|
102
|
+
|
103
|
+
it 'and then used to create the EncryptedKey' do
|
104
|
+
expect(Xmlenc::Builder::EncryptedKey).to receive(:new).with(hash_including(key_options))
|
105
|
+
subject.encrypt('TEST', key_options)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
describe "#set_key_retrieval_method" do
|
111
|
+
it "sets the key info with the key name" do
|
112
|
+
subject.set_key_retrieval_method 'retrieval_method'
|
113
|
+
expect(subject.key_info.retrieval_method).to eq "retrieval_method"
|
114
|
+
end
|
115
|
+
|
116
|
+
it "does not override old key info data" do
|
117
|
+
subject.set_key_retrieval_method("key retrieval_method")
|
118
|
+
expect(subject.key_info.encrypted_key).not_to be_nil
|
119
|
+
end
|
120
|
+
|
121
|
+
it "does not set the key info element if the key retrieval_method is nil" do
|
122
|
+
subject.key_info = nil
|
123
|
+
subject.set_key_retrieval_method(nil)
|
124
|
+
expect(subject.key_info).to be_nil
|
125
|
+
end
|
126
|
+
end
|
74
127
|
end
|
@@ -6,19 +6,21 @@ describe Xmlenc::Builder::EncryptedKey do
|
|
6
6
|
subject { described_class.parse(xml, :single => true) }
|
7
7
|
|
8
8
|
describe "required fields" do
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
[:cipher_data].each do |field|
|
10
|
+
it "should have the #{field} field" do
|
11
|
+
expect(subject).to respond_to :cipher_data
|
12
|
+
end
|
12
13
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
it "should check the presence of #{field}" do
|
15
|
+
subject.cipher_data = nil
|
16
|
+
expect(subject).to_not be_valid
|
17
|
+
expect(subject.errors[:cipher_data].size).to eq(1)
|
18
|
+
end
|
17
19
|
end
|
18
20
|
end
|
19
21
|
|
20
22
|
describe "optional fields" do
|
21
|
-
[:encryption_method, :key_info].each do |field|
|
23
|
+
[:id, :recipient, :encryption_method, :key_info].each do |field|
|
22
24
|
it "should have the #{field} field" do
|
23
25
|
expect(subject).to respond_to field
|
24
26
|
end
|
@@ -72,6 +74,12 @@ describe Xmlenc::Builder::EncryptedKey do
|
|
72
74
|
end
|
73
75
|
end
|
74
76
|
|
77
|
+
describe "#encrypt" do
|
78
|
+
it "has method" do
|
79
|
+
expect(subject).to respond_to :encrypt
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
75
83
|
describe "#add_data_reference" do
|
76
84
|
it "has method" do
|
77
85
|
expect(subject).to respond_to :add_data_reference
|
@@ -87,9 +95,18 @@ describe Xmlenc::Builder::EncryptedKey do
|
|
87
95
|
end
|
88
96
|
end
|
89
97
|
|
90
|
-
describe "#
|
91
|
-
it
|
92
|
-
expect(
|
98
|
+
describe "#initialize" do
|
99
|
+
it 'initializes an EncryptedKey' do
|
100
|
+
expect(described_class.new()).to be_a described_class
|
101
|
+
end
|
102
|
+
|
103
|
+
context 'with extra options' do
|
104
|
+
subject { described_class.new(id: 'AN_ID', recipient: 'A_RECIPIENT') }
|
105
|
+
|
106
|
+
it 'sets @recipient and @id' do
|
107
|
+
expect(subject.id).to eq 'AN_ID'
|
108
|
+
expect(subject.recipient).to eq 'A_RECIPIENT'
|
109
|
+
end
|
93
110
|
end
|
94
111
|
end
|
95
112
|
end
|
@@ -27,4 +27,20 @@ describe Xmlenc::Builder::EncryptionMethod do
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
+
describe "#digest_method" do
|
31
|
+
subject { described_class.new() }
|
32
|
+
|
33
|
+
it 'has an empty digest_method' do
|
34
|
+
expect(subject.digest_method).to eq nil
|
35
|
+
end
|
36
|
+
|
37
|
+
context "digest_method_algorithm given" do
|
38
|
+
subject { described_class.new(digest_method_algorithm: 'ALGO') }
|
39
|
+
|
40
|
+
it 'has no empty digest_method' do
|
41
|
+
expect(subject.digest_method).not_to eq nil
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
30
46
|
end
|
@@ -5,6 +5,21 @@ describe Xmlenc::Builder::KeyInfo do
|
|
5
5
|
let(:xml) { File.read File.join("spec", "fixtures", "encrypted_document.xml") }
|
6
6
|
subject { described_class.parse(xml) }
|
7
7
|
|
8
|
+
describe "optional fields" do
|
9
|
+
subject { described_class.new }
|
10
|
+
|
11
|
+
[:key_name, :retrieval_method, :encrypted_key].each do |field|
|
12
|
+
it "should have the #{field} field" do
|
13
|
+
expect(subject).to respond_to field
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should allow #{field} to be blank" do
|
17
|
+
subject.send("#{field}=", nil)
|
18
|
+
expect(subject).to be_valid
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
8
23
|
describe "#parse" do
|
9
24
|
it "should create two KeyInfo elements" do
|
10
25
|
subject.each do |element|
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Xmlenc::Builder::RetrievalMethod do
|
4
|
+
|
5
|
+
let(:xml) { File.read File.join("spec", "fixtures", "encrypted_document.xml") }
|
6
|
+
subject { described_class.parse(xml) }
|
7
|
+
|
8
|
+
describe "optional fields" do
|
9
|
+
subject { described_class.new }
|
10
|
+
|
11
|
+
[:type, :uri].each do |field|
|
12
|
+
it "should have the #{field} field" do
|
13
|
+
expect(subject).to respond_to field
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should allow #{field} to be blank" do
|
17
|
+
subject.send("#{field}=", nil)
|
18
|
+
expect(subject).to be_valid
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
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.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Benoist
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-10-
|
11
|
+
date: 2015-10-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -136,6 +136,7 @@ files:
|
|
136
136
|
- lib/xmlenc/builder/encryption_method.rb
|
137
137
|
- lib/xmlenc/builder/key_info.rb
|
138
138
|
- lib/xmlenc/builder/reference_list.rb
|
139
|
+
- lib/xmlenc/builder/retrieval_method.rb
|
139
140
|
- lib/xmlenc/encrypted_data.rb
|
140
141
|
- lib/xmlenc/encrypted_document.rb
|
141
142
|
- lib/xmlenc/encrypted_key.rb
|
@@ -169,6 +170,7 @@ files:
|
|
169
170
|
- spec/lib/xmlenc/builder/encryption_method_spec.rb
|
170
171
|
- spec/lib/xmlenc/builder/key_info_spec.rb
|
171
172
|
- spec/lib/xmlenc/builder/reference_list_spec.rb
|
173
|
+
- spec/lib/xmlenc/builder/retrieval_method_spec.rb
|
172
174
|
- spec/lib/xmlenc/encrypted_data_spec.rb
|
173
175
|
- spec/lib/xmlenc/encrypted_document_spec.rb
|
174
176
|
- spec/lib/xmlenc/encrypted_key_spec.rb
|
@@ -230,6 +232,7 @@ test_files:
|
|
230
232
|
- spec/lib/xmlenc/builder/encryption_method_spec.rb
|
231
233
|
- spec/lib/xmlenc/builder/key_info_spec.rb
|
232
234
|
- spec/lib/xmlenc/builder/reference_list_spec.rb
|
235
|
+
- spec/lib/xmlenc/builder/retrieval_method_spec.rb
|
233
236
|
- spec/lib/xmlenc/encrypted_data_spec.rb
|
234
237
|
- spec/lib/xmlenc/encrypted_document_spec.rb
|
235
238
|
- spec/lib/xmlenc/encrypted_key_spec.rb
|