X-Git-Url: http://www.project-moonshot.org/gitweb/?p=shibboleth%2Fcpp-xmltooling.git;a=blobdiff_plain;f=xmltoolingtest%2FEncryptionTest.h;h=b70c70f2a45bfafd508ed822a397cc37793da744;hp=cff6670d354ba66106d5c00f3c61f72487f372c6;hb=HEAD;hpb=c390bc9abfd5ef673577b2da3104c3f36fb1c18d diff --git a/xmltoolingtest/EncryptionTest.h b/xmltoolingtest/EncryptionTest.h index cff6670..b70c70f 100644 --- a/xmltoolingtest/EncryptionTest.h +++ b/xmltoolingtest/EncryptionTest.h @@ -1,117 +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 -#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 { - XSECCryptoKey* m_key; - vector m_certs; -public: - void setUp() { - string keypath=data_path + "key.pem"; - BIO* in=BIO_new(BIO_s_file_internal()); - if (in && BIO_read_filename(in,keypath.c_str())>0) { - EVP_PKEY* pkey=PEM_read_bio_PrivateKey(in, NULL, NULL, NULL); - if (pkey) { - m_key=new OpenSSLCryptoKeyRSA(pkey); - EVP_PKEY_free(pkey); - } - } - if (in) BIO_free(in); - TS_ASSERT(m_key!=NULL); - - string certpath=data_path + "cert.pem"; - in=BIO_new(BIO_s_file_internal()); - if (in && BIO_read_filename(in,certpath.c_str())>0) { - X509* x=NULL; - while (x=PEM_read_bio_X509(in,NULL,NULL,NULL)) { - m_certs.push_back(new OpenSSLCryptoX509(x)); - X509_free(x); - } - } - if (in) BIO_free(in); - TS_ASSERT(m_certs.size()>0); - - } - - void tearDown() { - delete m_key; - for_each(m_certs.begin(),m_certs.end(),xmltooling::cleanup()); - } - - void testBasic() { - TS_TRACE("testBasic"); - - string path=data_path + "ComplexXMLObject.xml"; - ifstream fs(path.c_str()); - DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs); - TS_ASSERT(doc!=NULL); - - try { - Encrypter encrypter; - Encrypter::EncryptionParams ep; - Encrypter::KeyEncryptionParams kep(DSIGConstants::s_unicodeStrURIRSA_1_5,m_key->clone()); - 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_key->clone())); - 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( + CHAINING_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; + } + } + +};