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 2007/01/10 10:31:29 UTC
svn commit: r494775 - in /webservices/axis2/trunk/c/rampart: include/
samples/client/enc_echo/ src/omxmlsec/ src/omxmlsec/openssl/ src/util/
Author: kaushalye
Date: Wed Jan 10 01:31:25 2007
New Revision: 494775
URL: http://svn.apache.org/viewvc?view=rev&rev=494775
Log:
1. Extended asymmetric encryption support for algorithm RSA-OAEP in OMXMLSecurity.
2. Modified rampart to configure it to use RSA-OAEP to transport the symmetric key.
3. Modified rampart action to hold a certificate/key as a string.
Modified:
webservices/axis2/trunk/c/rampart/include/openssl_constants.h
webservices/axis2/trunk/c/rampart/include/openssl_rsa.h
webservices/axis2/trunk/c/rampart/include/oxs_asym_ctx.h
webservices/axis2/trunk/c/rampart/include/rampart_action.h
webservices/axis2/trunk/c/rampart/include/rampart_constants.h
webservices/axis2/trunk/c/rampart/samples/client/enc_echo/echo.c
webservices/axis2/trunk/c/rampart/src/omxmlsec/asym_ctx.c
webservices/axis2/trunk/c/rampart/src/omxmlsec/encryption.c
webservices/axis2/trunk/c/rampart/src/omxmlsec/key_mgr.c
webservices/axis2/trunk/c/rampart/src/omxmlsec/openssl/pem.c
webservices/axis2/trunk/c/rampart/src/omxmlsec/openssl/rsa.c
webservices/axis2/trunk/c/rampart/src/util/rampart_action.c
webservices/axis2/trunk/c/rampart/src/util/rampart_encryption.c
webservices/axis2/trunk/c/rampart/src/util/rampart_sec_header_processor.c
Modified: webservices/axis2/trunk/c/rampart/include/openssl_constants.h
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/rampart/include/openssl_constants.h?view=diff&rev=494775&r1=494774&r2=494775
==============================================================================
--- webservices/axis2/trunk/c/rampart/include/openssl_constants.h (original)
+++ webservices/axis2/trunk/c/rampart/include/openssl_constants.h Wed Jan 10 01:31:25 2007
@@ -39,6 +39,8 @@
#define OPENSSL_EVP_aes_256_cbc "EVP_aes_256_cbc"
#define OPENSSL_RSA_ENCRYPTION "rsaEncryption"
+#define OPENSSL_RSA_PKCS1_PADDING "RSA_PKCS1_PADDING"
+#define OPENSSL_RSA_PKCS1_OAEP_PADDING "RSA_PKCS1_OAEP_PADDING"
#define OPENSSL_DEFAULT_IV8 "01234567"
#define OPENSSL_DEFAULT_IV16 "0123456701234567"
Modified: webservices/axis2/trunk/c/rampart/include/openssl_rsa.h
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/rampart/include/openssl_rsa.h?view=diff&rev=494775&r1=494774&r2=494775
==============================================================================
--- webservices/axis2/trunk/c/rampart/include/openssl_rsa.h (original)
+++ webservices/axis2/trunk/c/rampart/include/openssl_rsa.h Wed Jan 10 01:31:25 2007
@@ -75,6 +75,7 @@
openssl_rsa_t *rsa,
const axis2_env_t *env,
const openssl_pkey_t *pkey,
+ const axis2_char_t *padding,
oxs_buffer_t *in,
oxs_buffer_t *out );
@@ -92,6 +93,7 @@
openssl_rsa_t *rsa,
const axis2_env_t *env,
const openssl_pkey_t *pkey,
+ const axis2_char_t *padding,
oxs_buffer_t *in,
oxs_buffer_t *out );
};
@@ -110,11 +112,11 @@
#define OPENSSL_RSA_FREE(rsa, env) \
((rsa)->ops->free(rsa, env) )
-#define OPENSSL_RSA_PRV_DECRYPT(rsa, env, pkey, in, out) \
- ((rsa)->ops->prv_decrypt(rsa, env, pkey, in, out) )
+#define OPENSSL_RSA_PRV_DECRYPT(rsa, env, pkey, padding, in, out) \
+ ((rsa)->ops->prv_decrypt(rsa, env, pkey, padding, in, out) )
-#define OPENSSL_RSA_PUB_ENCRYPT(rsa, env, pkey, in, out) \
- ((rsa)->ops->pub_encrypt(rsa, env, pkey, in, out) )
+#define OPENSSL_RSA_PUB_ENCRYPT(rsa, env, pkey, padding, in, out) \
+ ((rsa)->ops->pub_encrypt(rsa, env, pkey, padding, in, out) )
/** @} */
Modified: webservices/axis2/trunk/c/rampart/include/oxs_asym_ctx.h
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/rampart/include/oxs_asym_ctx.h?view=diff&rev=494775&r1=494774&r2=494775
==============================================================================
--- webservices/axis2/trunk/c/rampart/include/oxs_asym_ctx.h (original)
+++ webservices/axis2/trunk/c/rampart/include/oxs_asym_ctx.h Wed Jan 10 01:31:25 2007
@@ -93,7 +93,7 @@
*@return AXIS2_SUCCESS on success, else AXIS2_FAILURE
*/
AXIS2_EXTERN axis2_char_t* AXIS2_CALL
-oxs_asym_ctx_get_der_buf(const oxs_asym_ctx_t *ctx,
+oxs_asym_ctx_get_pem_buf(const oxs_asym_ctx_t *ctx,
const axis2_env_t *env);
/**
*Returns the password. Usually the password for the keystore. But alternatively may kepe the
Modified: webservices/axis2/trunk/c/rampart/include/rampart_action.h
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/rampart/include/rampart_action.h?view=diff&rev=494775&r1=494774&r2=494775
==============================================================================
--- webservices/axis2/trunk/c/rampart/include/rampart_action.h (original)
+++ webservices/axis2/trunk/c/rampart/include/rampart_action.h Wed Jan 10 01:31:25 2007
@@ -41,38 +41,6 @@
* @{
*/
-/* Inflow outflow security parameter */
-/*
-<?xml version="1.0" encoding="UTF-8"?>
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
- <xs:element name="action">
- <xs:annotation>
- <xs:documentation>Outflow security 'action' configuration</xs:documentation>
- </xs:annotation>
- <xs:complexType>
- <xs:sequence>
- <xs:element name="items" type="xs:string"/>
- <xs:element name="user" type="xs:string"/>
- <xs:element name="passwordCallbackClass" type="xs:string" minOccurs="0"/>
- <xs:element name="signaturePropFile" type="xs:string" minOccurs="0"/>
- <xs:element name="encryptionPropFile" type="xs:string" minOccurs="0"/>
- <xs:element name="encryptionPropFile" type="xs:string" minOccurs="0"/>
- <xs:element name="signatureKeyIdentifier" type="xs:string" minOccurs="0"/>
- <xs:element name="encryptionKeyIdentifier" type="xs:string" minOccurs="0"/>
- <xs:element name="encryptionUser" type="xs:string" minOccurs="0"/>
- <xs:element name="signatureParts" type="xs:string" minOccurs="0"/>
- <xs:element name="encryptionParts" type="xs:string" minOccurs="0"/>
- <xs:element name="optimizeParts" type="xs:string" minOccurs="0"/>
- <xs:element name="encryptionSymAlgorithm" type="xs:string" minOccurs="0"/>
- <xs:element name="EmbeddedKeyCallbackClass" type="xs:string" minOccurs="0"/>
- <xs:element name="encryptionKeyTransportAlgorithm" type="xs:string" minOccurs="0"/>
- <xs:element name="EmbeddedKeyName" type="xs:string" minOccurs="0"/>
- <xs:element name="timeToLive" type="xs:string" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- </xs:element>
-</xs:schema>
-*/
/** Type name for struct rampart_actions_ops */
typedef struct rampart_actions_ops rampart_actions_ops_t;
@@ -263,6 +231,17 @@
rampart_actions_t *actions,
const axis2_env_t *env
);
+ /**
+ * Gets key_buf of the rampart action.
+ * @param actions rampart_action ptr to action
+ * @param env pointer to environment struct
+ * @return key_buf
+ */
+ axis2_char_t *(AXIS2_CALL *
+ get_key_buf)(
+ rampart_actions_t *actions,
+ const axis2_env_t *env
+ );
/**
* Sets encryption_user of the rampart action.
@@ -472,6 +451,19 @@
const axis2_env_t *env,
axis2_char_t *time_to_live
);
+ /**
+ * Sets key_buf of the rampart action.
+ * @param actions rampart_action ptr to action
+ * @param env pointer to environment struct
+ * @param key_buf
+ * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
+ */
+ axis2_status_t (AXIS2_CALL *
+ set_key_buf)(
+ rampart_actions_t *actions,
+ const axis2_env_t *env,
+ axis2_char_t *key_buf
+ );
/**
@@ -627,6 +619,12 @@
#define RAMPART_ACTIONS_SET_TIME_TO_LIVE(actions, env, time_to_live)\
((actions)->ops->set_time_to_live(actions, env, time_to_live))
+
+#define RAMPART_ACTIONS_GET_KEY_BUF(actions, env) \
+ ((actions)->ops->get_key_buf(actions, env) )
+
+#define RAMPART_ACTIONS_SET_KEY_BUF(actions, env, key_buf)\
+ ((actions)->ops->set_key_buf(actions, env, key_buf))
#define RAMPART_ACTIONS_RESET(actions, env) \
((actions)->ops->reset(actions, env))
Modified: webservices/axis2/trunk/c/rampart/include/rampart_constants.h
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/rampart/include/rampart_constants.h?view=diff&rev=494775&r1=494774&r2=494775
==============================================================================
--- webservices/axis2/trunk/c/rampart/include/rampart_constants.h (original)
+++ webservices/axis2/trunk/c/rampart/include/rampart_constants.h Wed Jan 10 01:31:25 2007
@@ -109,6 +109,7 @@
#define RAMPART_ACTION_ENCRYPTION_KEY_TRANSFORM_ALGORITHM "encryptionKeyTransportAlgorithm"
#define RAMPART_ACTION_EMBEDDED_KEY_NAME "EmbeddedKeyName"
#define RAMPART_ACTION_TIME_TO_LIVE "timeToLive"
+#define RAMPART_ACTION_KEY_BUF "keyBuffer"
/************fault codes***************/
Modified: webservices/axis2/trunk/c/rampart/samples/client/enc_echo/echo.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/rampart/samples/client/enc_echo/echo.c?view=diff&rev=494775&r1=494774&r2=494775
==============================================================================
--- webservices/axis2/trunk/c/rampart/samples/client/enc_echo/echo.c (original)
+++ webservices/axis2/trunk/c/rampart/samples/client/enc_echo/echo.c Wed Jan 10 01:31:25 2007
@@ -130,11 +130,11 @@
printf("echo client invoke FAILED!\n");
}
- /*if (svc_client)
+ if (svc_client)
{
AXIS2_SVC_CLIENT_FREE(svc_client, env);
svc_client = NULL;
- }*/
+ }
/* if (endpoint_ref)
{
AXIS2_ENDPOINT_REF_FREE(endpoint_ref, env);
Modified: webservices/axis2/trunk/c/rampart/src/omxmlsec/asym_ctx.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/rampart/src/omxmlsec/asym_ctx.c?view=diff&rev=494775&r1=494774&r2=494775
==============================================================================
--- webservices/axis2/trunk/c/rampart/src/omxmlsec/asym_ctx.c (original)
+++ webservices/axis2/trunk/c/rampart/src/omxmlsec/asym_ctx.c Wed Jan 10 01:31:25 2007
@@ -24,7 +24,7 @@
struct oxs_asym_ctx_t
{
axis2_char_t *file_name;
- axis2_char_t *der_buf;
+ axis2_char_t *pem_buf;
axis2_char_t *password;
axis2_char_t *algorithm;
axis2_char_t *st_ref_pattern;
@@ -47,11 +47,11 @@
}
axis2_char_t *AXIS2_CALL
-oxs_asym_ctx_get_der_buf(
+oxs_asym_ctx_get_pem_buf(
const oxs_asym_ctx_t *asym_ctx,
const axis2_env_t *env)
{
- return asym_ctx->der_buf;
+ return asym_ctx->pem_buf;
}
axis2_char_t *AXIS2_CALL
oxs_asym_ctx_get_password(
@@ -127,18 +127,18 @@
}
axis2_status_t AXIS2_CALL
-oxs_asym_ctx_set_der_buf(
+oxs_asym_ctx_set_pem_buf(
oxs_asym_ctx_t *asym_ctx,
const axis2_env_t *env,
- axis2_char_t *der_buf)
+ axis2_char_t *pem_buf)
{
- if (asym_ctx->der_buf)
+ if (asym_ctx->pem_buf)
{
- AXIS2_FREE(env->allocator, asym_ctx->der_buf);
- asym_ctx->der_buf = NULL;
+ AXIS2_FREE(env->allocator, asym_ctx->pem_buf);
+ asym_ctx->pem_buf = NULL;
}
- asym_ctx->der_buf = AXIS2_STRDUP(der_buf, env);
+ asym_ctx->pem_buf = AXIS2_STRDUP(pem_buf, env);
return AXIS2_SUCCESS;
}
@@ -260,7 +260,7 @@
}
asym_ctx->file_name= NULL;
- asym_ctx->der_buf= NULL;
+ asym_ctx->pem_buf= NULL;
asym_ctx->password= NULL;
asym_ctx->format= -1;
asym_ctx->algorithm = NULL;
@@ -285,10 +285,10 @@
asym_ctx->file_name = NULL;
}
- if (asym_ctx->der_buf)
+ if (asym_ctx->pem_buf)
{
- AXIS2_FREE(env->allocator, asym_ctx->der_buf);
- asym_ctx->der_buf = NULL;
+ AXIS2_FREE(env->allocator, asym_ctx->pem_buf);
+ asym_ctx->pem_buf = NULL;
}
if (asym_ctx->password)
Modified: webservices/axis2/trunk/c/rampart/src/omxmlsec/encryption.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/rampart/src/omxmlsec/encryption.c?view=diff&rev=494775&r1=494774&r2=494775
==============================================================================
--- webservices/axis2/trunk/c/rampart/src/omxmlsec/encryption.c (original)
+++ webservices/axis2/trunk/c/rampart/src/omxmlsec/encryption.c Wed Jan 10 01:31:25 2007
@@ -187,11 +187,19 @@
axis2_status_t status = AXIS2_FAILURE;
axis2_char_t *password = NULL;
axis2_char_t *algorithm = NULL;
+ axis2_char_t *padding = NULL;
algorithm = oxs_asym_ctx_get_algorithm(ctx, env);
- /* We support RSA v1.5 encryption only. If any other algorithm is specified, replace it with the proper one*/
+ /* We support RSA v1.5 encryption only. If any other algorithm is specified, replace it with the proper one
if(0 != (AXIS2_STRCMP(OXS_HREF_RSA_PKCS1, algorithm ))) {
oxs_asym_ctx_set_algorithm(ctx, env, OXS_HREF_RSA_PKCS1);
+ }*/
+
+ /*Set the proper padding for the algorithm*/
+ if(0 == (AXIS2_STRCMP(OXS_HREF_RSA_OAEP, algorithm))){
+ padding = OPENSSL_RSA_PKCS1_OAEP_PADDING;
+ }else if(0 == (AXIS2_STRCMP(OXS_HREF_RSA_PKCS1, algorithm))){
+ padding = OPENSSL_RSA_PKCS1_PADDING;
}
/*Load the key using key manager*/
@@ -218,7 +226,7 @@
/*Encrypt using the public key. Then base64 encode and populate the buffer */
out_buf = oxs_buffer_create(env);
- enclen = OPENSSL_RSA_PUB_ENCRYPT(rsa, env, pkey, input, out_buf);
+ enclen = OPENSSL_RSA_PUB_ENCRYPT(rsa, env, pkey, padding, input, out_buf);
encodedlen = axis2_base64_encode_len(enclen);
encoded_str = AXIS2_MALLOC(env->allocator, encodedlen);
ret = axis2_base64_encode(encoded_str, (const char *)OXS_BUFFER_GET_DATA(out_buf, env), enclen);
@@ -243,7 +251,7 @@
ret = axis2_base64_decode((char*)decoded_encrypted_str, (char*)OXS_BUFFER_GET_DATA(input, env));
dec_enc_buf = oxs_buffer_create(env);
OXS_BUFFER_POPULATE(dec_enc_buf, env, decoded_encrypted_str, ret);
- declen = OPENSSL_RSA_PRV_DECRYPT(rsa, env, pkey, dec_enc_buf, result);
+ declen = OPENSSL_RSA_PRV_DECRYPT(rsa, env, pkey, padding, dec_enc_buf, result);
/*Free*/
AXIS2_FREE(env->allocator, decoded_encrypted_str);
Modified: webservices/axis2/trunk/c/rampart/src/omxmlsec/key_mgr.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/rampart/src/omxmlsec/key_mgr.c?view=diff&rev=494775&r1=494774&r2=494775
==============================================================================
--- webservices/axis2/trunk/c/rampart/src/omxmlsec/key_mgr.c (original)
+++ webservices/axis2/trunk/c/rampart/src/omxmlsec/key_mgr.c Wed Jan 10 01:31:25 2007
@@ -27,7 +27,7 @@
axis2_char_t *password)
{
axis2_char_t *filename = NULL;
- axis2_char_t *der_buf = NULL;
+ axis2_char_t *pem_buf = NULL;
axis2_status_t status = AXIS2_FAILURE;
openssl_x509_format_t format;
openssl_pkey_t *open_prvkey = NULL;
@@ -41,15 +41,15 @@
/*If user has specified the certificate/private key directly we will extract the information from it.
* Else we will look for a file name to load the certificate/private key*/
- der_buf = oxs_asym_ctx_get_der_buf(ctx, env);
- if(der_buf){
+ pem_buf = oxs_asym_ctx_get_pem_buf(ctx, env);
+ if(pem_buf){
if( OXS_ASYM_CTX_OPERATION_PUB_ENCRYPT == oxs_asym_ctx_get_operation(ctx, env) ||
OXS_ASYM_CTX_OPERATION_PUB_DECRYPT == oxs_asym_ctx_get_operation(ctx, env)){
/*load certificate from buf*/
- status = openssl_x509_load_from_buffer(env, der_buf, &cert);
+ status = openssl_x509_load_from_buffer(env, pem_buf, &cert);
}else{
/*load private key from buf*/
- status = openssl_pem_buf_read_pkey(env, der_buf, password, OPENSSL_PEM_PKEY_TYPE_PRIVATE_KEY, &prvkey);
+ status = openssl_pem_buf_read_pkey(env, pem_buf, password, OPENSSL_PEM_PKEY_TYPE_PRIVATE_KEY, &prvkey);
if(status == AXIS2_FAILURE){
prvkey = NULL;
}
@@ -98,7 +98,7 @@
}
}
- }/*end of der_buf*/
+ }/*end of pem_buf*/
/*Wht ever the way, right now we should have either the public key or the private key*/
Modified: webservices/axis2/trunk/c/rampart/src/omxmlsec/openssl/pem.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/rampart/src/omxmlsec/openssl/pem.c?view=diff&rev=494775&r1=494774&r2=494775
==============================================================================
--- webservices/axis2/trunk/c/rampart/src/omxmlsec/openssl/pem.c (original)
+++ webservices/axis2/trunk/c/rampart/src/omxmlsec/openssl/pem.c Wed Jan 10 01:31:25 2007
@@ -61,8 +61,9 @@
return AXIS2_FAILURE;
}
/*Load*/
- *pkey = PEM_read_bio_PrivateKey(bio, NULL, 0 , password);
+ PEM_read_bio_PrivateKey(bio, pkey, 0 , password);
+
/*Free*/
BIO_free(bio);
bio = NULL;
@@ -70,6 +71,7 @@
buff = NULL;
if(!*pkey){
+ printf("\npkey is NULL");
return AXIS2_FAILURE;
}
return AXIS2_SUCCESS;
Modified: webservices/axis2/trunk/c/rampart/src/omxmlsec/openssl/rsa.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/rampart/src/omxmlsec/openssl/rsa.c?view=diff&rev=494775&r1=494774&r2=494775
==============================================================================
--- webservices/axis2/trunk/c/rampart/src/omxmlsec/openssl/rsa.c (original)
+++ webservices/axis2/trunk/c/rampart/src/omxmlsec/openssl/rsa.c Wed Jan 10 01:31:25 2007
@@ -59,6 +59,7 @@
openssl_rsa_t *rsa,
const axis2_env_t *env,
const openssl_pkey_t *pkey,
+ const axis2_char_t *padding,
oxs_buffer_t *in,
oxs_buffer_t *out);
@@ -67,6 +68,7 @@
openssl_rsa_t *rsa,
const axis2_env_t *env,
const openssl_pkey_t *pkey,
+ const axis2_char_t *padding,
oxs_buffer_t *in,
oxs_buffer_t *out);
@@ -135,6 +137,7 @@
openssl_rsa_t *rsa,
const axis2_env_t *env,
const openssl_pkey_t *pkey,
+ const axis2_char_t *padding,
oxs_buffer_t *in,
oxs_buffer_t *out)
{
@@ -142,18 +145,25 @@
openssl_rsa_impl_t *rsa_impl = NULL;
int ret;
EVP_PKEY *key = NULL;
+ int pad = RSA_PKCS1_PADDING;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
rsa_impl = AXIS2_INTF_TO_IMPL(rsa);
key = (EVP_PKEY *)OPENSSL_PKEY_GET_KEY(pkey, env);
+ if(0 == AXIS2_STRCMP(padding, OPENSSL_RSA_PKCS1_OAEP_PADDING ) ){
+ pad = RSA_PKCS1_OAEP_PADDING;
+ }else if(0 == AXIS2_STRCMP(padding, OPENSSL_RSA_PKCS1_PADDING ) ){
+ pad = RSA_PKCS1_PADDING;
+ }
+
encrypted = AXIS2_MALLOC(env->allocator, RSA_size(key->pkey.rsa));
ret = RSA_public_encrypt(OXS_BUFFER_GET_SIZE(in, env),
OXS_BUFFER_GET_DATA(in, env),
encrypted,
key->pkey.rsa ,
- /*RSA_PKCS1_OAEP_PADDING);*/
- RSA_PKCS1_PADDING);
+ pad);
+/* RSA_PKCS1_PADDING);*/
if (ret < 0)
{
oxs_error(env, ERROR_LOCATION, OXS_ERROR_OPENSSL_FUNC_FAILED,
@@ -169,6 +179,7 @@
openssl_rsa_t *rsa,
const axis2_env_t *env,
const openssl_pkey_t *pkey,
+ const axis2_char_t *padding,
oxs_buffer_t *in,
oxs_buffer_t *out)
{
@@ -176,18 +187,26 @@
openssl_rsa_impl_t *rsa_impl = NULL;
int ret;
EVP_PKEY *key = NULL;
+ int pad = RSA_PKCS1_PADDING;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
rsa_impl = AXIS2_INTF_TO_IMPL(rsa);
key = (EVP_PKEY *)OPENSSL_PKEY_GET_KEY(pkey, env);
+
+ if(0 == AXIS2_STRCMP(padding, OPENSSL_RSA_PKCS1_OAEP_PADDING ) ){
+ pad = RSA_PKCS1_OAEP_PADDING;
+ }else if(0 == AXIS2_STRCMP(padding, OPENSSL_RSA_PKCS1_PADDING ) ){
+ pad = RSA_PKCS1_PADDING;
+ }
+
decrypted = AXIS2_MALLOC(env->allocator, RSA_size(key->pkey.rsa));
ret = RSA_private_decrypt(RSA_size(key->pkey.rsa),
OXS_BUFFER_GET_DATA(in, env),
decrypted,
key->pkey.rsa,
- /*RSA_PKCS1_OAEP_PADDING);*/
- RSA_PKCS1_PADDING);
+ pad);
+ /* RSA_PKCS1_PADDING);*/
if (ret < 0)
{
oxs_error(env, ERROR_LOCATION, OXS_ERROR_OPENSSL_FUNC_FAILED,
Modified: webservices/axis2/trunk/c/rampart/src/util/rampart_action.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/rampart/src/util/rampart_action.c?view=diff&rev=494775&r1=494774&r2=494775
==============================================================================
--- webservices/axis2/trunk/c/rampart/src/util/rampart_action.c (original)
+++ webservices/axis2/trunk/c/rampart/src/util/rampart_action.c Wed Jan 10 01:31:25 2007
@@ -46,7 +46,7 @@
axis2_char_t *signature_parts ;
axis2_char_t *encryption_parts ;
axis2_char_t *time_to_live ;
-
+ axis2_char_t *key_buf ;
}
rampart_actions_impl_t;
@@ -150,6 +150,12 @@
const axis2_env_t *env
);
+static axis2_char_t *AXIS2_CALL
+rampart_actions_get_key_buf(
+ rampart_actions_t *actions,
+ const axis2_env_t *env
+);
+
static axis2_status_t AXIS2_CALL
rampart_actions_set_encryption_user(
rampart_actions_t *actions,
@@ -257,6 +263,13 @@
);
static axis2_status_t AXIS2_CALL
+rampart_actions_set_key_buf(
+ rampart_actions_t *actions,
+ const axis2_env_t *env,
+ axis2_char_t *key_buf
+);
+
+static axis2_status_t AXIS2_CALL
rampart_actions_reset(
rampart_actions_t *actions,
const axis2_env_t *env
@@ -311,6 +324,7 @@
actions_impl->signature_parts = NULL;
actions_impl->encryption_parts = NULL;
actions_impl->time_to_live = NULL;
+ actions_impl->key_buf = NULL;
actions_impl->actions.ops = AXIS2_MALLOC(env->allocator, sizeof(rampart_actions_ops_t));
if (!actions_impl->actions.ops)
@@ -521,6 +535,19 @@
return actions_impl->time_to_live ;
}
+static axis2_char_t *AXIS2_CALL
+rampart_actions_get_key_buf(
+ rampart_actions_t *actions,
+ const axis2_env_t *env
+)
+{
+ rampart_actions_impl_t * actions_impl = NULL;
+ AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+ actions_impl = AXIS2_INTF_TO_IMPL(actions);
+
+ return actions_impl->key_buf ;
+}
+
static axis2_status_t AXIS2_CALL
rampart_actions_set_encryption_user(
@@ -893,6 +920,31 @@
}
static axis2_status_t AXIS2_CALL
+rampart_actions_set_key_buf(
+ rampart_actions_t *actions,
+ const axis2_env_t *env,
+ axis2_char_t *key_buf
+)
+{
+ rampart_actions_impl_t * actions_impl = NULL;
+ AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+ AXIS2_PARAM_CHECK(env->error, key_buf, AXIS2_FAILURE);
+
+ actions_impl = AXIS2_INTF_TO_IMPL(actions);
+ if (actions_impl->key_buf)
+ {
+ AXIS2_FREE(env->allocator, actions_impl->key_buf);
+ actions_impl->key_buf = NULL;
+ }
+ actions_impl->key_buf = AXIS2_STRDUP(key_buf, env) ;
+ if(!actions_impl->key_buf ){
+ return AXIS2_FAILURE;
+ }
+
+ return AXIS2_SUCCESS;
+}
+
+static axis2_status_t AXIS2_CALL
rampart_actions_reset(rampart_actions_t * actions, const axis2_env_t *env)
{
rampart_actions_impl_t * actions_impl = NULL;
@@ -1015,6 +1067,12 @@
actions_impl->time_to_live = NULL;
}
+ if (actions_impl->key_buf)
+ {
+ AXIS2_FREE(env->allocator, actions_impl->key_buf);
+ actions_impl->key_buf = NULL;
+ }
+
AXIS2_FREE(env->allocator, actions_impl);
actions_impl = NULL;
@@ -1147,6 +1205,13 @@
env, param_action, RAMPART_ACTION_TIME_TO_LIVE));
}
+ if (rampart_get_action_params(env, param_action, RAMPART_ACTION_KEY_BUF))
+ {
+ ret = RAMPART_ACTIONS_SET_KEY_BUF(actions, env,
+ (axis2_char_t *)rampart_get_action_params(
+ env, param_action, RAMPART_ACTION_KEY_BUF));
+ }
+
return AXIS2_SUCCESS;
}
@@ -1312,6 +1377,8 @@
actions->ops->set_encryption_parts = rampart_actions_set_encryption_parts;
actions->ops->get_time_to_live = rampart_actions_get_time_to_live;
actions->ops->set_time_to_live = rampart_actions_set_time_to_live;
+ actions->ops->get_key_buf = rampart_actions_get_key_buf;
+ actions->ops->set_key_buf = rampart_actions_set_key_buf;
actions->ops->reset = rampart_actions_reset;
actions->ops->free = rampart_actions_free;
Modified: webservices/axis2/trunk/c/rampart/src/util/rampart_encryption.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/rampart/src/util/rampart_encryption.c?view=diff&rev=494775&r1=494774&r2=494775
==============================================================================
--- webservices/axis2/trunk/c/rampart/src/util/rampart_encryption.c (original)
+++ webservices/axis2/trunk/c/rampart/src/util/rampart_encryption.c Wed Jan 10 01:31:25 2007
@@ -183,6 +183,8 @@
asym_ctx = oxs_asym_ctx_create(env);
oxs_asym_ctx_set_algorithm(asym_ctx, env, enc_asym_algo);
oxs_asym_ctx_set_file_name(asym_ctx, env, certificate_file);
+
+ oxs_asym_ctx_set_pem_buf(asym_ctx, env, RAMPART_ACTIONS_GET_KEY_BUF(actions, env));
oxs_asym_ctx_set_password(asym_ctx, env, password);
oxs_asym_ctx_set_operation(asym_ctx, env, OXS_ASYM_CTX_OPERATION_PUB_ENCRYPT);
oxs_asym_ctx_set_st_ref_pattern(asym_ctx, env, eki);
Modified: webservices/axis2/trunk/c/rampart/src/util/rampart_sec_header_processor.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/rampart/src/util/rampart_sec_header_processor.c?view=diff&rev=494775&r1=494774&r2=494775
==============================================================================
--- webservices/axis2/trunk/c/rampart/src/util/rampart_sec_header_processor.c (original)
+++ webservices/axis2/trunk/c/rampart/src/util/rampart_sec_header_processor.c Wed Jan 10 01:31:25 2007
@@ -108,6 +108,7 @@
axiom_node_t *encrypted_key_node)
{
axiom_node_t *ref_list_node = NULL;
+ axiom_node_t *enc_mtd_node = NULL;
axis2_array_list_t *reference_list = NULL;
axis2_char_t *enc_asym_algo = NULL;
axis2_char_t *dec_key_file = NULL;
@@ -127,17 +128,20 @@
}
AXIS2_LOG_INFO(env->log, "[rampart][shp] Reference List has %d node reference(s)", AXIS2_ARRAY_LIST_SIZE(reference_list, env));
+ /*Get the algorithm to decrypt the sesison key*/
+ enc_mtd_node = oxs_axiom_get_first_child_node_by_name(env, encrypted_key_node, OXS_NODE_ENCRYPTION_METHOD, NULL, NULL);
+ enc_asym_algo = oxs_token_get_encryption_method(env, enc_mtd_node);
/*If the reference list > 0 then We have nodes to decrypt. Next step is to get the encrypted key*/
/*Obtain the session key which is encrypted*/
/*Create an asym_ctx*/
asym_ctx = oxs_asym_ctx_create(env);
- /*Set default values. Might be useful if there are no data available to identify those*/
- enc_asym_algo = RAMPART_ACTIONS_GET_ENC_KT_ALGO(actions, env);
dec_key_file = RAMPART_ACTIONS_GET_DEC_KEY_FILE(actions, env);
/*Get the password to retrieve the key from key store*/
password = rampart_callback_encuser_password(env, actions, msg_ctx);
oxs_asym_ctx_set_algorithm(asym_ctx, env, enc_asym_algo);
oxs_asym_ctx_set_file_name(asym_ctx, env, dec_key_file);
+
+ oxs_asym_ctx_set_pem_buf(asym_ctx, env, RAMPART_ACTIONS_GET_KEY_BUF(actions, env));
oxs_asym_ctx_set_operation(asym_ctx, env, OXS_ASYM_CTX_OPERATION_PRV_DECRYPT);
oxs_asym_ctx_set_password(asym_ctx, env, password);
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org