Author: kaushalye
Date: Sun Oct 14 22:08:15 2007
New Revision: 584677

URL: http://svn.apache.org/viewvc?rev=584677&view=rev
Log:
Building derived key token given a derived key


Modified:
    webservices/rampart/trunk/c/include/oxs_constants.h
    webservices/rampart/trunk/c/include/oxs_derivation.h
    webservices/rampart/trunk/c/include/oxs_tokens.h
    webservices/rampart/trunk/c/src/omxmlsec/derivation.c
    webservices/rampart/trunk/c/src/omxmlsec/tokens/token_derived_key_token.c
    webservices/rampart/trunk/c/src/omxmlsec/tokens/token_length.c
    webservices/rampart/trunk/c/src/omxmlsec/tokens/token_offset.c
    webservices/rampart/trunk/c/src/util/rampart_encryption.c

Modified: webservices/rampart/trunk/c/include/oxs_constants.h
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/c/include/oxs_constants.h?rev=584677&r1=584676&r2=584677&view=diff
==============================================================================
--- webservices/rampart/trunk/c/include/oxs_constants.h (original)
+++ webservices/rampart/trunk/c/include/oxs_constants.h Sun Oct 14 22:08:15 2007
@@ -374,6 +374,12 @@
 #define OXS_STR_EXTERNAL_URI "ExternalUri"
 #define OXS_STR_ENCRYPTED_KEY "Encryptedkey"
 
+    
+    /****************************************************************
+        WS Security 1.1
+    ****************************************************************/
+#define OXS_WSS_11_VALUE_TYPE_ENCRYPTED_KEY 
"http://docs.oasis-open.org/wss/oasis-wss-soap-message-security-1.1#EncryptedKey";
+
     /*************************************************************************/
 
 

Modified: webservices/rampart/trunk/c/include/oxs_derivation.h
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/c/include/oxs_derivation.h?rev=584677&r1=584676&r2=584677&view=diff
==============================================================================
--- webservices/rampart/trunk/c/include/oxs_derivation.h (original)
+++ webservices/rampart/trunk/c/include/oxs_derivation.h Sun Oct 14 22:08:15 
2007
@@ -39,6 +39,7 @@
 {
 #endif
 
+
     /**
      * Derive Keys 
      * Caller must free memory
@@ -58,7 +59,12 @@
                          oxs_key_t *derived_key
                          );
 
-
+    AXIS2_EXTERN axiom_node_t * AXIS2_CALL
+    oxs_derivation_build_derived_key_token(const axutil_env_t *env,
+    oxs_key_t *derived_key,
+    axiom_node_t *parent,
+    axis2_char_t *stref_uri,
+    axis2_char_t *stref_val_type);
 
     /** @} */
 #ifdef __cplusplus

Modified: webservices/rampart/trunk/c/include/oxs_tokens.h
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/c/include/oxs_tokens.h?rev=584677&r1=584676&r2=584677&view=diff
==============================================================================
--- webservices/rampart/trunk/c/include/oxs_tokens.h (original)
+++ webservices/rampart/trunk/c/include/oxs_tokens.h Sun Oct 14 22:08:15 2007
@@ -508,11 +508,11 @@
     AXIS2_EXTERN axiom_node_t* AXIS2_CALL
     oxs_token_build_length_element(const axutil_env_t *env,
                                      axiom_node_t *parent,
-                                     axis2_char_t* length_val);
+                                     int length);
        /**
         * Gets value from <wsc:Length> element
         */
-    AXIS2_EXTERN axis2_char_t* AXIS2_CALL
+    AXIS2_EXTERN int AXIS2_CALL
     oxs_token_get_length_value(const axutil_env_t *env,
                            axiom_node_t *length_node);
     /**
@@ -521,11 +521,11 @@
     AXIS2_EXTERN axiom_node_t* AXIS2_CALL
     oxs_token_build_offset_element(const axutil_env_t *env,
                                      axiom_node_t *parent,
-                                     axis2_char_t* offset_val);
+                                     int offset);
        /**
         * Gets value from <wsc:Offset> element
         */
