summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Dauvergne <bdauvergne@entrouvert.com>2010-07-16 19:34:24 +0000
committerBenjamin Dauvergne <bdauvergne@entrouvert.com>2010-07-16 19:34:24 +0000
commit21ca128532e76be7461d049d8913a17f75f971eb (patch)
tree069a54f5d66870814b0d75683002a53a90e9fd75
parentf8ce6b25e5aab36a82017a6dfd4229cbeabbc5dc (diff)
downloadlasso-21ca128532e76be7461d049d8913a17f75f971eb.tar.gz
lasso-21ca128532e76be7461d049d8913a17f75f971eb.tar.xz
lasso-21ca128532e76be7461d049d8913a17f75f971eb.zip
[Core] add password parameter to lasso_sign_node
-rw-r--r--lasso/xml/private.h3
-rw-r--r--lasso/xml/saml-2.0/saml2_assertion.c4
-rw-r--r--lasso/xml/tools.c17
3 files changed, 16 insertions, 8 deletions
diff --git a/lasso/xml/private.h b/lasso/xml/private.h
index a9220307..a2262f38 100644
--- a/lasso/xml/private.h
+++ b/lasso/xml/private.h
@@ -138,7 +138,8 @@ char* lasso_sha1(const char *str);
char** urlencoded_to_strings(const char *str);
int lasso_sign_node(xmlNode *xmlnode, const char *id_attr_name, const char *id_value,
- const char *private_key_file, const char *certificate_file);
+ const char *private_key_file, const char *private_key_password,
+ const char *certificate_file);
int lasso_verify_signature(xmlNode *signed_node, xmlDoc *doc, const char *id_attr_name,
xmlSecKeysMngr *keys_manager, xmlSecKey *public_key,
diff --git a/lasso/xml/saml-2.0/saml2_assertion.c b/lasso/xml/saml-2.0/saml2_assertion.c
index b3e728f3..aa0dfbb3 100644
--- a/lasso/xml/saml-2.0/saml2_assertion.c
+++ b/lasso/xml/saml-2.0/saml2_assertion.c
@@ -113,8 +113,6 @@ static struct XmlSnippet schema_snippets[] = {
static LassoNodeClass *parent_class = NULL;
-
-
static xmlNode*
get_xmlNode(LassoNode *node, gboolean lasso_dump)
{
@@ -162,7 +160,7 @@ class_init(LassoSaml2AssertionClass *klass)
nclass->get_xmlNode = get_xmlNode;
nclass->node_data = g_new0(LassoNodeClassData, 1);
lasso_node_class_set_nodename(nclass, "Assertion");
- lasso_node_class_set_ns(nclass, LASSO_SAML2_ASSERTION_HREF, LASSO_SAML2_ASSERTION_PREFIX);
+ lasso_node_class_set_ns(nclass,LASSO_SAML2_ASSERTION_HREF, LASSO_SAML2_ASSERTION_PREFIX);
lasso_node_class_add_snippets(nclass, schema_snippets);
nclass->node_data->id_attribute_name = "ID";
diff --git a/lasso/xml/tools.c b/lasso/xml/tools.c
index dae8a9f4..08a35963 100644
--- a/lasso/xml/tools.c
+++ b/lasso/xml/tools.c
@@ -943,6 +943,9 @@ urlencoded_to_strings(const char *str)
return result;
}
+void _lasso_xmlsec_password_callback() {
+}
+
/**
* lasso_sign_node:
* @xmlnode: the xmlnode to sign
@@ -960,12 +963,14 @@ urlencoded_to_strings(const char *str)
*/
int
lasso_sign_node(xmlNode *xmlnode, const char *id_attr_name, const char *id_value,
- const char *private_key_file, const char *certificate_file)
+ const char *private_key_file, const char *private_key_password,
+ const char *certificate_file)
{
xmlDoc *doc;
xmlNode *sign_tmpl, *old_parent;
xmlSecDSigCtx *dsig_ctx;
xmlAttr *id_attr = NULL;
+ void *password_callback = NULL;
if (private_key_file == NULL || xmlnode == NULL)
return LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ;
@@ -985,14 +990,18 @@ lasso_sign_node(xmlNode *xmlnode, const char *id_attr_name, const char *id_value
}
dsig_ctx = xmlSecDSigCtxCreate(NULL);
+ if (! private_key_password) {
+ password_callback = _lasso_openssl_pwd_callback;
+ }
if (access(private_key_file, R_OK) == 0) {
dsig_ctx->signKey = xmlSecCryptoAppKeyLoad(private_key_file,
- xmlSecKeyDataFormatPem,
- NULL, NULL, NULL);
+ xmlSecKeyDataFormatPem, private_key_password,
+ password_callback, NULL /* password_callback_ctx */);
} else {
int len = private_key_file ? strlen(private_key_file) : 0;
dsig_ctx->signKey = xmlSecCryptoAppKeyLoadMemory((xmlSecByte*)private_key_file, len,
- xmlSecKeyDataFormatPem, NULL, NULL, NULL);
+ xmlSecKeyDataFormatPem, private_key_password,
+ password_callback, NULL /* password_callback_ctx */);
}
if (dsig_ctx->signKey == NULL) {
xmlSecDSigCtxDestroy(dsig_ctx);