blautenb    2003/10/26 03:33:13

  Modified:    c/src/tools/xtest xtest.cpp
               c/src/xenc XENCEncryptedType.hpp
               c/src/xenc/impl XENCEncryptedDataImpl.hpp
                        XENCEncryptedKeyImpl.hpp XENCEncryptedTypeImpl.cpp
                        XENCEncryptedTypeImpl.hpp
  Log:
  Support for MimeType and Encoding Attributes in EncryptedType structures
  
  Revision  Changes    Path
  1.26      +28 -1     xml-security/c/src/tools/xtest/xtest.cpp
  
  Index: xtest.cpp
  ===================================================================
  RCS file: /home/cvs/xml-security/c/src/tools/xtest/xtest.cpp,v
  retrieving revision 1.25
  retrieving revision 1.26
  diff -u -r1.25 -r1.26
  --- xtest.cpp 19 Oct 2003 11:01:01 -0000      1.25
  +++ xtest.cpp 26 Oct 2003 11:33:13 -0000      1.26
  @@ -256,6 +256,15 @@
   
   };
   
  +XMLCh s_tstEncoding[] = {
  +     chLatin_B, chLatin_a, chLatin_s, chLatin_e, chDigit_6, chDigit_4, chNull
  +};
  +
  +XMLCh s_tstMimeType[] = {
  +     chLatin_i, chLatin_m, chLatin_a, chLatin_g, chLatin_e,
  +     chForwardSlash, chLatin_p, chLatin_n, chLatin_g, chNull
  +};
  +
   // 
--------------------------------------------------------------------------------
   //           Some test keys
   // 
