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