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 2006/11/10 06:21:26 UTC

svn commit: r473195 - in /webservices/axis2/trunk/c/rampart: include/oxs_axiom.h src/omxmlsec/axiom.c src/omxmlsec/token_cipher_value.c src/omxmlsec/token_encrypted_data.c src/omxmlsec/xml_encryption.c test/omxmlsec/test.c

Author: kaushalye
Date: Thu Nov  9 21:21:25 2006
New Revision: 473195

URL: http://svn.apache.org/viewvc?view=rev&rev=473195
Log:
Added decryption functionalities for xml encryption

Modified:
    webservices/axis2/trunk/c/rampart/include/oxs_axiom.h
    webservices/axis2/trunk/c/rampart/src/omxmlsec/axiom.c
    webservices/axis2/trunk/c/rampart/src/omxmlsec/token_cipher_value.c
    webservices/axis2/trunk/c/rampart/src/omxmlsec/token_encrypted_data.c
    webservices/axis2/trunk/c/rampart/src/omxmlsec/xml_encryption.c
    webservices/axis2/trunk/c/rampart/test/omxmlsec/test.c

Modified: webservices/axis2/trunk/c/rampart/include/oxs_axiom.h
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/rampart/include/oxs_axiom.h?view=diff&rev=473195&r1=473194&r2=473195
==============================================================================
--- webservices/axis2/trunk/c/rampart/include/oxs_axiom.h (original)
+++ webservices/axis2/trunk/c/rampart/include/oxs_axiom.h Thu Nov  9 21:21:25 2006
@@ -46,6 +46,10 @@
                                          axis2_char_t* local_name,
                                          axis2_char_t* ns_uri,
                                          axis2_char_t* prefix);
+AXIS2_EXTERN axis2_char_t* AXIS2_CALL
+oxs_axiom_get_attribute_value_of_node_by_name(const axis2_env_t *env,
+        axiom_node_t *node,
+        axis2_char_t *attribute_name);
 
 
 AXIS2_EXTERN axiom_node_t* AXIS2_CALL

Modified: webservices/axis2/trunk/c/rampart/src/omxmlsec/axiom.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/rampart/src/omxmlsec/axiom.c?view=diff&rev=473195&r1=473194&r2=473195
==============================================================================
--- webservices/axis2/trunk/c/rampart/src/omxmlsec/axiom.c (original)
+++ webservices/axis2/trunk/c/rampart/src/omxmlsec/axiom.c Thu Nov  9 21:21:25 2006
@@ -59,6 +59,19 @@
     return counter;
 }
 