-    AXIS2_EXTERN axis2_char_t* AXIS2_CALL
+    AXIS2_EXTERN int AXIS2_CALL
     oxs_token_get_offset_value(const axutil_env_t *env,
                            axiom_node_t *offset_node);
     /**

Modified: webservices/rampart/trunk/c/src/omxmlsec/derivation.c
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/omxmlsec/derivation.c?rev=584677&r1=584676&r2=584677&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/omxmlsec/derivation.c (original)
+++ webservices/rampart/trunk/c/src/omxmlsec/derivation.c Sun Oct 14 22:08:15 
2007
@@ -22,6 +22,47 @@
 #include <oxs_error.h>
 #include <oxs_utility.h>
 #include <oxs_asym_ctx.h>
+#include <oxs_tokens.h>
+
+
+AXIS2_EXTERN axiom_node_t * AXIS2_CALL
+oxs_derivation_build_derived_key_token(const axutil_env_t *env,
+    oxs_key_t *derived_key,
+    axiom_node_t *parent,
+    axis2_char_t *stref_uri,
+    axis2_char_t *stref_val_type)
+{
+    axiom_node_t *dk_token = NULL;
+    axiom_node_t *str_token = NULL;
+    axiom_node_t *ref_token = NULL;
+    axiom_node_t *nonce_token = NULL;
+    axiom_node_t *offset_token = NULL;
+    axiom_node_t *length_token = NULL;
+    
+    axis2_char_t *dk_id = NULL;
+    axis2_char_t *nonce = NULL;
+    int offset = 0;
+    int length = 0; 
+
+    dk_token = oxs_token_build_derived_key_token_element(env, parent, dk_id, 
NULL);
+    str_token = oxs_token_build_security_token_reference_element(env, 
dk_token); 
+    ref_token = oxs_token_build_reference_element(env, dk_token, stref_uri, 
stref_val_type);
+
+    /*Create offset*/
+    if(offset > 0){
+        offset_token = oxs_token_build_offset_element(env, dk_token, offset);
+    }
+    /*Create length*/
+    if(length > 0){
+        length_token = oxs_token_build_length_element(env, dk_token, length);
+    }
+    /*Create nonce*/
+    if(nonce){
+        nonce_token = oxs_token_build_nonce_element(env, dk_token, nonce);
+    }
+   
+    return dk_token; 
+}
 
 AXIS2_EXTERN axis2_status_t AXIS2_CALL
 oxs_derivation_derive_key(const axutil_env_t *env,

Modified: 
webservices/rampart/trunk/c/src/omxmlsec/tokens/token_derived_key_token.c
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/omxmlsec/tokens/token_derived_key_token.c?rev=584677&r1=584676&r2=584677&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/omxmlsec/tokens/token_derived_key_token.c 
(original)
+++ webservices/rampart/trunk/c/src/omxmlsec/tokens/token_derived_key_token.c 
Sun Oct 14 22:08:15 2007
@@ -50,6 +50,11 @@
         return NULL;
     }
 
+    if(algo){
+        algo_att =  axiom_attribute_create(env, OXS_ATTR_ALGORITHM, algo, 
NULL);
+        ret = axiom_element_add_attribute(derived_key_token_ele, env, 
algo_att, derived_key_token_node);
+    }
+
     if (!id)
     {
         id = oxs_util_generate_id(env,(axis2_char_t*)OXS_DERIVED_ID);
@@ -57,10 +62,8 @@
 
 
     id_attr = axiom_attribute_create(env, OXS_ATTR_ID, id,ns);
-    algo_att =  axiom_attribute_create(env, OXS_ATTR_ALGORITHM, algo, NULL);
 
     ret = axiom_element_add_attribute(derived_key_token_ele, env, id_attr, 
derived_key_token_node);
-    ret = axiom_element_add_attribute(derived_key_token_ele, env, algo_att, 
derived_key_token_node);
 
     return derived_key_token_node;
 }

Modified: webservices/rampart/trunk/c/src/omxmlsec/tokens/token_length.c
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/omxmlsec/tokens/token_length.c?rev=584677&r1=584676&r2=584677&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/omxmlsec/tokens/token_length.c (original)
+++ webservices/rampart/trunk/c/src/omxmlsec/tokens/token_length.c Sun Oct 14 
22:08:15 2007
@@ -23,26 +23,27 @@
 #include <oxs_axiom.h>
 
 
