;;; canlock.el --- functions for Cancel-Lock feature
;; Copyright (C) 1998, 1999, 2001, 2002, 2003, 2004
-;; Free Software Foundation, Inc.
+;; Free Software Foundation, Inc.
;; Author: Katsumi Yamaoka <yamaoka@jpl.org>
;; Keywords: news, cancel-lock, hmac, sha1, rfc2104
(eval-when-compile
(require 'cl))
-(autoload 'sha1 "sha1-el")
-(autoload 'sha1-binary "sha1-el")
-(autoload 'base64-encode-string "base64")
-(autoload 'mail-fetch-field "mail-utils")
+(eval-and-compile
+ (require 'sha1-el)
+ (condition-case nil
+ (sha1 "" nil nil 'binary)
+ (wrong-number-of-arguments
+ (let ((mel (locate-library "mel")))
+ (when mel
+ (load (expand-file-name "sha1-el" (file-name-directory mel))
+ nil t))))))
+
(defvar mail-header-separator)
(defgroup canlock nil
(defun canlock-sha1 (message)
"Make a SHA-1 digest of MESSAGE as a unibyte string of length 20 bytes."
(condition-case nil
- (sha1 message nil nil 'binary)
- (error
+ (let (sha1-maximum-internal-length)
+ (sha1 message nil nil 'binary))
+ (wrong-number-of-arguments
(canlock-string-as-unibyte (sha1-binary message)))))
(defun canlock-make-cancel-key (message-id password)
(unless id-for-key
(setq id-for-key (canlock-fetch-id-for-key)))
(if (and (setq control (mail-fetch-field "Control"))
- (string-match
- "^cancel[\t ]+\\(<[^\t\n @<>]+@[^\t\n @<>]+>\\)"
- control))
+ (string-match "^cancel[\t ]+<[^\t\n @<>]+@[^\t\n @<>]+>"
+ control))
(setq id-for-lock nil)
(unless id-for-lock
(setq id-for-lock (mail-fetch-field "Message-ID"))))