diff --git a/PowerEditor/bin/change.log b/PowerEditor/bin/change.log index cd64b4b3..4ee054be 100644 --- a/PowerEditor/bin/change.log +++ b/PowerEditor/bin/change.log @@ -1,3 +1,13 @@ +Notepad++ v5.8.7 new features and fixed bug (from v5.8.6) : + +1. Fix a regression bug: the notification message boxes were not modal. It can be ignored by user then cause wrong input characters. +2. In order to reduce the confusion, new "Mark" tab for "Mark all" feature is made in Find/Replace dialog. +3. Make "Fide what" and "Replace with" fields larger in Find/Replace dialog. +4. Make message dialogs in Notepad++ translatable (in progress). +5. Change user manual format from chm to html. +6. Make minimalist installation available in installer. + + Notepad++ v5.8.6 new features and fixed bugs (from v5.8.5) : 1. Fix langs.xml 0 length problem while user ends session without closing Notepad++. @@ -24,7 +34,7 @@ Notepad++ v5.8.5 new features and fixed bugs (from v5.8.4) : 9. Fix the initial document encoding is not set by "New Document Settings". - + Notepad++ v5.8.4 new features and fixed bugs (from v5.8.3) : 1. Fix memory leak problem while switching tab. diff --git a/PowerEditor/bin/npp.pdb b/PowerEditor/bin/npp.pdb index 80f65399..5a627b2a 100644 Binary files a/PowerEditor/bin/npp.pdb and b/PowerEditor/bin/npp.pdb differ diff --git a/PowerEditor/bin/readme.txt b/PowerEditor/bin/readme.txt index 74003ce1..3218b476 100644 --- a/PowerEditor/bin/readme.txt +++ b/PowerEditor/bin/readme.txt @@ -25,6 +25,9 @@ Web sites: Notepad++ official site: http://notepad-plus-plus.org/ +Notepad++ online document site: + http://npp-community.tuxfamily.org/ + Notepad++ project site: http://sourceforge.net/projects/notepad-plus/ @@ -32,10 +35,11 @@ Notepad++ wiki: http://sourceforge.net/apps/mediawiki/notepad-plus/index.php?title=Main_Page Notepad++ support: - http://sourceforge.net/projects/notepad-plus/support + http://sourceforge.net/projects/notepad-plus/forums -Notepad++ team: -*************** +Author: +******* -http://notepad-plus-plus.org/members +Don Ho + http://notepad-plus-plus.org/author diff --git a/PowerEditor/installer/externalTools/md5.exe b/PowerEditor/installer/externalTools/md5.exe deleted file mode 100644 index 73c6d01e..00000000 Binary files a/PowerEditor/installer/externalTools/md5.exe and /dev/null differ diff --git a/PowerEditor/installer/externalTools/md5.src/Makefile b/PowerEditor/installer/externalTools/md5.src/Makefile deleted file mode 100644 index 7d19be43..00000000 --- a/PowerEditor/installer/externalTools/md5.src/Makefile +++ /dev/null @@ -1,77 +0,0 @@ - -PROGRAM = md5 - -CC = gcc -CFLAGS = -O3 -Wall - -RELFILES = Makefile index.html main.c md5.c md5.exe \ - md5.png md5s.png md5.h \ - md5.vcproj md5.sln \ - rfc1321.html rfc1321.txt - -all: $(PROGRAM) - -md5: md5.o main.o - $(CC) -o md5 md5.o main.o - -zip: - rm -f md5.zip - zip md5.zip $(RELFILES) - -tar: - rm -f md5.tar.gz md5.tar - tar cfv md5.tar $(RELFILES) - gzip md5.tar - -lint: - lint main.c md5.c - -# The silly stuff with "tr" is to allow directly cutting and -# pasting the test cases from RFC 1321. -check: $(PROGRAM) - ./md5 -d"" -otest.out - ./md5 -d"a" >>test.out - ./md5 -d"abc" >>test.out - ./md5 -d"message digest" >>test.out - ./md5 -d"abcdefghijklmnopqrstuvwxyz" >>test.out - ./md5 -d"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" >>test.out - ./md5 -d"12345678901234567890123456789012345678901234567890123456789012345678901234567890" >>test.out - @echo "d41d8cd98f00b204e9800998ecf8427e" | tr [a-f] [A-F] >expected.out - @echo "0cc175b9c0f1b6a831c399e269772661" | tr [a-f] [A-F] >>expected.out - @echo "900150983cd24fb0d6963f7d28e17f72" | tr [a-f] [A-F] >>expected.out - @echo "f96b697d7cb7938d525a2f31aaf161d0" | tr [a-f] [A-F] >>expected.out - @echo "c3fcd3d76192e4007dfb496cca67e13b" | tr [a-f] [A-F] >>expected.out - @echo "d174ab98d277d9f5a5611c2c9f419d9f" | tr [a-f] [A-F] >>expected.out - @echo "57edf4a22be3c955ac49da2e2107b67a" | tr [a-f] [A-F] >>expected.out - @diff test.out expected.out ; if test $$? -ne 0 ; then \ - echo '** md5: Verification test failed. **' ; else \ - echo 'All tests passed.' ; fi - -# Test the Win32 version running under "Wine" (which, -# obviously, must be installed). -wcheck: $(PROGRAM) - wine ./md5.exe -d"" -owtest.out - wine ./md5.exe -d"a" >>wtest.out - wine ./md5.exe -d"abc" >>wtest.out - wine ./md5.exe -d"message digest" >>wtest.out - wine ./md5.exe -d"abcdefghijklmnopqrstuvwxyz" >>wtest.out - wine ./md5.exe -d"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" >>wtest.out - wine ./md5.exe -d"12345678901234567890123456789012345678901234567890123456789012345678901234567890" >>wtest.out - @echo "d41d8cd98f00b204e9800998ecf8427e" | tr [a-f] [A-F] >expected.out - @echo "0cc175b9c0f1b6a831c399e269772661" | tr [a-f] [A-F] >>expected.out - @echo "900150983cd24fb0d6963f7d28e17f72" | tr [a-f] [A-F] >>expected.out - @echo "f96b697d7cb7938d525a2f31aaf161d0" | tr [a-f] [A-F] >>expected.out - @echo "c3fcd3d76192e4007dfb496cca67e13b" | tr [a-f] [A-F] >>expected.out - @echo "d174ab98d277d9f5a5611c2c9f419d9f" | tr [a-f] [A-F] >>expected.out - @echo "57edf4a22be3c955ac49da2e2107b67a" | tr [a-f] [A-F] >>expected.out - @diff -b wtest.out expected.out ; if test $$? -ne 0 ; then \ - echo '** md5: Verification test failed. **' ; else \ - echo 'All tests passed.' ; fi - -clean: - rm -f $(PROGRAM) *.bak *.o *.out core - -md5.o: md5.c md5.h - -main.o: main.c md5.h - diff --git a/PowerEditor/installer/externalTools/md5.src/index.html b/PowerEditor/installer/externalTools/md5.src/index.html deleted file mode 100644 index de5a300c..00000000 --- a/PowerEditor/installer/externalTools/md5.src/index.html +++ /dev/null @@ -1,242 +0,0 @@ - - - - -MD5: Command Line Message Digest Utility - - - - - - - - - -
-

MD5

-

-Command Line Message Digest Utility -

-
- -
- -

-This page describes md5, a command line utility usable on -either Unix or MS-DOS/Windows, which generates and verifies -message digests (digital signatures) using the MD5 algorithm. -This program can be useful when developing shell scripts or Perl -programs for software installation, file comparison, and -detection of file corruption and tampering. -

- - -

NAME

- md5 - generate / check MD5 message digest - -

SYNOPSIS

- md5 [ -csignature ] - [ -l ] [ -n ] - [ -u ] [ -v ] - [ -dinput_text | infile… ] - -

DESCRIPTION

- -

-A message digest is a compact digital signature for an -arbitrarily long stream of binary data. An ideal message digest -algorithm would never generate the same signature for two -different sets of input, but achieving such theoretical -perfection would require a message digest as long as the input -file. Practical message digest algorithms compromise in favour -of a digital signature of modest size created with an algorithm -designed to make preparation of input text with a given -signature computationally infeasible. Message digest algorithms -have much in common with techniques used in encryption, but to a -different end; verification that data have not been altered -since the signature was published. -

- -

-Many older programs requiring digital signatures employed 16 or -32 bit cyclical redundancy codes (CRC) originally -developed to verify correct transmission in data communication -protocols, but these short codes, while adequate to detect the -kind of transmission errors for which they were intended, are -insufficiently secure for applications such as electronic -commerce and verification of security related software -distributions. -

- -

-The most commonly used present-day message digest algorithm is -the 128 bit MD5 algorithm, developed by Ron Rivest of the -MIT -Laboratory for Computer Science and -RSA Data Security, -Inc. The algorithm, with a reference implementation, was -published as Internet RFC 1321 in April 1992, and was -placed into the public domain at that time. Message -digest algorithms such as MD5 are not deemed -“encryption technology” and are not subject to the -export controls some governments impose on -other data security products. (Obviously, the -responsibility for obeying the laws in the jurisdiction -in which you reside is entirely your own, but many -common Web and Mail utilities use MD5, and I am unaware -of any restrictions on their distribution and use.) -

- -

-The MD5 algorithm has been implemented in numerous -computer languages including C, -Perl, and -Java; if you're -writing a program in such a language, track down a suitable -subroutine and incorporate it into your program. The -program described on this page is a command line -implementation of MD5, intended for use in shell scripts -and Perl programs (it is much faster than computing -an MD5 signature directly in Perl). This md5 -program was originally developed as part of a suite of tools -intended to monitor large collections of files (for example, -the contents of a Web site) to detect corruption of -files and inadvertent (or perhaps malicious) changes. That -task is now best accomplished with more comprehensive -packages such as -Tripwire, -but the command line md5 component continues to prove useful -for verifying correct delivery and installation of software packages, -comparing the contents of two different systems, and checking for -changes in specific files. -

- -

OPTIONS

-
-
-csignature
Computes the signature of the - specified infile or the string supplied by the -d - option and compares it against the specified signature. - If the two signatures match, the exit status will be zero, - otherwise the exit status will be 1. No signature is written; - only the exit - status is set. The signature to be checked must be specified - as 32 hexadecimal digits.
- -
-dinput_text
A signature is computed for the - given input_text (which must be quoted if it contains white space - characters) instead of input from infile or standard - input. If input is specified with the -d option, no - infile should be specified.
- -
-l
Use lower case letters for hexadecimal - digits “a” through “f”. By default, upper case letters are - used. Note that the signature argument to the - -c option may use upper or lower case hexadecimal - digits (or a mix) regardless of the setting of this option.
- -
-n
Suppress printing the file name (or - “-” for standard input) after the hexadecimal - signature.
- -
-ofname
Write output to fname. - If fname is “-”, output is written - to standard output, which is the default is no - -o option is specified.
- -
-u
Print how-to-call information.
- -
-v
Print version information.
-
- -

FILES

-

- If no infile or -d option is specified or - infile is a single “-”, md5 - reads from standard input. A single “-” on - the command line causes all subsequent arguments to be treated as - file names even if they begin with “-”. If - no -o option is specified or the fname is a - single “-”, output is sent to standard - output. Input and output are processed strictly serially; - consequently md5 may be used in pipelines. -

- -

BUGS

- -

-The mechanism used to set standard input to binary mode may be -specific to Microsoft C; if you rebuild the DOS/Windows version -of the program from source using another compiler, be sure to verify -binary files work properly when read via redirection or a pipe. -

- -

-This program has not been tested on a machine on which int -and/or long are longer than 32 bits. -

- -

- Download md5.zip (Zipped) - or md5.tar.gz (tar/gzip)

- -

- The program is provided as either md5.zip, a - Zipped archive, or - md5.tar.gz, a gzipped - tar archive. The two archive formats have identical - contents; both include a - ready-to-run Win32 command-line executable program, md5.exe - (compiled using Microsoft Visual C++ .NET), - and source code along with a - Makefile to build the program under Unix. -

- -

SEE ALSO

- sum(1) - -

EXIT STATUS

-

- md5 returns status 0 if processing was - completed without errors, 1 if the -c option was - specified and the given signature does not match that of the input, - and 2 if processing could not be performed at - all due, for example, to a nonexistent input file. -

- -

COPYING

- -
-

- This software is in the public domain. Permission to use, copy, - modify, and distribute this software and its documentation for - any purpose and without fee is hereby granted, without any - conditions or restrictions. This software is provided “as is” - without express or implied warranty. -

-
- -

ACKNOWLEDGEMENTS

- -

-The MD5 algorithm was developed by Ron Rivest. The public -domain C language implementation used in this program was -written by Colin Plumb in 1993. -

- -

Fourmilab home page

