summaryrefslogtreecommitdiff
path: root/vendor/mellium.im/sasl/mechanism.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/mellium.im/sasl/mechanism.go')
-rw-r--r--vendor/mellium.im/sasl/mechanism.go58
1 files changed, 58 insertions, 0 deletions
diff --git a/vendor/mellium.im/sasl/mechanism.go b/vendor/mellium.im/sasl/mechanism.go
new file mode 100644
index 000000000..7cf166d7b
--- /dev/null
+++ b/vendor/mellium.im/sasl/mechanism.go
@@ -0,0 +1,58 @@
+// Copyright 2016 The Mellium Contributors.
+// Use of this source code is governed by the BSD 2-clause license that can be
+// found in the LICENSE file.
+
+package sasl
+
+import (
+ "crypto/sha1"
+ "crypto/sha256"
+ "errors"
+)
+
+// Define common errors used by SASL mechanisms and negotiators.
+var (
+ ErrInvalidState = errors.New("Invalid state")
+ ErrInvalidChallenge = errors.New("Invalid or missing challenge")
+ ErrAuthn = errors.New("Authentication error")
+ ErrTooManySteps = errors.New("Step called too many times")
+)
+
+var (
+ // Plain is a Mechanism that implements the PLAIN authentication mechanism
+ // as defined by RFC 4616.
+ Plain Mechanism = plain
+
+ // ScramSha256Plus is a Mechanism that implements the SCRAM-SHA-256-PLUS
+ // authentication mechanism defined in RFC 7677. The only supported channel
+ // binding type is tls-unique as defined in RFC 5929.
+ ScramSha256Plus Mechanism = scram("SCRAM-SHA-256-PLUS", sha256.New)
+
+ // ScramSha256 is a Mechanism that implements the SCRAM-SHA-256
+ // authentication mechanism defined in RFC 7677.
+ ScramSha256 Mechanism = scram("SCRAM-SHA-256", sha256.New)
+
+ // ScramSha1Plus is a Mechanism that implements the SCRAM-SHA-1-PLUS
+ // authentication mechanism defined in RFC 5802. The only supported channel
+ // binding type is tls-unique as defined in RFC 5929.
+ ScramSha1Plus Mechanism = scram("SCRAM-SHA-1-PLUS", sha1.New)
+
+ // ScramSha1 is a Mechanism that implements the SCRAM-SHA-1 authentication
+ // mechanism defined in RFC 5802.
+ ScramSha1 Mechanism = scram("SCRAM-SHA-1", sha1.New)
+)
+
+// Mechanism represents a SASL mechanism that can be used by a Client or Server
+// to perform the actual negotiation. Base64 encoding the final challenges and
+// responses should not be performed by the mechanism.
+//
+// Mechanisms must be stateless and may be shared between goroutines. When a
+// mechanism needs to store state between the different steps it can return
+// anything that it needs to store and the value will be cached by the
+// negotiator and passed in as the data parameter when the next challenge is
+// received.
+type Mechanism struct {
+ Name string
+ Start func(n *Negotiator) (more bool, resp []byte, cache interface{}, err error)
+ Next func(n *Negotiator, challenge []byte, data interface{}) (more bool, resp []byte, cache interface{}, err error)
+}