Author: kaushalye Date: Tue Nov 13 02:30:20 2007 New Revision: 594471 URL: http://svn.apache.org/viewvc?rev=594471&view=rev Log: Signature confirmation support
Modified: webservices/rampart/trunk/c/src/omxmlsec/derivation.c webservices/rampart/trunk/c/src/util/rampart_sec_header_builder.c webservices/rampart/trunk/c/src/util/rampart_sec_header_processor.c webservices/rampart/trunk/c/src/util/rampart_signature.c Modified: webservices/rampart/trunk/c/src/omxmlsec/derivation.c URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/omxmlsec/derivation.c?rev=594471&r1=594470&r2=594471&view=diff ============================================================================== --- webservices/rampart/trunk/c/src/omxmlsec/derivation.c (original) +++ webservices/rampart/trunk/c/src/omxmlsec/derivation.c Tue Nov 13 02:30:20 2007 @@ -26,6 +26,37 @@ #include <openssl_hmac.h> AXIS2_EXTERN oxs_key_t* AXIS2_CALL +oxs_derivation_get_the_referenced_base_key(const axutil_env_t *env, + axiom_node_t *dk_token_node, + axiom_node_t *root_node) +{ + axiom_node_t *str_node = NULL; + axiom_node_t *ref_node = NULL; + axiom_node_t *refed_node = NULL; + axis2_char_t *ref_val = NULL; + axis2_char_t *id = NULL; + + str_node = oxs_axiom_get_first_child_node_by_name(env, dk_token_node, OXS_NODE_SECURITY_TOKEN_REFRENCE, OXS_WSSE_XMLNS, NULL); + ref_node = oxs_axiom_get_first_child_node_by_name(env, str_node, OXS_NODE_REFERENCE, OXS_WSSE_XMLNS, NULL); + if(!ref_node) {return NULL ;} + + ref_val = oxs_token_get_reference(env, ref_node); + if(!ref_val) {return NULL ;} + + /*Need to remove # sign from the ID*/ + id = axutil_string_substring_starting_at(ref_val, 1); + + /*Search for an element with the val(@Id)[EMAIL PROTECTED]/ + refed_node = oxs_axiom_get_node_by_id(env, root_node, OXS_ATTR_ID, id, NULL); + if(!refed_node){ + oxs_error(env, ERROR_LOCATION, OXS_ERROR_INVALID_DATA, "Cannot find the referenced key for the derived key"); + return NULL; + } + + return NULL; +} + +AXIS2_EXTERN oxs_key_t* AXIS2_CALL oxs_derivation_extract_derived_key_from_token(const axutil_env_t *env, axiom_node_t *dk_token_node, axiom_node_t *root_node, Modified: webservices/rampart/trunk/c/src/util/rampart_sec_header_builder.c URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/util/rampart_sec_header_builder.c?rev=594471&r1=594470&r2=594471&view=diff ============================================================================== --- webservices/rampart/trunk/c/src/util/rampart_sec_header_builder.c (original) +++ webservices/rampart/trunk/c/src/util/rampart_sec_header_builder.c Tue Nov 13 02:30:20 2007 @@ -252,7 +252,7 @@ /*Signature Confirmation support. Only in the server side*/ if(axis2_msg_ctx_get_server_side(msg_ctx,env)){ - axis2_bool_t sign_conf_reqd = AXIS2_FALSE; + axis2_bool_t sign_conf_reqd = AXIS2_TRUE; /*TODO sign_conf_reqd <- Get from context <- policy*/ if(sign_conf_reqd){ status = rampart_sig_confirm_signature(env, msg_ctx, rampart_context, sec_node); Modified: webservices/rampart/trunk/c/src/util/rampart_sec_header_processor.c URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/util/rampart_sec_header_processor.c?rev=594471&r1=594470&r2=594471&view=diff ============================================================================== --- webservices/rampart/trunk/c/src/util/rampart_sec_header_processor.c (original) +++ webservices/rampart/trunk/c/src/util/rampart_sec_header_processor.c Tue Nov 13 02:30:20 2007 @@ -70,10 +70,10 @@ /*Need to remove # sign from the ID*/ id = axutil_string_substring_starting_at(ref_val, 1); - /*Search for an element with the val(@Id)[EMAIL PROTECTED]/ + /*Search for an element with the val(@wsu:Id)[EMAIL PROTECTED]/ refed_node = oxs_axiom_get_node_by_id(env, root_node, OXS_ATTR_ID, id, OXS_WSU_XMLNS); if(!refed_node){ - /*Search for an element with the val(@wsu:Id)[EMAIL PROTECTED]/ + /*Search for an element with the val(@Id)[EMAIL PROTECTED]/ refed_node = oxs_axiom_get_node_by_id(env, root_node, OXS_ATTR_ID, id, NULL); /*If we still cannot find its an error*/ if(!refed_node){ @@ -354,18 +354,6 @@ env, encrypted_key_node, OXS_NODE_REFERENCE_LIST, OXS_ENC_NS, NULL); reference_list = oxs_token_get_reference_list_data(env, ref_list_node); - /*If there are no references. Nothing to do. Return success*/ -/* - if((!reference_list) || (0 == axutil_array_list_size(reference_list, env))) - { - AXIS2_LOG_INFO(env->log, "[rampart][shp] Reference List is empty"); - return AXIS2_SUCCESS; - } - - AXIS2_LOG_INFO(env->log, - "[rampart][shp] Reference List has %d node reference(s)", - axutil_array_list_size(reference_list, env)); -*/ /*Get the algorithm to decrypt the sesison key*/ enc_mtd_node = oxs_axiom_get_first_child_node_by_name( env, encrypted_key_node, OXS_NODE_ENCRYPTION_METHOD, OXS_ENC_NS, NULL); @@ -797,6 +785,15 @@ axiom_node_t *reffed_node = NULL; axis2_char_t *reffed_node_name = NULL; + /*Now we need to decrypt the EncryptedKey if not done already*/ + if(!session_key){ + axiom_node_t *encrypted_key_node = NULL; + + encrypted_key_node = oxs_axiom_get_first_child_node_by_name(env, sec_node, OXS_NODE_ENCRYPTED_KEY, OXS_ENC_NS, NULL); + status = rampart_shp_process_encrypted_key(env, msg_ctx, rampart_context, soap_envelope, sec_node, encrypted_key_node); + session_key = rampart_context_get_session_key(rampart_context, env); + } + /*This can be a derrived key or an EncryptedKey. Whatever it is, it should be within the Security header*/ reffed_node = rampart_shp_process_key_info_for_ref(env, key_info_node, sec_node); if(!reffed_node){ @@ -807,6 +804,7 @@ reffed_node_name = axiom_util_get_localname(reffed_node, env); if(0 == axutil_strcmp(reffed_node_name, OXS_NODE_DERIVED_KEY_TOKEN)){ /*Signed by a DerivedKey*/ + key_to_verify = oxs_derivation_extract_derived_key_from_token(env, reffed_node, envelope_node, session_key); if(!key_to_verify){ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[rampart][shp] Derived key cannot be taken for the signature verification"); Modified: webservices/rampart/trunk/c/src/util/rampart_signature.c URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/util/rampart_signature.c?rev=594471&r1=594470&r2=594471&view=diff ============================================================================== --- webservices/rampart/trunk/c/src/util/rampart_signature.c (original) +++ webservices/rampart/trunk/c/src/util/rampart_signature.c Tue Nov 13 02:30:20 2007 @@ -731,7 +731,9 @@ id = oxs_util_generate_id(env,(axis2_char_t*)OXS_SIG_CONF_ID); /*TODO: Get the SignatureValue from the request*/ - sig_val = "FAKE-SIG-VAL=="; + + /*Get SPR*/ + sig_val = (axis2_char_t*)rampart_get_security_processed_result(env, msg_ctx, RAMPART_SPR_SIG_VALUE); /*Build wsse11:SignatureConfirmation element */ oxs_token_build_signature_confirmation_element(env, sec_node, id, sig_val);