[core] add a lasso_base64_decode function

This commit is contained in:
Benjamin Dauvergne 2011-12-02 18:29:53 +01:00
parent dfacafb3b0
commit 71721b370c
2 changed files with 34 additions and 0 deletions

View File

@ -270,6 +270,7 @@ void lasso_node_set_encryption(LassoNode *node, xmlSecKey *encryption_public_key
void lasso_node_get_encryption(LassoNode *node, xmlSecKey **encryption_public_key,
LassoEncryptionSymKeyType *encryption_sym_key_type);
gboolean lasso_base64_decode(const char *from, char **buffer, int *buffer_len);
#ifdef __cplusplus
}

View File

@ -1999,6 +1999,39 @@ _lasso_xmlsec_load_key_from_buffer(const char *buffer, size_t length, const char
return private_key;
}
/**
* lasso_base64_decode:
* @from: the source base64 encoded string
* @buffer: an output argument to place the resulting buffer pointer
* @buffer_len: an output argument to place the resulting buffer length
*
* Decode the given string as Base64 and allocate a buffer for the decoded content, place the
* pointer to the buffer in @buffer and the length in @buffer_len
*
* Return value: TRUE if successful, FALSE otherwise.
*/
gboolean
lasso_base64_decode(const char *from, char **buffer, int *buffer_len)
{
size_t len = strlen(from);
int ret;
/* base64 map 4 bytes to 3 */
len = len / 4 + (len % 4 ? 1 : 0);
len *= 3;
len += 1; /* zero byte */
*buffer = g_malloc0(len);
xmlSecErrorsDefaultCallbackEnableOutput(FALSE);
ret = xmlSecBase64Decode(BAD_CAST from, BAD_CAST *buffer, len);
xmlSecErrorsDefaultCallbackEnableOutput(TRUE);
if (ret <= 0) {
lasso_release_string(*buffer);
return FALSE;
}
*buffer_len = ret;
return TRUE;
}
/**
* lasso_xmlsec_load_private_key_from_buffer: