diff options
Diffstat (limited to 'vendor/mellium.im/sasl/nonce.go')
-rw-r--r-- | vendor/mellium.im/sasl/nonce.go | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/vendor/mellium.im/sasl/nonce.go b/vendor/mellium.im/sasl/nonce.go new file mode 100644 index 000000000..8e8666fd2 --- /dev/null +++ b/vendor/mellium.im/sasl/nonce.go @@ -0,0 +1,30 @@ +// 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 ( + "encoding/base64" + "io" +) + +// Generates a nonce with n random bytes base64 encoded to ensure that it meets +// the criteria for inclusion in a SCRAM message. +func nonce(n int, r io.Reader) []byte { + if n < 1 { + panic("Cannot generate zero or negative length nonce") + } + b := make([]byte, n) + n2, err := r.Read(b) + switch { + case err != nil: + panic(err) + case n2 != n: + panic("Could not read enough randomness to generate nonce") + } + val := make([]byte, base64.RawStdEncoding.EncodedLen(n)) + base64.RawStdEncoding.Encode(val, b) + + return val +} |