...

Source file src/edge-infra.dev/pkg/lib/crypto/validation/validation.go

Documentation: edge-infra.dev/pkg/lib/crypto/validation

     1  package validation
     2  
     3  import (
     4  	"errors"
     5  	"strings"
     6  
     7  	"golang.org/x/crypto/bcrypt"
     8  
     9  	"edge-infra.dev/pkg/lib/crypto/randomizer"
    10  )
    11  
    12  var (
    13  	MinimumPassLen        = 8
    14  	MaximumPassLen        = 63
    15  	MinimumSaltLen        = 16 // 16 bytes (128-bit) (sha512)
    16  	MinimumHashIterations = 120000
    17  	MinimumKeyLen         = 16 // bytes
    18  	CharValidationError   = "\"invalid password, password can only include alphanumerical characters and special characters ~!@#%^&*_-+=`|'>(){}[]:;<,.? \""
    19  )
    20  
    21  func validatePwdChar(char rune) bool {
    22  	return strings.ContainsRune(string(randomizer.ValidChars), char)
    23  }
    24  
    25  func ValidatePwdCharacters(pwd string) error {
    26  	for _, char := range pwd {
    27  		if !validatePwdChar(char) {
    28  			return errors.New(CharValidationError)
    29  		}
    30  	}
    31  	return nil
    32  }
    33  
    34  func ValidateCost(cost int) error {
    35  	if cost < bcrypt.DefaultCost || cost > bcrypt.MaxCost {
    36  		return InvalidCostError()
    37  	}
    38  	return nil
    39  }
    40  
    41  // Validation on upper and lower bounds of the password length
    42  func ValidatePwdBounds(minLength, maxLength int) error {
    43  	if err := ValidatePwdLen(maxLength); err != nil {
    44  		return err
    45  	}
    46  
    47  	if err := ValidatePwdLen(minLength); err != nil {
    48  		return err
    49  	}
    50  
    51  	if minLength >= maxLength {
    52  		return InvalidPasswordLengthError()
    53  	}
    54  
    55  	return nil
    56  }
    57  
    58  func ValidatePwdLen(len int) error {
    59  	switch {
    60  	case len < MinimumPassLen:
    61  		return InvalidPasswordLengthError()
    62  	case len > MaximumPassLen:
    63  		return InvalidPasswordLengthError()
    64  	default:
    65  		return nil
    66  	}
    67  }
    68  
    69  func ValidateSaltLength(saltLength int) error {
    70  	if saltLength < MinimumSaltLen {
    71  		return InvalidSaltLengthError()
    72  	}
    73  	return nil
    74  }
    75  
    76  func ValidateIterationLen(iterations int) error {
    77  	if iterations < MinimumHashIterations {
    78  		return InvalidHashIterationsError()
    79  	}
    80  	return nil
    81  }
    82  
    83  func ValidateKeyLen(keyLength, saltLength int) error {
    84  	if keyLength < MinimumKeyLen || keyLength < saltLength {
    85  		return InvalidKeyLengthError()
    86  	}
    87  	return nil
    88  }
    89  

View as plain text