You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by ka...@apache.org on 2007/02/20 11:35:51 UTC

svn commit: r509500 - in /webservices/axis2/trunk/c/rampart: include/ src/omxmlsec/ src/omxmlsec/tokens/ test/omxmlsec/

Author: kaushalye
Date: Tue Feb 20 02:35:50 2007
New Revision: 509500

URL: http://svn.apache.org/viewvc?view=rev&rev=509500
Log:
1. Processing transforms in OMXMLSecurity
2. Modified test to use the tranform factory to load transforms.
3. Plus some other minor modifications

Modified:
    webservices/axis2/trunk/c/rampart/include/oxs_constants.h
    webservices/axis2/trunk/c/rampart/include/oxs_error.h
    webservices/axis2/trunk/c/rampart/include/oxs_transform.h
    webservices/axis2/trunk/c/rampart/src/omxmlsec/error.c
    webservices/axis2/trunk/c/rampart/src/omxmlsec/sign_ctx.c
    webservices/axis2/trunk/c/rampart/src/omxmlsec/sign_part.c
    webservices/axis2/trunk/c/rampart/src/omxmlsec/signature.c
    webservices/axis2/trunk/c/rampart/src/omxmlsec/tokens/token_c14n_method.c
    webservices/axis2/trunk/c/rampart/src/omxmlsec/tokens/token_transform.c
    webservices/axis2/trunk/c/rampart/src/omxmlsec/transform.c
    webservices/axis2/trunk/c/rampart/src/omxmlsec/transforms_factory.c
    webservices/axis2/trunk/c/rampart/src/omxmlsec/xml_signature.c
    webservices/axis2/trunk/c/rampart/test/omxmlsec/test.c

Modified: webservices/axis2/trunk/c/rampart/include/oxs_constants.h
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/rampart/include/oxs_constants.h?view=diff&rev=509500&r1=509499&r2=509500
==============================================================================
--- webservices/axis2/trunk/c/rampart/include/oxs_constants.h (original)
+++ webservices/axis2/trunk/c/rampart/include/oxs_constants.h Tue Feb 20 02:35:50 2007
@@ -178,12 +178,13 @@
 /****************************************************************
    C14N
 ****************************************************************/
-#define OXS_HREF_C14N                   "http://www.w3.org/TR/2001/REC-xml-c14n-20010315"
+#define OXS_HREF_XML_C14N                   "http://www.w3.org/TR/2001/REC-xml-c14n-20010315"
+#define OXS_HREF_XML_EXC_C14N     "http://www.w3.org/2001/10/xml-exc-c14n#"
 
 /****************************************************************
    Transforms
 ****************************************************************/
-#define OXS_HREF_TRANSFORM_XML_EXC_C14N     "http://www.w3.org/2001/10/xml-exc-c14n#"
+#define OXS_HREF_TRANSFORM_XML_EXC_C14N     OXS_HREF_XML_EXC_C14N
 #define OXS_HREF_TRANSFORM_STR_TRANSFORM     "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#STR-Transform"
 #define OXS_HREF_TRANSFORM_ENVELOPED_SIGNATURE "http://www.w3.org/2000/09/xmldsig#enveloped-signature"
 

Modified: webservices/axis2/trunk/c/rampart/include/oxs_error.h
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/rampart/include/oxs_error.h?view=diff&rev=509500&r1=509499&r2=509500
==============================================================================
--- webservices/axis2/trunk/c/rampart/include/oxs_error.h (original)
+++ webservices/axis2/trunk/c/rampart/include/oxs_error.h Tue Feb 20 02:35:50 2007
@@ -56,7 +56,7 @@
 #define OXS_ERROR_INITIALIZATION_FAILED 9
 #define OXS_ERROR_DATA_CONV_FAILED     10
 #define OXS_ERROR_OPENSSL_FUNC_FAILED  11
-
+#define OXS_ERROR_TRANSFORM_FAILED     12
 
 typedef struct _oxs_error_description oxs_error_description, *oxs_error_description_ptr;
 