-AXIS2_EXTERN axis2_char_t* AXIS2_CALL
+AXIS2_EXTERN int AXIS2_CALL
 oxs_token_get_length_value(const axutil_env_t *env,
                            axiom_node_t *length_node)
 {
     axis2_char_t *value = NULL;
     value = (axis2_char_t*)oxs_axiom_get_node_content(env, length_node);
-    return value;
 
+    return axutil_atoi(value);
 }
 
 AXIS2_EXTERN axiom_node_t* AXIS2_CALL
 oxs_token_build_length_element(const axutil_env_t *env,
                                      axiom_node_t *parent,
-                                     axis2_char_t* length_val
+                                     int length
                                     )
 {
     axiom_node_t *length_node = NULL;
     axiom_element_t *length_ele = NULL;
     axis2_status_t ret;
     axiom_namespace_t *ns_obj = NULL;
+    axis2_char_t *length_val = NULL;
 
     ns_obj = axiom_namespace_create(env, OXS_WSC_NS,
                                     OXS_WSC);
@@ -55,6 +56,11 @@
         return NULL;
     }
 
+    if(length > 0){
+        length_val = (axis2_char_t *) AXIS2_MALLOC(env->allocator, 
sizeof(axis2_char_t) * 32);
+        sprintf(length_val, "%d", length );
+    }
+ 
     if (length_val)
     {
         ret  = axiom_element_set_text(length_ele, env, length_val, 
length_node);

Modified: webservices/rampart/trunk/c/src/omxmlsec/tokens/token_offset.c
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/omxmlsec/tokens/token_offset.c?rev=584677&r1=584676&r2=584677&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/omxmlsec/tokens/token_offset.c (original)
+++ webservices/rampart/trunk/c/src/omxmlsec/tokens/token_offset.c Sun Oct 14 
22:08:15 2007
@@ -23,26 +23,31 @@
 #include <oxs_axiom.h>
 
 
-AXIS2_EXTERN axis2_char_t* AXIS2_CALL
+AXIS2_EXTERN int AXIS2_CALL
 oxs_token_get_offset_value(const axutil_env_t *env,
                            axiom_node_t *offset_node)
 {
     axis2_char_t *value = NULL;
+    int offset = -1;
+
     value = (axis2_char_t*)oxs_axiom_get_node_content(env, offset_node);
-    return value;
+    offset = axutil_atoi(value);
+
+    return offset;
 
 }
 
 AXIS2_EXTERN axiom_node_t* AXIS2_CALL
 oxs_token_build_offset_element(const axutil_env_t *env,
                                      axiom_node_t *parent,
-                                     axis2_char_t* offset_val
+                                     int offset
                                     )
 {
     axiom_node_t *offset_node = NULL;
     axiom_element_t *offset_ele = NULL;
     axis2_status_t ret;
     axiom_namespace_t *ns_obj = NULL;
+    axis2_char_t* offset_val = NULL;
 
     ns_obj = axiom_namespace_create(env, OXS_WSC_NS,
                                     OXS_WSC);
@@ -53,6 +58,10 @@
         oxs_error(env, ERROR_LOCATION,
                   OXS_ERROR_ELEMENT_FAILED, "Error creating %s element", 
OXS_NODE_OFFSET);
         return NULL;
+    }
+    if(offset > 0){
+        offset_val = (axis2_char_t *) AXIS2_MALLOC(env->allocator, 
sizeof(axis2_char_t) * 32);
+        sprintf(offset_val, "%d", offset );
     }
 
     if (offset_val)

Modified: webservices/rampart/trunk/c/src/util/rampart_encryption.c
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/util/rampart_encryption.c?rev=584677&r1=584676&r2=584677&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/util/rampart_encryption.c (original)
+++ webservices/rampart/trunk/c/src/util/rampart_encryption.c Sun Oct 14 
22:08:15 2007
@@ -304,7 +304,11 @@
                             parent_of_node_to_enc, OXS_TYPE_ENC_ELEMENT, 
enc_data_id );
             status = oxs_xml_enc_encrypt_node(env, enc_ctx,
                                                   node_to_enc, &enc_data_node);
+            /*Add Ids to the list. We will create reference list*/
             axutil_array_list_add(id_list, env, enc_data_id);
+
+            /*Add derived key to the list. We will create tokens*/
+            axutil_array_list_add(dk_list, env, derived_key);
             if(AXIS2_FAILURE == status)
             {
                 AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
@@ -334,8 +338,11 @@
         oxs_key_t *dk = NULL;
         
         dk = (oxs_key_t *)axutil_array_list_get(dk_list, env, j);
-        /*TODO build the <wsc:DerivedKeyToken> element*/
         
+        /*TODO build the <wsc:DerivedKeyToken> element*/
+        if(dk){
+            oxs_derivation_build_derived_key_token(env, dk, sec_node, 
OXS_WSS_11_VALUE_TYPE_ENCRYPTED_KEY, "fake_key_id");
+        }
     }/*End of For loop of dk_list iteration*/
     return status;
 }


Reply via email to