-
-
-by John Walker
-January 14th, 2008 -
- - diff --git a/PowerEditor/installer/externalTools/md5.src/main.c b/PowerEditor/installer/externalTools/md5.src/main.c deleted file mode 100644 index 51daf28d..00000000 --- a/PowerEditor/installer/externalTools/md5.src/main.c +++ /dev/null @@ -1,275 +0,0 @@ -/* - - Calculate or Check MD5 Signature of File or Command Line Argument - - by John Walker - http://www.fourmilab.ch/ - - This program is in the public domain. - -*/ - -#define VERSION "2.2 (2008-01-14)" - -#include -#include -#include -#ifdef _WIN32 -#include -#include -#endif - -#include "md5.h" - -#define FALSE 0 -#define TRUE 1 - -#define EOS '\0' - -/* Main program */ - -int main(argc, argv) - int argc; char *argv[]; -{ - int i, j, opt, cdata = FALSE, docheck = FALSE, showfile = TRUE, f = 0; - unsigned int bp; - char *cp, *clabel, *ifname, *hexfmt = "%02X"; - FILE *in = stdin, *out = stdout; - unsigned char buffer[16384], signature[16], csig[16]; - struct MD5Context md5c; - - /* Build parameter quality control. Verify machine - properties were properly set in md5.h and refuse - to run if they're not correct. */ - -#ifdef CHECK_HARDWARE_PROPERTIES - /* Verify unit32 is, in fact, a 32 bit data type. */ - if (sizeof(uint32) != 4) { - fprintf(stderr, "** Configuration error. Setting for uint32 in file md5.h\n"); - fprintf(stderr, " is incorrect. This must be a 32 bit data type, but it\n"); - fprintf(stderr, " is configured as a %d bit data type.\n", sizeof(uint32) * 8); - return 2; - } - - /* If HIGHFIRST is not defined, verify that this machine is, - in fact, a little-endian architecture. */ - -#ifndef HIGHFIRST - { uint32 t = 0x12345678; - - if (*((char *) &t) != 0x78) { - fprintf(stderr, "** Configuration error. Setting for HIGHFIRST in file md5.h\n"); - fprintf(stderr, " is incorrect. This symbol has not been defined, yet this\n"); - fprintf(stderr, " machine is a big-endian (most significant byte first in\n"); - fprintf(stderr, " memory) architecture. Please modify md5.h so HIGHFIRST is\n"); - fprintf(stderr, " defined when building for this machine.\n"); - return 2; - } - } -#endif -#endif - - /* Process command line options. */ - - for (i = 1; i < argc; i++) { - cp = argv[i]; - if (*cp == '-') { - if (strlen(cp) == 1) { - i++; - break; /* - -- Mark end of options; balance are files */ - } - opt = *(++cp); - if (islower(opt)) { - opt = toupper(opt); - } - - switch (opt) { - - case 'C': /* -Csignature -- Check signature, set return code */ - docheck = TRUE; - if (strlen(cp + 1) != 32) { - docheck = FALSE; - } - memset(csig, 0, 16); - clabel = cp + 1; - for (j = 0; j < 16; j++) { - if (isxdigit((int) clabel[0]) && isxdigit((int) clabel[1]) && - sscanf((cp + 1 + (j * 2)), hexfmt, &bp) == 1) { - csig[j] = (unsigned char) bp; - } else { - docheck = FALSE; - break; - } - clabel += 2; - } - if (!docheck) { - fprintf(stderr, "Error in signature specification. Must be 32 hex digits.\n"); - return 2; - } - break; - - case 'D': /* -Dtext -- Compute signature of given text */ - MD5Init(&md5c); - MD5Update(&md5c, (unsigned char *) (cp + 1), strlen(cp + 1)); - cdata = TRUE; - f++; /* Mark no infile argument needed */ - break; - - case 'L': /* -L -- Use lower case letters as hex digits */ - hexfmt = "%02x"; - break; - - case 'N': /* -N -- Don't show file name after sum */ - showfile = FALSE; - break; - - case 'O': /* -Ofname -- Write output to fname (- = stdout) */ - cp++; - if (strcmp(cp, "-") != 0) { - if (out != stdout) { - fprintf(stderr, "Redundant output file specification.\n"); - return 2; - } - if ((out = fopen(cp, "w")) == NULL) { - fprintf(stderr, "Cannot open output file %s\n", cp); - return 2; - } - } - break; - - case '?': /* -U, -? -H -- Print how to call information. */ - case 'H': - case 'U': - printf("\nMD5 -- Calculate MD5 signature of file. Call"); - printf("\n with md5 [ options ] [file ...]"); - printf("\n"); - printf("\n Options:"); - printf("\n -csig Check against sig, set exit status 0 = OK"); - printf("\n -dtext Compute signature of text argument"); - printf("\n -l Use lower case letters for hexadecimal digits"); - printf("\n -n Do not show file name after sum"); - printf("\n -ofname Write output to fname (- = stdout)"); - printf("\n -u Print this message"); - printf("\n -v Print version information"); - printf("\n"); - printf("\nby John Walker -- http://www.fourmilab.ch/"); - printf("\nVersion %s\n", VERSION); - printf("\nThis program is in the public domain.\n"); - printf("\n"); -#ifdef CHECK_HARDWARE_PROPERTIES -#ifdef HIGHFIRST - { uint32 t = 0x12345678; - - if (*((char *) &t) == 0x78) { - fprintf(stderr, "** Note. md5 is not optimally configured for use on this\n"); - fprintf(stderr, " machine. This is a little-endian (least significant byte\n"); - fprintf(stderr, " first in memory) architecture, yet md5 has been built with the\n"); - fprintf(stderr, " symbol HIGHFIRST defined in md5.h, which includes code which\n"); - fprintf(stderr, " supports both big- and little-endian machines. Modifying\n"); - fprintf(stderr, " md5.h to undefine HIGHFIRST for this platform will make md5\n"); - fprintf(stderr, " run faster on it.\n"); - } - } -#endif -#endif - return 0; - - case 'V': /* -V -- Print version number */ - printf("%s\n", VERSION); - return 0; - } - } else { - break; - } - } - - if (cdata && (i < argc)) { - fprintf(stderr, "Cannot specify both -d option and input file.\n"); - return 2; - } - - if ((i >= argc) && (f == 0)) { - f++; - } - - for (; (f > 0) || (i < argc); i++) { - if ((!cdata) && (f > 0)) { - ifname = "-"; - } else { - ifname = argv[i]; - } - f = 0; - - if (!cdata) { - int opened = FALSE; - - /* If the data weren't supplied on the command line with - the "-d" option, read it now from the input file. */ - - if (strcmp(ifname, "-") != 0) { - if ((in = fopen(ifname, "rb")) == NULL) { - fprintf(stderr, "Cannot open input file %s\n", ifname); - return 2; - } - opened = TRUE; - } else { - in = stdin; - } -#ifdef _WIN32 - - /** Warning! On systems which distinguish text mode and - binary I/O (MS-DOS, Macintosh, etc.) the modes in the open - statement for "in" should have forced the input file into - binary mode. But what if we're reading from standard - input? Well, then we need to do a system-specific tweak - to make sure it's in binary mode. While we're at it, - let's set the mode to binary regardless of however fopen - set it. - - The following code, conditional on _WIN32, sets binary - mode using the method prescribed by Microsoft Visual C 7.0 - ("Monkey C"); this may require modification if you're - using a different compiler or release of Monkey C. If - you're porting this code to a different system which - distinguishes text and binary files, you'll need to add - the equivalent call for that system. */ - - _setmode(_fileno(in), _O_BINARY); -#endif - - MD5Init(&md5c); - while ((j = (int) fread(buffer, 1, sizeof buffer, in)) > 0) { - MD5Update(&md5c, buffer, (unsigned) j); - } - - if (opened) { - fclose(in); - } - } - MD5Final(signature, &md5c); - - if (docheck) { - docheck = 0; - for (j = 0; j < sizeof signature; j++) { - if (signature[j] != csig[j]) { - docheck = 1; - break; - } - } - if (i < (argc - 1)) { - fprintf(stderr, "Only one file may be tested with the -c option.\n"); - return 2; - } - } else { - for (j = 0; j < sizeof signature; j++) { - fprintf(out, hexfmt, signature[j]); - } - if ((!cdata) && showfile) { - fprintf(out, " %s", (in == stdin) ? "-" : ifname); - } - fprintf(out, "\n"); - } - } - - return docheck; -} diff --git a/PowerEditor/installer/externalTools/md5.src/md5.c b/PowerEditor/installer/externalTools/md5.src/md5.c deleted file mode 100644 index ade83890..00000000 --- a/PowerEditor/installer/externalTools/md5.src/md5.c +++ /dev/null @@ -1,255 +0,0 @@ -/* - * This code implements the MD5 message-digest algorithm. - * The algorithm is due to Ron Rivest. This code was - * written by Colin Plumb in 1993, no copyright is claimed. - * This code is in the public domain; do with it what you wish. - * - * Equivalent code is available from RSA Data Security, Inc. - * This code has been tested against that, and is equivalent, - * except that you don't need to include two pages of legalese - * with every copy. - * - * To compute the message digest of a chunk of bytes, declare an - * MD5Context structure, pass it to MD5Init, call MD5Update as - * needed on buffers full of bytes, and then call MD5Final, which - * will fill a supplied 16-byte array with the digest. - */ - -/* Brutally hacked by John Walker back from ANSI C to K&R (no - prototypes) to maintain the tradition that Netfone will compile - with Sun's original "cc". */ - -#include /* for memcpy() */ -#include "md5.h" - -#ifndef HIGHFIRST -#define byteReverse(buf, len) /* Nothing */ -#else -/* - * Note: this code is harmless on little-endian machines. - */ -void byteReverse(buf, longs) - unsigned char *buf; unsigned longs; -{ - uint32 t; - do { - t = (uint32) ((unsigned) buf[3] << 8 | buf[2]) << 16 | - ((unsigned) buf[1] << 8 | buf[0]); - *(uint32 *) buf = t; - buf += 4; - } while (--longs); -} -#endif - -/* - * Start MD5 accumulation. Set bit count to 0 and buffer to mysterious - * initialization constants. - */ -void MD5Init(ctx) - struct MD5Context *ctx; -{ - ctx->buf[0] = 0x67452301; - ctx->buf[1] = 0xefcdab89; - ctx->buf[2] = 0x98badcfe; - ctx->buf[3] = 0x10325476; - - ctx->bits[0] = 0; - ctx->bits[1] = 0; -} - -/* - * Update context to reflect the concatenation of another buffer full - * of bytes. - */ -void MD5Update(ctx, buf, len) - struct MD5Context *ctx; unsigned char *buf; unsigned len; -{ - uint32 t; - - /* Update bitcount */ - - t = ctx->bits[0]; - if ((ctx->bits[0] = t + ((uint32) len << 3)) < t) - ctx->bits[1]++; /* Carry from low to high */ - ctx->bits[1] += len >> 29; - - t = (t >> 3) & 0x3f; /* Bytes already in shsInfo->data */ - - /* Handle any leading odd-sized chunks */ - - if (t) { - unsigned char *p = (unsigned char *) ctx->in + t; - - t = 64 - t; - if (len < t) { - memcpy(p, buf, len); - return; - } - memcpy(p, buf, t); - byteReverse(ctx->in, 16); - MD5Transform(ctx->buf, (uint32 *) ctx->in); - buf += t; - len -= t; - } - /* Process data in 64-byte chunks */ - - while (len >= 64) { - memcpy(ctx->in, buf, 64); - byteReverse(ctx->in, 16); - MD5Transform(ctx->buf, (uint32 *) ctx->in); - buf += 64; - len -= 64; - } - - /* Handle any remaining bytes of data. */ - - memcpy(ctx->in, buf, len); -} - -/* - * Final wrapup - pad to 64-byte boundary with the bit pattern - * 1 0* (64-bit count of bits processed, MSB-first) - */ -void MD5Final(digest, ctx) - unsigned char digest[16]; struct MD5Context *ctx; -{ - unsigned count; - unsigned char *p; - - /* Compute number of bytes mod 64 */ - count = (ctx->bits[0] >> 3) & 0x3F; - - /* Set the first char of padding to 0x80. This is safe since there is - always at least one byte free */ - p = ctx->in + count; - *p++ = 0x80; - - /* Bytes of padding needed to make 64 bytes */ - count = 64 - 1 - count; - - /* Pad out to 56 mod 64 */ - if (count < 8) { - /* Two lots of padding: Pad the first block to 64 bytes */ - memset(p, 0, count); - byteReverse(ctx->in, 16); - MD5Transform(ctx->buf, (uint32 *) ctx->in); - - /* Now fill the next block with 56 bytes */ - memset(ctx->in, 0, 56); - } else { - /* Pad block to 56 bytes */ - memset(p, 0, count - 8); - } - byteReverse(ctx->in, 14); - - /* Append length in bits and transform */ - ((uint32 *) ctx->in)[14] = ctx->bits[0]; - ((uint32 *) ctx->in)[15] = ctx->bits[1]; - - MD5Transform(ctx->buf, (uint32 *) ctx->in); - byteReverse((unsigned char *) ctx->buf, 4); - memcpy(digest, ctx->buf, 16); - memset(ctx, 0, sizeof(ctx)); /* In case it's sensitive */ -} - - -/* The four core functions - F1 is optimized somewhat */ - -/* #define F1(x, y, z) (x & y | ~x & z) */ -#define F1(x, y, z) (z ^ (x & (y ^ z))) -#define F2(x, y, z) F1(z, x, y) -#define F3(x, y, z) (x ^ y ^ z) -#define F4(x, y, z) (y ^ (x | ~z)) - -/* This is the central step in the MD5 algorithm. */ -#define MD5STEP(f, w, x, y, z, data, s) \ - ( w += f(x, y, z) + data, w = w<>(32-s), w += x ) - -/* - * The core of the MD5 algorithm, this alters an existing MD5 hash to - * reflect the addition of 16 longwords of new data. MD5Update blocks - * the data and converts bytes into longwords for this routine. - */ -void MD5Transform(buf, in) - uint32 buf[4]; uint32 in[16]; -{ - register uint32 a, b, c, d; - - a = buf[0]; - b = buf[1]; - c = buf[2]; - d = buf[3]; - - MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7); - MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12); - MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17); - MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22); - MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7); - MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12); - MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17); - MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22); - MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7); - MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12); - MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17); - MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22); - MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7); - MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12); - MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17); - MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22); - - MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5); - MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9); - MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14); - MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20); - MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5); - MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9); - MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14); - MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20); - MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5); - MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9); - MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14); - MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20); - MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5); - MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9); - MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14); - MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20); - - MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4); - MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11); - MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16); - MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23); - MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4); - MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11); - MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16); - MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23); - MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4); - MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11); - MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16); - MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23); - MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4); - MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11); - MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16); - MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23); - - MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6); - MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10); - MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15); - MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21); - MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6); - MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10); - MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15); - MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21); - MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6); - MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10); - MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15); - MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21); - MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6); - MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10); - MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15); - MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21); - - buf[0] += a; - buf[1] += b; - buf[2] += c; - buf[3] += d; -} diff --git a/PowerEditor/installer/externalTools/md5.src/md5.h b/PowerEditor/installer/externalTools/md5.src/md5.h deleted file mode 100644 index 4c048cf5..00000000 --- a/PowerEditor/installer/externalTools/md5.src/md5.h +++ /dev/null @@ -1,54 +0,0 @@ -#ifndef MD5_H -#define MD5_H - -/* The following tests optimise behaviour on little-endian - machines, where there is no need to reverse the byte order - of 32 bit words in the MD5 computation. By default, - HIGHFIRST is defined, which indicates we're running on a - big-endian (most significant byte first) machine, on which - the byteReverse function in md5.c must be invoked. However, - byteReverse is coded in such a way that it is an identity - function when run on a little-endian machine, so calling it - on such a platform causes no harm apart from wasting time. - If the platform is known to be little-endian, we speed - things up by undefining HIGHFIRST, which defines - byteReverse as a null macro. Doing things in this manner - insures we work on new platforms regardless of their byte - order. */ - -#define HIGHFIRST - -#ifdef __i386__ -#undef HIGHFIRST -#endif - -/* On machines where "long" is 64 bits, we need to declare - uint32 as something guaranteed to be 32 bits. */ - -#ifdef __alpha -typedef unsigned int uint32; -#else -typedef unsigned long uint32; -#endif - -struct MD5Context { - uint32 buf[4]; - uint32 bits[2]; - unsigned char in[64]; -}; - -extern void MD5Init(); -extern void MD5Update(); -extern void MD5Final(); -extern void MD5Transform(); - -/* - * This is needed to make RSAREF happy on some MS-DOS compilers. - */ -typedef struct MD5Context MD5_CTX; - -/* Define CHECK_HARDWARE_PROPERTIES to have main,c verify - byte order and uint32 settings. */ -#define CHECK_HARDWARE_PROPERTIES - -#endif /* !MD5_H */ diff --git a/PowerEditor/installer/externalTools/md5.src/md5.png b/PowerEditor/installer/externalTools/md5.src/md5.png deleted file mode 100644 index c2379b13..00000000 Binary files a/PowerEditor/installer/externalTools/md5.src/md5.png and /dev/null differ diff --git a/PowerEditor/installer/externalTools/md5.src/md5.sln b/PowerEditor/installer/externalTools/md5.src/md5.sln deleted file mode 100644 index 24bf7e21..00000000 --- a/PowerEditor/installer/externalTools/md5.src/md5.sln +++ /dev/null @@ -1,21 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 7.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "md5", "md5.vcproj", "{08715914-9160-4A19-997E-237020B3433B}" -EndProject -Global - GlobalSection(SolutionConfiguration) = preSolution - ConfigName.0 = Debug - ConfigName.1 = Release - EndGlobalSection - GlobalSection(ProjectDependencies) = postSolution - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {08715914-9160-4A19-997E-237020B3433B}.Debug.ActiveCfg = Debug|Win32 - {08715914-9160-4A19-997E-237020B3433B}.Debug.Build.0 = Debug|Win32 - {08715914-9160-4A19-997E-237020B3433B}.Release.ActiveCfg = Release|Win32 - {08715914-9160-4A19-997E-237020B3433B}.Release.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff --git a/PowerEditor/installer/externalTools/md5.src/md5.vcproj b/PowerEditor/installer/externalTools/md5.src/md5.vcproj deleted file mode 100644 index 52ea7708..00000000 --- a/PowerEditor/installer/externalTools/md5.src/md5.vcproj +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/PowerEditor/installer/externalTools/md5.src/md5s.png b/PowerEditor/installer/externalTools/md5.src/md5s.png deleted file mode 100644 index b10f718f..00000000 Binary files a/PowerEditor/installer/externalTools/md5.src/md5s.png and /dev/null differ diff --git a/PowerEditor/installer/externalTools/md5.src/rfc1321.html b/PowerEditor/installer/externalTools/md5.src/rfc1321.html deleted file mode 100644 index 39b6beab..00000000 --- a/PowerEditor/installer/externalTools/md5.src/rfc1321.html +++ /dev/null @@ -1,1093 +0,0 @@ - - - - -The MD5 Message-Digest Algorithm - - - - - - - - - - - - - - -
-MD5 Main Page -
-

The MD5 Message-Digest Algorithm

-

-Network Working Group
-Request for Comments: 1321
-
-R. Rivest
-MIT Laboratory for Computer Science
-and RSA Data Security, Inc.
-April 1992 -

-
-
 
- -
- -

Status of this Memo

- - This memo provides information for the Internet community. It does - not specify an Internet standard. Distribution of this memo is - unlimited. - -

Acknowlegements

- - We would like to thank Don Coppersmith, Burt Kaliski, Ralph Merkle, - David Chaum, and Noam Nisan for numerous helpful comments and - suggestions. - -

Table of Contents

- -
-
1. Executive Summary
-
2. Terminology and Notation
-
3. MD5 Algorithm Description
-
4. Summary
-
5. Differences Between MD4 and MD5
-
References
-
APPENDIX A - Reference Implementation
-
Security Considerations
-
Author's Address
-
- -

1. Executive Summary

- - This document describes the MD5 message-digest algorithm. The - algorithm takes as input a message of arbitrary length and produces - as output a 128-bit "fingerprint" or "message digest" of the input. - It is conjectured that it is computationally infeasible to produce - two messages having the same message digest, or to produce any - message having a given prespecified target message digest. The MD5 - algorithm is intended for digital signature applications, where a - large file must be "compressed" in a secure manner before being - encrypted with a private (secret) key under a public-key cryptosystem - such as RSA. -

- - The MD5 algorithm is designed to be quite fast on 32-bit machines. In - addition, the MD5 algorithm does not require any large substitution - tables; the algorithm can be coded quite compactly. - -

- - The MD5 algorithm is an extension of the MD4 message-digest algorithm - [1,2]. MD5 is slightly slower than MD4, but is more "conservative" in - design. MD5 was designed because it was felt that MD4 was perhaps - being adopted for use more quickly than justified by the existing - critical review; because MD4 was designed to be exceptionally fast, - it is "at the edge" in terms of risking successful cryptanalytic - attack. MD5 backs off a bit, giving up a little in speed for a much - greater likelihood of ultimate security. It incorporates some - suggestions made by various reviewers, and contains additional - optimizations. The MD5 algorithm is being placed in the public domain - for review and possible adoption as a standard. - -

- - For OSI-based applications, MD5's object identifier is - -

- - md5 OBJECT IDENTIFIER ::=
-    iso(1) member-body(2) US(840) rsadsi(113549) digestAlgorithm(2) 5} -
- - - In the X.509 type AlgorithmIdentifier [3], the parameters for MD5 - should have type NULL. - -

2. Terminology and Notation

- - In this document a "word" is a 32-bit quantity and a "byte" is an - eight-bit quantity. A sequence of bits can be interpreted in a - natural manner as a sequence of bytes, where each consecutive group - of eight bits is interpreted as a byte with the high-order (most - significant) bit of each byte listed first. Similarly, a sequence of - bytes can be interpreted as a sequence of 32-bit words, where each - consecutive group of four bytes is interpreted as a word with the - low-order (least significant) byte given first. - -

- - Let x_i denote "x sub i". If the subscript is an expression, we - surround it in braces, as in x_{i+1}. Similarly, we use ^ for - superscripts (exponentiation), so that x^i denotes x to the i-th - power. - -

- - Let the symbol "+" denote addition of words (i.e., modulo-2^32 - addition). Let X <<< s denote the 32-bit value obtained by circularly - shifting (rotating) X left by s bit positions. Let not(X) denote the - bit-wise complement of X, and let X v Y denote the bit-wise OR of X - and Y. Let X xor Y denote the bit-wise XOR of X and Y, and let XY - denote the bit-wise AND of X and Y. - -

3. MD5 Algorithm Description

- - We begin by supposing that we have a b-bit message as input, and that - we wish to find its message digest. Here b is an arbitrary - nonnegative integer; b may be zero, it need not be a multiple of - eight, and it may be arbitrarily large. We imagine the bits of the - message written down as follows: - -
- m_0 m_1 ... m_{b-1} -
- - The following five steps are performed to compute the message digest - of the message. - -

3.1 Step 1. Append Padding Bits

- - The message is "padded" (extended) so that its length (in bits) is - congruent to 448, modulo 512. That is, the message is extended so - that it is just 64 bits shy of being a multiple of 512 bits long. - Padding is always performed, even if the length of the message is - already congruent to 448, modulo 512. - -

- - Padding is performed as follows: a single "1" bit is appended to the - message, and then "0" bits are appended so that the length in bits of - the padded message becomes congruent to 448, modulo 512. In all, at - least one bit and at most 512 bits are appended. - -

3.2 Step 2. Append Length

- - A 64-bit representation of b (the length of the message before the - padding bits were added) is appended to the result of the previous - step. In the unlikely event that b is greater than 2^64, then only - the low-order 64 bits of b are used. (These bits are appended as two - 32-bit words and appended low-order word first in accordance with the - previous conventions.) - -

- - At this point the resulting message (after padding with bits and with - b) has a length that is an exact multiple of 512 bits. Equivalently, - this message has a length that is an exact multiple of 16 (32-bit) - words. Let M[0 ... N-1] denote the words of the resulting message, - where N is a multiple of 16. - -

3.3 Step 3. Initialize MD Buffer

- - A four-word buffer (A,B,C,D) is used to compute the message digest. - Here each of A, B, C, D is a 32-bit register. These registers are - initialized to the following values in hexadecimal, low-order bytes - first): - -
- word A: 01 23 45 67
- word B: 89 ab cd ef
- word C: fe dc ba 98
- word D: 76 54 32 10 -
- -