Modified: webservices/axis2/trunk/c/rampart/include/oxs_transform.h
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/rampart/include/oxs_transform.h?view=diff&rev=509500&r1=509499&r2=509500
==============================================================================
--- webservices/axis2/trunk/c/rampart/include/oxs_transform.h (original)
+++ webservices/axis2/trunk/c/rampart/include/oxs_transform.h Tue Feb 20 02:35:50 2007
@@ -36,18 +36,18 @@
 
     /*The input or output data type*/
     typedef enum  {
-        OXS_TRANSFORM_TYPE_NODE = 0,
-        OXS_TRANSFORM_TYPE_CHAR
+        OXS_TRANSFORM_TYPE_UNKNOWN = 0,
+        OXS_TRANSFORM_TYPE_CHAR,
+        OXS_TRANSFORM_TYPE_NODE 
     } oxs_tr_dtype_t;
 
 
     /*Function interface for any transform*/
-    typedef axis2_status_t (AXIS2_CALL*
-            tr_func)(const axis2_env_t *env,
+    typedef oxs_tr_dtype_t (AXIS2_CALL*
+            oxs_transform_tr_func)(const axis2_env_t *env,
             void *input,
             oxs_tr_dtype_t input_dtype,
-            void **output,
-            oxs_tr_dtype_t **output_dtype);
+            void **output);
 
     typedef struct oxs_transform_t oxs_transform_t;
 
@@ -63,50 +63,50 @@
 
 
 /**********************Getter functions******************************************/
-axis2_char_t *AXIS2_CALL
+AXIS2_EXTERN axis2_char_t *AXIS2_CALL
 oxs_transform_get_id(
     const oxs_transform_t *transform,
     const axis2_env_t *env);
 
-oxs_tr_dtype_t AXIS2_CALL
+AXIS2_EXTERN oxs_tr_dtype_t AXIS2_CALL
 oxs_transform_get_input_data_type(
     const oxs_transform_t *transform,
     const axis2_env_t *env);
 
-oxs_tr_dtype_t AXIS2_CALL
+AXIS2_EXTERN oxs_tr_dtype_t AXIS2_CALL
 oxs_transform_get_output_data_type(
     const oxs_transform_t *transform,
     const axis2_env_t *env);
 
-tr_func *AXIS2_CALL
+AXIS2_EXTERN oxs_transform_tr_func AXIS2_CALL
     oxs_transform_get_transform_function(
     const oxs_transform_t *transform,
     const axis2_env_t *env);
 
 /**********************Setter functions******************************************/
-axis2_status_t AXIS2_CALL
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
 oxs_transform_set_id(
     oxs_transform_t *transform,
     const axis2_env_t *env,
     axis2_char_t *id);
 
-axis2_status_t AXIS2_CALL
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
 oxs_transform_set_input_data_type(
     oxs_transform_t *transform,
     const axis2_env_t *env,
     oxs_tr_dtype_t input_data_type);
 
-axis2_status_t AXIS2_CALL
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
 oxs_transform_set_output_data_type(
     oxs_transform_t *transform,
     const axis2_env_t *env,
     oxs_tr_dtype_t output_data_type);
 
-axis2_status_t AXIS2_CALL
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
 oxs_transform_set_transform_func(
     oxs_transform_t *transform,
     const axis2_env_t *env,
-    tr_func *transform_func);
+    oxs_transform_tr_func transform_func);
 
 /** @} */
 #ifdef __cplusplus

Modified: webservices/axis2/trunk/c/rampart/src/omxmlsec/error.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/rampart/src/omxmlsec/error.c?view=diff&rev=509500&r1=509499&r2=509500
==============================================================================
--- webservices/axis2/trunk/c/rampart/src/omxmlsec/error.c (original)
+++ webservices/axis2/trunk/c/rampart/src/omxmlsec/error.c Tue Feb 20 02:35:50 2007
@@ -34,6 +34,7 @@
         {OXS_ERROR_INVALID_SIZE , "invalid size"},
         {OXS_ERROR_INVALID_FORMAT , "invalid format"},
         {OXS_ERROR_ELEMENT_FAILED , "element failed"},
