santuario-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Colm O hEigeartaigh <cohei...@apache.org>
Subject Re: newbie - decryption stream using stax
Date Thu, 24 Jul 2014 10:58:59 GMT
The following patch for the encryption testcase on github works for me...

Colm.


On Wed, Jul 23, 2014 at 5:02 PM, mujahedsyed <msyed1983@gmail.com> wrote:

> Hi Colm,
>
> Thank you for the reply.
>
> As per decryptUsingStAX method in EncryptionUtils class I tried to code
> something similar but it returns a document object rather void:
>
> public static Document decryptUsingStAX(InputStream inputStream,
>                         List<QName> namesToEncrypt, Key privateKey) throws
> Exception {
>                 // Set up the Configuration
>                 XMLSecurityProperties properties = new
> XMLSecurityProperties();
>                 List<XMLSecurityConstants.Action> actions = new
> ArrayList<XMLSecurityConstants.Action>();
>                 actions.add(XMLSecurityConstants.ENCRYPT);
>                 properties.setActions(actions);
>
>                 properties.setDecryptionKey(privateKey);
>
>                 InboundXMLSec inboundXMLSec =
> XMLSec.getInboundWSSec(properties);
>
>                 XMLInputFactory xmlInputFactory =
> XMLInputFactory.newInstance();
>                 final XMLStreamReader xmlStreamReader = xmlInputFactory
>                                 .createXMLStreamReader(inputStream);
>
>                 TestSecurityEventListener eventListener = new
> TestSecurityEventListener();
>                 XMLStreamReader securityStreamReader =
> inboundXMLSec.processInMessage(
>                                 xmlStreamReader, null, eventListener);
>
>                 while (securityStreamReader.hasNext()) {
>                         securityStreamReader.next();
>                 }
>
>                 xmlStreamReader.close();
>                 inputStream.close();
>
>                 // Check that what we were expecting to be encrypted was
> actually
>                 // encrypted
>                 List<EncryptedElementSecurityEvent> encryptedElementEvents
> = eventListener
>
> .getSecurityEvents(SecurityEventConstants.EncryptedElement);
>
>                 for (int i = 0; i < encryptedElementEvents.size(); i++) {
>                         System.out.println(i + ": " +
> encryptedElementEvents.get(i));
>                 }
>
>                 for (QName nameToEncrypt : namesToEncrypt) {
>                         boolean found = false;
>                         for (EncryptedElementSecurityEvent
> encryptedElement :
> encryptedElementEvents) {
>                                 if (encryptedElement.isEncrypted()
>                                                 && nameToEncrypt
>
> .equals(getEncryptedQName(encryptedElement
>
>       .getElementPath()))) {
>                                         found = true;
>                                         System.out.println("nameToEncrypt
> " + nameToEncrypt);
>                                         break;
>                                 }
>                                 if (!found) {
>                                         throw new Exception("Element not
> found");
>                                 }
>                         }
>                 }
>
>                 Document document = StAX2DOM.readDoc(
>                                 XMLUtils.createDocumentBuilder(false),
> securityStreamReader);
>                 return document;
>         }
>
> Now, in my main method I have instructions like:
>               // Decrypt
>                 Key privateKey = keyStore
>                                 .getKey("myservicekey",
> "skpass".toCharArray());
>                 ByteArrayInputStream bais = new
> ByteArrayInputStream(baos.toByteArray());
>
>                 Document result = EncryptionUtils.decryptUsingStAX(bais,
>                                 namesToEncrypt, privateKey);
>                 // check decrypt done successfully
>                 String resultString = getStringFromDocument(result);
>                 System.out.println("result:\n" + resultString.toString());
>
> The method getStringFromDocument is a helper method
>
> public String getStringFromDocument(Document doc) {
>                 try {
>                         DOMSource domSource = new DOMSource(doc);
>                         StringWriter writer = new StringWriter();
>                         StreamResult result = new StreamResult(writer);
>                         TransformerFactory tf =
> TransformerFactory.newInstance();
>                         Transformer transformer = tf.newTransformer();
>                         transformer.transform(domSource, result);
>                         return writer.toString();
>                 } catch (TransformerException ex) {
>                         ex.printStackTrace();
>                         return null;
>                 }
>         }
>
> The output is:
> result:
> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
>
>
> Apologies if the question looks stupid but I am really struggling to figure
> out the way to achieve the task, I would appreciate your assistance.
> Thanks very much in advance,
> Regards
> Mujahed
>
>
>
>
> --
> View this message in context:
> http://apache-xml-project.6118.n7.nabble.com/newbie-decryption-stream-using-stax-tp41280p41286.html
> Sent from the Apache XML - Security - Dev mailing list archive at
> Nabble.com.
>



-- 
Colm O hEigeartaigh

Talend Community Coder
http://coders.talend.com

Mime
View raw message