[minor] validate auth material returned from database before use

This commit is contained in:
Aaron Meihm 2016-07-12 09:10:58 -05:00
Родитель f4b825db46
Коммит 5c4a5deceb
3 изменённых файлов: 16 добавлений и 2 удалений

Просмотреть файл

@ -36,6 +36,10 @@ func (db *DB) GetLoaderAuthDetails(prefix string) (lad mig.LoaderAuthDetails, er
err = fmt.Errorf("Unable to locate loader from prefix") err = fmt.Errorf("Unable to locate loader from prefix")
return return
} }
err = lad.Validate()
if err != nil {
return
}
return return
} }

Просмотреть файл

@ -41,6 +41,14 @@ type LoaderAuthDetails struct {
Salt []byte Salt []byte
} }
func (lad *LoaderAuthDetails) Validate() error {
if len(lad.Hash) != LoaderHashedKeyLength ||
len(lad.Salt) != LoaderSaltLength {
return fmt.Errorf("contents of LoaderAuthDetails are invalid")
}
return nil
}
// Generate a new loader prefix value // Generate a new loader prefix value
func GenerateLoaderPrefix() string { func GenerateLoaderPrefix() string {
return RandLoaderKeyString(LoaderPrefixLength) return RandLoaderKeyString(LoaderPrefixLength)
@ -68,6 +76,8 @@ func RandLoaderKeyString(length int) string {
const LoaderPrefixAndKeyLength = 40 // Key length including prefix const LoaderPrefixAndKeyLength = 40 // Key length including prefix
const LoaderPrefixLength = 8 // Prefix length const LoaderPrefixLength = 8 // Prefix length
const LoaderKeyLength = 32 // Length excluding prefix const LoaderKeyLength = 32 // Length excluding prefix
const LoaderHashedKeyLength = 32 // Length of hashed key in the database
const LoaderSaltLength = 16 // Length of salt
// Validate a loader key, returns nil if it is valid // Validate a loader key, returns nil if it is valid
func ValidateLoaderKey(key string) error { func ValidateLoaderKey(key string) error {

Просмотреть файл

@ -20,7 +20,7 @@ import (
func hashLoaderKey(key string, salt []byte) (ret []byte, retsalt []byte, err error) { func hashLoaderKey(key string, salt []byte) (ret []byte, retsalt []byte, err error) {
if salt == nil { if salt == nil {
retsalt = make([]byte, 16) retsalt = make([]byte, mig.LoaderSaltLength)
_, err = rand.Read(retsalt) _, err = rand.Read(retsalt)
if err != nil { if err != nil {
return return
@ -28,7 +28,7 @@ func hashLoaderKey(key string, salt []byte) (ret []byte, retsalt []byte, err err
} else { } else {
retsalt = salt retsalt = salt
} }
ret = pbkdf2.Key([]byte(key), retsalt, 4096, 32, sha256.New) ret = pbkdf2.Key([]byte(key), retsalt, 4096, mig.LoaderHashedKeyLength, sha256.New)
return ret, retsalt, nil return ret, retsalt, nil
} }