+        {OXS_ERROR_TRANSFORM_FAILED , "Transformation failed"},
     };
 
 AXIS2_EXTERN const char* AXIS2_CALL

Modified: webservices/axis2/trunk/c/rampart/src/omxmlsec/sign_ctx.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/rampart/src/omxmlsec/sign_ctx.c?view=diff&rev=509500&r1=509499&r2=509500
==============================================================================
--- webservices/axis2/trunk/c/rampart/src/omxmlsec/sign_ctx.c (original)
+++ webservices/axis2/trunk/c/rampart/src/omxmlsec/sign_ctx.c Tue Feb 20 02:35:50 2007
@@ -33,7 +33,7 @@
 /*Public functions*/
 
 
-axis2_char_t *AXIS2_CALL
+AXIS2_EXTERN axis2_char_t *AXIS2_CALL
 oxs_sign_ctx_get_sign_mtd_algo(
     const oxs_sign_ctx_t *sign_ctx,
     const axis2_env_t *env)
@@ -41,7 +41,7 @@
     return sign_ctx->sign_mtd_algo;
 }
 
-axis2_char_t *AXIS2_CALL
+AXIS2_EXTERN axis2_char_t *AXIS2_CALL
 oxs_sign_ctx_get_c14n_mtd(
     const oxs_sign_ctx_t *sign_ctx,
     const axis2_env_t *env)
@@ -50,7 +50,7 @@
 }
 
 
-axis2_array_list_t *AXIS2_CALL
+AXIS2_EXTERN axis2_array_list_t *AXIS2_CALL
 oxs_sign_ctx_get_sign_parts(
     const oxs_sign_ctx_t *sign_ctx,
     const axis2_env_t *env)
@@ -58,7 +58,7 @@
     return sign_ctx->sign_parts;
 }
 
-oxs_x509_cert_t *AXIS2_CALL
+AXIS2_EXTERN oxs_x509_cert_t *AXIS2_CALL
 oxs_sign_ctx_get_certificate(
     const oxs_sign_ctx_t *sign_ctx,
     const axis2_env_t *env)
@@ -66,7 +66,7 @@
     return sign_ctx->certificate ;
 }
 
-openssl_pkey_t *AXIS2_CALL
+AXIS2_EXTERN openssl_pkey_t *AXIS2_CALL
 oxs_sign_ctx_get_private_key(
     const oxs_sign_ctx_t *sign_ctx,
     const axis2_env_t *env)
@@ -74,7 +74,7 @@
     return sign_ctx->prv_key ;
 }
 
-openssl_pkey_t *AXIS2_CALL
+AXIS2_EXTERN openssl_pkey_t *AXIS2_CALL
 oxs_sign_ctx_get_public_key(
     const oxs_sign_ctx_t *sign_ctx,
     const axis2_env_t *env)
@@ -83,7 +83,7 @@
 }
 
 
-axis2_status_t AXIS2_CALL
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
 oxs_sign_ctx_set_certificate(
     oxs_sign_ctx_t *sign_ctx,
     const axis2_env_t *env,
@@ -97,7 +97,7 @@
     return AXIS2_SUCCESS;
 }
 
-axis2_status_t AXIS2_CALL
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
 oxs_sign_ctx_set_private_key(
     oxs_sign_ctx_t *sign_ctx,
     const axis2_env_t *env,
@@ -111,7 +111,7 @@
     return AXIS2_SUCCESS;
 }
 
-axis2_status_t AXIS2_CALL
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
 oxs_sign_ctx_set_public_key(
     oxs_sign_ctx_t *sign_ctx,
     const axis2_env_t *env,
@@ -125,7 +125,7 @@
     return AXIS2_SUCCESS;
 }
 
