for bench
Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>
This commit is contained in:
parent
fdc392323e
commit
2d9f2d40e7
2 changed files with 57 additions and 5 deletions
|
@ -1,7 +1,9 @@
|
||||||
package native_test
|
package native_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"crypto/elliptic"
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
|
"encoding/hex"
|
||||||
"fmt"
|
"fmt"
|
||||||
"math/big"
|
"math/big"
|
||||||
"sort"
|
"sort"
|
||||||
|
@ -16,6 +18,7 @@ import (
|
||||||
"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
|
"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/io"
|
"github.com/nspcc-dev/neo-go/pkg/io"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/neotest"
|
"github.com/nspcc-dev/neo-go/pkg/neotest"
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/smartcontract"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/smartcontract/callflag"
|
"github.com/nspcc-dev/neo-go/pkg/smartcontract/callflag"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/util"
|
"github.com/nspcc-dev/neo-go/pkg/util"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/vm/emit"
|
"github.com/nspcc-dev/neo-go/pkg/vm/emit"
|
||||||
|
@ -578,6 +581,16 @@ func constructMessageCompat(t *testing.T, magic uint32, tx hash.Hashable) []byte
|
||||||
return hash.NetSha256(magic, tx).BytesBE()
|
return hash.NetSha256(magic, tx).BytesBE()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestPubFromBytes(t *testing.T) {
|
||||||
|
priv, err := keys.NewSecp256k1PrivateKey() // key on Koblitz
|
||||||
|
require.NoError(t, err)
|
||||||
|
fmt.Println(hex.EncodeToString(priv.Bytes()))
|
||||||
|
fmt.Println(hex.EncodeToString(priv.PublicKey().UncompressedBytes()))
|
||||||
|
resGo, err := keys.NewPublicKeyFromBytes(priv.PublicKey().Bytes(), elliptic.P256()) // restore with Secp256r1
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.NotNil(t, resGo)
|
||||||
|
}
|
||||||
|
|
||||||
// TestCryptoLib_KoblitzMultisigVerificationScript builds transaction with custom witness that contains
|
// TestCryptoLib_KoblitzMultisigVerificationScript builds transaction with custom witness that contains
|
||||||
// the Koblitz tx multisignature bytes and Koblitz multisignature verification script.
|
// the Koblitz tx multisignature bytes and Koblitz multisignature verification script.
|
||||||
// This test ensures that transaction signed by m out of n Koblitz keys passes verification and can
|
// This test ensures that transaction signed by m out of n Koblitz keys passes verification and can
|
||||||
|
@ -594,15 +607,24 @@ func TestCryptoLib_KoblitzMultisigVerificationScript(t *testing.T) {
|
||||||
|
|
||||||
// Consider 4 users willing to sign 3/4 multisignature transaction Secp256k1 private keys.
|
// Consider 4 users willing to sign 3/4 multisignature transaction Secp256k1 private keys.
|
||||||
const (
|
const (
|
||||||
n = 4
|
n = 1
|
||||||
m = 3
|
m = 1
|
||||||
)
|
)
|
||||||
pks := make([]*keys.PrivateKey, n)
|
pks := make([]*keys.PrivateKey, n)
|
||||||
for i := range pks {
|
// Bad key:
|
||||||
|
//11d82a8a4dd5a1636f8357f4d9e8c19ec41be24c951ee8413c7512d9f53a5676
|
||||||
|
//04535528c9a786d15bfb6c95a0699a5dbf3c991bed97a505caa89313bdb00a289e92904f29f1b41753629ae64c59d2d248b53ad7a2801121fe79baaf1c99b8355f
|
||||||
|
privBytes, err := hex.DecodeString("11d82a8a4dd5a1636f8357f4d9e8c19ec41be24c951ee8413c7512d9f53a5676")
|
||||||
|
require.NoError(t, err)
|
||||||
|
pks[0], err = keys.NewPrivateKoblitzKeyFromBytes(privBytes)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, hex.EncodeToString(pks[0].PublicKey().Bytes()), "04535528c9a786d15bfb6c95a0699a5dbf3c991bed97a505caa89313bdb00a289e92904f29f1b41753629ae64c59d2d248b53ad7a2801121fe79baaf1c99b8355f")
|
||||||
|
/*for i := range pks {
|
||||||
var err error
|
var err error
|
||||||
pks[i], err = keys.NewSecp256k1PrivateKey()
|
pks[i], err = keys.NewSecp256k1PrivateKey()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}
|
}*/
|
||||||
|
|
||||||
// Sort private keys by their public keys.
|
// Sort private keys by their public keys.
|
||||||
sort.Slice(pks, func(i, j int) bool {
|
sort.Slice(pks, func(i, j int) bool {
|
||||||
return pks[i].PublicKey().Cmp(pks[j].PublicKey()) < 0
|
return pks[i].PublicKey().Cmp(pks[j].PublicKey()) < 0
|
||||||
|
@ -614,7 +636,10 @@ func TestCryptoLib_KoblitzMultisigVerificationScript(t *testing.T) {
|
||||||
for i := range pks {
|
for i := range pks {
|
||||||
pubs[i] = pks[i].PublicKey()
|
pubs[i] = pks[i].PublicKey()
|
||||||
}
|
}
|
||||||
vrfBytes := buildVerificationScript(t, m, pubs)
|
|
||||||
|
//vrfBytes := buildVerificationScript(t, m, pubs)
|
||||||
|
vrfBytes, err := smartcontract.CreateMultiSigRedeemScript(1, pubs)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
// Construct the user's account script hash. It's effectively a verification script hash.
|
// Construct the user's account script hash. It's effectively a verification script hash.
|
||||||
from := hash.Hash160(vrfBytes)
|
from := hash.Hash160(vrfBytes)
|
||||||
|
|
|
@ -80,6 +80,33 @@ func NewPrivateKeyFromBytes(b []byte) (*PrivateKey, error) {
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewPrivateKeyFromBytes returns a NEO Secp256r1 PrivateKey from the given
|
||||||
|
// byte slice.
|
||||||
|
func NewPrivateKoblitzKeyFromBytes(b []byte) (*PrivateKey, error) {
|
||||||
|
if len(b) != 32 {
|
||||||
|
return nil, fmt.Errorf(
|
||||||
|
"invalid byte length: expected %d bytes got %d", 32, len(b),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
var (
|
||||||
|
c = secp256k1.S256()
|
||||||
|
d = new(big.Int).SetBytes(b)
|
||||||
|
)
|
||||||
|
|
||||||
|
x, y := c.ScalarBaseMult(b)
|
||||||
|
|
||||||
|
return &PrivateKey{
|
||||||
|
ecdsa.PrivateKey{
|
||||||
|
PublicKey: ecdsa.PublicKey{
|
||||||
|
Curve: c,
|
||||||
|
X: x,
|
||||||
|
Y: y,
|
||||||
|
},
|
||||||
|
D: d,
|
||||||
|
},
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
// NewPrivateKeyFromASN1 returns a NEO Secp256k1 PrivateKey from the ASN.1
|
// NewPrivateKeyFromASN1 returns a NEO Secp256k1 PrivateKey from the ASN.1
|
||||||
// serialized key.
|
// serialized key.
|
||||||
func NewPrivateKeyFromASN1(b []byte) (*PrivateKey, error) {
|
func NewPrivateKeyFromASN1(b []byte) (*PrivateKey, error) {
|
||||||
|
|
Loading…
Reference in a new issue