100 lines
3.0 KiB
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)
|
|
}
|
|
}
|