3.4 Step 4. Process Message in 16-Word Blocks

- - We first define four auxiliary functions that each take as input - three 32-bit words and produce as output one 32-bit word. - -
- F(X,Y,Z) = XY v not(X) Z
- G(X,Y,Z) = XZ v Y not(Z)
- H(X,Y,Z) = X xor Y xor Z
- I(X,Y,Z) = Y xor (X v not(Z)) -
- - In each bit position F acts as a conditional: if X then Y else Z. - The function F could have been defined using + instead of v since XY - and not(X)Z will never have 1's in the same bit position.) It is - interesting to note that if the bits of X, Y, and Z are independent - and unbiased, the each bit of F(X,Y,Z) will be independent and - unbiased. - -

- - The functions G, H, and I are similar to the function F, in that they - act in "bitwise parallel" to produce their output from the bits of X, - Y, and Z, in such a manner that if the corresponding bits of X, Y, - and Z are independent and unbiased, then each bit of G(X,Y,Z), - H(X,Y,Z), and I(X,Y,Z) will be independent and unbiased. Note that - the function H is the bit-wise "xor" or "parity" function of its - inputs. - -

- - This step uses a 64-element table T[1 ... 64] constructed from the - sine function. Let T[i] denote the i-th element of the table, which - is equal to the integer part of 4294967296 times abs(sin(i)), where i - is in radians. The elements of the table are given in the appendix. - -

- - Do the following: - -

- -

-   /* Process each 16-word block. */
-   For i = 0 to N/16-1 do
-
-     /* Copy block i into X. */
-     For j = 0 to 15 do
-       Set X[j] to M[i*16+j].
-     end /* of loop on j */
-
-     /* Save A as AA, B as BB, C as CC, and D as DD. */
-     AA = A
-     BB = B
-     CC = C
-     DD = D
-
-     /* Round 1. */
-     /* Let [abcd k s i] denote the operation
-          a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */
-     /* Do the following 16 operations. */
-     [ABCD  0  7  1]  [DABC  1 12  2]  [CDAB  2 17  3]  [BCDA  3 22  4]
-     [ABCD  4  7  5]  [DABC  5 12  6]  [CDAB  6 17  7]  [BCDA  7 22  8]
-     [ABCD  8  7  9]  [DABC  9 12 10]  [CDAB 10 17 11]  [BCDA 11 22 12]
-     [ABCD 12  7 13]  [DABC 13 12 14]  [CDAB 14 17 15]  [BCDA 15 22 16]
-
-     /* Round 2. */
-     /* Let [abcd k s i] denote the operation
-          a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */
-     /* Do the following 16 operations. */
-     [ABCD  1  5 17]  [DABC  6  9 18]  [CDAB 11 14 19]  [BCDA  0 20 20]
-     [ABCD  5  5 21]  [DABC 10  9 22]  [CDAB 15 14 23]  [BCDA  4 20 24]
-     [ABCD  9  5 25]  [DABC 14  9 26]  [CDAB  3 14 27]  [BCDA  8 20 28]
-     [ABCD 13  5 29]  [DABC  2  9 30]  [CDAB  7 14 31]  [BCDA 12 20 32]
-
-     /* Round 3. */
-     /* Let [abcd k s t] denote the operation
-          a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */
-     /* Do the following 16 operations. */
-     [ABCD  5  4 33]  [DABC  8 11 34]  [CDAB 11 16 35]  [BCDA 14 23 36]
-     [ABCD  1  4 37]  [DABC  4 11 38]  [CDAB  7 16 39]  [BCDA 10 23 40]
-     [ABCD 13  4 41]  [DABC  0 11 42]  [CDAB  3 16 43]  [BCDA  6 23 44]
-     [ABCD  9  4 45]  [DABC 12 11 46]  [CDAB 15 16 47]  [BCDA  2 23 48]
-
-     /* Round 4. */
-     /* Let [abcd k s t] denote the operation
-          a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */
-     /* Do the following 16 operations. */
-     [ABCD  0  6 49]  [DABC  7 10 50]  [CDAB 14 15 51]  [BCDA  5 21 52]
-     [ABCD 12  6 53]  [DABC  3 10 54]  [CDAB 10 15 55]  [BCDA  1 21 56]
-     [ABCD  8  6 57]  [DABC 15 10 58]  [CDAB  6 15 59]  [BCDA 13 21 60]
-     [ABCD  4  6 61]  [DABC 11 10 62]  [CDAB  2 15 63]  [BCDA  9 21 64]
-
-     /* Then perform the following additions. (That is increment each
-        of the four registers by the value it had before this block
-        was started.) */
-     A = A + AA
-     B = B + BB
-     C = C + CC
-     D = D + DD
-
-   end /* of loop on i */
-
- -

3.5 Step 5. Output

- - The message digest produced as output is A, B, C, D. That is, we - begin with the low-order byte of A, and end with the high-order byte - of D. - -

- - This completes the description of MD5. A reference implementation in - C is given in the appendix. - -

4. Summary

- - The MD5 message-digest algorithm is simple to implement, and provides - a "fingerprint" or message digest of a message of arbitrary length. - It is conjectured that the difficulty of coming up with two messages - having the same message digest is on the order of 2^64 operations, - and that the difficulty of coming up with any message having a given - message digest is on the order of 2^128 operations. The MD5 algorithm - has been carefully scrutinized for weaknesses. It is, however, a - relatively new algorithm and further security analysis is of course - justified, as is the case with any new proposal of this sort. - -

5. Differences Between MD4 and MD5

- - The following are the differences between MD4 and MD5: - -

- -

    -
  1. A fourth round has been added.
  2. - -
  3. Each step now has a unique additive constant.
  4. - -
  5. The function g in round 2 was changed from (XY v XZ v YZ) to - (XZ v Y not(Z)) to make g less symmetric.
  6. - -
  7. Each step now adds in the result of the previous step. This - promotes a faster "avalanche effect".
  8. - -
  9. The order in which input words are accessed in rounds 2 and - 3 is changed, to make these patterns less like each other.
  10. - -
  11. The shift amounts in each round have been approximately - optimized, to yield a faster "avalanche effect." The shifts in - different rounds are distinct.
  12. -
- -

References

- -
-
[1]
Rivest, R., "The MD4 Message Digest Algorithm", RFC 1320, MIT and - RSA Data Security, Inc., April 1992.
- -
[2]
Rivest, R., "The MD4 message digest algorithm", in A.J. Menezes - and S.A. Vanstone, editors, Advances in Cryptology - CRYPTO '90 - Proceedings, pages 303-311, Springer-Verlag, 1991.
- -
[3]
CCITT Recommendation X.509 (1988), "The Directory - - Authentication Framework."
-
- -

APPENDIX A - Reference Implementation

- - This appendix contains the following files taken from RSAREF: A - Cryptographic Toolkit for Privacy-Enhanced Mail: - -
- global.h -- global header file
- md5.h -- header file for MD5
- md5c.c -- source code for MD5 -
- - For more information on RSAREF, send email - to <rsaref@rsa.com>. - -

- - The appendix also includes the following file: - -

- mddriver.c -- test driver for MD2, MD4 and MD5 -
- - The driver compiles for MD5 by default but can compile for MD2 or MD4 - if the symbol MD is defined on the C compiler command line as 2 or 4. - -

- - The implementation is portable and should work on many different - plaforms. However, it is not difficult to optimize the - implementation on particular platforms, an exercise left to the - reader. For example, on "little-endian" platforms where the - lowest-addressed byte in a 32-bit word is the least significant and - there are no alignment restrictions, the call to Decode in - MD5Transform can be replaced with a typecast. - -

A.1 global.h

- -
-/* GLOBAL.H - RSAREF types and constants
- */
-
-/* PROTOTYPES should be set to one if and only if the compiler supports
-  function argument prototyping.
-The following makes PROTOTYPES default to 0 if it has not already
-  been defined with C compiler flags.
- */
-#ifndef PROTOTYPES
-#define PROTOTYPES 0
-#endif
-
-/* POINTER defines a generic pointer type */
-typedef unsigned char *POINTER;
-
-/* UINT2 defines a two byte word */
-typedef unsigned short int UINT2;
-
-/* UINT4 defines a four byte word */
-typedef unsigned long int UINT4;
-
-/* PROTO_LIST is defined depending on how PROTOTYPES is defined above.
-If using PROTOTYPES, then PROTO_LIST returns the list, otherwise it
-  returns an empty list.
- */
-#if PROTOTYPES
-#define PROTO_LIST(list) list
-#else
-#define PROTO_LIST(list) ()
-#endif
-
- -

A.2 md5.h

- -
-/* MD5.H - header file for MD5C.C
- */
-
-/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
-rights reserved.
-
-License to copy and use this software is granted provided that it
-is identified as the "RSA Data Security, Inc. MD5 Message-Digest
-Algorithm" in all material mentioning or referencing this software
-or this function.
-
-License is also granted to make and use derivative works provided
-that such works are identified as "derived from the RSA Data
-Security, Inc. MD5 Message-Digest Algorithm" in all material
-mentioning or referencing the derived work.
-
-RSA Data Security, Inc. makes no representations concerning either
-the merchantability of this software or the suitability of this
-software for any particular purpose. It is provided "as is"
-without express or implied warranty of any kind.
-
-These notices must be retained in any copies of any part of this
-documentation and/or software.
- */
-
-/* MD5 context. */
-typedef struct {
-  UINT4 state[4];                                   /* state (ABCD) */
-  UINT4 count[2];        /* number of bits, modulo 2^64 (lsb first) */
-  unsigned char buffer[64];                         /* input buffer */
-} MD5_CTX;
-
-void MD5Init PROTO_LIST ((MD5_CTX *));
-void MD5Update PROTO_LIST
-  ((MD5_CTX *, unsigned char *, unsigned int));
-void MD5Final PROTO_LIST ((unsigned char [16], MD5_CTX *));
-
- -

A.3 md5c.c

