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