| OLD | NEW |
| 1 #define IN_LIBEXSLT | 1 #define IN_LIBEXSLT |
| 2 #include "libexslt/libexslt.h" | 2 #include "libexslt/libexslt.h" |
| 3 | 3 |
| 4 #if defined(WIN32) && !defined (__CYGWIN__) && (!__MINGW32__) | 4 #if defined(WIN32) && !defined (__CYGWIN__) && (!__MINGW32__) |
| 5 #include <win32config.h> | 5 #include <win32config.h> |
| 6 #else | 6 #else |
| 7 #include "config.h" | 7 #include "config.h" |
| 8 #endif | 8 #endif |
| 9 | 9 |
| 10 #include <libxml/tree.h> | 10 #include <libxml/tree.h> |
| (...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 450 | 450 |
| 451 #endif /* defined(HAVE_GCRYPT) */ | 451 #endif /* defined(HAVE_GCRYPT) */ |
| 452 | 452 |
| 453 #if defined(HAVE_CRYPTO) | 453 #if defined(HAVE_CRYPTO) |
| 454 | 454 |
| 455 /** | 455 /** |
| 456 * exsltCryptoPopString: | 456 * exsltCryptoPopString: |
| 457 * @ctxt: an XPath parser context | 457 * @ctxt: an XPath parser context |
| 458 * @nargs: the number of arguments | 458 * @nargs: the number of arguments |
| 459 * | 459 * |
| 460 * Helper function which checks for and returns first string argument and its le
ngth | 460 * Helper function which checks for and returns first string argument and its |
| 461 * length in bytes. |
| 461 */ | 462 */ |
| 462 static int | 463 static int |
| 463 exsltCryptoPopString (xmlXPathParserContextPtr ctxt, int nargs, | 464 exsltCryptoPopString (xmlXPathParserContextPtr ctxt, int nargs, |
| 464 xmlChar ** str) { | 465 xmlChar ** str) { |
| 465 | 466 |
| 466 int str_len = 0; | 467 int str_len = 0; |
| 467 | 468 |
| 468 if ((nargs < 1) || (nargs > 2)) { | 469 if ((nargs < 1) || (nargs > 2)) { |
| 469 xmlXPathSetArityError (ctxt); | 470 xmlXPathSetArityError (ctxt); |
| 470 return 0; | 471 return 0; |
| 471 } | 472 } |
| 472 | 473 |
| 473 *str = xmlXPathPopString (ctxt); | 474 *str = xmlXPathPopString (ctxt); |
| 474 str_len = xmlUTF8Strlen (*str); | 475 str_len = xmlStrlen (*str); |
| 475 | 476 |
| 476 if (str_len == 0) { | 477 if (str_len == 0) { |
| 477 xmlXPathReturnEmptyString (ctxt); | 478 xmlXPathReturnEmptyString (ctxt); |
| 478 xmlFree (*str); | 479 xmlFree (*str); |
| 479 return 0; | 480 return 0; |
| 480 } | 481 } |
| 481 | 482 |
| 482 return str_len; | 483 return str_len; |
| 483 } | 484 } |
| 484 | 485 |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 584 /** | 585 /** |
| 585 * exsltCryptoRc4EncryptFunction: | 586 * exsltCryptoRc4EncryptFunction: |
| 586 * @ctxt: an XPath parser context | 587 * @ctxt: an XPath parser context |
| 587 * @nargs: the number of arguments | 588 * @nargs: the number of arguments |
| 588 * | 589 * |
| 589 * computes the sha1 hash of a string and returns as hex | 590 * computes the sha1 hash of a string and returns as hex |
| 590 */ | 591 */ |
| 591 static void | 592 static void |
| 592 exsltCryptoRc4EncryptFunction (xmlXPathParserContextPtr ctxt, int nargs) { | 593 exsltCryptoRc4EncryptFunction (xmlXPathParserContextPtr ctxt, int nargs) { |
| 593 | 594 |
| 594 int key_len = 0, key_size = 0; | 595 int key_len = 0; |
| 595 int str_len = 0, bin_len = 0, hex_len = 0; | 596 int str_len = 0, bin_len = 0, hex_len = 0; |
| 596 xmlChar *key = NULL, *str = NULL, *padkey = NULL; | 597 xmlChar *key = NULL, *str = NULL, *padkey = NULL; |
| 597 xmlChar *bin = NULL, *hex = NULL; | 598 xmlChar *bin = NULL, *hex = NULL; |
| 598 xsltTransformContextPtr tctxt = NULL; | 599 xsltTransformContextPtr tctxt = NULL; |
| 599 | 600 |
| 600 if (nargs != 2) { | 601 if (nargs != 2) { |
| 601 xmlXPathSetArityError (ctxt); | 602 xmlXPathSetArityError (ctxt); |
| 602 return; | 603 return; |
| 603 } | 604 } |
| 604 tctxt = xsltXPathGetTransformContext(ctxt); | 605 tctxt = xsltXPathGetTransformContext(ctxt); |
| 605 | 606 |
| 606 str = xmlXPathPopString (ctxt); | 607 str = xmlXPathPopString (ctxt); |
| 607 str_len = xmlUTF8Strlen (str); | 608 str_len = xmlStrlen (str); |
| 608 | 609 |
| 609 if (str_len == 0) { | 610 if (str_len == 0) { |
| 610 xmlXPathReturnEmptyString (ctxt); | 611 xmlXPathReturnEmptyString (ctxt); |
| 611 xmlFree (str); | 612 xmlFree (str); |
| 612 return; | 613 return; |
| 613 } | 614 } |
| 614 | 615 |
| 615 key = xmlXPathPopString (ctxt); | 616 key = xmlXPathPopString (ctxt); |
| 616 key_len = xmlUTF8Strlen (key); | 617 key_len = xmlStrlen (key); |
| 617 | 618 |
| 618 if (key_len == 0) { | 619 if (key_len == 0) { |
| 619 xmlXPathReturnEmptyString (ctxt); | 620 xmlXPathReturnEmptyString (ctxt); |
| 620 xmlFree (key); | 621 xmlFree (key); |
| 621 xmlFree (str); | 622 xmlFree (str); |
| 622 return; | 623 return; |
| 623 } | 624 } |
| 624 | 625 |
| 625 padkey = xmlMallocAtomic (RC4_KEY_LENGTH + 1); | 626 padkey = xmlMallocAtomic (RC4_KEY_LENGTH + 1); |
| 626 if (padkey == NULL) { | 627 if (padkey == NULL) { |
| 627 xsltTransformError(tctxt, NULL, tctxt->inst, | 628 xsltTransformError(tctxt, NULL, tctxt->inst, |
| 628 "exsltCryptoRc4EncryptFunction: Failed to allocate padkey\n"); | 629 "exsltCryptoRc4EncryptFunction: Failed to allocate padkey\n"); |
| 629 tctxt->state = XSLT_STATE_STOPPED; | 630 tctxt->state = XSLT_STATE_STOPPED; |
| 630 xmlXPathReturnEmptyString (ctxt); | 631 xmlXPathReturnEmptyString (ctxt); |
| 631 goto done; | 632 goto done; |
| 632 } | 633 } |
| 633 memset(padkey, 0, RC4_KEY_LENGTH + 1); | 634 memset(padkey, 0, RC4_KEY_LENGTH + 1); |
| 634 | 635 |
| 635 key_size = xmlUTF8Strsize (key, key_len); | 636 if ((key_len > RC4_KEY_LENGTH) || (key_len < 0)) { |
| 636 if ((key_size > RC4_KEY_LENGTH) || (key_size < 0)) { | |
| 637 xsltTransformError(tctxt, NULL, tctxt->inst, | 637 xsltTransformError(tctxt, NULL, tctxt->inst, |
| 638 "exsltCryptoRc4EncryptFunction: key size too long or key broken\n"); | 638 "exsltCryptoRc4EncryptFunction: key size too long or key broken\n"); |
| 639 tctxt->state = XSLT_STATE_STOPPED; | 639 tctxt->state = XSLT_STATE_STOPPED; |
| 640 xmlXPathReturnEmptyString (ctxt); | 640 xmlXPathReturnEmptyString (ctxt); |
| 641 goto done; | 641 goto done; |
| 642 } | 642 } |
| 643 memcpy (padkey, key, key_size); | 643 memcpy (padkey, key, key_len); |
| 644 | 644 |
| 645 /* encrypt it */ | 645 /* encrypt it */ |
| 646 bin_len = str_len; | 646 bin_len = str_len; |
| 647 bin = xmlStrdup (str); | 647 bin = xmlStrdup (str); |
| 648 if (bin == NULL) { | 648 if (bin == NULL) { |
| 649 xsltTransformError(tctxt, NULL, tctxt->inst, | 649 xsltTransformError(tctxt, NULL, tctxt->inst, |
| 650 "exsltCryptoRc4EncryptFunction: Failed to allocate string\n"); | 650 "exsltCryptoRc4EncryptFunction: Failed to allocate string\n"); |
| 651 tctxt->state = XSLT_STATE_STOPPED; | 651 tctxt->state = XSLT_STATE_STOPPED; |
| 652 xmlXPathReturnEmptyString (ctxt); | 652 xmlXPathReturnEmptyString (ctxt); |
| 653 goto done; | 653 goto done; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 682 /** | 682 /** |
| 683 * exsltCryptoRc4DecryptFunction: | 683 * exsltCryptoRc4DecryptFunction: |
| 684 * @ctxt: an XPath parser context | 684 * @ctxt: an XPath parser context |
| 685 * @nargs: the number of arguments | 685 * @nargs: the number of arguments |
| 686 * | 686 * |
| 687 * computes the sha1 hash of a string and returns as hex | 687 * computes the sha1 hash of a string and returns as hex |
| 688 */ | 688 */ |
| 689 static void | 689 static void |
| 690 exsltCryptoRc4DecryptFunction (xmlXPathParserContextPtr ctxt, int nargs) { | 690 exsltCryptoRc4DecryptFunction (xmlXPathParserContextPtr ctxt, int nargs) { |
| 691 | 691 |
| 692 int key_len = 0, key_size = 0; | 692 int key_len = 0; |
| 693 int str_len = 0, bin_len = 0, ret_len = 0; | 693 int str_len = 0, bin_len = 0, ret_len = 0; |
| 694 xmlChar *key = NULL, *str = NULL, *padkey = NULL, *bin = | 694 xmlChar *key = NULL, *str = NULL, *padkey = NULL, *bin = |
| 695 NULL, *ret = NULL; | 695 NULL, *ret = NULL; |
| 696 xsltTransformContextPtr tctxt = NULL; | 696 xsltTransformContextPtr tctxt = NULL; |
| 697 | 697 |
| 698 if (nargs != 2) { | 698 if (nargs != 2) { |
| 699 xmlXPathSetArityError (ctxt); | 699 xmlXPathSetArityError (ctxt); |
| 700 return; | 700 return; |
| 701 } | 701 } |
| 702 tctxt = xsltXPathGetTransformContext(ctxt); | 702 tctxt = xsltXPathGetTransformContext(ctxt); |
| 703 | 703 |
| 704 str = xmlXPathPopString (ctxt); | 704 str = xmlXPathPopString (ctxt); |
| 705 str_len = xmlUTF8Strlen (str); | 705 str_len = xmlStrlen (str); |
| 706 | 706 |
| 707 if (str_len == 0) { | 707 if (str_len == 0) { |
| 708 xmlXPathReturnEmptyString (ctxt); | 708 xmlXPathReturnEmptyString (ctxt); |
| 709 xmlFree (str); | 709 xmlFree (str); |
| 710 return; | 710 return; |
| 711 } | 711 } |
| 712 | 712 |
| 713 key = xmlXPathPopString (ctxt); | 713 key = xmlXPathPopString (ctxt); |
| 714 key_len = xmlUTF8Strlen (key); | 714 key_len = xmlStrlen (key); |
| 715 | 715 |
| 716 if (key_len == 0) { | 716 if (key_len == 0) { |
| 717 xmlXPathReturnEmptyString (ctxt); | 717 xmlXPathReturnEmptyString (ctxt); |
| 718 xmlFree (key); | 718 xmlFree (key); |
| 719 xmlFree (str); | 719 xmlFree (str); |
| 720 return; | 720 return; |
| 721 } | 721 } |
| 722 | 722 |
| 723 padkey = xmlMallocAtomic (RC4_KEY_LENGTH + 1); | 723 padkey = xmlMallocAtomic (RC4_KEY_LENGTH + 1); |
| 724 if (padkey == NULL) { | 724 if (padkey == NULL) { |
| 725 xsltTransformError(tctxt, NULL, tctxt->inst, | 725 xsltTransformError(tctxt, NULL, tctxt->inst, |
| 726 "exsltCryptoRc4EncryptFunction: Failed to allocate padkey\n"); | 726 "exsltCryptoRc4EncryptFunction: Failed to allocate padkey\n"); |
| 727 tctxt->state = XSLT_STATE_STOPPED; | 727 tctxt->state = XSLT_STATE_STOPPED; |
| 728 xmlXPathReturnEmptyString (ctxt); | 728 xmlXPathReturnEmptyString (ctxt); |
| 729 goto done; | 729 goto done; |
| 730 } | 730 } |
| 731 memset(padkey, 0, RC4_KEY_LENGTH + 1); | 731 memset(padkey, 0, RC4_KEY_LENGTH + 1); |
| 732 key_size = xmlUTF8Strsize (key, key_len); | 732 if ((key_len > RC4_KEY_LENGTH) || (key_len < 0)) { |
| 733 if ((key_size > RC4_KEY_LENGTH) || (key_size < 0)) { | |
| 734 xsltTransformError(tctxt, NULL, tctxt->inst, | 733 xsltTransformError(tctxt, NULL, tctxt->inst, |
| 735 "exsltCryptoRc4EncryptFunction: key size too long or key broken\n"); | 734 "exsltCryptoRc4EncryptFunction: key size too long or key broken\n"); |
| 736 tctxt->state = XSLT_STATE_STOPPED; | 735 tctxt->state = XSLT_STATE_STOPPED; |
| 737 xmlXPathReturnEmptyString (ctxt); | 736 xmlXPathReturnEmptyString (ctxt); |
| 738 goto done; | 737 goto done; |
| 739 } | 738 } |
| 740 memcpy (padkey, key, key_size); | 739 memcpy (padkey, key, key_len); |
| 741 | 740 |
| 742 /* decode hex to binary */ | 741 /* decode hex to binary */ |
| 743 bin_len = str_len; | 742 bin_len = str_len; |
| 744 bin = xmlMallocAtomic (bin_len); | 743 bin = xmlMallocAtomic (bin_len); |
| 745 if (bin == NULL) { | 744 if (bin == NULL) { |
| 746 xsltTransformError(tctxt, NULL, tctxt->inst, | 745 xsltTransformError(tctxt, NULL, tctxt->inst, |
| 747 "exsltCryptoRc4EncryptFunction: Failed to allocate string\n"); | 746 "exsltCryptoRc4EncryptFunction: Failed to allocate string\n"); |
| 748 tctxt->state = XSLT_STATE_STOPPED; | 747 tctxt->state = XSLT_STATE_STOPPED; |
| 749 xmlXPathReturnEmptyString (ctxt); | 748 xmlXPathReturnEmptyString (ctxt); |
| 750 goto done; | 749 goto done; |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 807 * | 806 * |
| 808 * Registers the EXSLT - Crypto module | 807 * Registers the EXSLT - Crypto module |
| 809 */ | 808 */ |
| 810 void | 809 void |
| 811 exsltCryptoRegister (void) { | 810 exsltCryptoRegister (void) { |
| 812 } | 811 } |
| 813 | 812 |
| 814 #endif /* defined(HAVE_CRYPTO) */ | 813 #endif /* defined(HAVE_CRYPTO) */ |
| 815 | 814 |
| 816 #endif /* EXSLT_CRYPTO_ENABLED */ | 815 #endif /* EXSLT_CRYPTO_ENABLED */ |
| OLD | NEW |