-axis2_status_t AXIS2_CALL
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
 oxs_sign_ctx_set_sign_mtd_algo(
     oxs_sign_ctx_t *sign_ctx,
     const axis2_env_t *env,
@@ -141,7 +141,7 @@
     return AXIS2_SUCCESS;
 }
 
-axis2_status_t AXIS2_CALL
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
 oxs_sign_ctx_set_c14n_mtd(
     oxs_sign_ctx_t *sign_ctx,
     const axis2_env_t *env,
@@ -158,7 +158,7 @@
 }
 
 
-axis2_status_t AXIS2_CALL
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
 oxs_sign_ctx_set_sign_parts(
     oxs_sign_ctx_t *sign_ctx,
     const axis2_env_t *env,
@@ -196,7 +196,7 @@
 }
 
 
-axis2_status_t AXIS2_CALL
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
 oxs_sign_ctx_free(oxs_sign_ctx_t *sign_ctx,
         const axis2_env_t *env)
 {

Modified: webservices/axis2/trunk/c/rampart/src/omxmlsec/sign_part.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/rampart/src/omxmlsec/sign_part.c?view=diff&rev=509500&r1=509499&r2=509500
==============================================================================
--- webservices/axis2/trunk/c/rampart/src/omxmlsec/sign_part.c (original)
+++ webservices/axis2/trunk/c/rampart/src/omxmlsec/sign_part.c Tue Feb 20 02:35:50 2007
@@ -30,7 +30,7 @@
 
 
 /*Public functions*/
-axis2_char_t *AXIS2_CALL
+AXIS2_EXTERN axis2_char_t *AXIS2_CALL
 oxs_sign_part_get_id(
     const oxs_sign_part_t *sign_part,
     const axis2_env_t *env)
@@ -38,7 +38,7 @@
     return sign_part->id;
 }
 
-axis2_char_t *AXIS2_CALL
+AXIS2_EXTERN axis2_char_t *AXIS2_CALL
 oxs_sign_part_get_digest_mtd(
     const oxs_sign_part_t *sign_part,
     const axis2_env_t *env)
@@ -46,7 +46,7 @@
     return sign_part->digest_mtd;
 }
 
-axiom_node_t *AXIS2_CALL
+AXIS2_EXTERN axiom_node_t *AXIS2_CALL
 oxs_sign_part_get_node(
     const oxs_sign_part_t *sign_part,
     const axis2_env_t *env)
@@ -54,7 +54,7 @@
     return sign_part->node;
 }
 
-axis2_array_list_t *AXIS2_CALL
+AXIS2_EXTERN axis2_array_list_t *AXIS2_CALL
 oxs_sign_part_get_transforms(
     const oxs_sign_part_t *sign_part,
     const axis2_env_t *env)
@@ -62,7 +62,7 @@
     return sign_part->transforms;
 }
 
-axis2_status_t AXIS2_CALL
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
 oxs_sign_part_set_id(
     oxs_sign_part_t *sign_part,
     const axis2_env_t *env,
@@ -78,7 +78,7 @@
     return AXIS2_SUCCESS;
 }
 
-axis2_status_t AXIS2_CALL
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
 oxs_sign_part_set_digest_mtd(
     oxs_sign_part_t *sign_part,
     const axis2_env_t *env,
@@ -94,7 +94,7 @@
     return AXIS2_SUCCESS;
 }
 
-axis2_status_t AXIS2_CALL
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
 oxs_sign_part_set_node(
     oxs_sign_part_t *sign_part,
     const axis2_env_t *env,
@@ -107,7 +107,7 @@
     return AXIS2_SUCCESS;
 }
 
-axis2_status_t AXIS2_CALL
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
 oxs_sign_part_set_transforms(
     oxs_sign_part_t *sign_part,
     const axis2_env_t *env,
@@ -143,7 +143,7 @@
 }
 
 
