mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-10-25 11:33:11 +00:00 
			
		
		
		
	During the recent hash algorithm change it became clear that the choice of password hash algorithm plays a role in the time taken for CI to run. Therefore as attempt to improve CI we should consider using a dummy hashing algorithm instead of a real hashing algorithm. This PR creates a dummy algorithm which is then set as the default hashing algorithm during tests that use the fixtures. This hopefully will cause a reduction in the time it takes for CI to run. --------- Signed-off-by: Andrew Thornton <art27@cantab.net> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
		
			
				
	
	
		
			54 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright 2023 The Gitea Authors. All rights reserved.
 | |
| // SPDX-License-Identifier: MIT
 | |
| 
 | |
| package hash
 | |
| 
 | |
| import (
 | |
| 	"golang.org/x/crypto/bcrypt"
 | |
| )
 | |
| 
 | |
| func init() {
 | |
| 	MustRegister("bcrypt", NewBcryptHasher)
 | |
| }
 | |
| 
 | |
| // BcryptHasher implements PasswordHasher
 | |
| // and uses the bcrypt password hash function.
 | |
| type BcryptHasher struct {
 | |
| 	cost int
 | |
| }
 | |
| 
 | |
| // HashWithSaltBytes a provided password and salt
 | |
| func (hasher *BcryptHasher) HashWithSaltBytes(password string, salt []byte) string {
 | |
| 	if hasher == nil {
 | |
| 		return ""
 | |
| 	}
 | |
| 	hashedPassword, _ := bcrypt.GenerateFromPassword([]byte(password), hasher.cost)
 | |
| 	return string(hashedPassword)
 | |
| }
 | |
| 
 | |
| func (hasher *BcryptHasher) VerifyPassword(password, hashedPassword, salt string) bool {
 | |
| 	return bcrypt.CompareHashAndPassword([]byte(hashedPassword), []byte(password)) == nil
 | |
| }
 | |
| 
 | |
| // NewBcryptHasher is a factory method to create an BcryptHasher
 | |
| // The provided config should be either empty or the string representation of the "<cost>"
 | |
| // as an integer
 | |
| func NewBcryptHasher(config string) *BcryptHasher {
 | |
| 	// This matches the original configuration for `bcrypt` prior to storing hash parameters
 | |
| 	// in the database.
 | |
| 	// THESE VALUES MUST NOT BE CHANGED OR BACKWARDS COMPATIBILITY WILL BREAK
 | |
| 	hasher := &BcryptHasher{
 | |
| 		cost: 10, // cost=10. i.e. 2^10 rounds of key expansion.
 | |
| 	}
 | |
| 
 | |
| 	if config == "" {
 | |
| 		return hasher
 | |
| 	}
 | |
| 	var err error
 | |
| 	hasher.cost, err = parseIntParam(config, "cost", "bcrypt", config, nil)
 | |
| 	if err != nil {
 | |
| 		return nil
 | |
| 	}
 | |
| 
 | |
| 	return hasher
 | |
| }
 |