/
utils.go
37 lines (32 loc) · 1.13 KB
/
utils.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package binancechainTransaction
import (
"github.com/tendermint/tendermint/crypto"
"github.com/tendermint/tendermint/crypto/secp256k1"
"math/big"
)
var (
CurveOrder = []byte{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xBA, 0xAE, 0xDC, 0xE6, 0xAF, 0x48, 0xA0, 0x3B, 0xBF, 0xD2, 0x5E, 0x8C, 0xD0, 0x36, 0x41, 0x41}
HalfCurveOrder = []byte{0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5D, 0x57, 0x6E, 0x73, 0x57, 0xA4, 0x50, 0x1D, 0xDF, 0xE9, 0x2F, 0x46, 0x68, 0x1B, 0x20, 0xA0}
)
func serilizeS(sig []byte) []byte {
s := sig[32:]
numS := new(big.Int).SetBytes(s)
numHalfOrder := new(big.Int).SetBytes(HalfCurveOrder)
if numS.Cmp(numHalfOrder) > 0 {
numOrder := new(big.Int).SetBytes(CurveOrder)
numS.Sub(numOrder, numS)
s = numS.Bytes()
if len(s) < 32 {
for i := 0; i < 32-len(s); i++ {
s = append([]byte{0x00}, s...)
}
}
return append(sig[:32], s...)
}
return sig
}
func NewPubkey(pubkey []byte) crypto.PubKey {
var pubkeyBytes secp256k1.PubKeySecp256k1
copy(pubkeyBytes[:], pubkey)
return pubkeyBytes
}