-axis2_status_t AXIS2_CALL
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
 oxs_sign_part_free(oxs_sign_part_t *sign_part,
         const axis2_env_t *env)
 {

Modified: webservices/axis2/trunk/c/rampart/src/omxmlsec/signature.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/rampart/src/omxmlsec/signature.c?view=diff&rev=509500&r1=509499&r2=509500
==============================================================================
--- webservices/axis2/trunk/c/rampart/src/omxmlsec/signature.c (original)
+++ webservices/axis2/trunk/c/rampart/src/omxmlsec/signature.c Tue Feb 20 02:35:50 2007
@@ -25,6 +25,7 @@
 #include <oxs_signature.h>
 #include <oxs_buffer.h>
 #include <openssl_rsa.h>
+#include <openssl_sign.h>
 #include <openssl_digest.h>
 #include <openssl_sign.h>
 

Modified: webservices/axis2/trunk/c/rampart/src/omxmlsec/tokens/token_c14n_method.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/rampart/src/omxmlsec/tokens/token_c14n_method.c?view=diff&rev=509500&r1=509499&r2=509500
==============================================================================
--- webservices/axis2/trunk/c/rampart/src/omxmlsec/tokens/token_c14n_method.c (original)
+++ webservices/axis2/trunk/c/rampart/src/omxmlsec/tokens/token_c14n_method.c Tue Feb 20 02:35:50 2007
@@ -48,7 +48,7 @@
     /*If c14n algorithm is NULL then use the default*/
     if (!algorithm)
     {
-        algorithm = (axis2_char_t*)OXS_HREF_C14N;
+        algorithm = (axis2_char_t*)OXS_HREF_XML_EXC_C14N;
     }
 
     algo_attr =  axiom_attribute_create(env, OXS_ATTR_ALGORITHM, algorithm, NULL);

Modified: webservices/axis2/trunk/c/rampart/src/omxmlsec/tokens/token_transform.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/rampart/src/omxmlsec/tokens/token_transform.c?view=diff&rev=509500&r1=509499&r2=509500
==============================================================================
--- webservices/axis2/trunk/c/rampart/src/omxmlsec/tokens/token_transform.c (original)
+++ webservices/axis2/trunk/c/rampart/src/omxmlsec/tokens/token_transform.c Tue Feb 20 02:35:50 2007
@@ -48,7 +48,7 @@
     /*If transform algorithm is NULL then use the default*/
     if (!algorithm)
     {
-        algorithm = (axis2_char_t*)OXS_HREF_C14N;
+        algorithm = (axis2_char_t*)OXS_HREF_XML_EXC_C14N;
     }
 
     algo_attr =  axiom_attribute_create(env, OXS_ATTR_ALGORITHM, algorithm, NULL);

Modified: webservices/axis2/trunk/c/rampart/src/omxmlsec/transform.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/rampart/src/omxmlsec/transform.c?view=diff&rev=509500&r1=509499&r2=509500
==============================================================================
--- webservices/axis2/trunk/c/rampart/src/omxmlsec/transform.c (original)
+++ webservices/axis2/trunk/c/rampart/src/omxmlsec/transform.c Tue Feb 20 02:35:50 2007
@@ -26,10 +26,10 @@
     axis2_char_t *id ;
     oxs_tr_dtype_t input_data_type;
     oxs_tr_dtype_t output_data_type;
-    tr_func *transform_func; /*The function to implement the transform*/
+    oxs_transform_tr_func transform_func; /*The function to implement the transform*/
 };
 
-axis2_char_t *AXIS2_CALL
+AXIS2_EXTERN axis2_char_t *AXIS2_CALL
 oxs_transform_get_id(
     const oxs_transform_t *transform,
     const axis2_env_t *env)
@@ -37,7 +37,7 @@
     return transform->id;
 }
 
-oxs_tr_dtype_t AXIS2_CALL
+AXIS2_EXTERN oxs_tr_dtype_t AXIS2_CALL
 oxs_transform_get_input_data_type(
     const oxs_transform_t *transform,
     const axis2_env_t *env)
@@ -45,7 +45,7 @@
     return transform->input_data_type;
 }
 
