2025-07-07 07:36:01 -04:00
|
|
|
package varsig_test
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"bytes"
|
|
|
|
|
"io"
|
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
|
|
2025-07-08 08:23:30 -04:00
|
|
|
"github.com/ucan-wg/go-varsig"
|
2025-07-07 07:36:01 -04:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func TestDecodeHashAlgorithm(t *testing.T) {
|
|
|
|
|
t.Parallel()
|
|
|
|
|
|
|
|
|
|
t.Run("passes", func(t *testing.T) {
|
|
|
|
|
t.Parallel()
|
|
|
|
|
|
|
|
|
|
hashAlg, err := varsig.DecodeHashAlgorithm(bytes.NewReader([]byte{0x12}))
|
|
|
|
|
require.NoError(t, err)
|
2025-07-22 11:27:24 +02:00
|
|
|
require.Equal(t, varsig.HashSha2_256, hashAlg)
|
2025-07-07 07:36:01 -04:00
|
|
|
})
|
|
|
|
|
|
|
|
|
|
t.Run("fails - truncated varsig (no bytes)", func(t *testing.T) {
|
|
|
|
|
t.Parallel()
|
|
|
|
|
|
|
|
|
|
hashAlg, err := varsig.DecodeHashAlgorithm(bytes.NewReader([]byte{}))
|
2025-07-22 11:27:24 +02:00
|
|
|
require.ErrorIs(t, err, varsig.ErrUnknownHash)
|
2025-07-07 07:36:01 -04:00
|
|
|
require.ErrorIs(t, err, io.EOF)
|
2025-07-22 11:27:24 +02:00
|
|
|
require.Equal(t, varsig.HashUnspecified, hashAlg)
|
2025-07-07 07:36:01 -04:00
|
|
|
})
|
|
|
|
|
|
|
|
|
|
t.Run("fails - unknown hash algorithm", func(t *testing.T) {
|
|
|
|
|
t.Parallel()
|
|
|
|
|
|
|
|
|
|
hashAlg, err := varsig.DecodeHashAlgorithm(bytes.NewReader([]byte{0x42}))
|
2025-07-22 11:27:24 +02:00
|
|
|
require.ErrorIs(t, err, varsig.ErrUnknownHash)
|
|
|
|
|
require.Equal(t, varsig.HashUnspecified, hashAlg)
|
2025-07-07 07:36:01 -04:00
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
2025-07-08 15:50:59 +02:00
|
|
|
func BenchmarkDecodeHashAlgorithm(b *testing.B) {
|
|
|
|
|
b.ReportAllocs()
|
|
|
|
|
data := []byte{0x12}
|
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
|
|
|
_, _ = varsig.DecodeHashAlgorithm(bytes.NewReader(data))
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-07-07 07:36:01 -04:00
|
|
|
func TestDecodePayloadEncoding(t *testing.T) {
|
|
|
|
|
t.Parallel()
|
|
|
|
|
|
|
|
|
|
t.Run("passes", func(t *testing.T) {
|
|
|
|
|
t.Parallel()
|
|
|
|
|
|
|
|
|
|
t.Run("v1", func(t *testing.T) {
|
|
|
|
|
t.Parallel()
|
|
|
|
|
|
2025-07-28 18:40:45 +02:00
|
|
|
payEnc, err := varsig.DecodePayloadEncoding(bytes.NewReader([]byte{0x5f}))
|
2025-07-07 07:36:01 -04:00
|
|
|
require.NoError(t, err)
|
|
|
|
|
require.Equal(t, varsig.PayloadEncodingVerbatim, payEnc)
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
t.Run("fails", func(t *testing.T) {
|
|
|
|
|
t.Parallel()
|
|
|
|
|
|
|
|
|
|
tests := []struct {
|
|
|
|
|
name string
|
|
|
|
|
data []byte
|
|
|
|
|
err error
|
|
|
|
|
}{
|
|
|
|
|
{
|
2025-07-28 18:40:45 +02:00
|
|
|
name: "unsupported encoding",
|
2025-07-07 07:36:01 -04:00
|
|
|
data: []byte{0x6a, 0x77}, // JWT
|
|
|
|
|
err: varsig.ErrUnsupportedPayloadEncoding,
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for _, tt := range tests {
|
|
|
|
|
tt := tt
|
|
|
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
|
|
|
t.Parallel()
|
|
|
|
|
|
|
|
|
|
r := bytes.NewReader(tt.data)
|
2025-07-28 18:40:45 +02:00
|
|
|
_, err := varsig.DecodePayloadEncoding(r)
|
2025-07-07 07:36:01 -04:00
|
|
|
require.ErrorIs(t, err, tt.err)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
2025-07-08 15:50:59 +02:00
|
|
|
|
|
|
|
|
func BenchmarkDecodePayloadEncoding(b *testing.B) {
|
|
|
|
|
b.ReportAllocs()
|
|
|
|
|
data := []byte{0x5f}
|
|
|
|
|
for i := 0; i < b.N; i++ {
|
2025-07-28 18:40:45 +02:00
|
|
|
_, _ = varsig.DecodePayloadEncoding(bytes.NewReader(data))
|
2025-07-08 15:50:59 +02:00
|
|
|
}
|
|
|
|
|
}
|