annotate lisp/sha1.el @ 110410:f2e111723c3a

Merge changes made in Gnus trunk. Reimplement nnimap, and do tweaks to the rest of the code to support that. * gnus-int.el (gnus-finish-retrieve-group-infos) (gnus-retrieve-group-data-early): New functions. * gnus-range.el (gnus-range-nconcat): New function. * gnus-start.el (gnus-get-unread-articles): Support early retrieval of data. (gnus-read-active-for-groups): Support finishing the early retrieval of data. * gnus-sum.el (gnus-summary-move-article): Pass the move-to group name if the move is internal, so that nnimap can do fast internal moves. * gnus.el (gnus-article-special-mark-lists): Add uid/active tuples, for nnimap usage. * nnimap.el: Rewritten. * nnmail.el (nnmail-inhibit-default-split-group): New internal variable to allow the mail splitting to not return a default group. This is useful for nnimap, which will leave unmatched mail in the inbox. * utf7.el (utf7-encode): Autoload. Implement shell connection. * nnimap.el (nnimap-open-shell-stream): New function. (nnimap-open-connection): Use it. Get the number of lines by using BODYSTRUCTURE. (nnimap-transform-headers): Get the number of lines in each message. (nnimap-retrieve-headers): Query for BODYSTRUCTURE so that we get the number of lines. Not all servers return UIDNEXT. Work past this problem. Remove junk from end of file. Fix typo in "bogus" section. Make capabilties be case-insensitive. Require cl when compiling. Don't bug out if the LIST command doesn't have any parameters. 2010-09-17 Knut Anders Hatlen <kahatlen@gmail.com> (tiny change) * nnimap.el (nnimap-get-groups): Don't bug out if the LIST command doesn't have any parameters. (mm-text-html-renderer): Document gnus-article-html. 2010-09-17 Julien Danjou <julien@danjou.info> (tiny fix) * mm-decode.el (mm-text-html-renderer): Document gnus-article-html. * dgnushack.el: Define netrc-credentials. If the user doesn't have a /etc/services, supply some sensible port defaults. Have `unseen-or-unread' select an unread unseen article first. (nntp-open-server): Return whether the open was successful or not. Throughout all files, replace (save-excursion (set-buffer ...)) with (with-current-buffer ... ). Save result so that it doesn't say "failed" all the time. Add ~/.authinfo to the default, since that's probably most useful for users. Don't use the "finish" method when we're reading from the agent. Add some more nnimap-relevant agent stuff to nnagent.el. * nnimap.el (nnimap-with-process-buffer): Removed. Revert one line that was changed by mistake in the last checkin. (nnimap-open-connection): Don't error out when we can't make a connection nnimap-related changes to avoid bugging out if we can't contact a server. * gnus-start.el (gnus-get-unread-articles): Don't try to scan groups from methods that are denied. * nnimap.el (nnimap-possibly-change-group): Return nil if we can't log in. (nnimap-finish-retrieve-group-infos): Make sure we're not waiting for nothing. * gnus-sum.el (gnus-select-newsgroup): Indent.
author Katsumi Yamaoka <yamaoka@jpl.org>
date Sat, 18 Sep 2010 10:02:19 +0000
parents 8d09094063d0
children 417b1e4d63cd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
86919
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1 ;;; sha1.el --- SHA1 Secure Hash Algorithm in Emacs-Lisp
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
2
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
3 ;; Copyright (C) 1999, 2001, 2002, 2003, 2004,
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 106276
diff changeset
4 ;; 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
86919
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
5
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
6 ;; Author: Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
7 ;; Keywords: SHA1, FIPS 180-1
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
8
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
10
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92779
diff changeset
11 ;; GNU Emacs is free software: you can redistribute it and/or modify
86919
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92779
diff changeset
13 ;; the Free Software Foundation, either version 3 of the License, or
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92779
diff changeset
14 ;; (at your option) any later version.
86919
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
15
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
19 ;; GNU General Public License for more details.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
20
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92779
diff changeset
22 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
86919
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
23
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
24 ;;; Commentary:
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
25
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
26 ;; This program is implemented from the definition of SHA-1 in FIPS PUB
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
27 ;; 180-1 (Federal Information Processing Standards Publication 180-1),
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
28 ;; "Announcing the Standard for SECURE HASH STANDARD".
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
29 ;; <URL:http://www.itl.nist.gov/div897/pubs/fip180-1.htm>
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
30 ;; (EXCEPTION; two optimizations taken from GnuPG/cipher/sha1.c)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
31 ;;
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
32 ;; Test cases from FIPS PUB 180-1.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
33 ;;
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
34 ;; (sha1 "abc")
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
35 ;; => a9993e364706816aba3e25717850c26c9cd0d89d
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
36 ;;
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
37 ;; (sha1 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq")
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
38 ;; => 84983e441c3bd26ebaae4aa1f95129e5e54670f1
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
39 ;;
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
40 ;; (sha1 (make-string 1000000 ?a))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
41 ;; => 34aa973cd4c4daa4f61eeb2bdbad27316534016f
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
42 ;;
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
43 ;; BUGS:
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
44 ;; * It is assumed that length of input string is less than 2^29 bytes.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
45 ;; * It is caller's responsibility to make string (or region) unibyte.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
46 ;;
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
47 ;; TODO:
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
48 ;; * Rewrite from scratch!
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
49 ;; This version is much faster than Keiichi Suzuki's another sha1.el,
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
50 ;; but it is too dirty.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
51
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
52 ;;; Code:
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
53
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
54 (require 'hex-util)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
55
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
56 ;;;
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
57 ;;; external SHA1 function.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
58 ;;;
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
59
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
60 (defgroup sha1 nil
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
61 "Elisp interface for SHA1 hash computation."
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
62 :version "22.1"
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
63 :group 'extensions)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
64
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
65 (defcustom sha1-maximum-internal-length 500
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
66 "Maximum length of message to use Lisp version of SHA1 function.
86919
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
67 If message is longer than this, `sha1-program' is used instead.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
68
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
69 If this variable is set to 0, use external program only.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
70 If this variable is set to nil, use internal function only."
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
71 :type 'integer
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
72 :group 'sha1)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
73
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
74 (defcustom sha1-program '("sha1sum")
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
75 "Name of program to compute SHA1.
86919
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
76 It must be a string \(program name\) or list of strings \(name and its args\)."
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
77 :type '(repeat string)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
78 :group 'sha1)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
79
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
80 (defcustom sha1-use-external (condition-case ()
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
81 (executable-find (car sha1-program))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
82 (error))
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
83 "Use external SHA1 program.
86919
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
84 If this variable is set to nil, use internal function only."
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
85 :type 'boolean
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
86 :group 'sha1)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
87
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
88 (defun sha1-string-external (string &optional binary)
106276
78a8cf7b5387 * sha1.el (sha1-string-external): default-directory "/" in case
Kevin Ryde <user42@zip.com.au>
parents: 100908
diff changeset
89 (let ((default-directory "/") ;; in case otherwise non-existent
78a8cf7b5387 * sha1.el (sha1-string-external): default-directory "/" in case
Kevin Ryde <user42@zip.com.au>
parents: 100908
diff changeset
90 (process-connection-type nil) ;; pipe
78a8cf7b5387 * sha1.el (sha1-string-external): default-directory "/" in case
Kevin Ryde <user42@zip.com.au>
parents: 100908
diff changeset
91 prog args digest)
86919
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
92 (if (consp sha1-program)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
93 (setq prog (car sha1-program)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
94 args (cdr sha1-program))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
95 (setq prog sha1-program
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
96 args nil))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
97 (with-temp-buffer
108287
c0d13767677a Synch with Gnus trunk.
Katsumi Yamaoka <yamaoka@jpl.org>
parents: 106815
diff changeset
98 (unless (featurep 'xemacs) (set-buffer-multibyte nil))
86919
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
99 (insert string)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
100 (apply (function call-process-region)
92779
e9bef8bf2940 (sha1-string-external): Use set-buffer-multibyte rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 87649
diff changeset
101 (point-min) (point-max)
86919
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
102 prog t t nil args)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
103 ;; SHA1 is 40 bytes long in hexadecimal form.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
104 (setq digest (buffer-substring (point-min)(+ (point-min) 40))))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
105 (if binary
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
106 (decode-hex-string digest)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
107 digest)))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
108
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
109 (defun sha1-region-external (beg end &optional binary)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
110 (sha1-string-external (buffer-substring-no-properties beg end) binary))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
111
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
112 ;;;
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
113 ;;; internal SHA1 function.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
114 ;;;
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
115
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
116 (eval-when-compile
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
117 ;; optional second arg of string-to-number is new in v20.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
118 (defconst sha1-K0-high 23170) ; (string-to-number "5A82" 16)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
119 (defconst sha1-K0-low 31129) ; (string-to-number "7999" 16)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
120 (defconst sha1-K1-high 28377) ; (string-to-number "6ED9" 16)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
121 (defconst sha1-K1-low 60321) ; (string-to-number "EBA1" 16)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
122 (defconst sha1-K2-high 36635) ; (string-to-number "8F1B" 16)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
123 (defconst sha1-K2-low 48348) ; (string-to-number "BCDC" 16)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
124 (defconst sha1-K3-high 51810) ; (string-to-number "CA62" 16)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
125 (defconst sha1-K3-low 49622) ; (string-to-number "C1D6" 16)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
126
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
127 ;; original definition of sha1-F0.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
128 ;; (defmacro sha1-F0 (B C D)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
129 ;; (` (logior (logand (, B) (, C))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
130 ;; (logand (lognot (, B)) (, D)))))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
131 ;; a little optimization from GnuPG/cipher/sha1.c.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
132 (defmacro sha1-F0 (B C D)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
133 `(logxor ,D (logand ,B (logxor ,C ,D))))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
134 (defmacro sha1-F1 (B C D)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
135 `(logxor ,B ,C ,D))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
136 ;; original definition of sha1-F2.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
137 ;; (defmacro sha1-F2 (B C D)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
138 ;; (` (logior (logand (, B) (, C))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
139 ;; (logand (, B) (, D))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
140 ;; (logand (, C) (, D)))))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
141 ;; a little optimization from GnuPG/cipher/sha1.c.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
142 (defmacro sha1-F2 (B C D)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
143 `(logior (logand ,B ,C)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
144 (logand ,D (logior ,B ,C))))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
145 (defmacro sha1-F3 (B C D)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
146 `(logxor ,B ,C ,D))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
147
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
148 (defmacro sha1-S1 (W-high W-low)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
149 `(let ((W-high ,W-high)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
150 (W-low ,W-low))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
151 (setq S1W-high (+ (% (* W-high 2) 65536)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
152 (/ W-low ,(/ 65536 2))))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
153 (setq S1W-low (+ (/ W-high ,(/ 65536 2))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
154 (% (* W-low 2) 65536)))))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
155 (defmacro sha1-S5 (A-high A-low)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
156 `(progn
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
157 (setq S5A-high (+ (% (* ,A-high 32) 65536)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
158 (/ ,A-low ,(/ 65536 32))))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
159 (setq S5A-low (+ (/ ,A-high ,(/ 65536 32))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
160 (% (* ,A-low 32) 65536)))))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
161 (defmacro sha1-S30 (B-high B-low)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
162 `(progn
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
163 (setq S30B-high (+ (/ ,B-high 4)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
164 (* (% ,B-low 4) ,(/ 65536 4))))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
165 (setq S30B-low (+ (/ ,B-low 4)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
166 (* (% ,B-high 4) ,(/ 65536 4))))))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
167
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
168 (defmacro sha1-OP (round)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
169 `(progn
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
170 (sha1-S5 sha1-A-high sha1-A-low)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
171 (sha1-S30 sha1-B-high sha1-B-low)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
172 (setq sha1-A-low (+ (,(intern (format "sha1-F%d" round))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
173 sha1-B-low sha1-C-low sha1-D-low)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
174 sha1-E-low
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
175 ,(symbol-value
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
176 (intern (format "sha1-K%d-low" round)))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
177 (aref block-low idx)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
178 (progn
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
179 (setq sha1-E-low sha1-D-low)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
180 (setq sha1-D-low sha1-C-low)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
181 (setq sha1-C-low S30B-low)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
182 (setq sha1-B-low sha1-A-low)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
183 S5A-low)))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
184 (setq carry (/ sha1-A-low 65536))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
185 (setq sha1-A-low (% sha1-A-low 65536))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
186 (setq sha1-A-high (% (+ (,(intern (format "sha1-F%d" round))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
187 sha1-B-high sha1-C-high sha1-D-high)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
188 sha1-E-high
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
189 ,(symbol-value
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
190 (intern (format "sha1-K%d-high" round)))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
191 (aref block-high idx)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
192 (progn
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
193 (setq sha1-E-high sha1-D-high)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
194 (setq sha1-D-high sha1-C-high)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
195 (setq sha1-C-high S30B-high)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
196 (setq sha1-B-high sha1-A-high)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
197 S5A-high)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
198 carry)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
199 65536))))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
200
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
201 (defmacro sha1-add-to-H (H X)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
202 `(progn
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
203 (setq ,(intern (format "sha1-%s-low" H))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
204 (+ ,(intern (format "sha1-%s-low" H))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
205 ,(intern (format "sha1-%s-low" X))))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
206 (setq carry (/ ,(intern (format "sha1-%s-low" H)) 65536))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
207 (setq ,(intern (format "sha1-%s-low" H))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
208 (% ,(intern (format "sha1-%s-low" H)) 65536))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
209 (setq ,(intern (format "sha1-%s-high" H))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
210 (% (+ ,(intern (format "sha1-%s-high" H))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
211 ,(intern (format "sha1-%s-high" X))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
212 carry)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
213 65536))))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
214 )
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
215
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
216 ;;; buffers (H0 H1 H2 H3 H4).
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
217 (defvar sha1-H0-high)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
218 (defvar sha1-H0-low)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
219 (defvar sha1-H1-high)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
220 (defvar sha1-H1-low)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
221 (defvar sha1-H2-high)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
222 (defvar sha1-H2-low)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
223 (defvar sha1-H3-high)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
224 (defvar sha1-H3-low)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
225 (defvar sha1-H4-high)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
226 (defvar sha1-H4-low)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
227
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
228 (defun sha1-block (block-high block-low)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
229 (let (;; step (c) --- initialize buffers (A B C D E).
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
230 (sha1-A-high sha1-H0-high) (sha1-A-low sha1-H0-low)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
231 (sha1-B-high sha1-H1-high) (sha1-B-low sha1-H1-low)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
232 (sha1-C-high sha1-H2-high) (sha1-C-low sha1-H2-low)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
233 (sha1-D-high sha1-H3-high) (sha1-D-low sha1-H3-low)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
234 (sha1-E-high sha1-H4-high) (sha1-E-low sha1-H4-low)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
235 (idx 16))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
236 ;; step (b).
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
237 (let (;; temporary variables used in sha1-S1 macro.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
238 S1W-high S1W-low)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
239 (while (< idx 80)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
240 (sha1-S1 (logxor (aref block-high (- idx 3))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
241 (aref block-high (- idx 8))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
242 (aref block-high (- idx 14))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
243 (aref block-high (- idx 16)))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
244 (logxor (aref block-low (- idx 3))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
245 (aref block-low (- idx 8))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
246 (aref block-low (- idx 14))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
247 (aref block-low (- idx 16))))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
248 (aset block-high idx S1W-high)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
249 (aset block-low idx S1W-low)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
250 (setq idx (1+ idx))))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
251 ;; step (d).
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
252 (setq idx 0)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
253 (let (;; temporary variables used in sha1-OP macro.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
254 S5A-high S5A-low S30B-high S30B-low carry)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
255 (while (< idx 20) (sha1-OP 0) (setq idx (1+ idx)))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
256 (while (< idx 40) (sha1-OP 1) (setq idx (1+ idx)))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
257 (while (< idx 60) (sha1-OP 2) (setq idx (1+ idx)))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
258 (while (< idx 80) (sha1-OP 3) (setq idx (1+ idx))))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
259 ;; step (e).
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
260 (let (;; temporary variables used in sha1-add-to-H macro.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
261 carry)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
262 (sha1-add-to-H H0 A)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
263 (sha1-add-to-H H1 B)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
264 (sha1-add-to-H H2 C)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
265 (sha1-add-to-H H3 D)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
266 (sha1-add-to-H H4 E))))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
267
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
268 (defun sha1-binary (string)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
269 "Return the SHA1 of STRING in binary form."
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
270 (let (;; prepare buffers for a block. byte-length of block is 64.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
271 ;; input block is split into two vectors.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
272 ;;
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
273 ;; input block: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ...
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
274 ;; block-high: +-0-+ +-1-+ +-2-+ +-3-+
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
275 ;; block-low: +-0-+ +-1-+ +-2-+ +-3-+
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
276 ;;
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
277 ;; length of each vector is 80, and elements of each vector are
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
278 ;; 16bit integers. elements 0x10-0x4F of each vector are
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
279 ;; assigned later in `sha1-block'.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
280 (block-high (eval-when-compile (make-vector 80 nil)))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
281 (block-low (eval-when-compile (make-vector 80 nil))))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
282 (unwind-protect
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
283 (let* (;; byte-length of input string.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
284 (len (length string))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
285 (lim (* (/ len 64) 64))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
286 (rem (% len 4))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
287 (idx 0)(pos 0))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
288 ;; initialize buffers (H0 H1 H2 H3 H4).
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
289 (setq sha1-H0-high 26437 ; (string-to-number "6745" 16)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
290 sha1-H0-low 8961 ; (string-to-number "2301" 16)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
291 sha1-H1-high 61389 ; (string-to-number "EFCD" 16)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
292 sha1-H1-low 43913 ; (string-to-number "AB89" 16)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
293 sha1-H2-high 39098 ; (string-to-number "98BA" 16)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
294 sha1-H2-low 56574 ; (string-to-number "DCFE" 16)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
295 sha1-H3-high 4146 ; (string-to-number "1032" 16)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
296 sha1-H3-low 21622 ; (string-to-number "5476" 16)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
297 sha1-H4-high 50130 ; (string-to-number "C3D2" 16)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
298 sha1-H4-low 57840) ; (string-to-number "E1F0" 16)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
299 ;; loop for each 64 bytes block.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
300 (while (< pos lim)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
301 ;; step (a).
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
302 (setq idx 0)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
303 (while (< idx 16)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
304 (aset block-high idx (+ (* (aref string pos) 256)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
305 (aref string (1+ pos))))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
306 (setq pos (+ pos 2))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
307 (aset block-low idx (+ (* (aref string pos) 256)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
308 (aref string (1+ pos))))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
309 (setq pos (+ pos 2))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
310 (setq idx (1+ idx)))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
311 (sha1-block block-high block-low))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
312 ;; last block.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
313 (if (prog1
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
314 (< (- len lim) 56)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
315 (setq lim (- len rem))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
316 (setq idx 0)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
317 (while (< pos lim)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
318 (aset block-high idx (+ (* (aref string pos) 256)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
319 (aref string (1+ pos))))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
320 (setq pos (+ pos 2))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
321 (aset block-low idx (+ (* (aref string pos) 256)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
322 (aref string (1+ pos))))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
323 (setq pos (+ pos 2))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
324 (setq idx (1+ idx)))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
325 ;; this is the last (at most) 32bit word.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
326 (cond
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
327 ((= rem 3)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
328 (aset block-high idx (+ (* (aref string pos) 256)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
329 (aref string (1+ pos))))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
330 (setq pos (+ pos 2))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
331 (aset block-low idx (+ (* (aref string pos) 256)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
332 128)))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
333 ((= rem 2)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
334 (aset block-high idx (+ (* (aref string pos) 256)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
335 (aref string (1+ pos))))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
336 (aset block-low idx 32768))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
337 ((= rem 1)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
338 (aset block-high idx (+ (* (aref string pos) 256)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
339 128))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
340 (aset block-low idx 0))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
341 (t ;; (= rem 0)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
342 (aset block-high idx 32768)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
343 (aset block-low idx 0)))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
344 (setq idx (1+ idx))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
345 (while (< idx 16)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
346 (aset block-high idx 0)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
347 (aset block-low idx 0)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
348 (setq idx (1+ idx))))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
349 ;; last block has enough room to write the length of string.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
350 (progn
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
351 ;; write bit length of string to last 4 bytes of the block.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
352 (aset block-low 15 (* (% len 8192) 8))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
353 (setq len (/ len 8192))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
354 (aset block-high 15 (% len 65536))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
355 ;; XXX: It is not practical to compute SHA1 of
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
356 ;; such a huge message on emacs.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
357 ;; (setq len (/ len 65536)) ; for 64bit emacs.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
358 ;; (aset block-low 14 (% len 65536))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
359 ;; (aset block-high 14 (/ len 65536))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
360 (sha1-block block-high block-low))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
361 ;; need one more block.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
362 (sha1-block block-high block-low)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
363 (fillarray block-high 0)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
364 (fillarray block-low 0)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
365 ;; write bit length of string to last 4 bytes of the block.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
366 (aset block-low 15 (* (% len 8192) 8))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
367 (setq len (/ len 8192))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
368 (aset block-high 15 (% len 65536))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
369 ;; XXX: It is not practical to compute SHA1 of
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
370 ;; such a huge message on emacs.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
371 ;; (setq len (/ len 65536)) ; for 64bit emacs.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
372 ;; (aset block-low 14 (% len 65536))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
373 ;; (aset block-high 14 (/ len 65536))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
374 (sha1-block block-high block-low))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
375 ;; make output string (in binary form).
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
376 (let ((result (make-string 20 0)))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
377 (aset result 0 (/ sha1-H0-high 256))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
378 (aset result 1 (% sha1-H0-high 256))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
379 (aset result 2 (/ sha1-H0-low 256))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
380 (aset result 3 (% sha1-H0-low 256))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
381 (aset result 4 (/ sha1-H1-high 256))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
382 (aset result 5 (% sha1-H1-high 256))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
383 (aset result 6 (/ sha1-H1-low 256))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
384 (aset result 7 (% sha1-H1-low 256))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
385 (aset result 8 (/ sha1-H2-high 256))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
386 (aset result 9 (% sha1-H2-high 256))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
387 (aset result 10 (/ sha1-H2-low 256))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
388 (aset result 11 (% sha1-H2-low 256))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
389 (aset result 12 (/ sha1-H3-high 256))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
390 (aset result 13 (% sha1-H3-high 256))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
391 (aset result 14 (/ sha1-H3-low 256))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
392 (aset result 15 (% sha1-H3-low 256))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
393 (aset result 16 (/ sha1-H4-high 256))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
394 (aset result 17 (% sha1-H4-high 256))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
395 (aset result 18 (/ sha1-H4-low 256))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
396 (aset result 19 (% sha1-H4-low 256))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
397 result))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
398 ;; do not leave a copy of input string.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
399 (fillarray block-high nil)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
400 (fillarray block-low nil))))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
401
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
402 (defun sha1-string-internal (string &optional binary)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
403 (if binary
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
404 (sha1-binary string)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
405 (encode-hex-string (sha1-binary string))))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
406
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
407 (defun sha1-region-internal (beg end &optional binary)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
408 (sha1-string-internal (buffer-substring-no-properties beg end) binary))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
409
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
410 ;;;
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
411 ;;; application interface.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
412 ;;;
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
413
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
414 (defun sha1-region (beg end &optional binary)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
415 (if (and sha1-use-external
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
416 sha1-maximum-internal-length
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
417 (> (abs (- end beg)) sha1-maximum-internal-length))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
418 (sha1-region-external beg end binary)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
419 (sha1-region-internal beg end binary)))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
420
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
421 (defun sha1-string (string &optional binary)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
422 (if (and sha1-use-external
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
423 sha1-maximum-internal-length
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
424 (> (length string) sha1-maximum-internal-length))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
425 (sha1-string-external string binary)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
426 (sha1-string-internal string binary)))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
427
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
428 ;;;###autoload
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
429 (defun sha1 (object &optional beg end binary)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
430 "Return the SHA1 (Secure Hash Algorithm) of an object.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
431 OBJECT is either a string or a buffer.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
432 Optional arguments BEG and END denote buffer positions for computing the
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
433 hash of a portion of OBJECT.
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
434 If BINARY is non-nil, return a string in binary form."
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
435 (if (stringp object)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
436 (sha1-string object binary)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
437 (with-current-buffer object
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
438 (sha1-region (or beg (point-min)) (or end (point-max)) binary))))
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
439
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
440 (provide 'sha1)
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
441
f7d29ef23ff8 Move here from gnus/.
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
442 ;;; sha1.el ends here