=== modified file 'Makefile.in' --- Makefile.in 2011-05-21 09:53:32 +0000 +++ Makefile.in 2011-05-23 08:00:38 +0000 @@ -331,8 +331,8 @@ # $(gnulib_srcdir) (relative to $(srcdir) and should have build tools # as per $(gnulib_srcdir)/DEPENDENCIES. GNULIB_MODULES = \ - careadlinkat crypto/md5 dtoastr filemode getloadavg getopt-gnu \ - ignore-value intprops lstat mktime readlink \ + careadlinkat crypto/md5 crypto/sha1 dtoastr filemode getloadavg \ + getopt-gnu ignore-value intprops lstat mktime readlink \ socklen stdarg stdio strftime strtoumax symlink sys_stat GNULIB_TOOL_FLAGS = \ --conditional-dependencies --import --no-changelog --no-vc-files \ === modified file 'lisp/bindings.el' --- lisp/bindings.el 2011-04-19 13:44:55 +0000 +++ lisp/bindings.el 2011-05-23 08:02:18 +0000 @@ -646,9 +646,10 @@ (make-variable-buffer-local 'indent-tabs-mode) -;; We have base64 and md5 functions built in now. +;; We have base64, md5 and sha1 functions built in now. (provide 'base64) (provide 'md5) +(provide 'sha1) (provide 'overlay '(display syntax-table field)) (provide 'text-properties '(display syntax-table field point-entered)) === renamed file 'lisp/sha1.el' => 'lisp/obsolete/sha1.el' --- lisp/sha1.el 2011-01-25 04:08:28 +0000 +++ lisp/obsolete/sha1.el 2011-05-23 08:07:18 +0000 @@ -4,6 +4,7 @@ ;; Author: Shuhei KOBAYASHI ;; Keywords: SHA1, FIPS 180-1 +;; Obsolete-since: 24.1 ;; This file is part of GNU Emacs. === modified file 'src/deps.mk' --- src/deps.mk 2011-04-23 10:33:28 +0000 +++ src/deps.mk 2011-05-23 06:31:38 +0000 @@ -284,7 +284,8 @@ floatfns.o: floatfns.c syssignal.h lisp.h globals.h $(config_h) fns.o: fns.c commands.h lisp.h $(config_h) frame.h buffer.h character.h \ keyboard.h keymap.h window.h $(INTERVALS_H) coding.h ../lib/md5.h \ - blockinput.h atimer.h systime.h xterm.h ../lib/unistd.h globals.h + ../lib/sha1.h blockinput.h atimer.h systime.h xterm.h ../lib/unistd.h \ + globals.h print.o: print.c process.h frame.h window.h buffer.h keyboard.h character.h \ lisp.h globals.h $(config_h) termchar.h $(INTERVALS_H) msdos.h termhooks.h \ blockinput.h atimer.h systime.h font.h charset.h coding.h ccl.h \ === modified file 'src/fns.c' --- src/fns.c 2011-05-15 17:17:44 +0000 +++ src/fns.c 2011-05-23 06:20:26 +0000 @@ -4514,42 +4514,17 @@ /************************************************************************ - MD5 + MD5 and SHA1 ************************************************************************/ #include "md5.h" +#include "sha1.h" -DEFUN ("md5", Fmd5, Smd5, 1, 5, 0, - doc: /* Return MD5 message digest of OBJECT, a buffer or string. - -A message digest is a cryptographic checksum of a document, and the -algorithm to calculate it is defined in RFC 1321. - -The two optional arguments START and END are character positions -specifying for which part of OBJECT the message digest should be -computed. If nil or omitted, the digest is computed for the whole -OBJECT. - -The MD5 message digest is computed from the result of encoding the -text in a coding system, not directly from the internal Emacs form of -the text. The optional fourth argument CODING-SYSTEM specifies which -coding system to encode the text with. It should be the same coding -system that you used or will use when actually writing the text into a -file. - -If CODING-SYSTEM is nil or omitted, the default depends on OBJECT. If -OBJECT is a buffer, the default for CODING-SYSTEM is whatever coding -system would be chosen by default for writing this text into a file. - -If OBJECT is a string, the most preferred coding system (see the -command `prefer-coding-system') is used. +/* TYPE: 0 for md5, 1 for sha1. */ -If NOERROR is non-nil, silently assume the `raw-text' coding if the -guesswork fails. Normally, an error is signaled in such case. */) - (Lisp_Object object, Lisp_Object start, Lisp_Object end, Lisp_Object coding_system, Lisp_Object noerror) +Lisp_Object +hash_function (int type, Lisp_Object object, Lisp_Object start, Lisp_Object end, Lisp_Object coding_system, Lisp_Object noerror, Lisp_Object binary) { - unsigned char digest[16]; - char value[33]; int i; EMACS_INT size; EMACS_INT size_byte = 0; @@ -4558,6 +4533,7 @@ register EMACS_INT b, e; register struct buffer *bp; EMACS_INT temp; + Lisp_Object res=Qnil; if (STRINGP (object)) { @@ -4728,15 +4704,92 @@ object = code_convert_string (object, coding_system, Qnil, 1, 0, 0); } - md5_buffer (SSDATA (object) + start_byte, - SBYTES (object) - (size_byte - end_byte), - digest); - - for (i = 0; i < 16; i++) - sprintf (&value[2 * i], "%02x", digest[i]); - value[32] = '\0'; + switch (type) + { + case 0: /* MD5 */ + { + unsigned char digest[16]; + md5_buffer (SSDATA (object) + start_byte, + SBYTES (object) - (size_byte - end_byte), + digest); + + if (NILP(binary)) + { + unsigned char value[33]; + for (i = 0; i < 16; i++) + sprintf (&value[2 * i], "%02x", digest[i]); + value[32] = '\0'; + res = make_string (value, 32); + } + else + res = make_string (digest, 16); + break; + } + + case 1: /* SHA1 */ + { + unsigned char digest[20]; + sha1_buffer (SDATA (object) + start_byte, + SBYTES (object) - (size_byte - end_byte), + digest); + if (NILP(binary)) + { + unsigned char value[41]; + for (i = 0; i < 20; i++) + sprintf (&value[2 * i], "%02x", digest[i]); + value[40] = '\0'; + res = make_string (value, 40); + } + else + res = make_string (digest, 20); + break; + } + } + + return res; +} - return make_string (value, 32); +DEFUN ("md5", Fmd5, Smd5, 1, 5, 0, + doc: /* Return MD5 message digest of OBJECT, a buffer or string. + +A message digest is a cryptographic checksum of a document, and the +algorithm to calculate it is defined in RFC 1321. + +The two optional arguments START and END are character positions +specifying for which part of OBJECT the message digest should be +computed. If nil or omitted, the digest is computed for the whole +OBJECT. + +The MD5 message digest is computed from the result of encoding the +text in a coding system, not directly from the internal Emacs form of +the text. The optional fourth argument CODING-SYSTEM specifies which +coding system to encode the text with. It should be the same coding +system that you used or will use when actually writing the text into a +file. + +If CODING-SYSTEM is nil or omitted, the default depends on OBJECT. If +OBJECT is a buffer, the default for CODING-SYSTEM is whatever coding +system would be chosen by default for writing this text into a file. + +If OBJECT is a string, the most preferred coding system (see the +command `prefer-coding-system') is used. + +If NOERROR is non-nil, silently assume the `raw-text' coding if the +guesswork fails. Normally, an error is signaled in such case. */) + (Lisp_Object object, Lisp_Object start, Lisp_Object end, Lisp_Object coding_system, Lisp_Object noerror) +{ + return hash_function (0, object, start, end, coding_system, noerror, Qnil); +} + +DEFUN ("sha1", Fsha1, Ssha1, 1, 4, 0, + doc: /* Return the SHA1 (Secure Hash Algorithm) of an OBJECT. +OBJECT is either a string or a buffer. +Optional arguments BEG and END denote buffer positions for computing +the hash of a portion of OBJECT. +If BINARY is non-nil, return a string in binary form. */) + (Lisp_Object object, Lisp_Object start, Lisp_Object end, Lisp_Object binary) +{ + return hash_function (1, object, start, end, Qnil, Qnil, binary); } @@ -4911,6 +4964,7 @@ defsubr (&Sbase64_encode_string); defsubr (&Sbase64_decode_string); defsubr (&Smd5); + defsubr (&Ssha1); defsubr (&Slocale_info); }