--------------------------------------------------------------------------------
  @@ -983,6 +992,12 @@
                cerr << "done\nAppending a <KeyName> ... ";
                XENCEncryptedData * encryptedData = cipher->getEncryptedData();
                encryptedData->appendKeyName(s_tstKeyName);
  +             cerr << "done\nAdding Encoding and MimeType ... ";
  +
  +             // Add MimeType and Encoding
  +             encryptedData->setEncodingURI(s_tstEncoding);
  +             encryptedData->setMimeType(s_tstMimeType);
  +
                cerr << "done\nSearching for <category> ... ";
   
                DOMNode * t = findNode(doc, MAKE_UNICODE_STRING("category"));
  @@ -1075,6 +1090,18 @@
                }
                else
                        cerr << "yes." << endl;
  +
  +             cerr << "Checking MimeType and Encoding ... ";
  +             if (encryptedData->getMimeType() == NULL || 
!strEquals(encryptedData->getMimeType(), s_tstMimeType)) {
  +                     cerr << "Bad MimeType" << endl;
  +                     exit(1);
  +             }
  +             if (encryptedData->getEncodingURI() == NULL || 
!strEquals(encryptedData->getEncodingURI(), s_tstEncoding)) {
  +                     cerr << "Bad Encoding" << endl;
  +                     exit(1);
  +             }
  +
  +             cerr << "OK" << endl;
   
        }
        catch (XSECException &e)
  
  
  
  1.8       +66 -1     xml-security/c/src/xenc/XENCEncryptedType.hpp
  
  Index: XENCEncryptedType.hpp
  ===================================================================
  RCS file: /home/cvs/xml-security/c/src/xenc/XENCEncryptedType.hpp,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- XENCEncryptedType.hpp     26 Oct 2003 10:32:32 -0000      1.7
  +++ XENCEncryptedType.hpp     26 Oct 2003 11:33:13 -0000      1.8
  @@ -174,6 +174,37 @@
   
        virtual const XMLCh * getTypeURI(void) const = 0;
   
  +     /**
  +      * \brief Get the MimeType of the EncryptedType
  +      *
  +      * If this object is an EncryptedData, it <em>may</em> have a 
  +      * MimeType attribute that "describes the media type of the 
  +      * data which has been encrypted" (from the XML Encryption spec).
  +      *
  +      * The XML-Security-C library makes no use of this attribute, but
  +      * it provides these functions to allow applications to set and get.
  +      *
  +      * @returns a pointer to the MimeType string (owned by the library)
  +      * or NULL if no MimeType is set
  +      */
  +
  +     virtual const XMLCh * getMimeType(void) const = 0;
  +
  +     /**
  +      * \brief Get the Encoding of the EncryptedType
  +      *
  +      * If this object is an EncryptedData, it <em>may</em> have an
  +      * encoding attribute that describes how the data has been encoded
  +      * prior to encryption.  (E.g. http://www.w3.org/2000/09/xmldsig#base64)
  +      *
  +      * The XML-Security-C library makes no use of this attribute, but
  +      * it provides these functions to allow applications to set and get.
  +      *
  +      * @returns A string (owned by the library) providing the encoding URI
  +      */
  +
  +     virtual const XMLCh * getEncodingURI(void) const = 0;
  +
        //@}
   
        /** @name Setter interface methods */
  @@ -192,6 +223,40 @@
         */
   
        virtual void setTypeURI(const XMLCh * uri) = 0;
  +
  +     /**
  +      * \brief Set the MimeType of the EncryptedType
  +      *
  +      * If this object is an EncryptedData, it <em>may</em> have a 
  +      * MimeType attribute that "describes the media type of the 
  +      * data which has been encrypted" (from the XML Encryption spec).
  +      *
  +      * The XML-Security-C library makes no use of this attribute, but
  +      * it provides these functions to allow applications to set and get.
  +      *
  +      * @param mimeType String to set in the MimeType attribute.
  +      * @note no checking of this string is done by the library - it
  +      * simply sets the value of the MimeType attribute to this value.
  +      */
  +
  +     virtual void setMimeType(const XMLCh * mimeType) = 0;
  +
  +     /**
  +      * \brief Set the Encoding of the EncryptedType
  +      *
  +      * If this object is an EncryptedData, it <em>may</em> have an
  +      * encoding attribute that describes how the data has been encoded
  +      * prior to encryption.  (E.g. http://www.w3.org/2000/09/xmldsig#base64)
  +      *
  +      * The XML-Security-C library makes no use of this attribute, but
  +      * it provides these functions to allow applications to set and get.
  +      *
  +      * @param encoding String (URI) to set in the Encoding attribute.
  +      * @note no checking of this string is done by the library - it
  +      * simply sets the value of the Encoding attribute to this value.
  +      */
  +
  +     virtual void setEncodingURI(const XMLCh * uri) = 0;
   
        //@}
   
  
  
  
  1.8       +9 -2      xml-security/c/src/xenc/impl/XENCEncryptedDataImpl.hpp
  
  Index: XENCEncryptedDataImpl.hpp
  ===================================================================
  RCS file: /home/cvs/xml-security/c/src/xenc/impl/XENCEncryptedDataImpl.hpp,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- XENCEncryptedDataImpl.hpp 26 Oct 2003 10:32:33 -0000      1.7
  +++ XENCEncryptedDataImpl.hpp 26 Oct 2003 11:33:13 -0000      1.8
  @@ -120,11 +120,18 @@
        // Get methods
        virtual const XMLCh * getTypeURI(void) const
                {return XENCEncryptedTypeImpl::getTypeURI();}
  +     virtual const XMLCh * getMimeType(void) const
  +             {return XENCEncryptedTypeImpl::getMimeType();}
  +     virtual const XMLCh * getEncodingURI(void) const
  +             {return XENCEncryptedTypeImpl::getEncodingURI();}
   
        // Set methods
        virtual void setTypeURI(const XMLCh * uri)
                {XENCEncryptedTypeImpl::setTypeURI(uri);}
  -
  +     virtual void setMimeType(const XMLCh * mimeType)
  +             {XENCEncryptedTypeImpl::setMimeType(mimeType);}
  +     virtual void setEncodingURI(const XMLCh * uri)
  +             {XENCEncryptedTypeImpl::setEncodingURI(uri);}
   
   private:
   
  
  
  
  1.3       +9 -1      xml-security/c/src/xenc/impl/XENCEncryptedKeyImpl.hpp
  
  Index: XENCEncryptedKeyImpl.hpp
  ===================================================================
  RCS file: /home/cvs/xml-security/c/src/xenc/impl/XENCEncryptedKeyImpl.hpp,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- XENCEncryptedKeyImpl.hpp  26 Oct 2003 10:32:33 -0000      1.2
  +++ XENCEncryptedKeyImpl.hpp  26 Oct 2003 11:33:13 -0000      1.3
  @@ -123,10 +123,18 @@
        // Get methods
        virtual const XMLCh * getTypeURI(void) const
                {return XENCEncryptedTypeImpl::getTypeURI();}
  +     virtual const XMLCh * getMimeType(void) const
  +             {return XENCEncryptedTypeImpl::getMimeType();}
  +     virtual const XMLCh * getEncodingURI(void) const
  +             {return XENCEncryptedTypeImpl::getEncodingURI();}
   
        // Set methods
        virtual void setTypeURI(const XMLCh * uri)
                {XENCEncryptedTypeImpl::setTypeURI(uri);}
  +     virtual void setMimeType(const XMLCh * mimeType)
  +             {XENCEncryptedTypeImpl::setMimeType(mimeType);}
  +     virtual void setEncodingURI(const XMLCh * uri)
  +             {XENCEncryptedTypeImpl::setEncodingURI(uri);}
   
   private:
   
  
  
  
  1.9       +116 -3    xml-security/c/src/xenc/impl/XENCEncryptedTypeImpl.cpp
  
  Index: XENCEncryptedTypeImpl.cpp
  ===================================================================
  RCS file: /home/cvs/xml-security/c/src/xenc/impl/XENCEncryptedTypeImpl.cpp,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- XENCEncryptedTypeImpl.cpp 26 Oct 2003 10:32:33 -0000      1.8
  +++ XENCEncryptedTypeImpl.cpp 26 Oct 2003 11:33:13 -0000      1.9
  @@ -149,6 +149,33 @@
        chNull
   };
   
  +static XMLCh s_MimeType[] = {
  +     
  +     chLatin_M,
  +     chLatin_i,
  +     chLatin_m,
  +     chLatin_e,
  +     chLatin_T,
  +     chLatin_y,
  +     chLatin_p,
  +     chLatin_e,
  +     chNull
  +};
  +
  +
  +static XMLCh s_Encoding[] = {
  +     
  +     chLatin_E,
  +     chLatin_n,
  +     chLatin_c,
  +     chLatin_o,
  +     chLatin_d,
  +     chLatin_i,
  +     chLatin_n,
  +     chLatin_g,
  +     chNull
  +};
  +
   // 
