xref: /AOO41X/main/xmlsecurity/tools/uno/EncryptionEntity.java (revision 8809db7a87f97847b57a57f4cd2b0104b2b83182)
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