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 import java.util.Vector; 27*b1cdbd2cSJim Jagielski 28*b1cdbd2cSJim Jagielski /* uno classes */ 29*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 30*b1cdbd2cSJim Jagielski import com.sun.star.lang.XMultiComponentFactory; 31*b1cdbd2cSJim Jagielski import com.sun.star.lang.XInitialization; 32*b1cdbd2cSJim Jagielski import com.sun.star.uno.XComponentContext; 33*b1cdbd2cSJim Jagielski 34*b1cdbd2cSJim Jagielski import com.sun.star.xml.crypto.*; 35*b1cdbd2cSJim Jagielski import com.sun.star.xml.crypto.sax.*; 36*b1cdbd2cSJim Jagielski 37*b1cdbd2cSJim Jagielski /* 38*b1cdbd2cSJim Jagielski * this class maintains the data for a signature operation. 39*b1cdbd2cSJim Jagielski */ 40*b1cdbd2cSJim Jagielski class SignatureEntity extends SecurityEntity 41*b1cdbd2cSJim Jagielski { 42*b1cdbd2cSJim Jagielski private Vector m_vReferenceIds; 43*b1cdbd2cSJim Jagielski private int m_nSignatureElementCollectorId; 44*b1cdbd2cSJim Jagielski SignatureEntity( XSecuritySAXEventKeeper xSAXEventKeeper, boolean isExporting, Object resultListener, XXMLSecurityContext xXMLSecurityContext, XXMLSignature xXMLSignature, XXMLEncryption xXMLEncryption, XMultiComponentFactory xRemoteServiceManager, XComponentContext xRemoteContext)45*b1cdbd2cSJim Jagielski SignatureEntity( 46*b1cdbd2cSJim Jagielski XSecuritySAXEventKeeper xSAXEventKeeper, 47*b1cdbd2cSJim Jagielski boolean isExporting, 48*b1cdbd2cSJim Jagielski Object resultListener, 49*b1cdbd2cSJim Jagielski XXMLSecurityContext xXMLSecurityContext, 50*b1cdbd2cSJim Jagielski XXMLSignature xXMLSignature, 51*b1cdbd2cSJim Jagielski XXMLEncryption xXMLEncryption, 52*b1cdbd2cSJim Jagielski XMultiComponentFactory xRemoteServiceManager, 53*b1cdbd2cSJim Jagielski XComponentContext xRemoteContext) 54*b1cdbd2cSJim Jagielski { 55*b1cdbd2cSJim Jagielski super(xSAXEventKeeper, xXMLSecurityContext, xXMLSignature, 56*b1cdbd2cSJim Jagielski xXMLEncryption, xRemoteServiceManager, xRemoteContext); 57*b1cdbd2cSJim Jagielski 58*b1cdbd2cSJim Jagielski m_vReferenceIds = new Vector(); 59*b1cdbd2cSJim Jagielski 60*b1cdbd2cSJim Jagielski if (isExporting) 61*b1cdbd2cSJim Jagielski { 62*b1cdbd2cSJim Jagielski m_nSignatureElementCollectorId = m_xSAXEventKeeper.addSecurityElementCollector( 63*b1cdbd2cSJim Jagielski ElementMarkPriority.AFTERMODIFY, 64*b1cdbd2cSJim Jagielski true); 65*b1cdbd2cSJim Jagielski 66*b1cdbd2cSJim Jagielski m_xSAXEventKeeper.setSecurityId(m_nSignatureElementCollectorId, m_nSecurityId); 67*b1cdbd2cSJim Jagielski 68*b1cdbd2cSJim Jagielski try 69*b1cdbd2cSJim Jagielski { 70*b1cdbd2cSJim Jagielski /* 71*b1cdbd2cSJim Jagielski * creates a SignatureCreator. 72*b1cdbd2cSJim Jagielski */ 73*b1cdbd2cSJim Jagielski Object signatureCreator = m_xRemoteServiceManager.createInstanceWithContext( 74*b1cdbd2cSJim Jagielski TestTool.SIGNATURECREATOR_COMPONENT, m_xRemoteContext); 75*b1cdbd2cSJim Jagielski 76*b1cdbd2cSJim Jagielski m_xReferenceResolvedListener = 77*b1cdbd2cSJim Jagielski (XReferenceResolvedListener)UnoRuntime.queryInterface( 78*b1cdbd2cSJim Jagielski XReferenceResolvedListener.class, signatureCreator); 79*b1cdbd2cSJim Jagielski 80*b1cdbd2cSJim Jagielski /* 81*b1cdbd2cSJim Jagielski * initializes the SignatureCreator. 82*b1cdbd2cSJim Jagielski */ 83*b1cdbd2cSJim Jagielski XInitialization xInitialization = 84*b1cdbd2cSJim Jagielski (XInitialization)UnoRuntime.queryInterface( 85*b1cdbd2cSJim Jagielski XInitialization.class, m_xReferenceResolvedListener); 86*b1cdbd2cSJim Jagielski 87*b1cdbd2cSJim Jagielski Object args[]=new Object[5]; 88*b1cdbd2cSJim Jagielski args[0] = new Integer(m_nSecurityId).toString(); 89*b1cdbd2cSJim Jagielski args[1] = m_xSAXEventKeeper; 90*b1cdbd2cSJim Jagielski args[2] = new Integer(m_nSignatureElementCollectorId).toString(); 91*b1cdbd2cSJim Jagielski args[3] = m_xXMLSecurityContext.getSecurityEnvironment(); 92*b1cdbd2cSJim Jagielski args[4] = m_xXMLSignature; 93*b1cdbd2cSJim Jagielski xInitialization.initialize(args); 94*b1cdbd2cSJim Jagielski 95*b1cdbd2cSJim Jagielski /* 96*b1cdbd2cSJim Jagielski * creates a Blocker. 97*b1cdbd2cSJim Jagielski */ 98*b1cdbd2cSJim Jagielski int blockerId = m_xSAXEventKeeper.addBlocker(); 99*b1cdbd2cSJim Jagielski m_xSAXEventKeeper.setSecurityId(blockerId, m_nSecurityId); 100*b1cdbd2cSJim Jagielski 101*b1cdbd2cSJim Jagielski XBlockerMonitor xBlockerMonitor = (XBlockerMonitor)UnoRuntime.queryInterface( 102*b1cdbd2cSJim Jagielski XBlockerMonitor.class, m_xReferenceResolvedListener); 103*b1cdbd2cSJim Jagielski xBlockerMonitor.setBlockerId(blockerId); 104*b1cdbd2cSJim Jagielski 105*b1cdbd2cSJim Jagielski /* 106*b1cdbd2cSJim Jagielski * sets signature creation result listener. 107*b1cdbd2cSJim Jagielski */ 108*b1cdbd2cSJim Jagielski XSignatureCreationResultBroadcaster xSignatureCreationResultBroadcaster = 109*b1cdbd2cSJim Jagielski (XSignatureCreationResultBroadcaster)UnoRuntime.queryInterface( 110*b1cdbd2cSJim Jagielski XSignatureCreationResultBroadcaster.class, m_xReferenceResolvedListener); 111*b1cdbd2cSJim Jagielski xSignatureCreationResultBroadcaster.addSignatureCreationResultListener( 112*b1cdbd2cSJim Jagielski (XSignatureCreationResultListener)UnoRuntime.queryInterface( 113*b1cdbd2cSJim Jagielski XSignatureCreationResultListener.class, resultListener)); 114*b1cdbd2cSJim Jagielski } 115*b1cdbd2cSJim Jagielski catch( com.sun.star.uno.Exception e) 116*b1cdbd2cSJim Jagielski { 117*b1cdbd2cSJim Jagielski e.printStackTrace(); 118*b1cdbd2cSJim Jagielski } 119*b1cdbd2cSJim Jagielski 120*b1cdbd2cSJim Jagielski } 121*b1cdbd2cSJim Jagielski else 122*b1cdbd2cSJim Jagielski { 123*b1cdbd2cSJim Jagielski m_nSignatureElementCollectorId = m_xSAXEventKeeper.addSecurityElementCollector( 124*b1cdbd2cSJim Jagielski ElementMarkPriority.BEFOREMODIFY, false); 125*b1cdbd2cSJim Jagielski 126*b1cdbd2cSJim Jagielski m_xSAXEventKeeper.setSecurityId(m_nSignatureElementCollectorId, m_nSecurityId); 127*b1cdbd2cSJim Jagielski 128*b1cdbd2cSJim Jagielski try 129*b1cdbd2cSJim Jagielski { 130*b1cdbd2cSJim Jagielski /* 131*b1cdbd2cSJim Jagielski * creates a SignatureVerifier. 132*b1cdbd2cSJim Jagielski */ 133*b1cdbd2cSJim Jagielski Object signatureVerifier = m_xRemoteServiceManager.createInstanceWithContext( 134*b1cdbd2cSJim Jagielski TestTool.SIGNATUREVERIFIER_COMPONENT, m_xRemoteContext); 135*b1cdbd2cSJim Jagielski 136*b1cdbd2cSJim Jagielski m_xReferenceResolvedListener = 137*b1cdbd2cSJim Jagielski (XReferenceResolvedListener)UnoRuntime.queryInterface( 138*b1cdbd2cSJim Jagielski XReferenceResolvedListener.class, signatureVerifier); 139*b1cdbd2cSJim Jagielski 140*b1cdbd2cSJim Jagielski /* 141*b1cdbd2cSJim Jagielski * initializes the SignatureVerifier. 142*b1cdbd2cSJim Jagielski */ 143*b1cdbd2cSJim Jagielski XInitialization xInitialization = 144*b1cdbd2cSJim Jagielski (XInitialization)UnoRuntime.queryInterface( 145*b1cdbd2cSJim Jagielski XInitialization.class, m_xReferenceResolvedListener); 146*b1cdbd2cSJim Jagielski Object args[]=new Object[5]; 147*b1cdbd2cSJim Jagielski args[0] = new Integer(m_nSecurityId).toString(); 148*b1cdbd2cSJim Jagielski args[1] = m_xSAXEventKeeper; 149*b1cdbd2cSJim Jagielski args[2] = new Integer(m_nSignatureElementCollectorId).toString(); 150*b1cdbd2cSJim Jagielski args[3] = m_xXMLSecurityContext; 151*b1cdbd2cSJim Jagielski args[4] = m_xXMLSignature; 152*b1cdbd2cSJim Jagielski xInitialization.initialize(args); 153*b1cdbd2cSJim Jagielski 154*b1cdbd2cSJim Jagielski /* 155*b1cdbd2cSJim Jagielski * sets signature verify result listener. 156*b1cdbd2cSJim Jagielski */ 157*b1cdbd2cSJim Jagielski XSignatureVerifyResultBroadcaster xSignatureVerifyResultBroadcaster = 158*b1cdbd2cSJim Jagielski (XSignatureVerifyResultBroadcaster)UnoRuntime.queryInterface( 159*b1cdbd2cSJim Jagielski XSignatureVerifyResultBroadcaster.class, m_xReferenceResolvedListener); 160*b1cdbd2cSJim Jagielski xSignatureVerifyResultBroadcaster.addSignatureVerifyResultListener( 161*b1cdbd2cSJim Jagielski (XSignatureVerifyResultListener)UnoRuntime.queryInterface( 162*b1cdbd2cSJim Jagielski XSignatureVerifyResultListener.class, resultListener)); 163*b1cdbd2cSJim Jagielski } 164*b1cdbd2cSJim Jagielski catch( com.sun.star.uno.Exception e) 165*b1cdbd2cSJim Jagielski { 166*b1cdbd2cSJim Jagielski e.printStackTrace(); 167*b1cdbd2cSJim Jagielski } 168*b1cdbd2cSJim Jagielski } 169*b1cdbd2cSJim Jagielski 170*b1cdbd2cSJim Jagielski /* 171*b1cdbd2cSJim Jagielski * configures the resolve listener for the signature template. 172*b1cdbd2cSJim Jagielski */ 173*b1cdbd2cSJim Jagielski XReferenceResolvedBroadcaster xReferenceResolvedBroadcaster = 174*b1cdbd2cSJim Jagielski (XReferenceResolvedBroadcaster)UnoRuntime.queryInterface( 175*b1cdbd2cSJim Jagielski XReferenceResolvedBroadcaster.class, m_xSAXEventKeeper); 176*b1cdbd2cSJim Jagielski xReferenceResolvedBroadcaster.addReferenceResolvedListener( 177*b1cdbd2cSJim Jagielski m_nSignatureElementCollectorId, m_xReferenceResolvedListener); 178*b1cdbd2cSJim Jagielski } 179*b1cdbd2cSJim Jagielski 180*b1cdbd2cSJim Jagielski /************************************************************************************** 181*b1cdbd2cSJim Jagielski * private methods 182*b1cdbd2cSJim Jagielski **************************************************************************************/ 183*b1cdbd2cSJim Jagielski 184*b1cdbd2cSJim Jagielski /* 185*b1cdbd2cSJim Jagielski * checks whether this signature has a reference with 186*b1cdbd2cSJim Jagielski * the particular id. 187*b1cdbd2cSJim Jagielski */ hasReference(String id)188*b1cdbd2cSJim Jagielski private boolean hasReference(String id) 189*b1cdbd2cSJim Jagielski { 190*b1cdbd2cSJim Jagielski boolean rc = false; 191*b1cdbd2cSJim Jagielski 192*b1cdbd2cSJim Jagielski int length = m_vReferenceIds.size(); 193*b1cdbd2cSJim Jagielski for (int i=0; i<length; ++i) 194*b1cdbd2cSJim Jagielski { 195*b1cdbd2cSJim Jagielski if (id.equals((String)m_vReferenceIds.elementAt(i))) 196*b1cdbd2cSJim Jagielski { 197*b1cdbd2cSJim Jagielski rc = true; 198*b1cdbd2cSJim Jagielski break; 199*b1cdbd2cSJim Jagielski } 200*b1cdbd2cSJim Jagielski } 201*b1cdbd2cSJim Jagielski 202*b1cdbd2cSJim Jagielski return rc; 203*b1cdbd2cSJim Jagielski } 204*b1cdbd2cSJim Jagielski 205*b1cdbd2cSJim Jagielski 206*b1cdbd2cSJim Jagielski /************************************************************************************** 207*b1cdbd2cSJim Jagielski * protected methods 208*b1cdbd2cSJim Jagielski **************************************************************************************/ 209*b1cdbd2cSJim Jagielski 210*b1cdbd2cSJim Jagielski /* 211*b1cdbd2cSJim Jagielski * adds a new reference id. 212*b1cdbd2cSJim Jagielski */ addReferenceId(String referenceId)213*b1cdbd2cSJim Jagielski protected void addReferenceId(String referenceId) 214*b1cdbd2cSJim Jagielski { 215*b1cdbd2cSJim Jagielski m_vReferenceIds.add(referenceId); 216*b1cdbd2cSJim Jagielski } 217*b1cdbd2cSJim Jagielski 218*b1cdbd2cSJim Jagielski /* 219*b1cdbd2cSJim Jagielski * notifies how many reference in this signature. 220*b1cdbd2cSJim Jagielski */ setReferenceNumber()221*b1cdbd2cSJim Jagielski protected void setReferenceNumber() 222*b1cdbd2cSJim Jagielski { 223*b1cdbd2cSJim Jagielski try 224*b1cdbd2cSJim Jagielski { 225*b1cdbd2cSJim Jagielski XReferenceCollector xReferenceCollector = 226*b1cdbd2cSJim Jagielski (XReferenceCollector)UnoRuntime.queryInterface( 227*b1cdbd2cSJim Jagielski XReferenceCollector.class, m_xReferenceResolvedListener); 228*b1cdbd2cSJim Jagielski xReferenceCollector.setReferenceCount(m_vReferenceIds.size()); 229*b1cdbd2cSJim Jagielski } 230*b1cdbd2cSJim Jagielski catch( com.sun.star.uno.Exception e) 231*b1cdbd2cSJim Jagielski { 232*b1cdbd2cSJim Jagielski e.printStackTrace(); 233*b1cdbd2cSJim Jagielski } 234*b1cdbd2cSJim Jagielski } 235*b1cdbd2cSJim Jagielski 236*b1cdbd2cSJim Jagielski /* 237*b1cdbd2cSJim Jagielski * tries to add a reference to this signature. 238*b1cdbd2cSJim Jagielski * 239*b1cdbd2cSJim Jagielski * If the specific id belongs to this signature's references, then: 240*b1cdbd2cSJim Jagielski * 1. askes the SAXEventKeeper to add a ElementCollector to for the new 241*b1cdbd2cSJim Jagielski * referenced element; 242*b1cdbd2cSJim Jagielski * 2. configures this ElementCollector's security id; 243*b1cdbd2cSJim Jagielski * 3. tells the SAXEventKeeper which listener will receive the reference 244*b1cdbd2cSJim Jagielski * resolved notification. 245*b1cdbd2cSJim Jagielski * 4. notifies the SignatureCollector about the reference id. 246*b1cdbd2cSJim Jagielski */ setReference(String id, boolean isExporting)247*b1cdbd2cSJim Jagielski protected boolean setReference(String id, boolean isExporting) 248*b1cdbd2cSJim Jagielski { 249*b1cdbd2cSJim Jagielski boolean rc = false; 250*b1cdbd2cSJim Jagielski 251*b1cdbd2cSJim Jagielski if (hasReference(id)) 252*b1cdbd2cSJim Jagielski { 253*b1cdbd2cSJim Jagielski int referenceId = m_xSAXEventKeeper.addSecurityElementCollector( 254*b1cdbd2cSJim Jagielski isExporting? 255*b1cdbd2cSJim Jagielski (ElementMarkPriority.AFTERMODIFY):(ElementMarkPriority.BEFOREMODIFY), 256*b1cdbd2cSJim Jagielski false ); 257*b1cdbd2cSJim Jagielski 258*b1cdbd2cSJim Jagielski m_xSAXEventKeeper.setSecurityId(referenceId, m_nSecurityId); 259*b1cdbd2cSJim Jagielski 260*b1cdbd2cSJim Jagielski XReferenceResolvedBroadcaster xReferenceResolvedBroadcaster = 261*b1cdbd2cSJim Jagielski (XReferenceResolvedBroadcaster)UnoRuntime.queryInterface( 262*b1cdbd2cSJim Jagielski XReferenceResolvedBroadcaster.class, m_xSAXEventKeeper); 263*b1cdbd2cSJim Jagielski xReferenceResolvedBroadcaster.addReferenceResolvedListener( 264*b1cdbd2cSJim Jagielski referenceId, m_xReferenceResolvedListener); 265*b1cdbd2cSJim Jagielski 266*b1cdbd2cSJim Jagielski try 267*b1cdbd2cSJim Jagielski { 268*b1cdbd2cSJim Jagielski XReferenceCollector xReferenceCollector = 269*b1cdbd2cSJim Jagielski (XReferenceCollector)UnoRuntime.queryInterface( 270*b1cdbd2cSJim Jagielski XReferenceCollector.class, m_xReferenceResolvedListener); 271*b1cdbd2cSJim Jagielski xReferenceCollector.setReferenceId(referenceId); 272*b1cdbd2cSJim Jagielski } 273*b1cdbd2cSJim Jagielski catch( com.sun.star.uno.Exception e) 274*b1cdbd2cSJim Jagielski { 275*b1cdbd2cSJim Jagielski e.printStackTrace(); 276*b1cdbd2cSJim Jagielski } 277*b1cdbd2cSJim Jagielski 278*b1cdbd2cSJim Jagielski rc = true; 279*b1cdbd2cSJim Jagielski } 280*b1cdbd2cSJim Jagielski 281*b1cdbd2cSJim Jagielski return rc; 282*b1cdbd2cSJim Jagielski } 283*b1cdbd2cSJim Jagielski } 284*b1cdbd2cSJim Jagielski 285