Documentation
¶
Overview ¶
Package salt : The salt package provides salting services for anyone who uses passwords
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func GeneratePasswordWithRndSalt ¶
func GeneratePasswordWithRndSalt(pass string, minSecretLen int, maxSecretLen int) ([]byte, []byte, error)
GeneratePasswordWithRndSalt : Return a generated salted password and the used salt from a given password
func GenerateSaltedPassword ¶
func GenerateSaltedPassword(pwd []byte, minSecretLen int, maxSecretLen int, saltData []byte, passwordLen int) ([]byte, error)
GenerateSaltedPassword : generate a salted password using the given password and salt information
Example ¶
This example shows how to generate a saltetd password from a given password and default salt
package main
import (
"fmt"
"github.com/ibm-security-innovation/libsecurity-go/salt"
)
const (
minSecretLen = 1
maxSecretLen = 255
)
var BasicSalt = []byte("A1B2")
func main() {
pass := "MyPassword"
res, err := salt.GenerateSaltedPassword([]byte(pass), minSecretLen, maxSecretLen, BasicSalt, -1)
if err != nil {
fmt.Println("GenerateSaltedPassword failed, error:", err)
} else {
fmt.Printf("* Generate basic salted password from a given password: '%v', using the default parameters (sha1, show full password, 1 iteration and random salt: %v) is: %v", pass, BasicSalt, res)
}
}
func GetRandomSalt ¶
GetRandomSalt : generate a random salt with the given length
Example ¶
This example shows how to generate a randomly salted secret contain 8 characters, using hash function of md5 and 3 iterations of calculations
package main
import (
"crypto/md5"
"fmt"
"github.com/ibm-security-innovation/libsecurity-go/salt"
)
const (
minSecretLen = 1
maxSecretLen = 255
)
var BasicSecret = []byte("ABCDABCD")
func main() {
iter := 3
f := md5.New
size := 8
saltLen := 32
randSalt, _ := salt.GetRandomSalt(saltLen)
mySalt, err := salt.NewSalt(BasicSecret, minSecretLen, maxSecretLen, randSalt)
if err != nil {
fmt.Println("Error while creating new salt structure:", err)
}
mySalt.Iterations = iter
mySalt.OutputLen = size
mySalt.Digest = f
res, err := mySalt.Generate(minSecretLen, maxSecretLen)
if err != nil {
fmt.Println("GetRandomSaltExample failed, error:", err)
} else {
fmt.Println("* Salted password of secret key:", string(BasicSecret), ",random salt length:", saltLen, randSalt,
"with", iter, "iterations, output password length:", size, "bytes and MD5 function is:", res)
}
}
Types ¶
type Salt ¶
type Salt struct {
Secret []byte
Salt []byte
OutputLen int // Number of digits in the code. Default is 6
Iterations int // Number of iterations to run the hash function, Default is 64
Digest func() hash.Hash // Digest type, Default is sha1
}
Salt : structure that holds all the parameters relevant to handle salting of password
func (Salt) Generate ¶
Generate : Return the encrypted data for a given salt and secret The way to add salt is: secret + salt TODO: output len from right or from left