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