X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=xmltoolingtest%2FEncryptionTest.h;h=e93d1cff2efdf7493be28bf4f55039daeaa2930b;hb=81b488b2790e7bdeb2f43560b1d4a7d22c3dfdf5;hp=3f88890af0b8554e1c07bbc2fc9d12208c6ab8ce;hpb=29ac236d46c15d0183af0fa084b703bd2e05d64c;p=shibboleth%2Fcpp-xmltooling.git diff --git a/xmltoolingtest/EncryptionTest.h b/xmltoolingtest/EncryptionTest.h index 3f88890..e93d1cf 100644 --- a/xmltoolingtest/EncryptionTest.h +++ b/xmltoolingtest/EncryptionTest.h @@ -1,93 +1,98 @@ -/* - * Copyright 2001-2005 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 - * - * 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 - -using namespace xmlencryption; - -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 EncryptionTest : public CxxTest::TestSuite { - CredentialResolver* m_resolver; -public: - void setUp() { - m_resolver=NULL; - string config = data_path + "FilesystemCredentialResolver.xml"; - ifstream in(config.c_str()); - DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(in); - XercesJanitor janitor(doc); - m_resolver = XMLToolingConfig::getConfig().CredentialResolverManager.newPlugin( - FILESYSTEM_CREDENTIAL_RESOLVER,doc->getDocumentElement() - ); - } - - void tearDown() { - delete m_resolver; - } - - void testEncryption() { - string path=data_path + "ComplexXMLObject.xml"; - ifstream fs(path.c_str()); - DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs); - TS_ASSERT(doc!=NULL); - - try { - Locker locker(m_resolver); - Encrypter encrypter; - Encrypter::EncryptionParams ep; - Encrypter::KeyEncryptionParams kep(DSIGConstants::s_unicodeStrURIRSA_1_5,m_resolver->getKey()); - auto_ptr encData(encrypter.encryptElement(doc->getDocumentElement(),ep,&kep)); - - string buf; - XMLHelper::serialize(encData->marshall(), buf); - istringstream is(buf); - DOMDocument* doc2=XMLToolingConfig::getConfig().getValidatingParser().parse(is); - auto_ptr encData2( - dynamic_cast(XMLObjectBuilder::buildOneFromElement(doc2->getDocumentElement(),true)) - ); - - Decrypter decrypter(new KeyResolver(m_resolver->getKey())); - DOMDocumentFragment* frag = decrypter.decryptData(encData2.get()); - XMLHelper::serialize(static_cast(frag->getFirstChild()), buf); - //TS_TRACE(buf.c_str()); - TS_ASSERT(doc->getDocumentElement()->isEqualNode(frag->getFirstChild())); - frag->release(); - doc->release(); - } - catch (XMLToolingException& e) { - TS_TRACE(e.what()); - doc->release(); - throw; - } - } - -}; +/** + * 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. + * + * 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 + * + * 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 + +using namespace xmlencryption; + +class EncryptionTest : public CxxTest::TestSuite { + CredentialResolver* m_resolver; +public: + void setUp() { + m_resolver=nullptr; + string config = data_path + "FilesystemCredentialResolver.xml"; + ifstream in(config.c_str()); + DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(in); + XercesJanitor janitor(doc); + m_resolver = XMLToolingConfig::getConfig().CredentialResolverManager.newPlugin( + FILESYSTEM_CREDENTIAL_RESOLVER,doc->getDocumentElement() + ); + XMLObjectBuilder::registerDefaultBuilder(new UnknownElementBuilder()); + } + + void tearDown() { + XMLObjectBuilder::deregisterDefaultBuilder(); + delete m_resolver; + } + + void testEncryption() { + string path=data_path + "ComplexXMLObject.xml"; + ifstream fs(path.c_str()); + DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs); + TS_ASSERT(doc!=nullptr); + + try { + CredentialCriteria cc; + cc.setUsage(Credential::ENCRYPTION_CREDENTIAL); + Locker locker(m_resolver); + const Credential* cred=m_resolver->resolve(&cc); + TSM_ASSERT("Retrieved credential was null", cred!=nullptr); + + Encrypter encrypter; + Encrypter::EncryptionParams ep; + Encrypter::KeyEncryptionParams kep(*cred); + auto_ptr encData(encrypter.encryptElement(doc->getDocumentElement(),ep,&kep)); + + string buf; + XMLHelper::serialize(encData->marshall(), buf); + //TS_TRACE(buf.c_str()); + istringstream is(buf); + DOMDocument* doc2=XMLToolingConfig::getConfig().getValidatingParser().parse(is); + auto_ptr encData2( + dynamic_cast(XMLObjectBuilder::buildOneFromElement(doc2->getDocumentElement(),true)) + ); + + Decrypter decrypter(m_resolver); + DOMDocumentFragment* frag = decrypter.decryptData(*encData2.get()); + XMLHelper::serialize(static_cast(frag->getFirstChild()), buf); + //TS_TRACE(buf.c_str()); + TS_ASSERT(doc->getDocumentElement()->isEqualNode(frag->getFirstChild())); + frag->release(); + doc->release(); + } + catch (XMLToolingException& e) { + TS_TRACE(e.what()); + doc->release(); + throw; + } + } + +};