nokogiri-xmlsec-instructure 0.10.3 → 0.11.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.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/ext/nokogiri_ext_xmlsec/extconf.rb +8 -16
  3. data/lib/nokogiri-xmlsec.rb +3 -1
  4. data/lib/nokogiri_ext_xmlsec.bundle +0 -0
  5. data/lib/xmlsec/version.rb +3 -1
  6. data/lib/xmlsec.rb +99 -88
  7. metadata +11 -181
  8. data/.github/workflows/push.yml +0 -40
  9. data/.gitignore +0 -23
  10. data/.rspec +0 -2
  11. data/.tool-versions +0 -1
  12. data/Appraisals +0 -9
  13. data/Gemfile +0 -4
  14. data/Guardfile +0 -13
  15. data/LICENSE.txt +0 -22
  16. data/README.md +0 -132
  17. data/Rakefile +0 -30
  18. data/ext/nokogiri_ext_xmlsec/common.h +0 -13
  19. data/ext/nokogiri_ext_xmlsec/init.c +0 -71
  20. data/ext/nokogiri_ext_xmlsec/nokogiri_decrypt_with_key.c +0 -84
  21. data/ext/nokogiri_ext_xmlsec/nokogiri_encrypt_with_key.c +0 -210
  22. data/ext/nokogiri_ext_xmlsec/nokogiri_helpers_set_attribute_id.c +0 -93
  23. data/ext/nokogiri_ext_xmlsec/nokogiri_init.c +0 -30
  24. data/ext/nokogiri_ext_xmlsec/nokogiri_sign.c +0 -254
  25. data/ext/nokogiri_ext_xmlsec/nokogiri_verify_with.c +0 -261
  26. data/ext/nokogiri_ext_xmlsec/options.c +0 -166
  27. data/ext/nokogiri_ext_xmlsec/options.h +0 -36
  28. data/ext/nokogiri_ext_xmlsec/shutdown.c +0 -12
  29. data/ext/nokogiri_ext_xmlsec/util.c +0 -140
  30. data/ext/nokogiri_ext_xmlsec/util.h +0 -42
  31. data/ext/nokogiri_ext_xmlsec/xmlsecrb.h +0 -49
  32. data/gemfiles/nokogiri_12.5.gemfile +0 -7
  33. data/gemfiles/nokogiri_13.10.gemfile +0 -7
  34. data/nokogiri-xmlsec-instructure.gemspec +0 -41
  35. data/spec/fixtures/cert/server.crt +0 -14
  36. data/spec/fixtures/cert/server.csr +0 -11
  37. data/spec/fixtures/cert/server.key.decrypted +0 -15
  38. data/spec/fixtures/cert/server.key.encrypted +0 -18
  39. data/spec/fixtures/hate.xml +0 -7
  40. data/spec/fixtures/pwned.xml +0 -1
  41. data/spec/fixtures/rsa.pem +0 -15
  42. data/spec/fixtures/rsa.pub +0 -6
  43. data/spec/fixtures/sign2-doc.xml +0 -6
  44. data/spec/fixtures/sign2-result.xml +0 -25
  45. data/spec/fixtures/sign3-result.xml +0 -39
  46. data/spec/lib/nokogiri/xml/document/encryption_and_decryption_spec.rb +0 -55
  47. data/spec/lib/nokogiri/xml/document/signing_and_verifying_spec.rb +0 -122
  48. data/spec/lib/nokogiri/xml/document/unsafe_xml_spec.rb +0 -61
  49. data/spec/spec_helper.rb +0 -10
