You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by ka...@apache.org on 2007/02/08 14:17:51 UTC

svn commit: r504883 - in /webservices/axis2/trunk/c/rampart: include/oxs_xml_signature.h src/omxmlsec/Makefile.am src/omxmlsec/sign_part.c src/omxmlsec/xml_signature.c test/Makefile.am test/omxmlsec/test.c

Author: kaushalye
Date: Thu Feb  8 05:17:51 2007
New Revision: 504883

URL: http://svn.apache.org/viewvc?view=rev&rev=504883
Log:
Implementing XML signature in OMXMLSecurity. 


Modified:
    webservices/axis2/trunk/c/rampart/include/oxs_xml_signature.h
    webservices/axis2/trunk/c/rampart/src/omxmlsec/Makefile.am
    webservices/axis2/trunk/c/rampart/src/omxmlsec/sign_part.c
    webservices/axis2/trunk/c/rampart/src/omxmlsec/xml_signature.c
    webservices/axis2/trunk/c/rampart/test/Makefile.am
    webservices/axis2/trunk/c/rampart/test/omxmlsec/test.c

Modified: webservices/axis2/trunk/c/rampart/include/oxs_xml_signature.h
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/rampart/include/oxs_xml_signature.h?view=diff&rev=504883&r1=504882&r2=504883
==============================================================================
--- webservices/axis2/trunk/c/rampart/include/oxs_xml_signature.h (original)
+++ webservices/axis2/trunk/c/rampart/include/oxs_xml_signature.h Thu Feb  8 05:17:51 2007
@@ -20,8 +20,8 @@
 
 
 /**
-  * @file oxs_xml_enc.h
-  * @brief Does the XML encryption for OMXMLSecurity  
+  * @file oxs_xml_signature.h
+  * @brief Does the XML Signature for OMXMLSecurity  
   */
 
 #include <axis2_defines.h>

Modified: webservices/axis2/trunk/c/rampart/src/omxmlsec/Makefile.am
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/rampart/src/omxmlsec/Makefile.am?view=diff&rev=504883&r1=504882&r2=504883
==============================================================================
--- webservices/axis2/trunk/c/rampart/src/omxmlsec/Makefile.am (original)
+++ webservices/axis2/trunk/c/rampart/src/omxmlsec/Makefile.am Thu Feb  8 05:17:51 2007
@@ -1,5 +1,5 @@
 SUBDIRS = tokens openssl c14n
-noinst_LTLIBRARIES = libomxmlsec.la
+lib_LTLIBRARIES = libomxmlsec.la
 
 libomxmlsec_la_SOURCES = ctx.c  buffer.c key.c cipher.c error.c axis2_utils.c axiom.c \
                          iv.c xml_encryption.c encryption.c\

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=504883&r1=504882&r2=504883
==============================================================================
--- webservices/axis2/trunk/c/rampart/src/omxmlsec/sign_part.c (original)
+++ webservices/axis2/trunk/c/rampart/src/omxmlsec/sign_part.c Thu Feb  8 05:17:51 2007
@@ -100,6 +100,9 @@
     const axis2_env_t *env,
     axiom_node_t *node)
 {
+    if(sign_part->node){
+        sign_part->node = NULL;
+    }
     sign_part->node = node;
     return AXIS2_SUCCESS;
 }
@@ -110,6 +113,9 @@
     const axis2_env_t *env,
     axis2_array_list_t *transforms)
 {
+    if(sign_part->transforms){
+        sign_part->transforms = NULL;
+    }
     sign_part->transforms = transforms;
     return AXIS2_SUCCESS;
 }

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=504883&r1=504882&r2=504883
==============================================================================
--- webservices/axis2/trunk/c/rampart/src/omxmlsec/xml_signature.c (original)
+++ webservices/axis2/trunk/c/rampart/src/omxmlsec/xml_signature.c Thu Feb  8 05:17:51 2007
@@ -22,6 +22,7 @@
 #include <oxs_buffer.h>
 #include <oxs_cipher.h>
 #include <openssl_rsa.h>
+#include <openssl_digest.h>
 #include <oxs_sign_ctx.h>
 #include <oxs_sign_part.h>
 #include <oxs_token_ds_reference.h>
@@ -36,6 +37,7 @@
 #include <oxs_token_signed_info.h>
 /*Private functions*/
 
