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 di...@apache.org on 2007/03/01 06:58:08 UTC
svn commit: r513155 [3/5] - in /webservices/axis2/scratch/c/dinesh/532/c: ./
axiom/ axiom/src/attachments/ axiom/test/om/ axiom/test/soap/ build/win32/
ides/studio/ ides/vc/axis2c/ ides/vc/axis2c/axis2_engine/
ides/vc/axis2c/axis2_http_common/ ides/vc/...
Modified: webservices/axis2/scratch/c/dinesh/532/c/rampart/src/handlers/rampart_out_handler.c
URL: http://svn.apache.org/viewvc/webservices/axis2/scratch/c/dinesh/532/c/rampart/src/handlers/rampart_out_handler.c?view=diff&rev=513155&r1=513154&r2=513155
==============================================================================
--- webservices/axis2/scratch/c/dinesh/532/c/rampart/src/handlers/rampart_out_handler.c (original)
+++ webservices/axis2/scratch/c/dinesh/532/c/rampart/src/handlers/rampart_out_handler.c Wed Feb 28 21:58:03 2007
@@ -75,23 +75,12 @@
axiom_element_t *soap_header_ele = NULL;
axis2_status_t status = AXIS2_FAILURE;
rampart_context_t *rampart_context = NULL;
-/* rp_secpolicy_t *secpolicy = NULL;*/
-/* axis2_char_t *file_name = "/home/manjula/axis2/scratch/security-policy/c/rampart/src/secpolicy/test-resources/2.xml";*/
-/* axis2_char_t *file_name = NULL;*/
axis2_bool_t serverside = AXIS2_FALSE;
-
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE);
serverside = axis2_msg_ctx_get_server_side(msg_ctx,env);
-/*
- if(serverside)
- file_name = "/home/manjula/axis2/scratch/security-policy/c/rampart/src/secpolicy/test-resources/outgoing_policy.xml";
-
- else
- file_name = "/home/manjula/axis2/scratch/security-policy/c/deploy/client_repo/outgoing_policy.xml";
-*/
soap_envelope = AXIS2_MSG_CTX_GET_SOAP_ENVELOPE(msg_ctx, env);
if (!soap_envelope)
{
@@ -121,7 +110,18 @@
}
soap_header_ele = (axiom_element_t *)AXIOM_NODE_GET_DATA_ELEMENT(soap_header_node,env);
- rampart_context = rampart_engine_init(env,msg_ctx,RAMPART_OUTFLOW_SECURITY_POLICY);
+ /*since rampart in handler is a global handler we should
+ first check whether the rampart module is engaged.If not engaged we
+ should not process the message but return success.*/
+
+ /*This method is implemented in rampart_handler utils.*/
+ if(!rampart_is_rampart_engaged(env,msg_ctx))
+ {
+ AXIS2_LOG_INFO(env->log, "[rampart][rampart_out_handler] Not intended for processing in Rampart");
+ return AXIS2_SUCCESS;
+ }
+
+ rampart_context = rampart_engine_init(env,msg_ctx,AXIS2_FALSE);
if(!rampart_context)
return AXIS2_FAILURE;
@@ -130,9 +130,9 @@
if(AXIS2_FAILURE == status){
AXIS2_LOG_INFO(env->log,
"[rampart][rampart_out_handler] Security header building failed ERROR");
+ rampart_engine_shutdown(env,rampart_context);
}
+ status = rampart_engine_shutdown(env,rampart_context);
}
-
return status;
-
}
Modified: webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/Makefile.am
URL: http://svn.apache.org/viewvc/webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/Makefile.am?view=diff&rev=513155&r1=513154&r2=513155
==============================================================================
--- webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/Makefile.am (original)
+++ webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/Makefile.am Wed Feb 28 21:58:03 2007
@@ -4,7 +4,7 @@
libomxmlsec_la_SOURCES = ctx.c buffer.c key.c cipher.c error.c axis2_utils.c axiom.c \
iv.c xml_encryption.c encryption.c\
utility.c asym_ctx.c x509_cert.c key_mgr.c sign_part.c sign_ctx.c \
- xml_signature.c signature.c
+ xml_signature.c signature.c transform.c transforms_factory.c
libomxmlsec_la_LIBADD = -lssl\
Modified: webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/asym_ctx.c
URL: http://svn.apache.org/viewvc/webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/asym_ctx.c?view=diff&rev=513155&r1=513154&r2=513155
==============================================================================
--- webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/asym_ctx.c (original)
+++ webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/asym_ctx.c Wed Feb 28 21:58:03 2007
@@ -38,6 +38,7 @@
/*Public functions*/
+AXIS2_EXTERN
axis2_char_t *AXIS2_CALL
oxs_asym_ctx_get_file_name(
const oxs_asym_ctx_t *asym_ctx,
@@ -46,6 +47,7 @@
return asym_ctx->file_name;
}
+AXIS2_EXTERN
axis2_char_t *AXIS2_CALL
oxs_asym_ctx_get_pem_buf(
const oxs_asym_ctx_t *asym_ctx,
@@ -53,6 +55,7 @@
{
return asym_ctx->pem_buf;
}
+AXIS2_EXTERN
axis2_char_t *AXIS2_CALL
oxs_asym_ctx_get_password(
const oxs_asym_ctx_t *asym_ctx,
@@ -60,6 +63,7 @@
{
return asym_ctx->password;
}
+AXIS2_EXTERN
oxs_asym_ctx_format_t AXIS2_CALL
oxs_asym_ctx_get_format(
const oxs_asym_ctx_t *asym_ctx,
@@ -68,6 +72,7 @@
return asym_ctx->format;
}
+AXIS2_EXTERN
axis2_char_t *AXIS2_CALL
oxs_asym_ctx_get_algorithm(
const oxs_asym_ctx_t *asym_ctx,
@@ -76,6 +81,7 @@
return asym_ctx->algorithm;
}
+AXIS2_EXTERN
axis2_char_t *AXIS2_CALL
oxs_asym_ctx_get_st_ref_pattern(
const oxs_asym_ctx_t *asym_ctx,
@@ -84,6 +90,7 @@
return asym_ctx->st_ref_pattern;
}
+AXIS2_EXTERN
oxs_asym_ctx_operation_t AXIS2_CALL
oxs_asym_ctx_get_operation(
const oxs_asym_ctx_t *asym_ctx,
@@ -92,6 +99,7 @@
return asym_ctx->operation;
}
+AXIS2_EXTERN
openssl_pkey_t *AXIS2_CALL
oxs_asym_ctx_get_private_key(
const oxs_asym_ctx_t *asym_ctx,
@@ -101,6 +109,7 @@
return asym_ctx->private_key;
}
+AXIS2_EXTERN
oxs_x509_cert_t *AXIS2_CALL
oxs_asym_ctx_get_certificate(
const oxs_asym_ctx_t *asym_ctx,
@@ -110,6 +119,7 @@
return asym_ctx->certificate;
}
+AXIS2_EXTERN
axis2_status_t AXIS2_CALL
oxs_asym_ctx_set_file_name(
oxs_asym_ctx_t *asym_ctx,
@@ -126,6 +136,7 @@
return AXIS2_SUCCESS;
}
+AXIS2_EXTERN
axis2_status_t AXIS2_CALL
oxs_asym_ctx_set_pem_buf(
oxs_asym_ctx_t *asym_ctx,
@@ -142,6 +153,7 @@
return AXIS2_SUCCESS;
}
+AXIS2_EXTERN
axis2_status_t AXIS2_CALL
oxs_asym_ctx_set_password(
oxs_asym_ctx_t *asym_ctx,
@@ -158,6 +170,7 @@
return AXIS2_SUCCESS;
}
+AXIS2_EXTERN
axis2_status_t AXIS2_CALL
oxs_asym_ctx_set_format(
oxs_asym_ctx_t *asym_ctx,
@@ -169,6 +182,7 @@
return AXIS2_SUCCESS;
}
+AXIS2_EXTERN
axis2_status_t AXIS2_CALL
oxs_asym_ctx_set_algorithm(
oxs_asym_ctx_t *asym_ctx,
@@ -185,6 +199,7 @@
return AXIS2_SUCCESS;
}
+AXIS2_EXTERN
axis2_status_t AXIS2_CALL
oxs_asym_ctx_set_st_ref_pattern(
oxs_asym_ctx_t *asym_ctx,
@@ -200,6 +215,7 @@
return AXIS2_SUCCESS;
}
+AXIS2_EXTERN
axis2_status_t AXIS2_CALL
oxs_asym_ctx_set_operation(
oxs_asym_ctx_t *asym_ctx,
@@ -212,6 +228,7 @@
}
+AXIS2_EXTERN
axis2_status_t AXIS2_CALL
oxs_asym_ctx_set_certificate(
oxs_asym_ctx_t *asym_ctx,
@@ -228,6 +245,7 @@
return AXIS2_SUCCESS;
}
+AXIS2_EXTERN
axis2_status_t AXIS2_CALL
oxs_asym_ctx_set_private_key(
oxs_asym_ctx_t *asym_ctx,
@@ -245,7 +263,8 @@
}
-AXIS2_EXTERN oxs_asym_ctx_t *AXIS2_CALL
+AXIS2_EXTERN
+oxs_asym_ctx_t *AXIS2_CALL
oxs_asym_ctx_create(const axis2_env_t *env)
{
oxs_asym_ctx_t *asym_ctx = NULL;
@@ -272,6 +291,7 @@
}
+AXIS2_EXTERN
axis2_status_t AXIS2_CALL
oxs_asym_ctx_free(oxs_asym_ctx_t *asym_ctx,
const axis2_env_t *env)
Modified: webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/axiom.c
URL: http://svn.apache.org/viewvc/webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/axiom.c?view=diff&rev=513155&r1=513154&r2=513155
==============================================================================
--- webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/axiom.c (original)
+++ webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/axiom.c Wed Feb 28 21:58:03 2007
@@ -29,6 +29,28 @@
#include <axiom_stax_builder.h>
#include <axiom_util.h>
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+oxs_axiom_add_attribute(const axis2_env_t *env,
+ axiom_node_t* node,
+ axis2_char_t* attribute_ns,
+ axis2_char_t* attribute_ns_uri,
+ axis2_char_t* attribute,
+ axis2_char_t* value)
+{
+ axiom_attribute_t *attr = NULL;
+ axiom_element_t *ele = NULL;
+ axis2_status_t status = AXIS2_FAILURE;
+ axiom_namespace_t *ns = NULL;
+
+ ns = axiom_namespace_create(env, attribute_ns_uri, attribute_ns);
+
+ ele = AXIOM_NODE_GET_DATA_ELEMENT(node, env);
+ attr = axiom_attribute_create(env, attribute , value, ns);
+ status = AXIOM_ELEMENT_ADD_ATTRIBUTE(ele, env, attr, node);
+
+ return status;
+}
+
AXIS2_EXTERN int AXIS2_CALL
oxs_axiom_get_number_of_children_with_qname(const axis2_env_t *env,
axiom_node_t* parent,
Modified: webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/c14n/c14n.c
URL: http://svn.apache.org/viewvc/webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/c14n/c14n.c?view=diff&rev=513155&r1=513154&r2=513155
==============================================================================
--- webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/c14n/c14n.c (original)
+++ webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/c14n/c14n.c Wed Feb 28 21:58:03 2007
@@ -29,6 +29,7 @@
#include <axiom_children_iterator.h>
#include <axiom_document.h>
#include <axiom_comment.h>
+#include <oxs_constants.h>
#include <oxs_c14n.h>
#include "c14n_sorted_list.h"
@@ -54,6 +55,12 @@
((doc) ? AXIOM_DOCUMENT_GET_ROOT_ELEMENT((axiom_document_t *)(doc), \
(ctx)->env) : c14n_get_root_node((node), (ctx)))
+typedef enum {
+ C14N_XML_C14N = 1,
+ C14N_XML_C14N_WITH_COMMENTS,
+ C14N_XML_EXC_C14N,
+ C14N_XML_EXC_C14N_WITH_COMMENTS,
+} c14n_algo_t;
typedef struct c14n_ns_stack {
int head; /*index of the currnt stack TOP*/
@@ -377,6 +384,11 @@
const c14n_ctx_t *ctx
);
+static c14n_algo_t
+c14n_get_algorithm(
+ const axis2_char_t* algo
+ );
+
/*static axis2_bool_t
c14n_in_nodeset(
const axiom_node_t *node,
@@ -464,6 +476,86 @@
return (axiom_node_t *)prv_parent;
}
+static c14n_algo_t
+c14n_get_algorithm(
+ const axis2_char_t* algo
+ )
+{
+ if (axis2_strcmp(algo, OXS_HREF_XML_C14N))
+ return C14N_XML_C14N;
+
+ if (axis2_strcmp(algo, OXS_HREF_XML_C14N_WITH_COMMENTS))
+ return C14N_XML_C14N_WITH_COMMENTS;
+
+ if (axis2_strcmp(algo, OXS_HREF_XML_EXC_C14N))
+ return C14N_XML_EXC_C14N;
+
+ if (axis2_strcmp(algo, OXS_HREF_XML_EXC_C14N_WITH_COMMENTS))
+ return C14N_XML_EXC_C14N_WITH_COMMENTS;
+
+ return 0; /*c14n_algo_t enum starts with 1*/
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+oxs_c14n_apply_stream_algo(
+ const axis2_env_t *env,
+ const axiom_document_t *doc,
+ axis2_stream_t *stream,
+ const axis2_array_list_t *ns_prefixes,
+ const axiom_node_t *node,
+ const axis2_char_t* algo
+ )
+{
+ switch (c14n_get_algorithm(algo))
+ {
+ case C14N_XML_C14N:
+ return oxs_c14n_apply_stream(env, doc, AXIS2_FALSE, stream, AXIS2_FALSE,
+ ns_prefixes, node);
+ case C14N_XML_C14N_WITH_COMMENTS:
+ return oxs_c14n_apply_stream(env, doc, AXIS2_TRUE, stream, AXIS2_FALSE,
+ ns_prefixes, node);
+ case C14N_XML_EXC_C14N:
+ return oxs_c14n_apply_stream(env, doc, AXIS2_FALSE, stream, AXIS2_TRUE,
+ ns_prefixes, node);
+ case C14N_XML_EXC_C14N_WITH_COMMENTS:
+ return oxs_c14n_apply_stream(env, doc, AXIS2_TRUE, stream, AXIS2_TRUE,
+ ns_prefixes, node);
+ default:
+ /*TODO: set the error*/
+ return AXIS2_FAILURE;
+ }
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+oxs_c14n_apply_algo(
+ const axis2_env_t *env,
+ const axiom_document_t *doc,
+ axis2_char_t **outbuf,
+ const axis2_array_list_t *ns_prefixes,
+ const axiom_node_t *node,
+ const axis2_char_t *algo
+ )
+{
+ switch (c14n_get_algorithm(algo))
+ {
+ case C14N_XML_C14N:
+ return oxs_c14n_apply(env, doc, AXIS2_FALSE, outbuf, AXIS2_FALSE,
+ ns_prefixes, node);
+ case C14N_XML_C14N_WITH_COMMENTS:
+ return oxs_c14n_apply(env, doc, AXIS2_TRUE, outbuf, AXIS2_FALSE,
+ ns_prefixes, node);
+ case C14N_XML_EXC_C14N:
+ return oxs_c14n_apply(env, doc, AXIS2_FALSE, outbuf, AXIS2_TRUE,
+ ns_prefixes, node);
+ case C14N_XML_EXC_C14N_WITH_COMMENTS:
+ return oxs_c14n_apply(env, doc, AXIS2_TRUE, outbuf, AXIS2_TRUE,
+ ns_prefixes, node);
+ default:
+ /*TODO:set the error*/
+ return AXIS2_FAILURE;
+ }
+}
+
AXIS2_EXTERN axis2_status_t AXIS2_CALL
oxs_c14n_apply_stream(
const axis2_env_t *env,
@@ -680,6 +772,7 @@
axiom_namespace_t *ns = NULL;
/*axiom_children_iterator_t *child_itr = NULL;*/
c14n_ns_stack_t *save_stack = NULL;
+ axiom_node_t *child_node = NULL;
ele = (axiom_element_t *)AXIOM_NODE_GET_DATA_ELEMENT((axiom_node_t *)node,
ctx->env);
@@ -730,7 +823,6 @@
/*process child elements*/
- axiom_node_t *child_node = NULL;
child_node = AXIOM_NODE_GET_FIRST_CHILD((axiom_node_t *)node, ctx->env);
while (child_node)
@@ -1218,9 +1310,10 @@
if (v)
{
+ axis2_char_t *pfx = NULL;
ns = (axiom_namespace_t *) v;
- axis2_char_t *pfx = AXIOM_NAMESPACE_GET_PREFIX(ns, ctx->env);
+ pfx = AXIOM_NAMESPACE_GET_PREFIX(ns, ctx->env);
/*axis2_char_t *uri = AXIOM_NAMESPACE_GET_URI(ns, ctx->env);*/
if (AXIS2_STRLEN(pfx) == 0)
Modified: webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/error.c
URL: http://svn.apache.org/viewvc/webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/error.c?view=diff&rev=513155&r1=513154&r2=513155
==============================================================================
--- webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/error.c (original)
+++ webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/error.c Wed Feb 28 21:58:03 2007
@@ -34,6 +34,9 @@
{OXS_ERROR_INVALID_SIZE , "invalid size"},
{OXS_ERROR_INVALID_FORMAT , "invalid format"},
{OXS_ERROR_ELEMENT_FAILED , "element failed"},
+ {OXS_ERROR_TRANSFORM_FAILED , "Transformation failed"},
+ {OXS_ERROR_SIGN_FAILED , "Signing failed"},
+ {OXS_ERROR_SIG_VERIFICATION_FAILED , "Signature verification failed"},
};
AXIS2_EXTERN const char* AXIS2_CALL
Modified: webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/key_mgr.c
URL: http://svn.apache.org/viewvc/webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/key_mgr.c?view=diff&rev=513155&r1=513154&r2=513155
==============================================================================
--- webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/key_mgr.c (original)
+++ webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/key_mgr.c Wed Feb 28 21:58:03 2007
@@ -258,5 +258,4 @@
oxs_cert = oxs_key_mgr_convert_to_x509(env, cert);
return oxs_cert;
-
}
Modified: webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/openssl/sign.c
URL: http://svn.apache.org/viewvc/webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/openssl/sign.c?view=diff&rev=513155&r1=513154&r2=513155
==============================================================================
--- webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/openssl/sign.c (original)
+++ webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/openssl/sign.c Wed Feb 28 21:58:03 2007
@@ -31,29 +31,37 @@
#include <openssl/bio.h>
#define BUFSIZE 64
+
+
+
AXIS2_EXTERN int AXIS2_CALL
-openssl_sign(const axis2_env_t *env,
- oxs_sign_ctx_t *sign_ctx,
+openssl_sig_sign(const axis2_env_t *env,
+ openssl_pkey_t *prvkey,
oxs_buffer_t *input_buf,
oxs_buffer_t *output_buf)
{
- openssl_pkey_t *open_pkey = NULL;
- unsigned char sig_buf[4096]; /*Allocate enough memory dynamically*/
+ unsigned char sig_buf[4096]; /*Enough for the signature*/
unsigned int sig_len;
const EVP_MD* digest;
EVP_MD_CTX md_ctx;
- EVP_PKEY* pkey;
+ EVP_PKEY* pkey = NULL;
int err, ret;
/*Get the key*/
- open_pkey = oxs_sign_ctx_get_private_key(sign_ctx, env);
- pkey = OPENSSL_PKEY_GET_KEY(open_pkey, env);
+ /*open_pkey = oxs_sign_ctx_get_private_key(sign_ctx, env);*/
+ pkey = OPENSSL_PKEY_GET_KEY(prvkey, env);
+ if(!pkey){
+ oxs_error(env, ERROR_LOCATION, OXS_ERROR_SIGN_FAILED,"Cannot load the private key" );
+ }
- /*Set the digest according to the signature method*/
+ /*TODO: Set the digest according to the signature method*/
digest = EVP_sha1();
+
+ /*MD Ctx init*/
+ EVP_MD_CTX_init(&md_ctx);
+
/*Sign init*/
-
ret = EVP_SignInit(&md_ctx, digest);
-
+ AXIS2_LOG_INFO(env->log, "[openssl][sig] Signing content %s", OXS_BUFFER_GET_DATA(input_buf, env) );
EVP_SignUpdate (&md_ctx, OXS_BUFFER_GET_DATA(input_buf, env), OXS_BUFFER_GET_SIZE(input_buf, env));
sig_len = sizeof(sig_buf);
err = EVP_SignFinal (&md_ctx,
@@ -67,5 +75,65 @@
OXS_BUFFER_POPULATE(output_buf, env, sig_buf, sig_len);
return sig_len;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+openssl_sig_verify(const axis2_env_t *env,
+ openssl_pkey_t *pubkey,
+ oxs_buffer_t *input_buf,
+ oxs_buffer_t *sig_buf)
+{
+ axis2_status_t status = AXIS2_FAILURE;
+ const EVP_MD* digest;
+ EVP_MD_CTX md_ctx;
+ EVP_PKEY* pkey = NULL;
+ int ret;
+
+ /*Get the publickey*/
+ /*cert = oxs_sign_ctx_get_certificate(sign_ctx, env);
+ open_pubkey = oxs_x509_cert_get_public_key(cert, env);*/
+ pkey = OPENSSL_PKEY_GET_KEY(pubkey, env);
+ if(!pkey){
+ oxs_error(env, ERROR_LOCATION, OXS_ERROR_SIG_VERIFICATION_FAILED,"Cannot load the public key" );
+ }
+ /*TODO Set the digest according to the signature method*/
+ digest = EVP_sha1();
+
+ /*Init MD Ctx*/
+ EVP_MD_CTX_init(&md_ctx);
+
+ /*Intialize verification*/
+ ret = EVP_VerifyInit(&md_ctx, digest);
+ if(ret != 1) {
+ /*Error*/
+ oxs_error(env, ERROR_LOCATION, OXS_ERROR_SIG_VERIFICATION_FAILED,"EVP_VerifyInit failed" );
+ return AXIS2_FAILURE;
+ }
+ ret = EVP_VerifyUpdate(&md_ctx, OXS_BUFFER_GET_DATA(input_buf, env), OXS_BUFFER_GET_SIZE(input_buf, env));
+ if(ret != 1) {
+ /*Error*/
+ oxs_error(env, ERROR_LOCATION, OXS_ERROR_SIG_VERIFICATION_FAILED,"EVP_VerifyUpdate failed" );
+ return AXIS2_FAILURE;
+ }
+
+ ret = EVP_VerifyFinal(&md_ctx, OXS_BUFFER_GET_DATA(sig_buf, env),
+ OXS_BUFFER_GET_SIZE(sig_buf, env),
+ pkey);
+ if(ret == 0){
+ /*Error. Signature verification FAILED */
+ oxs_error(env, ERROR_LOCATION, OXS_ERROR_SIG_VERIFICATION_FAILED,"Signature verification FAILED." );
+ status = AXIS2_FAILURE;
+ }else if(ret < 0){
+ /*Erorr. Some other error*/
+ oxs_error(env, ERROR_LOCATION, OXS_ERROR_SIG_VERIFICATION_FAILED,"Error occured while verifying the signature." );
+ status = AXIS2_FAILURE;
+ }else{
+ /*SUCCESS. Det ar bra :-)*/
+ AXIS2_LOG_INFO(env->log, "[openssl][sig] Signature verification SUCCESS " );
+ status = AXIS2_SUCCESS;
+ }
+
+ return status;
+
}
Modified: webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/sign_ctx.c
URL: http://svn.apache.org/viewvc/webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/sign_ctx.c?view=diff&rev=513155&r1=513154&r2=513155
==============================================================================
--- webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/sign_ctx.c (original)
+++ webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/sign_ctx.c Wed Feb 28 21:58:03 2007
@@ -24,16 +24,18 @@
{
axis2_char_t *sign_mtd_algo;
axis2_char_t *c14n_mtd ;
+ axis2_char_t *sig_val ;
axis2_array_list_t *sign_parts;
oxs_x509_cert_t *certificate ;
openssl_pkey_t *prv_key ;
openssl_pkey_t *pub_key ;
+ oxs_sign_operation_t operation;
};
/*Public functions*/
-axis2_char_t *AXIS2_CALL
+AXIS2_EXTERN axis2_char_t *AXIS2_CALL
oxs_sign_ctx_get_sign_mtd_algo(
const oxs_sign_ctx_t *sign_ctx,
const axis2_env_t *env)
@@ -41,7 +43,7 @@
return sign_ctx->sign_mtd_algo;
}
-axis2_char_t *AXIS2_CALL
+AXIS2_EXTERN axis2_char_t *AXIS2_CALL
oxs_sign_ctx_get_c14n_mtd(
const oxs_sign_ctx_t *sign_ctx,
const axis2_env_t *env)
@@ -49,8 +51,16 @@
return sign_ctx->c14n_mtd;
}
+AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+oxs_sign_ctx_get_sig_val(
+ const oxs_sign_ctx_t *sign_ctx,
+ const axis2_env_t *env)
+{
+ return sign_ctx->sig_val;
+}
-axis2_array_list_t *AXIS2_CALL
+
+AXIS2_EXTERN axis2_array_list_t *AXIS2_CALL
oxs_sign_ctx_get_sign_parts(
const oxs_sign_ctx_t *sign_ctx,
const axis2_env_t *env)
@@ -58,7 +68,7 @@
return sign_ctx->sign_parts;
}
-oxs_x509_cert_t *AXIS2_CALL
+AXIS2_EXTERN oxs_x509_cert_t *AXIS2_CALL
oxs_sign_ctx_get_certificate(
const oxs_sign_ctx_t *sign_ctx,
const axis2_env_t *env)
@@ -66,7 +76,7 @@
return sign_ctx->certificate ;
}
-openssl_pkey_t *AXIS2_CALL
+AXIS2_EXTERN openssl_pkey_t *AXIS2_CALL
oxs_sign_ctx_get_private_key(
const oxs_sign_ctx_t *sign_ctx,
const axis2_env_t *env)
@@ -74,16 +84,30 @@
return sign_ctx->prv_key ;
}
-openssl_pkey_t *AXIS2_CALL
+AXIS2_EXTERN openssl_pkey_t *AXIS2_CALL
oxs_sign_ctx_get_public_key(
const oxs_sign_ctx_t *sign_ctx,
const axis2_env_t *env)
{
- return sign_ctx->pub_key ;
+ /*If the public key is set then use it. Else get the public key from the certificate.*/
+ if(sign_ctx->pub_key){
+ return sign_ctx->pub_key ;
+ }else if(sign_ctx->certificate){
+ return oxs_x509_cert_get_public_key(sign_ctx->certificate, env);
+ }else{
+ return NULL;
+ }
}
+AXIS2_EXTERN oxs_sign_operation_t AXIS2_CALL
+oxs_sign_ctx_get_operation(
+ const oxs_sign_ctx_t *sign_ctx,
+ const axis2_env_t *env)
+{
+ return sign_ctx->operation;
+}
-axis2_status_t AXIS2_CALL
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
oxs_sign_ctx_set_certificate(
oxs_sign_ctx_t *sign_ctx,
const axis2_env_t *env,
@@ -97,7 +121,7 @@
return AXIS2_SUCCESS;
}
-axis2_status_t AXIS2_CALL
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
oxs_sign_ctx_set_private_key(
oxs_sign_ctx_t *sign_ctx,
const axis2_env_t *env,
@@ -111,7 +135,7 @@
return AXIS2_SUCCESS;
}
-axis2_status_t AXIS2_CALL
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
oxs_sign_ctx_set_public_key(
oxs_sign_ctx_t *sign_ctx,
const axis2_env_t *env,
@@ -125,7 +149,7 @@
return AXIS2_SUCCESS;
}
-axis2_status_t AXIS2_CALL
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
oxs_sign_ctx_set_sign_mtd_algo(
oxs_sign_ctx_t *sign_ctx,
const axis2_env_t *env,
@@ -141,7 +165,8 @@
return AXIS2_SUCCESS;
}
-axis2_status_t AXIS2_CALL
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
oxs_sign_ctx_set_c14n_mtd(
oxs_sign_ctx_t *sign_ctx,
const axis2_env_t *env,
@@ -157,8 +182,23 @@
return AXIS2_SUCCESS;
}
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+oxs_sign_ctx_set_sig_val(
+ oxs_sign_ctx_t *sign_ctx,
+ const axis2_env_t *env,
+ axis2_char_t *sig_val)
+{
-axis2_status_t AXIS2_CALL
+ if (sign_ctx->sig_val)
+ {
+ AXIS2_FREE(env->allocator, sign_ctx->sig_val);
+ sign_ctx->sig_val = NULL;
+ }
+ sign_ctx->sig_val = AXIS2_STRDUP(sig_val, env);
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
oxs_sign_ctx_set_sign_parts(
oxs_sign_ctx_t *sign_ctx,
const axis2_env_t *env,
@@ -171,6 +211,17 @@
return AXIS2_SUCCESS;
}
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+oxs_sign_ctx_set_operation(
+ oxs_sign_ctx_t *sign_ctx,
+ const axis2_env_t *env,
+ oxs_sign_operation_t operation
+)
+{
+ sign_ctx->operation = operation;
+ return AXIS2_SUCCESS;
+}
+
AXIS2_EXTERN oxs_sign_ctx_t *AXIS2_CALL
oxs_sign_ctx_create(const axis2_env_t *env)
{
@@ -187,16 +238,17 @@
sign_ctx->sign_mtd_algo= NULL;
sign_ctx->c14n_mtd = NULL;
+ sign_ctx->sig_val = NULL;
sign_ctx->sign_parts = NULL;
sign_ctx->certificate = NULL;
sign_ctx->prv_key = NULL;
sign_ctx->pub_key = NULL;
-
+ sign_ctx->operation = OXS_SIGN_OPERATION_NONE;
return sign_ctx;
}
-axis2_status_t AXIS2_CALL
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
oxs_sign_ctx_free(oxs_sign_ctx_t *sign_ctx,
const axis2_env_t *env)
{
@@ -215,10 +267,17 @@
sign_ctx->c14n_mtd = NULL;
}
+ if (sign_ctx->sig_val)
+ {
+ AXIS2_FREE(env->allocator, sign_ctx->sig_val);
+ sign_ctx->sig_val = NULL;
+ }
+
sign_ctx->sign_parts = NULL;
sign_ctx->certificate = NULL;
sign_ctx->prv_key = NULL;
sign_ctx->pub_key = NULL;
+ sign_ctx->operation = OXS_SIGN_OPERATION_NONE;
AXIS2_FREE(env->allocator, sign_ctx);
sign_ctx = NULL;
Modified: webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/sign_part.c
URL: http://svn.apache.org/viewvc/webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/sign_part.c?view=diff&rev=513155&r1=513154&r2=513155
==============================================================================
--- webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/sign_part.c (original)
+++ webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/sign_part.c Wed Feb 28 21:58:03 2007
@@ -24,13 +24,14 @@
{
axis2_char_t *id;
axis2_char_t *digest_mtd;
+ axis2_char_t *digest_val;
axiom_node_t *node ; /*Shallow copies*/
axis2_array_list_t *transforms; /*Shallow copies*/
};
/*Public functions*/
-axis2_char_t *AXIS2_CALL
+AXIS2_EXTERN axis2_char_t *AXIS2_CALL
oxs_sign_part_get_id(
const oxs_sign_part_t *sign_part,
const axis2_env_t *env)
@@ -38,7 +39,7 @@
return sign_part->id;
}
-axis2_char_t *AXIS2_CALL
+AXIS2_EXTERN axis2_char_t *AXIS2_CALL
oxs_sign_part_get_digest_mtd(
const oxs_sign_part_t *sign_part,
const axis2_env_t *env)
@@ -46,7 +47,15 @@
return sign_part->digest_mtd;
}
-axiom_node_t *AXIS2_CALL
+AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+oxs_sign_part_get_digest_val(
+ const oxs_sign_part_t *sign_part,
+ const axis2_env_t *env)
+{
+ return sign_part->digest_val;
+}
+
+AXIS2_EXTERN axiom_node_t *AXIS2_CALL
oxs_sign_part_get_node(
const oxs_sign_part_t *sign_part,
const axis2_env_t *env)
@@ -54,7 +63,7 @@
return sign_part->node;
}
-axis2_array_list_t *AXIS2_CALL
+AXIS2_EXTERN axis2_array_list_t *AXIS2_CALL
oxs_sign_part_get_transforms(
const oxs_sign_part_t *sign_part,
const axis2_env_t *env)
@@ -62,7 +71,7 @@
return sign_part->transforms;
}
-axis2_status_t AXIS2_CALL
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
oxs_sign_part_set_id(
oxs_sign_part_t *sign_part,
const axis2_env_t *env,
@@ -78,7 +87,7 @@
return AXIS2_SUCCESS;
}
-axis2_status_t AXIS2_CALL
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
oxs_sign_part_set_digest_mtd(
oxs_sign_part_t *sign_part,
const axis2_env_t *env,
@@ -94,7 +103,23 @@
return AXIS2_SUCCESS;
}
-axis2_status_t AXIS2_CALL
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+oxs_sign_part_set_digest_val(
+ oxs_sign_part_t *sign_part,
+ const axis2_env_t *env,
+ axis2_char_t *digest_val)
+{
+
+ if (sign_part->digest_val)
+ {
+ AXIS2_FREE(env->allocator, sign_part->digest_val);
+ sign_part->digest_val = NULL;
+ }
+ sign_part->digest_val = AXIS2_STRDUP(digest_val, env);
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
oxs_sign_part_set_node(
oxs_sign_part_t *sign_part,
const axis2_env_t *env,
@@ -107,7 +132,7 @@
return AXIS2_SUCCESS;
}
-axis2_status_t AXIS2_CALL
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
oxs_sign_part_set_transforms(
oxs_sign_part_t *sign_part,
const axis2_env_t *env,
@@ -143,7 +168,7 @@
}
-axis2_status_t AXIS2_CALL
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
oxs_sign_part_free(oxs_sign_part_t *sign_part,
const axis2_env_t *env)
{
Modified: webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/signature.c
URL: http://svn.apache.org/viewvc/webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/signature.c?view=diff&rev=513155&r1=513154&r2=513155
==============================================================================
--- webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/signature.c (original)
+++ webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/signature.c Wed Feb 28 21:58:03 2007
@@ -25,7 +25,9 @@
#include <oxs_signature.h>
#include <oxs_buffer.h>
#include <openssl_rsa.h>
+#include <openssl_sign.h>
#include <openssl_digest.h>
+
/*Private functions*/
AXIS2_EXTERN axis2_status_t AXIS2_CALL
oxs_sig_sign_rsa_sha1(const axis2_env_t *env,
@@ -36,15 +38,19 @@
axis2_char_t *encoded_str = NULL;
axis2_status_t status = AXIS2_FAILURE;
oxs_buffer_t *signed_result_buf = NULL;
+ openssl_pkey_t *prvkey = NULL;
int signedlen = -1, encodedlen = -1, ret = -1;
/*Create output buffer to store signed data*/
signed_result_buf = oxs_buffer_create(env);
/*Sign */
- signedlen = openssl_sign(env, sign_ctx, input, signed_result_buf);
+ prvkey = oxs_sign_ctx_get_private_key(sign_ctx, env);
+ signedlen = openssl_sig_sign(env, prvkey, input, signed_result_buf);
if(signedlen < 0){
/*Error*/
+ oxs_error(env, ERROR_LOCATION, OXS_ERROR_SIGN_FAILED,
+ "Signature failed. The length of signature is %d", signedlen);
}
/*Base64 encode*/
@@ -90,3 +96,53 @@
return AXIS2_SUCCESS;
}
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+oxs_sig_verify(const axis2_env_t *env,
+ oxs_sign_ctx_t *sign_ctx,
+ axis2_char_t *content,
+ axis2_char_t *signature)
+{
+ axis2_status_t status = AXIS2_FAILURE;
+ oxs_buffer_t *in_buf = NULL;
+ oxs_buffer_t *sig_buf = NULL;
+ openssl_pkey_t *pubkey = NULL;
+
+ unsigned char* decoded_data = NULL;
+ int decoded_len = -1;
+ int ret = -1;
+
+ /*Base64 decode the signature value and create the sig buffer*/
+ /*Allocate enough space*/
+ decoded_data = AXIS2_MALLOC(env->allocator, axis2_base64_decode_len(signature));
+ decoded_len = axis2_base64_decode_binary(decoded_data, signature );
+ if (decoded_len < 0)
+ {
+ oxs_error(env, ERROR_LOCATION, OXS_ERROR_SIG_VERIFICATION_FAILED,
+ "axis2_base64_decode_binary failed");
+ return AXIS2_FAILURE;
+ }
+ /*Create the signature buffer*/
+ sig_buf = oxs_buffer_create(env);
+ ret = OXS_BUFFER_POPULATE(sig_buf, env, decoded_data, decoded_len);
+
+ /*Create the input buffer*/
+ in_buf = oxs_buffer_create(env);
+ status = OXS_BUFFER_POPULATE(in_buf, env, (unsigned char*)content, axis2_strlen(content));
+
+ /*Get the public key. See.. this method is tricky. It might take the public key from the certificate if
+ * the public key is not available directly*/
+ pubkey = oxs_sign_ctx_get_public_key(sign_ctx, env);
+
+ /*Call OpenSSL function to verify the signature*/
+ status = openssl_sig_verify(env, pubkey, in_buf, sig_buf);
+ if(AXIS2_SUCCESS != status){
+ /*Error in signature processing*/
+ oxs_error(env, ERROR_LOCATION, OXS_ERROR_SIG_VERIFICATION_FAILED,"Signature verification FAILED.");
+ return AXIS2_FAILURE;
+ }else{
+
+ AXIS2_LOG_INFO(env->log, "[oxs][sig] Signature verification SUCCESS " );
+ return AXIS2_SUCCESS;
+ }
+
+}
Modified: webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/tokens/token_c14n_method.c
URL: http://svn.apache.org/viewvc/webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/tokens/token_c14n_method.c?view=diff&rev=513155&r1=513154&r2=513155
==============================================================================
--- webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/tokens/token_c14n_method.c (original)
+++ webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/tokens/token_c14n_method.c Wed Feb 28 21:58:03 2007
@@ -48,7 +48,7 @@
/*If c14n algorithm is NULL then use the default*/
if (!algorithm)
{
- algorithm = (axis2_char_t*)OXS_HREF_C14N;
+ algorithm = (axis2_char_t*)OXS_HREF_XML_EXC_C14N;
}
algo_attr = axiom_attribute_create(env, OXS_ATTR_ALGORITHM, algorithm, NULL);
Modified: webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/tokens/token_ds_reference.c
URL: http://svn.apache.org/viewvc/webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/tokens/token_ds_reference.c?view=diff&rev=513155&r1=513154&r2=513155
==============================================================================
--- webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/tokens/token_ds_reference.c (original)
+++ webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/tokens/token_ds_reference.c Wed Feb 28 21:58:03 2007
@@ -67,4 +67,22 @@
return ds_reference_node;
}
+AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+oxs_token_get_ds_reference(const axis2_env_t *env, axiom_node_t *ref_node)
+{
+ axis2_char_t *ref = NULL;
+ axiom_element_t *reference_ele = NULL;
+
+ reference_ele = AXIOM_NODE_GET_DATA_ELEMENT(ref_node, env);
+ if (!reference_ele)
+ {
+ oxs_error(env, ERROR_LOCATION,
+ OXS_ERROR_ELEMENT_FAILED, "Error retrieving data reference element");
+ return NULL;
+ }
+
+ ref = AXIOM_ELEMENT_GET_ATTRIBUTE_VALUE_BY_NAME(reference_ele, env, OXS_ATTR_URI);
+ return ref;
+
+}
Modified: webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/tokens/token_transform.c
URL: http://svn.apache.org/viewvc/webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/tokens/token_transform.c?view=diff&rev=513155&r1=513154&r2=513155
==============================================================================
--- webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/tokens/token_transform.c (original)
+++ webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/tokens/token_transform.c Wed Feb 28 21:58:03 2007
@@ -48,7 +48,7 @@
/*If transform algorithm is NULL then use the default*/
if (!algorithm)
{
- algorithm = (axis2_char_t*)OXS_HREF_C14N;
+ algorithm = (axis2_char_t*)OXS_HREF_XML_EXC_C14N;
}
algo_attr = axiom_attribute_create(env, OXS_ATTR_ALGORITHM, algorithm, NULL);
Modified: webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/xml_signature.c
URL: http://svn.apache.org/viewvc/webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/xml_signature.c?view=diff&rev=513155&r1=513154&r2=513155
==============================================================================
--- webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/xml_signature.c (original)
+++ webservices/axis2/scratch/c/dinesh/532/c/rampart/src/omxmlsec/xml_signature.c Wed Feb 28 21:58:03 2007
@@ -22,12 +22,16 @@
#include <oxs_buffer.h>
#include <oxs_cipher.h>
#include <oxs_c14n.h>
+#include <oxs_axiom.h>
+#include <oxs_utility.h>
#include <openssl_rsa.h>
#include <openssl_digest.h>
#include <oxs_sign_ctx.h>
#include <oxs_sign_part.h>
#include <oxs_xml_signature.h>
#include <oxs_signature.h>
+#include <oxs_transform.h>
+#include <oxs_transforms_factory.h>
#include <oxs_token_ds_reference.h>
#include <oxs_token_digest_method.h>
#include <oxs_token_digest_value.h>
@@ -61,6 +65,7 @@
/*TODO: Right now we support only X509Data. But should support other patterns as well*/
cert = oxs_sign_ctx_get_certificate(sign_ctx, env);
if(!cert){
+ oxs_error(env, ERROR_LOCATION, OXS_ERROR_SIGN_FAILED,"Cannot get the certificate to build <ds:KeyInfo> element" );
return AXIS2_FAILURE;
}
@@ -76,16 +81,93 @@
return AXIS2_SUCCESS;
}
+/*This method is common for both signing and verification*/
+static axis2_char_t *
+oxs_xml_sig_transform_n_digest(const axis2_env_t *env,
+ axiom_node_t *node,
+ axis2_array_list_t *transforms,
+ axis2_char_t *digest_mtd)
+{
+ axis2_char_t *serialized_node = NULL;
+ axis2_char_t *digest = NULL;
+ int i = 0;
+
+ printf("oxs_xml_sig_transform_n_digest\n");
+ if((transforms) && (0 < AXIS2_ARRAY_LIST_SIZE(transforms, env))){
+ oxs_tr_dtype_t output_dtype = OXS_TRANSFORM_TYPE_UNKNOWN;/*This will always be the current dtype*/
+ void *tr_output = NULL;
+ output_dtype = OXS_TRANSFORM_TYPE_NODE; /*We always begin with a node*/
+
+ tr_output = node; /*The first transformation is applied to the node*/
+
+ /*LOOP: Apply transforms. For example exclusive C14N*/
+ for (i = 0; i < AXIS2_ARRAY_LIST_SIZE(transforms, env); i++){
+ oxs_transform_t *tr = NULL;
+ oxs_transform_tr_func tr_func = NULL;
+ oxs_tr_dtype_t input_dtype = OXS_TRANSFORM_TYPE_UNKNOWN;
+ void *tr_input = NULL;
+ axis2_char_t *tr_id = NULL;
+
+ /*Get the ith transform*/
+ tr = (oxs_transform_t*)AXIS2_ARRAY_LIST_GET(transforms, env, i);
+ tr_id = oxs_transform_get_id(tr, env);
+ tr_func = oxs_transform_get_transform_function(tr, env);
+ input_dtype = oxs_transform_get_input_data_type(tr, env);
+
+ printf("Transform required = %s", tr_id);
+ /*Prepare the input*/
+ /*If the required input type is CHAR and what we have is a NODE*/
+ if((input_dtype == OXS_TRANSFORM_TYPE_CHAR) && (output_dtype == OXS_TRANSFORM_TYPE_NODE)){
+ /*Serialize*/
+ tr_input = axiom_node_to_string((axiom_node_t*)tr_output, env);
+ /*If the required input type is NODE and what we have is a CHAR*/
+ }else if((input_dtype == OXS_TRANSFORM_TYPE_NODE) && (output_dtype == OXS_TRANSFORM_TYPE_CHAR)){
+ /*TODO De-serialize*/
+ }else{
+ /*Let it go as it is. */
+ tr_input = tr_output;
+ }
+ /*Apply transform*/
+ if(tr_func){
+ output_dtype = (*tr_func)(env, tr_input, input_dtype, &tr_output);
+ }else{
+ oxs_error(env, ERROR_LOCATION, OXS_ERROR_TRANSFORM_FAILED,"Cannot get the transform implementation for %s", tr_id);
+ }
+ /*If the output data type is unknown OR the output is NULL its an error*/
+ if((output_dtype == OXS_TRANSFORM_TYPE_UNKNOWN) || (!tr_output)){
+ oxs_error(env, ERROR_LOCATION, OXS_ERROR_TRANSFORM_FAILED,"Transform failed for %s", tr_id);
+ /*return AXIS2_FAILURE*/
+ }
+ }/*eof for loop*/
+ /*We have applied all our transforms now*/
+ /*Serialize node*/
+ if(OXS_TRANSFORM_TYPE_NODE == output_dtype ){
+ serialized_node = AXIOM_NODE_TO_STRING((axiom_node_t*)tr_output, env);
+ }else if(OXS_TRANSFORM_TYPE_CHAR == output_dtype){
+ serialized_node = (axis2_char_t*)tr_output;
+ }else{
+ /*Error*/
+ }
+ }else{
+ /*No transforms defined. Thus we simply direct the node, to make the digest*/
+ serialized_node = AXIOM_NODE_TO_STRING(node, env);
+ }
+ /*TODO Check digest type. We support SHA-1 only*/
+ digest = openssl_sha1(env, serialized_node, axis2_strlen(serialized_node));
+
+ return digest;
+}
+
/*parent is ds:SignedInfo*/
static axis2_status_t
oxs_xml_sig_build_reference(const axis2_env_t *env,
axiom_node_t *parent,
oxs_sign_part_t *sign_part)
{
- axis2_char_t *uri = NULL;
- axis2_char_t *serialized_node = NULL;
axis2_char_t *digest = NULL;
axis2_char_t *digest_mtd = NULL;
+ axis2_char_t *ref_id = NULL;
+ axis2_char_t *id = NULL;
axis2_array_list_t *transforms = NULL;
axiom_node_t *node = NULL;
axiom_node_t *reference_node = NULL;
@@ -95,30 +177,36 @@
/*Get the node to digest*/
node = oxs_sign_part_get_node(sign_part, env);
-
- reference_node = oxs_token_build_ds_reference_element(env, parent ,NULL, uri, NULL);
+
+ /*Get the reference ID from the node and hence to the ds:Reference node*/
+ id = oxs_axiom_get_attribute_value_of_node_by_name(env, node, "wsu:Id");
+
+ ref_id = AXIS2_STRACAT("#", id, env);/* <ds:Reference URI="#id">*/
+ reference_node = oxs_token_build_ds_reference_element(env, parent ,NULL, ref_id, NULL);
/*Get transforms if any*/
transforms = oxs_sign_part_get_transforms(sign_part, env);
+ /*Get the digest method*/
+ digest_mtd = oxs_sign_part_get_digest_mtd(sign_part, env);
+
+ /*Transform and Digest*/
+ digest = oxs_xml_sig_transform_n_digest(env, node, transforms, digest_mtd);
+ /*Build ds:Transforms node and its children*/
if((transforms) && (0 < AXIS2_ARRAY_LIST_SIZE(transforms, env))){
axiom_node_t *transforms_node = NULL;
- /*Add ds:Transforms element*/
+
transforms_node = oxs_token_build_transforms_element(env, reference_node);
- /*LOOP: Apply transforms. This usually C14N*/
for (i = 0; i < AXIS2_ARRAY_LIST_SIZE(transforms, env); i++){
- /*Apply transform*/
+ oxs_transform_t *tr = NULL;
+ axis2_char_t *tr_id = NULL;
- /*Add to ds:Transforms*/
+ /*Get the ith transform*/
+ tr = (oxs_transform_t*)AXIS2_ARRAY_LIST_GET(transforms, env, i);
+ tr_id = oxs_transform_get_id(tr, env);
+ oxs_token_build_transform_element(env, transforms_node, tr_id);
}
}
- /*Serialize node*/
- serialized_node = AXIOM_NODE_TO_STRING(node, env);
- printf("serialized_node %s\n", serialized_node);
- /*Make digest.*/
- digest_mtd = oxs_sign_part_get_digest_mtd(sign_part, env);
- digest = openssl_sha1(env, serialized_node, axis2_strlen(serialized_node));
-
/*Construct nodes*/
digest_mtd_node = oxs_token_build_digest_method_element(env, reference_node, digest_mtd);
digest_value_node = oxs_token_build_digest_value_element(env, reference_node, digest);
@@ -151,7 +239,6 @@
/*Then serialize <SignedInfo>*/
serialized_signed_info = c14nized; /*AXIOM_NODE_TO_STRING(signed_info_node, env);*/
- printf("serialized_signed_info %s\n",serialized_signed_info);
/*Make the input and out put buffers*/
input_buf = oxs_buffer_create(env);
@@ -190,14 +277,14 @@
/*Construct the <SignedInfo> */
signed_info_node = oxs_token_build_signed_info_element(env, signature_node);
- /*Construct the <SignatureMethod> */
- sign_algo = oxs_sign_ctx_get_sign_mtd_algo(sign_ctx, env);
- signature_mtd_node = oxs_token_build_signature_method_element(env, signed_info_node, sign_algo);
-
/*Construct the <CanonicalizationMethod> */
c14n_algo = oxs_sign_ctx_get_c14n_mtd(sign_ctx, env);
c14n_mtd_node = oxs_token_build_c14n_method_element(env, signed_info_node, c14n_algo);
+ /*Construct the <SignatureMethod> */
+ sign_algo = oxs_sign_ctx_get_sign_mtd_algo(sign_ctx, env);
+ signature_mtd_node = oxs_token_build_signature_method_element(env, signed_info_node, sign_algo);
+
/*Look for signature parts*/
sign_parts = oxs_sign_ctx_get_sign_parts(sign_ctx , env);
@@ -220,10 +307,314 @@
return AXIS2_SUCCESS;
}
+/*******************************Verification specific*****************************/
+
+/*Populates a sign_part according to the <ds:Reference> node*/
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+oxs_xml_sig_process_ref_node(const axis2_env_t *env,
+ oxs_sign_part_t *sign_part,
+ axiom_node_t *ref_node,
+ axiom_node_t *scope_node)
+{
+ axis2_char_t *ref_id = NULL;
+ axis2_char_t *child_node_name = NULL;
+ axiom_node_t *reffed_node = NULL;
+ axiom_node_t *child_node = NULL;
+
+ ref_id = oxs_token_get_ds_reference(env, ref_node);
+ oxs_sign_part_set_id(sign_part, env, ref_id);
+
+ /*Remove the # from the id*/
+ ref_id = axis2_string_substring_starting_at(ref_id, 1);
+
+ /*Find the node refered by this ref_id and set to the sign part*/
+ reffed_node = oxs_axiom_get_node_by_id(env, scope_node, "wsu:Id", ref_id );
+ if(reffed_node){
+ oxs_sign_part_set_node(sign_part, env, reffed_node);
+ }else{
+ oxs_error(env, ERROR_LOCATION, OXS_ERROR_SIG_VERIFICATION_FAILED,"Cannot find node with Id=%s ", ref_id );
+ return AXIS2_FAILURE; /*No such node. Its an error*/
+ }
+
+ /*First child is optional Transforms element*/
+ child_node = AXIOM_NODE_GET_FIRST_CHILD(ref_node, env);
+ child_node_name = axiom_util_get_localname(child_node, env);
+ if(0 == axis2_strcmp(child_node_name, OXS_NODE_TRANSFORMS)){
+ /*Transforms found*/
+ /*TODO*/
+ axiom_node_t *tr_node = NULL;
+ axis2_array_list_t *tr_list = NULL;
+
+ /*Create a list to hold transforms*/
+ tr_list = axis2_array_list_create(env, 1);
+ tr_node = AXIOM_NODE_GET_FIRST_CHILD(child_node, env);
+ /*Iterate thru all the <ds:Transform> nodes in <ds:Transforms>*/
+ while(tr_node)
+ {
+ axis2_char_t *node_name = NULL;
+
+ node_name = axiom_util_get_localname(tr_node, env);
+ if( 0 == axis2_strcmp(OXS_NODE_TRANSFORM, node_name)){
+ axis2_char_t *tr_id = NULL;
+ oxs_transform_t *tr = NULL;
+
+ tr_id = oxs_token_get_transform(env, tr_node);
+ /*Get the transform given the id*/
+ tr = oxs_transforms_factory_produce_transform(env, tr_id);
+ if(!tr) {
+ /*The transform not supported*/
+ oxs_error(env, ERROR_LOCATION, OXS_ERROR_TRANSFORM_FAILED,"Cannot produce the transform for %s", tr_id);
+ return AXIS2_FAILURE;
+ }
+ /*Add the transform to the list*/
+ AXIS2_ARRAY_LIST_ADD(tr_list, env, tr);
+ }else{
+ /*<ds:Transforms> cant have any other element*/
+ oxs_error(env, ERROR_LOCATION, OXS_ERROR_TRANSFORM_FAILED,"<ds:Transforms> cannot have node %s ", node_name );
+ return AXIS2_FAILURE;
+ }
+ /*Set the next node to be precessed*/
+ tr_node = AXIOM_NODE_GET_NEXT_SIBLING(tr_node, env);
+ }/*eof while*/
+ /*Set transforms for this signature part*/
+ oxs_sign_part_set_transforms(sign_part, env, tr_list);
+
+ /*At the end, set the next node as the child node*/
+ child_node = AXIOM_NODE_GET_NEXT_SIBLING(child_node, env);
+ }else{
+ /*There are no transforms for this sign part*/
+ }
+
+ /* Process mandatory ds:DigestMethod*/
+ child_node_name = axiom_util_get_localname(child_node, env);
+ if(0 == axis2_strcmp(child_node_name, OXS_NODE_DIGEST_METHOD)){
+ axis2_char_t *digest_mtd = NULL;
+ /*ds:DigestMethod found*/
+ digest_mtd = oxs_token_get_digest_method(env, child_node);
+ oxs_sign_part_set_digest_mtd(sign_part, env, digest_mtd);
+
+ /*At the end, set the next node as the child node*/
+ child_node = AXIOM_NODE_GET_NEXT_SIBLING(child_node, env);
+ }else{
+ oxs_error(env, ERROR_LOCATION, OXS_ERROR_SIG_VERIFICATION_FAILED,"Cannot find <ds:DigestMethod> " );
+ return AXIS2_FAILURE;
+ }
+
+ /* Process mandatory ds:DigestValue*/
+ child_node_name = axiom_util_get_localname(child_node, env);
+ if(0 == axis2_strcmp(child_node_name, OXS_NODE_DIGEST_VALUE)){
+ /*ds:DigestValue found*/
+ axis2_char_t *digest_val = NULL;
+ digest_val = oxs_token_get_digest_value(env, child_node);
+ oxs_sign_part_set_digest_val(sign_part, env, digest_val);
+ }else{
+ oxs_error(env, ERROR_LOCATION, OXS_ERROR_SIG_VERIFICATION_FAILED,"Cannot find <ds:DigestValue> " );
+ return AXIS2_FAILURE;
+ }
+
+ return AXIS2_SUCCESS;
+
+}
+
+ /*Process Signature Node along with its most loving child ds:SignedInfo.
+ * We need to populate
+ * 1. Sig_mtd
+ * 2. C14N Mtd
+ * 3. Sign parts
+ * 3.1. Id
+ * 3.2 Digest mtd
+ * 3.3. Transforms*/
+
AXIS2_EXTERN axis2_status_t AXIS2_CALL
-oxs_xml_sig_verify(const axis2_env_t *env,
+oxs_xml_sig_process_signature_node(const axis2_env_t *env,
oxs_sign_ctx_t *sign_ctx,
- axiom_node_t *signature_node)
+ axiom_node_t *signature_node,
+ axiom_node_t *scope_node)
{
+ axiom_node_t *cur_node = NULL;
+ axiom_node_t *signed_info_node = NULL;
+ axiom_node_t *sig_val_node = NULL;
+ axis2_status_t status = AXIS2_FAILURE;
+ axis2_array_list_t *sign_part_list = NULL;
+
+ signed_info_node = oxs_axiom_get_first_child_node_by_name(env, signature_node,
+ OXS_NODE_SIGNEDINFO, OXS_DSIG_NS, OXS_DS );
+
+ if(!signed_info_node){
+ oxs_error(env, ERROR_LOCATION, OXS_ERROR_SIG_VERIFICATION_FAILED,"Cannot find <ds:SignedInfo> " );
+ return AXIS2_FAILURE;
+ }
+ /*Create the list for sign parts*/
+ sign_part_list = axis2_array_list_create(env,5);
+
+ /*Process signed info element*/
+ cur_node = AXIOM_NODE_GET_FIRST_CHILD(signed_info_node, env);
+ /*Iterate thru children of <SignedInfo>*/
+ while(cur_node){
+ axis2_char_t *localname = NULL;
+
+ localname = axiom_util_get_localname(cur_node, env);
+
+ if(0 == axis2_strcmp(localname, OXS_NODE_CANONICALIZATION_METHOD)){
+ axis2_char_t *c14n_mtd = NULL;
+ c14n_mtd = oxs_token_get_c14n_method(env, cur_node);
+ oxs_sign_ctx_set_c14n_mtd(sign_ctx, env, c14n_mtd);
+
+ }else if(0 == axis2_strcmp(localname, OXS_NODE_SIGNATURE_METHOD)){
+ axis2_char_t *sig_mtd = NULL;
+ sig_mtd = oxs_token_get_signature_method(env, cur_node);
+ oxs_sign_ctx_set_sign_mtd_algo(sign_ctx, env, sig_mtd);
+
+ }else if(0 == axis2_strcmp(localname, OXS_NODE_REFERENCE)){
+ oxs_sign_part_t *sign_part = NULL;
+
+ /* There might be multiple references.
+ * For each create a sign_part and add to sign_part_list in the sign_ctx*/
+ sign_part = oxs_sign_part_create(env);
+ status = oxs_xml_sig_process_ref_node(env, sign_part, cur_node, scope_node);
+ if(status == AXIS2_FAILURE){
+ oxs_error(env, ERROR_LOCATION, OXS_ERROR_SIG_VERIFICATION_FAILED,"<ds:Reference> node processing failed " );
+ return AXIS2_FAILURE;
+ }
+
+ /*Now we have a new sign_part. Add it to the list.*/
+ axis2_array_list_add(sign_part_list, env, sign_part);
+
+ }else{
+ printf("oxs_sig : We do not process cur node name %s", localname);
+ }
+ cur_node = AXIOM_NODE_GET_NEXT_SIBLING(cur_node, env);
+ }
+
+ oxs_sign_ctx_set_sign_parts(sign_ctx, env, sign_part_list);
+ /*Finished processing SignedInfo. Now we are processing the Signature Value element*/
+ /*The very next child of SignedInfo Should be the ds:SignatureValue*/
+ sig_val_node = AXIOM_NODE_GET_NEXT_SIBLING(signed_info_node, env);
+ if(0 == axis2_strcmp( OXS_NODE_SIGNATURE_VALUE, axiom_util_get_localname(sig_val_node, env))){
+ axis2_char_t *sig_val = NULL;
+
+ sig_val = oxs_token_get_signature_value(env, sig_val_node);
+ oxs_sign_ctx_set_sig_val(sign_ctx, env, sig_val);
+
+ }else{
+ /*Error the node should be the ds:SignatureValue*/
+ oxs_error(env, ERROR_LOCATION, OXS_ERROR_SIG_VERIFICATION_FAILED,"Cannot find <ds:SignatureValue> " );
+ return AXIS2_FAILURE;
+ }
+
+ /*We need to process the KeyInfo node. Do we???*/
+ /*TODO*/
return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+oxs_xml_sig_verify_sign_part(const axis2_env_t *env,
+ oxs_sign_part_t *sign_part)
+{
+ axis2_char_t *id = NULL;
+ axis2_char_t *digest_mtd = NULL;
+ axis2_char_t *digest_val = NULL;
+ axis2_char_t *new_digest = NULL;
+ axiom_node_t *node = NULL;
+ axis2_array_list_t *transforms = NULL;
+ axis2_status_t status = AXIS2_FAILURE;
+
+ id = oxs_sign_part_get_id(sign_part, env);
+ digest_mtd = oxs_sign_part_get_digest_mtd(sign_part, env);
+ digest_val = oxs_sign_part_get_digest_val(sign_part, env);
+ node = oxs_sign_part_get_node(sign_part, env);
+ transforms = oxs_sign_part_get_transforms(sign_part, env);
+
+ AXIS2_LOG_INFO(env->log, "[oxs][xml_sig] Verifying signature part %s ", id );
+
+ /*Do transforms to the node*/
+ new_digest = oxs_xml_sig_transform_n_digest(env, node, transforms, digest_mtd);
+
+ /*Compare values*/
+ if(0 == axis2_strcmp(new_digest, digest_val)){
+ AXIS2_LOG_INFO(env->log, "[oxs][xml_sig] Digest verification success for node Id= %s ", id );
+ status = AXIS2_SUCCESS;
+ }else{
+ oxs_error(env, ERROR_LOCATION, OXS_ERROR_SIG_VERIFICATION_FAILED,"Digest verification failed for node Id= %s ", id );
+ status = AXIS2_FAILURE;
+ }
+
+ return status;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+oxs_xml_sig_verify_digests(const axis2_env_t *env,
+ oxs_sign_ctx_t *sign_ctx)
+{
+ axis2_status_t status = AXIS2_FAILURE;
+ axis2_array_list_t *sign_parts = NULL;
+ int i = 0 ;
+
+ /*Get the sign_part list*/
+ sign_parts = oxs_sign_ctx_get_sign_parts(sign_ctx, env);
+ /*For each and every signature part in sig ctx,*/
+ for (i = 0; i < AXIS2_ARRAY_LIST_SIZE(sign_parts, env); i++){
+ oxs_sign_part_t *sign_part = NULL;
+
+ /*Get ith sign_part*/
+ sign_part = (oxs_sign_part_t*)axis2_array_list_get(sign_parts, env, i);
+ status = oxs_xml_sig_verify_sign_part(env, sign_part);
+ }
+
+ return status;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+oxs_xml_sig_verify(const axis2_env_t *env,
+ oxs_sign_ctx_t *sign_ctx,
+ axiom_node_t *signature_node,
+ axiom_node_t *scope_node)
+{
+ axis2_status_t status = AXIS2_FAILURE;
+ axiom_node_t *signed_info_node = NULL;
+ axiom_document_t *doc = NULL;
+ axis2_char_t *c14n_mtd = NULL;
+ axis2_char_t *content = NULL;
+ axis2_char_t *signature_val = NULL;
+
+ /*Set operation to verify*/
+ oxs_sign_ctx_set_operation(sign_ctx, env, OXS_SIGN_OPERATION_VERIFY);
+
+ /*Populate the sign_ctx by inspecting the ds:Signature node*/
+ status = oxs_xml_sig_process_signature_node(env, sign_ctx, signature_node, scope_node);
+ if(status != AXIS2_SUCCESS){
+ /*Something went wrong while processing the Signature node!!! :(*/
+ oxs_error(env, ERROR_LOCATION, OXS_ERROR_SIG_VERIFICATION_FAILED,"<ds:Signature> node processing failed " );
+ return AXIS2_FAILURE;
+ }
+ /*At this point we have a ready to process signature context. So start verification process*/
+
+ /*Verify the integrity of the signed parts by comparing the digest values of each and every reference.*/
+ status = oxs_xml_sig_verify_digests(env, sign_ctx);
+
+ if(AXIS2_FAILURE == status){
+ return AXIS2_FAILURE;
+ }
+
+ /*At this point we have compared the digest. Next step is to compare the Signature value */
+ /*First get the signature value from the context*/
+ signature_val = oxs_sign_ctx_get_sig_val(sign_ctx, env);
+
+ /*Then we apply the C14N for the ds:SignedInfo*/
+ signed_info_node = oxs_axiom_get_first_child_node_by_name(env, signature_node,
+ OXS_NODE_SIGNEDINFO, OXS_DSIG_NS, OXS_DS );
+ c14n_mtd = oxs_sign_ctx_get_c14n_mtd(sign_ctx, env);
+ doc = axiom_node_get_document(signed_info_node, env);
+ oxs_c14n_apply(env, doc, AXIS2_FALSE, &content, AXIS2_TRUE, NULL, signed_info_node);
+
+ /*In the final step we Verify*/
+ status = oxs_sig_verify(env, sign_ctx, content , signature_val);
+ if(AXIS2_FAILURE == status){
+ oxs_error(env, ERROR_LOCATION, OXS_ERROR_SIG_VERIFICATION_FAILED,"Signature is not valid " );
+ return AXIS2_FAILURE;
+ }else{
+ return AXIS2_SUCCESS;
+ }
+
+
}
Modified: webservices/axis2/scratch/c/dinesh/532/c/rampart/src/secpolicy/builder/Makefile.am
URL: http://svn.apache.org/viewvc/webservices/axis2/scratch/c/dinesh/532/c/rampart/src/secpolicy/builder/Makefile.am?view=diff&rev=513155&r1=513154&r2=513155
==============================================================================
--- webservices/axis2/scratch/c/dinesh/532/c/rampart/src/secpolicy/builder/Makefile.am (original)
+++ webservices/axis2/scratch/c/dinesh/532/c/rampart/src/secpolicy/builder/Makefile.am Wed Feb 28 21:58:03 2007
@@ -2,9 +2,9 @@
noinst_LTLIBRARIES = librp_builder.la
-librp_builder_la_SOURCES = algorithmsuite_builder.c asymmetric_binding_builder.c binding_commons_builder.c encryption_crypto_builder.c \
+librp_builder_la_SOURCES = algorithmsuite_builder.c asymmetric_binding_builder.c binding_commons_builder.c \
https_token_builder.c layout_builder.c qname_matcher.c rampart_config_builder.c secpolicy_builder.c \
- security_context_token_builder.c signature_crypto_builder.c signed_encrypted_elements_builder.c \
+ security_context_token_builder.c signed_encrypted_elements_builder.c \
signed_encrypted_parts_builder.c supporting_tokens_builder.c symmetric_asymmetric_commons_builder.c \
symmetric_binding_builder.c token_builder.c transport_binding_builder.c username_token_builder.c \
wss10_builder.c wss11_builder.c x509_token_builder.c policy_creator.c
Modified: webservices/axis2/scratch/c/dinesh/532/c/rampart/src/secpolicy/builder/policy_creator.c
URL: http://svn.apache.org/viewvc/webservices/axis2/scratch/c/dinesh/532/c/rampart/src/secpolicy/builder/policy_creator.c?view=diff&rev=513155&r1=513154&r2=513155
==============================================================================
--- webservices/axis2/scratch/c/dinesh/532/c/rampart/src/secpolicy/builder/policy_creator.c (original)
+++ webservices/axis2/scratch/c/dinesh/532/c/rampart/src/secpolicy/builder/policy_creator.c Wed Feb 28 21:58:03 2007
@@ -1,8 +1,7 @@
#include <rp_layout.h>
-/*#include <rp_secpolicy.h>*/
#include <rp_secpolicy_builder.h>
#include <rp_policy_creator.h>
-
+#include <rp_qname_matcher.h>
AXIS2_EXTERN rp_secpolicy_t *AXIS2_CALL
rp_policy_create_from_file(
@@ -14,11 +13,7 @@
axiom_stax_builder_t *builder = NULL;
axiom_document_t *document = NULL;
axiom_node_t *root = NULL;
- axiom_element_t *all_ele = NULL;
axiom_element_t *root_ele = NULL;
- axiom_node_t *exat_node = NULL;
- axiom_element_t *exat_ele = NULL;
- axiom_node_t *all_node = NULL;
rp_secpolicy_t *secpolicy = NULL;
reader = axiom_xml_reader_create_for_file(env,filename,NULL);
@@ -62,6 +57,38 @@
else
return NULL;
}
+ secpolicy = rp_policy_create_from_om_node(env,root);
+
+ return secpolicy;
+
+}
+
+
+AXIS2_EXTERN rp_secpolicy_t *AXIS2_CALL
+rp_policy_create_from_om_node(
+ const axis2_env_t *env,
+ axiom_node_t *root)
+{
+
+ axiom_element_t *all_ele = NULL;
+ axiom_element_t *root_ele = NULL;
+ axiom_node_t *exat_node = NULL;
+ axiom_element_t *exat_ele = NULL;
+ axiom_node_t *all_node = NULL;
+ rp_secpolicy_t *secpolicy = NULL;
+
+
+ if(AXIOM_NODE_GET_NODE_TYPE(root, env) == AXIOM_ELEMENT)
+ {
+ root_ele = (axiom_element_t*)AXIOM_NODE_GET_DATA_ELEMENT (root, env);
+ if(root_ele)
+ {
+
+ }
+ }
+ else
+ return NULL;
+
exat_node = AXIOM_NODE_GET_FIRST_CHILD(root,env);
if(exat_node)
{
@@ -95,3 +122,5 @@
return secpolicy;
}
+
+
Modified: webservices/axis2/scratch/c/dinesh/532/c/rampart/src/secpolicy/builder/qname_matcher.c
URL: http://svn.apache.org/viewvc/webservices/axis2/scratch/c/dinesh/532/c/rampart/src/secpolicy/builder/qname_matcher.c?view=diff&rev=513155&r1=513154&r2=513155
==============================================================================
--- webservices/axis2/scratch/c/dinesh/532/c/rampart/src/secpolicy/builder/qname_matcher.c (original)
+++ webservices/axis2/scratch/c/dinesh/532/c/rampart/src/secpolicy/builder/qname_matcher.c Wed Feb 28 21:58:03 2007
@@ -51,6 +51,43 @@
}
AXIS2_EXTERN axis2_bool_t AXIS2_CALL
+rp_match_policy_qname(
+ const axis2_env_t *env,
+ const axis2_char_t *local_name,
+ axiom_node_t *node,
+ axiom_element_t *element)
+{
+
+ axis2_qname_t *qname = NULL;
+ axis2_qname_t *node_qname = NULL;
+
+ AXIS2_ENV_CHECK(env,AXIS2_FALSE);
+
+ qname = axis2_qname_create(env,local_name,RP_POLICY_NS,RP_POLICY_PREFIX);
+ if(!qname)
+ return AXIS2_FALSE;
+
+ node_qname = AXIOM_ELEMENT_GET_QNAME(element,env,node);
+
+ if(!node_qname)
+ {
+ AXIS2_QNAME_FREE(qname,env);
+ qname = NULL;
+ return AXIS2_FALSE;
+ }
+
+ if(AXIS2_QNAME_EQUALS(qname,env,node_qname))
+ {
+ AXIS2_QNAME_FREE(qname,env);
+ qname = NULL;
+ return AXIS2_TRUE;
+ }
+
+ return AXIS2_FALSE;
+}
+
+
+AXIS2_EXTERN axis2_bool_t AXIS2_CALL
rp_match_rampart_config_qname(
const axis2_env_t *env,
const axis2_char_t *local_name,
Modified: webservices/axis2/scratch/c/dinesh/532/c/rampart/src/secpolicy/builder/rampart_config_builder.c
URL: http://svn.apache.org/viewvc/webservices/axis2/scratch/c/dinesh/532/c/rampart/src/secpolicy/builder/rampart_config_builder.c?view=diff&rev=513155&r1=513154&r2=513155
==============================================================================
--- webservices/axis2/scratch/c/dinesh/532/c/rampart/src/secpolicy/builder/rampart_config_builder.c (original)
+++ webservices/axis2/scratch/c/dinesh/532/c/rampart/src/secpolicy/builder/rampart_config_builder.c Wed Feb 28 21:58:03 2007
@@ -146,30 +146,35 @@
return AXIS2_FAILURE;
}
- else if(AXIS2_STRCMP(local_name,RP_SIGNATURE_CRYPTO)==0)
+ else if(AXIS2_STRCMP(local_name,RP_PUBLIC_KEY)==0)
{
- if(rp_match_rampart_config_qname(env,RP_SIGNATURE_CRYPTO,node,element))
+ if(rp_match_rampart_config_qname(env,RP_PUBLIC_KEY,node,element))
{
- rp_signature_crypto_t *signature_crypto = NULL;
- signature_crypto = rp_signature_crypto_builder_build(env,node);
- if(!signature_crypto)
- return AXIS2_FAILURE;
-
- return rp_rampart_config_set_signature_crypto(rampart_config,env,signature_crypto);
+ axis2_char_t *public_key_file = NULL;
+ public_key_file = AXIOM_ELEMENT_GET_TEXT(element,env,node);
+ return rp_rampart_config_set_public_key_file(rampart_config,env,public_key_file);
}
else
return AXIS2_FAILURE;
}
- else if(AXIS2_STRCMP(local_name,RP_ENCRYPTION_CRYPTO)==0)
+ else if(AXIS2_STRCMP(local_name,RP_PRIVATE_KEY)==0)
{
- if(rp_match_rampart_config_qname(env,RP_ENCRYPTION_CRYPTO,node,element))
+ if(rp_match_rampart_config_qname(env,RP_PRIVATE_KEY,node,element))
{
- rp_encryption_crypto_t *encryption_crypto = NULL;
- encryption_crypto = rp_encryption_crypto_builder_build(env,node);
- if(!encryption_crypto)
- return AXIS2_FAILURE;
-
- return rp_rampart_config_set_encryption_crypto(rampart_config,env,encryption_crypto);
+ axis2_char_t *private_key_file = NULL;
+ private_key_file = AXIOM_ELEMENT_GET_TEXT(element,env,node);
+ return rp_rampart_config_set_private_key_file(rampart_config,env,private_key_file);
+ }
+ else
+ return AXIS2_FAILURE;
+ }
+ else if(AXIS2_STRCMP(local_name,RP_TIME_TO_LIVE)==0)
+ {
+ if(rp_match_rampart_config_qname(env,RP_TIME_TO_LIVE,node,element))
+ {
+ axis2_char_t *time_to_live = NULL;
+ time_to_live = AXIOM_ELEMENT_GET_TEXT(element,env,node);
+ return rp_rampart_config_set_time_to_live(rampart_config,env,time_to_live);
}
else
return AXIS2_FAILURE;
Modified: webservices/axis2/scratch/c/dinesh/532/c/rampart/src/secpolicy/model/Makefile.am
URL: http://svn.apache.org/viewvc/webservices/axis2/scratch/c/dinesh/532/c/rampart/src/secpolicy/model/Makefile.am?view=diff&rev=513155&r1=513154&r2=513155
==============================================================================
--- webservices/axis2/scratch/c/dinesh/532/c/rampart/src/secpolicy/model/Makefile.am (original)
+++ webservices/axis2/scratch/c/dinesh/532/c/rampart/src/secpolicy/model/Makefile.am Wed Feb 28 21:58:03 2007
@@ -3,8 +3,8 @@
noinst_LTLIBRARIES = librp_model.la
librp_model_la_SOURCES = algorithmsuite.c asymmetric_binding.c \
- binding_commons.c encryption_crypto.c header.c https_token.c layout.c \
- property.c rampart_config.c secpolicy.c security_context_token.c signature_crypto.c \
+ binding_commons.c header.c https_token.c layout.c \
+ property.c rampart_config.c secpolicy.c security_context_token.c \
signed_encrypted_elements.c signed_encrypted_parts.c supporting_tokens.c symmetric_asymmetric_binding_commons.c \
symmetric_binding.c transport_binding.c ut.c wss10.c wss11.c x509_token.c
Modified: webservices/axis2/scratch/c/dinesh/532/c/rampart/src/secpolicy/model/rampart_config.c
URL: http://svn.apache.org/viewvc/webservices/axis2/scratch/c/dinesh/532/c/rampart/src/secpolicy/model/rampart_config.c?view=diff&rev=513155&r1=513154&r2=513155
==============================================================================
--- webservices/axis2/scratch/c/dinesh/532/c/rampart/src/secpolicy/model/rampart_config.c (original)
+++ webservices/axis2/scratch/c/dinesh/532/c/rampart/src/secpolicy/model/rampart_config.c Wed Feb 28 21:58:03 2007
@@ -25,8 +25,9 @@
axis2_char_t *password_callback_class;
axis2_char_t *authenticate_module;
axis2_char_t *password_type;
- rp_signature_crypto_t *signature_crypto;
- rp_encryption_crypto_t *encryption_crypto;
+ axis2_char_t *time_to_live;
+ axis2_char_t *public_key_file;
+ axis2_char_t *private_key_file;
};
AXIS2_EXTERN rp_rampart_config_t *AXIS2_CALL
@@ -47,10 +48,11 @@
rampart_config->user = NULL;
rampart_config->encryption_user = NULL;
rampart_config->password_callback_class = NULL;
- rampart_config->signature_crypto = NULL;
- rampart_config->encryption_crypto = NULL;
+ rampart_config->private_key_file = NULL;
+ rampart_config->public_key_file = NULL;
rampart_config->authenticate_module = NULL;
rampart_config->password_type = NULL;
+ rampart_config->time_to_live = NULL;
return rampart_config;
}
@@ -62,16 +64,6 @@
if(rampart_config)
{
- if(rampart_config->encryption_crypto)
- {
- rp_encryption_crypto_free(rampart_config->encryption_crypto,env);
- rampart_config->encryption_crypto = NULL;
- }
- if(rampart_config->signature_crypto)
- {
- rp_signature_crypto_free(rampart_config->signature_crypto,env);
- rampart_config->signature_crypto = NULL;
- }
AXIS2_FREE(env->allocator,rampart_config);
rampart_config = NULL;
}
@@ -193,46 +185,69 @@
}
-AXIS2_EXTERN rp_signature_crypto_t *AXIS2_CALL
-rp_rampart_config_get_signature_crypto(
+AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+rp_rampart_config_get_private_key_file(
rp_rampart_config_t *rampart_config,
const axis2_env_t *env)
{
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
- return rampart_config->signature_crypto;
+ return rampart_config->private_key_file;
}
AXIS2_EXTERN axis2_status_t AXIS2_CALL
-rp_rampart_config_set_signature_crypto(rp_rampart_config_t *rampart_config,
+rp_rampart_config_set_private_key_file(rp_rampart_config_t *rampart_config,
const axis2_env_t *env,
- rp_signature_crypto_t *signature_crypto)
+ axis2_char_t *private_key_file)
{
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
- AXIS2_PARAM_CHECK(env->error,signature_crypto,AXIS2_FAILURE);
+ AXIS2_PARAM_CHECK(env->error,private_key_file,AXIS2_FAILURE);
- rampart_config->signature_crypto = signature_crypto;
+ rampart_config->private_key_file = private_key_file;
return AXIS2_SUCCESS;
}
-AXIS2_EXTERN rp_encryption_crypto_t *AXIS2_CALL
-rp_rampart_config_get_encryption_crypto(
+AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+rp_rampart_config_get_public_key_file(
+ rp_rampart_config_t *rampart_config,
+ const axis2_env_t *env)
+{
+ AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+
+ return rampart_config->public_key_file;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+rp_rampart_config_set_public_key_file(rp_rampart_config_t *rampart_config,
+ const axis2_env_t *env,
+ axis2_char_t *public_key_file)
+{
+ AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+ AXIS2_PARAM_CHECK(env->error,public_key_file,AXIS2_FAILURE);
+
+ rampart_config->public_key_file = public_key_file;
+ return AXIS2_SUCCESS;
+}
+
+
+AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+rp_rampart_config_get_time_to_live(
rp_rampart_config_t *rampart_config,
const axis2_env_t *env)
{
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
- return rampart_config->encryption_crypto;
+ return rampart_config->time_to_live;
}
AXIS2_EXTERN axis2_status_t AXIS2_CALL
-rp_rampart_config_set_encryption_crypto(rp_rampart_config_t *rampart_config,
+rp_rampart_config_set_time_to_live(rp_rampart_config_t *rampart_config,
const axis2_env_t *env,
- rp_encryption_crypto_t *encryption_crypto)
+ axis2_char_t *time_to_live)
{
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
- AXIS2_PARAM_CHECK(env->error,encryption_crypto,AXIS2_FAILURE);
+ AXIS2_PARAM_CHECK(env->error,time_to_live,AXIS2_FAILURE);
- rampart_config->encryption_crypto = encryption_crypto;
+ rampart_config->time_to_live = time_to_live;
return AXIS2_SUCCESS;
}
Modified: webservices/axis2/scratch/c/dinesh/532/c/rampart/src/util/rampart_context.c
URL: http://svn.apache.org/viewvc/webservices/axis2/scratch/c/dinesh/532/c/rampart/src/util/rampart_context.c?view=diff&rev=513155&r1=513154&r2=513155
==============================================================================
--- webservices/axis2/scratch/c/dinesh/532/c/rampart/src/util/rampart_context.c (original)
+++ webservices/axis2/scratch/c/dinesh/532/c/rampart/src/util/rampart_context.c Wed Feb 28 21:58:03 2007
@@ -20,21 +20,48 @@
#include <oxs_axiom.h>
-
-
+/*
struct rampart_context_t
{
rp_secpolicy_t *secpolicy;
rampart_callback_t* password_callback_module;
rampart_authn_provider_t *authn_provider;
-
- /*Function pointers for php extension to assign*/
pfunc password_func;
auth_password_func authenticate_with_password;
auth_digest_func authenticate_with_digest;
};
+*/
+struct rampart_context_t
+{
+ /*PHP extension will set these members*/
+ axiom_node_t *policy_node;
+ void *prv_key;
+ axis2_key_type_t prv_key_type;
+ void *pub_key;
+ axis2_key_type_t pub_key_type;
+ axis2_char_t *user;
+ axis2_char_t *password;
+ axis2_char_t *prv_key_password;
+ password_callback_fn pwcb_function;
+ int ttl;
+ axis2_char_t *password_type;
+ /*Rampart specific members*/
+ rp_secpolicy_t *secpolicy;
+ rampart_callback_t *password_callback_module;
+ rampart_authn_provider_t *authn_provider;
+ auth_password_func authenticate_with_password;
+ auth_digest_func authenticate_with_digest;
+
+};
+
+/*void rampart_context_set_callback_fn(axis2_env_t *env,
+ axis2_char_t *(*callback)(
+ axis2_env_t *env,
+ axis2_char_t *user ,
+ void *ctx), void *ctx);
+*/
/*private functions*/
rp_symmetric_asymmetric_binding_commons_t
@@ -87,13 +114,24 @@
AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
return NULL;
}
+ rampart_context->policy_node = NULL;
+ rampart_context->prv_key = NULL;
+ rampart_context->prv_key_type = 0;
+ rampart_context->pub_key = NULL;
+ rampart_context->pub_key_type = 0;
+ rampart_context->user = 0;
+ rampart_context->password = NULL;
+ rampart_context->prv_key_password = NULL;
+ rampart_context->pwcb_function = NULL;
+ rampart_context->ttl = 0;
+ rampart_context->password_type = NULL;
+
rampart_context->secpolicy = NULL;
- rampart_context->password_callback_module = NULL;
+ rampart_context->password_callback_module = NULL;
rampart_context->authn_provider = NULL;
- rampart_context->password_func = NULL;
rampart_context->authenticate_with_password = NULL;
rampart_context->authenticate_with_digest = NULL;
-
+
return rampart_context;
}
@@ -119,74 +157,308 @@
/* Implementations */
-AXIS2_EXTERN rp_secpolicy_t *AXIS2_CALL
-rampart_context_get_secpolicy(
- rampart_context_t *rampart_context,
- const axis2_env_t *env)
+/*Implementation of PHP-rampart interface */
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+rampart_context_set_policy_node(rampart_context_t *rampart_context,
+ const axis2_env_t *env,
+ axiom_node_t *policy_node)
{
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+ AXIS2_PARAM_CHECK(env->error,policy_node,AXIS2_FAILURE);
+
+ rampart_context->policy_node = policy_node;
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+rampart_context_set_prv_key(rampart_context_t *rampart_context,
+ const axis2_env_t *env,
+ void *prv_key)
+{
- return rampart_context->secpolicy;
+ AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+ AXIS2_PARAM_CHECK(env->error,prv_key,AXIS2_FAILURE);
+
+ rampart_context->prv_key = prv_key;
+ return AXIS2_SUCCESS;
}
AXIS2_EXTERN axis2_status_t AXIS2_CALL
-rampart_context_set_secpolicy(rampart_context_t *rampart_context,
+rampart_context_set_prv_key_type(rampart_context_t *rampart_context,
const axis2_env_t *env,
- rp_secpolicy_t *secpolicy)
+ axis2_key_type_t type)
{
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
- AXIS2_PARAM_CHECK(env->error,secpolicy,AXIS2_FAILURE);
+ AXIS2_PARAM_CHECK(env->error,type,AXIS2_FAILURE);
- rampart_context->secpolicy = secpolicy;
+ rampart_context->prv_key_type = type;
return AXIS2_SUCCESS;
}
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+rampart_context_set_pub_key(rampart_context_t *rampart_context,
+ const axis2_env_t *env,
+ void *pub_key)
+{
+ AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+ AXIS2_PARAM_CHECK(env->error,pub_key,AXIS2_FAILURE);
-AXIS2_EXTERN rampart_callback_t *AXIS2_CALL
-rampart_context_get_password_callback(
+ rampart_context->pub_key = pub_key;
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+rampart_context_set_pub_key_type(rampart_context_t *rampart_context,
+ const axis2_env_t *env,
+ axis2_key_type_t type)
+{
+ AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+ AXIS2_PARAM_CHECK(env->error,type,AXIS2_FAILURE);
+
+ rampart_context->pub_key_type = type;
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+rampart_context_set_user(rampart_context_t *rampart_context,
+ const axis2_env_t *env,
+ axis2_char_t *user)
+{
+
+ AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+ AXIS2_PARAM_CHECK(env->error,user,AXIS2_FAILURE);
+
+ rampart_context->user = user;
+ return AXIS2_SUCCESS;
+
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+rampart_context_set_password(rampart_context_t *rampart_context,
+ const axis2_env_t *env,
+ axis2_char_t *password)
+{
+
+ AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+ AXIS2_PARAM_CHECK(env->error,password,AXIS2_FAILURE);
+
+ rampart_context->password = password;
+ return AXIS2_SUCCESS;
+}
+
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+rampart_context_set_prv_key_password(rampart_context_t *rampart_context,
+ const axis2_env_t *env,
+ axis2_char_t *prv_key_password)
+{
+
+ AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+ AXIS2_PARAM_CHECK(env->error,prv_key_password,AXIS2_FAILURE);
+
+ rampart_context->prv_key_password = prv_key_password;
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+rampart_context_set_pwcb_function(rampart_context_t *rampart_context,
+ const axis2_env_t *env,
+ password_callback_fn pwcb_function,
+ void *ctx)
+{
+ AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+ AXIS2_PARAM_CHECK(env->error,pwcb_function,AXIS2_FAILURE);
+
+ rampart_context->pwcb_function = pwcb_function;
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+rampart_context_set_password_type(rampart_context_t *rampart_context,
+ const axis2_env_t *env,
+ axis2_char_t *password_type)
+{
+
+ AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+ AXIS2_PARAM_CHECK(env->error,password_type,AXIS2_FAILURE);
+
+ rampart_context->password_type = password_type;
+ return AXIS2_SUCCESS;
+
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+rampart_context_set_ttl(rampart_context_t *rampart_context,
+ const axis2_env_t *env,
+ int ttl)
+{
+
+ AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+ AXIS2_PARAM_CHECK(env->error,ttl,AXIS2_FAILURE);
+
+ rampart_context->ttl = ttl;
+ return AXIS2_SUCCESS;
+}
+
+/*End of implementation*/
+
+/*Getters of the PHP-RAMPART interface*/
+
+AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+rampart_context_get_policy_node(
+ rampart_context_t *rampart_context,
+ const axis2_env_t *env)
+{
+ AXIS2_ENV_CHECK(env, NULL);
+
+ return rampart_context->policy_node;
+}
+
+AXIS2_EXTERN void *AXIS2_CALL
+rampart_context_get_prv_key(
+ rampart_context_t *rampart_context,
+ const axis2_env_t *env)
+{
+ AXIS2_ENV_CHECK(env, NULL);
+
+ return rampart_context->prv_key;
+}
+
+AXIS2_EXTERN axis2_key_type_t AXIS2_CALL
+rampart_context_get_prv_key_type(
+ rampart_context_t *rampart_context,
+ const axis2_env_t *env)
+{
+ AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+
+ return rampart_context->prv_key_type;
+}
+
+AXIS2_EXTERN void *AXIS2_CALL
+rampart_context_get_pub_key(
+ rampart_context_t *rampart_context,
+ const axis2_env_t *env)
+{
+ AXIS2_ENV_CHECK(env, NULL);
+
+ return rampart_context->pub_key;
+}
+
+AXIS2_EXTERN axis2_key_type_t AXIS2_CALL
+rampart_context_get_pub_key_type(
+ rampart_context_t *rampart_context,
+ const axis2_env_t *env)
+{
+ AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+
+ return rampart_context->pub_key_type;
+}
+
+AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+rampart_context_get_user(
+ rampart_context_t *rampart_context,
+ const axis2_env_t *env)
+{
+ AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+
+ return rampart_context->user;
+}
+
+AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+rampart_context_get_password(
+ rampart_context_t *rampart_context,
+ const axis2_env_t *env)
+{
+ AXIS2_ENV_CHECK(env, NULL);
+
+ return rampart_context->password;
+}
+
+AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+rampart_context_get_prv_key_password(
+ rampart_context_t *rampart_context,
+ const axis2_env_t *env)
+{
+ AXIS2_ENV_CHECK(env, NULL);
+
+ return rampart_context->prv_key_password;
+}
+
+AXIS2_EXTERN password_callback_fn AXIS2_CALL
+rampart_context_get_pwcb_function(
+ rampart_context_t *rampart_context,
+ const axis2_env_t *env)
+{
+ AXIS2_ENV_CHECK(env, NULL);
+
+ return rampart_context->pwcb_function;
+}
+
+AXIS2_EXTERN int AXIS2_CALL
+rampart_context_get_ttl(
+ rampart_context_t *rampart_context,
+ const axis2_env_t *env)
+{
+ AXIS2_ENV_CHECK(env,AXIS2_FAILURE);
+
+ return rampart_context->ttl;
+}
+
+AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+rampart_context_get_password_type(
+ rampart_context_t *rampart_context,
+ const axis2_env_t *env)
+{
+ AXIS2_ENV_CHECK(env,NULL);
+
+ return rampart_context->password_type;
+}
+
+/*End of getters*/
+
+AXIS2_EXTERN rp_secpolicy_t *AXIS2_CALL
+rampart_context_get_secpolicy(
rampart_context_t *rampart_context,
const axis2_env_t *env)
{
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
- return rampart_context->password_callback_module;
+ return rampart_context->secpolicy;
}
AXIS2_EXTERN axis2_status_t AXIS2_CALL
-rampart_context_set_password_callback(rampart_context_t *rampart_context,
+rampart_context_set_secpolicy(rampart_context_t *rampart_context,
const axis2_env_t *env,
- rampart_callback_t *password_callback_module)
+ rp_secpolicy_t *secpolicy)
{
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
- AXIS2_PARAM_CHECK(env->error,password_callback_module,AXIS2_FAILURE);
+ AXIS2_PARAM_CHECK(env->error,secpolicy,AXIS2_FAILURE);
- rampart_context->password_callback_module = password_callback_module;
+ rampart_context->secpolicy = secpolicy;
return AXIS2_SUCCESS;
}
-/*This function get the function pointer of the password callback function*/
-AXIS2_EXTERN pfunc AXIS2_CALL
-rampart_context_get_password_function(
+AXIS2_EXTERN rampart_callback_t *AXIS2_CALL
+rampart_context_get_password_callback(
rampart_context_t *rampart_context,
const axis2_env_t *env)
{
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
- return rampart_context->password_func;
+ return rampart_context->password_callback_module;
}
-/*set the password callback function*/
-
AXIS2_EXTERN axis2_status_t AXIS2_CALL
-rampart_context_set_password_function(rampart_context_t *rampart_context,
+rampart_context_set_password_callback(rampart_context_t *rampart_context,
const axis2_env_t *env,
- pfunc password_func)
+ rampart_callback_t *password_callback_module)
{
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
- AXIS2_PARAM_CHECK(env->error,password_func,AXIS2_FAILURE);
+ AXIS2_PARAM_CHECK(env->error,password_callback_module,AXIS2_FAILURE);
- rampart_context->password_func = password_func;
+ rampart_context->password_callback_module = password_callback_module;
return AXIS2_SUCCESS;
}
@@ -649,8 +921,9 @@
return rampart_context_use_username_token(signed_supporting,env);
}
-AXIS2_EXTERN axis2_char_t *AXIS2_CALL
-rampart_context_get_user(
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+rampart_context_set_user_from_file(
rampart_context_t *rampart_context,
const axis2_env_t *env)
{
@@ -658,11 +931,13 @@
rp_rampart_config_t *config = NULL;
config = rp_secpolicy_get_rampart_config(rampart_context->secpolicy,env);
if(!config)
- return NULL;
+ return AXIS2_FAILURE;
- return rp_rampart_config_get_user(config,env);
+ rampart_context->user = rp_rampart_config_get_user(config,env);
+ return AXIS2_SUCCESS;
}
+
AXIS2_EXTERN axis2_char_t *AXIS2_CALL
rampart_context_get_password_callback_class(
rampart_context_t *rampart_context,
@@ -689,27 +964,38 @@
return rp_rampart_config_get_authenticate_module(config,env);
}
-AXIS2_EXTERN axis2_bool_t AXIS2_CALL
-rampart_context_get_password_type(
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+rampart_context_set_password_type_from_file(
rampart_context_t *rampart_context,
const axis2_env_t *env)
{
- axis2_bool_t digest = AXIS2_FALSE;
- axis2_char_t *type = NULL;
rp_rampart_config_t *config = NULL;
-
config = rp_secpolicy_get_rampart_config(rampart_context->secpolicy,env);
if(!config)
- return AXIS2_FALSE;
+ return AXIS2_FAILURE;
- type = rp_rampart_config_get_password_type(config,env);
- if(AXIS2_STRCMP(type,RP_DIGEST)==0)
- {
- digest = AXIS2_TRUE;
- return digest;
- }
+ rampart_context->password_type = rp_rampart_config_get_password_type(config,env);
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+rampart_context_set_ttl_from_file(
+ rampart_context_t *rampart_context,
+ const axis2_env_t *env)
+{
+ rp_rampart_config_t *config = NULL;
+ axis2_char_t *time_to_live = NULL;
+ config = rp_secpolicy_get_rampart_config(rampart_context->secpolicy,env);
+ if(!config)
+ return AXIS2_FAILURE;
+
+ time_to_live = rp_rampart_config_get_time_to_live(config,env);
+ if(!time_to_live)
+ rampart_context->ttl = 300;
else
- return digest;
+ rampart_context->ttl = axis2_atoi(time_to_live);
+
+ return AXIS2_SUCCESS;
}
AXIS2_EXTERN axis2_bool_t AXIS2_CALL
@@ -957,53 +1243,36 @@
}
AXIS2_EXTERN axis2_char_t *AXIS2_CALL
-rampart_context_get_encryption_prop_file(
+rampart_context_get_public_key_file(
rampart_context_t *rampart_context,
const axis2_env_t *env)
{
rp_rampart_config_t *rampart_config = NULL;
- rp_encryption_crypto_t *enc_crypto = NULL;
rampart_config = rp_secpolicy_get_rampart_config(rampart_context->secpolicy,env);
if(rampart_config)
{
- enc_crypto = rp_rampart_config_get_encryption_crypto(rampart_config,env);
- if(enc_crypto)
- {
- return rp_encryption_crypto_get_encryption_prop_file(enc_crypto,env);
- }
- else
- return NULL;
+ return rp_rampart_config_get_public_key_file(rampart_config,env);
}
else
return NULL;
}
AXIS2_EXTERN axis2_char_t *AXIS2_CALL
-rampart_context_get_decryption_prop_file(
+rampart_context_get_private_key_file(
rampart_context_t *rampart_context,
const axis2_env_t *env)
{
rp_rampart_config_t *rampart_config = NULL;
- rp_encryption_crypto_t *enc_crypto = NULL;
rampart_config = rp_secpolicy_get_rampart_config(rampart_context->secpolicy,env);
if(rampart_config)
{
- enc_crypto = rp_rampart_config_get_encryption_crypto(rampart_config,env);
- if(enc_crypto)
- {
- return rp_encryption_crypto_get_decryption_prop_file(enc_crypto,env);
- }
- else
- return NULL;
+ return rp_rampart_config_get_private_key_file(rampart_config,env);
}
else
return NULL;
}
-
-
-
AXIS2_EXTERN axis2_char_t *AXIS2_CALL
rampart_context_get_encryption_user(
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org