Try to fix SSHA conversion
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing

This commit is contained in:
Quentin 2022-07-19 17:18:14 +02:00
parent aac8ee19d7
commit ce39432a07
Signed by: quentin
GPG key ID: E9602264D639FF68
2 changed files with 30 additions and 1 deletions

14
ssha.go
View file

@ -2,6 +2,8 @@ package main
import ( import (
"errors" "errors"
"regexp"
"strings"
"github.com/jsimonetti/pwscheme/ssha" "github.com/jsimonetti/pwscheme/ssha"
"github.com/jsimonetti/pwscheme/ssha256" "github.com/jsimonetti/pwscheme/ssha256"
@ -14,6 +16,8 @@ const (
SSHA512 = "{SSHA512}" SSHA512 = "{SSHA512}"
) )
var scheme = regexp.MustCompile(`^{([0-9a-zA-Z]+)}`)
// Encode encodes the string to ssha512 // Encode encodes the string to ssha512
func SSHAEncode(rawPassPhrase string) (string, error) { func SSHAEncode(rawPassPhrase string) (string, error) {
return ssha512.Generate(rawPassPhrase, 16) return ssha512.Generate(rawPassPhrase, 16)
@ -21,7 +25,9 @@ func SSHAEncode(rawPassPhrase string) (string, error) {
// Matches matches the encoded password and the raw password // Matches matches the encoded password and the raw password
func SSHAMatches(encodedPassPhrase string, rawPassPhrase string) (bool, error) { func SSHAMatches(encodedPassPhrase string, rawPassPhrase string) (bool, error) {
hashType, err := determineHashType(encodedPassPhrase) cleanEncodedPass := uppercaseScheme(encodedPassPhrase)
hashType, err := determineHashType(cleanEncodedPass)
if err != nil { if err != nil {
return false, errors.New("invalid password hash stored") return false, errors.New("invalid password hash stored")
} }
@ -51,3 +57,9 @@ func determineHashType(hash string) (string, error) {
return "", errors.New("no valid hash found") return "", errors.New("no valid hash found")
} }
func uppercaseScheme(hash string) string {
return scheme.ReplaceAllStringFunc(hash, func(w string) string {
return strings.ToUpper(w)
})
}

17
ssha_test.go Normal file
View file

@ -0,0 +1,17 @@
package main
import (
"testing"
)
func TestUpper(t *testing.T) {
r1 := uppercaseScheme("{ssha}ss4654654")
if r1 != "{SSHA}ss4654654" {
t.Fatal(r1)
}
r2 := uppercaseScheme("{ssha512}fdbgf6546")
if r2 != "{SSHA512}fdbgf6546" {
t.Fatal(r2)
}
}