package main import ( "crypto/ecdsa" "math/big" "testing" "github.com/arnaucube/go-blindsecp256k1" "github.com/btcsuite/btcd/btcec" "github.com/stretchr/testify/require" "gotest.tools/assert" ) func calculateKeysFromK(t *testing.T, k *big.Int) (*btcec.PublicKey, *blindsecp256k1.PublicKey) { curve := btcec.S256() x, y := curve.ScalarBaseMult(k.Bytes()) skEth := (*btcec.PrivateKey)(&ecdsa.PrivateKey{ PublicKey: ecdsa.PublicKey{ Curve: curve, X: x, Y: y, }, D: k, }) pkEthAux := (*btcec.PublicKey)(&skEth.PublicKey) pkEth := skEth.PubKey() assert.Equal(t, pkEth, pkEthAux) skBlind := blindsecp256k1.PrivateKey(*k) pkBlind := skBlind.Public() return pkEth, pkBlind } func TestCompatibleKeys(t *testing.T) { // using incremental k for i := 0; i < 10000; i++ { k := big.NewInt(int64(i)) pkEth, pkBlind := calculateKeysFromK(t, k) assert.Equal(t, pkEth.X.String(), pkBlind.X.String()) assert.Equal(t, pkEth.Y.String(), pkBlind.Y.String()) // fmt.Println("k", k) // fmt.Println(pkEth) // fmt.Println(pkBlind) } // using random k for i := 0; i < 10000; i++ { kaux, err := btcec.NewPrivateKey(btcec.S256()) require.NoError(t, err) k := kaux.D pkEth, pkBlind := calculateKeysFromK(t, k) assert.Equal(t, pkEth.X.String(), pkBlind.X.String()) assert.Equal(t, pkEth.Y.String(), pkBlind.Y.String()) // fmt.Println("k", k) // fmt.Println(pkEth) // fmt.Println(pkBlind) } }