|
|
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)
} }
|