- -
-
-/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm
- */
-
-/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
-rights reserved.
-
-License to copy and use this software is granted provided that it
-is identified as the "RSA Data Security, Inc. MD5 Message-Digest
-Algorithm" in all material mentioning or referencing this software
-or this function.
-
-License is also granted to make and use derivative works provided
-that such works are identified as "derived from the RSA Data
-Security, Inc. MD5 Message-Digest Algorithm" in all material
-mentioning or referencing the derived work.
-
-RSA Data Security, Inc. makes no representations concerning either
-the merchantability of this software or the suitability of this
-software for any particular purpose. It is provided "as is"
-without express or implied warranty of any kind.
-
-These notices must be retained in any copies of any part of this
-documentation and/or software.
- */
-
-#include "global.h"
-#include "md5.h"
-
-/* Constants for MD5Transform routine.
- */
-
-#define S11 7
-#define S12 12
-#define S13 17
-#define S14 22
-#define S21 5
-#define S22 9
-#define S23 14
-#define S24 20
-#define S31 4
-#define S32 11
-#define S33 16
-#define S34 23
-#define S41 6
-#define S42 10
-#define S43 15
-#define S44 21
-
-static void MD5Transform PROTO_LIST ((UINT4 [4], unsigned char [64]));
-static void Encode PROTO_LIST
-  ((unsigned char *, UINT4 *, unsigned int));
-static void Decode PROTO_LIST
-  ((UINT4 *, unsigned char *, unsigned int));
-static void MD5_memcpy PROTO_LIST ((POINTER, POINTER, unsigned int));
-static void MD5_memset PROTO_LIST ((POINTER, int, unsigned int));
-
-static unsigned char PADDING[64] = {
-  0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-/* F, G, H and I are basic MD5 functions.
- */
-#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
-#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
-#define H(x, y, z) ((x) ^ (y) ^ (z))
-#define I(x, y, z) ((y) ^ ((x) | (~z)))
-
-/* ROTATE_LEFT rotates x left n bits.
- */
-#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
-
-/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
-Rotation is separate from addition to prevent recomputation.
- */
-#define FF(a, b, c, d, x, s, ac) { \
- (a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
-  }
-#define GG(a, b, c, d, x, s, ac) { \
- (a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
-  }
-#define HH(a, b, c, d, x, s, ac) { \
- (a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
-  }
-#define II(a, b, c, d, x, s, ac) { \
- (a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
-  }
-
-/* MD5 initialization. Begins an MD5 operation, writing a new context.
- */
-void MD5Init (context)
-MD5_CTX *context;                                        /* context */
-{
-  context->count[0] = context->count[1] = 0;
-  /* Load magic initialization constants.
-*/
-  context->state[0] = 0x67452301;
-  context->state[1] = 0xefcdab89;
-  context->state[2] = 0x98badcfe;
-  context->state[3] = 0x10325476;
-}
-
-/* MD5 block update operation. Continues an MD5 message-digest
-  operation, processing another message block, and updating the
-  context.
- */
-void MD5Update (context, input, inputLen)
-MD5_CTX *context;                                        /* context */
-unsigned char *input;                                /* input block */
-unsigned int inputLen;                     /* length of input block */
-{
-  unsigned int i, index, partLen;
-
-  /* Compute number of bytes mod 64 */
-  index = (unsigned int)((context->count[0] >> 3) & 0x3F);
-
-  /* Update number of bits */
-  if ((context->count[0] += ((UINT4)inputLen << 3))
-   < ((UINT4)inputLen << 3))
- context->count[1]++;
-  context->count[1] += ((UINT4)inputLen >> 29);
-
-  partLen = 64 - index;
-
-  /* Transform as many times as possible.
-*/
-  if (inputLen >= partLen) {
- MD5_memcpy
-   ((POINTER)&context->buffer[index], (POINTER)input, partLen);
- MD5Transform (context->state, context->buffer);
-
- for (i = partLen; i + 63 < inputLen; i += 64)
-   MD5Transform (context->state, &input[i]);
-
- index = 0;
-  }
-  else
- i = 0;
-
-  /* Buffer remaining input */
-  MD5_memcpy
- ((POINTER)&context->buffer[index], (POINTER)&input[i],
-  inputLen-i);
-}
-
-/* MD5 finalization. Ends an MD5 message-digest operation, writing the
-  the message digest and zeroizing the context.
- */
-void MD5Final (digest, context)
-unsigned char digest[16];                         /* message digest */
-MD5_CTX *context;                                       /* context */
-{
-  unsigned char bits[8];
-  unsigned int index, padLen;
-
-  /* Save number of bits */
-  Encode (bits, context->count, 8);
-
-  /* Pad out to 56 mod 64.
-*/
-  index = (unsigned int)((context->count[0] >> 3) & 0x3f);
-  padLen = (index < 56) ? (56 - index) : (120 - index);
-  MD5Update (context, PADDING, padLen);
-
-  /* Append length (before padding) */
-  MD5Update (context, bits, 8);
-
-  /* Store state in digest */
-  Encode (digest, context->state, 16);
-
-  /* Zeroize sensitive information.
-*/
-  MD5_memset ((POINTER)context, 0, sizeof (*context));
-}
-
-/* MD5 basic transformation. Transforms state based on block.
- */
-static void MD5Transform (state, block)
-UINT4 state[4];
-unsigned char block[64];
-{
-  UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];
-
-  Decode (x, block, 64);
-
-  /* Round 1 */
-  FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */
-  FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */
-  FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */
-  FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */
-  FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */
-  FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */
-  FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */
-  FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */
-  FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */
-  FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */
-  FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
-  FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
-  FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
-  FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
-  FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
-  FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
-
- /* Round 2 */
-  GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */
-  GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */
-  GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
-  GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */
-  GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */
-  GG (d, a, b, c, x[10], S22,  0x2441453); /* 22 */
-  GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
-  GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */
-  GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */
-  GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
-  GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */
-  GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */
-  GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
-  GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */
-  GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */
-  GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
-
-  /* Round 3 */
-  HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */
-  HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */
-  HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
-  HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
-  HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */
-  HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */
-  HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */
-  HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
-  HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
-  HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */
-  HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */
-  HH (b, c, d, a, x[ 6], S34,  0x4881d05); /* 44 */
-  HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */
-  HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
-  HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
-  HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */
-
-  /* Round 4 */
-  II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */
-  II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */
-  II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
-  II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */
-  II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
-  II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */
-  II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
-  II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */
-  II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */
-  II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
-  II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */
-  II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
-  II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */
-  II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
-  II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */
-  II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */
-
-  state[0] += a;
-  state[1] += b;
-  state[2] += c;
-  state[3] += d;
-
-  /* Zeroize sensitive information.
- */
-  MD5_memset ((POINTER)x, 0, sizeof (x));
-}
-
-/* Encodes input (UINT4) into output (unsigned char). Assumes len is
-  a multiple of 4.
- */
-static void Encode (output, input, len)
-unsigned char *output;
-UINT4 *input;
-unsigned int len;
-{
-  unsigned int i, j;
-
-  for (i = 0, j = 0; j < len; i++, j += 4) {
- output[j] = (unsigned char)(input[i] & 0xff);
- output[j+1] = (unsigned char)((input[i] >> 8) & 0xff);
- output[j+2] = (unsigned char)((input[i] >> 16) & 0xff);
- output[j+3] = (unsigned char)((input[i] >> 24) & 0xff);
-  }
-}
-
-/* Decodes input (unsigned char) into output (UINT4). Assumes len is
-  a multiple of 4.
- */
-static void Decode (output, input, len)
-UINT4 *output;
-unsigned char *input;
-unsigned int len;
-{
-  unsigned int i, j;
-
-  for (i = 0, j = 0; j < len; i++, j += 4)
- output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) |
-   (((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24);
-}
-
-/* Note: Replace "for loop" with standard memcpy if possible.
- */
-
-static void MD5_memcpy (output, input, len)
-POINTER output;
-POINTER input;
-unsigned int len;
-{
-  unsigned int i;
-
-  for (i = 0; i < len; i++)
- output[i] = input[i];
-}
-
-/* Note: Replace "for loop" with standard memset if possible.
- */
-static void MD5_memset (output, value, len)
-POINTER output;
-int value;
-unsigned int len;
-{
-  unsigned int i;
-
-  for (i = 0; i < len; i++)
- ((char *)output)[i] = (char)value;
-}
-
- -

A.4 mddriver.c

- -
-/* MDDRIVER.C - test driver for MD2, MD4 and MD5
- */
-
-/* Copyright (C) 1990-2, RSA Data Security, Inc. Created 1990. All
-rights reserved.
-
-RSA Data Security, Inc. makes no representations concerning either
-the merchantability of this software or the suitability of this
-software for any particular purpose. It is provided "as is"
-without express or implied warranty of any kind.
-
-These notices must be retained in any copies of any part of this
-documentation and/or software.
- */
-
-/* The following makes MD default to MD5 if it has not already been
-  defined with C compiler flags.
- */
-#ifndef MD
-#define MD MD5
-#endif
-
-#include <stdio.h>
-#include <time.h>
-#include <string.h>
-#include "global.h"
-#if MD == 2
-#include "md2.h"
-#endif
-#if MD == 4
-#include "md4.h"
-#endif
-#if MD == 5
-#include "md5.h"
-#endif
-
-/* Length of test block, number of test blocks.
- */
-#define TEST_BLOCK_LEN 1000
-#define TEST_BLOCK_COUNT 1000
-
-static void MDString PROTO_LIST ((char *));
-static void MDTimeTrial PROTO_LIST ((void));
-static void MDTestSuite PROTO_LIST ((void));
-static void MDFile PROTO_LIST ((char *));
-static void MDFilter PROTO_LIST ((void));
-static void MDPrint PROTO_LIST ((unsigned char [16]));
-
-#if MD == 2
-#define MD_CTX MD2_CTX
-#define MDInit MD2Init
-#define MDUpdate MD2Update
-#define MDFinal MD2Final
-#endif
-#if MD == 4
-#define MD_CTX MD4_CTX
-#define MDInit MD4Init
-#define MDUpdate MD4Update
-#define MDFinal MD4Final
-#endif
-#if MD == 5
-#define MD_CTX MD5_CTX
-#define MDInit MD5Init
-#define MDUpdate MD5Update
-#define MDFinal MD5Final
-#endif
-
-/* Main driver.
-
-Arguments (may be any combination):
-  -sstring - digests string
-  -t       - runs time trial
-  -x       - runs test script
-  filename - digests file
-  (none)   - digests standard input
- */
-int main (argc, argv)
-int argc;
-char *argv[];
-{
-  int i;
-
-  if (argc > 1)
- for (i = 1; i < argc; i++)
-   if (argv[i][0] == '-' && argv[i][1] == 's')
-     MDString (argv[i] + 2);
-   else if (strcmp (argv[i], "-t") == 0)
-     MDTimeTrial ();
-   else if (strcmp (argv[i], "-x") == 0)
-     MDTestSuite ();
-   else
-     MDFile (argv[i]);
-  else
- MDFilter ();
-
-  return (0);
-}
-
-/* Digests a string and prints the result.
- */
-static void MDString (string)
-char *string;
-{
-  MD_CTX context;
-  unsigned char digest[16];
-  unsigned int len = strlen (string);
-
-  MDInit (&context);
-  MDUpdate (&context, string, len);
-  MDFinal (digest, &context);
-
-  printf ("MD%d (\"%s\") = ", MD, string);
-  MDPrint (digest);
-  printf ("\n");
-}
-
-/* Measures the time to digest TEST_BLOCK_COUNT TEST_BLOCK_LEN-byte
-  blocks.
- */
-static void MDTimeTrial ()
-{
-  MD_CTX context;
-  time_t endTime, startTime;
-  unsigned char block[TEST_BLOCK_LEN], digest[16];
-  unsigned int i;
-
-  printf
- ("MD%d time trial. Digesting %d %d-byte blocks ...", MD,
-  TEST_BLOCK_LEN, TEST_BLOCK_COUNT);
-
-  /* Initialize block */
-  for (i = 0; i < TEST_BLOCK_LEN; i++)
- block[i] = (unsigned char)(i & 0xff);
-
-  /* Start timer */
-  time (&startTime);
-
-  /* Digest blocks */
-  MDInit (&context);
-  for (i = 0; i < TEST_BLOCK_COUNT; i++)
- MDUpdate (&context, block, TEST_BLOCK_LEN);
-  MDFinal (digest, &context);
-
-  /* Stop timer */
-  time (&endTime);
-
-  printf (" done\n");
-  printf ("Digest = ");
-  MDPrint (digest);
-  printf ("\nTime = %ld seconds\n", (long)(endTime-startTime));
-  printf
- ("Speed = %ld bytes/second\n",
-  (long)TEST_BLOCK_LEN * (long)TEST_BLOCK_COUNT/(endTime-startTime));
-}
-
-/* Digests a reference suite of strings and prints the results.
- */
-static void MDTestSuite ()
-{
-  printf ("MD%d test suite:\n", MD);
-
-  MDString ("");
-  MDString ("a");
-  MDString ("abc");
-  MDString ("message digest");
-  MDString ("abcdefghijklmnopqrstuvwxyz");
-  MDString
- ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");
-  MDString
- ("1234567890123456789012345678901234567890\
-1234567890123456789012345678901234567890");
-}
-
-/* Digests a file and prints the result.
- */
-static void MDFile (filename)
-char *filename;
-{
-  FILE *file;
-  MD_CTX context;
-  int len;
-  unsigned char buffer[1024], digest[16];
-
-  if ((file = fopen (filename, "rb")) == NULL)
- printf ("%s can't be opened\n", filename);
-
-  else {
- MDInit (&context);
- while (len = fread (buffer, 1, 1024, file))
-   MDUpdate (&context, buffer, len);
- MDFinal (digest, &context);
-
- fclose (file);
-
- printf ("MD%d (%s) = ", MD, filename);
- MDPrint (digest);
- printf ("\n");
-  }
-}
-
-/* Digests the standard input and prints the result.
- */
-static void MDFilter ()
-{
-  MD_CTX context;
-  int len;
-  unsigned char buffer[16], digest[16];
-
-  MDInit (&context);
-  while (len = fread (buffer, 1, 16, stdin))
- MDUpdate (&context, buffer, len);
-  MDFinal (digest, &context);
-
-  MDPrint (digest);
-  printf ("\n");
-}
-
-/* Prints a message digest in hexadecimal.
- */
-static void MDPrint (digest)
-unsigned char digest[16];
-{
-  unsigned int i;
-
-  for (i = 0; i < 16; i++)
- printf ("%02x", digest[i]);
-}
-
- -

A.5 Test suite

- - The MD5 test suite (driver option "-x") should print the following - results: - -

-

-MD5 test suite:
-MD5 ("") = d41d8cd98f00b204e9800998ecf8427e
-MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661
-MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72
-MD5 ("message digest") = f96b697d7cb7938d525a2f31aaf161d0
-MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b
-MD5 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") =
-d174ab98d277d9f5a5611c2c9f419d9f
-MD5 ("12345678901234567890123456789012345678901234567890123456789012345678901234567890") = 57edf4a22be3c955ac49da2e2107b67a
-
- -

Security Considerations

- - The level of security discussed in this memo is considered to be - sufficient for implementing very high security hybrid - digital-signature schemes based on MD5 and a public-key - cryptosystem. - -

Author's Address

- -
- Ronald L. Rivest
- Massachusetts Institute of Technology
- Laboratory for Computer Science
- NE43-324
- 545 Technology Square
- Cambridge, MA 02139-1986

- - Phone: (617) 253-5880
- EMail: rivest@theory.lcs.mit.edu -

- -

-


- - - - diff --git a/PowerEditor/installer/externalTools/md5.src/rfc1321.txt b/PowerEditor/installer/externalTools/md5.src/rfc1321.txt deleted file mode 100644 index 85543a5b..00000000 --- a/PowerEditor/installer/externalTools/md5.src/rfc1321.txt +++ /dev/null @@ -1,1179 +0,0 @@ - - - - - - -Network Working Group R. Rivest -Request for Comments: 1321 MIT Laboratory for Computer Science - and RSA Data Security, Inc. - April 1992 - - - The MD5 Message-Digest Algorithm - -Status of this Memo - - This memo provides information for the Internet community. It does - not specify an Internet standard. Distribution of this memo is - unlimited. - -Acknowlegements - - We would like to thank Don Coppersmith, Burt Kaliski, Ralph Merkle, - David Chaum, and Noam Nisan for numerous helpful comments and - suggestions. - -Table of Contents - - 1. Executive Summary 1 - 2. Terminology and Notation 2 - 3. MD5 Algorithm Description 3 - 4. Summary 6 - 5. Differences Between MD4 and MD5 6 - References 7 - APPENDIX A - Reference Implementation 7 - Security Considerations 21 - Author's Address 21 - -1. Executive Summary - - This document describes the MD5 message-digest algorithm. The - algorithm takes as input a message of arbitrary length and produces - as output a 128-bit "fingerprint" or "message digest" of the input. - It is conjectured that it is computationally infeasible to produce - two messages having the same message digest, or to produce any - message having a given prespecified target message digest. The MD5 - algorithm is intended for digital signature applications, where a - large file must be "compressed" in a secure manner before being - encrypted with a private (secret) key under a public-key cryptosystem - such as RSA. - - - - - - - -Rivest [Page 1] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - - The MD5 algorithm is designed to be quite fast on 32-bit machines. In - addition, the MD5 algorithm does not require any large substitution - tables; the algorithm can be coded quite compactly. - - The MD5 algorithm is an extension of the MD4 message-digest algorithm - 1,2]. MD5 is slightly slower than MD4, but is more "conservative" in - design. MD5 was designed because it was felt that MD4 was perhaps - being adopted for use more quickly than justified by the existing - critical review; because MD4 was designed to be exceptionally fast, - it is "at the edge" in terms of risking successful cryptanalytic - attack. MD5 backs off a bit, giving up a little in speed for a much - greater likelihood of ultimate security. It incorporates some - suggestions made by various reviewers, and contains additional - optimizations. The MD5 algorithm is being placed in the public domain - for review and possible adoption as a standard. - - For OSI-based applications, MD5's object identifier is - - md5 OBJECT IDENTIFIER ::= - iso(1) member-body(2) US(840) rsadsi(113549) digestAlgorithm(2) 5} - - In the X.509 type AlgorithmIdentifier [3], the parameters for MD5 - should have type NULL. - -2. Terminology and Notation - - In this document a "word" is a 32-bit quantity and a "byte" is an - eight-bit quantity. A sequence of bits can be interpreted in a - natural manner as a sequence of bytes, where each consecutive group - of eight bits is interpreted as a byte with the high-order (most - significant) bit of each byte listed first. Similarly, a sequence of - bytes can be interpreted as a sequence of 32-bit words, where each - consecutive group of four bytes is interpreted as a word with the - low-order (least significant) byte given first. - - Let x_i denote "x sub i". If the subscript is an expression, we - surround it in braces, as in x_{i+1}. Similarly, we use ^ for - superscripts (exponentiation), so that x^i denotes x to the i-th - power. - - Let the symbol "+" denote addition of words (i.e., modulo-2^32 - addition). Let X <<< s denote the 32-bit value obtained by circularly - shifting (rotating) X left by s bit positions. Let not(X) denote the - bit-wise complement of X, and let X v Y denote the bit-wise OR of X - and Y. Let X xor Y denote the bit-wise XOR of X and Y, and let XY - denote the bit-wise AND of X and Y. - - - - - -Rivest [Page 2] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - -3. MD5 Algorithm Description - - We begin by supposing that we have a b-bit message as input, and that - we wish to find its message digest. Here b is an arbitrary - nonnegative integer; b may be zero, it need not be a multiple of - eight, and it may be arbitrarily large. We imagine the bits of the - message written down as follows: - - m_0 m_1 ... m_{b-1} - - The following five steps are performed to compute the message digest - of the message. - -3.1 Step 1. Append Padding Bits - - The message is "padded" (extended) so that its length (in bits) is - congruent to 448, modulo 512. That is, the message is extended so - that it is just 64 bits shy of being a multiple of 512 bits long. - Padding is always performed, even if the length of the message is - already congruent to 448, modulo 512. - - Padding is performed as follows: a single "1" bit is appended to the - message, and then "0" bits are appended so that the length in bits of - the padded message becomes congruent to 448, modulo 512. In all, at - least one bit and at most 512 bits are appended. - -3.2 Step 2. Append Length - - A 64-bit representation of b (the length of the message before the - padding bits were added) is appended to the result of the previous - step. In the unlikely event that b is greater than 2^64, then only - the low-order 64 bits of b are used. (These bits are appended as two - 32-bit words and appended low-order word first in accordance with the - previous conventions.) - - At this point the resulting message (after padding with bits and with - b) has a length that is an exact multiple of 512 bits. Equivalently, - this message has a length that is an exact multiple of 16 (32-bit) - words. Let M[0 ... N-1] denote the words of the resulting message, - where N is a multiple of 16. - -3.3 Step 3. Initialize MD Buffer - - A four-word buffer (A,B,C,D) is used to compute the message digest. - Here each of A, B, C, D is a 32-bit register. These registers are - initialized to the following values in hexadecimal, low-order bytes - first): - - - - -Rivest [Page 3] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - - word A: 01 23 45 67 - word B: 89 ab cd ef - word C: fe dc ba 98 - word D: 76 54 32 10 - -3.4 Step 4. Process Message in 16-Word Blocks - - We first define four auxiliary functions that each take as input - three 32-bit words and produce as output one 32-bit word. - - F(X,Y,Z) = XY v not(X) Z - G(X,Y,Z) = XZ v Y not(Z) - H(X,Y,Z) = X xor Y xor Z - I(X,Y,Z) = Y xor (X v not(Z)) - - In each bit position F acts as a conditional: if X then Y else Z. - The function F could have been defined using + instead of v since XY - and not(X)Z will never have 1's in the same bit position.) It is - interesting to note that if the bits of X, Y, and Z are independent - and unbiased, the each bit of F(X,Y,Z) will be independent and - unbiased. - - The functions G, H, and I are similar to the function F, in that they - act in "bitwise parallel" to produce their output from the bits of X, - Y, and Z, in such a manner that if the corresponding bits of X, Y, - and Z are independent and unbiased, then each bit of G(X,Y,Z), - H(X,Y,Z), and I(X,Y,Z) will be independent and unbiased. Note that - the function H is the bit-wise "xor" or "parity" function of its - inputs. - - This step uses a 64-element table T[1 ... 64] constructed from the - sine function. Let T[i] denote the i-th element of the table, which - is equal to the integer part of 4294967296 times abs(sin(i)), where i - is in radians. The elements of the table are given in the appendix. - - Do the following: - - /* Process each 16-word block. */ - For i = 0 to N/16-1 do - - /* Copy block i into X. */ - For j = 0 to 15 do - Set X[j] to M[i*16+j]. - end /* of loop on j */ - - /* Save A as AA, B as BB, C as CC, and D as DD. */ - AA = A - BB = B - - - -Rivest [Page 4] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - - CC = C - DD = D - - /* Round 1. */ - /* Let [abcd k s i] denote the operation - a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */ - /* Do the following 16 operations. */ - [ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 4] - [ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7 22 8] - [ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12] - [ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16] - - /* Round 2. */ - /* Let [abcd k s i] denote the operation - a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */ - /* Do the following 16 operations. */ - [ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20] - [ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24] - [ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28] - [ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32] - - /* Round 3. */ - /* Let [abcd k s t] denote the operation - a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */ - /* Do the following 16 operations. */ - [ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35] [BCDA 14 23 36] - [ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40] - [ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44] - [ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA 2 23 48] - - /* Round 4. */ - /* Let [abcd k s t] denote the operation - a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */ - /* Do the following 16 operations. */ - [ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52] - [ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56] - [ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60] - [ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64] - - /* Then perform the following additions. (That is increment each - of the four registers by the value it had before this block - was started.) */ - A = A + AA - B = B + BB - C = C + CC - D = D + DD - - end /* of loop on i */ - - - -Rivest [Page 5] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - -3.5 Step 5. Output - - The message digest produced as output is A, B, C, D. That is, we - begin with the low-order byte of A, and end with the high-order byte - of D. - - This completes the description of MD5. A reference implementation in - C is given in the appendix. - -4. Summary - - The MD5 message-digest algorithm is simple to implement, and provides - a "fingerprint" or message digest of a message of arbitrary length. - It is conjectured that the difficulty of coming up with two messages - having the same message digest is on the order of 2^64 operations, - and that the difficulty of coming up with any message having a given - message digest is on the order of 2^128 operations. The MD5 algorithm - has been carefully scrutinized for weaknesses. It is, however, a - relatively new algorithm and further security analysis is of course - justified, as is the case with any new proposal of this sort. - -5. Differences Between MD4 and MD5 - - The following are the differences between MD4 and MD5: - - 1. A fourth round has been added. - - 2. Each step now has a unique additive constant. - - 3. The function g in round 2 was changed from (XY v XZ v YZ) to - (XZ v Y not(Z)) to make g less symmetric. - - 4. Each step now adds in the result of the previous step. This - promotes a faster "avalanche effect". - - 5. The order in which input words are accessed in rounds 2 and - 3 is changed, to make these patterns less like each other. - - 6. The shift amounts in each round have been approximately - optimized, to yield a faster "avalanche effect." The shifts in - different rounds are distinct. - - - - - - - - - - -Rivest [Page 6] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - -References - - [1] Rivest, R., "The MD4 Message Digest Algorithm", RFC 1320, MIT and - RSA Data Security, Inc., April 1992. - - [2] Rivest, R., "The MD4 message digest algorithm", in A.J. Menezes - and S.A. Vanstone, editors, Advances in Cryptology - CRYPTO '90 - Proceedings, pages 303-311, Springer-Verlag, 1991. - - [3] CCITT Recommendation X.509 (1988), "The Directory - - Authentication Framework." - -APPENDIX A - Reference Implementation - - This appendix contains the following files taken from RSAREF: A - Cryptographic Toolkit for Privacy-Enhanced Mail: - - global.h -- global header file - - md5.h -- header file for MD5 - - md5c.c -- source code for MD5 - - For more information on RSAREF, send email to . - - The appendix also includes the following file: - - mddriver.c -- test driver for MD2, MD4 and MD5 - - The driver compiles for MD5 by default but can compile for MD2 or MD4 - if the symbol MD is defined on the C compiler command line as 2 or 4. - - The implementation is portable and should work on many different - plaforms. However, it is not difficult to optimize the implementation - on particular platforms, an exercise left to the reader. For example, - on "little-endian" platforms where the lowest-addressed byte in a 32- - bit word is the least significant and there are no alignment - restrictions, the call to Decode in MD5Transform can be replaced with - a typecast. - -A.1 global.h - -/* GLOBAL.H - RSAREF types and constants - */ - -/* PROTOTYPES should be set to one if and only if the compiler supports - function argument prototyping. -The following makes PROTOTYPES default to 0 if it has not already - - - -Rivest [Page 7] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - - been defined with C compiler flags. - */ -#ifndef PROTOTYPES -#define PROTOTYPES 0 -#endif - -/* POINTER defines a generic pointer type */ -typedef unsigned char *POINTER; - -/* UINT2 defines a two byte word */ -typedef unsigned short int UINT2; - -/* UINT4 defines a four byte word */ -typedef unsigned long int UINT4; - -/* PROTO_LIST is defined depending on how PROTOTYPES is defined above. -If using PROTOTYPES, then PROTO_LIST returns the list, otherwise it - returns an empty list. - */ -#if PROTOTYPES -#define PROTO_LIST(list) list -#else -#define PROTO_LIST(list) () -#endif - -A.2 md5.h - -/* MD5.H - header file for MD5C.C - */ - -/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All -rights reserved. - -License to copy and use this software is granted provided that it -is identified as the "RSA Data Security, Inc. MD5 Message-Digest -Algorithm" in all material mentioning or referencing this software -or this function. - -License is also granted to make and use derivative works provided -that such works are identified as "derived from the RSA Data -Security, Inc. MD5 Message-Digest Algorithm" in all material -mentioning or referencing the derived work. - -RSA Data Security, Inc. makes no representations concerning either -the merchantability of this software or the suitability of this -software for any particular purpose. It is provided "as is" -without express or implied warranty of any kind. - - - - -Rivest [Page 8] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - -These notices must be retained in any copies of any part of this -documentation and/or software. - */ - -/* MD5 context. */ -typedef struct { - UINT4 state[4]; /* state (ABCD) */ - UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */ - unsigned char buffer[64]; /* input buffer */ -} MD5_CTX; - -void MD5Init PROTO_LIST ((MD5_CTX *)); -void MD5Update PROTO_LIST - ((MD5_CTX *, unsigned char *, unsigned int)); -void MD5Final PROTO_LIST ((unsigned char [16], MD5_CTX *)); - -A.3 md5c.c - -/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm - */ - -/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All -rights reserved. - -License to copy and use this software is granted provided that it -is identified as the "RSA Data Security, Inc. MD5 Message-Digest -Algorithm" in all material mentioning or referencing this software -or this function. - -License is also granted to make and use derivative works provided -that such works are identified as "derived from the RSA Data -Security, Inc. MD5 Message-Digest Algorithm" in all material -mentioning or referencing the derived work. - -RSA Data Security, Inc. makes no representations concerning either -the merchantability of this software or the suitability of this -software for any particular purpose. It is provided "as is" -without express or implied warranty of any kind. - -These notices must be retained in any copies of any part of this -documentation and/or software. - */ - -#include "global.h" -#include "md5.h" - -/* Constants for MD5Transform routine. - */ - - - -Rivest [Page 9] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - -#define S11 7 -#define S12 12 -#define S13 17 -#define S14 22 -#define S21 5 -#define S22 9 -#define S23 14 -#define S24 20 -#define S31 4 -#define S32 11 -#define S33 16 -#define S34 23 -#define S41 6 -#define S42 10 -#define S43 15 -#define S44 21 - -static void MD5Transform PROTO_LIST ((UINT4 [4], unsigned char [64])); -static void Encode PROTO_LIST - ((unsigned char *, UINT4 *, unsigned int)); -static void Decode PROTO_LIST - ((UINT4 *, unsigned char *, unsigned int)); -static void MD5_memcpy PROTO_LIST ((POINTER, POINTER, unsigned int)); -static void MD5_memset PROTO_LIST ((POINTER, int, unsigned int)); - -static unsigned char PADDING[64] = { - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -/* F, G, H and I are basic MD5 functions. - */ -#define F(x, y, z) (((x) & (y)) | ((~x) & (z))) -#define G(x, y, z) (((x) & (z)) | ((y) & (~z))) -#define H(x, y, z) ((x) ^ (y) ^ (z)) -#define I(x, y, z) ((y) ^ ((x) | (~z))) - -/* ROTATE_LEFT rotates x left n bits. - */ -#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n)))) - -/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4. -Rotation is separate from addition to prevent recomputation. - */ -#define FF(a, b, c, d, x, s, ac) { \ - (a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \ - (a) = ROTATE_LEFT ((a), (s)); \ - - - -Rivest [Page 10] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - - (a) += (b); \ - } -#define GG(a, b, c, d, x, s, ac) { \ - (a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ - } -#define HH(a, b, c, d, x, s, ac) { \ - (a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ - } -#define II(a, b, c, d, x, s, ac) { \ - (a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ - } - -/* MD5 initialization. Begins an MD5 operation, writing a new context. - */ -void MD5Init (context) -MD5_CTX *context; /* context */ -{ - context->count[0] = context->count[1] = 0; - /* Load magic initialization constants. -*/ - context->state[0] = 0x67452301; - context->state[1] = 0xefcdab89; - context->state[2] = 0x98badcfe; - context->state[3] = 0x10325476; -} - -/* MD5 block update operation. Continues an MD5 message-digest - operation, processing another message block, and updating the - context. - */ -void MD5Update (context, input, inputLen) -MD5_CTX *context; /* context */ -unsigned char *input; /* input block */ -unsigned int inputLen; /* length of input block */ -{ - unsigned int i, index, partLen; - - /* Compute number of bytes mod 64 */ - index = (unsigned int)((context->count[0] >> 3) & 0x3F); - - /* Update number of bits */ - if ((context->count[0] += ((UINT4)inputLen << 3)) - - - -Rivest [Page 11] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - - < ((UINT4)inputLen << 3)) - context->count[1]++; - context->count[1] += ((UINT4)inputLen >> 29); - - partLen = 64 - index; - - /* Transform as many times as possible. -*/ - if (inputLen >= partLen) { - MD5_memcpy - ((POINTER)&context->buffer[index], (POINTER)input, partLen); - MD5Transform (context->state, context->buffer); - - for (i = partLen; i + 63 < inputLen; i += 64) - MD5Transform (context->state, &input[i]); - - index = 0; - } - else - i = 0; - - /* Buffer remaining input */ - MD5_memcpy - ((POINTER)&context->buffer[index], (POINTER)&input[i], - inputLen-i); -} - -/* MD5 finalization. Ends an MD5 message-digest operation, writing the - the message digest and zeroizing the context. - */ -void MD5Final (digest, context) -unsigned char digest[16]; /* message digest */ -MD5_CTX *context; /* context */ -{ - unsigned char bits[8]; - unsigned int index, padLen; - - /* Save number of bits */ - Encode (bits, context->count, 8); - - /* Pad out to 56 mod 64. -*/ - index = (unsigned int)((context->count[0] >> 3) & 0x3f); - padLen = (index < 56) ? (56 - index) : (120 - index); - MD5Update (context, PADDING, padLen); - - /* Append length (before padding) */ - MD5Update (context, bits, 8); - - - -Rivest [Page 12] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - - /* Store state in digest */ - Encode (digest, context->state, 16); - - /* Zeroize sensitive information. -*/ - MD5_memset ((POINTER)context, 0, sizeof (*context)); -} - -/* MD5 basic transformation. Transforms state based on block. - */ -static void MD5Transform (state, block) -UINT4 state[4]; -unsigned char block[64]; -{ - UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16]; - - Decode (x, block, 64); - - /* Round 1 */ - FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */ - FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */ - FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */ - FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */ - FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */ - FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */ - FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */ - FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */ - FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */ - FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */ - FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */ - FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */ - FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */ - FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */ - FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */ - FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */ - - /* Round 2 */ - GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */ - GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */ - GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */ - GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */ - GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */ - GG (d, a, b, c, x[10], S22, 0x2441453); /* 22 */ - GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */ - GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */ - GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */ - GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */ - GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */ - - - -Rivest [Page 13] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - - GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */ - GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */ - GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */ - GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */ - GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */ - - /* Round 3 */ - HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */ - HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */ - HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */ - HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */ - HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */ - HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */ - HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */ - HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */ - HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */ - HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */ - HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */ - HH (b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */ - HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */ - HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */ - HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */ - HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */ - - /* Round 4 */ - II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */ - II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */ - II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */ - II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */ - II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */ - II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */ - II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */ - II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */ - II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */ - II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */ - II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */ - II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */ - II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */ - II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */ - II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */ - II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */ - - state[0] += a; - state[1] += b; - state[2] += c; - state[3] += d; - - /* Zeroize sensitive information. - - - -Rivest [Page 14] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - -*/ - MD5_memset ((POINTER)x, 0, sizeof (x)); -} - -/* Encodes input (UINT4) into output (unsigned char). Assumes len is - a multiple of 4. - */ -static void Encode (output, input, len) -unsigned char *output; -UINT4 *input; -unsigned int len; -{ - unsigned int i, j; - - for (i = 0, j = 0; j < len; i++, j += 4) { - output[j] = (unsigned char)(input[i] & 0xff); - output[j+1] = (unsigned char)((input[i] >> 8) & 0xff); - output[j+2] = (unsigned char)((input[i] >> 16) & 0xff); - output[j+3] = (unsigned char)((input[i] >> 24) & 0xff); - } -} - -/* Decodes input (unsigned char) into output (UINT4). Assumes len is - a multiple of 4. - */ -static void Decode (output, input, len) -UINT4 *output; -unsigned char *input; -unsigned int len; -{ - unsigned int i, j; - - for (i = 0, j = 0; j < len; i++, j += 4) - output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) | - (((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24); -} - -/* Note: Replace "for loop" with standard memcpy if possible. - */ - -static void MD5_memcpy (output, input, len) -POINTER output; -POINTER input; -unsigned int len; -{ - unsigned int i; - - for (i = 0; i < len; i++) - - - -Rivest [Page 15] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - - output[i] = input[i]; -} - -/* Note: Replace "for loop" with standard memset if possible. - */ -static void MD5_memset (output, value, len) -POINTER output; -int value; -unsigned int len; -{ - unsigned int i; - - for (i = 0; i < len; i++) - ((char *)output)[i] = (char)value; -} - -A.4 mddriver.c - -/* MDDRIVER.C - test driver for MD2, MD4 and MD5 - */ - -/* Copyright (C) 1990-2, RSA Data Security, Inc. Created 1990. All -rights reserved. - -RSA Data Security, Inc. makes no representations concerning either -the merchantability of this software or the suitability of this -software for any particular purpose. It is provided "as is" -without express or implied warranty of any kind. - -These notices must be retained in any copies of any part of this -documentation and/or software. - */ - -/* The following makes MD default to MD5 if it has not already been - defined with C compiler flags. - */ -#ifndef MD -#define MD MD5 -#endif - -#include -#include -#include -#include "global.h" -#if MD == 2 -#include "md2.h" -#endif -#if MD == 4 - - - -Rivest [Page 16] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - -#include "md4.h" -#endif -#if MD == 5 -#include "md5.h" -#endif - -/* Length of test block, number of test blocks. - */ -#define TEST_BLOCK_LEN 1000 -#define TEST_BLOCK_COUNT 1000 - -static void MDString PROTO_LIST ((char *)); -static void MDTimeTrial PROTO_LIST ((void)); -static void MDTestSuite PROTO_LIST ((void)); -static void MDFile PROTO_LIST ((char *)); -static void MDFilter PROTO_LIST ((void)); -static void MDPrint PROTO_LIST ((unsigned char [16])); - -#if MD == 2 -#define MD_CTX MD2_CTX -#define MDInit MD2Init -#define MDUpdate MD2Update -#define MDFinal MD2Final -#endif -#if MD == 4 -#define MD_CTX MD4_CTX -#define MDInit MD4Init -#define MDUpdate MD4Update -#define MDFinal MD4Final -#endif -#if MD == 5 -#define MD_CTX MD5_CTX -#define MDInit MD5Init -#define MDUpdate MD5Update -#define MDFinal MD5Final -#endif - -/* Main driver. - -Arguments (may be any combination): - -sstring - digests string - -t - runs time trial - -x - runs test script - filename - digests file - (none) - digests standard input - */ -int main (argc, argv) -int argc; - - - -Rivest [Page 17] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - -char *argv[]; -{ - int i; - - if (argc > 1) - for (i = 1; i < argc; i++) - if (argv[i][0] == '-' && argv[i][1] == 's') - MDString (argv[i] + 2); - else if (strcmp (argv[i], "-t") == 0) - MDTimeTrial (); - else if (strcmp (argv[i], "-x") == 0) - MDTestSuite (); - else - MDFile (argv[i]); - else - MDFilter (); - - return (0); -} - -/* Digests a string and prints the result. - */ -static void MDString (string) -char *string; -{ - MD_CTX context; - unsigned char digest[16]; - unsigned int len = strlen (string); - - MDInit (&context); - MDUpdate (&context, string, len); - MDFinal (digest, &context); - - printf ("MD%d (\"%s\") = ", MD, string); - MDPrint (digest); - printf ("\n"); -} - -/* Measures the time to digest TEST_BLOCK_COUNT TEST_BLOCK_LEN-byte - blocks. - */ -static void MDTimeTrial () -{ - MD_CTX context; - time_t endTime, startTime; - unsigned char block[TEST_BLOCK_LEN], digest[16]; - unsigned int i; - - - - -Rivest [Page 18] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - - printf - ("MD%d time trial. Digesting %d %d-byte blocks ...", MD, - TEST_BLOCK_LEN, TEST_BLOCK_COUNT); - - /* Initialize block */ - for (i = 0; i < TEST_BLOCK_LEN; i++) - block[i] = (unsigned char)(i & 0xff); - - /* Start timer */ - time (&startTime); - - /* Digest blocks */ - MDInit (&context); - for (i = 0; i < TEST_BLOCK_COUNT; i++) - MDUpdate (&context, block, TEST_BLOCK_LEN); - MDFinal (digest, &context); - - /* Stop timer */ - time (&endTime); - - printf (" done\n"); - printf ("Digest = "); - MDPrint (digest); - printf ("\nTime = %ld seconds\n", (long)(endTime-startTime)); - printf - ("Speed = %ld bytes/second\n", - (long)TEST_BLOCK_LEN * (long)TEST_BLOCK_COUNT/(endTime-startTime)); -} - -/* Digests a reference suite of strings and prints the results. - */ -static void MDTestSuite () -{ - printf ("MD%d test suite:\n", MD); - - MDString (""); - MDString ("a"); - MDString ("abc"); - MDString ("message digest"); - MDString ("abcdefghijklmnopqrstuvwxyz"); - MDString - ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"); - MDString - ("1234567890123456789012345678901234567890\ -1234567890123456789012345678901234567890"); -} - -/* Digests a file and prints the result. - - - -Rivest [Page 19] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - - */ -static void MDFile (filename) -char *filename; -{ - FILE *file; - MD_CTX context; - int len; - unsigned char buffer[1024], digest[16]; - - if ((file = fopen (filename, "rb")) == NULL) - printf ("%s can't be opened\n", filename); - - else { - MDInit (&context); - while (len = fread (buffer, 1, 1024, file)) - MDUpdate (&context, buffer, len); - MDFinal (digest, &context); - - fclose (file); - - printf ("MD%d (%s) = ", MD, filename); - MDPrint (digest); - printf ("\n"); - } -} - -/* Digests the standard input and prints the result. - */ -static void MDFilter () -{ - MD_CTX context; - int len; - unsigned char buffer[16], digest[16]; - - MDInit (&context); - while (len = fread (buffer, 1, 16, stdin)) - MDUpdate (&context, buffer, len); - MDFinal (digest, &context); - - MDPrint (digest); - printf ("\n"); -} - -/* Prints a message digest in hexadecimal. - */ -static void MDPrint (digest) -unsigned char digest[16]; -{ - - - -Rivest [Page 20] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - - unsigned int i; - - for (i = 0; i < 16; i++) - printf ("%02x", digest[i]); -} - -A.5 Test suite - - The MD5 test suite (driver option "-x") should print the following - results: - -MD5 test suite: -MD5 ("") = d41d8cd98f00b204e9800998ecf8427e -MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661 -MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72 -MD5 ("message digest") = f96b697d7cb7938d525a2f31aaf161d0 -MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b -MD5 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") = -d174ab98d277d9f5a5611c2c9f419d9f -MD5 ("123456789012345678901234567890123456789012345678901234567890123456 -78901234567890") = 57edf4a22be3c955ac49da2e2107b67a - -Security Considerations - - The level of security discussed in this memo is considered to be - sufficient for implementing very high security hybrid digital- - signature schemes based on MD5 and a public-key cryptosystem. - -Author's Address - - Ronald L. Rivest - Massachusetts Institute of Technology - Laboratory for Computer Science - NE43-324 - 545 Technology Square - Cambridge, MA 02139-1986 - - Phone: (617) 253-5880 - EMail: rivest@theory.lcs.mit.edu - - - - - - - - - - - - -Rivest [Page 21] - diff --git a/PowerEditor/installer/nativeLang/azerbaijani.xml b/PowerEditor/installer/nativeLang/azerbaijani.xml index 377a2d27..faaeb3e8 100644 --- a/PowerEditor/installer/nativeLang/azerbaijani.xml +++ b/PowerEditor/installer/nativeLang/azerbaijani.xml @@ -13,7 +13,7 @@ - + @@ -29,7 +29,7 @@ - + @@ -38,7 +38,7 @@ - + @@ -84,7 +84,7 @@ - + @@ -95,8 +95,8 @@ - - + + @@ -109,25 +109,25 @@ - + - + - + - + @@ -161,14 +161,14 @@ - + - + @@ -181,7 +181,7 @@ - + @@ -199,10 +199,10 @@ - - - - + + + + @@ -228,8 +228,8 @@ - - + + @@ -246,20 +246,20 @@ - + - - + + - + @@ -273,7 +273,7 @@ - + @@ -282,8 +282,8 @@ - - + + @@ -294,7 +294,7 @@ - + @@ -350,7 +350,7 @@ - + @@ -369,8 +369,8 @@ - - + + @@ -422,19 +422,19 @@ - + - + - + - - + + @@ -449,7 +449,7 @@ - + @@ -465,7 +465,7 @@ - + @@ -482,7 +482,7 @@ - + @@ -500,7 +500,7 @@ - + @@ -509,7 +509,7 @@ - + @@ -534,25 +534,25 @@ - + - + - + - + - + @@ -563,7 +563,7 @@ - + diff --git a/PowerEditor/installer/nativeLang/catalan.xml b/PowerEditor/installer/nativeLang/catalan.xml index d7cc9471..f2f962ec 100644 --- a/PowerEditor/installer/nativeLang/catalan.xml +++ b/PowerEditor/installer/nativeLang/catalan.xml @@ -1,8 +1,8 @@ @@ -30,6 +30,7 @@ By Hiro5 (from sourceforge.net) + @@ -64,8 +65,8 @@ By Hiro5 (from sourceforge.net) - - + + @@ -75,7 +76,7 @@ By Hiro5 (from sourceforge.net) - + @@ -96,7 +97,7 @@ By Hiro5 (from sourceforge.net) - + @@ -108,14 +109,20 @@ By Hiro5 (from sourceforge.net) - + + + + + + + - + @@ -125,7 +132,7 @@ By Hiro5 (from sourceforge.net) - + @@ -196,10 +203,10 @@ By Hiro5 (from sourceforge.net) - - - - + + + + @@ -216,6 +223,7 @@ By Hiro5 (from sourceforge.net) + @@ -237,20 +245,20 @@ By Hiro5 (from sourceforge.net) - - - - + + + + - + - - - - - + + + + + @@ -258,7 +266,7 @@ By Hiro5 (from sourceforge.net) - + @@ -267,11 +275,11 @@ By Hiro5 (from sourceforge.net) - - - - - + + + + + @@ -296,40 +304,40 @@ By Hiro5 (from sourceforge.net) - + - - - - - + + + + + - + - + - + - - + + - - + + - - + + @@ -344,9 +352,9 @@ By Hiro5 (from sourceforge.net) - + - + @@ -357,8 +365,8 @@ By Hiro5 (from sourceforge.net) - - + + @@ -380,8 +388,8 @@ By Hiro5 (from sourceforge.net) - - + + @@ -390,13 +398,13 @@ By Hiro5 (from sourceforge.net) - + - - + + - - + + @@ -424,8 +432,8 @@ By Hiro5 (from sourceforge.net) - - + + @@ -440,7 +448,7 @@ By Hiro5 (from sourceforge.net) - + @@ -462,14 +470,14 @@ By Hiro5 (from sourceforge.net) - + - - + + @@ -478,7 +486,7 @@ By Hiro5 (from sourceforge.net) - + @@ -494,7 +502,7 @@ By Hiro5 (from sourceforge.net) - + @@ -512,7 +520,7 @@ By Hiro5 (from sourceforge.net) - + @@ -542,7 +550,7 @@ By Hiro5 (from sourceforge.net) - + @@ -550,11 +558,11 @@ By Hiro5 (from sourceforge.net) - + - + @@ -573,7 +581,7 @@ By Hiro5 (from sourceforge.net) - + diff --git a/PowerEditor/installer/nativeLang/czech.xml b/PowerEditor/installer/nativeLang/czech.xml index 2201795f..af8b455f 100644 --- a/PowerEditor/installer/nativeLang/czech.xml +++ b/PowerEditor/installer/nativeLang/czech.xml @@ -27,6 +27,7 @@ + @@ -110,6 +111,12 @@ + + + + + + @@ -179,6 +186,7 @@ + @@ -216,6 +224,7 @@ + @@ -361,8 +370,8 @@ - - + + diff --git a/PowerEditor/installer/nativeLang/dutch.xml b/PowerEditor/installer/nativeLang/dutch.xml index 8b702f05..5cec7c6c 100644 --- a/PowerEditor/installer/nativeLang/dutch.xml +++ b/PowerEditor/installer/nativeLang/dutch.xml @@ -1,6 +1,6 @@ - +
@@ -26,37 +26,39 @@ + - - - + + + + - + - + - - - - - - - - - - - - - + + + + + + + + + + + + + @@ -106,7 +108,7 @@ - + @@ -121,6 +123,12 @@ + + + + + + @@ -134,8 +142,8 @@ - - + + @@ -168,8 +176,10 @@ - - + + + + @@ -190,6 +200,7 @@ + @@ -221,6 +232,10 @@ + + + + @@ -367,6 +382,9 @@ + + + @@ -429,7 +447,7 @@ - + @@ -452,6 +470,11 @@ + + + + + @@ -468,7 +491,7 @@ - + diff --git a/PowerEditor/installer/nativeLang/english.xml b/PowerEditor/installer/nativeLang/english.xml index cdfea4de..1f340a03 100644 --- a/PowerEditor/installer/nativeLang/english.xml +++ b/PowerEditor/installer/nativeLang/english.xml @@ -214,7 +214,7 @@ - + diff --git a/PowerEditor/installer/nativeLang/english_customizable.xml b/PowerEditor/installer/nativeLang/english_customizable.xml index a89799ca..9963eab5 100644 --- a/PowerEditor/installer/nativeLang/english_customizable.xml +++ b/PowerEditor/installer/nativeLang/english_customizable.xml @@ -214,7 +214,7 @@ - + diff --git a/PowerEditor/installer/nativeLang/esperanto.xml b/PowerEditor/installer/nativeLang/esperanto.xml index 8724f967..4bffbc1e 100644 --- a/PowerEditor/installer/nativeLang/esperanto.xml +++ b/PowerEditor/installer/nativeLang/esperanto.xml @@ -2,27 +2,18 @@ @@ -47,7 +38,7 @@ - + @@ -59,10 +50,10 @@ - + - + @@ -102,11 +93,11 @@ - - - - - + + + + + @@ -132,7 +123,7 @@ - + @@ -140,9 +131,9 @@ - - - + + + @@ -154,7 +145,7 @@ - + @@ -180,10 +171,10 @@ - - - - + + + + @@ -191,28 +182,27 @@ - - - + + - + - + - + - + @@ -222,9 +212,9 @@ - - - + + + @@ -252,7 +242,7 @@ - + @@ -268,16 +258,16 @@ - + - - - + + +
@@ -288,13 +278,14 @@ - + - + + @@ -316,7 +307,7 @@ - + @@ -326,10 +317,10 @@ - + - + @@ -618,5 +609,20 @@
+ diff --git a/PowerEditor/installer/nativeLang/italian.xml b/PowerEditor/installer/nativeLang/italian.xml index 6679a4a0..344f33c9 100644 --- a/PowerEditor/installer/nativeLang/italian.xml +++ b/PowerEditor/installer/nativeLang/italian.xml @@ -1,9 +1,9 @@ @@ -32,6 +32,7 @@ + @@ -99,7 +100,7 @@ - + @@ -116,6 +117,12 @@ + + + + + + @@ -165,7 +172,7 @@ - + @@ -175,7 +182,7 @@ - + @@ -183,7 +190,7 @@ - + @@ -218,13 +225,13 @@ - + - + @@ -319,7 +326,7 @@ - + @@ -360,8 +367,8 @@ - - + + @@ -522,7 +529,8 @@ - + + diff --git a/PowerEditor/installer/nativeLang/romanian.xml b/PowerEditor/installer/nativeLang/romanian.xml index d467dd2c..9c8c9bf5 100644 --- a/PowerEditor/installer/nativeLang/romanian.xml +++ b/PowerEditor/installer/nativeLang/romanian.xml @@ -27,12 +27,13 @@ + - + @@ -60,7 +61,7 @@ - + @@ -76,7 +77,7 @@ - + @@ -111,6 +112,12 @@ + + + + + + @@ -161,7 +168,7 @@ - + @@ -174,17 +181,18 @@ - + - + + - - - + + + @@ -216,7 +224,7 @@ - + @@ -229,6 +237,7 @@ + @@ -245,7 +254,7 @@ - + @@ -255,10 +264,10 @@ - + - + @@ -271,7 +280,7 @@ - + @@ -285,8 +294,8 @@ - - + + @@ -299,9 +308,9 @@ - - - + + + @@ -318,27 +327,27 @@ - + - - + + - + - - + + - + @@ -351,12 +360,12 @@ - + - - + + @@ -365,8 +374,8 @@ - - + + @@ -388,8 +397,8 @@ - - + + @@ -405,7 +414,7 @@ - + @@ -438,36 +447,32 @@ - - - - - - - - + - + - - - - - - - + + - - + + + + + + + + + + @@ -480,7 +485,7 @@ - + @@ -489,8 +494,8 @@ - - + + @@ -500,7 +505,7 @@ - + @@ -527,14 +532,14 @@ - - + + - + @@ -543,7 +548,7 @@ - + @@ -564,7 +569,7 @@ - + @@ -578,7 +583,7 @@ - + @@ -593,8 +598,8 @@ - - + + diff --git a/PowerEditor/installer/nppSetup.nsi b/PowerEditor/installer/nppSetup.nsi index 226816bb..b6663dd6 100644 --- a/PowerEditor/installer/nppSetup.nsi +++ b/PowerEditor/installer/nppSetup.nsi @@ -18,10 +18,10 @@ ; Define the application name !define APPNAME "Notepad++" -!define APPVERSION "5.8.6" -!define APPNAMEANDVERSION "Notepad++ v5.8.6" +!define APPVERSION "5.8.7" +!define APPNAMEANDVERSION "Notepad++ v5.8.7" !define VERSION_MAJOR 5 -!define VERSION_MINOR 86 +!define VERSION_MINOR 87 !define APPWEBSITE "http://notepad-plus-plus.org/" @@ -29,7 +29,7 @@ Name "${APPNAMEANDVERSION}" InstallDir "$PROGRAMFILES\Notepad++" InstallDirRegKey HKLM "Software\${APPNAME}" "" -OutFile ".\build\npp.5.8.6.Installer.exe" +OutFile ".\build\npp.5.8.7.Installer.exe" ; GetWindowsVersion ; @@ -385,9 +385,15 @@ GLOBAL_INST: File "..\bin\change.log" File "..\bin\notepad++.exe" File "..\bin\readme.txt" - File "..\bin\NppHelp.chm" - + + ; Localization + ; Default language English SetOutPath "$INSTDIR\localization\" + File ".\nativeLang\english.xml" + + ; Copy all the language files to the temp directory + ; than make them installed via option + SetOutPath "$TEMP\nppLocalization\" File ".\nativeLang\" IfFileExists "$UPDATE_PATH\nativeLang.xml" 0 +2 @@ -396,8 +402,9 @@ GLOBAL_INST: IfFileExists "$INSTDIR\nativeLang.xml" 0 +2 Delete "$INSTDIR\nativeLang.xml" - StrCmp $LANGUAGE ${LANG_ENGLISH} +2 0 - CopyFiles "$INSTDIR\localization\$(langFileName)" "$UPDATE_PATH\nativeLang.xml" + StrCmp $LANGUAGE ${LANG_ENGLISH} +3 0 + CopyFiles "$TEMP\nppLocalization\$(langFileName)" "$UPDATE_PATH\nativeLang.xml" + CopyFiles "$TEMP\nppLocalization\$(langFileName)" "$INSTDIR\localization\$(langFileName)" ; remove all the npp shortcuts from current user Delete "$DESKTOP\Notepad++.lnk" @@ -405,17 +412,7 @@ GLOBAL_INST: Delete "$SMPROGRAMS\Notepad++\readme.lnk" Delete "$SMPROGRAMS\Notepad++\Uninstall.lnk" CreateDirectory "$SMPROGRAMS\Notepad++" - ;CreateShortCut "$SMPROGRAMS\Notepad++\Uninstall.lnk" "$INSTDIR\uninstall.exe" - - - ;clean - Delete "$INSTDIR\plugins\NPPTextFX\AsciiToEBCDIC.bin" - Delete "$INSTDIR\plugins\NPPTextFX\libTidy.dll" - Delete "$INSTDIR\plugins\NPPTextFX\TIDYCFG.INI" - Delete "$INSTDIR\plugins\NPPTextFX\W3C-CSSValidator.htm" - Delete "$INSTDIR\plugins\NPPTextFX\W3C-HTMLValidator.htm" - RMDir "$INSTDIR\plugins\NPPTextFX\" - + ; remove unstable plugins CreateDirectory "$INSTDIR\plugins\disabled" @@ -497,7 +494,6 @@ GLOBAL_INST: ; add all the npp shortcuts for all user or current user CreateDirectory "$SMPROGRAMS\Notepad++" CreateShortCut "$SMPROGRAMS\Notepad++\Notepad++.lnk" "$INSTDIR\notepad++.exe" - ;CreateShortCut "$SMPROGRAMS\Notepad++\readme.lnk" "$INSTDIR\readme.txt" SetShellVarContext current WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\notepad++.exe" "" "$INSTDIR\notepad++.exe" @@ -515,7 +511,7 @@ Section "Context Menu Entry" explorerContextMenu Exec 'regsvr32 /s "$INSTDIR\NppShell_04.dll"' SectionEnd -SubSection "Auto-completion Files" autoCompletionComponent +SectionGroup "Auto-completion Files" autoCompletionComponent SetOverwrite off Section C @@ -617,9 +613,9 @@ SubSection "Auto-completion Files" autoCompletionComponent SetOutPath "$INSTDIR\plugins\APIs" File ".\APIs\cmake.xml" SectionEnd -SubSectionEnd +SectionGroupEnd -SubSection "Plugins" Plugins +SectionGroup "Plugins" Plugins SetOverwrite on @@ -638,27 +634,12 @@ SubSection "Plugins" Plugins File "..\bin\plugins\doc\NPPTextFXdemo.TXT" SectionEnd -/* Work, but it's not used by many people - Section "NppNetNote" NppNetNote - Delete "$INSTDIR\plugins\NppNetNote.dll" - SetOutPath "$INSTDIR\plugins" - File "..\bin\plugins\NppNetNote.dll" - SectionEnd -*/ - Section "Spell-Checker" SpellChecker Delete "$INSTDIR\plugins\SpellChecker.dll" SetOutPath "$INSTDIR\plugins" File "..\bin\plugins\SpellChecker.dll" SectionEnd -/* - Section "MIME Tools" MIMETools - Delete "$INSTDIR\plugins\NppTools.dll" - Delete "$INSTDIR\plugins\mimeTools.dll" - SetOutPath "$INSTDIR\plugins" - File "..\bin\plugins\mimeTools.dll" - SectionEnd -*/ + Section "Npp FTP" NppFTP Delete "$INSTDIR\plugins\NppFTP.dll" SetOutPath "$INSTDIR\plugins" @@ -678,13 +659,7 @@ SubSection "Plugins" Plugins SetOutPath "$INSTDIR\plugins" File "..\bin\plugins\NppExport.dll" SectionEnd -/* - Section "Select 'N' Launch" SelectNLaunch - Delete "$INSTDIR\plugins\SelectNLaunch.dll" - SetOutPath "$INSTDIR\plugins" - File "..\bin\plugins\SelectNLaunch.dll" - SectionEnd -*/ + Section "Compare Plugin" ComparePlugin Delete "$INSTDIR\plugins\ComparePlugin.dll" SetOutPath "$INSTDIR\plugins" @@ -698,17 +673,209 @@ SubSection "Plugins" Plugins SetOutPath "$INSTDIR\updater" File "..\bin\updater\gpup.exe" SectionEnd -/* - Section "Light Explorer" LightExplorer - Delete "$INSTDIR\plugins\LightExplorer.dll" - SetOutPath "$INSTDIR\plugins" - File "..\bin\plugins\LightExplorer.dll" +SectionGroupEnd + +SectionGroup "Localization" localization + SetOverwrite on + Section /o "Afrikaans" afrikaans + CopyFiles "$TEMP\nppLocalization\afrikaans.xml" "$INSTDIR\localization\afrikaans.xml" SectionEnd -*/ + Section /o "Albanian" albanian + CopyFiles "$TEMP\nppLocalization\albanian.xml" "$INSTDIR\localization\albanian.xml" + SectionEnd + Section /o "Arabic" arabic + CopyFiles "$TEMP\nppLocalization\arabic.xml" "$INSTDIR\localization\arabic.xml" + SectionEnd + Section /o "Aranese" aranese + CopyFiles "$TEMP\nppLocalization\aranese.xml" "$INSTDIR\localization\aranese.xml" + SectionEnd + Section /o "Azerbaijani" azerbaijani + CopyFiles "$TEMP\nppLocalization\azerbaijani.xml" "$INSTDIR\localization\azerbaijani.xml" + SectionEnd + Section /o "Basque" basque + CopyFiles "$TEMP\nppLocalization\basque.xml" "$INSTDIR\localization\basque.xml" + SectionEnd + Section /o "Belarusian" belarusian + CopyFiles "$TEMP\nppLocalization\belarusian.xml" "$INSTDIR\localization\belarusian.xml" + SectionEnd + Section /o "Bosnian" bosnian + CopyFiles "$TEMP\nppLocalization\bosnian.xml" "$INSTDIR\localization\bosnian.xml" + SectionEnd + Section /o "Brazilian Portuguese" brazilian_portuguese + CopyFiles "$TEMP\nppLocalization\brazilian_portuguese.xml" "$INSTDIR\localization\brazilian_portuguese.xml" + SectionEnd + Section /o "Bulgarian" bulgarian + CopyFiles "$TEMP\nppLocalization\bulgarian.xml" "$INSTDIR\localization\bulgarian.xml" + SectionEnd + Section /o "Catalan" catalan + CopyFiles "$TEMP\nppLocalization\catalan.xml" "$INSTDIR\localization\catalan.xml" + SectionEnd + Section /o "Chinese (Traditional)" chineseTraditional + CopyFiles "$TEMP\nppLocalization\chinese.xml" "$INSTDIR\localization\chinese.xml" + SectionEnd + Section /o "Chinese (Simplified)" chineseSimplified + CopyFiles "$TEMP\nppLocalization\chineseSimplified.xml" "$INSTDIR\localization\chineseSimplified.xml" + SectionEnd + Section /o "Croatian" croatian + CopyFiles "$TEMP\nppLocalization\croatian.xml" "$INSTDIR\localization\croatian.xml" + SectionEnd + Section /o "Czech" czech + CopyFiles "$TEMP\nppLocalization\czech.xml" "$INSTDIR\localization\czech.xml" + SectionEnd + Section /o "Danish" danish + CopyFiles "$TEMP\nppLocalization\danish.xml" "$INSTDIR\localization\danish.xml" + SectionEnd + Section /o "Dutch" dutch + CopyFiles "$TEMP\nppLocalization\dutch.xml" "$INSTDIR\localization\dutch.xml" + SectionEnd + Section /o "English (Customizable)" english_customizable + CopyFiles "$TEMP\nppLocalization\english_customizable.xml" "$INSTDIR\localization\english_customizable.xml" + SectionEnd + Section /o "Esperanto" esperanto + CopyFiles "$TEMP\nppLocalization\esperanto.xml" "$INSTDIR\localization\esperanto.xml" + SectionEnd + Section /o "Extremaduran" extremaduran + CopyFiles "$TEMP\nppLocalization\extremaduran.xml" "$INSTDIR\localization\extremaduran.xml" + SectionEnd + Section /o "Farsi" farsi + CopyFiles "$TEMP\nppLocalization\farsi.xml" "$INSTDIR\localization\farsi.xml" + SectionEnd + Section /o "Finnish" finnish + CopyFiles "$TEMP\nppLocalization\finnish.xml" "$INSTDIR\localization\finnish.xml" + SectionEnd + Section /o "Friulian" friulian + CopyFiles "$TEMP\nppLocalization\friulian.xml" "$INSTDIR\localization\friulian.xml" + SectionEnd + Section /o "French" french + CopyFiles "$TEMP\nppLocalization\french.xml" "$INSTDIR\localization\french.xml" + SectionEnd + Section /o "Galician" galician + CopyFiles "$TEMP\nppLocalization\galician.xml" "$INSTDIR\localization\galician.xml" + SectionEnd + Section /o "Georgian" georgian + CopyFiles "$TEMP\nppLocalization\georgian.xml" "$INSTDIR\localization\georgian.xml" + SectionEnd + Section /o "German" german + CopyFiles "$TEMP\nppLocalization\german.xml" "$INSTDIR\localization\german.xml" + SectionEnd + Section /o "Greek" greek + CopyFiles "$TEMP\nppLocalization\greek.xml" "$INSTDIR\localization\greek.xml" + SectionEnd + Section /o "Hebrew" hebrew + CopyFiles "$TEMP\nppLocalization\hebrew.xml" "$INSTDIR\localization\hebrew.xml" + SectionEnd + Section /o "Hungarian" hungarian + CopyFiles "$TEMP\nppLocalization\hungarian.xml" "$INSTDIR\localization\hungarian.xml" + SectionEnd + Section /o "Hungarian (ANSI)" hungarianA + CopyFiles "$TEMP\nppLocalization\hungarianA.xml" "$INSTDIR\localization\hungarianA.xml" + SectionEnd + Section /o "Indonesian" indonesian + CopyFiles "$TEMP\nppLocalization\indonesian.xml" "$INSTDIR\localization\indonesian.xml" + SectionEnd + Section /o "Italian" italian + CopyFiles "$TEMP\nppLocalization\italian.xml" "$INSTDIR\localization\italian.xml" + SectionEnd + Section /o "Japanese" japanese + CopyFiles "$TEMP\nppLocalization\japanese.xml" "$INSTDIR\localization\japanese.xml" + SectionEnd + Section /o "Kazakh" kazakh + CopyFiles "$TEMP\nppLocalization\kazakh.xml" "$INSTDIR\localization\kazakh.xml" + SectionEnd + Section /o "Korean" korean + CopyFiles "$TEMP\nppLocalization\korean.xml" "$INSTDIR\localization\korean.xml" + SectionEnd + Section /o "Kyrgyz" kyrgyz + CopyFiles "$TEMP\nppLocalization\kyrgyz.xml" "$INSTDIR\localization\kyrgyz.xml" + SectionEnd + Section /o "Latvian" Latvian + CopyFiles "$TEMP\nppLocalization\Latvian.xml" "$INSTDIR\localization\Latvian.xml" + SectionEnd + Section /o "Lithuanian" lithuanian + CopyFiles "$TEMP\nppLocalization\lithuanian.xml" "$INSTDIR\localization\lithuanian.xml" + SectionEnd + Section /o "Luxembourgish" luxembourgish + CopyFiles "$TEMP\nppLocalization\luxembourgish.xml" "$INSTDIR\localization\luxembourgish.xml" + SectionEnd + Section /o "Macedonian" macedonian + CopyFiles "$TEMP\nppLocalization\macedonian.xml" "$INSTDIR\localization\macedonian.xml" + SectionEnd + Section /o "Malay" malay + CopyFiles "$TEMP\nppLocalization\malay.xml" "$INSTDIR\localization\malay.xml" + SectionEnd + Section /o "Norwegian" norwegian + CopyFiles "$TEMP\nppLocalization\norwegian.xml" "$INSTDIR\localization\norwegian.xml" + SectionEnd + Section /o "Nynorsk" nynorsk + CopyFiles "$TEMP\nppLocalization\nynorsk.xml" "$INSTDIR\localization\nynorsk.xml" + SectionEnd + Section /o "Occitan" occitan + CopyFiles "$TEMP\nppLocalization\occitan.xml" "$INSTDIR\localization\occitan.xml" + SectionEnd + Section /o "Polish" polish + CopyFiles "$TEMP\nppLocalization\polish.xml" "$INSTDIR\localization\polish.xml" + SectionEnd + Section /o "Portuguese" portuguese + CopyFiles "$TEMP\nppLocalization\portuguese.xml" "$INSTDIR\localization\portuguese.xml" + SectionEnd + Section /o "Romanian" romanian + CopyFiles "$TEMP\nppLocalization\romanian.xml" "$INSTDIR\localization\romanian.xml" + SectionEnd + Section /o "Russian" russian + CopyFiles "$TEMP\nppLocalization\russian.xml" "$INSTDIR\localization\russian.xml" + SectionEnd + Section /o "Samogitian" samogitian + CopyFiles "$TEMP\nppLocalization\samogitian.xml" "$INSTDIR\localization\samogitian.xml" + SectionEnd + Section /o "Serbian" serbian + CopyFiles "$TEMP\nppLocalization\serbian.xml" "$INSTDIR\localization\serbian.xml" + SectionEnd + Section /o "Serbian (Cyrillic)" serbianCyrillic + CopyFiles "$TEMP\nppLocalization\serbianCyrillic.xml" "$INSTDIR\localization\serbianCyrillic.xml" + SectionEnd + Section /o "Slovak" slovak + CopyFiles "$TEMP\nppLocalization\slovak.xml" "$INSTDIR\localization\slovak.xml" + SectionEnd + Section /o "Slovak (ANSI)" slovakA + CopyFiles "$TEMP\nppLocalization\slovakA.xml" "$INSTDIR\localization\slovakA.xml" + SectionEnd + Section /o "Slovenian" slovenian + CopyFiles "$TEMP\nppLocalization\slovenian.xml" "$INSTDIR\localization\slovenian.xml" + SectionEnd + Section /o "Spanish" spanish + CopyFiles "$TEMP\nppLocalization\spanish.xml" "$INSTDIR\localization\spanish.xml" + SectionEnd + Section /o "Spanish_ar" spanish_ar + CopyFiles "$TEMP\nppLocalization\spanish_ar.xml" "$INSTDIR\localization\spanish_ar.xml" + SectionEnd + Section /o "Swedish" swedish + CopyFiles "$TEMP\nppLocalization\swedish.xml" "$INSTDIR\localization\swedish.xml" + SectionEnd + Section /o "Tagalog" tagalog + CopyFiles "$TEMP\nppLocalization\tagalog.xml" "$INSTDIR\localization\tagalog.xml" + SectionEnd + Section /o "Tamil" tamil + CopyFiles "$TEMP\nppLocalization\tamil.xml" "$INSTDIR\localization\tamil.xml" + SectionEnd + Section /o "Thai" thai + CopyFiles "$TEMP\nppLocalization\thai.xml" "$INSTDIR\localization\thai.xml" + SectionEnd + Section /o "Turkish" turkish + CopyFiles "$TEMP\nppLocalization\turkish.xml" "$INSTDIR\localization\turkish.xml" + SectionEnd + Section /o "Ukrainian" ukrainian + + CopyFiles "$TEMP\nppLocalization\ukrainian.xml" "$INSTDIR\localization\ukrainian.xml" + SectionEnd + Section /o "Uzbek" uzbek + CopyFiles "$TEMP\nppLocalization\uzbek.xml" "$INSTDIR\localization\uzbek.xml" + SectionEnd + Section /o "Uzbek (Cyrillic)" uzbekCyrillic + CopyFiles "$TEMP\nppLocalization\uzbekCyrillic.xml" "$INSTDIR\localization\uzbekCyrillic.xml" + SectionEnd +SectionGroupEnd -SubSectionEnd - -SubSection "Themes" Themes +SectionGroup "Themes" Themes SetOverwrite off Section "Black Board" BlackBoard SetOutPath "$INSTDIR\themes" @@ -737,7 +904,7 @@ SubSection "Themes" Themes Section "Obsidian" Obsidian SetOutPath "$INSTDIR\themes" - File ".\themes\Obsidian.xml" + File ".\themes\obsidian.xml" SectionEnd Section "Plastic Code Wrap" PlasticCodeWrap @@ -780,7 +947,7 @@ SubSection "Themes" Themes File ".\themes\Zenburn.xml" SectionEnd -SubSectionEnd +SectionGroupEnd Section /o "As default html viewer" htmlViewer SetOverwrite on @@ -789,7 +956,7 @@ Section /o "As default html viewer" htmlViewer WriteRegStr HKLM "SOFTWARE\Microsoft\Internet Explorer\View Source Editor\Editor Name" "" "$INSTDIR\nppIExplorerShell.exe" SectionEnd -InstType "o" +InstType "Minimalist" Section "Auto-Updater" AutoUpdater SetOverwrite on @@ -802,6 +969,14 @@ Section "Auto-Updater" AutoUpdater File "..\bin\updater\readme.txt" SectionEnd +Section "User Manual" UserManual + SetOverwrite on + IfFileExists "$INSTDIR\NppHelp.chm" 0 +2 + Delete "$INSTDIR\NppHelp.chm" + SetOutPath "$INSTDIR\user.manual" + File /r "..\bin\user.manual\" +SectionEnd + Section /o "Create Shortcut on Desktop" shortcutOnDesktop CreateShortCut "$DESKTOP\Notepad++.lnk" "$INSTDIR\notepad++.exe" @@ -828,6 +1003,7 @@ SectionEnd !insertmacro MUI_DESCRIPTION_TEXT ${Themes} 'The eye-candy to change visual effects. Use Theme selector to switch among them.' !insertmacro MUI_DESCRIPTION_TEXT ${htmlViewer} 'Open the html file in Notepad++ while you choose from IE.' !insertmacro MUI_DESCRIPTION_TEXT ${AutoUpdater} 'Keep your Notepad++ update: Check this option to install an update module which searches Notepad++ update on Internet and install it for you.' + !insertmacro MUI_DESCRIPTION_TEXT ${UserManual} 'Here you can get all the secrets of Notepad++.' !insertmacro MUI_DESCRIPTION_TEXT ${shortcutOnDesktop} 'Check this option to add Notepad++ shortcut on your desktop.' !insertmacro MUI_DESCRIPTION_TEXT ${getOldIcon} "I won't blame you if you want to get the old icon back." !insertmacro MUI_FUNCTION_DESCRIPTION_END @@ -849,114 +1025,93 @@ SectionEnd ;Uninstall section -SubSection un.autoCompletionComponent +SectionGroup un.autoCompletionComponent Section un.PHP Delete "$INSTDIR\plugins\APIs\php.xml" - RMDir "$INSTDIR\plugins\APIs\" SectionEnd Section un.CSS Delete "$INSTDIR\plugins\APIs\css.xml" - RMDir "$INSTDIR\plugins\APIs\" SectionEnd Section un.HTML Delete "$INSTDIR\plugins\APIs\html.xml" - RMDir "$INSTDIR\plugins\APIs\" SectionEnd Section un.SQL Delete "$INSTDIR\plugins\APIs\sql.xml" - RMDir "$INSTDIR\plugins\APIs\" SectionEnd Section un.RC Delete "$INSTDIR\plugins\APIs\rc.xml" - RMDir "$INSTDIR\plugins\APIs\" SectionEnd Section un.VB Delete "$INSTDIR\plugins\APIs\vb.xml" - RMDir "$INSTDIR\plugins\APIs\" SectionEnd Section un.Perl Delete "$INSTDIR\plugins\APIs\perl.xml" - RMDir "$INSTDIR\plugins\APIs\" SectionEnd Section un.C Delete "$INSTDIR\plugins\APIs\c.xml" - RMDir "$INSTDIR\plugins\APIs\" SectionEnd Section un.C++ Delete "$INSTDIR\plugins\APIs\cpp.xml" - RMDir "$INSTDIR\plugins\APIs\" SectionEnd Section un.Java Delete "$INSTDIR\plugins\APIs\java.xml" - RMDir "$INSTDIR\plugins\APIs\" SectionEnd Section un.C# Delete "$INSTDIR\plugins\APIs\cs.xml" - RMDir "$INSTDIR\plugins\APIs\" SectionEnd Section un.JavaScript Delete "$INSTDIR\plugins\APIs\javascript.xml" - RMDir "$INSTDIR\plugins\APIs\" SectionEnd Section un.Python Delete "$INSTDIR\plugins\APIs\python.xml" - RMDir "$INSTDIR\plugins\APIs\" SectionEnd Section un.ActionScript Delete "$INSTDIR\plugins\APIs\actionscript.xml" - RMDir "$INSTDIR\plugins\APIs\" SectionEnd Section un.LISP Delete "$INSTDIR\plugins\APIs\lisp.xml" - RMDir "$INSTDIR\plugins\APIs\" SectionEnd Section un.VHDL Delete "$INSTDIR\plugins\APIs\vhdl.xml" - RMDir "$INSTDIR\plugins\APIs\" SectionEnd Section un.TeX Delete "$INSTDIR\plugins\APIs\tex.xml" - RMDir "$INSTDIR\plugins\APIs\" SectionEnd Section un.DocBook Delete "$INSTDIR\plugins\APIs\xml.xml" - RMDir "$INSTDIR\plugins\APIs\" SectionEnd Section un.NSIS Delete "$INSTDIR\plugins\APIs\nsis.xml" - RMDir "$INSTDIR\plugins\APIs\" SectionEnd Section un.AWK Delete "$INSTDIR\plugins\APIs\awk.xml" - RMDir "$INSTDIR\plugins\APIs\" SectionEnd Section un.CMAKE Delete "$INSTDIR\plugins\APIs\cmake.xml" - RMDir "$INSTDIR\plugins\APIs\" SectionEnd -SubSectionEnd +SectionGroupEnd -SubSection un.Plugins +SectionGroup un.Plugins Section un.NPPTextFX Delete "$INSTDIR\plugins\NPPTextFX.dll" Delete "$INSTDIR\plugins\NPPTextFX.ini" @@ -968,32 +1123,27 @@ SubSection un.Plugins Delete "$INSTDIR\plugins\Config\tidy\W3C-CSSValidator.htm" Delete "$INSTDIR\plugins\Config\tidy\W3C-HTMLValidator.htm" RMDir "$INSTDIR\plugins\tidy\" - RMDir "$INSTDIR\plugins\" SectionEnd Section un.NppNetNote Delete "$INSTDIR\plugins\NppNetNote.dll" Delete "$INSTDIR\plugins\Config\NppNetNote.ini" - RMDir "$INSTDIR\plugins\" SectionEnd Section un.NppAutoIndent Delete "$INSTDIR\plugins\NppAutoIndent.dll" Delete "$INSTDIR\plugins\Config\NppAutoIndent.ini" - RMDir "$INSTDIR\plugins\" SectionEnd Section un.MIMETools Delete "$INSTDIR\plugins\NppTools.dll" Delete "$INSTDIR\plugins\mimeTools.dll" - RMDir "$INSTDIR\plugins\" SectionEnd Section un.FTP_synchronize Delete "$INSTDIR\plugins\FTP_synchronize.dll" Delete "$INSTDIR\plugins\Config\FTP_synchronize.ini" Delete "$INSTDIR\plugins\doc\FTP_synchonize.ReadMe.txt" - RMDir "$INSTDIR\plugins\" SectionEnd Section un.NppFTP @@ -1007,34 +1157,28 @@ SubSection un.Plugins Delete "$INSTDIR\plugins\doc\NppFTP\license_UTCP.htm" Delete "$INSTDIR\plugins\doc\NppFTP\Readme.txt" - RMDir "$INSTDIR\plugins\" SectionEnd Section un.NppExport Delete "$INSTDIR\plugins\NppExport.dll" - RMDir "$INSTDIR\plugins\" SectionEnd Section un.SelectNLaunch Delete "$INSTDIR\plugins\SelectNLaunch.dll" - RMDir "$INSTDIR\plugins\" SectionEnd Section un.DocMonitor Delete "$INSTDIR\plugins\docMonitor.dll" Delete "$INSTDIR\plugins\Config\docMonitor.ini" - RMDir "$INSTDIR\plugins\" SectionEnd Section un.LightExplorer Delete "$INSTDIR\plugins\LightExplorer.dll" Delete "$INSTDIR\lightExplorer.ini" - RMDir "$INSTDIR\plugins\" SectionEnd Section un.HexEditor Delete "$INSTDIR\plugins\HexEditor.dll" - RMDir "$INSTDIR\plugins\" SectionEnd Section un.ConvertExt Delete "$INSTDIR\plugins\ConvertExt.dll" @@ -1044,11 +1188,9 @@ SubSection un.Plugins Delete "$INSTDIR\ConvertExt.ini" Delete "$INSTDIR\ConvertExt.enc" Delete "$INSTDIR\ConvertExt.lng" - RMDir "$INSTDIR\plugins\" SectionEnd Section un.SpellChecker Delete "$INSTDIR\plugins\SpellChecker.dll" - RMDir "$INSTDIR\plugins\" SectionEnd Section un.NppExec Delete "$INSTDIR\plugins\NppExec.dll" @@ -1057,102 +1199,283 @@ SubSection un.Plugins Delete "$INSTDIR\plugins\Config\NppExec.ini" Delete "$INSTDIR\plugins\Config\NppExec_Manual.chm" Delete "$INSTDIR\plugins\Config\NppExec.ini" - RMDir "$INSTDIR\plugins\" RMDir "$INSTDIR\plugins\doc\" SectionEnd Section un.QuickText Delete "$INSTDIR\plugins\QuickText.dll" Delete "$INSTDIR\QuickText.ini" Delete "$INSTDIR\plugins\doc\quickText_README.txt" - RMDir "$INSTDIR\plugins\" SectionEnd Section un.ComparePlugin Delete "$INSTDIR\plugins\ComparePlugin.dll" - RMDir "$INSTDIR\plugins\" SectionEnd Section un.PluginManager Delete "$INSTDIR\plugins\PluginManager.dll" - RMDir "$INSTDIR\plugins\" Delete "$INSTDIR\updater\gpup.exe" RMDir "$INSTDIR\updater\" SectionEnd Section un.ChangeMarkers Delete "$INSTDIR\plugins\NppPlugin_ChangeMarker.dll" - RMDir "$INSTDIR\plugins\" SectionEnd -SubSectionEnd +SectionGroupEnd -SubSection un.Themes +SectionGroup un.Themes Section un.BlackBoard Delete "$INSTDIR\themes\Black board.xml" - RMDir "$INSTDIR\themes\" SectionEnd Section un.Choco Delete "$INSTDIR\themes\Choco.xml" - RMDir "$INSTDIR\themes\" SectionEnd Section un.HelloKitty Delete "$INSTDIR\themes\Hello Kitty.xml" - RMDir "$INSTDIR\themes\" SectionEnd Section un.MonoIndustrial Delete "$INSTDIR\themes\Mono Industrial.xml" - RMDir "$INSTDIR\themes\" SectionEnd Section un.Monokai Delete "$INSTDIR\themes\Monokai.xml" - RMDir "$INSTDIR\themes\" SectionEnd Section un.Obsidian - Delete "$INSTDIR\themes\Obsidian.xml" - RMDir "$INSTDIR\themes\" + Delete "$INSTDIR\themes/obsidian.xml" SectionEnd Section un.PlasticCodeWrap Delete "$INSTDIR\themes\Plastic Code Wrap.xml" - RMDir "$INSTDIR\themes\" SectionEnd Section un.RubyBlue Delete "$INSTDIR\themes\Ruby Blue.xml" - RMDir "$INSTDIR\themes\" SectionEnd Section un.Twilight Delete "$INSTDIR\themes\Twilight.xml" - RMDir "$INSTDIR\themes\" SectionEnd Section un.VibrantInk Delete "$INSTDIR\themes\Vibrant Ink.xml" - RMDir "$INSTDIR\themes\" SectionEnd Section un.DeepBlack Delete "$INSTDIR\themes\Deep Black.xml" - RMDir "$INSTDIR\themes\" SectionEnd Section un.vimDarkBlue Delete "$INSTDIR\themes\vim Dark Blue.xml" - RMDir "$INSTDIR\themes\" SectionEnd Section un.Bespin Delete "$INSTDIR\themes\Bespin.xml" - RMDir "$INSTDIR\themes\" SectionEnd Section un.Zenburn Delete "$INSTDIR\themes\Zenburn.xml" - RMDir "$INSTDIR\themes\" SectionEnd -SubSectionEnd +SectionGroupEnd + +SectionGroup un.localization + SetOverwrite on + Section un.afrikaans + Delete "$INSTDIR\localization\afrikaans.xml" + SectionEnd + Section un.albanian + Delete "$INSTDIR\localization\albanian.xml" + SectionEnd + Section un.arabic + Delete "$INSTDIR\localization\arabic.xml" + SectionEnd + Section un.aranese + Delete "$INSTDIR\localization\aranese.xml" + SectionEnd + Section un.azerbaijani + Delete "$INSTDIR\localization\azerbaijani.xml" + SectionEnd + Section un.basque + Delete "$INSTDIR\localization\basque.xml" + SectionEnd + Section un.belarusian + Delete "$INSTDIR\localization\belarusian.xml" + SectionEnd + Section un.bosnian + Delete "$INSTDIR\localization\bosnian.xml" + SectionEnd + Section un.brazilian_portuguese + Delete "$INSTDIR\localization\brazilian_portuguese.xml" + SectionEnd + Section un.bulgarian + Delete "$INSTDIR\localization\bulgarian.xml" + SectionEnd + Section un.catalan + Delete "$INSTDIR\localization\catalan.xml" + SectionEnd + Section un.chineseTraditional + Delete "$INSTDIR\localization\chinese.xml" + SectionEnd + Section un.chineseSimplified + Delete "$INSTDIR\localization\chineseSimplified.xml" + SectionEnd + Section un.croatian + Delete "$INSTDIR\localization\croatian.xml" + SectionEnd + Section un.czech + Delete "$INSTDIR\localization\czech.xml" + SectionEnd + Section un.danish + Delete "$INSTDIR\localization\danish.xml" + SectionEnd + Section un.dutch + Delete "$INSTDIR\localization\dutch.xml" + SectionEnd + Section un.english_customizable + Delete "$INSTDIR\localization\english_customizable.xml" + SectionEnd + Section un.esperanto + Delete "$INSTDIR\localization\esperanto.xml" + SectionEnd + Section un.extremaduran + Delete "$INSTDIR\localization\extremaduran.xml" + SectionEnd + Section un.farsi + Delete "$INSTDIR\localization\farsi.xml" + SectionEnd + Section un.finnish + Delete "$INSTDIR\localization\finnish.xml" + SectionEnd + Section un.friulian + Delete "$INSTDIR\localization\friulian.xml" + SectionEnd + Section un.french + Delete "$INSTDIR\localization\french.xml" + SectionEnd + Section un.galician + Delete "$INSTDIR\localization\galician.xml" + SectionEnd + Section un.georgian + Delete "$INSTDIR\localization\georgian.xml" + SectionEnd + Section un.german + Delete "$INSTDIR\localization\german.xml" + SectionEnd + Section un.greek + Delete "$INSTDIR\localization\greek.xml" + SectionEnd + Section un.hebrew + Delete "$INSTDIR\localization\hebrew.xml" + SectionEnd + Section un.hungarian + Delete "$INSTDIR\localization\hungarian.xml" + SectionEnd + Section un.hungarianA + Delete "$INSTDIR\localization\hungarianA.xml" + SectionEnd + Section un.indonesian + Delete "$INSTDIR\localization\indonesian.xml" + SectionEnd + Section un.italian + Delete "$INSTDIR\localization\italian.xml" + SectionEnd + Section un.japanese + Delete "$INSTDIR\localization\japanese.xml" + SectionEnd + Section un.kazakh + Delete "$INSTDIR\localization\kazakh.xml" + SectionEnd + Section un.korean + Delete "$INSTDIR\localization\korean.xml" + SectionEnd + Section un.kyrgyz + Delete "$INSTDIR\localization\kyrgyz.xml" + SectionEnd + Section un.Latvian + Delete "$INSTDIR\localization\Latvian.xml" + SectionEnd + Section un.lithuanian + Delete "$INSTDIR\localization\lithuanian.xml" + SectionEnd + Section un.luxembourgish + Delete "$INSTDIR\localization\luxembourgish.xml" + SectionEnd + Section un.macedonian + Delete "$INSTDIR\localization\macedonian.xml" + SectionEnd + Section un.malay + Delete "$INSTDIR\localization\malay.xml" + SectionEnd + Section un.norwegian + Delete "$INSTDIR\localization\norwegian.xml" + SectionEnd + Section un.nynorsk + Delete "$INSTDIR\localization\nynorsk.xml" + SectionEnd + Section un.occitan + Delete "$INSTDIR\localization\occitan.xml" + SectionEnd + Section un.polish + Delete "$INSTDIR\localization\polish.xml" + SectionEnd + Section un.portuguese + Delete "$INSTDIR\localization\portuguese.xml" + SectionEnd + Section un.romanian + Delete "$INSTDIR\localization\romanian.xml" + SectionEnd + Section un.russian + Delete "$INSTDIR\localization\russian.xml" + SectionEnd + Section un.samogitian + Delete "$INSTDIR\localization\samogitian.xml" + SectionEnd + Section un.serbian + Delete "$INSTDIR\localization\serbian.xml" + SectionEnd + Section un.serbianCyrillic + Delete "$INSTDIR\localization\serbianCyrillic.xml" + SectionEnd + Section un.slovak + Delete "$INSTDIR\localization\slovak.xml" + SectionEnd + Section un.slovakA + Delete "$INSTDIR\localization\slovakA.xml" + SectionEnd + Section un.slovenian + Delete "$INSTDIR\localization\slovenian.xml" + SectionEnd + Section un.spanish + Delete "$INSTDIR\localization\spanish.xml" + SectionEnd + Section un.spanish_ar + Delete "$INSTDIR\localization\spanish_ar.xml" + SectionEnd + Section un.swedish + Delete "$INSTDIR\localization\swedish.xml" + SectionEnd + Section un.tagalog + Delete "$INSTDIR\localization\tagalog.xml" + SectionEnd + Section un.tamil + Delete "$INSTDIR\localization\tamil.xml" + SectionEnd + Section un.thai + Delete "$INSTDIR\localization\thai.xml" + SectionEnd + Section un.turkish + Delete "$INSTDIR\localization\turkish.xml" + SectionEnd + Section un.ukrainian + Delete "$INSTDIR\localization\ukrainian.xml" + SectionEnd + Section un.uzbek + Delete "$INSTDIR\localization\uzbek.xml" + SectionEnd + Section un.uzbekCyrillic + Delete "$INSTDIR\localization\uzbekCyrillic.xml" + SectionEnd +SectionGroupEnd + Section un.htmlViewer DeleteRegKey HKLM "SOFTWARE\Microsoft\Internet Explorer\View Source Editor" @@ -1181,6 +1504,10 @@ Section un.explorerContextMenu Delete "$INSTDIR\NppShell_04.dll" SectionEnd +Section un.UserManual + RMDir /r "$INSTDIR\user.manual" +SectionEnd + Section Uninstall ;Remove from registry... DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" @@ -1235,23 +1562,28 @@ Section Uninstall Delete "$APPDATA\Notepad++\nativeLang.xml" Delete "$APPDATA\Notepad++\session.xml" Delete "$APPDATA\Notepad++\insertExt.ini" - + IfFileExists "$INSTDIR\NppHelp.chm" 0 +2 + Delete "$INSTDIR\NppHelp.chm" + RMDir "$APPDATA\Notepad++" StrCmp $1 "Admin" 0 +2 SetShellVarContext all ; Remove remaining directories - RMDir "$SMPROGRAMS\Notepad++" + RMDir /r "$INSTDIR\plugins\disabled\" + RMDir "$INSTDIR\plugins\APIs\" + RMDir "$INSTDIR\plugins\" + RMDir "$INSTDIR\themes\" + RMDir "$INSTDIR\localization\" RMDir "$INSTDIR\" + RMDir "$SMPROGRAMS\Notepad++" RMDir "$APPDATA\Notepad++" SectionEnd Function un.onInit - !insertmacro MUI_UNGETLANGUAGE - FunctionEnd BrandingText "Don HO" diff --git a/PowerEditor/installer/packageAll.bat b/PowerEditor/installer/packageAll.bat index 0d28351e..25fe2379 100644 --- a/PowerEditor/installer/packageAll.bat +++ b/PowerEditor/installer/packageAll.bat @@ -64,7 +64,7 @@ copy /Y ..\src\contextMenu.xml .\zipped.package.release\unicode\ If ErrorLevel 1 PAUSE copy /Y ..\src\shortcuts.xml .\zipped.package.release\unicode\ If ErrorLevel 1 PAUSE -copy /Y ..\bin\NppHelp.chm .\zipped.package.release\unicode\ +xcopy /Y /S ..\bin\user.manual .\zipped.package.release\unicode\user.manual If ErrorLevel 1 PAUSE copy /Y ..\bin\doLocalConf.xml .\zipped.package.release\unicode\ If ErrorLevel 1 PAUSE @@ -100,7 +100,7 @@ copy /Y ..\bin\license.txt .\zipped.package.release\ansi\ If ErrorLevel 1 PAUSE copy /Y ..\bin\readme.txt .\zipped.package.release\ansi\ If ErrorLevel 1 PAUSE -copy /Y ..\bin\NppHelp.chm .\zipped.package.release\ansi\ +xcopy /Y /S ..\bin\user.manual .\zipped.package.release\ansi\user.manual If ErrorLevel 1 PAUSE copy /Y ..\bin\change.log .\zipped.package.release\ansi\ If ErrorLevel 1 PAUSE diff --git a/PowerEditor/src/Notepad_plus.rc b/PowerEditor/src/Notepad_plus.rc index 7b435b8e..556173ca 100644 --- a/PowerEditor/src/Notepad_plus.rc +++ b/PowerEditor/src/Notepad_plus.rc @@ -735,7 +735,7 @@ BEGIN MENUITEM SEPARATOR MENUITEM "Notepad++ Home", IDM_HOMESWEETHOME MENUITEM "Notepad++ Project Page", IDM_PROJECTPAGE - MENUITEM "NpWiki++ (Online Help)", IDM_ONLINEHELP + MENUITEM "Online Documentation", IDM_ONLINEHELP MENUITEM "Forum", IDM_FORUM MENUITEM "Get More Plugins", IDM_PLUGINSHOME MENUITEM SEPARATOR diff --git a/PowerEditor/src/NppCommands.cpp b/PowerEditor/src/NppCommands.cpp index 2cdbba4b..1dc46a2b 100644 --- a/PowerEditor/src/NppCommands.cpp +++ b/PowerEditor/src/NppCommands.cpp @@ -1785,7 +1785,7 @@ void Notepad_plus::command(int id) generic_string tmp((NppParameters::getInstance())->getNppPath()); generic_string nppHelpPath = tmp.c_str(); - nppHelpPath += TEXT("\\NppHelp.chm"); + nppHelpPath += TEXT("\\user.manual\\documentation\\%2Fnotepad-online-document.html"); if (::PathFileExists(nppHelpPath.c_str())) ::ShellExecute(NULL, TEXT("open"), nppHelpPath.c_str(), NULL, NULL, SW_SHOWNORMAL); else @@ -1816,7 +1816,7 @@ void Notepad_plus::command(int id) case IDM_ONLINEHELP: { - ::ShellExecute(NULL, TEXT("open"), TEXT("http://sourceforge.net/apps/mediawiki/notepad-plus/index.php?title=Main_Page"), NULL, NULL, SW_SHOWNORMAL); + ::ShellExecute(NULL, TEXT("open"), TEXT("http://npp-community.tuxfamily.org/"), NULL, NULL, SW_SHOWNORMAL); break; } diff --git a/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp b/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp index 9763509d..34a8a4d4 100644 --- a/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp +++ b/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp @@ -85,29 +85,29 @@ BOOL CALLBACK PreferenceDlg::run_dlgProc(UINT Message, WPARAM wParam, LPARAM lPa _ctrlTab.setFont(TEXT("Tahoma"), 13); _barsDlg.init(_hInst, _hSelf); - _barsDlg.create(IDD_PREFERENCE_BAR_BOX); + _barsDlg.create(IDD_PREFERENCE_BAR_BOX, false, false); _barsDlg.display(); _marginsDlg.init(_hInst, _hSelf); - _marginsDlg.create(IDD_PREFERENCE_MARGEIN_BOX); + _marginsDlg.create(IDD_PREFERENCE_MARGEIN_BOX, false, false); _settingsDlg.init(_hInst, _hSelf); - _settingsDlg.create(IDD_PREFERENCE_SETTING_BOX); + _settingsDlg.create(IDD_PREFERENCE_SETTING_BOX, false, false); _defaultNewDocDlg.init(_hInst, _hSelf); - _defaultNewDocDlg.create(IDD_PREFERENCE_NEWDOCSETTING_BOX); + _defaultNewDocDlg.create(IDD_PREFERENCE_NEWDOCSETTING_BOX, false, false); _fileAssocDlg.init(_hInst, _hSelf); - _fileAssocDlg.create(IDD_REGEXT_BOX); + _fileAssocDlg.create(IDD_REGEXT_BOX, false, false); _printSettingsDlg.init(_hInst, _hSelf); - _printSettingsDlg.create(IDD_PREFERENCE_PRINT_BOX); + _printSettingsDlg.create(IDD_PREFERENCE_PRINT_BOX, false, false); _langMenuDlg.init(_hInst, _hSelf); - _langMenuDlg.create(IDD_PREFERENCE_LANG_BOX); + _langMenuDlg.create(IDD_PREFERENCE_LANG_BOX, false, false); _backupDlg.init(_hInst, _hSelf); - _backupDlg.create(IDD_PREFERENCE_BACKUP_BOX); + _backupDlg.create(IDD_PREFERENCE_BACKUP_BOX, false, false); _wVector.push_back(DlgInfo(&_barsDlg, TEXT("General"), TEXT("Global"))); _wVector.push_back(DlgInfo(&_marginsDlg, TEXT("Editing"), TEXT("Scintillas"))); diff --git a/PowerEditor/src/WinControls/StaticDialog/StaticDialog.cpp b/PowerEditor/src/WinControls/StaticDialog/StaticDialog.cpp index 0cfdecb2..c4da9f7a 100644 --- a/PowerEditor/src/WinControls/StaticDialog/StaticDialog.cpp +++ b/PowerEditor/src/WinControls/StaticDialog/StaticDialog.cpp @@ -85,7 +85,7 @@ HGLOBAL StaticDialog::makeRTLResource(int dialogID, DLGTEMPLATE **ppMyDlgTemplat return hMyDlgTemplate; } -void StaticDialog::create(int dialogID, bool isRTL) +void StaticDialog::create(int dialogID, bool isRTL, bool msgDestParent) { if (isRTL) { @@ -102,7 +102,8 @@ void StaticDialog::create(int dialogID, bool isRTL) return; } - ::SendMessage(_hParent, NPPM_MODELESSDIALOG, MODELESSDIALOGADD, (WPARAM)_hSelf); + // if the destination of message NPPM_MODELESSDIALOG is not its parent, then it's the grand-parent + ::SendMessage(msgDestParent?_hParent:(::GetParent(_hParent)), NPPM_MODELESSDIALOG, MODELESSDIALOGADD, (WPARAM)_hSelf); } BOOL CALLBACK StaticDialog::dlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) diff --git a/PowerEditor/src/WinControls/StaticDialog/StaticDialog.h b/PowerEditor/src/WinControls/StaticDialog/StaticDialog.h index bf2c8902..1f5afcf6 100644 --- a/PowerEditor/src/WinControls/StaticDialog/StaticDialog.h +++ b/PowerEditor/src/WinControls/StaticDialog/StaticDialog.h @@ -50,7 +50,7 @@ public : destroy(); } }; - virtual void create(int dialogID, bool isRTL = false); + virtual void create(int dialogID, bool isRTL = false, bool msgDestParent = true); virtual bool isCreated() const { return (_hSelf != NULL); diff --git a/PowerEditor/src/localization.cpp b/PowerEditor/src/localization.cpp index 9473d144..efde8eb1 100644 --- a/PowerEditor/src/localization.cpp +++ b/PowerEditor/src/localization.cpp @@ -1158,8 +1158,8 @@ bool NativeLangSpeaker::getMsgBoxLang(const char *msgBoxTagName, generic_string title = wmc->char2wchar(titre, _nativeLangEncoding); message = wmc->char2wchar(msg, _nativeLangEncoding); #else - title = wmc->char2wchar(titre, _nativeLangEncoding); - message = wmc->char2wchar(msg, _nativeLangEncoding); + title = titre; + message = msg; #endif return true; } diff --git a/PowerEditor/src/resource.h b/PowerEditor/src/resource.h index fdc8ccad..83ffefbf 100644 --- a/PowerEditor/src/resource.h +++ b/PowerEditor/src/resource.h @@ -18,12 +18,12 @@ #ifndef RESOURCE_H #define RESOURCE_H -#define NOTEPAD_PLUS_VERSION TEXT("Notepad++ v5.8.6") +#define NOTEPAD_PLUS_VERSION TEXT("Notepad++ v5.8.7") // should be X.Y : ie. if VERSION_DIGITALVALUE == 4, 7, 1, 0 , then X = 4, Y = 71 // ex : #define VERSION_VALUE TEXT("5.63\0") -#define VERSION_VALUE TEXT("5.86\0") -#define VERSION_DIGITALVALUE 5, 8, 6, 0 +#define VERSION_VALUE TEXT("5.87\0") +#define VERSION_DIGITALVALUE 5, 8, 7, 0 #ifdef UNICODE #define UNICODE_ANSI_MODE TEXT("(UNICODE)")