123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- package sha256
- import (
- "crypto/sha256"
- "fmt"
- "sort"
- "strings"
- "git.andreafazzi.eu/andrea/probo/client"
- "git.andreafazzi.eu/andrea/probo/hasher"
- )
- var DefaultSHA256HashingFn = func(text string) string {
- return fmt.Sprintf("%x", sha256.Sum256([]byte(text)))
- }
- type Default256Hasher struct {
- hashFn hasher.HashFunc
- }
- func NewDefault256Hasher(hashFn hasher.HashFunc) *Default256Hasher {
- return &Default256Hasher{hashFn}
- }
- func (h *Default256Hasher) QuizHashes(quiz *client.Quiz) []string {
- result := make([]string, 0)
- result = append(result, h.QuestionHash(quiz.Question))
- for _, a := range quiz.Answers {
- result = append(result, h.AnswerHash(a))
- }
- result = append(result, h.Calculate(result))
- return result
- }
- func (h *Default256Hasher) QuestionHash(question *client.Question) string {
- return h.hashFn(question.Text)
- }
- func (h *Default256Hasher) AnswerHash(answer *client.Answer) string {
- return h.hashFn(answer.Text)
- }
- func (h *Default256Hasher) Calculate(hashes []string) string {
- orderedHashes := make([]string, len(hashes))
- copy(orderedHashes, hashes)
- sort.Strings(orderedHashes)
- return h.hashFn(strings.Join(orderedHashes, ""))
- }
|