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}