You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

63 lines
1.4 KiB

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