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