core/secp256k1: update libsecp256k1 Go wrapper and tests

This commit is contained in:
Gustav Simonsson 2015-09-28 11:19:23 +02:00
parent 66d47ced48
commit 27a50c8f4b
2 changed files with 17 additions and 18 deletions

View File

@ -96,7 +96,7 @@ func GenerateKeyPair() ([]byte, []byte) {
var output_len C.size_t var output_len C.size_t
C.secp256k1_ec_pubkey_serialize( // always returns 1 _ = C.secp256k1_ec_pubkey_serialize( // always returns 1
context, context,
pubkey65_ptr, pubkey65_ptr,
&output_len, &output_len,
@ -163,7 +163,7 @@ func Sign(msg []byte, seckey []byte) ([]byte, error) {
sig_serialized_ptr := (*C.uchar)(unsafe.Pointer(&sig_serialized[0])) sig_serialized_ptr := (*C.uchar)(unsafe.Pointer(&sig_serialized[0]))
var recid C.int var recid C.int
C.secp256k1_ecdsa_recoverable_signature_serialize_compact( _ = C.secp256k1_ecdsa_recoverable_signature_serialize_compact(
context, context,
sig_serialized_ptr, // 64 byte compact signature sig_serialized_ptr, // 64 byte compact signature
&recid, &recid,

View File

@ -86,10 +86,7 @@ func TestSignAndRecover(t *testing.T) {
func TestRandomMessagesWithSameKey(t *testing.T) { func TestRandomMessagesWithSameKey(t *testing.T) {
pubkey, seckey := GenerateKeyPair() pubkey, seckey := GenerateKeyPair()
keys := func() ([]byte, []byte) { keys := func() ([]byte, []byte) {
// Sign function zeroes the privkey so we need a new one in each call return pubkey, seckey
newkey := make([]byte, len(seckey))
copy(newkey, seckey)
return pubkey, newkey
} }
signAndRecoverWithRandomMessages(t, keys) signAndRecoverWithRandomMessages(t, keys)
} }
@ -209,30 +206,32 @@ func compactSigCheck(t *testing.T, sig []byte) {
} }
} }
// godep go test -v -run=XXX -bench=BenchmarkSignRandomInputEachRound // godep go test -v -run=XXX -bench=BenchmarkSign
// add -benchtime=10s to benchmark longer for more accurate average // add -benchtime=10s to benchmark longer for more accurate average
func BenchmarkSignRandomInputEachRound(b *testing.B) {
// to avoid compiler optimizing the benchmarked function call
var err error
func BenchmarkSign(b *testing.B) {
for i := 0; i < b.N; i++ { for i := 0; i < b.N; i++ {
b.StopTimer()
_, seckey := GenerateKeyPair() _, seckey := GenerateKeyPair()
msg := randentropy.GetEntropyCSPRNG(32) msg := randentropy.GetEntropyCSPRNG(32)
b.StartTimer() b.StartTimer()
if _, err := Sign(msg, seckey); err != nil { _, e := Sign(msg, seckey)
b.Fatal(err) err = e
} b.StopTimer()
} }
} }
//godep go test -v -run=XXX -bench=BenchmarkRecoverRandomInputEachRound //godep go test -v -run=XXX -bench=BenchmarkECRec
func BenchmarkRecoverRandomInputEachRound(b *testing.B) { func BenchmarkRecover(b *testing.B) {
for i := 0; i < b.N; i++ { for i := 0; i < b.N; i++ {
b.StopTimer()
_, seckey := GenerateKeyPair() _, seckey := GenerateKeyPair()
msg := randentropy.GetEntropyCSPRNG(32) msg := randentropy.GetEntropyCSPRNG(32)
sig, _ := Sign(msg, seckey) sig, _ := Sign(msg, seckey)
b.StartTimer() b.StartTimer()
if _, err := RecoverPubkey(msg, sig); err != nil { _, e := RecoverPubkey(msg, sig)
b.Fatal(err) err = e
} b.StopTimer()
} }
} }