Miroslav Nachev wrote:
   Hi,

   From XML Encryption Syntax and Processing specification I see that
it is possible the data of some of element to be encrypted by
reference instead by value (CipherValue or CipherReference).
Unfortunately I can't see any example how can be done this?
   Any ideas or/and help?

Here is an example from one of the unit tests (XMLCipherTester):

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document d = db.newDocument();
Element docElement = d.createElement("EncryptedDoc");
d.appendChild(docElement);

// Create the XMLCipher object
cipher = XMLCipher.getInstance();
EncryptedData ed = cipher.createEncryptedData(CipherData.REFERENCE_
TYPE, "#CipherTextId");
EncryptionMethod em = cipher.createEncryptionMethod(XMLCipher.AES_128);
ed.setEncryptionMethod(em);
org.apache.xml.security.encryption.Transforms xencTransforms =
    cipher.createTransforms(d);

ed.getCipherData().getCipherReference().setTransforms(xencTransforms);
org.apache.xml.security.transforms.Transforms dsTransforms =
    xencTransforms.getDSTransforms();

// An XPath transform
XPathContainer xpc = new XPathContainer(d);
xpc.setXPath("self::text()[parent::[EMAIL PROTECTED]"CipherTextId\"]]");

dsTransforms.addTransform(org.apache.xml.security.transforms.Transforms.TRANSFORM_XPATH,
xpc.getElementPlusReturns());

// Add a Base64 Transforms
dsTransforms.addTransform(org.apache.xml.security.transforms.Transforms.TRANSFORM_BASE64_DECODE);

Element ee = cipher.martial(d, ed);
docElement.appendChild(ee);

// Add the cipher text
Element encryptedElement = d.createElement("CipherText");
encryptedElement.setAttributeNS(null, "Id", "CipherTextId");
IdResolver.registerElementById(encryptedElement, "CipherTextId");

encryptedElement.appendChild(d.createTextNode(tstBase64EncodedString));
docElement.appendChild(encryptedElement);

--Sean

Reply via email to