1*db859879SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*db859879SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*db859879SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*db859879SAndrew Rist  * distributed with this work for additional information
6*db859879SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*db859879SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*db859879SAndrew Rist  * "License"); you may not use this file except in compliance
9*db859879SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*db859879SAndrew Rist  *
11*db859879SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*db859879SAndrew Rist  *
13*db859879SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*db859879SAndrew Rist  * software distributed under the License is distributed on an
15*db859879SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*db859879SAndrew Rist  * KIND, either express or implied.  See the License for the
17*db859879SAndrew Rist  * specific language governing permissions and limitations
18*db859879SAndrew Rist  * under the License.
19*db859879SAndrew Rist  *
20*db859879SAndrew Rist  *************************************************************/
21*db859879SAndrew Rist 
22*db859879SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir package com.sun.star.xml.security.uno;
25cdf0e10cSrcweir 
26cdf0e10cSrcweir /* uno classes */
27cdf0e10cSrcweir import com.sun.star.uno.UnoRuntime;
28cdf0e10cSrcweir import com.sun.star.lang.XMultiComponentFactory;
29cdf0e10cSrcweir import com.sun.star.lang.XInitialization;
30cdf0e10cSrcweir import com.sun.star.uno.XComponentContext;
31cdf0e10cSrcweir 
32cdf0e10cSrcweir import com.sun.star.xml.crypto.*;
33cdf0e10cSrcweir import com.sun.star.xml.crypto.sax.*;
34cdf0e10cSrcweir 
35cdf0e10cSrcweir /*
36cdf0e10cSrcweir  * this class maintains the data for an encryption operation.
37cdf0e10cSrcweir  */
38cdf0e10cSrcweir class EncryptionEntity extends SecurityEntity
39cdf0e10cSrcweir {
40cdf0e10cSrcweir 	private int m_nEncryptionElementCollectorId;
41cdf0e10cSrcweir 
EncryptionEntity( XSecuritySAXEventKeeper xSAXEventKeeper, boolean isExporting, Object resultListener, XXMLSecurityContext xXMLSecurityContext, XXMLSignature xXMLSignature, XXMLEncryption xXMLEncryption, XMultiComponentFactory xRemoteServiceManager, XComponentContext xRemoteContext)42cdf0e10cSrcweir 	EncryptionEntity(
43cdf0e10cSrcweir 		XSecuritySAXEventKeeper xSAXEventKeeper,
44cdf0e10cSrcweir 		boolean isExporting,
45cdf0e10cSrcweir 		Object resultListener,
46cdf0e10cSrcweir 		XXMLSecurityContext xXMLSecurityContext,
47cdf0e10cSrcweir 		XXMLSignature xXMLSignature,
48cdf0e10cSrcweir 		XXMLEncryption xXMLEncryption,
49cdf0e10cSrcweir 		XMultiComponentFactory xRemoteServiceManager,
50cdf0e10cSrcweir 		XComponentContext xRemoteContext)
51cdf0e10cSrcweir 	{
52cdf0e10cSrcweir 		super(xSAXEventKeeper, xXMLSecurityContext, xXMLSignature,
53cdf0e10cSrcweir 			 xXMLEncryption, xRemoteServiceManager, xRemoteContext);
54cdf0e10cSrcweir 
55cdf0e10cSrcweir 		m_nEncryptionElementCollectorId = m_xSAXEventKeeper.addSecurityElementCollector(
56cdf0e10cSrcweir 			ElementMarkPriority.AFTERMODIFY,
57cdf0e10cSrcweir 			true);
58cdf0e10cSrcweir 
59cdf0e10cSrcweir 		m_xSAXEventKeeper.setSecurityId(m_nEncryptionElementCollectorId, m_nSecurityId);
60cdf0e10cSrcweir 
61cdf0e10cSrcweir 		if (isExporting)
62cdf0e10cSrcweir 		{
63cdf0e10cSrcweir 			try
64cdf0e10cSrcweir 			{
65cdf0e10cSrcweir 				/*
66cdf0e10cSrcweir 				 * creates a Encryptor.
67cdf0e10cSrcweir 				 */
68cdf0e10cSrcweir 				Object encryptor = m_xRemoteServiceManager.createInstanceWithContext(
69cdf0e10cSrcweir 					TestTool.ENCRYPTOR_COMPONENT, m_xRemoteContext);
70cdf0e10cSrcweir 
71cdf0e10cSrcweir 				m_xReferenceResolvedListener =
72cdf0e10cSrcweir 					(XReferenceResolvedListener)UnoRuntime.queryInterface(
73cdf0e10cSrcweir 						XReferenceResolvedListener.class, encryptor);
74cdf0e10cSrcweir 
75cdf0e10cSrcweir 				/*
76cdf0e10cSrcweir 				 * initializes the Encryptor.
77cdf0e10cSrcweir 				 */
78cdf0e10cSrcweir 				XInitialization xInitialization =
79cdf0e10cSrcweir 					(XInitialization)UnoRuntime.queryInterface(
80cdf0e10cSrcweir 						XInitialization.class, m_xReferenceResolvedListener);
81cdf0e10cSrcweir 				Object args[]=new Object[5];
82cdf0e10cSrcweir 				args[0] = new Integer(m_nSecurityId).toString();
83cdf0e10cSrcweir 				args[1] = m_xSAXEventKeeper;
84cdf0e10cSrcweir 				args[2] = new Integer(m_nEncryptionElementCollectorId).toString();
85cdf0e10cSrcweir 				args[3] = m_xXMLSecurityContext.getSecurityEnvironment();
86cdf0e10cSrcweir 				args[4] = m_xXMLEncryption;
87cdf0e10cSrcweir 				xInitialization.initialize(args);
88cdf0e10cSrcweir 
89cdf0e10cSrcweir 				/*
90cdf0e10cSrcweir 				 * sets encryption result listener.
91cdf0e10cSrcweir 				 */
92cdf0e10cSrcweir 				XEncryptionResultBroadcaster m_xEncryptionResultBroadcaster =
93cdf0e10cSrcweir 					(XEncryptionResultBroadcaster)UnoRuntime.queryInterface(
94cdf0e10cSrcweir 						XEncryptionResultBroadcaster.class, m_xReferenceResolvedListener);
95cdf0e10cSrcweir 				m_xEncryptionResultBroadcaster.addEncryptionResultListener(
96cdf0e10cSrcweir 					(XEncryptionResultListener)UnoRuntime.queryInterface(
97cdf0e10cSrcweir 						XEncryptionResultListener.class, resultListener));
98cdf0e10cSrcweir 			}
99cdf0e10cSrcweir 			catch( com.sun.star.uno.Exception e)
100cdf0e10cSrcweir 			{
101cdf0e10cSrcweir 				e.printStackTrace();
102cdf0e10cSrcweir 			}
103cdf0e10cSrcweir 		}
104cdf0e10cSrcweir 		else
105cdf0e10cSrcweir 		{
106cdf0e10cSrcweir 			try{
107cdf0e10cSrcweir 				/*
108cdf0e10cSrcweir 				 * creates a Decryptor.
109cdf0e10cSrcweir 				 */
110cdf0e10cSrcweir 				Object decryptor = m_xRemoteServiceManager.createInstanceWithContext(
111cdf0e10cSrcweir 					TestTool.DECRYPTOR_COMPONENT, m_xRemoteContext);
112cdf0e10cSrcweir 
113cdf0e10cSrcweir 				m_xReferenceResolvedListener =
114cdf0e10cSrcweir 					(XReferenceResolvedListener)UnoRuntime.queryInterface(
115cdf0e10cSrcweir 						XReferenceResolvedListener.class, decryptor);
116cdf0e10cSrcweir 
117cdf0e10cSrcweir 				/*
118cdf0e10cSrcweir 				 * initializes the Decryptor.
119cdf0e10cSrcweir 				 */
120cdf0e10cSrcweir 				XInitialization xInitialization = (XInitialization)UnoRuntime.queryInterface(XInitialization.class, m_xReferenceResolvedListener);
121cdf0e10cSrcweir 				Object args[]=new Object[5];
122cdf0e10cSrcweir 				args[0] = new Integer(m_nSecurityId).toString();
123cdf0e10cSrcweir 				args[1] = m_xSAXEventKeeper;
124cdf0e10cSrcweir 				args[2] = new Integer(m_nEncryptionElementCollectorId).toString();
125cdf0e10cSrcweir 				args[3] = m_xXMLSecurityContext;
126cdf0e10cSrcweir 				args[4] = m_xXMLEncryption;
127cdf0e10cSrcweir 				xInitialization.initialize(args);
128cdf0e10cSrcweir 
129cdf0e10cSrcweir 				/*
130cdf0e10cSrcweir 				 * sets decryption result listener.
131cdf0e10cSrcweir 				 */
132cdf0e10cSrcweir 				XDecryptionResultBroadcaster m_xDecryptionResultBroadcaster =
133cdf0e10cSrcweir 					(XDecryptionResultBroadcaster)UnoRuntime.queryInterface(
134cdf0e10cSrcweir 						XDecryptionResultBroadcaster.class, m_xReferenceResolvedListener);
135cdf0e10cSrcweir 				m_xDecryptionResultBroadcaster.addDecryptionResultListener(
136cdf0e10cSrcweir 					(XDecryptionResultListener)UnoRuntime.queryInterface(
137cdf0e10cSrcweir 						XDecryptionResultListener.class, resultListener));
138cdf0e10cSrcweir 			}
139cdf0e10cSrcweir 			catch( com.sun.star.uno.Exception e)
140cdf0e10cSrcweir 			{
141cdf0e10cSrcweir 				e.printStackTrace();
142cdf0e10cSrcweir 			}
143cdf0e10cSrcweir 		}
144cdf0e10cSrcweir 
145cdf0e10cSrcweir 		/*
146cdf0e10cSrcweir 		 * creates a Blocker.
147cdf0e10cSrcweir 		 */
148cdf0e10cSrcweir 		int blockerId = m_xSAXEventKeeper.addBlocker();
149cdf0e10cSrcweir 		m_xSAXEventKeeper.setSecurityId(blockerId, m_nSecurityId);
150cdf0e10cSrcweir 
151cdf0e10cSrcweir 		try
152cdf0e10cSrcweir 		{
153cdf0e10cSrcweir 			XBlockerMonitor xBlockerMonitor = (XBlockerMonitor)UnoRuntime.queryInterface(
154cdf0e10cSrcweir 				XBlockerMonitor.class, m_xReferenceResolvedListener);
155cdf0e10cSrcweir 			xBlockerMonitor.setBlockerId(blockerId);
156cdf0e10cSrcweir 		}
157cdf0e10cSrcweir 		catch( com.sun.star.uno.Exception e)
158cdf0e10cSrcweir 		{
159cdf0e10cSrcweir 			e.printStackTrace();
160cdf0e10cSrcweir 		}
161cdf0e10cSrcweir 
162cdf0e10cSrcweir 		/*
163cdf0e10cSrcweir 		 * configures the resolve listener for the encryption template.
164cdf0e10cSrcweir 		 */
165cdf0e10cSrcweir 		XReferenceResolvedBroadcaster xReferenceResolvedBroadcaster =
166cdf0e10cSrcweir 			(XReferenceResolvedBroadcaster)UnoRuntime.queryInterface(
167cdf0e10cSrcweir 				XReferenceResolvedBroadcaster.class, m_xSAXEventKeeper);
168cdf0e10cSrcweir 		xReferenceResolvedBroadcaster.addReferenceResolvedListener(m_nEncryptionElementCollectorId, m_xReferenceResolvedListener);
169cdf0e10cSrcweir 	}
170cdf0e10cSrcweir 
171cdf0e10cSrcweir 	/*
172cdf0e10cSrcweir 	 * add the reference to this encryption.
173cdf0e10cSrcweir 	 *
174cdf0e10cSrcweir 	 * 1. askes the SAXEventKeeper to add a ElementCollector to for the new
175cdf0e10cSrcweir 	 * referenced element;
176cdf0e10cSrcweir 	 * 2. configures this ElementCollector's security id;
177cdf0e10cSrcweir 	 * 3. tells the SAXEventKeeper which listener will receive the reference
178cdf0e10cSrcweir 	 * resolved notification.
179cdf0e10cSrcweir 	 * 4. notifies the SignatureCollector about the reference id.
180cdf0e10cSrcweir 	 */
setReference(boolean isExporting)181cdf0e10cSrcweir 	protected boolean setReference(boolean isExporting)
182cdf0e10cSrcweir 	{
183cdf0e10cSrcweir 		boolean rc = false;
184cdf0e10cSrcweir 
185cdf0e10cSrcweir 		int referenceId = m_xSAXEventKeeper.addSecurityElementCollector(
186cdf0e10cSrcweir 			isExporting?
187cdf0e10cSrcweir 			(ElementMarkPriority.AFTERMODIFY):(ElementMarkPriority.BEFOREMODIFY),
188cdf0e10cSrcweir 			true);
189cdf0e10cSrcweir 
190cdf0e10cSrcweir 		m_xSAXEventKeeper.setSecurityId(referenceId, m_nSecurityId);
191cdf0e10cSrcweir 
192cdf0e10cSrcweir 		XReferenceResolvedBroadcaster xReferenceResolvedBroadcaster =
193cdf0e10cSrcweir 			(XReferenceResolvedBroadcaster)UnoRuntime.queryInterface(
194cdf0e10cSrcweir 				XReferenceResolvedBroadcaster.class, m_xSAXEventKeeper);
195cdf0e10cSrcweir 		xReferenceResolvedBroadcaster.addReferenceResolvedListener(
196cdf0e10cSrcweir 			referenceId, m_xReferenceResolvedListener);
197cdf0e10cSrcweir 
198cdf0e10cSrcweir 		try
199cdf0e10cSrcweir 		{
200cdf0e10cSrcweir 			XReferenceCollector xReferenceCollector =
201cdf0e10cSrcweir 				(XReferenceCollector)UnoRuntime.queryInterface(
202cdf0e10cSrcweir 					XReferenceCollector.class, m_xReferenceResolvedListener);
203cdf0e10cSrcweir 			xReferenceCollector.setReferenceId(referenceId);
204cdf0e10cSrcweir 		}
205cdf0e10cSrcweir 		catch( com.sun.star.uno.Exception e)
206cdf0e10cSrcweir 		{
207cdf0e10cSrcweir 			e.printStackTrace();
208cdf0e10cSrcweir 			rc = false;
209cdf0e10cSrcweir 		}
210cdf0e10cSrcweir 
211cdf0e10cSrcweir 		return rc;
212cdf0e10cSrcweir 	}
213cdf0e10cSrcweir }
214cdf0e10cSrcweir 
215