Client implements a SCRAM-* client (SCRAM-SHA-1, SCRAM-SHA-256, etc).
A Client may be used within a SASL conversation with logic resembling:
var in []byte var client = scram.NewClient(sha1.New, user, pass) for client.Step(in) { out := client.Out() // send out to server in := serverOut } if client.Err() != nil { // auth failed }
type Client struct {
// contains filtered or unexported fields
}
func NewClient(newHash func() hash.Hash, user, pass string) *Client
NewClient returns a new SCRAM-* client with the provided hash algorithm.
For SCRAM-SHA-256, for example, use:
client := scram.NewClient(sha256.New, user, pass)
func (c *Client) Err() error
Err returns the error that occurred, or nil if there were no errors.
func (c *Client) Out() []byte
Out returns the data to be sent to the server in the current step.
func (c *Client) SetNonce(nonce []byte)
SetNonce sets the client nonce to the provided value. If not set, the nonce is generated automatically out of crypto/rand on the first step.
func (c *Client) Step(in []byte) bool
Step processes the incoming data from the server and makes the next round of data for the server available via Client.Out. Step returns false if there are no errors and more data is still expected.