#include <openssl/pem.h>\r
#include <xercesc/util/XMLUniDefs.hpp>\r
#include <xsec/dsig/DSIGReference.hpp>\r
+#include <xsec/enc/XSECKeyInfoResolverDefault.hpp>\r
#include <xsec/enc/OpenSSL/OpenSSLCryptoX509.hpp>\r
#include <xsec/enc/OpenSSL/OpenSSLCryptoKeyRSA.hpp>\r
\r
-class TestContext : public SigningContext\r
+class TestContext : public SigningContext, public VerifyingContext\r
{\r
XSECCryptoKey* m_key;\r
vector<XSECCryptoX509*> m_certs;\r
ref->appendEnvelopedSignatureTransform();\r
ref->appendCanonicalizationTransform(CANON_C14NE_NOC);\r
}\r
+\r
+ void verifySignature(DSIGSignature* sig) const {\r
+ const XMLCh* uri=sig->getReferenceList()->item(0)->getURI();\r
+ TSM_ASSERT_SAME_DATA("Reference URI does not match.",uri,m_uri,XMLString::stringLen(uri));\r
+ XSECKeyInfoResolverDefault resolver;\r
+ sig->setKeyInfoResolver(&resolver); // It will clone the resolver for us.\r
+ sig->verify();\r
+ }\r
\r
const std::vector<XSECCryptoX509*>& getX509Certificates() const { return m_certs; }\r
XSECCryptoKey* getSigningKey() const { return m_key->clone(); }\r
\r
void setUp() {\r
XMLObjectBuilder::registerBuilder(m_qname, new SimpleXMLObjectBuilder());\r
- Marshaller::registerMarshaller(m_qname, new SimpleXMLObjectMarshaller());\r
- Unmarshaller::registerUnmarshaller(m_qname, new SimpleXMLObjectUnmarshaller());\r
}\r
\r
void tearDown() {\r
XMLObjectBuilder::deregisterBuilder(m_qname);\r
- Marshaller::deregisterMarshaller(m_qname);\r
- Unmarshaller::deregisterUnmarshaller(m_qname);\r
}\r
\r
void testSignature() {\r
TS_TRACE("testSignature");\r
\r
- const XMLObjectBuilder* b=XMLObjectBuilder::getBuilder(m_qname);\r
+ const SimpleXMLObjectBuilder* b=dynamic_cast<const SimpleXMLObjectBuilder*>(XMLObjectBuilder::getBuilder(m_qname));\r
TS_ASSERT(b!=NULL);\r
\r
- auto_ptr<SimpleXMLObject> sxObject(dynamic_cast<SimpleXMLObject*>(b->buildObject()));\r
+ auto_ptr<SimpleXMLObject> sxObject(b->buildObject());\r
TS_ASSERT(sxObject.get()!=NULL);\r
VectorOf(SimpleXMLObject) kids=sxObject->getSimpleXMLObjects();\r
- kids.push_back(dynamic_cast<SimpleXMLObject*>(b->buildObject()));\r
- kids.push_back(dynamic_cast<SimpleXMLObject*>(b->buildObject()));\r
+ kids.push_back(b->buildObject());\r
+ kids.push_back(b->buildObject());\r
\r
// Test some collection stuff\r
auto_ptr_XMLCh foo("Foo");\r
// Signing context for the whole document.\r
TestContext tc(&chNull);\r
MarshallingContext mctx(sig,&tc);\r
- DOMElement* rootElement = Marshaller::getMarshaller(sxObject.get())->marshall(sxObject.get(),(DOMDocument*)NULL,&mctx);\r
+ DOMElement* rootElement = sxObject->marshall((DOMDocument*)NULL,&mctx);\r
\r
string buf;\r
XMLHelper::serialize(rootElement, buf);\r
\r
istringstream in(buf);\r
DOMDocument* doc=nonvalidatingPool->parse(in);\r
- const Unmarshaller* u = Unmarshaller::getUnmarshaller(doc->getDocumentElement());\r
- auto_ptr<SimpleXMLObject> sxObject2(dynamic_cast<SimpleXMLObject*>(u->unmarshall(doc->getDocumentElement(),true)));\r
+ auto_ptr<SimpleXMLObject> sxObject2(dynamic_cast<SimpleXMLObject*>(b->buildObject()->unmarshall(doc->getDocumentElement(),true)));\r
TS_ASSERT(sxObject2.get()!=NULL);\r
TS_ASSERT(sxObject2->getSignature()!=NULL);\r
+ \r
+ try {\r
+ sxObject2->getSignature()->verify(tc);\r
+ }\r
+ catch (SignatureException& e) {\r
+ TS_TRACE(e.what());\r
+ throw;\r
+ }\r
}\r
\r
};\r