summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorValery Febvre <vfebvre at easter-eggs.com>2004-05-09 00:06:43 +0000
committerValery Febvre <vfebvre at easter-eggs.com>2004-05-09 00:06:43 +0000
commit5eeb378d17e33896536d5dc32283cd3e15dc7f2c (patch)
tree636dec12c1b5db12431f5a4de2ece6b6c9a57b8f
parent2223cf187c36ed3053a35411147a61a5030c9da0 (diff)
downloadlasso-5eeb378d17e33896536d5dc32283cd3e15dc7f2c.tar.gz
lasso-5eeb378d17e33896536d5dc32283cd3e15dc7f2c.tar.xz
lasso-5eeb378d17e33896536d5dc32283cd3e15dc7f2c.zip
Bugfix in lasso_node_verify_signature() method
New method lasso_node_add_signature() added
-rw-r--r--lasso/xml/xml.c63
-rw-r--r--lasso/xml/xml.h10
2 files changed, 58 insertions, 15 deletions
diff --git a/lasso/xml/xml.c b/lasso/xml/xml.c
index 55b6f735..af9906bf 100644
--- a/lasso/xml/xml.c
+++ b/lasso/xml/xml.c
@@ -184,7 +184,7 @@ lasso_node_soap_envelop(LassoNode *node)
gchar *
lasso_node_url_encode(LassoNode *node,
- guint sign_method,
+ gint sign_method,
const gchar *private_key_file)
{
g_return_val_if_fail (LASSO_IS_NODE(node), NULL);
@@ -218,6 +218,18 @@ lasso_node_add_child(LassoNode *node,
class->add_child(node, child, unbounded);
}
+static void
+lasso_node_add_signature(LassoNode *node,
+ gint sign_method,
+ const xmlChar *private_key_file,
+ const xmlChar *certificate_file)
+{
+ g_return_if_fail(LASSO_IS_NODE(node));
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->add_signature(node, sign_method, private_key_file, certificate_file);
+}
+
static xmlNodePtr
lasso_node_get_xmlNode(LassoNode *node)
{
@@ -680,7 +692,7 @@ lasso_node_impl_soap_envelop(LassoNode *node)
static gchar *
lasso_node_impl_url_encode(LassoNode *node,
- guint sign_method,
+ gint sign_method,
const gchar *private_key_file)
{
GString *url;
@@ -727,6 +739,7 @@ static gint
lasso_node_impl_verify_signature(LassoNode *node,
const gchar *certificate_file)
{
+ xmlDocPtr doc = xmlNewDoc("1.0");
xmlNodePtr signature;
xmlSecKeysMngrPtr mngr;
xmlSecDSigCtxPtr dsigCtx;
@@ -735,9 +748,13 @@ lasso_node_impl_verify_signature(LassoNode *node,
g_return_val_if_fail (LASSO_IS_NODE(node), -1);
g_return_val_if_fail (certificate_file != NULL, -1);
+ /* we must associate the xmlNode with an xmlDoc !!! */
+ xmlAddChild((xmlNodePtr)doc,
+ LASSO_NODE_GET_CLASS(node)->get_xmlNode(LASSO_NODE(node)));
+
/* find start node */
- signature = xmlSecFindNode(node->private->node, xmlSecNodeSignature,
- xmlSecDSigNs);
+ signature = xmlSecFindNode(node->private->node, xmlSecNodeSignature,
+ xmlSecDSigNs);
if (signature == NULL) {
fprintf(stderr, "Error: start node not found\n");
goto done;
@@ -823,6 +840,27 @@ lasso_node_impl_add_child(LassoNode *node,
}
}
+static void
+lasso_node_impl_add_signature(LassoNode *node,
+ gint sign_method,
+ const xmlChar *private_key_file,
+ const xmlChar *certificate_file)
+{
+ xmlDocPtr doc;
+ LassoNode *signature;
+
+ /* FIXME : destroy doc after */
+ doc = xmlNewDoc("1.0"); // <---
+ xmlAddChild((xmlNodePtr)doc, node->private->node);
+
+ /* FIXME : use sign_method */
+ signature = lasso_ds_signature_new(doc, xmlSecTransformRsaSha1Id);
+ lasso_node_add_child(node, signature, 0);
+ lasso_ds_signature_sign(LASSO_DS_SIGNATURE(signature),
+ private_key_file,
+ certificate_file);
+}
+
static xmlNodePtr
lasso_node_impl_get_xmlNode(LassoNode *node)
{
@@ -979,13 +1017,14 @@ lasso_node_class_init(LassoNodeClass *class)
class->url_encode = lasso_node_impl_url_encode;
class->verify_signature = lasso_node_impl_verify_signature;
/* virtual private methods */
- class->add_child = lasso_node_impl_add_child;
- class->get_xmlNode = lasso_node_impl_get_xmlNode;
- class->new_child = lasso_node_impl_new_child;
- class->set_name = lasso_node_impl_set_name;
- class->set_ns = lasso_node_impl_set_ns;
- class->set_prop = lasso_node_impl_set_prop;
- class->set_xmlNode = lasso_node_impl_set_xmlNode;
+ class->add_child = lasso_node_impl_add_child;
+ class->add_signature = lasso_node_impl_add_signature;
+ class->get_xmlNode = lasso_node_impl_get_xmlNode;
+ class->new_child = lasso_node_impl_new_child;
+ class->set_name = lasso_node_impl_set_name;
+ class->set_ns = lasso_node_impl_set_ns;
+ class->set_prop = lasso_node_impl_set_prop;
+ class->set_xmlNode = lasso_node_impl_set_xmlNode;
/* override parent class methods */
gobject_class->dispose = (void *)lasso_node_dispose;
gobject_class->finalize = (void *)lasso_node_finalize;
@@ -1034,7 +1073,7 @@ lasso_node_new_from_dump(xmlChar *buffer)
root = xmlCopyNode(xmlDocGetRootElement(doc), 1);
lasso_node_set_xmlNode(node, root);
/* free doc */
- xmlFreeDoc(doc);
+ //xmlFreeDoc(doc);
return (node);
}
diff --git a/lasso/xml/xml.h b/lasso/xml/xml.h
index f232a397..3df753c2 100644
--- a/lasso/xml/xml.h
+++ b/lasso/xml/xml.h
@@ -83,7 +83,7 @@ struct _LassoNodeClass {
GData* (* serialize) (LassoNode *,
GData *);
gchar* (* url_encode) (LassoNode *node,
- guint sign_method,
+ gint sign_method,
const gchar *private_key_file);
gchar* (* soap_envelop) (LassoNode *node);
gint (* verify_signature) (LassoNode *node,
@@ -92,6 +92,10 @@ struct _LassoNodeClass {
void (* add_child) (LassoNode *,
LassoNode *,
gboolean);
+ void (*add_signature) (LassoNode *node,
+ gint sign_method,
+ const xmlChar *private_key_file,
+ const xmlChar *certificate_file);
xmlNodePtr (* get_xmlNode) (LassoNode *);
void (* new_child) (LassoNode *,
const xmlChar *,
@@ -157,8 +161,8 @@ LASSO_EXPORT GData* lasso_node_serialize (LassoNode *node,
LASSO_EXPORT gchar* lasso_node_soap_envelop (LassoNode *node);
-LASSO_EXPORT gchar* lasso_node_url_encode (LassoNode *node,
- guint sign_method,
+LASSO_EXPORT gchar* lasso_node_url_encode (LassoNode *node,
+ gint sign_method,
const gchar *private_key_file);
LASSO_EXPORT gint lasso_node_verify_signature (LassoNode *node,