X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=xmltooling%2Fsignature%2FKeyInfo.h;h=5c8d09e1b724aeda0e31a3df3eff122505c42510;hb=81b488b2790e7bdeb2f43560b1d4a7d22c3dfdf5;hp=a3b21f05d57ea6676c3d9b0a1f88ba8ca444d132;hpb=0b6e37e5bdd2eeecf576ba69e724da2f99fb64f0;p=shibboleth%2Fcpp-xmltooling.git diff --git a/xmltooling/signature/KeyInfo.h b/xmltooling/signature/KeyInfo.h index a3b21f0..5c8d09e 100644 --- a/xmltooling/signature/KeyInfo.h +++ b/xmltooling/signature/KeyInfo.h @@ -1,39 +1,52 @@ -/* - * Copyright 2001-2006 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 +/** + * 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 + * 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. + * 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. */ /** - * @file KeyInfo.h + * @file xmltooling/signature/KeyInfo.h * * XMLObjects representing XML Digital Signature, version 20020212, KeyInfo element * and related content. */ -#ifndef __xmltooling_keyinfo_h__ +#if !defined(__xmltooling_keyinfo_h__) && !defined(XMLTOOLING_NO_XMLSEC) #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) + +/** + * Macro for declaring signature builders. + * + * @param cname name of class being built + */ +#define DECL_XMLSIG11OBJECTBUILDER(cname) \ + DECL_XMLOBJECTBUILDER(XMLTOOL_API,cname,xmlconstants::XMLSIG11_NS,xmlconstants::XMLSIG11_PREFIX) namespace xmlsignature { @@ -49,59 +62,179 @@ namespace xmlsignature { DECL_XMLOBJECT_SIMPLE(XMLTOOL_API,Y,Value,XML Digital Signature version 20020212 Y element); DECL_XMLOBJECT_SIMPLE(XMLTOOL_API,J,Value,XML Digital Signature version 20020212 J element); DECL_XMLOBJECT_SIMPLE(XMLTOOL_API,XPath,Expression,XML Digital Signature version 20020212 XPath element); + DECL_XMLOBJECT_SIMPLE(XMLTOOL_API,X509IssuerName,Name,XML Digital Signature version 20020212 X509IssuerName element); + DECL_XMLOBJECT_SIMPLE(XMLTOOL_API,X509SerialNumber,SerialNumber,XML Digital Signature version 20020212 X509SerialNumber element); + DECL_XMLOBJECT_SIMPLE(XMLTOOL_API,X509SKI,Value,XML Digital Signature version 20020212 X509SKI element); + DECL_XMLOBJECT_SIMPLE(XMLTOOL_API,X509SubjectName,Name,XML Digital Signature version 20020212 X509SubjectName element); + DECL_XMLOBJECT_SIMPLE(XMLTOOL_API,X509Certificate,Value,XML Digital Signature version 20020212 X509Certificate element); + DECL_XMLOBJECT_SIMPLE(XMLTOOL_API,X509CRL,Value,XML Digital Signature version 20020212 X509CRL element); + DECL_XMLOBJECT_SIMPLE(XMLTOOL_API,SPKISexp,Value,XML Digital Signature version 20020212 SPKISexp element); + DECL_XMLOBJECT_SIMPLE(XMLTOOL_API,PGPKeyID,ID,XML Digital Signature version 20020212 PGPKeyID element); + DECL_XMLOBJECT_SIMPLE(XMLTOOL_API,PGPKeyPacket,Packet,XML Digital Signature version 20020212 PGPKeyPacket element); + + DECL_XMLOBJECT_SIMPLE(XMLTOOL_API,OCSPResponse,Response,XML Digital Signature version 1.1 OCSPResponse element); + DECL_XMLOBJECT_SIMPLE(XMLTOOL_API,PublicKey,Value,XML Digital Signature version 1.1 PublicKey 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,NamedCurve,xmltooling::XMLObject,XML Digital Signature version 1.1 NamedCurve element); + DECL_STRING_ATTRIB(URI,URI); + /** NamedCurveType local name */ + static const XMLCh TYPE_NAME[]; + END_XMLOBJECT; + + BEGIN_XMLOBJECT(XMLTOOL_API,ECKeyValue,xmltooling::XMLObject,XML Digital Signature version 1.1 ECKeyValue element); + DECL_STRING_ATTRIB(Id,ID); + DECL_XMLOBJECT_CHILD(ECParameters); + DECL_TYPED_CHILD(NamedCurve); + DECL_TYPED_CHILD(PublicKey); + /** ECKeyValueType local name */ + static const XMLCh TYPE_NAME[]; + END_XMLOBJECT; + BEGIN_XMLOBJECT(XMLTOOL_API,KeyValue,xmltooling::XMLObject,XML Digital Signature version 20020212 KeyValue element); - DECL_XMLOBJECT_CHILD(DSAKeyValue); - DECL_XMLOBJECT_CHILD(RSAKeyValue); - DECL_XMLOBJECT_CHILD(XMLObject); - DECL_XMLOBJECT_CONTENT(TextContent); + DECL_TYPED_CHILD(DSAKeyValue); + DECL_TYPED_CHILD(RSAKeyValue); + DECL_TYPED_CHILD(ECKeyValue); + 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,KeyInfo,xmltooling::ElementProxy,XML Digital Signature version 20020212 KeyInfo element); - DECL_XMLOBJECT_ATTRIB(Id,ID); - DECL_XMLOBJECT_CHILDREN(KeyName); - DECL_XMLOBJECT_CHILDREN(MgmtData); + BEGIN_XMLOBJECT(XMLTOOL_API,RetrievalMethod,xmltooling::XMLObject,XML Digital Signature version 20020212 RetrievalMethod element); + 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_TYPED_CHILD(X509IssuerName); + DECL_TYPED_CHILD(X509SerialNumber); + /** X509IssuerSerialType local name */ + static const XMLCh TYPE_NAME[]; + END_XMLOBJECT; + + BEGIN_XMLOBJECT(XMLTOOL_API,X509Digest,xmltooling::XMLObject,XML Digital Signature version 1.1 X509Digest element); + DECL_STRING_ATTRIB(Algorithm,ALGORITHM); + DECL_SIMPLE_CONTENT(Value); + /** X509DigestType local name */ + static const XMLCh TYPE_NAME[]; + END_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); + DECL_TYPED_CHILDREN(X509Digest); + DECL_TYPED_CHILDREN(OCSPResponse); + /** X509DataType local name */ + static const XMLCh TYPE_NAME[]; + END_XMLOBJECT; + + BEGIN_XMLOBJECT(XMLTOOL_API,SPKIData,xmltooling::XMLObject,XML Digital Signature version 20020212 SPKIData element); + /** SPKIDataType local name */ + static const XMLCh TYPE_NAME[]; + + /** Returns modifiable collection of SPKIsexp/XMLObject pairs. */ + virtual VectorOfPairs(SPKISexp,xmltooling::XMLObject) getSPKISexps()=0; + + /** Returns reference to immutable collection of SPKIsexp/XMLObject pairs. */ + virtual const std::vector< std::pair >& getSPKISexps() const=0; + END_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,DEREncodedKeyValue,xmltooling::XMLObject,XML Digital Signature version 1.1 DEREncodedKeyValue element); + DECL_STRING_ATTRIB(Id,ID); + DECL_SIMPLE_CONTENT(Value); + /** DEREncodedKeyValueType local name */ + static const XMLCh TYPE_NAME[]; + END_XMLOBJECT; + + BEGIN_XMLOBJECT(XMLTOOL_API,KeyInfoReference,xmltooling::XMLObject,XML Digital Signature version 1.1 KeyInfoReference element); + DECL_STRING_ATTRIB(Id,ID); + DECL_STRING_ATTRIB(URI,URI); + /** KeyInfoReferenceType local name */ + static const XMLCh TYPE_NAME[]; + END_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(DEREncodedKeyValue); + DECL_TYPED_CHILDREN(RetrievalMethod); + DECL_TYPED_CHILDREN(MgmtData); + DECL_TYPED_CHILDREN(PGPData); + DECL_TYPED_CHILDREN(SPKIData); + DECL_TYPED_CHILDREN(KeyInfoReference); /** KeyInfoType local name */ static const XMLCh TYPE_NAME[]; END_XMLOBJECT; + DECL_XMLSIGOBJECTBUILDER(PGPData); + DECL_XMLSIGOBJECTBUILDER(PGPKeyID); + DECL_XMLSIGOBJECTBUILDER(PGPKeyPacket); + DECL_XMLSIGOBJECTBUILDER(SPKIData); + DECL_XMLSIGOBJECTBUILDER(SPKISexp); + DECL_XMLSIGOBJECTBUILDER(X509IssuerSerial); + DECL_XMLSIGOBJECTBUILDER(X509IssuerName); + DECL_XMLSIGOBJECTBUILDER(X509SerialNumber); + DECL_XMLSIGOBJECTBUILDER(X509SKI); + DECL_XMLSIGOBJECTBUILDER(X509SubjectName); + DECL_XMLSIGOBJECTBUILDER(X509Certificate); + DECL_XMLSIGOBJECTBUILDER(X509CRL); + DECL_XMLSIGOBJECTBUILDER(X509Data); DECL_XMLSIGOBJECTBUILDER(XPath); DECL_XMLSIGOBJECTBUILDER(Transform); DECL_XMLSIGOBJECTBUILDER(Transforms); + DECL_XMLSIGOBJECTBUILDER(RetrievalMethod); DECL_XMLSIGOBJECTBUILDER(KeyName); DECL_XMLSIGOBJECTBUILDER(MgmtData); DECL_XMLSIGOBJECTBUILDER(Modulus); @@ -118,47 +251,18 @@ namespace xmlsignature { DECL_XMLSIGOBJECTBUILDER(KeyValue); DECL_XMLSIGOBJECTBUILDER(KeyInfo); -#ifdef XMLTOOLING_DECLARE_VALIDATORS - XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,KeyName,Name); - XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,MgmtData,Data); - XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,Modulus,Value); - XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,Exponent,Value); - XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,Seed,Value); - XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,PgenCounter,Value); - XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,P,Value); - XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,Q,Value); - XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,G,Value); - XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,Y,Value); - XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,J,Value); - XMLOBJECTVALIDATOR_SIMPLE(XMLTOOL_DLLLOCAL,XPath,Expression); - - 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,KeyInfo); - XMLOBJECTVALIDATOR_NONEMPTY(KeyInfo,XMLObject); - END_XMLOBJECTVALIDATOR; -#endif /* XMLTOOLING_DECLARE_VALIDATORS */ + DECL_XMLSIG11OBJECTBUILDER(DEREncodedKeyValue); + DECL_XMLSIG11OBJECTBUILDER(ECKeyValue); + DECL_XMLSIG11OBJECTBUILDER(KeyInfoReference); + DECL_XMLSIG11OBJECTBUILDER(NamedCurve); + DECL_XMLSIG11OBJECTBUILDER(OCSPResponse); + DECL_XMLSIG11OBJECTBUILDER(PublicKey); + DECL_XMLSIG11OBJECTBUILDER(X509Digest); + + /** + * Registers builders and validators for KeyInfo classes into the runtime. + */ + void XMLTOOL_API registerKeyInfoClasses(); };