X-Git-Url: http://www.project-moonshot.org/gitweb/?p=shibboleth%2Fcpp-xmltooling.git;a=blobdiff_plain;f=xmltoolingtest%2FSignatureTest.h;h=49b528ed313f4eea80f575442ed0c224a7b643be;hp=394583ecc9b4a895e355647e411ed38e87eb9b99;hb=HEAD;hpb=085daff2d0c1d078f006f23808b4092130110eb9 diff --git a/xmltoolingtest/SignatureTest.h b/xmltoolingtest/SignatureTest.h index 394583e..49b528e 100644 --- a/xmltoolingtest/SignatureTest.h +++ b/xmltoolingtest/SignatureTest.h @@ -1,28 +1,36 @@ -/* - * Copyright 2001-2007 Internet2 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at +/** + * Licensed to the University Corporation for Advanced Internet + * Development, Inc. (UCAID) under one or more contributor license + * agreements. See the NOTICE file distributed with this work for + * additional information regarding copyright ownership. * - * http://www.apache.org/licenses/LICENSE-2.0 + * UCAID licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the + * License at * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific + * language governing permissions and limitations under the License. */ #include "XMLObjectBaseTestCase.h" +#include +#include #include +#include #include #include #include #include #include +#include class TestContext : public ContentReference { @@ -49,7 +57,7 @@ class TestValidator : public SignatureValidator XMLCh* m_uri; public: - TestValidator(const XMLCh* uri) : SignatureValidator(XMLToolingConfig::getConfig().KeyResolverManager.newPlugin(INLINE_KEY_RESOLVER,NULL)) { + TestValidator(const XMLCh* uri, const Credential* credential) : SignatureValidator(credential) { m_uri=XMLString::replicate(uri); } @@ -67,23 +75,13 @@ public: } }; -class _addcert : public std::binary_function { -public: - void operator()(X509Data* bag, XSECCryptoX509* cert) const { - safeBuffer& buf=cert->getDEREncodingSB(); - X509Certificate* x=X509CertificateBuilder::buildX509Certificate(); - x->setValue(buf.sbStrToXMLCh()); - bag->getX509Certificates().push_back(x); - } -}; - class SignatureTest : public CxxTest::TestSuite { CredentialResolver* m_resolver; public: void setUp() { - m_resolver=NULL; - QName qname(SimpleXMLObject::NAMESPACE,SimpleXMLObject::LOCAL_NAME); - QName qtype(SimpleXMLObject::NAMESPACE,SimpleXMLObject::TYPE_NAME); + m_resolver=nullptr; + xmltooling::QName qname(SimpleXMLObject::NAMESPACE,SimpleXMLObject::LOCAL_NAME); + xmltooling::QName qtype(SimpleXMLObject::NAMESPACE,SimpleXMLObject::TYPE_NAME); XMLObjectBuilder::registerBuilder(qname, new SimpleXMLObjectBuilder()); XMLObjectBuilder::registerBuilder(qtype, new SimpleXMLObjectBuilder()); @@ -92,25 +90,25 @@ public: DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(in); XercesJanitor janitor(doc); m_resolver = XMLToolingConfig::getConfig().CredentialResolverManager.newPlugin( - FILESYSTEM_CREDENTIAL_RESOLVER,doc->getDocumentElement() + CHAINING_CREDENTIAL_RESOLVER,doc->getDocumentElement() ); } void tearDown() { - QName qname(SimpleXMLObject::NAMESPACE,SimpleXMLObject::LOCAL_NAME); - QName qtype(SimpleXMLObject::NAMESPACE,SimpleXMLObject::TYPE_NAME); + xmltooling::QName qname(SimpleXMLObject::NAMESPACE,SimpleXMLObject::LOCAL_NAME); + xmltooling::QName qtype(SimpleXMLObject::NAMESPACE,SimpleXMLObject::TYPE_NAME); XMLObjectBuilder::deregisterBuilder(qname); XMLObjectBuilder::deregisterBuilder(qtype); delete m_resolver; } void testSignature() { - QName qname(SimpleXMLObject::NAMESPACE,SimpleXMLObject::LOCAL_NAME); + xmltooling::QName qname(SimpleXMLObject::NAMESPACE,SimpleXMLObject::LOCAL_NAME); const SimpleXMLObjectBuilder* b=dynamic_cast(XMLObjectBuilder::getBuilder(qname)); - TS_ASSERT(b!=NULL); + TS_ASSERT(b!=nullptr); auto_ptr sxObject(dynamic_cast(b->buildObject())); - TS_ASSERT(sxObject.get()!=NULL); + TS_ASSERT(sxObject.get()!=nullptr); VectorOf(SimpleXMLObject) kids=sxObject->getSimpleXMLObjects(); kids.push_back(dynamic_cast(b->buildObject())); kids.push_back(dynamic_cast(b->buildObject())); @@ -126,20 +124,16 @@ public: sxObject->setSignature(sig); sig->setContentReference(new TestContext(&chNull)); + CredentialCriteria cc; + cc.setUsage(Credential::SIGNING_CREDENTIAL); Locker locker(m_resolver); - sig->setSigningKey(m_resolver->getKey()); - - // Build KeyInfo. - KeyInfo* keyInfo=KeyInfoBuilder::buildKeyInfo(); - X509Data* x509Data=X509DataBuilder::buildX509Data(); - keyInfo->getX509Datas().push_back(x509Data); - for_each(m_resolver->getCertificates().begin(),m_resolver->getCertificates().end(),bind1st(_addcert(),x509Data)); - sig->setKeyInfo(keyInfo); + const Credential* cred = m_resolver->resolve(&cc); + TSM_ASSERT("Retrieved credential was null", cred!=nullptr); - DOMElement* rootElement = NULL; + DOMElement* rootElement = nullptr; try { - rootElement=sxObject->marshall((DOMDocument*)NULL); - sig->sign(); + vector sigs(1,sig); + rootElement=sxObject->marshall((DOMDocument*)nullptr,&sigs,cred); } catch (XMLToolingException& e) { TS_TRACE(e.what()); @@ -153,11 +147,11 @@ public: istringstream in(buf); DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(in); auto_ptr sxObject2(dynamic_cast(b->buildFromDocument(doc))); - TS_ASSERT(sxObject2.get()!=NULL); - TS_ASSERT(sxObject2->getSignature()!=NULL); + TS_ASSERT(sxObject2.get()!=nullptr); + TS_ASSERT(sxObject2->getSignature()!=nullptr); try { - TestValidator tv(&chNull); + TestValidator tv(&chNull, cred); tv.validate(sxObject2->getSignature()); } catch (XMLToolingException& e) {