Author: kaushalye
Date: Thu Nov 1 06:21:58 2007
New Revision: 590995
URL: http://svn.apache.org/viewvc?rev=590995&view=rev
Log:
applying patch for
RAMPARTC-37:https://issues.apache.org/jira/secure/attachment/12368817/derivation3.patch
Modified:
webservices/rampart/trunk/c/src/omxmlsec/openssl/hmac.c
Modified: webservices/rampart/trunk/c/src/omxmlsec/openssl/hmac.c
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/omxmlsec/openssl/hmac.c?rev=590995&r1=590994&r2=590995&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/omxmlsec/openssl/hmac.c (original)
+++ webservices/rampart/trunk/c/src/omxmlsec/openssl/hmac.c Thu Nov 1 06:21:58
2007
@@ -83,6 +83,13 @@
unsigned char A1[EVP_MAX_MD_SIZE];
unsigned int A1_len;
+ /*
+ char a[5000];
+ printf("seed_len %d\n", seed_len);
+ axutil_base64_encode(a, (const char*)seed, seed_len);
+ printf("seed is %s\n", a);
+ */
+
if(!secret)
{
oxs_error(env, ERROR_LOCATION,
OXS_ERROR_KEY_DERIVATION_FAILED,"[oxs][openssl] No key to derive ");
@@ -151,6 +158,8 @@
unsigned char *output = NULL;
axis2_char_t *dk_id = NULL;
axis2_char_t *dk_name = NULL;
+ axis2_char_t *decoded_seed = NULL;
+ unsigned int decoded_seed_len = 0;
axis2_status_t status = AXIS2_FAILURE;
unsigned int length;
unsigned int offset;
@@ -179,28 +188,40 @@
if((!label) || (!axutil_strlen(label)))
{
- oxs_buffer_append(label_and_seed, env, (unsigned
char*)OPENSSL_DEFAULT_LABEL_FOR_PSHA1,
axutil_strlen(OPENSSL_DEFAULT_LABEL_FOR_PSHA1));
- oxs_key_set_label(derived_key, env,
OPENSSL_DEFAULT_LABEL_FOR_PSHA1);
+ label = axutil_stracat(env, OPENSSL_DEFAULT_LABEL_FOR_PSHA1,
OPENSSL_DEFAULT_LABEL_FOR_PSHA1);
+ oxs_key_set_label(derived_key, env, label);
+ oxs_buffer_append(label_and_seed, env, (unsigned char*)label,
axutil_strlen(label));
+ AXIS2_FREE(env->allocator, label);
+ label = NULL;
}
else
{
oxs_buffer_append(label_and_seed, env, (unsigned char*)label,
axutil_strlen(label));
}
+
- /*
- * if seed is not needed, can pass empty. if have to be created, then
pass NULL
- */
- if (!seed)
+ if ((!seed) || (!axutil_strlen(seed)))
{
seed = oxs_util_generate_nonce(env, 16);
oxs_key_set_nonce(derived_key, env, seed);
- oxs_buffer_append(label_and_seed, env, (unsigned char*)seed,
axutil_strlen(seed));
+ decoded_seed_len = axutil_base64_decode_len(seed);
+ decoded_seed = AXIS2_MALLOC(env->allocator, decoded_seed_len);
+ axutil_base64_decode(decoded_seed, seed);
AXIS2_FREE(env->allocator, seed);
seed = NULL;
}
else
{
- oxs_buffer_append(label_and_seed, env, (unsigned char*)seed,
axutil_strlen(seed));
+ decoded_seed_len = axutil_base64_decode_len(seed);
+ decoded_seed = AXIS2_MALLOC(env->allocator, decoded_seed_len);
+ axutil_base64_decode(decoded_seed, seed);
+ }
+
+ if(decoded_seed)
+ {
+ oxs_buffer_append(label_and_seed, env, (unsigned
char*)decoded_seed, decoded_seed_len);
+ AXIS2_FREE(env->allocator, decoded_seed);
+ decoded_seed = NULL;
}