Skip to content

Commit 6dbe48c

Browse files
committed
feat(auth): restrict inittial user hashed password byte length same as hash size
1 parent 2a9abc2 commit 6dbe48c

File tree

3 files changed

+90
-31
lines changed

3 files changed

+90
-31
lines changed

src/serveMux/main.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,22 +23,22 @@ func NewServeMux(
2323
) *ServeMux {
2424
users := user.NewUsers()
2525
for _, u := range p.UsersPlain {
26-
users.AddPlain(u.Username, u.Password)
26+
errorHandler.LogError(users.AddPlain(u.Username, u.Password))
2727
}
2828
for _, u := range p.UsersBase64 {
29-
users.AddBase64(u.Username, u.Password)
29+
errorHandler.LogError(users.AddBase64(u.Username, u.Password))
3030
}
3131
for _, u := range p.UsersMd5 {
32-
users.AddMd5(u.Username, u.Password)
32+
errorHandler.LogError(users.AddMd5(u.Username, u.Password))
3333
}
3434
for _, u := range p.UsersSha1 {
35-
users.AddSha1(u.Username, u.Password)
35+
errorHandler.LogError(users.AddSha1(u.Username, u.Password))
3636
}
3737
for _, u := range p.UsersSha256 {
38-
users.AddSha256(u.Username, u.Password)
38+
errorHandler.LogError(users.AddSha256(u.Username, u.Password))
3939
}
4040
for _, u := range p.UsersSha512 {
41-
users.AddSha512(u.Username, u.Password)
41+
errorHandler.LogError(users.AddSha512(u.Username, u.Password))
4242
}
4343

4444
tplObj, err := tpl.LoadPage(p.Template)

src/user/main.go

Lines changed: 47 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package user
22

3-
import "errors"
3+
import (
4+
"errors"
5+
)
46

57
type Users map[string]user
68

@@ -13,49 +15,81 @@ func (users Users) checkExist(username string) error {
1315

1416
func (users Users) AddPlain(username, password string) (err error) {
1517
err = users.checkExist(username);
16-
if err == nil {
17-
users[username] = newPlainUser(password)
18+
if err != nil {
19+
return
1820
}
21+
22+
users[username] = newPlainUser(password)
1923
return
2024
}
2125

2226
func (users Users) AddBase64(username, password string) (err error) {
2327
err = users.checkExist(username);
24-
if err == nil {
25-
users[username] = newBase64User(password)
28+
if err != nil {
29+
return
2630
}
31+
32+
users[username] = newBase64User(password)
2733
return
2834
}
2935

3036
func (users Users) AddMd5(username, password string) (err error) {
3137
err = users.checkExist(username);
32-
if err == nil {
33-
users[username] = newMd5User(password)
38+
if err != nil {
39+
return
40+
}
41+
42+
user, err := newMd5User(password)
43+
if err != nil {
44+
return
3445
}
46+
47+
users[username] = user
3548
return
3649
}
3750

3851
func (users Users) AddSha1(username, password string) (err error) {
3952
err = users.checkExist(username);
40-
if err == nil {
41-
users[username] = newSha1User(password)
53+
if err != nil {
54+
return
55+
}
56+
57+
user, err := newSha1User(password)
58+
if err != nil {
59+
return
4260
}
61+
62+
users[username] = user
4363
return
4464
}
4565

4666
func (users Users) AddSha256(username, password string) (err error) {
4767
err = users.checkExist(username);
48-
if err == nil {
49-
users[username] = newSha256User(password)
68+
if err != nil {
69+
return
70+
}
71+
72+
user, err := newSha256User(password)
73+
if err != nil {
74+
return
5075
}
76+
77+
users[username] = user
5178
return
5279
}
5380

5481
func (users Users) AddSha512(username, password string) (err error) {
5582
err = users.checkExist(username);
56-
if err == nil {
57-
users[username] = newSha512User(password)
83+
if err != nil {
84+
return
5885
}
86+
87+
user, err := newSha512User(password)
88+
if err != nil {
89+
return
90+
}
91+
92+
users[username] = user
5993
return
6094
}
6195

src/user/user.go

Lines changed: 37 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"crypto/sha512"
88
"encoding/base64"
99
"encoding/hex"
10+
"errors"
1011
)
1112

1213
// common interface for user
@@ -51,11 +52,17 @@ func (u *md5User) auth(input string) bool {
5152
return u.token == inputToken
5253
}
5354

54-
func newMd5User(encoded string) *md5User {
55-
tokenSlice, _ := hex.DecodeString(encoded)
55+
func newMd5User(encPass string) (*md5User, error) {
56+
tokenSlice, err := hex.DecodeString(encPass)
57+
if err != nil {
58+
return nil, err
59+
}
60+
if len(tokenSlice) != md5.Size {
61+
return nil, errors.New("unrecognized hash")
62+
}
5663
token := [md5.Size]byte{}
5764
copy(token[:], tokenSlice)
58-
return &md5User{token}
65+
return &md5User{token}, nil
5966
}
6067

6168
// sha1 hashed password
@@ -68,11 +75,17 @@ func (u *sha1User) auth(input string) bool {
6875
return u.token == inputToken
6976
}
7077

71-
func newSha1User(encPass string) *sha1User {
72-
tokenSlice, _ := hex.DecodeString(encPass)
78+
func newSha1User(encPass string) (*sha1User, error) {
79+
tokenSlice, err := hex.DecodeString(encPass)
80+
if err != nil {
81+
return nil, err
82+
}
83+
if len(tokenSlice) != sha1.Size {
84+
return nil, errors.New("unrecognized hash")
85+
}
7386
token := [sha1.Size]byte{}
7487
copy(token[:], tokenSlice)
75-
return &sha1User{token}
88+
return &sha1User{token}, nil
7689
}
7790

7891
// sha256 hashed password
@@ -85,11 +98,17 @@ func (u *sha256User) auth(input string) bool {
8598
return u.token == inputToken
8699
}
87100

88-
func newSha256User(encPass string) *sha256User {
89-
tokenSlice, _ := hex.DecodeString(encPass)
101+
func newSha256User(encPass string) (*sha256User, error) {
102+
tokenSlice, err := hex.DecodeString(encPass)
103+
if err != nil {
104+
return nil, err
105+
}
106+
if len(tokenSlice) != sha256.Size {
107+
return nil, errors.New("unrecognized hash")
108+
}
90109
token := [sha256.Size]byte{}
91110
copy(token[:], tokenSlice)
92-
return &sha256User{token}
111+
return &sha256User{token}, nil
93112
}
94113

95114
// sha512 hashed password
@@ -102,9 +121,15 @@ func (u *sha512User) auth(input string) bool {
102121
return u.token == inputToken
103122
}
104123

105-
func newSha512User(encPass string) *sha512User {
106-
tokenSlice, _ := hex.DecodeString(encPass)
124+
func newSha512User(encPass string) (*sha512User, error) {
125+
tokenSlice, err := hex.DecodeString(encPass)
126+
if err != nil {
127+
return nil, err
128+
}
129+
if len(tokenSlice) != sha512.Size {
130+
return nil, errors.New("unrecognized hash")
131+
}
107132
token := [sha512.Size]byte{}
108133
copy(token[:], tokenSlice)
109-
return &sha512User{token}
134+
return &sha512User{token}, nil
110135
}

0 commit comments

Comments
 (0)