Merge pull request #13 from majestrate/master

add dsa benchmarks and fix dsa signature encoding
This commit is contained in:
Hayden Parker
2016-07-10 23:16:17 -07:00
committed by GitHub
2 changed files with 46 additions and 2 deletions

View File

@@ -162,8 +162,12 @@ func (ds *DSASigner) SignHash(h []byte) (sig []byte, err error) {
r, s, err = dsa.Sign(rand.Reader, ds.k, h)
if err == nil {
sig = make([]byte, 40)
copy(sig, r.Bytes())
copy(sig[20:], s.Bytes())
rb := r.Bytes()
rl := len(rb)
copy(sig[20-rl:20], rb)
sb := s.Bytes()
sl := len(sb)
copy(sig[20+(20-sl):], sb)
}
return
}

View File

@@ -1,6 +1,7 @@
package crypto
import (
log "github.com/sirupsen/logrus"
"testing"
)
@@ -44,3 +45,42 @@ func TestDSA(t *testing.T) {
t.Fail()
}
}
func BenchmarkDSAGenerate(b *testing.B) {
var sk DSAPrivateKey
for n := 0; n < b.N; n++ {
_, err := sk.Generate()
if err != nil {
panic(err.Error())
}
}
}
func BenchmarkDSASignVerify(b *testing.B) {
var sk DSAPrivateKey
var pk DSAPublicKey
var err error
sk, err = sk.Generate()
if err != nil {
panic(err.Error())
}
pk, err = sk.Public()
if err != nil {
panic(err.Error())
}
s, _ := sk.NewSigner()
v, _ := pk.NewVerifier()
data := make([]byte, 1024)
fail := 0
for n := 0; n < b.N; n++ {
sig, err := s.Sign(data)
if err != nil {
panic(err.Error())
}
err = v.Verify(data, sig)
if err != nil {
fail++
}
}
log.Infof("%d fails %d signs", fail, b.N)
}