+
 /*parent is ds:SignedInfo*/
 static axis2_status_t
 rampart_xml_sig_build_reference(const axis2_env_t *env,
@@ -60,7 +62,8 @@
 
     /*Get transforms if any*/
     transforms = oxs_sign_part_get_transforms(sign_part, env);
-    if(0 < AXIS2_ARRAY_LIST_SIZE(transforms, env)){
+    
+    if((transforms) && (0 < AXIS2_ARRAY_LIST_SIZE(transforms, env))){
         axiom_node_t *transforms_node = NULL;
         /*Add ds:Transforms element*/
         transforms_node = oxs_token_build_transforms_element(env, reference_node);
@@ -76,15 +79,45 @@
 
     /*Make digest.*/
     digest_mtd = oxs_sign_part_get_digest_mtd(sign_part, env);
-    digest = "j6lwx3rvEPO0vKtMup4NbeVu8nk=";/*TODO : Hard coded*/ 
+    digest = openssl_sha1(env, serialized_node, axis2_strlen(serialized_node)); 
 
     /*Construct nodes*/
     digest_mtd_node = oxs_token_build_digest_method_element(env, reference_node, digest_mtd);
     digest_value_node = oxs_token_build_digest_value_element(env, reference_node, digest);
-
+    
     return AXIS2_SUCCESS; 
 }
 
+static axis2_status_t
+rampart_xml_sig_sign_signed_info(const axis2_env_t *env,
+    axiom_node_t *signature_node,
+    axiom_node_t *signed_info_node,
+    oxs_sign_ctx_t *sign_ctx)
+{
+    axis2_char_t *signature_val = "FAKE_SIG_VAL(734dwe93721fd8y2==";
+    axis2_char_t *serialized_signed_info = NULL;
+    axis2_char_t *sign_algo = NULL;
+    axis2_char_t *c14n_algo = NULL;
+    axiom_node_t *signature_val_node = NULL;
+
+    /*TODO : Cannonicalize <SignedInfo>*/
+    c14n_algo = oxs_sign_ctx_get_c14n_mtd(sign_ctx, env);
+
+    /*Then serialize <SignedInfo>*/
+    serialized_signed_info = AXIOM_NODE_TO_STRING(signed_info_node, env);
+    
+    /*Then sign... NOTE: The signature process includes making the digest. e.g. rsa-sha1 => RSA(SHA-1(contents))*/ 
+    sign_algo = oxs_sign_ctx_get_sign_mtd_algo(sign_ctx, env);
+
+    /*Sign the data using the private key*/
+    signature_val = "MC0CFFrVLtRlk=";
+    
+    /*Construct <SignatureValue>*/
+    signature_val_node = oxs_token_build_signature_value_element(env, signature_node, signature_val);
+
+    return AXIS2_SUCCESS;
+}
+
 /*Public functions*/
 AXIS2_EXTERN axis2_status_t AXIS2_CALL 
 oxs_xml_sig_sign(const axis2_env_t *env,
@@ -94,11 +127,9 @@
     axiom_node_t *signed_info_node = NULL;
     axiom_node_t *signature_node = NULL;
     axiom_node_t *signature_mtd_node = NULL;
-    axiom_node_t *signature_val_node = NULL;
     axiom_node_t *c14n_mtd_node = NULL;
     axis2_char_t *sign_algo = NULL;
     axis2_char_t *c14n_algo = NULL;
-    axis2_char_t *signature_val = NULL;
     axis2_array_list_t *sign_parts = NULL;
     int i=0;
 
@@ -122,22 +153,16 @@
     /*For each and every signature part in sig ctx,*/
     for (i = 0; i < AXIS2_ARRAY_LIST_SIZE(sign_parts, env); i++){
         oxs_sign_part_t *sign_part =  NULL;
+
         /*TODO Get ith sign_part*/
-        
+        sign_part = (oxs_sign_part_t*)axis2_array_list_get(sign_parts, env, i);
         /*Create <ds:Reference> elements */
         rampart_xml_sig_build_reference(env, signed_info_node, sign_part);
 
     }
-    /*Cannonicalize <SignedInfo>*/
-    
+    /*At this point we have a complete <SignedInfo> node. Now we need to sign it*/
+    rampart_xml_sig_sign_signed_info(env, signature_node, signed_info_node, sign_ctx); 
 
-    /*Then serialize <SignedInfo>*/
-     
-    /*Sign the data using the private key*/
-    signature_val = "MC0CFFrVLtRlk=";
-    
-    /*Construct <SignatureValue>*/
-    signature_val_node = oxs_token_build_signature_value_element(env, signature_node, signature_val);
     
     return AXIS2_SUCCESS;
 }

Modified: webservices/axis2/trunk/c/rampart/test/Makefile.am
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/rampart/test/Makefile.am?view=diff&rev=504883&r1=504882&r2=504883
==============================================================================
--- webservices/axis2/trunk/c/rampart/test/Makefile.am (original)
+++ webservices/axis2/trunk/c/rampart/test/Makefile.am Thu Feb  8 05:17:51 2007
@@ -1,2 +1,2 @@
-SUBDIRS = openssl c14n
+SUBDIRS = openssl c14n omxmlsec
 

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=504883&r1=504882&r2=504883
==============================================================================
--- webservices/axis2/trunk/c/rampart/test/omxmlsec/test.c (original)
+++ webservices/axis2/trunk/c/rampart/test/omxmlsec/test.c Thu Feb  8 05:17:51 2007
@@ -20,6 +20,7 @@
 #include <axis2_util.h>
 #include <oxs_constants.h>
 #include <oxs_utility.h>
+#include <oxs_axiom.h>
 #include <axiom.h>
 #include <axiom_xml_reader.h>
 #include <axis2_env.h>
@@ -72,6 +73,7 @@
     axiom_node_t *tmpl = NULL;
     oxs_sign_part_t *sign_part = NULL;
     oxs_sign_ctx_t *sign_ctx = NULL;
+    axis2_array_list_t *sign_parts = NULL;
     FILE *outf;
 
     env = axis2_env_create_all("echo.log", AXIS2_LOG_LEVEL_TRACE);
@@ -94,14 +96,19 @@
     
     /*Sign specific*/
     sign_part = oxs_sign_part_create(env);
+    status = AXIS2_FAILURE;
     status = oxs_sign_part_set_node(sign_part, env, AXIOM_NODE_GET_FIRST_CHILD(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);
+    oxs_sign_ctx_set_sign_parts(sign_ctx, env, sign_parts);
+    /*Sign*/
+    oxs_xml_sig_sign(env, sign_ctx, tmpl);
 
-    
     signed_result = AXIOM_NODE_TO_STRING(tmpl, env) ;
 
-    outf = fopen("result.xml", "wb");
+    outf = fopen("result-sign.xml", "wb");
     fwrite(signed_result, 1, AXIS2_STRLEN(signed_result), outf);
     fclose(outf);
     return 0;



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