--------------------------------------------------------------------------------
   //                   Constructors and Destructors
   // 
--------------------------------------------------------------------------------
  @@ -161,7 +188,9 @@
   mp_cipherData(NULL),
   mp_encryptionMethod(NULL),
   m_keyInfoList(env),
  -mp_typeAttributeNode(NULL) {
  +mp_typeAttributeNode(NULL),
  +mp_mimeTypeAttributeNode(NULL),
  +mp_encodingAttributeNode(NULL) {
   
   }
   
  @@ -174,7 +203,9 @@
   mp_cipherData(NULL),
   mp_encryptionMethod(NULL),
   m_keyInfoList(env),
  -mp_typeAttributeNode(NULL) {
  +mp_typeAttributeNode(NULL),
  +mp_mimeTypeAttributeNode(NULL),
  +mp_encodingAttributeNode(NULL) {
   
   }
   
  @@ -208,6 +239,12 @@
        // Type
        mp_typeAttributeNode = 
atts->getNamedItemNS(DSIGConstants::s_unicodeStrURIXENC,
                                                                                
                s_Type);
  +     // MimeType
  +     mp_mimeTypeAttributeNode = 
atts->getNamedItemNS(DSIGConstants::s_unicodeStrURIXENC,
  +                                                                             
                s_MimeType);
  +     // Encoding
  +     mp_encodingAttributeNode = 
atts->getNamedItemNS(DSIGConstants::s_unicodeStrURIXENC,
  +                                                                             
                s_Encoding);
   
        // Don't know what the node name should be (held by super class), 
        // so go straight to the children
  @@ -494,6 +531,82 @@
   
                        throw XSECException(XSECException::InternalError,
                                "XENCEncryptedTypeImpl::setTypeURI - Cannot 
find the attribute I just added");
  +
  +             }
  +
  +     }
  +}
  +
  +// 
--------------------------------------------------------------------------------
  +//                   MimeType handling
  +// 
