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 #ifndef _SIGNATUREENGINE_HXX
25 #define _SIGNATUREENGINE_HXX
26 
27 #include <com/sun/star/xml/crypto/sax/XReferenceResolvedListener.hpp>
28 #include <com/sun/star/xml/crypto/sax/XReferenceResolvedBroadcaster.hpp>
29 #ifndef _COM_SUN_STAR_XML_CRYPTO_SAX_XSIGNATURECOLLECTOR_HPP_
30 #include <com/sun/star/xml/crypto/sax/XReferenceCollector.hpp>
31 #endif
32 #include <com/sun/star/xml/crypto/sax/XKeyCollector.hpp>
33 #include <com/sun/star/xml/crypto/sax/XMissionTaker.hpp>
34 #include <com/sun/star/xml/crypto/sax/XSAXEventKeeper.hpp>
35 #include <com/sun/star/xml/crypto/XXMLSecurityContext.hpp>
36 #include <com/sun/star/xml/crypto/XXMLSignature.hpp>
37 #include <com/sun/star/xml/crypto/XUriBinding.hpp>
38 #include <com/sun/star/io/XInputStream.hpp>
39 
40 #include <cppuhelper/implbase2.hxx>
41 
42 #include "securityengine.hxx"
43 
44 #ifndef INCLUDED_VECTOR
45 #include <vector>
46 #define INCLUDED_VECTOR
47 #endif
48 
49 class SignatureEngine : public cppu::ImplInheritanceHelper2
50 <
51 	SecurityEngine,
52 	com::sun::star::xml::crypto::sax::XReferenceCollector,
53 	com::sun::star::xml::crypto::XUriBinding
54 >
55 /****** signatureengine.hxx/CLASS SignatureEngine *****************************
56  *
57  *   NAME
58  *	SignatureEngine -- Base class of SignatureCreator and SignatureVerifier
59  *
60  *   FUNCTION
61  *	Maintains common members and methods related with signature operation.
62  *
63  *   HISTORY
64  *	05.01.2004 -	Interface supported: XReferenceCollector
65  *
66  *   AUTHOR
67  *	Michael Mi
68  *	Email: michael.mi@sun.com
69  ******************************************************************************/
70 {
71 protected:
72 
73 	/*
74 	 * the Signature bridge component, which performs signature generation
75 	 * and verification based on xmlsec library.
76 	 */
77 	com::sun::star::uno::Reference<
78 		com::sun::star::xml::crypto::XXMLSignature > m_xXMLSignature;
79 
80 	/*
81 	 * a collection of ElementCollector's ids. Each ElementCollector
82 	 * represents one element signed by this signature.
83 	 */
84 	std::vector< sal_Int32 > m_vReferenceIds;
85 
86 	/*
87 	 * remembers how many references this signature has.
88 	 */
89 	sal_Int32 m_nTotalReferenceNumber;
90 
91 	/*
92 	 * a collection of Uri binding.
93 	 *
94 	 * the m_vUris is used to hold the Uri strings, and the m_vXInputStreams is used
95 	 * to hold corresponding binded XInputStream interface.
96 	 */
97 	std::vector< rtl::OUString > m_vUris;
98 	std::vector< com::sun::star::uno::Reference<
99 		com::sun::star::io::XInputStream > > m_vXInputStreams;
100 
101 protected:
102 	SignatureEngine( );
~SignatureEngine()103 	virtual ~SignatureEngine() {};
104 
105 	virtual void tryToPerform( )
106 		throw (com::sun::star::uno::Exception, com::sun::star::uno::RuntimeException);
107 	virtual void clearUp( ) const;
108 	virtual bool checkReady() const;
109 
110 	/*
111 	 * starts the main function. This method will be implemented by any sub-class.
112 	 * For a SignatureCreator, it performs signing operation;
113 	 * for a SignatureVerifier, verification operation is performed.
114 	 */
startEngine(const com::sun::star::uno::Reference<com::sun::star::xml::crypto::XXMLSignatureTemplate> &)115 	virtual void startEngine( const com::sun::star::uno::Reference<
116                               com::sun::star::xml::crypto::XXMLSignatureTemplate >&)
117 		throw (com::sun::star::uno::Exception, com::sun::star::uno::RuntimeException)
118 		{};
119 
120 public:
121 	/* XReferenceCollector */
122 	virtual void SAL_CALL setReferenceCount( sal_Int32 count )
123 		throw (com::sun::star::uno::Exception, com::sun::star::uno::RuntimeException);
124 
125 	virtual void SAL_CALL setReferenceId( sal_Int32 id )
126 		throw (com::sun::star::uno::Exception, com::sun::star::uno::RuntimeException);
127 
128 	/* XUriBinding */
129 	virtual void SAL_CALL setUriBinding(
130 		const rtl::OUString& uri,
131 		const com::sun::star::uno::Reference<
132 			com::sun::star::io::XInputStream >& aInputStream )
133 		throw (com::sun::star::uno::Exception, com::sun::star::uno::RuntimeException);
134 	virtual com::sun::star::uno::Reference< com::sun::star::io::XInputStream >
135 		SAL_CALL getUriBinding( const rtl::OUString& uri )
136 		throw (com::sun::star::uno::Exception, com::sun::star::uno::RuntimeException);
137 };
138 
139 #endif
140 
141