Hi all, I've noticed there's no Clojure library for doing XML Digital signatures. So I'll probably put one out there, if I can completely solve this problem. Using Java's *XML Digital Signature API <http://docs.oracle.com/javase/7/docs/technotes/guides/security/xmldsig/XMLDigitalSignature.html>*, I'm trying to get the source XML (*fig.1*) to look like a certain output ( *fig.2*). However, I'm getting stuck with another output (*fig.3*).
Now, XML Signatures come in 3 forms i) detached, ii) enveloping and iii) enveloped. But the XML in *fig.2* has the signature in the Header path [*soapenv:Envelope / soapenv:Header / wsse:Security*]. I imagine that's using XML Signature's XPath Reference Processing Model<http://www.w3.org/TR/xmldsig-core/#sec-ReferenceProcessingModel>. So I mainly want to put the xml Signature in the Header. But there are a lot of other things that need to get ironed out, in order to arrive at the XML in fig.2. - Using the Java API<http://docs.oracle.com/javase/7/docs/technotes/guides/security/xmldsig/XMLDigitalSignature.html#wp511436>, how would I put the <soapenv:Signature> into the Header [*soapenv:Header / wsse:Security*] - Using the same API, into [*soapenv:Header / wsse:Security*] how would I add - [wsse:Security / wsse:BinarySecurityToken] ;; Binary Security Token Direct Reference - [wsu:Timestamp / ws:Created] - [wsu:Timestamp / ws:Expires] - <dg:Signature> (and child tags) are namespaced. Using the same API, how do I add the namespace and prefix (generated tags are not namespaced by default). - Is the <ds:Reference {URI}> attribute meaningful? (must it be populated). - Is it significant, the fact that <ds:SignedInfo> has 2 <ds:Reference> tags - [*ds:KeyInfo / wsse:SecurityTokenReference*] and [*ds:KeyInfo / wsse:SecurityTokenReference / wsse:Reference*] in fig.2 is different from [*KeyInfo / KeyValue / DSAKeyValue*] tags in fig.3. *Materials * <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:mod=' http://www.hewitt.com/hro/benefits/fndt/hasbro/model' xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/ '> <soapenv:Header></soapenv:Header> <soapenv:Body wsu:Id='id-3' xmlns:wsu=' http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd'> <mod:submitServiceRequest> <mod:userId>3XATH</mod:userId> <mod:serviceId>Genesys.addExceptionForAgent</mod:serviceId> <mod:inputXml></mod:inputXml> </mod:submitServiceRequest> </soapenv:Body> </soapenv:Envelope> fig.1 - source XML <?xml version="1.0 <http://www.w3.org/TR/REC-xml/>"?> <soapenv:Envelope xmlns:mod="http://www.hewitt.com/hro/benefits/fndt/hasbro/model" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Header> <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> <wsse:BinarySecurityToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" wsu:Id="CertId-fubar">fubar</wsse:BinarySecurityToken> <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="Signature-6"> <ds:SignedInfo> <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/> <ds:Reference URI="#id-70"> <ds:Transforms> <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> </ds:Transforms> <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> <ds:DigestValue>fubar</ds:DigestValue> </ds:Reference> <ds:Reference URI="#fubar"> <ds:Transforms> <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> </ds:Transforms> <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> <ds:DigestValue>fubar=</ds:DigestValue> </ds:Reference> </ds:SignedInfo> <ds:SignatureValue> fubar </ds:SignatureValue> <ds:KeyInfo Id="fubar"> <wsse:SecurityTokenReference xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="fubar"> <wsse:Reference URI="#fubar" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/> </wsse:SecurityTokenReference> </ds:KeyInfo> </ds:Signature><wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Timestamp-5"> <wsu:Created>fubar</wsu:Created> <wsu:Expires>fubar</wsu:Expires> </wsu:Timestamp> </wsse:Security></soapenv:Header> <soapenv:Body xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="id-70"> <mod:submitServiceRequest> <mod:userId>fubar</mod:userId> <mod:serviceId>fubar</mod:serviceId> <mod:inputXml> <![CDATA[<HA-TBA-INPUT> <HA-SIGNON> <CLNT-ID>fubar</CLNT-ID> <EE-ID>fubar</EE-ID> <MODEL-ID>fubar</MODEL-ID> <DTD-LBL-CD>fubar</DTD-LBL-CD> </HA-SIGNON> <SERVICE-REQUEST> <SERVICE-NAME>fubar</SERVICE-NAME> <SERVICE-INPUT> <PRSN-CDH> <TRNS-LBL-CD>fubar</TRNS-LBL-CD> <CDD-FLD-INTN-ID>fubar</CDD-FLD-INTN-ID> <EFBEGDT>fubar</EFBEGDT> <EFENDDT>fubar</EFENDDT> <CDD-FLD-VL-TX>fubar</CDD-FLD-VL-TX> <CDD-TS>fubar</CDD-TS> </PRSN-CDH> </SERVICE-INPUT> </SERVICE-REQUEST> </HA-TBA-INPUT>]]> </mod:inputXml> </mod:submitServiceRequest> </soapenv:Body> </soapenv:Envelope> fig.2. - The target (signed) XML we want to reach <?xml version="1.0 <http://www.w3.org/TR/REC-xml/>" encoding="UTF-8" standalone="no"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mod="http://www.hewitt.com/hro/benefits/fndt/hasbro/model">*<soapenv:Header/>* <soapenv:Body xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="id-3"> <mod:submitServiceRequest> <mod:userId></mod:userId> <mod:serviceId></mod:serviceId> <mod:inputXml/> </mod:submitServiceRequest> </soapenv:Body><Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> <SignedInfo> <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments"/> <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#dsa-sha1"/> <Reference URI=""> <Transforms> <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/> </Transforms> <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> <DigestValue>fubar</DigestValue> </Reference> </SignedInfo> <SignatureValue>fubar</SignatureValue> <KeyInfo> <KeyValue> <DSAKeyValue> <P>fubar</P> <Q>fubar</Q> <G>fubar</G> <Y>fubar</Y> </DSAKeyValue> </KeyValue> </KeyInfo> </Signature> </soapenv:Envelope> *fig.3 - Signed XML as it currently exists * Anyone have expertise with this? Or even if there's a library out there. Thanks Tim Washington Interruptsoftware.com <http://interruptsoftware.com/> -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.