all repos

onasty @ dfbb8b4

a one-time notes service

onasty/internal/hasher/sha256.go (view raw)

Smirnov Oleksandr Smirnov Oleksandr
ss2316544@gmail.com
refactor: fix annoyances (#97)..., 1 year ago
1
package hasher
2
3
import (
4
	"crypto/sha256"
5
	"encoding/hex"
6
)
7
8
type SHA256Hasher struct {
9
	salt string
10
}
11
12
func NewSHA256Hasher(salt string) *SHA256Hasher {
13
	return &SHA256Hasher{salt: salt}
14
}
15
16
func (h *SHA256Hasher) Hash(inp string) (string, error) {
17
	hash := sha256.New()
18
	if _, err := hash.Write([]byte(inp)); err != nil {
19
		return "", err
20
	}
21
	return hex.EncodeToString(hash.Sum([]byte(h.salt))), nil
22
}
23
24
func (h *SHA256Hasher) Compare(hash, plain string) error {
25
	expected, err := h.Hash(plain)
26
	if err != nil {
27
		return err
28
	}
29
30
	if expected != hash {
31
		return ErrMismatchedHashes
32
	}
33
	return nil
34
}