76 lines · 2.7 KB · Go
RawDownload
// Copyright 2023 The Gitea Authors. All rights reserved.// SPDX-License-Identifier: MIT package hash // DefaultHashAlgorithmName represents the default value of PASSWORD_HASH_ALGO// configured in app.ini.//// It is NOT the same and does NOT map to the defaultEmptyHashAlgorithmSpecification.//// It will be dealiased as per aliasAlgorithmNames whereas// defaultEmptyHashAlgorithmSpecification does not undergo dealiasing.const DefaultHashAlgorithmName = "pbkdf2_hi" var DefaultHashAlgorithm *PasswordHashAlgorithm // aliasAlgorithNames provides a mapping between the value of PASSWORD_HASH_ALGO// configured in the app.ini and the parameters used within the hashers internally.//// If it is necessary to change the default parameters for any hasher in future you// should change these values and not those in argon2.go etc.var aliasAlgorithmNames = map[string]string{	"argon2":    "argon2$2$65536$8$50",	"bcrypt":    "bcrypt$10",	"scrypt":    "scrypt$65536$16$2$50",	"pbkdf2":    "pbkdf2_v2", // pbkdf2 should default to pbkdf2_v2	"pbkdf2_v1": "pbkdf2$10000$50",	// The latest PBKDF2 password algorithm is used as the default since it doesn't	// use a lot of  memory and is safer to use on less powerful devices.	"pbkdf2_v2": "pbkdf2$50000$50",	// The pbkdf2_hi password algorithm is offered as a stronger alternative to the	// slightly improved pbkdf2_v2 algorithm	"pbkdf2_hi": "pbkdf2$320000$50",} var RecommendedHashAlgorithms = []string{	"pbkdf2",	"argon2",	"bcrypt",	"scrypt",	"pbkdf2_hi",} // hashAlgorithmToSpec converts an algorithm name or a specification to a full algorithm specificationfunc hashAlgorithmToSpec(algorithmName string) string {	if algorithmName == "" {		algorithmName = DefaultHashAlgorithmName	}	alias, has := aliasAlgorithmNames[algorithmName]	for has {		algorithmName = alias		alias, has = aliasAlgorithmNames[algorithmName]	}	return algorithmName} // SetDefaultPasswordHashAlgorithm will take a provided algorithmName and de-alias it to// a complete algorithm specification.func SetDefaultPasswordHashAlgorithm(algorithmName string) (string, *PasswordHashAlgorithm) {	algoSpec := hashAlgorithmToSpec(algorithmName)	// now we get a full specification, e.g. pbkdf2$50000$50 rather than pbdkf2	DefaultHashAlgorithm = Parse(algoSpec)	return algoSpec, DefaultHashAlgorithm} // ConfigHashAlgorithm will try to find a "recommended algorithm name" defined by RecommendedHashAlgorithms for config// This function is not fast and is only used for the installation pagefunc ConfigHashAlgorithm(algorithm string) string {	algorithm = hashAlgorithmToSpec(algorithm)	for _, recommAlgo := range RecommendedHashAlgorithms {		if algorithm == hashAlgorithmToSpec(recommAlgo) {			return recommAlgo		}	}	return algorithm}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t