~ubuntu-branches/ubuntu/dapper/lasso/dapper

« back to all changes in this revision

Viewing changes to lasso/xml/tools.c

  • Committer: Bazaar Package Importer
  • Author(s): Loic Pefferkorn
  • Date: 2005-11-25 19:20:59 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20051125192059-m4894lhpynmkrmwr
Tags: 0.6.3-4ubuntu1
Resynchronise with Debian.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* $Id: tools.c,v 1.75 2005/05/02 20:05:23 fpeters Exp $ 
 
1
/* $Id: tools.c,v 1.76 2005/07/07 19:42:56 fpeters Exp $ 
2
2
 *
3
3
 * Lasso - A free implementation of the Liberty Alliance specifications.
4
4
 *
291
291
        return keys_mngr;
292
292
}
293
293
 
294
 
/**
 
294
/*
295
295
 * lasso_query_sign:
296
296
 * @query: a query (an url-encoded node)
297
297
 * @sign_method: the Signature transform method
301
301
 * 
302
302
 * Return value: a newly allocated query signed or NULL if an error occurs.
303
303
 **/
304
 
xmlChar*
305
 
lasso_query_sign(xmlChar *query, LassoSignatureMethod sign_method, const char *private_key_file)
 
304
char*
 
305
lasso_query_sign(char *query, LassoSignatureMethod sign_method, const char *private_key_file)
306
306
{
307
307
        BIO *bio = NULL;
308
 
        xmlChar *digest = NULL; /* 160 bit buffer */
 
308
        char *digest = NULL; /* 160 bit buffer */
309
309
        RSA *rsa = NULL;
310
310
        DSA *dsa = NULL;
311
311
        unsigned char *sigret = NULL;
312
312
        unsigned int siglen;
313
 
        xmlChar *b64_sigret = NULL, *e_b64_sigret = NULL;
314
 
        xmlChar *new_query = NULL, *s_new_query = NULL;
 
313
        char *b64_sigret = NULL, *e_b64_sigret = NULL;
 
314
        char *new_query = NULL, *s_new_query = NULL;
315
315
        int status = 0;
316
316
        char *t;
317
317
 
330
330
        /* add SigAlg */
331
331
        switch (sign_method) {
332
332
                case LASSO_SIGNATURE_METHOD_RSA_SHA1:
333
 
                        t = xmlURIEscapeStr(xmlSecHrefRsaSha1, NULL);
 
333
                        t = (char*)xmlURIEscapeStr(xmlSecHrefRsaSha1, NULL);
334
334
                        new_query = g_strdup_printf("%s&SigAlg=%s", query, t);
335
335
                        xmlFree(t);
336
336
                        break;
337
337
                case LASSO_SIGNATURE_METHOD_DSA_SHA1:
338
 
                        t = xmlURIEscapeStr(xmlSecHrefDsaSha1, NULL);
 
338
                        t = (char*)xmlURIEscapeStr(xmlSecHrefDsaSha1, NULL);
339
339
                        new_query = g_strdup_printf("%s&SigAlg=%s", query, t);
340
340
                        xmlFree(t);
341
341
                        break;
358
358
                /* alloc memory for sigret */
359
359
                sigret = (unsigned char *)g_malloc (RSA_size(rsa));
360
360
                /* sign digest message */
361
 
                status = RSA_sign(NID_sha1, digest, 20, sigret, &siglen, rsa);
 
361
                status = RSA_sign(NID_sha1, (unsigned char*)digest, 20, sigret, &siglen, rsa);
362
362
                RSA_free(rsa);
363
363
        }
364
364
        else if (sign_method == LASSO_SIGNATURE_METHOD_DSA_SHA1) {
367
367
                        goto done;
368
368
                }
369
369
                sigret = (unsigned char *)g_malloc (DSA_size(dsa));
370
 
                status = DSA_sign(NID_sha1, digest, 20, sigret, &siglen, dsa);
 
370
                status = DSA_sign(NID_sha1, (unsigned char*)digest, 20, sigret, &siglen, dsa);
371
371
                DSA_free(dsa);
372
372
        }
373
373
        if (status == 0) {
375
375
        }
376
376
 
377
377
        /* Base64 encode the signature value */
378
 
        b64_sigret = xmlSecBase64Encode(sigret, siglen, 0);
 
378
        b64_sigret = (char*)xmlSecBase64Encode(sigret, siglen, 0);
379
379
        /* escape b64_sigret */
380
 
        e_b64_sigret = xmlURIEscapeStr(b64_sigret, NULL);
 
380
        e_b64_sigret = (char*)xmlURIEscapeStr((xmlChar*)b64_sigret, NULL);
381
381
 
382
382
        /* add signature */
