diff options
| author | Valery Febvre <vfebvre at easter-eggs.com> | 2004-05-09 00:06:43 +0000 |
|---|---|---|
| committer | Valery Febvre <vfebvre at easter-eggs.com> | 2004-05-09 00:06:43 +0000 |
| commit | 5eeb378d17e33896536d5dc32283cd3e15dc7f2c (patch) | |
| tree | 636dec12c1b5db12431f5a4de2ece6b6c9a57b8f | |
| parent | 2223cf187c36ed3053a35411147a61a5030c9da0 (diff) | |
| download | lasso-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.c | 63 | ||||
| -rw-r--r-- | lasso/xml/xml.h | 10 |
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, |