--------------------------------------------------------------------------------
  +
  +const XMLCh * XENCEncryptedTypeImpl::getMimeType(void) const {
  +
  +     if (mp_mimeTypeAttributeNode != NULL)
  +             return mp_mimeTypeAttributeNode->getNodeValue();
  +
  +     return NULL;
  +
  +}
  +
  +void XENCEncryptedTypeImpl::setMimeType(const XMLCh * mimeType) {
  +
  +     if (mp_mimeTypeAttributeNode != NULL) {
  +             mp_mimeTypeAttributeNode->setNodeValue(mimeType);
  +     }
  +     else {
  +
  +             // Need to create the node
  +             DOMElement * typeElt = static_cast<DOMElement 
*>(mp_encryptedTypeNode);
  +
  +             typeElt->setAttributeNS(DSIGConstants::s_unicodeStrURIXENC, 
s_MimeType, mimeType);
  +
  +             DOMNamedNodeMap *atts = mp_encryptedTypeNode->getAttributes();
  +             mp_mimeTypeAttributeNode = 
atts->getNamedItemNS(DSIGConstants::s_unicodeStrURIXENC,
  +                                                                             
                s_MimeType);
  +             if (mp_mimeTypeAttributeNode = NULL) {
  +
  +                     throw XSECException(XSECException::InternalError,
  +                             "XENCEncryptedTypeImpl::setMimeType - Cannot 
find the attribute I just added");
  +
  +             }
  +
  +     }
  +}
  +
  +// 
--------------------------------------------------------------------------------
  +//                   Encoding handling
  +// 
--------------------------------------------------------------------------------
  +
  +const XMLCh * XENCEncryptedTypeImpl::getEncodingURI(void) const {
  +
  +     if (mp_encodingAttributeNode != NULL)
  +             return mp_encodingAttributeNode->getNodeValue();
  +
  +     return NULL;
  +
  +}
  +
  +void XENCEncryptedTypeImpl::setEncodingURI(const XMLCh * uri) {
  +
  +     if (mp_encodingAttributeNode != NULL) {
  +             mp_encodingAttributeNode->setNodeValue(uri);
  +     }
  +     else {
  +
  +             // Need to create the node
  +             DOMElement * typeElt = static_cast<DOMElement 
*>(mp_encryptedTypeNode);
  +
  +             typeElt->setAttributeNS(DSIGConstants::s_unicodeStrURIXENC, 
s_Encoding, uri);
  +
  +             DOMNamedNodeMap *atts = mp_encryptedTypeNode->getAttributes();
  +             mp_encodingAttributeNode = 
atts->getNamedItemNS(DSIGConstants::s_unicodeStrURIXENC,
  +                                                                             
                s_Encoding);
  +             if (mp_encodingAttributeNode = NULL) {
  +
  +                     throw XSECException(XSECException::InternalError,
  +                             "XENCEncryptedTypeImpl::setEncodingURI - Cannot 
find the attribute I just added");
   
                }
   
  
  
  
  1.9       +9 -3      xml-security/c/src/xenc/impl/XENCEncryptedTypeImpl.hpp
  
  Index: XENCEncryptedTypeImpl.hpp
  ===================================================================
  RCS file: /home/cvs/xml-security/c/src/xenc/impl/XENCEncryptedTypeImpl.hpp,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- XENCEncryptedTypeImpl.hpp 26 Oct 2003 10:32:33 -0000      1.8
  +++ XENCEncryptedTypeImpl.hpp 26 Oct 2003 11:33:13 -0000      1.9
  @@ -121,11 +121,13 @@
   
        // Get methods
        virtual const XMLCh * getTypeURI(void) const;
  +     virtual const XMLCh * getMimeType(void) const;
  +     virtual const XMLCh * getEncodingURI(void) const;
   
        // Set methods
        virtual void setTypeURI(const XMLCh * uri);
  -
  -
  +     virtual void setMimeType(const XMLCh * mimeType);
  +     virtual void setEncodingURI(const XMLCh * uri);
   
   protected:
   
  @@ -153,6 +155,10 @@
        // Type URI
        XERCES_CPP_NAMESPACE_QUALIFIER DOMNode
                                                                * 
mp_typeAttributeNode;
  +     XERCES_CPP_NAMESPACE_QUALIFIER DOMNode
  +                                                             * 
mp_mimeTypeAttributeNode;
  +     XERCES_CPP_NAMESPACE_QUALIFIER DOMNode
  +                                                             * 
mp_encodingAttributeNode;
   
        friend class XENCCipherImpl;
   };
  
  
  

Reply via email to