You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@santuario.apache.org by bl...@apache.org on 2003/11/12 12:24:04 UTC
cvs commit: xml-security/src/org/apache/xml/security/encryption XMLCipher.java
blautenb 2003/11/12 03:24:04
Modified: src/org/apache/xml/security/encryption XMLCipher.java
Log:
Bug (Bugzilla #24624) reported by kdowney@amberarcher.com in handling root element decryption + fixed bug in UTF-8 handling
Revision Changes Path
1.7 +43 -11 xml-security/src/org/apache/xml/security/encryption/XMLCipher.java
Index: XMLCipher.java
===================================================================
RCS file: /home/cvs/xml-security/src/org/apache/xml/security/encryption/XMLCipher.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- XMLCipher.java 17 Sep 2003 22:14:55 -0000 1.6
+++ XMLCipher.java 12 Nov 2003 11:24:04 -0000 1.7
@@ -62,6 +62,8 @@
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
+import java.io.UnsupportedEncodingException;
+import java.io.ByteArrayOutputStream;
import java.lang.Integer;
import java.security.InvalidKeyException;
import java.security.Key;
@@ -432,7 +434,7 @@
try {
encryptedBytes =
- c.doFinal(serializedOctets.getBytes());
+ c.doFinal(serializedOctets.getBytes("UTF-8"));
logger.debug("Expected cipher.outputSize = " +
Integer.toString(c.getOutputSize(
@@ -445,7 +447,9 @@
throw new XMLEncryptionException("empty", ibse);
} catch (BadPaddingException bpe) {
throw new XMLEncryptionException("empty", bpe);
- }
+ } catch (UnsupportedEncodingException uee) {
+ throw new XMLEncryptionException("empty", uee);
+ }
// Now build up to a properly XML Encryption encoded octet stream
// IvParameterSpec iv;
@@ -519,7 +523,7 @@
byte[] encryptedBytes = null;
try {
encryptedBytes =
- contextCipher.doFinal(serializedOctets.getBytes());
+ contextCipher.doFinal(serializedOctets.getBytes("UTF-8"));
logger.debug("Expected cipher.outputSize = " +
Integer.toString(contextCipher.getOutputSize(
@@ -532,6 +536,8 @@
throw new XMLEncryptionException("empty", ibse);
} catch (BadPaddingException bpe) {
throw new XMLEncryptionException("empty", bpe);
+ } catch (UnsupportedEncodingException uee) {
+ throw new XMLEncryptionException("empty", uee);
}
String base64EncodedEncryptedOctets = new BASE64Encoder().encode(
@@ -760,7 +766,7 @@
byte[] encryptedBytes = null;
try {
encryptedBytes =
- contextCipher.doFinal(serializedOctets.getBytes());
+ contextCipher.doFinal(serializedOctets.getBytes("UTF-8"));
logger.debug("Expected cipher.outputSize = " +
Integer.toString(contextCipher.getOutputSize(
@@ -769,6 +775,8 @@
Integer.toString(encryptedBytes.length));
} catch (IllegalStateException ise) {
throw new XMLEncryptionException("empty", ise);
+ } catch (UnsupportedEncodingException uee) {
+ throw new XMLEncryptionException("empty", uee);
} catch (IllegalBlockSizeException ibse) {
throw new XMLEncryptionException("empty", ibse);
} catch (BadPaddingException bpe) {
@@ -942,9 +950,12 @@
try {
octets = new String(c.doFinal(encryptedBytes, ivLen,
- encryptedBytes.length - ivLen));
+ encryptedBytes.length - ivLen),
+ "UTF-8");
} catch (IllegalBlockSizeException ibse) {
throw new XMLEncryptionException("empty", ibse);
+ } catch (UnsupportedEncodingException uee) {
+ throw new XMLEncryptionException("empty", uee);
} catch (BadPaddingException bpe) {
throw new XMLEncryptionException("empty", bpe);
}
@@ -955,14 +966,27 @@
logger.debug("Decrypted octets:\n" + octets);
- Element sourceParent = (Element) element.getParentNode();
+ Node sourceParent = element.getParentNode();
+
DocumentFragment decryptedFragment =
serializer.deserialize(octets, sourceParent);
+
// The de-serialiser returns a fragment whose children we need to
// take on.
- sourceParent.replaceChild(decryptedFragment, element);
+ if (sourceParent instanceof Document) {
+
+ // If this is a content decryption, this may have problems
+
+ contextDocument.removeChild(contextDocument.getDocumentElement());
+ contextDocument.appendChild(decryptedFragment);
+ }
+ else {
+
+ sourceParent.replaceChild(decryptedFragment, element);
+
+ }
return (contextDocument);
}
@@ -1092,10 +1116,11 @@
* @param doc the <code>Element</code> to serialize.
* @return the <code>String</code> representation of the serilaized
* <code>Element</code>.
- * @throws
+ * @throws XMLEncryptionException
*/
String serialize(Element element) throws XMLEncryptionException {
- StringWriter output = new StringWriter();
+ // StringWriter output = new StringWriter();
+ ByteArrayOutputStream output = new ByteArrayOutputStream();
serializer = new XMLSerializer(output, format);
try {
@@ -1104,7 +1129,14 @@
throw new XMLEncryptionException("empty", ioe);
}
- return (output.toString());
+
+ String ret = null;
+ try {
+ ret = output.toString("UTF-8");
+ } catch (UnsupportedEncodingException uee) {
+ throw new XMLEncryptionException("empty", uee);
+ }
+ return ret;
}
/**
@@ -1137,7 +1169,7 @@
/**
*
*/
- DocumentFragment deserialize(String source, Element ctx) throws XMLEncryptionException {
+ DocumentFragment deserialize(String source, Node ctx) throws XMLEncryptionException {
DocumentFragment result;
final String tagname = "fragment";