X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=xmltooling%2Fsignature%2FKeyInfo.h;h=0352f6f4d18fbbb65f23e5e36f550d5d249ce313;hb=28e2077c02f1bb4196730a88aa81aa72de9798e1;hp=c1c635806799431bd7bc73aab069d93e0b0f2d2c;hpb=c47d9a28b514e071b6fbb1dfce4b5f258d26a67f;p=shibboleth%2Fcpp-xmltooling.git diff --git a/xmltooling/signature/KeyInfo.h b/xmltooling/signature/KeyInfo.h index c1c6358..0352f6f 100644 --- a/xmltooling/signature/KeyInfo.h +++ b/xmltooling/signature/KeyInfo.h @@ -15,7 +15,7 @@ */ /** - * @file KeyInfo.h + * @file xmltooling/signature/KeyInfo.h * * XMLObjects representing XML Digital Signature, version 20020212, KeyInfo element * and related content. @@ -25,16 +25,16 @@ #define __xmltooling_keyinfo_h__ #include -#include -#include #include #include -#include - -#include +/** + * Macro for declaring signature builders. + * + * @param cname name of class being built + */ #define DECL_XMLSIGOBJECTBUILDER(cname) \ - DECL_XMLOBJECTBUILDER(XMLTOOL_API,cname,xmltooling::XMLConstants::XMLSIG_NS,xmltooling::XMLConstants::XMLSIG_PREFIX) + DECL_XMLOBJECTBUILDER(XMLTOOL_API,cname,xmlconstants::XMLSIG_NS,xmlconstants::XMLSIG_PREFIX) namespace xmlsignature { @@ -61,67 +61,72 @@ namespace xmlsignature { DECL_XMLOBJECT_SIMPLE(XMLTOOL_API,PGPKeyPacket,Packet,XML Digital Signature version 20020212 PGPKeyPacket element); BEGIN_XMLOBJECT(XMLTOOL_API,DSAKeyValue,xmltooling::XMLObject,XML Digital Signature version 20020212 DSAKeyValue element); - DECL_XMLOBJECT_CHILD(P); - DECL_XMLOBJECT_CHILD(Q); - DECL_XMLOBJECT_CHILD(G); - DECL_XMLOBJECT_CHILD(Y); - DECL_XMLOBJECT_CHILD(J); - DECL_XMLOBJECT_CHILD(Seed); - DECL_XMLOBJECT_CHILD(PgenCounter); + DECL_TYPED_CHILD(P); + DECL_TYPED_CHILD(Q); + DECL_TYPED_CHILD(G); + DECL_TYPED_CHILD(Y); + DECL_TYPED_CHILD(J); + DECL_TYPED_CHILD(Seed); + DECL_TYPED_CHILD(PgenCounter); /** DSAKeyValueType local name */ static const XMLCh TYPE_NAME[]; END_XMLOBJECT; BEGIN_XMLOBJECT(XMLTOOL_API,RSAKeyValue,xmltooling::XMLObject,XML Digital Signature version 20020212 RSAKeyValue element); - DECL_XMLOBJECT_CHILD(Modulus); - DECL_XMLOBJECT_CHILD(Exponent); + DECL_TYPED_CHILD(Modulus); + DECL_TYPED_CHILD(Exponent); /** RSAKeyValueType local name */ static const XMLCh TYPE_NAME[]; END_XMLOBJECT; - BEGIN_XMLOBJECT(XMLTOOL_API,KeyValue,xmltooling::SimpleElement,XML Digital Signature version 20020212 KeyValue element); - DECL_XMLOBJECT_CHILD(DSAKeyValue); - DECL_XMLOBJECT_CHILD(RSAKeyValue); - DECL_XMLOBJECT_CHILD(XMLObject); + BEGIN_XMLOBJECT(XMLTOOL_API,KeyValue,xmltooling::XMLObject,XML Digital Signature version 20020212 KeyValue element); + DECL_TYPED_CHILD(DSAKeyValue); + DECL_TYPED_CHILD(RSAKeyValue); + DECL_XMLOBJECT_CHILD(UnknownXMLObject); /** KeyValueType local name */ static const XMLCh TYPE_NAME[]; END_XMLOBJECT; - BEGIN_XMLOBJECT(XMLTOOL_API,Transform,xmltooling::ElementProxy,XML Digital Signature version 20020212 Transform element); - DECL_XMLOBJECT_ATTRIB(Algorithm,ALGORITHM); - DECL_XMLOBJECT_CHILDREN(XPath); + BEGIN_XMLOBJECT(XMLTOOL_API,Transform,xmltooling::ElementExtensibleXMLObject,XML Digital Signature version 20020212 Transform element); + DECL_STRING_ATTRIB(Algorithm,ALGORITHM); + DECL_TYPED_CHILDREN(XPath); /** TransformType local name */ static const XMLCh TYPE_NAME[]; END_XMLOBJECT; BEGIN_XMLOBJECT(XMLTOOL_API,Transforms,xmltooling::XMLObject,XML Digital Signature version 20020212 Transforms element); - DECL_XMLOBJECT_CHILDREN(Transform); + DECL_TYPED_CHILDREN(Transform); /** TransformsType local name */ static const XMLCh TYPE_NAME[]; END_XMLOBJECT; BEGIN_XMLOBJECT(XMLTOOL_API,RetrievalMethod,xmltooling::XMLObject,XML Digital Signature version 20020212 RetrievalMethod element); - DECL_XMLOBJECT_ATTRIB(URI,URI); - DECL_XMLOBJECT_ATTRIB(Type,TYPE); - DECL_XMLOBJECT_CHILD(Transforms); + DECL_STRING_ATTRIB(URI,URI); + DECL_STRING_ATTRIB(Type,TYPE); + DECL_TYPED_CHILD(Transforms); /** RetrievalMethodType local name */ static const XMLCh TYPE_NAME[]; + /** DSAKeyValue RetrievalMethod Type */ + static const XMLCh TYPE_DSAKEYVALUE[]; + /** RSAKeyValue RetrievalMethod Type */ + static const XMLCh TYPE_RSAKEYVALUE[]; + /** X509Data RetrievalMethod Type */ + static const XMLCh TYPE_X509DATA[]; END_XMLOBJECT; BEGIN_XMLOBJECT(XMLTOOL_API,X509IssuerSerial,xmltooling::XMLObject,XML Digital Signature version 20020212 X509IssuerSerial element); - DECL_XMLOBJECT_CHILD(X509IssuerName); - DECL_XMLOBJECT_CHILD(X509SerialNumber); + DECL_TYPED_CHILD(X509IssuerName); + DECL_TYPED_CHILD(X509SerialNumber); /** X509IssuerSerialType local name */ static const XMLCh TYPE_NAME[]; END_XMLOBJECT; - BEGIN_XMLOBJECT(XMLTOOL_API,X509Data,xmltooling::XMLObject,XML Digital Signature version 20020212 X509Data element); - DECL_XMLOBJECT_CHILDREN(X509IssuerSerial); - DECL_XMLOBJECT_CHILDREN(X509SKI); - DECL_XMLOBJECT_CHILDREN(X509SubjectName); - DECL_XMLOBJECT_CHILDREN(X509Certificate); - DECL_XMLOBJECT_CHILDREN(X509CRL); - DECL_XMLOBJECT_CHILDREN(XMLObject); + BEGIN_XMLOBJECT(XMLTOOL_API,X509Data,xmltooling::ElementExtensibleXMLObject,XML Digital Signature version 20020212 X509Data element); + DECL_TYPED_CHILDREN(X509IssuerSerial); + DECL_TYPED_CHILDREN(X509SKI); + DECL_TYPED_CHILDREN(X509SubjectName); + DECL_TYPED_CHILDREN(X509Certificate); + DECL_TYPED_CHILDREN(X509CRL); /** X509DataType local name */ static const XMLCh TYPE_NAME[]; END_XMLOBJECT; @@ -137,24 +142,22 @@ namespace xmlsignature { virtual const std::vector< std::pair >& getSPKISexps() const=0; END_XMLOBJECT; - BEGIN_XMLOBJECT(XMLTOOL_API,PGPData,xmltooling::XMLObject,XML Digital Signature version 20020212 PGPData element); - DECL_XMLOBJECT_CHILD(PGPKeyID); - DECL_XMLOBJECT_CHILD(PGPKeyPacket); - DECL_XMLOBJECT_CHILDREN(XMLObject); + BEGIN_XMLOBJECT(XMLTOOL_API,PGPData,xmltooling::ElementExtensibleXMLObject,XML Digital Signature version 20020212 PGPData element); + DECL_TYPED_CHILD(PGPKeyID); + DECL_TYPED_CHILD(PGPKeyPacket); /** PGPDataType local name */ static const XMLCh TYPE_NAME[]; END_XMLOBJECT; - BEGIN_XMLOBJECT(XMLTOOL_API,KeyInfo,xmltooling::XMLObject,XML Digital Signature version 20020212 KeyInfo element); - DECL_XMLOBJECT_ATTRIB(Id,ID); - DECL_XMLOBJECT_CHILDREN(X509Data); - DECL_XMLOBJECT_CHILDREN(KeyName); - DECL_XMLOBJECT_CHILDREN(KeyValue); - DECL_XMLOBJECT_CHILDREN(RetrievalMethod); - DECL_XMLOBJECT_CHILDREN(MgmtData); - DECL_XMLOBJECT_CHILDREN(PGPData); - DECL_XMLOBJECT_CHILDREN(SPKIData); - DECL_XMLOBJECT_CHILDREN(XMLObject); + BEGIN_XMLOBJECT(XMLTOOL_API,KeyInfo,xmltooling::ElementExtensibleXMLObject,XML Digital Signature version 20020212 KeyInfo element); + DECL_STRING_ATTRIB(Id,ID); + DECL_TYPED_CHILDREN(X509Data); + DECL_TYPED_CHILDREN(KeyName); + DECL_TYPED_CHILDREN(KeyValue); + DECL_TYPED_CHILDREN(RetrievalMethod); + DECL_TYPED_CHILDREN(MgmtData); + DECL_TYPED_CHILDREN(PGPData); + DECL_TYPED_CHILDREN(SPKIData); /** KeyInfoType local name */ static const XMLCh TYPE_NAME[]; END_XMLOBJECT; @@ -192,78 +195,10 @@ namespace xmlsignature { DECL_XMLSIGOBJECTBUILDER(KeyValue); DECL_XMLSIGOBJECTBUILDER(KeyInfo); -#ifdef XMLTOOLING_DECLARE_VALIDATORS - XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,KeyName); - XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,MgmtData); - XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,Modulus); - XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,Exponent); - XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,Seed); - XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,PgenCounter); - XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,P); - XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,Q); - XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,G); - XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,Y); - XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,J); - XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,XPath); - XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,X509IssuerName); - XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,X509SerialNumber); - XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,X509SKI); - XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,X509SubjectName); - XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,X509Certificate); - XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,X509CRL); - XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,SPKISexp); - XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,PGPKeyID); - XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,PGPKeyPacket); - - BEGIN_XMLOBJECTVALIDATOR(XMLTOOL_DLLLOCAL,RSAKeyValue); - XMLOBJECTVALIDATOR_REQUIRE(RSAKeyValue,Modulus); - XMLOBJECTVALIDATOR_REQUIRE(RSAKeyValue,Exponent); - END_XMLOBJECTVALIDATOR; - - BEGIN_XMLOBJECTVALIDATOR(XMLTOOL_DLLLOCAL,DSAKeyValue); - XMLOBJECTVALIDATOR_REQUIRE(DSAKeyValue,Y); - XMLOBJECTVALIDATOR_NONEORBOTH(DSKeyValue,P,Q); - XMLOBJECTVALIDATOR_NONEORBOTH(DSKeyValue,Seed,PgenCounter); - END_XMLOBJECTVALIDATOR; - - BEGIN_XMLOBJECTVALIDATOR(XMLTOOL_DLLLOCAL,KeyValue); - XMLOBJECTVALIDATOR_ONEOF3(KeyValue,DSAKeyValue,RSAKeyValue,XMLObject); - END_XMLOBJECTVALIDATOR; - - BEGIN_XMLOBJECTVALIDATOR(XMLTOOL_DLLLOCAL,Transform); - XMLOBJECTVALIDATOR_REQUIRE(Transform,Algorithm); - END_XMLOBJECTVALIDATOR; - - BEGIN_XMLOBJECTVALIDATOR(XMLTOOL_DLLLOCAL,Transforms); - XMLOBJECTVALIDATOR_NONEMPTY(Transforms,Transform); - END_XMLOBJECTVALIDATOR; - - BEGIN_XMLOBJECTVALIDATOR(XMLTOOL_DLLLOCAL,RetrievalMethod); - XMLOBJECTVALIDATOR_REQUIRE(RetrievalMethod,URI); - END_XMLOBJECTVALIDATOR; - - BEGIN_XMLOBJECTVALIDATOR(XMLTOOL_DLLLOCAL,X509IssuerSerial); - XMLOBJECTVALIDATOR_REQUIRE(X509IssuerSerial,X509IssuerName); - XMLOBJECTVALIDATOR_REQUIRE(X509IssuerSerial,X509SerialNumber); - END_XMLOBJECTVALIDATOR; - - BEGIN_XMLOBJECTVALIDATOR(XMLTOOL_DLLLOCAL,X509Data); - if (!ptr->hasChildren()) - throw xmltooling::ValidationException("X509Data must have at least one child element."); - END_XMLOBJECTVALIDATOR; - - BEGIN_XMLOBJECTVALIDATOR(XMLTOOL_DLLLOCAL,SPKIData); - XMLOBJECTVALIDATOR_NONEMPTY(SPKIData,SPKISexp); - END_XMLOBJECTVALIDATOR; - - BEGIN_XMLOBJECTVALIDATOR(XMLTOOL_DLLLOCAL,PGPData); - XMLOBJECTVALIDATOR_ONEOF(PGPData,PGPKeyID,PGPKeyPacket); - END_XMLOBJECTVALIDATOR; - - BEGIN_XMLOBJECTVALIDATOR(XMLTOOL_DLLLOCAL,KeyInfo); - XMLOBJECTVALIDATOR_NONEMPTY(KeyInfo,XMLObject); - END_XMLOBJECTVALIDATOR; -#endif /* XMLTOOLING_DECLARE_VALIDATORS */ + /** + * Registers builders and validators for KeyInfo classes into the runtime. + */ + void XMLTOOL_API registerKeyInfoClasses(); };