summaryrefslogtreecommitdiff
path: root/lisp/net/sasl-scram-rfc.el
diff options
context:
space:
mode:
authorMagnus Henoch <magnus.henoch@gmail.com>2015-02-23 09:09:46 +0000
committerMagnus Henoch <magnus.henoch@gmail.com>2015-02-23 09:09:46 +0000
commit80e50144d82e271dccd7716703c2f4390463a753 (patch)
tree7f0a938f5210df9cba0f8b494b0008535dd5040c /lisp/net/sasl-scram-rfc.el
parent34871865de0452cd251e92d76ab12c2ac237e783 (diff)
downloademacs-80e50144d82e271dccd7716703c2f4390463a753.tar.gz
emacs-80e50144d82e271dccd7716703c2f4390463a753.tar.bz2
emacs-80e50144d82e271dccd7716703c2f4390463a753.zip
Fix SCRAM-SHA-1 SASL mechanism
The symbol used in sasl-mechanism-alist needs to match the name that can be required. Move sasl-make-mechanism call to end of file, to ensure that it can refer to the specified step functions. * net/sasl.el (sasl-mechanism-alist): Refer to sasl-scram-rfc instead of sasl-scram-sha-1, as the former is the name that can be required. * net/sasl-scram-rfc.el (sasl-scram-sha-1-steps) (sasl-scram-sha-1-client-final-message) (sasl-scram-sha-1-authenticate-server): Move to end of file.
Diffstat (limited to 'lisp/net/sasl-scram-rfc.el')
-rw-r--r--lisp/net/sasl-scram-rfc.el47
1 files changed, 25 insertions, 22 deletions
diff --git a/lisp/net/sasl-scram-rfc.el b/lisp/net/sasl-scram-rfc.el
index 6c8c00959b1..18d7a6bfa18 100644
--- a/lisp/net/sasl-scram-rfc.el
+++ b/lisp/net/sasl-scram-rfc.el
@@ -39,31 +39,9 @@
(require 'cl-lib)
(require 'sasl)
-
-;;; SCRAM-SHA-1
-
(require 'hex-util)
(require 'rfc2104)
-(defconst sasl-scram-sha-1-steps
- '(sasl-scram-client-first-message
- sasl-scram-sha-1-client-final-message
- sasl-scram-sha-1-authenticate-server))
-
-(defun sasl-scram-sha-1-client-final-message (client step)
- (sasl-scram--client-final-message
- ;; HMAC-SHA1 uses block length 64 and hash length 20; see RFC 2104.
- 'sha1 64 20 client step))
-
-(defun sasl-scram-sha-1-authenticate-server (client step)
- (sasl-scram--authenticate-server
- 'sha1 64 20 client step))
-
-(put 'sasl-scram-sha-1 'sasl-mechanism
- (sasl-make-mechanism "SCRAM-SHA-1" sasl-scram-sha-1-steps))
-
-(provide 'sasl-scram-sha-1)
-
;;; Generic for SCRAM-*
(defun sasl-scram-client-first-message (client _step)
@@ -156,5 +134,30 @@
(t
(sasl-error "Invalid response from server"))))
+;;; SCRAM-SHA-1
+
+(defconst sasl-scram-sha-1-steps
+ '(sasl-scram-client-first-message
+ sasl-scram-sha-1-client-final-message
+ sasl-scram-sha-1-authenticate-server))
+
+(defun sasl-scram-sha-1-client-final-message (client step)
+ (sasl-scram--client-final-message
+ ;; HMAC-SHA1 uses block length 64 and hash length 20; see RFC 2104.
+ 'sha1 64 20 client step))
+
+(defun sasl-scram-sha-1-authenticate-server (client step)
+ (sasl-scram--authenticate-server
+ 'sha1 64 20 client step))
+
+;; This needs to be at the end, because of how `sasl-make-mechanism'
+;; handles step function names.
+(put 'sasl-scram-sha-1 'sasl-mechanism
+ (sasl-make-mechanism "SCRAM-SHA-1" sasl-scram-sha-1-steps))
+
+(put 'sasl-scram-rfc 'sasl-mechanism (get 'sasl-scram-sha-1 'sasl-mechanism))
+
+(provide 'sasl-scram-sha-1)
+
(provide 'sasl-scram-rfc)
;;; sasl-scram-rfc.el ends here