Files
Olares/cli/pkg/web5/crypto/dsa/ecdsa/secp256k1_test.go

100 lines
3.0 KiB
Go

package ecdsa_test
import (
"encoding/hex"
"testing"
"github.com/beclab/Olares/cli/pkg/web5/crypto/dsa/ecdsa"
"github.com/beclab/Olares/cli/pkg/web5/jwk"
"github.com/alecthomas/assert/v2"
)
func TestSECP256K1GeneratePrivateKey(t *testing.T) {
key, err := ecdsa.SECP256K1GeneratePrivateKey()
assert.NoError(t, err)
assert.Equal(t, ecdsa.KeyType, key.KTY)
assert.Equal(t, ecdsa.SECP256K1JWACurve, key.CRV)
assert.True(t, key.D != "", "privateJwk.D is empty")
assert.True(t, key.X != "", "privateJwk.X is empty")
assert.True(t, key.Y != "", "privateJwk.Y is empty")
}
func TestSECP256K1BytesToPublicKey_Bad(t *testing.T) {
_, err := ecdsa.SECP256K1BytesToPublicKey([]byte{0x00, 0x01, 0x02, 0x03})
assert.Error(t, err)
}
func TestSECP256K1BytesToPublicKey_Uncompressed(t *testing.T) {
// vector taken from https://github.com/decentralized-identity/web5-js/blob/dids-new-crypto/packages/crypto/tests/fixtures/test-vectors/secp256k1/bytes-to-public-key.json
publicKeyHex := "0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
pubKeyBytes, err := hex.DecodeString(publicKeyHex)
assert.NoError(t, err)
jwk, err := ecdsa.SECP256K1BytesToPublicKey(pubKeyBytes)
assert.NoError(t, err)
assert.Equal(t, ecdsa.SECP256K1JWACurve, jwk.CRV)
assert.Equal(t, ecdsa.KeyType, jwk.KTY)
assert.Equal(t, "eb5mfvncu6xVoGKVzocLBwKb_NstzijZWfKBWxb4F5g", jwk.X)
assert.Equal(t, "SDradyajxGVdpPv8DhEIqP0XtEimhVQZnEfQj_sQ1Lg", jwk.Y)
}
func TestSECP256K1PublicKeyToBytes(t *testing.T) {
// vector taken from https://github.com/decentralized-identity/web5-js/blob/dids-new-crypto/packages/crypto/tests/fixtures/test-vectors/secp256k1/bytes-to-public-key.json
jwk := jwk.JWK{
KTY: "EC",
CRV: ecdsa.SECP256K1JWACurve,
X: "eb5mfvncu6xVoGKVzocLBwKb_NstzijZWfKBWxb4F5g",
Y: "SDradyajxGVdpPv8DhEIqP0XtEimhVQZnEfQj_sQ1Lg",
}
pubKeyBytes, err := ecdsa.SECP256K1PublicKeyToBytes(jwk)
assert.NoError(t, err)
pubKeyHex := hex.EncodeToString(pubKeyBytes)
expected := "0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
assert.Equal(t, expected, pubKeyHex)
}
func TestSECP256K1PublicKeyToBytes_Bad(t *testing.T) {
vectors := []jwk.JWK{
{
KTY: "EC",
CRV: ecdsa.SECP256K1JWACurve,
X: "eb5mfvncu6xVoGKVzocLBwKb_NstzijZWfKBWxb4F5g",
},
{
KTY: "EC",
CRV: ecdsa.SECP256K1JWACurve,
Y: "eb5mfvncu6xVoGKVzocLBwKb_NstzijZWfKBWxb4F5g",
},
{
KTY: "EC",
CRV: ecdsa.SECP256K1JWACurve,
X: "=///",
Y: "SDradyajxGVdpPv8DhEIqP0XtEimhVQZnEfQj_sQ1Lg",
},
{
KTY: "EC",
CRV: ecdsa.SECP256K1JWACurve,
X: "eb5mfvncu6xVoGKVzocLBwKb_NstzijZWfKBWxb4F5g",
Y: "=///",
},
{
KTY: "EC",
CRV: ecdsa.SECP256K1JWACurve,
X: "eb5mfvncu6xVoGKVzocLBwKb_NstzijZWfKBWxb4F5g",
Y: "SDradyajxGVdpPv8DhEIqP0XtEimhVQZnEfQj_sQ1Lg2",
},
}
for _, vec := range vectors {
pubKeyBytes, err := ecdsa.SECP256K1PublicKeyToBytes(vec)
assert.Error(t, err)
assert.Equal(t, nil, pubKeyBytes)
}
}