sometimes r and s are < 20 bytes because of how go encodes big.Int, take this into account

This commit is contained in:
Jeff Becker
2016-07-10 09:17:47 -04:00
parent bdef8ebbcc
commit 95c0f1d4f0
2 changed files with 47 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
}