sasl.go raw

   1  // Library for Simple Authentication and Security Layer (SASL) defined in RFC 4422.
   2  package sasl
   3  
   4  // Note:
   5  //   Most of this code was copied, with some modifications, from net/smtp. It
   6  //   would be better if Go provided a standard package (e.g. crypto/sasl) that
   7  //   could be shared by SMTP, IMAP, and other packages.
   8  
   9  import (
  10  	"errors"
  11  )
  12  
  13  // Common SASL errors.
  14  var (
  15  	ErrUnexpectedClientResponse  = errors.New("sasl: unexpected client response")
  16  	ErrUnexpectedServerChallenge = errors.New("sasl: unexpected server challenge")
  17  )
  18  
  19  // Client interface to perform challenge-response authentication.
  20  type Client interface {
  21  	// Begins SASL authentication with the server. It returns the
  22  	// authentication mechanism name and "initial response" data (if required by
  23  	// the selected mechanism). A non-nil error causes the client to abort the
  24  	// authentication attempt.
  25  	//
  26  	// A nil ir value is different from a zero-length value. The nil value
  27  	// indicates that the selected mechanism does not use an initial response,
  28  	// while a zero-length value indicates an empty initial response, which must
  29  	// be sent to the server.
  30  	Start() (mech string, ir []byte, err error)
  31  
  32  	// Continues challenge-response authentication. A non-nil error causes
  33  	// the client to abort the authentication attempt.
  34  	Next(challenge []byte) (response []byte, err error)
  35  }
  36  
  37  // Server interface to perform challenge-response authentication.
  38  type Server interface {
  39  	// Begins or continues challenge-response authentication. If the client
  40  	// supplies an initial response, response is non-nil.
  41  	//
  42  	// If the authentication is finished, done is set to true. If the
  43  	// authentication has failed, an error is returned.
  44  	Next(response []byte) (challenge []byte, done bool, err error)
  45  }
  46