97 lines
2.4 KiB
Go
97 lines
2.4 KiB
Go
package varsig_test
|
|
|
|
import (
|
|
"encoding/base64"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/ucan-wg/go-varsig"
|
|
)
|
|
|
|
func TestRSAVarsig(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
const keyLen = 0x100
|
|
|
|
// This test uses the same RSA configuration as below but for varsig
|
|
// >= v1
|
|
example, err := base64.RawStdEncoding.DecodeString("NAGFJBKAAnE")
|
|
require.NoError(t, err)
|
|
|
|
t.Run("Decode", func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
vs, err := varsig.Decode(example)
|
|
require.NoError(t, err)
|
|
|
|
rsaVs, ok := vs.(*varsig.RSAVarsig)
|
|
require.True(t, ok)
|
|
|
|
assert.Equal(t, varsig.Version1, rsaVs.Version())
|
|
assert.Equal(t, varsig.DiscriminatorRSA, rsaVs.Discriminator())
|
|
assert.Equal(t, varsig.HashAlgorithmSHA256, rsaVs.HashAlgorithm())
|
|
assert.Equal(t, varsig.PayloadEncodingDAGCBOR, rsaVs.PayloadEncoding())
|
|
assert.Equal(t, uint64(keyLen), rsaVs.KeyLength())
|
|
assert.Len(t, rsaVs.Signature(), 0)
|
|
})
|
|
|
|
t.Run("Encode", func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
rsaVarsig, err := varsig.NewRSAVarsig(
|
|
varsig.HashAlgorithmSHA256,
|
|
keyLen,
|
|
varsig.PayloadEncodingDAGCBOR,
|
|
)
|
|
require.NoError(t, err)
|
|
|
|
assert.Equal(t, example, rsaVarsig.Encode())
|
|
t.Log(base64.RawStdEncoding.EncodeToString(rsaVarsig.Encode()))
|
|
})
|
|
}
|
|
|
|
func TestUCANExample(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
const keyLen = 0x100
|
|
|
|
// This test is the value shown in the UCAN v1.0.0 example, which is
|
|
// an RSA varsig < v1 encoded as RS256 with a key length of 0x100
|
|
// bytes and DAG-CBOR payload encoding.
|
|
example, err := base64.RawStdEncoding.DecodeString("NIUkEoACcQ")
|
|
require.NoError(t, err)
|
|
|
|
t.Run("Decode", func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
vs, err := varsig.Decode(example)
|
|
require.ErrorIs(t, err, varsig.ErrMissingSignature)
|
|
|
|
rsaVs, ok := vs.(*varsig.RSAVarsig)
|
|
require.True(t, ok)
|
|
|
|
assert.Equal(t, varsig.Version0, rsaVs.Version())
|
|
assert.Equal(t, varsig.DiscriminatorRSA, rsaVs.Discriminator())
|
|
assert.Equal(t, varsig.HashAlgorithmSHA256, rsaVs.HashAlgorithm())
|
|
assert.Equal(t, varsig.PayloadEncodingDAGCBOR, rsaVs.PayloadEncoding())
|
|
assert.Equal(t, uint64(keyLen), rsaVs.KeyLength())
|
|
assert.Len(t, rsaVs.Signature(), 0)
|
|
})
|
|
|
|
t.Run("Encode", func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
rsaVarsig, err := varsig.NewRSAVarsig(
|
|
varsig.HashAlgorithmSHA256,
|
|
keyLen,
|
|
varsig.PayloadEncodingDAGCBOR,
|
|
varsig.WithForceVersion0([]byte{}),
|
|
)
|
|
require.ErrorIs(t, err, varsig.ErrMissingSignature)
|
|
|
|
assert.Equal(t, example, rsaVarsig.Encode())
|
|
})
|
|
}
|