diff options
| author | Valery Febvre <vfebvre at easter-eggs.com> | 2004-04-28 15:52:14 +0000 |
|---|---|---|
| committer | Valery Febvre <vfebvre at easter-eggs.com> | 2004-04-28 15:52:14 +0000 |
| commit | 158a8769ad497d35d8e6805d2328e4dbf0ee6785 (patch) | |
| tree | 483088612d2be73404e70678fbed30bb3804fde1 | |
| parent | ceaf16d41334ab3bea6fbb9aadcbe4b5495bc9ce (diff) | |
lasso_str_verify() renamed -> lasso_query_verify_signature()
| -rw-r--r-- | lasso/xml/tools.c | 155 | ||||
| -rw-r--r-- | lasso/xml/tools.h | 45 |
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__ */ |
