Commit cab241b
Changed files (3)
spec
fixtures
xml
spec/fixtures/item.builder
@@ -1,4 +1,11 @@
xml.instruct!
xml.Item ID: id do
- signature_for(reference_id: id, xml: xml)
+ signature_for reference_id: id, xml: xml
+ xml.Encrypted do
+ encryption_for xml: xml do |xml|
+ xml.EncryptMe do
+ xml.Secret "secret"
+ end
+ end
+ end
end
spec/xml/document_spec.rb
@@ -8,6 +8,8 @@ RSpec.describe Xml::Kit::Document do
@id = ::Xml::Kit::Id.generate
@signing_key_pair = ::Xml::Kit::KeyPair.generate(use: :signing)
@embed_signature = true
+ @encrypt = true
+ @encryption_certificate = ::Xml::Kit::KeyPair.generate(use: :encryption).certificate
end
def template_path
README.md
@@ -1,8 +1,8 @@
# Xml::Kit
-Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/xml/kit`. To experiment with that code, run `bin/console` for an interactive prompt.
-
-TODO: Delete this and the text above, and describe your gem
+Xml::Kit is a toolkit for working with XML. It supports adding [XML
+Digital Signatures](https://www.w3.org/TR/xmldsig-core/)
+and [XML Encryption](https://www.w3.org/TR/2002/REC-xmlenc-core-20021210/Overview.html).
## Installation
@@ -22,7 +22,97 @@ Or install it yourself as:
## Usage
-TODO: Write usage instructions here
+```builder
+# ./templates/item.builder
+xml.instruct!
+xml.Item ID: id do
+ signature_for reference_id: id, xml: xml
+ xml.Encrypted do
+ encryption_for xml: xml do |encrypted_xml|
+ encrypted_xml.EncryptMe do
+ encrypted_xml.Secret "secret"
+ end
+ end
+ end
+end
+```
+
+```ruby
+require 'xml/kit'
+
+class Item
+ include ::Xml::Kit::Templatable
+
+ def initialize
+ @id = ::Xml::Kit::Id.generate
+ @signing_key_pair = ::Xml::Kit::KeyPair.generate(use: :signing)
+ @embed_signature = true
+ @encrypt = true
+ @encryption_certificate = ::Xml::Kit::KeyPair.generate(use: :encryption).certificate
+ end
+
+ def template_path
+ current_path = File.expand_path(File.dirname(__FILE__))
+ File.join(current_path, "./templates/item.builder")
+ end
+end
+
+puts Item.new.to_xml
+```
+
+This will produce something like the following:
+
+```xml
+<?xml version="1.0" encoding="UTF-8"?>
+<Item ID="_de3f6209-f842-400f-b1f7-85159aa90299">
+ <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
+ <SignedInfo>
+ <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
+ <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
+ <Reference URI="#_de3f6209-f842-400f-b1f7-85159aa90299">
+ <Transforms>
+ <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
+ <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
+ </Transforms>
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
+ <DigestValue>3cH13yM8oR0sgWbhAx0mo536KMJDkVBynbPo7ehwJPE=</DigestValue>
+ </Reference>
+ </SignedInfo>
+ <SignatureValue>ZCSx4dad704jz0Z6rCMsnOs/oyVH3YBeEF9wtk2UFmWBW+VfhoBKw7N50GnzmAGCHyI6zajRPdff5i6UMDz3fOzh7rlROnqW0TXoG77xPiIfqJswCKE/4LzzBLrEHVbdUz90U8n0M1Ahbesrt+pbf/NkJghpvDhJW+w6oho7dyU6k57C5D//kTaSb7DvKte3a7/o8xWvPRztQhYekK+RyWjK9k/lU4WEXk5rGbx+QrD9rgIXBQOdcSjOtUosZJADz7uFod6AWRak246U62Xahz8JxE/1N22LhZY9whvB7s+c76f1Uv44NtF87D0P8UXs0TVx2jsnhEwLsT7DPQ6jDg==</SignatureValue>
+ <KeyInfo>
+ <X509Data>
+ <X509Certificate>MIIDQTCCAimgAwIBAgIBADANBgkqhkiG9w0BAQsFADBkMQswCQYDVQQGEwJDQTEQMA4GA1UECAwHQWxiZXJ0YTEQMA4GA1UEBwwHQ2FsZ2FyeTEPMA0GA1UECgwGWG1sS2l0MQ8wDQYDVQQLDAZYbWxLaXQxDzANBgNVBAMMBlhtbEtpdDAeFw0xNzEyMzAxOTM1MjZaFw0xODAxMjkwNzAwMDBaMGQxCzAJBgNVBAYTAkNBMRAwDgYDVQQIDAdBbGJlcnRhMRAwDgYDVQQHDAdDYWxnYXJ5MQ8wDQYDVQQKDAZYbWxLaXQxDzANBgNVBAsMBlhtbEtpdDEPMA0GA1UEAwwGWG1sS2l0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz8yvaY1zvqiSTpDc0vFgS00N0R05ytanViNy0YrcAvLH2njvLOYi8e5lWAjCUzoWTe6FMJQySIHuzr9NvZztlQBp5tydmxDsOFQ3DrBhiqtyafdCd5s8OQz1CekavgToTOm5VdZEWLD7HSCFvHXeuiS/zwEh4yYpJBAERtsSaYxT7L1wNggxc6F6UEfF1vwrGxMNH/OUi4okeS773esXeRlP5fHyMUvVC70KHauSYt/kjNR8/WuZBOY8/kFv3XiErf0PNSAYhyGHozabv8hJ2Bho0+HR12P6Xv+qKXFlDnMeAOHy23eShuUpCEBaEPAG4o8w4g/lrn0nJ+e9XrYaNQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQCWybi6buMD75KBCcyd5aRtSKavYoDaZlzuohKh4z1HEzHS/fbpbxVQOrfXtuawZjNxcn62LFIe/w68EImzYkAss8LKojRcaKnIeF1/3Pzo6qfnmFpaecfYvX3ZTtw9JPOd4chy2X2WFAUMRscjSvjNvTBzFOXg60F0UMDnWOWMbc5Di/aZD8r2s/RDE3QxcUou8QhBMc2nYw77mQsXBnWmBeUA2aGP
+8OG/fOgtBKkZnNF8gx7wuodbYSmKAfFGx8+CGtnkwNr4/hXgd1qg5KmsAx+9VYozCjGKSkVUIqC5khy6N+1Pb5jMKrMQ+QU9zGhylWoJ2jiK65hzUUVUESIB</X509Certificate>
+ </X509Data>
+ </KeyInfo>
+ </Signature>
+ <Encrypted>
+ <EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#">
+ <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc"/>
+ <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
+ <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
+ <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/>
+ <CipherData>
+ <CipherValue>rBJwm+gmL6eUHBZDXs2swIL3DiZ+MfmBPpM52eF0RWFtZv/gutY02KlsFLlm
+jc+DO7X5p9l1Br67FjGJrTdfSSqHf35cS1cioyaKLtgniSrD7Hf9d8qIuWt5
+6dLWjmCi21cePMJHhNiFe5yRjFHNp5LZ9dX5hvNXjbn0+p90fj8zlO2TWZv9
+atooON3BaYGCezZlmG0bWyEmloqKHiGjqaKtkdeSKJDzoo/AvubDEgz56rin
+Cpw26rEOg8BBd/KNfSXyDUifOOzXmn6myq+8+W/FFQ+6y+5SgtsbONRCqe2c
+KkNi3fYhilwLxWCaXFjONimEOkeG03yR5QnWhzEOpw==
+</CipherValue>
+ </CipherData>
+ </EncryptedKey>
+ </KeyInfo>
+ <CipherData>
+ <CipherValue>45rM0phzM/S/vpiq8Ev+uQZ6WL5qZ8av0UDVzWAlHn6Qr7zWYjHea+NF94lK
+pvmTPWQDEnfv2UW8l0VdCLc+51zHjluRE/xJh31Gk3rVuRJtLioSge/N9UM4
+5g901rE9
+</CipherValue>
+ </CipherData>
+ </EncryptedData>
+ </Encrypted>
+</Item>
+```
## Development