-oxs_tr_dtype_t AXIS2_CALL
+AXIS2_EXTERN oxs_tr_dtype_t AXIS2_CALL
 oxs_transform_get_output_data_type(
     const oxs_transform_t *transform,
     const axis2_env_t *env)
@@ -53,7 +53,7 @@
     return transform->output_data_type;
 }
 
-tr_func *AXIS2_CALL
+AXIS2_EXTERN oxs_transform_tr_func AXIS2_CALL
 oxs_transform_get_transform_function(
     const oxs_transform_t *transform,
     const axis2_env_t *env)
@@ -61,7 +61,7 @@
     return transform->transform_func;
 }
 
-axis2_status_t AXIS2_CALL
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
 oxs_transform_set_id(
     oxs_transform_t *transform,
     const axis2_env_t *env,
@@ -77,7 +77,7 @@
     return AXIS2_SUCCESS;
 }
 
-axis2_status_t AXIS2_CALL
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
 oxs_transform_set_input_data_type(
     oxs_transform_t *transform,
     const axis2_env_t *env,
@@ -87,7 +87,7 @@
     return AXIS2_SUCCESS;
 }
 
-axis2_status_t AXIS2_CALL
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
 oxs_transform_set_output_data_type(
     oxs_transform_t *transform,
     const axis2_env_t *env,
@@ -97,11 +97,11 @@
     return AXIS2_SUCCESS;
 }
 
-axis2_status_t AXIS2_CALL
-oxs_transform_set_transform_function(
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+oxs_transform_set_transform_func(
     oxs_transform_t *transform,
     const axis2_env_t *env,
-    tr_func *transform_func)
+    oxs_transform_tr_func transform_func)
 {
     transform->transform_func = transform_func;
     return AXIS2_SUCCESS;

Modified: webservices/axis2/trunk/c/rampart/src/omxmlsec/transforms_factory.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/rampart/src/omxmlsec/transforms_factory.c?view=diff&rev=509500&r1=509499&r2=509500
==============================================================================
--- webservices/axis2/trunk/c/rampart/src/omxmlsec/transforms_factory.c (original)
+++ webservices/axis2/trunk/c/rampart/src/omxmlsec/transforms_factory.c Tue Feb 20 02:35:50 2007
@@ -23,19 +23,30 @@
 #include <oxs_transform.h>
 #include <oxs_transforms_factory.h>
 #include <oxs_buffer.h>
+#include <oxs_c14n.h>
 
 /*Functions that implements transforms*/
-axis2_status_t AXIS2_CALL
+oxs_tr_dtype_t AXIS2_CALL
 oxs_transforms_exc_c14n(const axis2_env_t *env,
             axiom_node_t *input,
             oxs_tr_dtype_t input_dtype,
-            axis2_char_t **output,
-            oxs_tr_dtype_t **output_dtype)
+            axis2_char_t **output)
 {
-    *output= "SAMPLE-SAMPLE-SAMPLE";
-    /*output_dtype = OXS_TRANSFORM_TYPE_CHAR;*/
+    axiom_document_t *doc = NULL;
+    axis2_char_t *c14nized = NULL;
+    oxs_tr_dtype_t output_dtype = OXS_TRANSFORM_TYPE_UNKNOWN;
 
-    return AXIS2_SUCCESS;
+    if(input_dtype != OXS_TRANSFORM_TYPE_NODE){
+       oxs_error(env, ERROR_LOCATION, OXS_ERROR_TRANSFORM_FAILED,"Transform expects a NODE.");
+       return OXS_TRANSFORM_TYPE_UNKNOWN;
+    }
+    doc = axiom_node_get_document((axiom_node_t*)input, env);
+    
+    oxs_c14n_apply(env, doc, AXIS2_FALSE, &c14nized, AXIS2_TRUE, NULL, (axiom_node_t*)input);
+
+    *output= c14nized;
+    output_dtype = OXS_TRANSFORM_TYPE_CHAR;
+    return output_dtype;
 }
 
 /*Public functions*/
