X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=xmltooling%2Fencryption%2Fimpl%2FEncryptionImpl.cpp;h=9e766e2370f5c8a7e79ee57a05651fe354ae2fff;hb=73308303d23af62494bfeef0c0d5224c344c6d6f;hp=8e006da195429605f23ee28fd979bb6d13f5dfa1;hpb=3a89fe08a9cc882e435aa2976210b7b1ae4cd264;p=shibboleth%2Fcpp-xmltooling.git diff --git a/xmltooling/encryption/impl/EncryptionImpl.cpp b/xmltooling/encryption/impl/EncryptionImpl.cpp index 8e006da..9e766e2 100644 --- a/xmltooling/encryption/impl/EncryptionImpl.cpp +++ b/xmltooling/encryption/impl/EncryptionImpl.cpp @@ -35,6 +35,10 @@ #include "signature/KeyInfo.h" #include "util/XMLHelper.h" +#include +#include +#include +#include #include using namespace xmlencryption; @@ -72,6 +76,7 @@ namespace xmlencryption { m_pos_OAEPparams=m_pos_KeySize; ++m_pos_OAEPparams; } + public: virtual ~EncryptionMethodImpl() { XMLString::release(&m_Algorithm); @@ -85,14 +90,10 @@ namespace xmlencryption { EncryptionMethodImpl(const EncryptionMethodImpl& src) : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); - setAlgorithm(src.getAlgorithm()); - if (src.getKeySize()) - setKeySize(src.getKeySize()->cloneKeySize()); - if (src.getOAEPparams()) - setOAEPparams(src.getOAEPparams()->cloneOAEPparams()); - VectorOf(XMLObject) v=getUnknownXMLObjects(); - for (vector::const_iterator i=src.m_UnknownXMLObjects.begin(); i!=src.m_UnknownXMLObjects.end(); ++i) - v.push_back((*i)->clone()); + IMPL_CLONE_ATTRIB(Algorithm); + IMPL_CLONE_TYPED_CHILD(KeySize); + IMPL_CLONE_TYPED_CHILD(OAEPparams); + IMPL_CLONE_XMLOBJECT_CHILDREN(UnknownXMLObject); } IMPL_XMLOBJECT_CLONE(EncryptionMethod); @@ -141,12 +142,7 @@ namespace xmlencryption { TransformsImpl(const TransformsImpl& src) : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { - VectorOf(xmlsignature::Transform) v=getTransforms(); - for (vector::const_iterator i=src.m_Transforms.begin(); i!=src.m_Transforms.end(); i++) { - if (*i) { - v.push_back((*i)->cloneTransform()); - } - } + IMPL_CLONE_TYPED_FOREIGN_CHILDREN(Transform,xmlsignature); } IMPL_XMLOBJECT_CLONE(Transforms); @@ -171,6 +167,7 @@ namespace xmlencryption { m_children.push_back(nullptr); m_pos_Transforms=m_children.begin(); } + public: virtual ~CipherReferenceImpl() { XMLString::release(&m_URI); @@ -184,9 +181,8 @@ namespace xmlencryption { CipherReferenceImpl(const CipherReferenceImpl& src) : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); - setURI(src.getURI()); - if (src.getTransforms()) - setTransforms(src.getTransforms()->cloneTransforms()); + IMPL_CLONE_ATTRIB(URI); + IMPL_CLONE_TYPED_CHILD(Transforms); } IMPL_XMLOBJECT_CLONE(CipherReference); @@ -224,6 +220,7 @@ namespace xmlencryption { m_pos_CipherReference=m_pos_CipherValue; ++m_pos_CipherReference; } + public: virtual ~CipherDataImpl() {} @@ -235,10 +232,8 @@ namespace xmlencryption { CipherDataImpl(const CipherDataImpl& src) : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); - if (src.getCipherValue()) - setCipherValue(src.getCipherValue()->cloneCipherValue()); - if (src.getCipherReference()) - setCipherReference(src.getCipherReference()->cloneCipherReference()); + IMPL_CLONE_TYPED_CHILD(CipherValue); + IMPL_CLONE_TYPED_CHILD(CipherReference); } IMPL_XMLOBJECT_CLONE(CipherData); @@ -263,6 +258,7 @@ namespace xmlencryption { void init() { m_Id=m_Target=nullptr; } + public: virtual ~EncryptionPropertyImpl() { XMLString::release(&m_Id); @@ -280,11 +276,9 @@ namespace xmlencryption { AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); - setId(src.getId()); - setTarget(src.getTarget()); - VectorOf(XMLObject) v=getUnknownXMLObjects(); - for (vector::const_iterator i=src.m_UnknownXMLObjects.begin(); i!=src.m_UnknownXMLObjects.end(); ++i) - v.push_back((*i)->clone()); + IMPL_CLONE_ATTRIB(Id); + IMPL_CLONE_ATTRIB(Target); + IMPL_CLONE_XMLOBJECT_CHILDREN(UnknownXMLObject); } IMPL_XMLOBJECT_CLONE(EncryptionProperty); @@ -332,6 +326,7 @@ namespace xmlencryption { void init() { m_Id=nullptr; } + public: virtual ~EncryptionPropertiesImpl() { XMLString::release(&m_Id); @@ -345,13 +340,8 @@ namespace xmlencryption { EncryptionPropertiesImpl(const EncryptionPropertiesImpl& src) : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); - setId(src.getId()); - VectorOf(EncryptionProperty) v=getEncryptionPropertys(); - for (vector::const_iterator i=src.m_EncryptionPropertys.begin(); i!=src.m_EncryptionPropertys.end(); i++) { - if (*i) { - v.push_back((*i)->cloneEncryptionProperty()); - } - } + IMPL_CLONE_ATTRIB(Id); + IMPL_CLONE_TYPED_CHILDREN(EncryptionProperty); } IMPL_XMLOBJECT_CLONE(EncryptionProperties); @@ -391,20 +381,16 @@ namespace xmlencryption { } ReferenceTypeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) - : AbstractXMLObject(nsURI, localName, prefix, schemaType) { - m_URI=nullptr; + : AbstractXMLObject(nsURI, localName, prefix, schemaType), m_URI(nullptr) { } ReferenceTypeImpl(const ReferenceTypeImpl& src) - : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { - m_URI=nullptr; + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src), m_URI(nullptr) { } void _clone(const ReferenceTypeImpl& src) { - setURI(src.getURI()); - VectorOf(XMLObject) v=getUnknownXMLObjects(); - for (vector::const_iterator i=src.m_UnknownXMLObjects.begin(); i!=src.m_UnknownXMLObjects.end(); ++i) - v.push_back((*i)->clone()); + IMPL_CLONE_ATTRIB(URI); + IMPL_CLONE_XMLOBJECT_CHILDREN(UnknownXMLObject); } IMPL_XMLOBJECT_CLONE_EX(ReferenceType); @@ -467,21 +453,10 @@ namespace xmlencryption { ReferenceListImpl(const ReferenceListImpl& src) : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { - for (list::const_iterator i=src.m_children.begin(); i!=src.m_children.end(); i++) { - if (*i) { - DataReference* data=dynamic_cast(*i); - if (data) { - getDataReferences().push_back(data->cloneDataReference()); - continue; - } - - KeyReference* key=dynamic_cast(*i); - if (key) { - getKeyReferences().push_back(key->cloneKeyReference()); - continue; - } - } - } + IMPL_CLONE_CHILDBAG_BEGIN; + IMPL_CLONE_TYPED_CHILD_IN_BAG(DataReference); + IMPL_CLONE_TYPED_CHILD_IN_BAG(KeyReference); + IMPL_CLONE_CHILDBAG_END; } IMPL_XMLOBJECT_CLONE(ReferenceList); @@ -520,6 +495,7 @@ namespace xmlencryption { m_pos_EncryptionProperties=m_pos_CipherData; ++m_pos_EncryptionProperties; } + protected: EncryptedTypeImpl() { init(); @@ -544,18 +520,14 @@ namespace xmlencryption { } void _clone(const EncryptedTypeImpl& src) { - setId(src.getId()); - setType(src.getType()); - setMimeType(src.getMimeType()); - setEncoding(src.getEncoding()); - if (src.getEncryptionMethod()) - setEncryptionMethod(src.getEncryptionMethod()->cloneEncryptionMethod()); - if (src.getKeyInfo()) - setKeyInfo(src.getKeyInfo()->cloneKeyInfo()); - if (src.getCipherData()) - setCipherData(src.getCipherData()->cloneCipherData()); - if (src.getEncryptionProperties()) - setEncryptionProperties(src.getEncryptionProperties()->cloneEncryptionProperties()); + IMPL_CLONE_ATTRIB(Id); + IMPL_CLONE_ATTRIB(Type); + IMPL_CLONE_ATTRIB(MimeType); + IMPL_CLONE_ATTRIB(Encoding); + IMPL_CLONE_TYPED_CHILD(EncryptionMethod); + IMPL_CLONE_TYPED_CHILD(KeyInfo); + IMPL_CLONE_TYPED_CHILD(CipherData); + IMPL_CLONE_TYPED_CHILD(EncryptionProperties); } IMPL_XMLOBJECT_CLONE_EX(EncryptedType); @@ -636,15 +608,12 @@ namespace xmlencryption { void _clone(const EncryptedKeyImpl& src) { EncryptedTypeImpl::_clone(src); - setRecipient(src.getRecipient()); - if (src.getReferenceList()) - setReferenceList(src.getReferenceList()->cloneReferenceList()); - if (src.getCarriedKeyName()) - setCarriedKeyName(src.getCarriedKeyName()->cloneCarriedKeyName()); + IMPL_CLONE_ATTRIB(Recipient); + IMPL_CLONE_TYPED_CHILD(ReferenceList); + IMPL_CLONE_TYPED_CHILD(CarriedKeyName); } IMPL_XMLOBJECT_CLONE_EX(EncryptedKey); - IMPL_STRING_ATTRIB(Recipient); IMPL_TYPED_CHILD(ReferenceList); IMPL_TYPED_CHILD(CarriedKeyName);