summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorValery Febvre <vfebvre at easter-eggs.com>2004-04-28 15:52:14 +0000
committerValery Febvre <vfebvre at easter-eggs.com>2004-04-28 15:52:14 +0000
commit158a8769ad497d35d8e6805d2328e4dbf0ee6785 (patch)
tree483088612d2be73404e70678fbed30bb3804fde1
parentceaf16d41334ab3bea6fbb9aadcbe4b5495bc9ce (diff)
lasso_str_verify() renamed -> lasso_query_verify_signature()
-rw-r--r--lasso/xml/tools.c155
-rw-r--r--lasso/xml/tools.h45
2 files changed, 109 insertions, 91 deletions
diff --git a/lasso/xml/tools.c b/lasso/xml/tools.c
index c4279707..49ff3bee 100644
--- a/lasso/xml/tools.c
+++ b/lasso/xml/tools.c
@@ -158,6 +158,77 @@ lasso_query_to_dict(const xmlChar *query)
return (gd);
}
+int
+lasso_query_verify_signature(xmlChar *str,
+ const xmlChar *sender_public_key_file,
+ const xmlChar *recipient_private_key_file)
+{
+ xmlDocPtr doc;
+ xmlNodePtr sigNode, sigValNode;
+ xmlSecDSigCtxPtr dsigCtx;
+ gchar **str_split;
+ gint ret = -1;
+
+ /* split query, signatureValue */
+ str_split = g_strsplit((const gchar *)str, "&Signature=", 0);
+ /* re-create doc to verify (signed + enrypted) */
+ doc = lasso_str_sign(str_split[0],
+ xmlSecTransformRsaSha1Id,
+ recipient_private_key_file);
+ sigValNode = xmlSecFindNode(xmlDocGetRootElement(doc),
+ xmlSecNodeSignatureValue,
+ xmlSecDSigNs);
+ /* set SignatureValue content */
+ xmlNodeSetContent(sigValNode, lasso_str_unescape(str_split[1]));
+
+ g_strfreev(str_split);
+ //xmlDocDump(stdout, doc);
+
+ /* find start node */
+ sigNode = xmlSecFindNode(xmlDocGetRootElement(doc), xmlSecNodeSignature, xmlSecDSigNs);
+
+ /* create signature context */
+ dsigCtx = xmlSecDSigCtxCreate(NULL);
+ if(dsigCtx == NULL) {
+ fprintf(stderr,"Error: failed to create signature context\n");
+ goto done;
+ }
+
+ /* load public key */
+ dsigCtx->signKey = xmlSecCryptoAppKeyLoad(sender_public_key_file, xmlSecKeyDataFormatPem, NULL, NULL, NULL);
+ if(dsigCtx->signKey == NULL) {
+ fprintf(stderr,"Error: failed to load public pem key from \"%s\"\n", sender_public_key_file);
+ goto done;
+ }
+
+ /* Verify signature */
+ if(xmlSecDSigCtxVerify(dsigCtx, sigNode) < 0) {
+ fprintf(stderr,"Error: signature verify\n");
+ goto done;
+ }
+
+ /* print verification result to stdout and return */
+ if(dsigCtx->status == xmlSecDSigStatusSucceeded) {
+ fprintf(stdout, "Signature is OK\n");
+ ret = 1;
+ }
+ else {
+ fprintf(stdout, "Signature is INVALID\n");
+ ret = 0;
+ }
+
+ done:
+ /* cleanup */
+ if(dsigCtx != NULL) {
+ xmlSecDSigCtxDestroy(dsigCtx);
+ }
+
+ if(doc != NULL) {
+ xmlFreeDoc(doc);
+ }
+ return (ret);
+}
+
xmlChar *
lasso_str_escape(xmlChar *str)
{
@@ -168,8 +239,10 @@ lasso_str_escape(xmlChar *str)
xmlDocPtr
lasso_str_sign(xmlChar *str,
xmlSecTransformId signMethodId,
- const char* key_file)
+ const char* private_key_file)
{
+ /* FIXME : renamed fct into lasso_query_add_signature
+ SHOULD returned a query (xmlChar) instead of xmlDoc */
xmlDocPtr doc = xmlNewDoc("1.0");
xmlNodePtr envelope = xmlNewNode(NULL, "Envelope");
xmlNodePtr cdata, data = xmlNewNode(NULL, "Data");
@@ -205,7 +278,8 @@ lasso_str_sign(xmlChar *str,
}
/* add enveloped transform */
- if (xmlSecTmplReferenceAddTransform(refNode, xmlSecTransformEnvelopedId) == NULL) {
+ if (xmlSecTmplReferenceAddTransform(refNode,
+ xmlSecTransformEnvelopedId) == NULL) {
fprintf(stderr, "Error: failed to add enveloped transform to reference\n");
goto done;
}
@@ -231,10 +305,12 @@ lasso_str_sign(xmlChar *str,
}
/* load private key */
- dsigCtx->signKey = xmlSecCryptoAppKeyLoad(key_file, xmlSecKeyDataFormatPem,
+ dsigCtx->signKey = xmlSecCryptoAppKeyLoad(private_key_file,
+ xmlSecKeyDataFormatPem,
NULL, NULL, NULL);
if (dsigCtx->signKey == NULL) {
- fprintf(stderr,"Error: failed to load private pem key from \"%s\"\n", key_file);
+ fprintf(stderr,"Error: failed to load private pem key from \"%s\"\n",
+ private_key_file);
goto done;
}
@@ -270,74 +346,3 @@ lasso_str_unescape(xmlChar *str)
xmlURIUnescapeString((const char *)str, 0, ret);
return (ret);
}
-
-int
-lasso_str_verify(xmlChar *str,
- const xmlChar *sender_public_key_file,
- const xmlChar *recipient_private_key_file)
-{
- xmlDocPtr doc;
- xmlNodePtr sigNode, sigValNode;
- xmlSecDSigCtxPtr dsigCtx;
- gchar **str_split;
- gint ret = -1;
-
- /* split query, signatureValue */
- str_split = g_strsplit((const gchar *)str, "&Signature=", 0);
- /* re-create doc to verify (signed + enrypted) */
- doc = lasso_str_sign(str_split[0],
- xmlSecTransformRsaSha1Id,
- recipient_private_key_file);
- sigValNode = xmlSecFindNode(xmlDocGetRootElement(doc),
- xmlSecNodeSignatureValue,
- xmlSecDSigNs);
- /* set SignatureValue content */
- xmlNodeSetContent(sigValNode, lasso_str_unescape(str_split[1]));
-
- g_strfreev(str_split);
- //xmlDocDump(stdout, doc);
-
- /* find start node */
- sigNode = xmlSecFindNode(xmlDocGetRootElement(doc), xmlSecNodeSignature, xmlSecDSigNs);
-
- /* create signature context */
- dsigCtx = xmlSecDSigCtxCreate(NULL);
- if(dsigCtx == NULL) {
- fprintf(stderr,"Error: failed to create signature context\n");
- goto done;
- }
-
- /* load public key */
- dsigCtx->signKey = xmlSecCryptoAppKeyLoad(sender_public_key_file, xmlSecKeyDataFormatPem, NULL, NULL, NULL);
- if(dsigCtx->signKey == NULL) {
- fprintf(stderr,"Error: failed to load public pem key from \"%s\"\n", sender_public_key_file);
- goto done;
- }
-
- /* Verify signature */
- if(xmlSecDSigCtxVerify(dsigCtx, sigNode) < 0) {
- fprintf(stderr,"Error: signature verify\n");
- goto done;
- }
-
- /* print verification result to stdout and return */
- if(dsigCtx->status == xmlSecDSigStatusSucceeded) {
- fprintf(stdout, "Signature is OK\n");
- ret = 1;
- }
- else {
- fprintf(stdout, "Signature is INVALID\n");
- ret = 0;
- }
-
- done:
- /* cleanup */
- if(dsigCtx != NULL) {
- xmlSecDSigCtxDestroy(dsigCtx);
- }
-
- if(doc != NULL) {
- xmlFreeDoc(doc);
- }
- return (ret);
-}
diff --git a/lasso/xml/tools.h b/lasso/xml/tools.h
index 05adf2c9..7a835e8d 100644
--- a/lasso/xml/tools.h
+++ b/lasso/xml/tools.h
@@ -22,34 +22,47 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+#ifndef __LASSO_TOOLS_H__
+#define __LASSO_TOOLS_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
#include <glib-object.h>
-#include <libxml/xpath.h>
+#include <libxml/tree.h>
#include <xmlsec/xmldsig.h>
#include <xmlsec/templates.h>
#include <xmlsec/crypto.h>
-xmlChar* lasso_build_unique_id (guint8 size);
+xmlChar* lasso_build_unique_id (guint8 size);
+
+xmlChar* lasso_doc_get_node_content (xmlDocPtr doc,
+ const xmlChar *name);
+
+xmlChar* lasso_g_ptr_array_index (GPtrArray *a,
+ guint i);
-xmlChar* lasso_doc_get_node_content (xmlDocPtr doc,
- const xmlChar *name);
+xmlChar* lasso_get_current_time (void);
-xmlChar* lasso_g_ptr_array_index (GPtrArray *a,
- guint i);
+GData* lasso_query_to_dict (const xmlChar *query);
-xmlChar* lasso_get_current_time (void);
+int lasso_query_verify_signature (xmlChar *str,
+ const xmlChar *sender_public_key_file,
+ const xmlChar *recipient_private_key_file);
-GData* lasso_query_to_dict (const xmlChar *query);
+xmlChar* lasso_str_escape (xmlChar *str);
-xmlChar* lasso_str_escape (xmlChar *str);
+xmlDocPtr lasso_str_sign (xmlChar *str,
+ xmlSecTransformId signMethodId,
+ const char *private_key_file);
-xmlDocPtr lasso_str_sign (xmlChar *str,
- xmlSecTransformId signMethodId,
- const char *key_file);
+xmlChar* lasso_str_unescape (xmlChar *str);
-xmlChar* lasso_str_unescape (xmlChar *str);
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
-int lasso_str_verify (xmlChar *str,
- const xmlChar *sender_public_key_file,
- const xmlChar *recipient_private_key_file);
+#endif /* __LASSO_TOOLS_H__ */