383
383
        switch (sign_method) {
417
417
        RSA *rsa = NULL;
418
418
        DSA *dsa = NULL;
419
419
        gchar **str_split = NULL;
420
 
        xmlChar *digest = NULL, *b64_signature = NULL;
 
420
        char *digest = NULL, *b64_signature = NULL;
421
421
        xmlSecByte *signature = NULL;
422
422
        int key_size, status = 0, ret = 0;
423
423
        char *sig_alg, *usig_alg = NULL;
449
449
        sig_alg = strchr(sig_alg, '=')+1;
450
450
 
451
451
        usig_alg = xmlURIUnescapeString(sig_alg, 0, NULL);
452
 
        if (strcmp(usig_alg, xmlSecHrefRsaSha1) == 0) {
 
452
        if (strcmp(usig_alg, (char*)xmlSecHrefRsaSha1) == 0) {
453
453
                if (sender_public_key->value->id != xmlSecOpenSSLKeyDataRsaId) {
454
454
                        ret = critical_error(LASSO_DS_ERROR_PUBLIC_KEY_LOAD_FAILED);
455
455
                        goto done;
460
460
                        goto done;
461
461
                }
462
462
                key_size = RSA_size(rsa);
463
 
        } else if (strcmp(usig_alg, xmlSecHrefDsaSha1) == 0) {
 
463
        } else if (strcmp(usig_alg, (char*)xmlSecHrefDsaSha1) == 0) {
464
464
                if (sender_public_key->value->id != xmlSecOpenSSLKeyDataDsaId) {
465
465
                        ret = critical_error(LASSO_DS_ERROR_PUBLIC_KEY_LOAD_FAILED);
466
466
                        goto done;
483
483
 
484
484
        /* get signature (unescape + base64 decode) */
485
485
        signature = xmlMalloc(key_size+1);
486
 
        b64_signature = xmlURIUnescapeString(str_split[1], 0, NULL);
487
 
        xmlSecBase64Decode(b64_signature, signature, key_size+1);
 
486
        b64_signature = (char*)xmlURIUnescapeString(str_split[1], 0, NULL);
 
487
        xmlSecBase64Decode((xmlChar*)b64_signature, signature, key_size+1);
488
488
 
489
489
        /* compute signature digest */
490
490
        digest = lasso_sha1(str_split[0]);
494
494
        }
495
495
 
496
496
        if (rsa) {
497
 
                status = RSA_verify(NID_sha1, digest, 20, signature, key_size, rsa);
 
497
                status = RSA_verify(NID_sha1, (unsigned char*)digest, 20, signature, key_size, rsa);
498
498
        } else if (dsa) {
499
 
                status = DSA_verify(NID_sha1, digest, 20, signature, key_size, dsa);
 
499
                status = DSA_verify(NID_sha1, (unsigned char*)digest, 20, signature, key_size, dsa);
500
500
        }
501
501
 
502
502
        if (status == 0) {
530
530
                return NULL;
531
531
 
532
532
        md = xmlMalloc(20);
533
 
        return SHA1(str, strlen(str), md);
 
533
        return (char*)SHA1((unsigned char*)str, strlen(str), md);
534
534
}
535
535
 
536
536
char**
610
610
 
611
611
        sign_tmpl = NULL;
612
612
        for (sign_tmpl = xmlnode->children; sign_tmpl; sign_tmpl = sign_tmpl->next) {
613
 
                if (strcmp(sign_tmpl->name, "Signature") == 0)
 
613
                if (strcmp((char*)sign_tmpl->name, "Signature") == 0)
614
614
                        break;
615
615
        }
616
616
        sign_tmpl = xmlSecFindNode(xmlnode, xmlSecNodeSignature, xmlSecDSigNs);
618
618
        if (sign_tmpl == NULL)
619
619
                return LASSO_DS_ERROR_SIGNATURE_TEMPLATE_NOT_FOUND;
620
620
 
621
 
        doc = xmlNewDoc("1.0");
 
621
        doc = xmlNewDoc((xmlChar*)"1.0");
622
622
        old_parent = xmlnode->parent;
623
623
        xmlnode->parent = NULL;
624
624
        xmlDocSetRootElement(doc, xmlnode);
625
625
        xmlSetTreeDoc(sign_tmpl, doc);
626
626
        if (id_attr_name) {
627
 
                xmlAttr *id_attr = xmlHasProp(xmlnode, id_attr_name);
 
627
                xmlAttr *id_attr = xmlHasProp(xmlnode, (xmlChar*)id_attr_name);
628
628
                if (id_value) {
629
 
                        xmlAddID(NULL, doc, id_value, id_attr);
 
629
                        xmlAddID(NULL, doc, (xmlChar*)id_value, id_attr);
630
630
                }
631
631
        }
632
632