Decryption transform interop samples

merlin <[email protected]> Thu, 01 Aug 2002 17:31:45 +0100
Newsgroups gmane.ietf.xmldsig
Message-ID <[email protected]>
------- =_aaaaaaaaaa0
Content-Type: text/plain; charset="us-ascii"
Content-ID: <24042.1028219505.1@yog-sothoth>

The remaining decryption transform issues shouldn't have much
effect on interop, so attached are some (hopefully functional)
interop samples to kick things off.

Joseph, I've also been asked if you could add
  http://www.baltimore.com/keytools/xml/
to your list of dsig/enc/... implementations/interop links.

Merlin

See the Readme.txt for details on the interop samples; this
is a quick list. They're all basic AES-128, DSA and SHA-1.

. decrypt-xml.xml
  XML-mode decryption transform

. decrypt-xml-except.xml
  XML-mode decryption transform with exception

. decrypt-xml-except-external.xml
  XML-mode decryption transform with exception in external document

. decrypt-xml-except-xpointer.xml
  XML-mode decryption transform with XPointer exception (non-mandatory)

. decrypt-xml-except-unresolvable-xpointer.xml
  XML-mode decryption transform with irrelevant but unresolvable exception

. decrypt-xml-super.xml
  XML-mode decryption transform over super-encrypted data

. decrypt-xml-super-except.xml
  XML-mode decryption transform with exception in super-encrypted data

. decrypt-xml-empty-xmlns.xml
  XML-mode decryption transform demonstrating apex xmlns="" output

. decrypt-xml-inherit-attr.xml
  XML-mode decryption transform demonstrating xml attribute inheritance

. decrypt-xml-super-inherit-attr.xml
  XML-mode decryption transform demonstrating xml attribute inheritance
  in super-encrypted data

. decrypt-xml-xpath.xml
  XML-mode decryption transform with XPath filter instead of exception

. decrypt-xml-none.xml
  XML-mode decryption transform with no encrypted data

. decrypt-xml-undecryptable.xml
  XML-mode decryption transform with undecryptable data; should fail

. decrypt-xml-bad-type.xml
  XML-mode decryption transform with an unknown type; should fail

. decrypt-binary.xml
  Binary-mode decryption transform

. decrypt-binary-except.xml
  Binary-mode decryption transform with exception

. decrypt-binary-multiple.xml
  Binary-mode decryption transform with multiple encrypted data

. decrypt-binary-none.xml
  Binary-mode decryption transform with no encrypted data

------- =_aaaaaaaaaa0
Content-Type: application/x-tar-gz; name="merlin-decrypt-two.tar.gz"
Content-ID: <24042.1028219505.2@yog-sothoth>
Content-Description: merlin-decrypt-two.tar.gz
Content-Transfer-Encoding: base64

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

------- =_aaaaaaaaaa0--