@@ -1,36 +0,0 @@
1
- #ifndef NOKOGIRI_EXT_XMLSEC_OPTIONS_H
2
- #define NOKOGIRI_EXT_XMLSEC_OPTIONS_H
3
-
4
- #include "common.h"
5
-
6
- #include <ruby.h>
7
- #include <xmlsec/crypto.h>
8
-
9
- typedef struct {
10
- // From :block_encryption
11
- xmlSecTransformId block_encryption;
12
- const char* key_type;
13
- int key_bits;
14
-
15
- // From :key_transport
16
- xmlSecTransformId key_transport;
17
- } XmlEncOptions;
18
-
19
- // Supported algorithms taken from #5.1 of
20
- // http://www.w3.org/TR/xmlenc-core
21
- //
22
- // For options, only use the URL fragment (stuff post #)
23
- // since that's unique enough and it removes a lot of typing.
24
- BOOL GetXmlEncOptions(VALUE rb_opts, XmlEncOptions* options,
25
- VALUE* rb_exception_result,
26
- const char** exception_message);
27
-
28
- // XML DSIG helpers.
29
- xmlSecTransformId GetSignatureMethod(VALUE rb_method,
30
- VALUE* rb_exception_result,
31
- const char** exception_message);
32
- xmlSecTransformId GetDigestMethod(VALUE rb_digest_method,
33
- VALUE* rb_exception_result,
34
- const char** exception_message);
35
-
36
- #endif // NOKOGIRI_EXT_XMLSEC_OPTIONS_H
@@ -1,12 +0,0 @@
1
- #include "xmlsecrb.h"
2
-
3
- /* not actually called anywhere right now, but here for posterity */
4
- void Shutdown_xmlsecrb() {
5
- xmlSecCryptoShutdown();
6
- xmlSecCryptoAppShutdown();
7
- xmlSecShutdown();
8
- xsltCleanupGlobals();
9
- #ifndef XMLSEC_NO_XSLT
10
- xsltCleanupGlobals();
11
- #endif /* XMLSEC_NO_XSLT */
12
- }
@@ -1,140 +0,0 @@
1
- #include "util.h"
2
-
3
- #include <xmlsec/errors.h>
4
-
5
- xmlSecKeysMngrPtr createKeyManagerWithSingleKey(
6
- char* keyStr,
7
- unsigned int keyLength,
8
- char *keyName,
9
- VALUE* rb_exception_result_out,
10
- const char** exception_message_out) {
11
- VALUE rb_exception_result = Qnil;
12
- const char* exception_message = NULL;
13
- xmlSecKeysMngrPtr mngr = NULL;
14
- xmlSecKeyPtr key = NULL;
15
-
16
- /* create and initialize keys manager, we use a simple list based
17
- * keys manager, implement your own xmlSecKeysStore klass if you need
18
- * something more sophisticated
19
- */
20
- mngr = xmlSecKeysMngrCreate();
21
- if(mngr == NULL) {
22
- rb_exception_result = rb_eDecryptionError;
23
- exception_message = "failed to create keys manager.";
24
- goto done;
25
- }
26
- if(xmlSecCryptoAppDefaultKeysMngrInit(mngr) < 0) {
27
- rb_exception_result = rb_eDecryptionError;
28
- exception_message = "failed to initialize keys manager.";
29
- goto done;
30
- }
31
-
32
- /* load private RSA key */
33
- key = xmlSecCryptoAppKeyLoadMemory((xmlSecByte *)keyStr,
34
- keyLength,
35
- xmlSecKeyDataFormatPem,
36
- NULL, // the key file password
37
- NULL, // the key password callback
38
- NULL);// the user context for password callback
39
- if(key == NULL) {
40
- rb_exception_result = rb_eDecryptionError;
41
- exception_message = "failed to load rsa key";
42
- goto done;
43
- }
44
-
45
- if(xmlSecKeySetName(key, BAD_CAST keyName) < 0) {
46
- rb_exception_result = rb_eDecryptionError;
47
- exception_message = "failed to set key name";
48
- goto done;
49
- }
50
-
51
- /* add key to keys manager, from now on keys manager is responsible
52
- * for destroying key
53
- */
54
- if(xmlSecCryptoAppDefaultKeysMngrAdoptKey(mngr, key) < 0) {
55
- rb_exception_result = rb_eDecryptionError;
56
- exception_message = "failed to add key to keys manager";
57
- goto done;
58
- }
59
-
60
- done:
61
- if(rb_exception_result != Qnil) {
62
- if (key) {
63
- xmlSecKeyDestroy(key);
64
- }
65
-
66
- if (mngr) {
67
- xmlSecKeysMngrDestroy(mngr);
68
- mngr = NULL;
69
- }
70
- }
71
-
72
- *rb_exception_result_out = rb_exception_result;
73
- *exception_message_out = exception_message;
74
- return mngr;
75
- }
76
-
77
- xmlSecDSigCtxPtr createDSigContext(xmlSecKeysMngrPtr keyManager) {
78
- xmlSecDSigCtxPtr dsigCtx = xmlSecDSigCtxCreate(keyManager);
79
- if (!dsigCtx) {
80
- return NULL;
81
- }
82
-
83
- // Restrict ReferenceUris to same document or empty to avoid XXE attacks.
84
- dsigCtx->enabledReferenceUris = xmlSecTransformUriTypeEmpty |
85
- xmlSecTransformUriTypeSameDocument;
86
-
87
- return dsigCtx;
88
- }
89
-
90
- #define ERROR_STACK_SIZE 4096
91
- static char g_errorStack[ERROR_STACK_SIZE];
92
- static size_t g_errorStackPos;
93
-
94
- char* getXmlSecLastError() {
95
- return g_errorStack;
96
- }
97
-
98
- int hasXmlSecLastError() {
99
- return g_errorStack[0] != '\0';
100
- }
101
-
102
- void resetXmlSecError() {
103
- g_errorStack[0] = '\0';
104
- g_errorStackPos = 0;
105
- xmlSecErrorsSetCallback(storeErrorCallback);
106
- }
107
-
108
- void storeErrorCallback(const char *file,
109
- int line,
110
- const char *func,
111
- const char *errorObject,
112
- const char *errorSubject,
113
- int reason,
114
- const char *msg) {
115
- int i = 0;
116
- const char* error_msg = NULL;
117
- int amt = 0;
118
- if (g_errorStackPos >= ERROR_STACK_SIZE) {
119
- // Just bail. Earlier errors are more interesting usually anyway.
120
- return;
121
- }
122
-
123
- for(i = 0; (i < XMLSEC_ERRORS_MAX_NUMBER) && (xmlSecErrorsGetMsg(i) != NULL); ++i) {
124
- if(xmlSecErrorsGetCode(i) == reason) {
125
- error_msg = xmlSecErrorsGetMsg(i);
126
- break;
127
- }
128
- }
129
-
130
- amt = snprintf(
131
- &g_errorStack[g_errorStackPos],
132
- ERROR_STACK_SIZE - g_errorStackPos,
133
- "func=%s:file=%s:line=%d:obj=%s:subj=%s:error=%d:%s:%s\n",
134
- func, file, line, errorObject, errorSubject, reason,
135
- error_msg ? error_msg : "", msg);
136
-
137
- if (amt > 0) {
138
- g_errorStackPos += amt;
139
- }
140
- }
@@ -1,42 +0,0 @@
1
- #ifndef NOKOGIRI_EXT_XMLSEC_UTIL_H
2
- #define NOKOGIRI_EXT_XMLSEC_UTIL_H
3
-
4
- #include "xmlsecrb.h"
5
-
6
- // Constructs a xmlSecKeysMngr and adds the given named key to the manager.
7
- //
8
- // Caller takes ownership. Free with xmlSecKeysMngrDestroy().
9
- xmlSecKeysMngrPtr createKeyManagerWithSingleKey(
10
- char* keyStr,
11
- unsigned int keyLength,
12
- char *keyName,
13
- VALUE* rb_exception_result_out,
14
- const char** exception_message_out);
15
-
16
- // Creates a xmlSecDSigCtx with defaults locked down to prevent XXE.
17
- //
18
- // Caller takes ownership of the context. Free with xmlSecDSigCtxDestroy().
19
- xmlSecDSigCtxPtr createDSigContext(xmlSecKeysMngrPtr keyManager);
20
-
21
- // Retrieves the recorded error strings from libxmlsec1. Ensure resetXmlSecError()
22
- // is called at the start of the range of error collection.
23
- char* getXmlSecLastError();
24
-
25
- // Reset the recording of errors. After this getXmlSecLastError() will return
26
- // an empty string. Call at the start of a logical interaction with libxmlsec.
27
- void resetXmlSecError();
28
-
29
- // Return false if there are no errors. If false, getXmlSecLastError() will
30
- // return an empty string.
31
- int hasXmlSecLastError();
32
-
33
- // Error reporting hooks to redirect Xmlsec1 library errors away from stdout.
34
- void storeErrorCallback(const char *file,
35
- int line,
36
- const char *func,
37
- const char *errorObject,
38
- const char *errorSubject,
39
- int reason,
40
- const char *msg);
41
-
42
- #endif // NOKOGIRI_EXT_XMLSEC_UTIL_H
@@ -1,49 +0,0 @@
1
- #ifndef NOKOGIRI_EXT_XMLSEC_XMLSECRB_H
2
- #define NOKOGIRI_EXT_XMLSEC_XMLSECRB_H
3
-
4
- #include "common.h"
5
-
6
- #include <ruby.h>
7
-
8
- #include <libxml/tree.h>
9
- #include <libxml/xmlmemory.h>
10
- #include <libxml/parser.h>
11
- #include <libxml/xmlstring.h>
12
-
13
- #include <libxslt/xslt.h>
14
-
15
- #include <xmlsec/xmlsec.h>
16
- #include <xmlsec/xmltree.h>
17
- #include <xmlsec/xmldsig.h>
18
- #include <xmlsec/xmlenc.h>
19
- #include <xmlsec/templates.h>
20
- #include <xmlsec/crypto.h>
21
- #include <xmlsec/errors.h>
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
-
29
- // TODO(awong): Support non-gcc and non-clang compilers.
30
- #define EXTENSION_EXPORT __attribute__((visibility("default")))
31
-
32
- VALUE sign(VALUE self, VALUE rb_opts);
33
- VALUE verify_with(VALUE self, VALUE rb_opts);
34
- VALUE encrypt_with_key(VALUE self, VALUE rb_rsa_key_name, VALUE rb_rsa_key,
35
- VALUE rb_opts);
36
- VALUE decrypt_with_key(VALUE self, VALUE rb_key_name, VALUE rb_key);
37
- VALUE set_id_attribute(VALUE self, VALUE rb_attr_name);
38
- VALUE get_id(VALUE self, VALUE rb_id);
39
-
40
- void Init_Nokogiri_ext(void);
41
-
42
- extern VALUE rb_cNokogiri_XML_Document;
43
- extern VALUE rb_eSigningError;
44
- extern VALUE rb_eVerificationError;
45
- extern VALUE rb_eKeystoreError;
46
- extern VALUE rb_eEncryptionError;
47
- extern VALUE rb_eDecryptionError;
48
-
49
- #endif // NOKOGIRI_EXT_XMLSEC_XMLSECRB_H
@@ -1,7 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "nokogiri", "1.12.5"
6
-
7
- gemspec path: "../"
@@ -1,7 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "nokogiri", "1.13.10"
6
-
7
- gemspec path: "../"
@@ -1,41 +0,0 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'xmlsec/version'
5
-
6
- Gem::Specification.new do |spec|
7
- spec.name = "nokogiri-xmlsec-instructure"
8
- spec.version = Xmlsec::VERSION
9
- spec.authors = ["Albert J. Wong", "Cody Cutrer"]
10
- spec.email = ["awong.dev@gmail.com", "cody@instructure.com"]
11
- spec.description = %q{Adds support to Ruby for encrypting, decrypting,
12
- signing and validating the signatures of XML documents, according to the
13
- [XML Encryption Syntax and Processing](http://www.w3.org/TR/xmlenc-core/)
14
- standard, and the [XML Signature Syntax and Processing](http://www.w3.org/TR/xmldsig-core/)
15
- standard by wrapping around the [xmlsec](http://www.aleksey.com/xmlsec) C
16
- library and adding relevant methods to `Nokogiri::XML::Document`.
17
- Implementation is based off nokogiri-xmlsec by Colin MacKenzie IV with
18
- very heavy modifications.}
19
- spec.summary = %q{Wrapper around http://www.aleksey.com/xmlsec to
20
- support XML encryption, decryption, signing and signature validation in
21
- Ruby}
22
- spec.homepage = "https://github.com/instructure/nokogiri-xmlsec-instructure"
23
- spec.license = "MIT"
24
-
25
- spec.files = `git ls-files`.split($/)
26
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
27
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
28
- spec.require_paths = ["lib"]
29
- spec.extensions = %w{ext/nokogiri_ext_xmlsec/extconf.rb}
30
-
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"
36
- spec.add_development_dependency "rake"
37
- spec.add_development_dependency "rake-compiler"
38
- spec.add_development_dependency "rspec"
39
- spec.add_development_dependency "guard-rspec"
40
- spec.add_development_dependency "guard-rake"
41
- end
@@ -1,14 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIICLzCCAZgCCQCVuhhQ38rw0TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQGEwJV
3
- UzEQMA4GA1UECAwHR2VvcmdpYTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQ
4
- dHkgTHRkMRcwFQYDVQQDDA53d3cuZ29vZ2xlLmNvbTAgFw0xMzA1MjUxODQwMDRa
5
- GA8zMDEyMDkyNTE4NDAwNFowWzELMAkGA1UEBhMCVVMxEDAOBgNVBAgMB0dlb3Jn
6
- aWExITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEXMBUGA1UEAwwO
7
- d3d3Lmdvb2dsZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALE4oSql
8
- eymfHtzOeY86WyvfsjZmaz2XnIo9dzZsK71yMEKkgvXQnnYy9pK0NaYcG0B0hcii
9
- 3fqGBiHMkZY2BOGWwCC/wOmJCzLq9q6caPWUs71Zko+h59LaqV93vzDmZaXYfFoQ
10
- gSVEWpEpCSo560x0mSuLnJYdQQzZ/L6xvxZ1AgMBAAEwDQYJKoZIhvcNAQEFBQAD
11
- gYEATyK/RlfpohUVimgFkycTF2hyusjctseXoZDCctgg/STMsL8iA0P9YB6k91GC
12
- kWpwevuiwarD1MfSUV6goPINFkIBvfK+5R9lpHaTqqs615z8T9R5VJgaLcFe3tWd
13
- 7oq3V2q5Nl6MrZfXj2N07qe6/9zfdauxYO26vAEKCvIkbMo=
14
- -----END CERTIFICATE-----
@@ -1,11 +0,0 @@
1
- -----BEGIN CERTIFICATE REQUEST-----
2
- MIIBmzCCAQQCAQAwWzELMAkGA1UEBhMCVVMxEDAOBgNVBAgMB0dlb3JnaWExITAf
3
- BgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEXMBUGA1UEAwwOd3d3Lmdv
4
- b2dsZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALE4oSqleymfHtzO
5
- eY86WyvfsjZmaz2XnIo9dzZsK71yMEKkgvXQnnYy9pK0NaYcG0B0hcii3fqGBiHM
6
- kZY2BOGWwCC/wOmJCzLq9q6caPWUs71Zko+h59LaqV93vzDmZaXYfFoQgSVEWpEp
7
- CSo560x0mSuLnJYdQQzZ/L6xvxZ1AgMBAAGgADANBgkqhkiG9w0BAQUFAAOBgQB6
8
- 8K0q16EAkGoYLFHvVHxpqk+annbB8ZqpbV43T12Ngx7KiMsdTjrgho0lP/OllHcr
9
- 3vQ0yHnI1K1EeV9Q+/lXqaRl9ws3PL1QMOFm4XD1uIEPG+umRYgrjuZhFab+2Zfs
10
- rgyILF2yRSy0oVeTBxVK5igV6qYcXFFBRIj7nnV8Jg==
11
- -----END CERTIFICATE REQUEST-----
@@ -1,15 +0,0 @@
1
- -----BEGIN RSA PRIVATE KEY-----
2
- MIICWwIBAAKBgQCxOKEqpXspnx7cznmPOlsr37I2Zms9l5yKPXc2bCu9cjBCpIL1
3
- 0J52MvaStDWmHBtAdIXIot36hgYhzJGWNgThlsAgv8DpiQsy6vaunGj1lLO9WZKP
4
- oefS2qlfd78w5mWl2HxaEIElRFqRKQkqOetMdJkri5yWHUEM2fy+sb8WdQIDAQAB
5
- AoGAB1d8PcMLPicsZSNcn9VgD4o93MkTakLMpmFzfdqvWTLQ0wHztvFEj0r/Mgar
6
- Lk19x4bMQAqXPZitylqqMVndi9U8squvAvkZcgYL57MNQRgmLtjSMfk4wCY9ieDa
7
- newt4cP7nGN/ZkU5R0lRMGExKSrMZW8HAkK4WJpbfnOpwGECQQDkoggBRH4aFlaj
8
- Xhw+mSIxOpmzFBhXZ0z+bvoCipPKIhbnwKt0dupn0xAwatNmakBt0p46SFOgW8QQ
9
- TV51G/bdAkEAxm8yEod77IM6bhLL+3h/nsGOGsA0xs22U6FBrz34Nvd4gwmICMcF
10
- t4P3iHYzJfUt+Z2zv5ucX2tuD4uoWsqIeQJAercdZNDGfmoPBpC0yESZPaMebCgV
11
- CJTBlq8qMcL/oDa75Jhdbp2FI0T+I36zCP1up4OsucuoVyHqEnX0hRcFYQJAD3Nz
12
- E6xHAviI4S9HgNI2JbduiDi1I1G7Q7HHuox5ulX0pUdlt0E/+bUl3hNOEkOQC+Ky
13
- r1W/jFKCJGW8ey1QCQJAYDh1BmlLswafEnkNmwydNz4gVflHJvsF8A1c2wJVytkT
14
- 3HVWvwOAfcumDNDNkSUJ+0DQs17qgOMCDwFgFzUb+Q==
15
- -----END RSA PRIVATE KEY-----
@@ -1,18 +0,0 @@
1
- -----BEGIN RSA PRIVATE KEY-----
2
- Proc-Type: 4,ENCRYPTED
3
- DEK-Info: DES-EDE3-CBC,6F8CC52C2E211FF4
4
-
5
- T5g21oYrsS435g2GRNBFs+IwpKYAsF0RDt9SNuCXp6hD2MbcF3q8Su/wvj9inAZi
6
- S7V8Qp8mmBsjo+vh0oTggVFmk7/fyTAa6ltQL+1UH7b8vecgGFKSBV8TG3+k9S4C
7
- ZgXyR9pTgzQx+8M5LrnOnM8fpf638xouHvMo7zTFPhimehIMrMcXAyRZaRfcDhlg
8
- YR+JRvSa0Q9vxhsC19fjfnlU7FdV8B9Ypo/+23TNmKpfU99oV6oPNoiWzkziKtvZ
9
- mwYjrYw6r91ANFCRIux5+CjfOqVxissxzmZ5vyV89LoXjLAEDVmv2vJ+8w2b8zAN
10
- FAXtcx74MutSQQBrG4xffwwRJwf0uPhzMohRoiholOoaMFSOFBasA+phn7hr7m9a
11
- JWj4icCRVZlm+rztbbiapBUtm4ER1tdBGr84TgqasM5CK/qhXt9CCnUBRaimIwad
12
- 9dib2jnkzuqlyrdzLyaFU0IRSq+GQAK7sgya/V2q96lWdzejMGx/07hL6lvPY/h7
13
- o8puMwpCK4XKYantqXL26oCxSgcrlA2nlR+SfmRKhwDwy8rPsTBm55BxwGr8Jj+9
14
- 6bY6VOR+vZkjSVDKNBOq8gUJvPksQV0CK0eSgPTli0ncCInzFPeLGISIa90rFD7I
15
- 97w/ZzTywVnTWO9DhedliwqDSOOYTdVoRfygQfpaFoa1aqR9tKWoc30kbqXvgvUR
16
- mlDwiY1zxpKsTHKu7omf0bp5m8dlW4EarWgTsTRQ8EOHoIucgjdaSxPEDDi8WGOW
17
- Nbqb2ZZz7wsIL71XgC13A+va1C0F709PK/Xnd5IwRf8=
18
- -----END RSA PRIVATE KEY-----
@@ -1,7 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <!DOCTYPE FrackinDocType [
3
- <!ELEMENT i-hate-xml (#PCDATA)>
4
- <!ATTLIST i-hate-xml ur_id_for_intra_doc_ref_test ID #IMPLIED>
5
- ]>
6
- <i-hate-xml ur_id_for_intra_doc_ref_test="some_frackin_id">
7
- </i-hate-xml>
@@ -1 +0,0 @@
1
- <pwned id="iminurdocreadinurfilez" />
@@ -1,15 +0,0 @@
1
- -----BEGIN RSA PRIVATE KEY-----
2
- MIICXgIBAAKBgQC15La+LSmHNUs/yqzSuzKdBUED1OfaOZpBp8zxAAQy7VlTrqRh
3
- /eiJH3VSeRRZEygORvtLgi/teF2P+z/mfJ6IHIdCdkn8MF4CCCQKkjm7JKRrKfK5
4
- fOUp1NZF22oP8x0L4j67NYCtR9F6KIkV5A6FPAZGI8nsHnyJzRwqmG2xbQIDAQAB
5
- AoGBAJDT2UW3g/dqUc4rPExWTUiFJG0+mpVBhDd+ukmyL6W1Iojk53I2z25PJAVU
6
- 7wS1ohEsJ27J7Aty6Vx5Ozn0Q+zYVaKRSxcazNeGbwS0UaGrN0lMvWDs7RmVGCdx
7
- bI2LUTQ88Bl94dW4QObAub+wMOL6xmVEVrJssZnm+CIqS2UBAkEA49QDNB//oHmi
8
- iqD4SFotE8Lz80qBGHN15YIm80TKUR2k1LusZl6R5+2nYTF2vPsG+HGXPbkGhqTn
9
- JL9GMBv7TQJBAMxinne8+bKTvOl/hhdAohFs7aHUBZhZOEuXIf1jYENASk2weYC6
10
- 95SlHvWcwPHfqVbpwt83sGL8aDm8CCPYPqECQQDEFRQQx72GC0oG0FYAR4RmbrLx
11
- YN1NAwqkVmlZlIogWEgmQ8Q0cw5Ws+cMMrtEGTU9nN4TZGymc8TwjqNFAsA9AkEA
12
- ol8Cp/uQn6cxIIt4Gsb1OkTAcJ0BKOxQhfT2QtiNJEBSB3BYxsVCZWvcsaGrwzw9
13
- yteBQlZ6odkGcD+Kc/eaoQJAH+0a7jlHDu2VCHI63OiNZQJ8J9oxaPvWZyKYSaCO
14
- iGvon/Z6KGQhXMedPDaCH7UjeMle5AVhjSrSvF6OglgZ9g==
15
- -----END RSA PRIVATE KEY-----
@@ -1,6 +0,0 @@
1
- -----BEGIN PUBLIC KEY-----
2
- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC15La+LSmHNUs/yqzSuzKdBUED
3
- 1OfaOZpBp8zxAAQy7VlTrqRh/eiJH3VSeRRZEygORvtLgi/teF2P+z/mfJ6IHIdC
4
- dkn8MF4CCCQKkjm7JKRrKfK5fOUp1NZF22oP8x0L4j67NYCtR9F6KIkV5A6FPAZG
5
- I8nsHnyJzRwqmG2xbQIDAQAB
6
- -----END PUBLIC KEY-----
@@ -1,6 +0,0 @@
1
- <?xml version="1.0"?>
2
- <Envelope xmlns="urn:envelope">
3
- <Data>
4
- Hello, World!
5
- </Data>
6
- </Envelope>
@@ -1,25 +0,0 @@
1
- <?xml version="1.0"?>
2
- <Envelope xmlns="urn:envelope">
3
- <Data>
4
- Hello, World!
5
- </Data>
6
- <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
7
- <SignedInfo>
8
- <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
9
- <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
10
- <Reference>
11
- <Transforms>
12
- <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
13
- <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
14
- </Transforms>
15
- <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
16
- <DigestValue>Gx8CGUsbi2qvBLd15VCmwELbDMND8F4vY3jPOc7/FJ0=</DigestValue>
17
- </Reference>
18
- </SignedInfo>
19
- <SignatureValue>T2c7nqOw55P8hcP1qhvfPCwOSEAuo8HstZf9shlrggcarxfgWTKhA6UdrF4McfrS
20
- XtcgHA7zy0Yzd2cgeGkKA2jgI+9QRhoQsifOMuI55sE5r+fpBs+goaxC57gmcBXj
21
- XnuwIiWf7nfpF4hYZ841HzYd2HcpQKPTdbhvZUprvx8=</SignatureValue>
22
- <KeyInfo>
23
- <KeyName>test</KeyName>
24
- </KeyInfo>
25
- </Signature></Envelope>
@@ -1,39 +0,0 @@
1
- <?xml version="1.0"?>
2
- <Envelope xmlns="urn:envelope">
3
- <Data>
4
- Hello, World!
5
- </Data>
6
- <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
7
- <SignedInfo>
8
- <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
9
- <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
10
- <Reference>
11
- <Transforms>
12
- <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
13
- <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
14
- </Transforms>
15
- <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
16
- <DigestValue>Gx8CGUsbi2qvBLd15VCmwELbDMND8F4vY3jPOc7/FJ0=</DigestValue>
17
- </Reference>
18
- </SignedInfo>
19
- <SignatureValue>TGJ9fCzjppp3LgG4fiBJx+0R34wRa7il9XKKZ+kkOAdKkcW0PIAYKmjn0Tn8krGd
20
- Gw6qtFFqjdohXfhkKmajXAFunEtd3J0kHFkf3obIwRB1qdsYmKXVFxUx3GqcIlph
21
- vt9v/9FC12JAxwAiJXHuY2xN5uo3xSDER4+tCCy3/AI=</SignatureValue>
22
- <KeyInfo>
23
- <X509Data>
24
- <X509Certificate>MIICLzCCAZgCCQCVuhhQ38rw0TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQGEwJV
25
- UzEQMA4GA1UECAwHR2VvcmdpYTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQ
26
- dHkgTHRkMRcwFQYDVQQDDA53d3cuZ29vZ2xlLmNvbTAgFw0xMzA1MjUxODQwMDRa
27
- GA8zMDEyMDkyNTE4NDAwNFowWzELMAkGA1UEBhMCVVMxEDAOBgNVBAgMB0dlb3Jn
28
- aWExITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEXMBUGA1UEAwwO
29
- d3d3Lmdvb2dsZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALE4oSql
30
- eymfHtzOeY86WyvfsjZmaz2XnIo9dzZsK71yMEKkgvXQnnYy9pK0NaYcG0B0hcii
31
- 3fqGBiHMkZY2BOGWwCC/wOmJCzLq9q6caPWUs71Zko+h59LaqV93vzDmZaXYfFoQ
32
- gSVEWpEpCSo560x0mSuLnJYdQQzZ/L6xvxZ1AgMBAAEwDQYJKoZIhvcNAQEFBQAD
33
- gYEATyK/RlfpohUVimgFkycTF2hyusjctseXoZDCctgg/STMsL8iA0P9YB6k91GC
34
- kWpwevuiwarD1MfSUV6goPINFkIBvfK+5R9lpHaTqqs615z8T9R5VJgaLcFe3tWd
35
- 7oq3V2q5Nl6MrZfXj2N07qe6/9zfdauxYO26vAEKCvIkbMo=
36
- </X509Certificate>
37
- </X509Data>
38
- </KeyInfo>
39
- </Signature></Envelope>
@@ -1,55 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe "encryption and decryption:" do
4
- subject do
5
- Nokogiri::XML(fixture('sign2-doc.xml'))
6
- end
7
-
8
- [ 'aes128-cbc', 'aes192-cbc', 'aes256-cbc', 'tripledes-cbc' ].each do |block_encryption|
9
- [ 'rsa-1_5', 'rsa-oaep-mgf1p' ].each do |key_transport|
10
- describe "encrypting with an RSA public key with #{block_encryption} #{key_transport}" do
11
- before do
12
- @original = subject.to_s
13
- subject.encrypt!(
14
- key: fixture('rsa.pub'), name: 'test',
15
- block_encryption: block_encryption, key_transport: key_transport)
16
- end
17
-
18
- # it generates a new key every time so will never match the fixture
19
- specify { expect(subject.to_s == @original).to be_falsey }
20
- specify { expect(subject.to_s =~ /Hello.*World/i).to be_falsey }
21
- # specify { subject.to_s.should == fixture('encrypt2-result.xml') }
22
-
23
- describe 'decrypting with the RSA private key' do
24
- before do
25
- subject.decrypt! key: fixture('rsa.pem')
26
- end
27
-
28
- specify { expect(subject.to_s == fixture('sign2-doc.xml')).to be_truthy }
29
- end
30
- end
31
- end
32
- end
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
55
- end