Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(23)

Side by Side Diff: third_party/libxslt/libexslt/crypto.c

Issue 661058: libxslt update (Closed) Base URL: svn://chrome-svn.corp.google.com/chrome/trunk/src/
Patch Set: '' Created 10 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « third_party/libxslt/install-sh ('k') | third_party/libxslt/libexslt/date.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 FORMAT_MESSAGE_FROM_SYSTEM, NULL, dw, 133 FORMAT_MESSAGE_FROM_SYSTEM, NULL, dw,
134 MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT), 134 MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT),
135 (LPTSTR) & lpMsgBuf, 0, NULL); 135 (LPTSTR) & lpMsgBuf, 0, NULL);
136 136
137 xsltTransformError (xsltXPathGetTransformContext (ctxt), NULL, NULL, 137 xsltTransformError (xsltXPathGetTransformContext (ctxt), NULL, NULL,
138 "exslt:crypto error (line %d). %s", line, 138 "exslt:crypto error (line %d). %s", line,
139 lpMsgBuf); 139 lpMsgBuf);
140 LocalFree (lpMsgBuf); 140 LocalFree (lpMsgBuf);
141 } 141 }
142 142
143 HCRYPTHASH 143 static HCRYPTHASH
144 exsltCryptoCryptoApiCreateHash (xmlXPathParserContextPtr ctxt, 144 exsltCryptoCryptoApiCreateHash (xmlXPathParserContextPtr ctxt,
145 HCRYPTPROV hCryptProv, ALG_ID algorithm, 145 HCRYPTPROV hCryptProv, ALG_ID algorithm,
146 const char *msg, unsigned int msglen, 146 const char *msg, unsigned int msglen,
147 char *dest, unsigned int destlen) 147 char *dest, unsigned int destlen)
148 { 148 {
149 HCRYPTHASH hHash = 0; 149 HCRYPTHASH hHash = 0;
150 DWORD dwHashLen = destlen; 150 DWORD dwHashLen = destlen;
151 151
152 if (!CryptCreateHash (hCryptProv, algorithm, 0, 0, &hHash)) { 152 if (!CryptCreateHash (hCryptProv, algorithm, 0, 0, &hHash)) {
153 exsltCryptoCryptoApiReportError (ctxt, __LINE__); 153 exsltCryptoCryptoApiReportError (ctxt, __LINE__);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 hHash = exsltCryptoCryptoApiCreateHash (ctxt, hCryptProv, 196 hHash = exsltCryptoCryptoApiCreateHash (ctxt, hCryptProv,
197 algorithm, msg, msglen, 197 algorithm, msg, msglen,
198 dest, HASH_DIGEST_LENGTH); 198 dest, HASH_DIGEST_LENGTH);
199 if (0 != hHash) { 199 if (0 != hHash) {
200 CryptDestroyHash (hHash); 200 CryptDestroyHash (hHash);
201 } 201 }
202 202
203 CryptReleaseContext (hCryptProv, 0); 203 CryptReleaseContext (hCryptProv, 0);
204 } 204 }
205 205
206 void 206 static void
207 exsltCryptoCryptoApiRc4Encrypt (xmlXPathParserContextPtr ctxt, 207 exsltCryptoCryptoApiRc4Encrypt (xmlXPathParserContextPtr ctxt,
208 const unsigned char *key, 208 const unsigned char *key,
209 const unsigned char *msg, int msglen, 209 const unsigned char *msg, int msglen,
210 unsigned char *dest, int destlen) { 210 unsigned char *dest, int destlen) {
211 HCRYPTPROV hCryptProv; 211 HCRYPTPROV hCryptProv;
212 HCRYPTKEY hKey; 212 HCRYPTKEY hKey;
213 HCRYPTHASH hHash; 213 HCRYPTHASH hHash;
214 DWORD dwDataLen; 214 DWORD dwDataLen;
215 unsigned char hash[HASH_DIGEST_LENGTH]; 215 unsigned char hash[HASH_DIGEST_LENGTH];
216 216
(...skipping 30 matching lines...) Expand all
247 247
248 fail: 248 fail:
249 if (0 != hHash) { 249 if (0 != hHash) {
250 CryptDestroyHash (hHash); 250 CryptDestroyHash (hHash);
251 } 251 }
252 252
253 CryptDestroyKey (hKey); 253 CryptDestroyKey (hKey);
254 CryptReleaseContext (hCryptProv, 0); 254 CryptReleaseContext (hCryptProv, 0);
255 } 255 }
256 256
257 void 257 static void
258 exsltCryptoCryptoApiRc4Decrypt (xmlXPathParserContextPtr ctxt, 258 exsltCryptoCryptoApiRc4Decrypt (xmlXPathParserContextPtr ctxt,
259 const unsigned char *key, 259 const unsigned char *key,
260 const unsigned char *msg, int msglen, 260 const unsigned char *msg, int msglen,
261 unsigned char *dest, int destlen) { 261 unsigned char *dest, int destlen) {
262 HCRYPTPROV hCryptProv; 262 HCRYPTPROV hCryptProv;
263 HCRYPTKEY hKey; 263 HCRYPTKEY hKey;
264 HCRYPTHASH hHash; 264 HCRYPTHASH hHash;
265 DWORD dwDataLen; 265 DWORD dwDataLen;
266 unsigned char hash[HASH_DIGEST_LENGTH]; 266 unsigned char hash[HASH_DIGEST_LENGTH];
267 267
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 #if defined(HAVE_GCRYPT) 310 #if defined(HAVE_GCRYPT)
311 311
312 #define HAVE_CRYPTO 312 #define HAVE_CRYPTO
313 #define PLATFORM_HASH exsltCryptoGcryptHash 313 #define PLATFORM_HASH exsltCryptoGcryptHash
314 #define PLATFORM_RC4_ENCRYPT exsltCryptoGcryptRc4Encrypt 314 #define PLATFORM_RC4_ENCRYPT exsltCryptoGcryptRc4Encrypt
315 #define PLATFORM_RC4_DECRYPT exsltCryptoGcryptRc4Decrypt 315 #define PLATFORM_RC4_DECRYPT exsltCryptoGcryptRc4Decrypt
316 #define PLATFORM_MD4 GCRY_MD_MD4 316 #define PLATFORM_MD4 GCRY_MD_MD4
317 #define PLATFORM_MD5 GCRY_MD_MD5 317 #define PLATFORM_MD5 GCRY_MD_MD5
318 #define PLATFORM_SHA1 GCRY_MD_SHA1 318 #define PLATFORM_SHA1 GCRY_MD_SHA1
319 319
320 #ifdef HAVE_SYS_TYPES_H 320 #ifdef HAVE_SYS_TYPES_H
321 # include <sys/types.h> 321 # include <sys/types.h>
322 #endif 322 #endif
323 #ifdef HAVE_STDINT_H 323 #ifdef HAVE_STDINT_H
324 # include <stdint.h> 324 # include <stdint.h>
325 #endif 325 #endif
326 326
327 #ifdef HAVE_SYS_SELECT_H 327 #ifdef HAVE_SYS_SELECT_H
328 #include <sys/select.h> /* needed by gcrypt.h 4 Jul 04 */ 328 #include <sys/select.h> /* needed by gcrypt.h 4 Jul 04 */
329 #endif 329 #endif
330 #include <gcrypt.h> 330 #include <gcrypt.h>
331 331
332 static void 332 static void
333 exsltCryptoGcryptInit (void) { 333 exsltCryptoGcryptInit (void) {
334 static int gcrypt_init; 334 static int gcrypt_init;
335 xmlLockLibrary (); 335 xmlLockLibrary ();
336 336
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
588 * 588 *
589 * computes the sha1 hash of a string and returns as hex 589 * computes the sha1 hash of a string and returns as hex
590 */ 590 */
591 static void 591 static void
592 exsltCryptoRc4EncryptFunction (xmlXPathParserContextPtr ctxt, int nargs) { 592 exsltCryptoRc4EncryptFunction (xmlXPathParserContextPtr ctxt, int nargs) {
593 593
594 int key_len = 0, key_size = 0; 594 int key_len = 0, key_size = 0;
595 int str_len = 0, bin_len = 0, hex_len = 0; 595 int str_len = 0, bin_len = 0, hex_len = 0;
596 xmlChar *key = NULL, *str = NULL, *padkey = NULL; 596 xmlChar *key = NULL, *str = NULL, *padkey = NULL;
597 xmlChar *bin = NULL, *hex = NULL; 597 xmlChar *bin = NULL, *hex = NULL;
598 xsltTransformContextPtr tctxt = NULL;
598 599
599 if ((nargs < 1) || (nargs > 3)) { 600 if (nargs != 2) {
600 xmlXPathSetArityError (ctxt); 601 xmlXPathSetArityError (ctxt);
601 return; 602 return;
602 } 603 }
604 tctxt = xsltXPathGetTransformContext(ctxt);
603 605
604 str = xmlXPathPopString (ctxt); 606 str = xmlXPathPopString (ctxt);
605 str_len = xmlUTF8Strlen (str); 607 str_len = xmlUTF8Strlen (str);
606 608
607 if (str_len == 0) { 609 if (str_len == 0) {
608 xmlXPathReturnEmptyString (ctxt); 610 xmlXPathReturnEmptyString (ctxt);
609 xmlFree (str); 611 xmlFree (str);
610 return; 612 return;
611 } 613 }
612 614
613 key = xmlXPathPopString (ctxt); 615 key = xmlXPathPopString (ctxt);
614 key_len = xmlUTF8Strlen (str); 616 key_len = xmlUTF8Strlen (key);
615 617
616 if (key_len == 0) { 618 if (key_len == 0) {
617 xmlXPathReturnEmptyString (ctxt); 619 xmlXPathReturnEmptyString (ctxt);
618 xmlFree (key); 620 xmlFree (key);
619 xmlFree (str); 621 xmlFree (str);
620 return; 622 return;
621 } 623 }
622 624
623 padkey = xmlMallocAtomic (RC4_KEY_LENGTH); 625 padkey = xmlMallocAtomic (RC4_KEY_LENGTH + 1);
626 if (padkey == NULL) {
627 » xsltTransformError(tctxt, NULL, tctxt->inst,
628 » "exsltCryptoRc4EncryptFunction: Failed to allocate padkey\n");
629 » tctxt->state = XSLT_STATE_STOPPED;
630 » xmlXPathReturnEmptyString (ctxt);
631 » goto done;
632 }
633 memset(padkey, 0, RC4_KEY_LENGTH + 1);
634
624 key_size = xmlUTF8Strsize (key, key_len); 635 key_size = xmlUTF8Strsize (key, key_len);
636 if ((key_size > RC4_KEY_LENGTH) || (key_size < 0)) {
637 xsltTransformError(tctxt, NULL, tctxt->inst,
638 "exsltCryptoRc4EncryptFunction: key size too long or key broken\n");
639 tctxt->state = XSLT_STATE_STOPPED;
640 xmlXPathReturnEmptyString (ctxt);
641 goto done;
642 }
625 memcpy (padkey, key, key_size); 643 memcpy (padkey, key, key_size);
626 memset (padkey + key_size, '\0', sizeof (padkey));
627 644
628 /* encrypt it */ 645 /* encrypt it */
629 bin_len = str_len; 646 bin_len = str_len;
630 bin = xmlStrdup (str); 647 bin = xmlStrdup (str);
631 if (bin == NULL) { 648 if (bin == NULL) {
649 xsltTransformError(tctxt, NULL, tctxt->inst,
650 "exsltCryptoRc4EncryptFunction: Failed to allocate string\n");
651 tctxt->state = XSLT_STATE_STOPPED;
632 xmlXPathReturnEmptyString (ctxt); 652 xmlXPathReturnEmptyString (ctxt);
633 goto done; 653 goto done;
634 } 654 }
635 PLATFORM_RC4_ENCRYPT (ctxt, padkey, str, str_len, bin, bin_len); 655 PLATFORM_RC4_ENCRYPT (ctxt, padkey, str, str_len, bin, bin_len);
636 656
637 /* encode it */ 657 /* encode it */
638 hex_len = str_len * 2 + 1; 658 hex_len = str_len * 2 + 1;
639 hex = xmlMallocAtomic (hex_len); 659 hex = xmlMallocAtomic (hex_len);
640 if (hex == NULL) { 660 if (hex == NULL) {
661 xsltTransformError(tctxt, NULL, tctxt->inst,
662 "exsltCryptoRc4EncryptFunction: Failed to allocate result\n");
663 tctxt->state = XSLT_STATE_STOPPED;
641 xmlXPathReturnEmptyString (ctxt); 664 xmlXPathReturnEmptyString (ctxt);
642 goto done; 665 goto done;
643 } 666 }
644 667
645 exsltCryptoBin2Hex (bin, str_len, hex, hex_len); 668 exsltCryptoBin2Hex (bin, str_len, hex, hex_len);
646 xmlXPathReturnString (ctxt, hex); 669 xmlXPathReturnString (ctxt, hex);
647 670
648 done: 671 done:
649 if (key != NULL) 672 if (key != NULL)
650 xmlFree (key); 673 xmlFree (key);
(...skipping 12 matching lines...) Expand all
663 * 686 *
664 * computes the sha1 hash of a string and returns as hex 687 * computes the sha1 hash of a string and returns as hex
665 */ 688 */
666 static void 689 static void
667 exsltCryptoRc4DecryptFunction (xmlXPathParserContextPtr ctxt, int nargs) { 690 exsltCryptoRc4DecryptFunction (xmlXPathParserContextPtr ctxt, int nargs) {
668 691
669 int key_len = 0, key_size = 0; 692 int key_len = 0, key_size = 0;
670 int str_len = 0, bin_len = 0, ret_len = 0; 693 int str_len = 0, bin_len = 0, ret_len = 0;
671 xmlChar *key = NULL, *str = NULL, *padkey = NULL, *bin = 694 xmlChar *key = NULL, *str = NULL, *padkey = NULL, *bin =
672 NULL, *ret = NULL; 695 NULL, *ret = NULL;
696 xsltTransformContextPtr tctxt = NULL;
673 697
674 if ((nargs < 1) || (nargs > 3)) { 698 if (nargs != 2) {
675 xmlXPathSetArityError (ctxt); 699 xmlXPathSetArityError (ctxt);
676 return; 700 return;
677 } 701 }
702 tctxt = xsltXPathGetTransformContext(ctxt);
678 703
679 str = xmlXPathPopString (ctxt); 704 str = xmlXPathPopString (ctxt);
680 str_len = xmlUTF8Strlen (str); 705 str_len = xmlUTF8Strlen (str);
681 706
682 if (str_len == 0) { 707 if (str_len == 0) {
683 xmlXPathReturnEmptyString (ctxt); 708 xmlXPathReturnEmptyString (ctxt);
684 xmlFree (str); 709 xmlFree (str);
685 return; 710 return;
686 } 711 }
687 712
688 key = xmlXPathPopString (ctxt); 713 key = xmlXPathPopString (ctxt);
689 key_len = xmlUTF8Strlen (str); 714 key_len = xmlUTF8Strlen (key);
690 715
691 if (key_len == 0) { 716 if (key_len == 0) {
692 xmlXPathReturnEmptyString (ctxt); 717 xmlXPathReturnEmptyString (ctxt);
693 xmlFree (key); 718 xmlFree (key);
694 xmlFree (str); 719 xmlFree (str);
695 return; 720 return;
696 } 721 }
697 722
698 padkey = xmlMallocAtomic (RC4_KEY_LENGTH); 723 padkey = xmlMallocAtomic (RC4_KEY_LENGTH + 1);
724 if (padkey == NULL) {
725 » xsltTransformError(tctxt, NULL, tctxt->inst,
726 » "exsltCryptoRc4EncryptFunction: Failed to allocate padkey\n");
727 » tctxt->state = XSLT_STATE_STOPPED;
728 » xmlXPathReturnEmptyString (ctxt);
729 » goto done;
730 }
731 memset(padkey, 0, RC4_KEY_LENGTH + 1);
699 key_size = xmlUTF8Strsize (key, key_len); 732 key_size = xmlUTF8Strsize (key, key_len);
733 if ((key_size > RC4_KEY_LENGTH) || (key_size < 0)) {
734 xsltTransformError(tctxt, NULL, tctxt->inst,
735 "exsltCryptoRc4EncryptFunction: key size too long or key broken\n");
736 tctxt->state = XSLT_STATE_STOPPED;
737 xmlXPathReturnEmptyString (ctxt);
738 goto done;
739 }
700 memcpy (padkey, key, key_size); 740 memcpy (padkey, key, key_size);
701 memset (padkey + key_size, '\0', sizeof (padkey));
702 741
703 /* decode hex to binary */ 742 /* decode hex to binary */
704 bin_len = str_len; 743 bin_len = str_len;
705 bin = xmlMallocAtomic (bin_len); 744 bin = xmlMallocAtomic (bin_len);
745 if (bin == NULL) {
746 xsltTransformError(tctxt, NULL, tctxt->inst,
747 "exsltCryptoRc4EncryptFunction: Failed to allocate string\n");
748 tctxt->state = XSLT_STATE_STOPPED;
749 xmlXPathReturnEmptyString (ctxt);
750 goto done;
751 }
706 ret_len = exsltCryptoHex2Bin (str, str_len, bin, bin_len); 752 ret_len = exsltCryptoHex2Bin (str, str_len, bin, bin_len);
707 753
708 /* decrypt the binary blob */ 754 /* decrypt the binary blob */
709 ret = xmlMallocAtomic (ret_len); 755 ret = xmlMallocAtomic (ret_len);
756 if (ret == NULL) {
757 xsltTransformError(tctxt, NULL, tctxt->inst,
758 "exsltCryptoRc4EncryptFunction: Failed to allocate result\n");
759 tctxt->state = XSLT_STATE_STOPPED;
760 xmlXPathReturnEmptyString (ctxt);
761 goto done;
762 }
710 PLATFORM_RC4_DECRYPT (ctxt, padkey, bin, ret_len, ret, ret_len); 763 PLATFORM_RC4_DECRYPT (ctxt, padkey, bin, ret_len, ret, ret_len);
711 764
712 xmlXPathReturnString (ctxt, ret); 765 xmlXPathReturnString (ctxt, ret);
713 766
767 done:
714 if (key != NULL) 768 if (key != NULL)
715 xmlFree (key); 769 xmlFree (key);
716 if (str != NULL) 770 if (str != NULL)
717 xmlFree (str); 771 xmlFree (str);
718 if (padkey != NULL) 772 if (padkey != NULL)
719 xmlFree (padkey); 773 xmlFree (padkey);
720 if (bin != NULL) 774 if (bin != NULL)
721 xmlFree (bin); 775 xmlFree (bin);
722 } 776 }
723 777
(...skipping 16 matching lines...) Expand all
740 exsltCryptoSha1Function); 794 exsltCryptoSha1Function);
741 xsltRegisterExtModuleFunction ((const xmlChar *) "rc4_encrypt", 795 xsltRegisterExtModuleFunction ((const xmlChar *) "rc4_encrypt",
742 EXSLT_CRYPTO_NAMESPACE, 796 EXSLT_CRYPTO_NAMESPACE,
743 exsltCryptoRc4EncryptFunction); 797 exsltCryptoRc4EncryptFunction);
744 xsltRegisterExtModuleFunction ((const xmlChar *) "rc4_decrypt", 798 xsltRegisterExtModuleFunction ((const xmlChar *) "rc4_decrypt",
745 EXSLT_CRYPTO_NAMESPACE, 799 EXSLT_CRYPTO_NAMESPACE,
746 exsltCryptoRc4DecryptFunction); 800 exsltCryptoRc4DecryptFunction);
747 } 801 }
748 802
749 #else 803 #else
804 /**
805 * exsltCryptoRegister:
806 *
807 * Registers the EXSLT - Crypto module
808 */
750 void 809 void
751 exsltCryptoRegister (void) { 810 exsltCryptoRegister (void) {
752 } 811 }
753 812
754 #endif /* defined(HAVE_CRYPTO) */ 813 #endif /* defined(HAVE_CRYPTO) */
755 814
756 #endif /* EXSLT_CRYPTO_ENABLED */ 815 #endif /* EXSLT_CRYPTO_ENABLED */
OLDNEW
« no previous file with comments | « third_party/libxslt/install-sh ('k') | third_party/libxslt/libexslt/date.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698