2 * Licensed to the University Corporation for Advanced Internet
3 * Development, Inc. (UCAID) under one or more contributor license
4 * agreements. See the NOTICE file distributed with this work for
5 * additional information regarding copyright ownership.
7 * UCAID licenses this file to you under the Apache License,
8 * Version 2.0 (the "License"); you may not use this file except
9 * in compliance with the License. You may obtain a copy of the
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing,
15 * software distributed under the License is distributed on an
16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
17 * either express or implied. See the License for the specific
18 * language governing permissions and limitations under the License.
24 * Implementation classes for XML Encryption schema.
28 #include "AbstractAttributeExtensibleXMLObject.h"
29 #include "AbstractComplexElement.h"
30 #include "AbstractSimpleElement.h"
31 #include "exceptions.h"
32 #include "encryption/Encryption.h"
33 #include "io/AbstractXMLObjectMarshaller.h"
34 #include "io/AbstractXMLObjectUnmarshaller.h"
35 #include "signature/KeyInfo.h"
36 #include "util/XMLHelper.h"
38 #include <boost/lambda/bind.hpp>
39 #include <boost/lambda/casts.hpp>
40 #include <boost/lambda/if.hpp>
41 #include <boost/lambda/lambda.hpp>
42 #include <xercesc/util/XMLUniDefs.hpp>
44 using namespace xmlencryption;
45 using namespace xmltooling;
46 using namespace xercesc;
48 using xmlconstants::XMLENC_NS;
49 using xmlconstants::XMLSIG_NS;
51 #if defined (_MSC_VER)
52 #pragma warning( push )
53 #pragma warning( disable : 4250 4251 )
56 namespace xmlencryption {
58 DECL_XMLOBJECTIMPL_SIMPLE(XMLTOOL_DLLLOCAL,CarriedKeyName);
59 DECL_XMLOBJECTIMPL_SIMPLE(XMLTOOL_DLLLOCAL,CipherValue);
60 DECL_XMLOBJECTIMPL_SIMPLE(XMLTOOL_DLLLOCAL,KeySize);
61 DECL_XMLOBJECTIMPL_SIMPLE(XMLTOOL_DLLLOCAL,OAEPparams);
63 class XMLTOOL_DLLLOCAL EncryptionMethodImpl : public virtual EncryptionMethod,
64 public AbstractComplexElement,
65 public AbstractDOMCachingXMLObject,
66 public AbstractXMLObjectMarshaller,
67 public AbstractXMLObjectUnmarshaller
73 m_children.push_back(nullptr);
74 m_children.push_back(nullptr);
75 m_pos_KeySize=m_children.begin();
76 m_pos_OAEPparams=m_pos_KeySize;
81 virtual ~EncryptionMethodImpl() {
82 XMLString::release(&m_Algorithm);
85 EncryptionMethodImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType)
86 : AbstractXMLObject(nsURI, localName, prefix, schemaType) {
90 EncryptionMethodImpl(const EncryptionMethodImpl& src)
91 : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) {
93 IMPL_CLONE_ATTRIB(Algorithm);
94 IMPL_CLONE_TYPED_CHILD(KeySize);
95 IMPL_CLONE_TYPED_CHILD(OAEPparams);
96 IMPL_CLONE_XMLOBJECT_CHILDREN(UnknownXMLObject);
99 IMPL_XMLOBJECT_CLONE(EncryptionMethod);
100 IMPL_STRING_ATTRIB(Algorithm);
101 IMPL_TYPED_CHILD(KeySize);
102 IMPL_TYPED_CHILD(OAEPparams);
103 IMPL_XMLOBJECT_CHILDREN(UnknownXMLObject,m_children.end());
106 void marshallAttributes(DOMElement* domElement) const {
107 MARSHALL_STRING_ATTRIB(Algorithm,ALGORITHM,nullptr);
110 void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
111 PROC_TYPED_CHILD(KeySize,XMLENC_NS,false);
112 PROC_TYPED_CHILD(OAEPparams,XMLENC_NS,false);
115 const XMLCh* nsURI=root->getNamespaceURI();
116 if (!XMLString::equals(nsURI,XMLENC_NS) && nsURI && *nsURI) {
117 getUnknownXMLObjects().push_back(childXMLObject);
121 AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root);
124 void processAttribute(const DOMAttr* attribute) {
125 PROC_STRING_ATTRIB(Algorithm,ALGORITHM,nullptr);
126 AbstractXMLObjectUnmarshaller::processAttribute(attribute);
130 class XMLTOOL_DLLLOCAL TransformsImpl : public virtual Transforms,
131 public AbstractComplexElement,
132 public AbstractDOMCachingXMLObject,
133 public AbstractXMLObjectMarshaller,
134 public AbstractXMLObjectUnmarshaller
137 virtual ~TransformsImpl() {}
139 TransformsImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType)
140 : AbstractXMLObject(nsURI, localName, prefix, schemaType) {
143 TransformsImpl(const TransformsImpl& src)
144 : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) {
145 IMPL_CLONE_TYPED_FOREIGN_CHILDREN(Transform,xmlsignature);
148 IMPL_XMLOBJECT_CLONE(Transforms);
149 IMPL_TYPED_FOREIGN_CHILDREN(Transform,xmlsignature,m_children.end());
152 void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
153 PROC_TYPED_FOREIGN_CHILDREN(Transform,xmlsignature,XMLSIG_NS,false);
154 AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root);
158 class XMLTOOL_DLLLOCAL CipherReferenceImpl : public virtual CipherReference,
159 public AbstractComplexElement,
160 public AbstractDOMCachingXMLObject,
161 public AbstractXMLObjectMarshaller,
162 public AbstractXMLObjectUnmarshaller
166 m_Transforms=nullptr;
167 m_children.push_back(nullptr);
168 m_pos_Transforms=m_children.begin();
172 virtual ~CipherReferenceImpl() {
173 XMLString::release(&m_URI);
176 CipherReferenceImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType)
177 : AbstractXMLObject(nsURI, localName, prefix, schemaType) {
181 CipherReferenceImpl(const CipherReferenceImpl& src)
182 : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) {
184 IMPL_CLONE_ATTRIB(URI);
185 IMPL_CLONE_TYPED_CHILD(Transforms);
188 IMPL_XMLOBJECT_CLONE(CipherReference);
189 IMPL_STRING_ATTRIB(URI);
190 IMPL_TYPED_CHILD(Transforms);
193 void marshallAttributes(DOMElement* domElement) const {
194 MARSHALL_STRING_ATTRIB(URI,URI,nullptr);
197 void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
198 PROC_TYPED_CHILD(Transforms,XMLENC_NS,false);
199 AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root);
202 void processAttribute(const DOMAttr* attribute) {
203 PROC_STRING_ATTRIB(URI,URI,nullptr);
204 AbstractXMLObjectUnmarshaller::processAttribute(attribute);
208 class XMLTOOL_DLLLOCAL CipherDataImpl : public virtual CipherData,
209 public AbstractComplexElement,
210 public AbstractDOMCachingXMLObject,
211 public AbstractXMLObjectMarshaller,
212 public AbstractXMLObjectUnmarshaller
215 m_CipherValue=nullptr;
216 m_CipherReference=nullptr;
217 m_children.push_back(nullptr);
218 m_children.push_back(nullptr);
219 m_pos_CipherValue=m_children.begin();
220 m_pos_CipherReference=m_pos_CipherValue;
221 ++m_pos_CipherReference;
225 virtual ~CipherDataImpl() {}
227 CipherDataImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType)
228 : AbstractXMLObject(nsURI, localName, prefix, schemaType) {
232 CipherDataImpl(const CipherDataImpl& src)
233 : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) {
235 IMPL_CLONE_TYPED_CHILD(CipherValue);
236 IMPL_CLONE_TYPED_CHILD(CipherReference);
239 IMPL_XMLOBJECT_CLONE(CipherData);
240 IMPL_TYPED_CHILD(CipherValue);
241 IMPL_TYPED_CHILD(CipherReference);
244 void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
245 PROC_TYPED_CHILD(CipherValue,XMLENC_NS,false);
246 PROC_TYPED_CHILD(CipherReference,XMLENC_NS,false);
247 AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root);
251 class XMLTOOL_DLLLOCAL EncryptionPropertyImpl : public virtual EncryptionProperty,
252 public AbstractAttributeExtensibleXMLObject,
253 public AbstractComplexElement,
254 public AbstractDOMCachingXMLObject,
255 public AbstractXMLObjectMarshaller,
256 public AbstractXMLObjectUnmarshaller
259 m_Id=m_Target=nullptr;
263 virtual ~EncryptionPropertyImpl() {
264 XMLString::release(&m_Id);
265 XMLString::release(&m_Target);
268 EncryptionPropertyImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType)
269 : AbstractXMLObject(nsURI, localName, prefix, schemaType) {
273 EncryptionPropertyImpl(const EncryptionPropertyImpl& src)
274 : AbstractXMLObject(src),
275 AbstractAttributeExtensibleXMLObject(src),
276 AbstractComplexElement(src),
277 AbstractDOMCachingXMLObject(src) {
279 IMPL_CLONE_ATTRIB(Id);
280 IMPL_CLONE_ATTRIB(Target);
281 IMPL_CLONE_XMLOBJECT_CHILDREN(UnknownXMLObject);
284 IMPL_XMLOBJECT_CLONE(EncryptionProperty);
285 IMPL_ID_ATTRIB_EX(Id,ID,nullptr);
286 IMPL_STRING_ATTRIB(Target);
287 IMPL_XMLOBJECT_CHILDREN(UnknownXMLObject, m_children.end());
289 void setAttribute(const xmltooling::QName& qualifiedName, const XMLCh* value, bool ID=false) {
290 if (!qualifiedName.hasNamespaceURI()) {
291 if (XMLString::equals(qualifiedName.getLocalPart(),ID_ATTRIB_NAME)) {
295 else if (XMLString::equals(qualifiedName.getLocalPart(),TARGET_ATTRIB_NAME)) {
300 AbstractAttributeExtensibleXMLObject::setAttribute(qualifiedName, value, ID);
304 void marshallAttributes(DOMElement* domElement) const {
305 MARSHALL_ID_ATTRIB(Id,ID,nullptr);
306 MARSHALL_STRING_ATTRIB(Target,TARGET,nullptr);
307 marshallExtensionAttributes(domElement);
310 void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
311 getUnknownXMLObjects().push_back(childXMLObject);
314 void processAttribute(const DOMAttr* attribute) {
315 PROC_ID_ATTRIB(Id,ID,nullptr);
316 unmarshallExtensionAttribute(attribute);
320 class XMLTOOL_DLLLOCAL EncryptionPropertiesImpl : public virtual EncryptionProperties,
321 public AbstractComplexElement,
322 public AbstractDOMCachingXMLObject,
323 public AbstractXMLObjectMarshaller,
324 public AbstractXMLObjectUnmarshaller
331 virtual ~EncryptionPropertiesImpl() {
332 XMLString::release(&m_Id);
335 EncryptionPropertiesImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType)
336 : AbstractXMLObject(nsURI, localName, prefix, schemaType) {
340 EncryptionPropertiesImpl(const EncryptionPropertiesImpl& src)
341 : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) {
343 IMPL_CLONE_ATTRIB(Id);
344 IMPL_CLONE_TYPED_CHILDREN(EncryptionProperty);
347 IMPL_XMLOBJECT_CLONE(EncryptionProperties);
348 IMPL_ID_ATTRIB_EX(Id,ID,nullptr);
349 IMPL_TYPED_CHILDREN(EncryptionProperty,m_children.end());
352 void marshallAttributes(DOMElement* domElement) const {
353 MARSHALL_ID_ATTRIB(Id,ID,nullptr);
356 void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
357 PROC_TYPED_CHILDREN(EncryptionProperty,XMLENC_NS,false);
358 AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root);
361 void processAttribute(const DOMAttr* attribute) {
362 PROC_ID_ATTRIB(Id,ID,nullptr);
363 AbstractXMLObjectUnmarshaller::processAttribute(attribute);
367 class XMLTOOL_DLLLOCAL ReferenceTypeImpl : public virtual ReferenceType,
368 public AbstractComplexElement,
369 public AbstractDOMCachingXMLObject,
370 public AbstractXMLObjectMarshaller,
371 public AbstractXMLObjectUnmarshaller
374 ReferenceTypeImpl() {
379 virtual ~ReferenceTypeImpl() {
380 XMLString::release(&m_URI);
383 ReferenceTypeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType)
384 : AbstractXMLObject(nsURI, localName, prefix, schemaType), m_URI(nullptr) {
387 ReferenceTypeImpl(const ReferenceTypeImpl& src)
388 : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src), m_URI(nullptr) {
391 void _clone(const ReferenceTypeImpl& src) {
392 IMPL_CLONE_ATTRIB(URI);
393 IMPL_CLONE_XMLOBJECT_CHILDREN(UnknownXMLObject);
396 IMPL_XMLOBJECT_CLONE_EX(ReferenceType);
397 IMPL_STRING_ATTRIB(URI);
398 IMPL_XMLOBJECT_CHILDREN(UnknownXMLObject,m_children.end());
401 void marshallAttributes(DOMElement* domElement) const {
402 MARSHALL_STRING_ATTRIB(URI,URI,nullptr);
405 void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
406 getUnknownXMLObjects().push_back(childXMLObject);
409 void processAttribute(const DOMAttr* attribute) {
410 PROC_STRING_ATTRIB(URI,URI,nullptr);
411 AbstractXMLObjectUnmarshaller::processAttribute(attribute);
415 class XMLTOOL_DLLLOCAL DataReferenceImpl : public virtual DataReference, public ReferenceTypeImpl
418 virtual ~DataReferenceImpl() {}
420 DataReferenceImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType)
421 : AbstractXMLObject(nsURI, localName, prefix, schemaType) {}
423 DataReferenceImpl(const DataReferenceImpl& src) : AbstractXMLObject(src), ReferenceTypeImpl(src) {}
425 IMPL_XMLOBJECT_CLONE_EX(DataReference);
428 class XMLTOOL_DLLLOCAL KeyReferenceImpl : public virtual KeyReference, public ReferenceTypeImpl
431 virtual ~KeyReferenceImpl() {}
433 KeyReferenceImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType)
434 : AbstractXMLObject(nsURI, localName, prefix, schemaType) {}
436 KeyReferenceImpl(const KeyReferenceImpl& src) : AbstractXMLObject(src), ReferenceTypeImpl(src) {}
438 IMPL_XMLOBJECT_CLONE_EX(KeyReference);
441 class XMLTOOL_DLLLOCAL ReferenceListImpl : public virtual ReferenceList,
442 public AbstractComplexElement,
443 public AbstractDOMCachingXMLObject,
444 public AbstractXMLObjectMarshaller,
445 public AbstractXMLObjectUnmarshaller
448 virtual ~ReferenceListImpl() {}
450 ReferenceListImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType)
451 : AbstractXMLObject(nsURI, localName, prefix, schemaType) {
454 ReferenceListImpl(const ReferenceListImpl& src)
455 : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) {
456 IMPL_CLONE_CHILDBAG_BEGIN;
457 IMPL_CLONE_TYPED_CHILD_IN_BAG(DataReference);
458 IMPL_CLONE_TYPED_CHILD_IN_BAG(KeyReference);
459 IMPL_CLONE_CHILDBAG_END;
462 IMPL_XMLOBJECT_CLONE(ReferenceList);
463 IMPL_TYPED_CHILDREN(DataReference,m_children.end());
464 IMPL_TYPED_CHILDREN(KeyReference,m_children.end());
467 void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
468 PROC_TYPED_CHILDREN(DataReference,XMLENC_NS,false);
469 PROC_TYPED_CHILDREN(KeyReference,XMLENC_NS,false);
470 AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root);
474 class XMLTOOL_DLLLOCAL EncryptedTypeImpl : public virtual EncryptedType,
475 public AbstractComplexElement,
476 public AbstractDOMCachingXMLObject,
477 public AbstractXMLObjectMarshaller,
478 public AbstractXMLObjectUnmarshaller
481 m_Id=m_Type=m_MimeType=m_Encoding=nullptr;
482 m_EncryptionMethod=nullptr;
484 m_CipherData=nullptr;
485 m_EncryptionProperties=nullptr;
486 m_children.push_back(nullptr);
487 m_children.push_back(nullptr);
488 m_children.push_back(nullptr);
489 m_children.push_back(nullptr);
490 m_pos_EncryptionMethod=m_children.begin();
491 m_pos_KeyInfo=m_pos_EncryptionMethod;
493 m_pos_CipherData=m_pos_KeyInfo;
495 m_pos_EncryptionProperties=m_pos_CipherData;
496 ++m_pos_EncryptionProperties;
500 EncryptedTypeImpl() {
505 virtual ~EncryptedTypeImpl() {
506 XMLString::release(&m_Id);
507 XMLString::release(&m_Type);
508 XMLString::release(&m_MimeType);
509 XMLString::release(&m_Encoding);
512 EncryptedTypeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType)
513 : AbstractXMLObject(nsURI, localName, prefix, schemaType) {
517 EncryptedTypeImpl(const EncryptedTypeImpl& src)
518 : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) {
522 void _clone(const EncryptedTypeImpl& src) {
523 IMPL_CLONE_ATTRIB(Id);
524 IMPL_CLONE_ATTRIB(Type);
525 IMPL_CLONE_ATTRIB(MimeType);
526 IMPL_CLONE_ATTRIB(Encoding);
527 IMPL_CLONE_TYPED_CHILD(EncryptionMethod);
528 IMPL_CLONE_TYPED_CHILD(KeyInfo);
529 IMPL_CLONE_TYPED_CHILD(CipherData);
530 IMPL_CLONE_TYPED_CHILD(EncryptionProperties);
533 IMPL_XMLOBJECT_CLONE_EX(EncryptedType);
534 IMPL_ID_ATTRIB_EX(Id,ID,nullptr);
535 IMPL_STRING_ATTRIB(Type);
536 IMPL_STRING_ATTRIB(MimeType);
537 IMPL_STRING_ATTRIB(Encoding);
538 IMPL_TYPED_CHILD(EncryptionMethod);
539 IMPL_TYPED_FOREIGN_CHILD(KeyInfo,xmlsignature);
540 IMPL_TYPED_CHILD(CipherData);
541 IMPL_TYPED_CHILD(EncryptionProperties);
544 void marshallAttributes(DOMElement* domElement) const {
545 MARSHALL_ID_ATTRIB(Id,ID,nullptr);
546 MARSHALL_STRING_ATTRIB(Type,TYPE,nullptr);
547 MARSHALL_STRING_ATTRIB(MimeType,MIMETYPE,nullptr);
548 MARSHALL_STRING_ATTRIB(Encoding,ENCODING,nullptr);
551 void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
552 PROC_TYPED_CHILD(EncryptionMethod,XMLENC_NS,false);
553 PROC_TYPED_FOREIGN_CHILD(KeyInfo,xmlsignature,XMLSIG_NS,false);
554 PROC_TYPED_CHILD(CipherData,XMLENC_NS,false);
555 PROC_TYPED_CHILD(EncryptionProperties,XMLENC_NS,false);
556 AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root);
559 void processAttribute(const DOMAttr* attribute) {
560 PROC_ID_ATTRIB(Id,ID,nullptr);
561 PROC_STRING_ATTRIB(Type,TYPE,nullptr);
562 PROC_STRING_ATTRIB(MimeType,MIMETYPE,nullptr);
563 PROC_STRING_ATTRIB(Encoding,ENCODING,nullptr);
564 AbstractXMLObjectUnmarshaller::processAttribute(attribute);
568 class XMLTOOL_DLLLOCAL EncryptedDataImpl : public virtual EncryptedData, public EncryptedTypeImpl
571 virtual ~EncryptedDataImpl() {}
573 EncryptedDataImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType)
574 : AbstractXMLObject(nsURI, localName, prefix, schemaType) {}
576 EncryptedDataImpl(const EncryptedDataImpl& src) : AbstractXMLObject(src), EncryptedTypeImpl(src) {}
578 IMPL_XMLOBJECT_CLONE_EX(EncryptedData);
581 class XMLTOOL_DLLLOCAL EncryptedKeyImpl : public virtual EncryptedKey, public EncryptedTypeImpl
585 m_ReferenceList=nullptr;
586 m_CarriedKeyName=nullptr;
587 m_children.push_back(nullptr);
588 m_children.push_back(nullptr);
589 m_pos_ReferenceList=m_pos_EncryptionProperties;
590 ++m_pos_ReferenceList;
591 m_pos_CarriedKeyName=m_pos_ReferenceList;
592 ++m_pos_CarriedKeyName;
596 virtual ~EncryptedKeyImpl() {
597 XMLString::release(&m_Recipient);
600 EncryptedKeyImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType)
601 : AbstractXMLObject(nsURI, localName, prefix, schemaType) {
605 EncryptedKeyImpl(const EncryptedKeyImpl& src) : AbstractXMLObject(src), EncryptedTypeImpl(src) {
609 void _clone(const EncryptedKeyImpl& src) {
610 EncryptedTypeImpl::_clone(src);
611 IMPL_CLONE_ATTRIB(Recipient);
612 IMPL_CLONE_TYPED_CHILD(ReferenceList);
613 IMPL_CLONE_TYPED_CHILD(CarriedKeyName);
616 IMPL_XMLOBJECT_CLONE_EX(EncryptedKey);
617 IMPL_STRING_ATTRIB(Recipient);
618 IMPL_TYPED_CHILD(ReferenceList);
619 IMPL_TYPED_CHILD(CarriedKeyName);
622 void marshallAttributes(DOMElement* domElement) const {
623 MARSHALL_STRING_ATTRIB(Recipient,RECIPIENT,nullptr);
624 EncryptedTypeImpl::marshallAttributes(domElement);
627 void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
628 PROC_TYPED_CHILD(ReferenceList,XMLENC_NS,false);
629 PROC_TYPED_CHILD(CarriedKeyName,XMLENC_NS,false);
630 EncryptedTypeImpl::processChildElement(childXMLObject,root);
633 void processAttribute(const DOMAttr* attribute) {
634 PROC_STRING_ATTRIB(Recipient,RECIPIENT,nullptr);
635 EncryptedTypeImpl::processAttribute(attribute);
641 #if defined (_MSC_VER)
642 #pragma warning( pop )
645 // Builder Implementations
647 IMPL_XMLOBJECTBUILDER(CarriedKeyName);
648 IMPL_XMLOBJECTBUILDER(CipherData);
649 IMPL_XMLOBJECTBUILDER(CipherReference);
650 IMPL_XMLOBJECTBUILDER(CipherValue);
651 IMPL_XMLOBJECTBUILDER(DataReference);
652 IMPL_XMLOBJECTBUILDER(EncryptedData);
653 IMPL_XMLOBJECTBUILDER(EncryptedKey);
654 IMPL_XMLOBJECTBUILDER(EncryptionMethod);
655 IMPL_XMLOBJECTBUILDER(EncryptionProperties);
656 IMPL_XMLOBJECTBUILDER(EncryptionProperty);
657 IMPL_XMLOBJECTBUILDER(KeyReference);
658 IMPL_XMLOBJECTBUILDER(KeySize);
659 IMPL_XMLOBJECTBUILDER(OAEPparams);
660 IMPL_XMLOBJECTBUILDER(ReferenceList);
661 IMPL_XMLOBJECTBUILDER(Transforms);
665 const XMLCh CarriedKeyName::LOCAL_NAME[] = UNICODE_LITERAL_14(C,a,r,r,i,e,d,K,e,y,N,a,m,e);
666 const XMLCh CipherData::LOCAL_NAME[] = UNICODE_LITERAL_10(C,i,p,h,e,r,D,a,t,a);
667 const XMLCh CipherData::TYPE_NAME[] = UNICODE_LITERAL_14(C,i,p,h,e,r,D,a,t,a,T,y,p,e);
668 const XMLCh CipherReference::LOCAL_NAME[] = UNICODE_LITERAL_15(C,i,p,h,e,r,R,e,f,e,r,e,n,c,e);
669 const XMLCh CipherReference::TYPE_NAME[] = UNICODE_LITERAL_19(C,i,p,h,e,r,R,e,f,e,r,e,n,c,e,T,y,p,e);
670 const XMLCh CipherReference::URI_ATTRIB_NAME[] = UNICODE_LITERAL_3(U,R,I);
671 const XMLCh CipherValue::LOCAL_NAME[] = UNICODE_LITERAL_11(C,i,p,h,e,r,V,a,l,u,e);
672 const XMLCh DataReference::LOCAL_NAME[] = UNICODE_LITERAL_13(D,a,t,a,R,e,f,e,r,e,n,c,e);
673 const XMLCh EncryptedData::LOCAL_NAME[] = UNICODE_LITERAL_13(E,n,c,r,y,p,t,e,d,D,a,t,a);
674 const XMLCh EncryptedData::TYPE_NAME[] = UNICODE_LITERAL_17(E,n,c,r,y,p,t,e,d,D,a,t,a,T,y,p,e);
675 const XMLCh EncryptedKey::LOCAL_NAME[] = UNICODE_LITERAL_12(E,n,c,r,y,p,t,e,d,K,e,y);
676 const XMLCh EncryptedKey::TYPE_NAME[] = UNICODE_LITERAL_16(E,n,c,r,y,p,t,e,d,K,e,y,T,y,p,e);
677 const XMLCh EncryptedKey::RECIPIENT_ATTRIB_NAME[] = UNICODE_LITERAL_9(R,e,c,i,p,i,e,n,t);
678 const XMLCh EncryptedType::LOCAL_NAME[] = {chNull};
679 const XMLCh EncryptedType::TYPE_NAME[] = UNICODE_LITERAL_13(E,n,c,r,y,p,t,e,d,T,y,p,e);
680 const XMLCh EncryptedType::ID_ATTRIB_NAME[] = UNICODE_LITERAL_2(I,d);
681 const XMLCh EncryptedType::TYPE_ATTRIB_NAME[] = UNICODE_LITERAL_4(T,y,p,e);
682 const XMLCh EncryptedType::MIMETYPE_ATTRIB_NAME[] = UNICODE_LITERAL_8(M,i,m,e,T,y,p,e);
683 const XMLCh EncryptedType::ENCODING_ATTRIB_NAME[] = UNICODE_LITERAL_8(E,n,c,o,d,i,n,g);
684 const XMLCh EncryptionMethod::LOCAL_NAME[] = UNICODE_LITERAL_16(E,n,c,r,y,p,t,i,o,n,M,e,t,h,o,d);
685 const XMLCh EncryptionMethod::TYPE_NAME[] = UNICODE_LITERAL_20(E,n,c,r,y,p,t,i,o,n,M,e,t,h,o,d,T,y,p,e);
686 const XMLCh EncryptionMethod::ALGORITHM_ATTRIB_NAME[] = UNICODE_LITERAL_9(A,l,g,o,r,i,t,h,m);
687 const XMLCh EncryptionProperties::LOCAL_NAME[] = UNICODE_LITERAL_20(E,n,c,r,y,p,t,i,o,n,P,r,o,p,e,r,t,i,e,s);
688 const XMLCh EncryptionProperties::TYPE_NAME[] = UNICODE_LITERAL_24(E,n,c,r,y,p,t,i,o,n,P,r,o,p,e,r,t,i,e,s,T,y,p,e);
689 const XMLCh EncryptionProperties::ID_ATTRIB_NAME[] = UNICODE_LITERAL_2(I,d);
690 const XMLCh EncryptionProperty::LOCAL_NAME[] = UNICODE_LITERAL_18(E,n,c,r,y,p,t,i,o,n,P,r,o,p,e,r,t,y);
691 const XMLCh EncryptionProperty::TYPE_NAME[] = UNICODE_LITERAL_22(E,n,c,r,y,p,t,i,o,n,P,r,o,p,e,r,t,y,T,y,p,e);
692 const XMLCh EncryptionProperty::ID_ATTRIB_NAME[] = UNICODE_LITERAL_2(I,d);
693 const XMLCh EncryptionProperty::TARGET_ATTRIB_NAME[] = UNICODE_LITERAL_6(T,a,r,g,e,t);
694 const XMLCh KeyReference::LOCAL_NAME[] = UNICODE_LITERAL_12(K,e,y,R,e,f,e,r,e,n,c,e);
695 const XMLCh KeySize::LOCAL_NAME[] = UNICODE_LITERAL_7(K,e,y,S,i,z,e);
696 const XMLCh OAEPparams::LOCAL_NAME[] = UNICODE_LITERAL_10(O,A,E,P,p,a,r,a,m,s);
697 const XMLCh ReferenceList::LOCAL_NAME[] = UNICODE_LITERAL_13(R,e,f,e,r,e,n,c,e,L,i,s,t);
698 const XMLCh ReferenceType::LOCAL_NAME[] = {chNull};
699 const XMLCh ReferenceType::TYPE_NAME[] = UNICODE_LITERAL_13(R,e,f,e,r,e,n,c,e,T,y,p,e);
700 const XMLCh ReferenceType::URI_ATTRIB_NAME[] = UNICODE_LITERAL_3(U,R,I);
701 const XMLCh Transforms::LOCAL_NAME[] = UNICODE_LITERAL_10(T,r,a,n,s,f,o,r,m,s);
702 const XMLCh Transforms::TYPE_NAME[] = UNICODE_LITERAL_14(T,r,a,n,s,f,o,r,m,s,T,y,p,e);