X-Git-Url: https://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Frfc2104.el;h=3d459825bf250a6613691dfcb0b5daf867452e2e;hb=be5c881dbef1e24ee1c5e1da8b30e02390a07569;hp=c825d8bc4ea6746a4b395e9e08312d931f673c94;hpb=253dff227c87bdd966234003d4932a4d25a085fc;p=gnus diff --git a/lisp/rfc2104.el b/lisp/rfc2104.el index c825d8bc4..3d459825b 100644 --- a/lisp/rfc2104.el +++ b/lisp/rfc2104.el @@ -49,6 +49,7 @@ ;;; 1998-08-26 don't require hexl ;;; 1998-09-25 renamed from hmac.el to rfc2104.el, also renamed functions ;;; 1999-10-23 included in pgnus +;;; 2000-08-15 `rfc2104-hexstring-to-bitstring' ;;; 2000-05-12 added sha-1 example, added test case reference (eval-when-compile (require 'cl)) @@ -83,6 +84,13 @@ (rfc2104-hex-to-int (reverse (append str nil)))) 0)) +(defun rfc2104-hexstring-to-bitstring (str) + (let (out) + (while (< 0 (length str)) + (push (rfc2104-hex-to-int (substring str -2)) out) + (setq str (substring str 0 -2))) + (concat out))) + (defun rfc2104-hash (hash block-length hash-length key text) (let* (;; if key is longer than B, reset it to HASH(key) (key (if (> (length key) block-length) @@ -97,14 +105,10 @@ ;; XOR key with ipad/opad into k_ipad/k_opad (setq k_ipad (mapcar (lambda (c) (logxor c rfc2104-ipad)) k_ipad)) (setq k_opad (mapcar (lambda (c) (logxor c rfc2104-opad)) k_opad)) - ;; perform inner hash - (let ((first-round (funcall hash (concat k_ipad text))) - de-hexed) - (while (< 0 (length first-round)) - (push (rfc2104-hex-to-int (substring first-round -2)) de-hexed) - (setq first-round (substring first-round 0 -2))) - ;; perform outer hash - (funcall hash (concat k_opad de-hexed))))) + ;; perform outer hash + (funcall hash (concat k_opad (rfc2104-hexstring-to-bitstring + ;; perform inner hash + (funcall hash (concat k_ipad text))))))) (provide 'rfc2104)