nokogiri-xmlsec-instructure 0.9.6 → 0.10.2
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/.github/workflows/push.yml +40 -0
- data/.gitignore +3 -0
- data/.tool-versions +1 -0
- data/Appraisals +9 -0
- data/README.md +8 -0
- data/ext/nokogiri_ext_xmlsec/extconf.rb +7 -0
- data/ext/nokogiri_ext_xmlsec/nokogiri_decrypt_with_key.c +2 -2
- data/ext/nokogiri_ext_xmlsec/nokogiri_encrypt_with_key.c +51 -12
- data/ext/nokogiri_ext_xmlsec/nokogiri_helpers_set_attribute_id.c +7 -10
- data/ext/nokogiri_ext_xmlsec/nokogiri_init.c +1 -1
- data/ext/nokogiri_ext_xmlsec/nokogiri_sign.c +1 -1
- data/ext/nokogiri_ext_xmlsec/nokogiri_verify_with.c +1 -1
- data/ext/nokogiri_ext_xmlsec/xmlsecrb.h +6 -0
- data/gemfiles/nokogiri_12.5.gemfile +7 -0
- data/gemfiles/nokogiri_13.10.gemfile +7 -0
- data/lib/xmlsec/version.rb +1 -1
- data/lib/xmlsec.rb +7 -6
- data/nokogiri-xmlsec-instructure.gemspec +5 -3
- data/spec/lib/nokogiri/xml/document/encryption_and_decryption_spec.rb +21 -0
- metadata +42 -11
- data/.travis.yml +0 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 81d08ea19b4230b07f26533b8dc8d556a889e207a2a6194575231c5cf0aae318
|
|
4
|
+
data.tar.gz: '09595d365865a363d7395dec3289976fb852bf8dad138e497b40d1138f486083'
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0bf88cdf158f4766183b1e82bdcd4d68411caa0542773f5327a1d2cf74f04c3e7444a446d8bb3088cac4be596d2a61ffcdec85ca781a8078d00a7690c0c773a0
|
|
7
|
+
data.tar.gz: '02939e5f9cce8e6cc15f49befa60956ea9b72a0a461d7ee0c886233ca21795083e946a8140a83e1c5c317a7e3006d3bc1ab1bd689e414be0795bb5540691d6a4'
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
name: Ruby
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ master ]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [ master ]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
|
|
14
|
+
strategy:
|
|
15
|
+
fail-fast: false
|
|
16
|
+
matrix:
|
|
17
|
+
ruby-version: [3.0, 2.7]
|
|
18
|
+
gemfile: ['gemfiles/nokogiri_13.10.gemfile', 'gemfiles/nokogiri_12.5.gemfile']
|
|
19
|
+
|
|
20
|
+
steps:
|
|
21
|
+
- name: Install libxmlsec
|
|
22
|
+
run: |
|
|
23
|
+
sudo apt-get update
|
|
24
|
+
sudo apt-get install -y libxmlsec1-dev
|
|
25
|
+
- uses: actions/checkout@v3
|
|
26
|
+
- name: Set up Ruby
|
|
27
|
+
uses: ruby/setup-ruby@v1
|
|
28
|
+
with:
|
|
29
|
+
ruby-version: ${{ matrix.ruby-version }}
|
|
30
|
+
bundler-cache: true
|
|
31
|
+
env:
|
|
32
|
+
BUNDLE_GEMFILE: ${{ matrix.gemfile }}
|
|
33
|
+
- name: Install dependencies
|
|
34
|
+
run: bundle install
|
|
35
|
+
env:
|
|
36
|
+
BUNDLE_GEMFILE: ${{ matrix.gemfile }}
|
|
37
|
+
- name: Run tests
|
|
38
|
+
run: bundle exec rake
|
|
39
|
+
env:
|
|
40
|
+
BUNDLE_GEMFILE: ${{ matrix.gemfile }}
|
data/.gitignore
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
*.gem
|
|
2
2
|
*.rbc
|
|
3
3
|
.bundle
|
|
4
|
+
.byebug_history
|
|
4
5
|
.config
|
|
5
6
|
.yardoc
|
|
6
7
|
Gemfile.lock
|
|
@@ -9,6 +10,7 @@ _yardoc
|
|
|
9
10
|
coverage
|
|
10
11
|
doc/
|
|
11
12
|
lib/bundler/man
|
|
13
|
+
lib/nokogiri_ext_xmlsec.bundle
|
|
12
14
|
pkg
|
|
13
15
|
rdoc
|
|
14
16
|
spec/reports
|
|
@@ -18,3 +20,4 @@ tmp
|
|
|
18
20
|
spec/old
|
|
19
21
|
*.so
|
|
20
22
|
*.sw[opn]
|
|
23
|
+
*.gemfile.lock
|
data/.tool-versions
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ruby 3.0.4
|
data/Appraisals
ADDED
data/README.md
CHANGED
|
@@ -10,6 +10,14 @@ to `Nokogiri::XML::Document`.
|
|
|
10
10
|
|
|
11
11
|
## Installation
|
|
12
12
|
|
|
13
|
+
Install this before attempting to install; or else it may fail (tested on CentOS 7) while trying to find -lltdl from the xmlsec1-openssl lib. I'm guessing it's a dependency. Someone else may know more.
|
|
14
|
+
|
|
15
|
+
# CentOS/RHEL
|
|
16
|
+
yum install libtool-ltdl-devel
|
|
17
|
+
|
|
18
|
+
# Debian/Ubuntu
|
|
19
|
+
apt install -y libxmlsec1-dev
|
|
20
|
+
|
|
13
21
|
Add this line to your application's Gemfile:
|
|
14
22
|
|
|
15
23
|
gem 'nokogiri-xmlsec'
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require 'mkmf'
|
|
2
|
+
require 'nokogiri'
|
|
2
3
|
|
|
3
4
|
def barf message = 'dependencies not met'
|
|
4
5
|
raise message
|
|
@@ -22,6 +23,12 @@ puts "Ensure we escaping: #{$CFLAGS}"
|
|
|
22
23
|
'-DXMLSEC_CRYPTO=\\"openssl\\"'
|
|
23
24
|
end
|
|
24
25
|
|
|
26
|
+
$CFLAGS << Dir[Gem.loaded_specs['nokogiri'].full_gem_path + "/ext/*"].map { |dir| " -I#{dir}"}.join("")
|
|
27
|
+
|
|
25
28
|
puts "Clfags: #{$CFLAGS}"
|
|
26
29
|
$libs = `xmlsec1-config --libs`.strip
|
|
30
|
+
|
|
31
|
+
# We reference symbols out of nokogiri but don't link directly against it
|
|
32
|
+
$LDFLAGS << ' -Wl,-undefined,dynamic_lookup'
|
|
33
|
+
|
|
27
34
|
create_makefile('nokogiri_ext_xmlsec')
|
|
@@ -16,7 +16,7 @@ VALUE decrypt_with_key(VALUE self, VALUE rb_key_name, VALUE rb_key) {
|
|
|
16
16
|
|
|
17
17
|
Check_Type(rb_key, T_STRING);
|
|
18
18
|
Check_Type(rb_key_name, T_STRING);
|
|
19
|
-
|
|
19
|
+
Noko_Node_Get_Struct(self, xmlNode, node);
|
|
20
20
|
key = RSTRING_PTR(rb_key);
|
|
21
21
|
keyLength = RSTRING_LEN(rb_key);
|
|
22
22
|
keyName = StringValueCStr(rb_key_name);
|
|
@@ -58,7 +58,7 @@ done:
|
|
|
58
58
|
// the replaced node is orphaned, but not freed; let Nokogiri
|
|
59
59
|
// own it now
|
|
60
60
|
if(encCtx->replacedNodeList != NULL) {
|
|
61
|
-
|
|
61
|
+
noko_xml_document_pin_node(encCtx->replacedNodeList);
|
|
62
62
|
// no really, please don't free it
|
|
63
63
|
encCtx->replacedNodeList = NULL;
|
|
64
64
|
}
|
|
@@ -12,9 +12,11 @@
|
|
|
12
12
|
VALUE encrypt_with_key(VALUE self, VALUE rb_rsa_key_name, VALUE rb_rsa_key,
|
|
13
13
|
VALUE rb_opts) {
|
|
14
14
|
VALUE rb_exception_result = Qnil;
|
|
15
|
+
VALUE rb_cert = Qnil;
|
|
15
16
|
const char* exception_message = NULL;
|
|
16
17
|
|
|
17
18
|
xmlDocPtr doc = NULL;
|
|
19
|
+
xmlNodePtr node = NULL;
|
|
18
20
|
xmlNodePtr encDataNode = NULL;
|
|
19
21
|
xmlNodePtr encKeyNode = NULL;
|
|
20
22
|
xmlNodePtr keyInfoNode = NULL;
|
|
@@ -22,17 +24,28 @@ VALUE encrypt_with_key(VALUE self, VALUE rb_rsa_key_name, VALUE rb_rsa_key,
|
|
|
22
24
|
xmlSecKeysMngrPtr keyManager = NULL;
|
|
23
25
|
char *keyName = NULL;
|
|
24
26
|
char *key = NULL;
|
|
27
|
+
char *certificate = NULL;
|
|
25
28
|
unsigned int keyLength = 0;
|
|
29
|
+
unsigned int certificateLength = 0;
|
|
26
30
|
|
|
27
31
|
resetXmlSecError();
|
|
28
32
|
|
|
29
33
|
Check_Type(rb_rsa_key, T_STRING);
|
|
30
|
-
Check_Type(rb_rsa_key_name, T_STRING);
|
|
31
34
|
Check_Type(rb_opts, T_HASH);
|
|
32
35
|
|
|
33
36
|
key = RSTRING_PTR(rb_rsa_key);
|
|
34
37
|
keyLength = RSTRING_LEN(rb_rsa_key);
|
|
35
|
-
|
|
38
|
+
if (rb_rsa_key_name != Qnil) {
|
|
39
|
+
Check_Type(rb_rsa_key_name, T_STRING);
|
|
40
|
+
keyName = StringValueCStr(rb_rsa_key_name);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
rb_cert = rb_hash_aref(rb_opts, ID2SYM(rb_intern("cert")));
|
|
44
|
+
if (!NIL_P(rb_cert)) {
|
|
45
|
+
Check_Type(rb_cert, T_STRING);
|
|
46
|
+
certificate = RSTRING_PTR(rb_cert);
|
|
47
|
+
certificateLength = RSTRING_LEN(rb_cert);
|
|
48
|
+
}
|
|
36
49
|
|
|
37
50
|
XmlEncOptions options;
|
|
38
51
|
if (!GetXmlEncOptions(rb_opts, &options, &rb_exception_result,
|
|
@@ -40,7 +53,8 @@ VALUE encrypt_with_key(VALUE self, VALUE rb_rsa_key_name, VALUE rb_rsa_key,
|
|
|
40
53
|
goto done;
|
|
41
54
|
}
|
|
42
55
|
|
|
43
|
-
|
|
56
|
+
Noko_Node_Get_Struct(self, xmlNode, node);
|
|
57
|
+
doc = node->doc;
|
|
44
58
|
|
|
45
59
|
// create encryption template to encrypt XML file and replace
|
|
46
60
|
// its content with encryption result
|
|
@@ -68,10 +82,21 @@ VALUE encrypt_with_key(VALUE self, VALUE rb_rsa_key_name, VALUE rb_rsa_key,
|
|
|
68
82
|
goto done;
|
|
69
83
|
}
|
|
70
84
|
|
|
71
|
-
if(
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
85
|
+
if(certificate) {
|
|
86
|
+
// add <dsig:X509Data/>
|
|
87
|
+
if(xmlSecTmplKeyInfoAddX509Data(keyInfoNode) == NULL) {
|
|
88
|
+
rb_exception_result = rb_eSigningError;
|
|
89
|
+
exception_message = "failed to add X509Data node";
|
|
90
|
+
goto done;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
if(keyName != NULL) {
|
|
95
|
+
if(xmlSecTmplKeyInfoAddKeyName(keyInfoNode, NULL) == NULL) {
|
|
96
|
+
rb_exception_result = rb_eEncryptionError;
|
|
97
|
+
exception_message = "failed to add key name";
|
|
98
|
+
goto done;
|
|
99
|
+
}
|
|
75
100
|
}
|
|
76
101
|
|
|
77
102
|
if ((keyManager = createKeyManagerWithSingleKey(
|
|
@@ -100,11 +125,25 @@ VALUE encrypt_with_key(VALUE self, VALUE rb_rsa_key_name, VALUE rb_rsa_key,
|
|
|
100
125
|
goto done;
|
|
101
126
|
}
|
|
102
127
|
|
|
128
|
+
if(certificate) {
|
|
129
|
+
// load certificate and add to the key
|
|
130
|
+
if(xmlSecCryptoAppKeyCertLoadMemory(encCtx->encKey,
|
|
131
|
+
(xmlSecByte *)certificate,
|
|
132
|
+
certificateLength,
|
|
133
|
+
xmlSecKeyDataFormatPem) < 0) {
|
|
134
|
+
rb_exception_result = rb_eSigningError;
|
|
135
|
+
exception_message = "failed to load certificate";
|
|
136
|
+
goto done;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
103
140
|
// Set key name.
|
|
104
|
-
if(
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
141
|
+
if(keyName) {
|
|
142
|
+
if(xmlSecKeySetName(encCtx->encKey, (xmlSecByte *)keyName) < 0) {
|
|
143
|
+
rb_exception_result = rb_eEncryptionError;
|
|
144
|
+
exception_message = "failed to set key name";
|
|
145
|
+
goto done;
|
|
146
|
+
}
|
|
108
147
|
}
|
|
109
148
|
|
|
110
149
|
// Add <enc:EncryptedKey/> node to the <dsig:KeyInfo/> tag to include
|
|
@@ -127,7 +166,7 @@ VALUE encrypt_with_key(VALUE self, VALUE rb_rsa_key_name, VALUE rb_rsa_key,
|
|
|
127
166
|
}
|
|
128
167
|
|
|
129
168
|
// encrypt the data
|
|
130
|
-
if(xmlSecEncCtxXmlEncrypt(encCtx, encDataNode,
|
|
169
|
+
if(xmlSecEncCtxXmlEncrypt(encCtx, encDataNode, node) < 0) {
|
|
131
170
|
rb_exception_result = rb_eEncryptionError;
|
|
132
171
|
exception_message = "encryption failed";
|
|
133
172
|
goto done;
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
#include "xmlsecrb.h"
|
|
2
2
|
#include "util.h"
|
|
3
3
|
|
|
4
|
-
// declaration from Nokogiri proper
|
|
5
|
-
VALUE Nokogiri_wrap_xml_node(VALUE klass, xmlNodePtr node) ;
|
|
6
|
-
|
|
7
4
|
VALUE set_id_attribute(VALUE self, VALUE rb_attr_name) {
|
|
8
5
|
VALUE rb_exception_result = Qnil;
|
|
9
6
|
const char* exception_message = NULL;
|
|
@@ -14,10 +11,10 @@ VALUE set_id_attribute(VALUE self, VALUE rb_attr_name) {
|
|
|
14
11
|
xmlChar *name = NULL;
|
|
15
12
|
char *idName = NULL;
|
|
16
13
|
char *exception_attribute_arg = NULL;
|
|
17
|
-
|
|
14
|
+
|
|
18
15
|
resetXmlSecError();
|
|
19
16
|
|
|
20
|
-
|
|
17
|
+
Noko_Node_Get_Struct(self, xmlNode, node);
|
|
21
18
|
Check_Type(rb_attr_name, T_STRING);
|
|
22
19
|
idName = StringValueCStr(rb_attr_name);
|
|
23
20
|
|
|
@@ -28,7 +25,7 @@ VALUE set_id_attribute(VALUE self, VALUE rb_attr_name) {
|
|
|
28
25
|
exception_message = "Can't find attribute to add register as id";
|
|
29
26
|
goto done;
|
|
30
27
|
}
|
|
31
|
-
|
|
28
|
+
|
|
32
29
|
// get the attribute (id) value
|
|
33
30
|
name = xmlNodeListGetString(node->doc, attr->children, 1);
|
|
34
31
|
if(name == NULL) {
|
|
@@ -37,7 +34,7 @@ VALUE set_id_attribute(VALUE self, VALUE rb_attr_name) {
|
|
|
37
34
|
exception_attribute_arg = idName;
|
|
38
35
|
goto done;
|
|
39
36
|
}
|
|
40
|
-
|
|
37
|
+
|
|
41
38
|
// check that we don't have that id already registered
|
|
42
39
|
tmp = xmlGetID(node->doc, name);
|
|
43
40
|
if(tmp != NULL) {
|
|
@@ -46,7 +43,7 @@ VALUE set_id_attribute(VALUE self, VALUE rb_attr_name) {
|
|
|
46
43
|
exception_attribute_arg = idName;
|
|
47
44
|
goto done;
|
|
48
45
|
}
|
|
49
|
-
|
|
46
|
+
|
|
50
47
|
// finally register id
|
|
51
48
|
xmlAddID(NULL, node->doc, name, attr);
|
|
52
49
|
|
|
@@ -86,10 +83,10 @@ VALUE get_id(VALUE self, VALUE rb_id)
|
|
|
86
83
|
xmlDocPtr doc;
|
|
87
84
|
|
|
88
85
|
Check_Type(rb_id, T_STRING);
|
|
89
|
-
|
|
86
|
+
Noko_Node_Get_Struct(self, xmlDoc, doc);
|
|
90
87
|
prop = xmlGetID(doc, (const xmlChar *)StringValueCStr(rb_id));
|
|
91
88
|
if (prop) {
|
|
92
|
-
return
|
|
89
|
+
return noko_xml_node_wrap(Qnil, (xmlNodePtr)prop);
|
|
93
90
|
} else {
|
|
94
91
|
return Qnil;
|
|
95
92
|
}
|
|
@@ -17,7 +17,7 @@ void Init_Nokogiri_ext() {
|
|
|
17
17
|
|
|
18
18
|
rb_define_method(rb_cNokogiri_XML_Node, "sign!", sign, 1);
|
|
19
19
|
rb_define_method(rb_cNokogiri_XML_Node, "verify_with", verify_with, 1);
|
|
20
|
-
rb_define_method(
|
|
20
|
+
rb_define_method(rb_cNokogiri_XML_Node, "encrypt_with_key", encrypt_with_key, 3);
|
|
21
21
|
rb_define_method(rb_cNokogiri_XML_Node, "decrypt_with_key", decrypt_with_key, 2);
|
|
22
22
|
rb_define_method(rb_cNokogiri_XML_Document, "get_id", get_id, 1);
|
|
23
23
|
rb_define_method(rb_cNokogiri_XML_Node, "set_id_attribute", set_id_attribute, 1);
|
|
@@ -90,7 +90,7 @@ VALUE sign(VALUE self, VALUE rb_opts) {
|
|
|
90
90
|
goto done;
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
-
|
|
93
|
+
Noko_Node_Get_Struct(self, xmlNode, envelopeNode);
|
|
94
94
|
doc = envelopeNode->doc;
|
|
95
95
|
// create signature template for enveloped signature.
|
|
96
96
|
signNode = xmlSecTmplSignatureCreate(doc, xmlSecTransformExclC14NId,
|
|
@@ -146,7 +146,7 @@ VALUE verify_with(VALUE self, VALUE rb_opts) {
|
|
|
146
146
|
resetXmlSecError();
|
|
147
147
|
|
|
148
148
|
Check_Type(rb_opts, T_HASH);
|
|
149
|
-
|
|
149
|
+
Noko_Node_Get_Struct(self, xmlNode, node);
|
|
150
150
|
|
|
151
151
|
// verify start node
|
|
152
152
|
if(!xmlSecCheckNodeName(node, xmlSecNodeSignature, xmlSecDSigNs)) {
|
|
@@ -20,6 +20,12 @@
|
|
|
20
20
|
#include <xmlsec/crypto.h>
|
|
21
21
|
#include <xmlsec/errors.h>
|
|
22
22
|
|
|
23
|
+
#include <nokogiri.h>
|
|
24
|
+
// Lifted from modern nokogiri.h
|
|
25
|
+
#ifndef Noko_Node_Get_Struct
|
|
26
|
+
#define Noko_Node_Get_Struct(obj,type,sval) ((sval) = (type*)DATA_PTR(obj))
|
|
27
|
+
#endif
|
|
28
|
+
|
|
23
29
|
// TODO(awong): Support non-gcc and non-clang compilers.
|
|
24
30
|
#define EXTENSION_EXPORT __attribute__((visibility("default")))
|
|
25
31
|
|
data/lib/xmlsec/version.rb
CHANGED
data/lib/xmlsec.rb
CHANGED
|
@@ -61,12 +61,8 @@ class Nokogiri::XML::Document
|
|
|
61
61
|
# # encrypt with a public key and optional key name
|
|
62
62
|
# doc.encrypt! key: 'public-key', name: 'name'
|
|
63
63
|
#
|
|
64
|
-
def encrypt! opts
|
|
65
|
-
|
|
66
|
-
encrypt_with_key opts[:name].to_s, opts[:key], opts.select { |key, _| key != :key && key != :name }
|
|
67
|
-
else
|
|
68
|
-
raise "public :key is required for encryption"
|
|
69
|
-
end
|
|
64
|
+
def encrypt!(key:, name: nil, **opts)
|
|
65
|
+
root.encrypt_with(key: key, name: name, **opts)
|
|
70
66
|
self
|
|
71
67
|
end
|
|
72
68
|
|
|
@@ -89,6 +85,11 @@ class Nokogiri::XML::Document
|
|
|
89
85
|
end
|
|
90
86
|
|
|
91
87
|
class Nokogiri::XML::Node
|
|
88
|
+
def encrypt_with(key:, name: nil, **opts)
|
|
89
|
+
raise ArgumentError("public :key is required for encryption") unless key
|
|
90
|
+
encrypt_with_key(name, key, opts)
|
|
91
|
+
end
|
|
92
|
+
|
|
92
93
|
def decrypt_with(opts)
|
|
93
94
|
raise 'inadequate options specified for decryption' unless opts[:key]
|
|
94
95
|
|
|
@@ -28,9 +28,11 @@ Gem::Specification.new do |spec|
|
|
|
28
28
|
spec.require_paths = ["lib"]
|
|
29
29
|
spec.extensions = %w{ext/nokogiri_ext_xmlsec/extconf.rb}
|
|
30
30
|
|
|
31
|
-
spec.add_dependency 'nokogiri'
|
|
32
|
-
|
|
33
|
-
spec.add_development_dependency "
|
|
31
|
+
spec.add_dependency 'nokogiri', '>= 1.11.2'
|
|
32
|
+
|
|
33
|
+
spec.add_development_dependency "appraisal"
|
|
34
|
+
spec.add_development_dependency "bundler", "~> 2.1"
|
|
35
|
+
spec.add_development_dependency "byebug"
|
|
34
36
|
spec.add_development_dependency "rake"
|
|
35
37
|
spec.add_development_dependency "rake-compiler"
|
|
36
38
|
spec.add_development_dependency "rspec"
|
|
@@ -31,4 +31,25 @@ describe "encryption and decryption:" do
|
|
|
31
31
|
end
|
|
32
32
|
end
|
|
33
33
|
|
|
34
|
+
it "encrypts a single element" do
|
|
35
|
+
doc = subject
|
|
36
|
+
original = doc.to_s
|
|
37
|
+
node = doc.at_xpath('env:Envelope/env:Data', 'env' => 'urn:envelope')
|
|
38
|
+
node.encrypt_with(key: fixture('rsa.pub'), block_encryption: 'aes128-cbc', key_transport: 'rsa-1_5')
|
|
39
|
+
expect(doc.root.name).to eq 'Envelope'
|
|
40
|
+
expect(doc.root.element_children.first.name).to eq 'EncryptedData'
|
|
41
|
+
encrypted_data = doc.root.element_children.first
|
|
42
|
+
encrypted_data.decrypt_with(key: fixture('rsa.pem'))
|
|
43
|
+
expect(doc.to_s).to eq original
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "inserts a certificate" do
|
|
47
|
+
doc = subject
|
|
48
|
+
doc.encrypt!(key: fixture('cert/server.key.decrypted'),
|
|
49
|
+
cert: fixture('cert/server.crt'),
|
|
50
|
+
block_encryption: 'aes128-cbc',
|
|
51
|
+
key_transport: 'rsa-1_5')
|
|
52
|
+
expect(doc.to_s).to match(/X509Data/)
|
|
53
|
+
expect(doc.to_s).not_to match(/X509Data></)
|
|
54
|
+
end
|
|
34
55
|
end
|
metadata
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: nokogiri-xmlsec-instructure
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.10.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Albert J. Wong
|
|
8
8
|
- Cody Cutrer
|
|
9
|
-
autorequire:
|
|
9
|
+
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date:
|
|
12
|
+
date: 2022-12-13 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: nokogiri
|
|
@@ -17,9 +17,23 @@ dependencies:
|
|
|
17
17
|
requirements:
|
|
18
18
|
- - ">="
|
|
19
19
|
- !ruby/object:Gem::Version
|
|
20
|
-
version:
|
|
20
|
+
version: 1.11.2
|
|
21
21
|
type: :runtime
|
|
22
22
|
prerelease: false
|
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
24
|
+
requirements:
|
|
25
|
+
- - ">="
|
|
26
|
+
- !ruby/object:Gem::Version
|
|
27
|
+
version: 1.11.2
|
|
28
|
+
- !ruby/object:Gem::Dependency
|
|
29
|
+
name: appraisal
|
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
|
31
|
+
requirements:
|
|
32
|
+
- - ">="
|
|
33
|
+
- !ruby/object:Gem::Version
|
|
34
|
+
version: '0'
|
|
35
|
+
type: :development
|
|
36
|
+
prerelease: false
|
|
23
37
|
version_requirements: !ruby/object:Gem::Requirement
|
|
24
38
|
requirements:
|
|
25
39
|
- - ">="
|
|
@@ -31,14 +45,28 @@ dependencies:
|
|
|
31
45
|
requirements:
|
|
32
46
|
- - "~>"
|
|
33
47
|
- !ruby/object:Gem::Version
|
|
34
|
-
version: '1
|
|
48
|
+
version: '2.1'
|
|
35
49
|
type: :development
|
|
36
50
|
prerelease: false
|
|
37
51
|
version_requirements: !ruby/object:Gem::Requirement
|
|
38
52
|
requirements:
|
|
39
53
|
- - "~>"
|
|
40
54
|
- !ruby/object:Gem::Version
|
|
41
|
-
version: '1
|
|
55
|
+
version: '2.1'
|
|
56
|
+
- !ruby/object:Gem::Dependency
|
|
57
|
+
name: byebug
|
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
|
59
|
+
requirements:
|
|
60
|
+
- - ">="
|
|
61
|
+
- !ruby/object:Gem::Version
|
|
62
|
+
version: '0'
|
|
63
|
+
type: :development
|
|
64
|
+
prerelease: false
|
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
66
|
+
requirements:
|
|
67
|
+
- - ">="
|
|
68
|
+
- !ruby/object:Gem::Version
|
|
69
|
+
version: '0'
|
|
42
70
|
- !ruby/object:Gem::Dependency
|
|
43
71
|
name: rake
|
|
44
72
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -126,9 +154,11 @@ extensions:
|
|
|
126
154
|
- ext/nokogiri_ext_xmlsec/extconf.rb
|
|
127
155
|
extra_rdoc_files: []
|
|
128
156
|
files:
|
|
157
|
+
- ".github/workflows/push.yml"
|
|
129
158
|
- ".gitignore"
|
|
130
159
|
- ".rspec"
|
|
131
|
-
- ".
|
|
160
|
+
- ".tool-versions"
|
|
161
|
+
- Appraisals
|
|
132
162
|
- Gemfile
|
|
133
163
|
- Guardfile
|
|
134
164
|
- LICENSE.txt
|
|
@@ -149,6 +179,8 @@ files:
|
|
|
149
179
|
- ext/nokogiri_ext_xmlsec/util.c
|
|
150
180
|
- ext/nokogiri_ext_xmlsec/util.h
|
|
151
181
|
- ext/nokogiri_ext_xmlsec/xmlsecrb.h
|
|
182
|
+
- gemfiles/nokogiri_12.5.gemfile
|
|
183
|
+
- gemfiles/nokogiri_13.10.gemfile
|
|
152
184
|
- lib/nokogiri-xmlsec.rb
|
|
153
185
|
- lib/xmlsec.rb
|
|
154
186
|
- lib/xmlsec/version.rb
|
|
@@ -172,7 +204,7 @@ homepage: https://github.com/instructure/nokogiri-xmlsec-instructure
|
|
|
172
204
|
licenses:
|
|
173
205
|
- MIT
|
|
174
206
|
metadata: {}
|
|
175
|
-
post_install_message:
|
|
207
|
+
post_install_message:
|
|
176
208
|
rdoc_options: []
|
|
177
209
|
require_paths:
|
|
178
210
|
- lib
|
|
@@ -187,9 +219,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
187
219
|
- !ruby/object:Gem::Version
|
|
188
220
|
version: '0'
|
|
189
221
|
requirements: []
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
signing_key:
|
|
222
|
+
rubygems_version: 3.2.33
|
|
223
|
+
signing_key:
|
|
193
224
|
specification_version: 4
|
|
194
225
|
summary: Wrapper around http://www.aleksey.com/xmlsec to support XML encryption, decryption,
|
|
195
226
|
signing and signature validation in Ruby
|
data/.travis.yml
DELETED