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;
}