Skip to content
Snippets Groups Projects
Commit 36433ccd authored by Richard T. Carback III's avatar Richard T. Carback III
Browse files

Merge branch 'hotfix/generateSecret' into 'release'

Add GenerateSecret helper function

See merge request !655
parents c64a5d76 1c399522
No related branches found
No related tags found
1 merge request!23Release
///////////////////////////////////////////////////////////////////////////////
// Copyright © 2020 xx network SEZC //
// //
// Use of this source code is governed by a license that can be found in the //
// LICENSE file //
///////////////////////////////////////////////////////////////////////////////
package bindings
import (
jww "github.com/spf13/jwalterweatherman"
"gitlab.com/xx_network/crypto/csprng"
)
// GenerateSecret creates a secret password using a system-based
// pseudorandom number generator. It takes 1 parameter, `numBytes`,
// which should be set to 32, but can be set higher in certain cases.
func GenerateSecret(numBytes int) []byte {
if numBytes < 32 {
jww.FATAL.Panicf("Secrets must have at least 32 bytes " +
"(256 bits) of entropy.")
}
out := make([]byte, numBytes)
rng := csprng.NewSystemRNG()
numRead, err := rng.Read(out)
if err != nil {
jww.FATAL.Panicf("%+v", err)
}
if numRead != numBytes {
jww.FATAL.Panicf("Unable to read %d bytes", numBytes)
}
return out
}
////////////////////////////////////////////////////////////////////////////////////////////
// Copyright © 2020 xx network SEZC //
// //
// Use of this source code is governed by a license that can be found in the LICENSE file //
////////////////////////////////////////////////////////////////////////////////////////////
package bindings
import (
"bytes"
"testing"
)
func TestGenerateSecret(t *testing.T) {
secret1 := GenerateSecret(32)
secret2 := GenerateSecret(32)
if bytes.Compare(secret1, secret2) == 0 {
t.Errorf("GenerateSecret: Not generating entropy")
}
// This runs after the test function and errors out if no panic was
// raised.
defer func() {
if r := recover(); r == nil {
t.Errorf("GenerateSecret: Low entropy was permitted")
}
}()
GenerateSecret(31)
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment