main
1package crypt
2
3import (
4 "crypto/hmac"
5 "crypto/md5"
6 "crypto/sha1"
7 "crypto/sha256"
8 "crypto/sha512"
9 "hash"
10 "testing"
11
12 "github.com/stretchr/testify/assert"
13 "github.com/xlgmokha/x/pkg/pls"
14 "github.com/xlgmokha/x/pkg/x"
15)
16
17func TestHMAC(t *testing.T) {
18 data := x.Must(pls.GenerateRandomBytes(64))
19
20 for _, hash := range []x.Factory[hash.Hash]{md5.New, sha1.New, sha256.New, sha512.New} {
21 key := x.Must(pls.GenerateRandomBytes(32))
22 signer := x.New[*HMACSigner](WithKey(key), WithAlgorithm(hash))
23
24 mac := hmac.New(hash, key)
25 mac.Write(data)
26 expectedSignature := mac.Sum(nil)
27
28 t.Run("Sign", func(t *testing.T) {
29 result := x.Must(signer.Sign(data))
30
31 assert.NotEmpty(t, result)
32 assert.Equal(t, expectedSignature, result)
33 })
34
35 t.Run("Verify", func(t *testing.T) {
36 assert.True(t, signer.Verify(data, expectedSignature))
37
38 assert.False(t, signer.Verify(data, []byte{}))
39 assert.False(t, signer.Verify(data, x.Must(pls.GenerateRandomBytes(32))))
40 assert.False(t, signer.Verify(x.Must(pls.GenerateRandomBytes(32)), expectedSignature))
41 })
42 }
43}