@@ -51,7 +62,7 @@
         oxs_transform_set_id(tr, env, id);
         oxs_transform_set_input_data_type(tr, env, OXS_TRANSFORM_TYPE_NODE);
         oxs_transform_set_output_data_type(tr, env, OXS_TRANSFORM_TYPE_CHAR);
-        /*oxs_transform_set_transform_func(tr, env, oxs_transforms_exc_c14n);*/
+        oxs_transform_set_transform_func(tr, env, (oxs_transform_tr_func)oxs_transforms_exc_c14n);
         return tr;
     }else{
         /*Error we do not support*/

Modified: webservices/axis2/trunk/c/rampart/src/omxmlsec/xml_signature.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/rampart/src/omxmlsec/xml_signature.c?view=diff&rev=509500&r1=509499&r2=509500
==============================================================================
--- webservices/axis2/trunk/c/rampart/src/omxmlsec/xml_signature.c (original)
+++ webservices/axis2/trunk/c/rampart/src/omxmlsec/xml_signature.c Tue Feb 20 02:35:50 2007
@@ -28,6 +28,7 @@
 #include <oxs_sign_part.h>
 #include <oxs_xml_signature.h>
 #include <oxs_signature.h>
+#include <oxs_transform.h>
 #include <oxs_token_ds_reference.h>
 #include <oxs_token_digest_method.h>
 #include <oxs_token_digest_value.h>
@@ -103,18 +104,59 @@
     
     if((transforms) && (0 < AXIS2_ARRAY_LIST_SIZE(transforms, env))){
         axiom_node_t *transforms_node = NULL;
+        oxs_tr_dtype_t output_dtype = OXS_TRANSFORM_TYPE_UNKNOWN;/*This will always be the current dtype*/
+        void *tr_output = NULL;
+        output_dtype = OXS_TRANSFORM_TYPE_NODE; /*We always begin with a node*/
+        
+        tr_output = node; /*The first transformation is applied to the node*/
+
         /*Add ds:Transforms element*/
         transforms_node = oxs_token_build_transforms_element(env, reference_node);
         /*LOOP: Apply transforms. For example exclusive C14N*/
         for (i = 0; i < AXIS2_ARRAY_LIST_SIZE(transforms, env); i++){
-            /*Apply transform*/
+            oxs_transform_t *tr = NULL;
+            oxs_transform_tr_func tr_func = NULL;
+            oxs_tr_dtype_t input_dtype = OXS_TRANSFORM_TYPE_UNKNOWN;
+            void *tr_input = NULL;
+            axis2_char_t *tr_id = NULL;
+
+            /*Get the ith transform*/
+            tr = (oxs_transform_t*)AXIS2_ARRAY_LIST_GET(transforms, env, i);
+            tr_id = oxs_transform_get_id(tr, env);
+            tr_func = oxs_transform_get_transform_function(tr, env);
+            input_dtype = oxs_transform_get_input_data_type(tr, env);
+            
+            /*Prepare the input*/
+            /*If the required input type is CHAR and what we have is a NODE*/
+            if((input_dtype == OXS_TRANSFORM_TYPE_CHAR) && (output_dtype == OXS_TRANSFORM_TYPE_NODE)){
+                /*Serialize*/
+                tr_input = axiom_node_to_string((axiom_node_t*)tr_output, env);
+            /*If the required input type is NODE and what we have is a CHAR*/
+            }else if((input_dtype == OXS_TRANSFORM_TYPE_NODE) && (output_dtype == OXS_TRANSFORM_TYPE_CHAR)){
+                /*TODO De-serialize*/
+            }else{
+                /*Let it go as it is. */
+                tr_input = tr_output;
+            }
 
-            /*Add to ds:Transforms*/
+            /*Apply transform*/
+            if(tr_func){
+                output_dtype = (*tr_func)(env, tr_input, input_dtype, &tr_output);
+            }else{
+                oxs_error(env, ERROR_LOCATION, OXS_ERROR_TRANSFORM_FAILED,"Cannot get the transform implementation for %s", tr_id);
+            }
+            /*If the output data type is unknown OR the output is NULL its an error*/
+            if((output_dtype == OXS_TRANSFORM_TYPE_UNKNOWN) || (!tr_output)){
+                oxs_error(env, ERROR_LOCATION, OXS_ERROR_TRANSFORM_FAILED,"Transform failed for %s", tr_id);
+                /*return AXIS2_FAILURE*/
+            }
+            /*Add to ds:Transforms element*/
+            oxs_token_build_transform_element(env, transforms_node, tr_id);
         }
     }
     /*Serialize node*/
     serialized_node = AXIOM_NODE_TO_STRING(node, env);
-    printf("serialized_node %s\n", serialized_node);
+    
     /*Make digest.*/
     digest_mtd = oxs_sign_part_get_digest_mtd(sign_part, env);
     digest = openssl_sha1(env, serialized_node, axis2_strlen(serialized_node)); 
@@ -151,7 +193,6 @@
     
     /*Then serialize <SignedInfo>*/
     serialized_signed_info = c14nized; /*AXIOM_NODE_TO_STRING(signed_info_node, env);*/
-    printf("serialized_signed_info %s\n",serialized_signed_info); 
 
     /*Make the input and out put buffers*/
     input_buf = oxs_buffer_create(env);

Modified: webservices/axis2/trunk/c/rampart/test/omxmlsec/test.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/rampart/test/omxmlsec/test.c?view=diff&rev=509500&r1=509499&r2=509500
==============================================================================
--- webservices/axis2/trunk/c/rampart/test/omxmlsec/test.c (original)
+++ webservices/axis2/trunk/c/rampart/test/omxmlsec/test.c Tue Feb 20 02:35:50 2007
@@ -29,6 +29,8 @@
 #include <oxs_key_mgr.h>
 #include <openssl_pkey.h>
 #include <oxs_error.h>
+#include <oxs_transform.h>
+#include <oxs_transforms_factory.h>
 #include <oxs_xml_signature.h>
 #include <oxs_sign_ctx.h>
 #include <oxs_sign_part.h>
@@ -75,7 +77,9 @@
     axiom_node_t *tmpl = NULL;
     oxs_sign_part_t *sign_part = NULL;
     oxs_sign_ctx_t *sign_ctx = NULL;
+    oxs_transform_t *tr = NULL;
     axis2_array_list_t *sign_parts = NULL;
+    axis2_array_list_t *tr_list = NULL;
     FILE *outf;
 
     env = axis2_env_create_all("echo.log", AXIS2_LOG_LEVEL_TRACE);
@@ -99,8 +103,16 @@
     /*Sign specific*/
     sign_part = oxs_sign_part_create(env);
     status = AXIS2_FAILURE;
+
+    tr_list = axis2_array_list_create(env, 1);
+    /*We need C14N transform*/
+    tr = oxs_transforms_factory_produce_transform(env, OXS_HREF_TRANSFORM_XML_EXC_C14N);
+    axis2_array_list_add(tr_list, env, tr);
+    oxs_sign_part_set_transforms(sign_part, env, tr_list);
+    /*We need to sign this node*/
     status = oxs_sign_part_set_node(sign_part, env, axiom_node_get_first_element(tmpl, env));
 
+
     sign_parts = axis2_array_list_create(env, 1);
     axis2_array_list_add(sign_parts, env, sign_part);
     sign_ctx = oxs_sign_ctx_create(env);
@@ -125,7 +137,7 @@
         /*Set sig algo*/
         oxs_sign_ctx_set_sign_mtd_algo(sign_ctx, env, OXS_HREF_RSA_SHA1);
         /*Set C14N method*/
-        oxs_sign_ctx_set_c14n_mtd(sign_ctx, env, OXS_HREF_C14N);
+        oxs_sign_ctx_set_c14n_mtd(sign_ctx, env, OXS_HREF_XML_EXC_C14N);
         /*Set sig parts*/
         oxs_sign_ctx_set_sign_parts(sign_ctx, env, sign_parts);
         /*Sign*/



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org