+AXIS2_EXTERN axis2_char_t* AXIS2_CALL
+oxs_axiom_get_attribute_value_of_node_by_name(const axis2_env_t *env,
+        axiom_node_t *node,
+        axis2_char_t *attribute_name)
+{
+    axis2_char_t *attribute_value = NULL;
+    axiom_element_t *ele = NULL;
+    
+    ele = AXIOM_NODE_GET_DATA_ELEMENT(node, env);
+    attribute_value = AXIOM_ELEMENT_GET_ATTRIBUTE_VALUE_BY_NAME(ele, env, attribute_name);
+    
+    return attribute_value;
+}
 
 AXIS2_EXTERN axiom_node_t* AXIS2_CALL
 oxs_axiom_get_first_child_node_by_name(const axis2_env_t *env,

Modified: webservices/axis2/trunk/c/rampart/src/omxmlsec/token_cipher_value.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/rampart/src/omxmlsec/token_cipher_value.c?view=diff&rev=473195&r1=473194&r2=473195
==============================================================================
--- webservices/axis2/trunk/c/rampart/src/omxmlsec/token_cipher_value.c (original)
+++ webservices/axis2/trunk/c/rampart/src/omxmlsec/token_cipher_value.c Thu Nov  9 21:21:25 2006
@@ -26,8 +26,8 @@
 oxs_token_get_cipher_value(const axis2_env_t *env,
         axiom_node_t *cv_node)
 {
-    /*TODO Verification*/
     axis2_char_t *cv = NULL;
+    /*TODO Verification*/
     cv = (axis2_char_t*)oxs_axiom_get_node_content(env, cv_node);
     return cv;
 

Modified: webservices/axis2/trunk/c/rampart/src/omxmlsec/token_encrypted_data.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/rampart/src/omxmlsec/token_encrypted_data.c?view=diff&rev=473195&r1=473194&r2=473195
==============================================================================
--- webservices/axis2/trunk/c/rampart/src/omxmlsec/token_encrypted_data.c (original)
+++ webservices/axis2/trunk/c/rampart/src/omxmlsec/token_encrypted_data.c Thu Nov  9 21:21:25 2006
@@ -21,7 +21,7 @@
 #include <axiom_attribute.h>
 #include <axiom_element.h>
 
-/*TODO These names should be changed to oxs_token_build_XXX_node*/
+
 
 AXIS2_EXTERN axiom_node_t* AXIS2_CALL
 oxs_token_build_encrypted_data_element(const axis2_env_t *env,

Modified: webservices/axis2/trunk/c/rampart/src/omxmlsec/xml_encryption.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/rampart/src/omxmlsec/xml_encryption.c?view=diff&rev=473195&r1=473194&r2=473195
==============================================================================
--- webservices/axis2/trunk/c/rampart/src/omxmlsec/xml_encryption.c (original)
+++ webservices/axis2/trunk/c/rampart/src/omxmlsec/xml_encryption.c Thu Nov  9 21:21:25 2006
@@ -67,17 +67,6 @@
     return AXIS2_SUCCESS;
 }
 
-axis2_status_t AXIS2_CALL
-oxs_xml_enc_decrypt_node(const axis2_env_t *env,
-                            oxs_ctx_t * enc_ctx,
-                            axiom_node_t *enc_type_node,
-                            axiom_node_t **decrypted_node)
-{
-
-    
-
-    return AXIS2_SUCCESS;
-}
 
 axis2_status_t AXIS2_CALL
 oxs_xml_enc_encrypt_data(const axis2_env_t *env,
@@ -119,11 +108,76 @@
 }
 
 axis2_status_t AXIS2_CALL
+oxs_xml_enc_decrypt_node(const axis2_env_t *env,
+                            oxs_ctx_t * enc_ctx,
+                            axiom_node_t *enc_type_node,
+                            axiom_node_t **decrypted_node)
+{
+    axiom_node_t *deserialized_node = NULL;
+    axiom_node_t *parent_of_enc_node = NULL;
+    oxs_buffer_t *result_buf = NULL;
+    axis2_char_t *decrypted_data = NULL;/*Can be either am XML-Element or XML-Content*/
+
+    /*Create an empty buffer for results*/
+    result_buf = oxs_buffer_create(env);
+
+    /*Decrypt*/
+    oxs_xml_enc_decrypt_data(env, enc_ctx, enc_type_node, result_buf);
+    decrypted_data = (axis2_char_t *)OXS_BUFFER_GET_DATA(result_buf, env);
+     
+    /*De-serialize the decrypted content to build the node*/
+    deserialized_node = (axiom_node_t*)oxs_axiom_deserialize_node(env, decrypted_data);
+
+    /*Assign deserialized_node to the reference passed*/
+    *decrypted_node = deserialized_node;
+
+    /*Replace the encrypted node with the de-serialized node*/
+    AXIOM_NODE_DETACH(enc_type_node, env);    
+    parent_of_enc_node = AXIOM_NODE_GET_PARENT(enc_type_node, env);
+    AXIOM_NODE_ADD_CHILD(parent_of_enc_node, env, deserialized_node);
+
+    return AXIS2_SUCCESS;
+}
+
+axis2_status_t AXIS2_CALL
 oxs_xml_enc_decrypt_data(const axis2_env_t *env,
                             oxs_ctx_t * enc_ctx,
                             axiom_node_t *enc_type_node,
                             oxs_buffer_t *result_buf)
 {
-    return AXIS2_SUCCESS;
+    axiom_node_t *enc_mtd_node = NULL;
+    axiom_node_t *cd_node = NULL;
+    axiom_node_t *cv_node = NULL;
+    axis2_char_t *cipher_val = NULL;
+    axis2_char_t *sym_algo = NULL;
+    axis2_char_t *type = NULL;
+    axis2_char_t *id = NULL;
+    oxs_buffer_t *input_buf = NULL;
+
+    /*Get the symmetric encryption algorithm*/
+    enc_mtd_node = oxs_axiom_get_first_child_node_by_name(env, enc_type_node, OXS_NodeEncryptionMethod, NULL, NULL);
+    sym_algo = oxs_token_get_encryption_method(env, enc_mtd_node);
+
+    /*Get ID, Type, MimeType attributes from the EncryptedDataNode*/
+    id = oxs_axiom_get_attribute_value_of_node_by_name(env, enc_type_node, OXS_AttrId);
+    type = oxs_axiom_get_attribute_value_of_node_by_name(env, enc_type_node, OXS_AttrType);
+
+    /*Populate the context for future use*/
+    OXS_CTX_SET_ENC_MTD_ALGORITHM(enc_ctx, env, sym_algo);
+    OXS_CTX_SET_ID(enc_ctx, env, id);
+    OXS_CTX_SET_TYPE(enc_ctx, env, type);
+    
+    /*Get the cipher value*/
+    cd_node = oxs_axiom_get_first_child_node_by_name(env, enc_type_node, OXS_NodeCipherData, NULL, NULL);
+    cv_node = oxs_axiom_get_first_child_node_by_name(env, cd_node, OXS_NodeCipherValue, NULL, NULL);
+    cipher_val = oxs_token_get_cipher_value(env, cv_node); 
+    
+    /*Create input buffer with cipher data obtained*/
+    input_buf = oxs_buffer_create(env);
+    OXS_BUFFER_POPULATE(input_buf, env, (unsigned char*)cipher_val, AXIS2_STRLEN(cipher_val) );
+
+    /*Decrypt*/
+    OXS_CTX_SET_OPERATION(enc_ctx, env, OXS_CTX_OPERATION_DECRYPT);
+    return oxs_encryption_symmetric_crypt(env, enc_ctx, input_buf, result_buf);
 }
 

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=473195&r1=473194&r2=473195
==============================================================================
--- webservices/axis2/trunk/c/rampart/test/omxmlsec/test.c (original)
+++ webservices/axis2/trunk/c/rampart/test/omxmlsec/test.c Thu Nov  9 21:21:25 2006
@@ -62,6 +62,49 @@
     return env;
 }
 
+oxs_key_t *create_key(axis2_env_t *env)
+{
+    oxs_key_t *key = NULL;
+    key = oxs_key_create_key(env);
+    OXS_KEY_POPULATE(key, env, (unsigned char*)"12345678", "session_key",  8, OXS_KEY_USAGE_DECRYPT);
+    return key;
+}
+
+axis2_status_t decrypt(axis2_env_t *env,  axis2_char_t *filename)
+{
+    oxs_ctx_t *ctx = NULL;
+    axiom_node_t *tmpl = NULL;
+    axiom_node_t *enc_data_node = NULL;
+    axiom_node_t *decrypted_node = NULL;
+    oxs_key_t *key = NULL;
+
+    tmpl = load_sample_xml(env , tmpl, filename);
+    axis2_status_t temp_status = AXIS2_FAILURE;
+    axis2_char_t *serialized_data = NULL;
+    FILE *outf;
+
+    /*Create key*/
+    key = create_key(env);
+
+    /*Create ctx*/
+    ctx = oxs_ctx_create(env);
+    OXS_CTX_SET_KEY(ctx, env, key);
+
+    /*Get the EncryptedData node*/
+    enc_data_node = AXIOM_NODE_GET_FIRST_CHILD(tmpl, env);
+    temp_status = oxs_xml_enc_decrypt_node(env, ctx, enc_data_node, &decrypted_node);
+
+    if (temp_status){
+        printf("\nooxs_xml_enc_decrypt_node SUCCESS\n");
+    }else{
+        printf("\noxs_xml_enc_decrypt_node FAILURE\n");
+    }
+    serialized_data = AXIOM_NODE_TO_STRING(tmpl, env);
+    outf = fopen("decrypted-result.xml", "wb");
+    fwrite(serialized_data, 1, AXIS2_STRLEN(serialized_data), outf);
+    fclose(outf);
+    return AXIS2_SUCCESS;
+}
 
 int main(int argc, char *argv[])
 {
@@ -93,22 +136,20 @@
         return -1;
     }
     /*Create key*/
-    key = oxs_key_create_key(env);
-    OXS_KEY_POPULATE(key, env, (unsigned char*)"12345678", "session_key",  8, OXS_KEY_USAGE_ENCRYPT);
+    key = create_key(env);
    
     /*Create ctx*/
     ctx = oxs_ctx_create(env);
     OXS_CTX_SET_KEY(ctx, env, key);
 
     /*Set algorithm*/
-    OXS_CTX_SET_ENC_MTD_ALGORITHM(ctx, env, OXS_HrefAes256Cbc);
+    OXS_CTX_SET_ENC_MTD_ALGORITHM(ctx, env, OXS_HrefAes128Cbc);
 
     /*Get the node to be encrypted*/
     enc_node = AXIOM_NODE_GET_FIRST_CHILD(tmpl, env);
 
     /*Create a reference to encrypted node*/
     id =  oxs_util_generate_id(env, OXS_ENCDATA_ID);
-    printf("ID=%s\n",id);
     enc_data_node =  oxs_token_build_encrypted_data_element(env, tmpl, OXS_TypeEncElement, id); 
     /*Encrypt***************************************************/
 
@@ -116,11 +157,11 @@
 
     if (temp_status)
     {
-        printf("oxs_enc_encrypt_template SUCCESS\n");
+        printf("\noxs_enc_encrypt_template SUCCESS\n");
     }
     else
     {
-        printf("oxs_enc_encrypt_template FAILURE\n");
+        printf("\noxs_enc_encrypt_template FAILURE\n");
     }
 
     encrypted_result = AXIOM_NODE_TO_STRING(tmpl, env) ;
@@ -128,6 +169,8 @@
 
     outf = fopen("result.xml", "wb");
     fwrite(encrypted_result, 1, AXIS2_STRLEN(encrypted_result), outf);
-
+    fclose(outf);
+    /*Decrypt**********************************************/
+    decrypt(env, "result.xml");
     return 0;
 }



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