Skip to content

Commit 3dff977

Browse files
committed
fix(): add signer
1 parent 230cfa5 commit 3dff977

File tree

1 file changed

+81
-0
lines changed

1 file changed

+81
-0
lines changed

signer.go

+81
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package goar
2+
3+
import (
4+
"crypto/rsa"
5+
"crypto/sha256"
6+
"fmt"
7+
"github.com/everFinance/goar/types"
8+
"github.com/everFinance/goar/utils"
9+
"github.com/everFinance/gojwk"
10+
"io/ioutil"
11+
)
12+
13+
type Signer struct {
14+
Address string
15+
PubKey *rsa.PublicKey
16+
PrvKey *rsa.PrivateKey
17+
}
18+
19+
func NewSignerFromPath(path string) (*Signer, error) {
20+
b, err := ioutil.ReadFile(path)
21+
if err != nil {
22+
return nil, err
23+
}
24+
return NewSigner(b)
25+
}
26+
27+
func NewSigner(b []byte) (*Signer, error) {
28+
key, err := gojwk.Unmarshal(b)
29+
if err != nil {
30+
return nil, err
31+
}
32+
pubKey, err := key.DecodePublicKey()
33+
if err != nil {
34+
return nil, err
35+
}
36+
pub, ok := pubKey.(*rsa.PublicKey)
37+
if !ok {
38+
err = fmt.Errorf("pubKey type error")
39+
return nil, err
40+
}
41+
42+
prvKey, err := key.DecodePrivateKey()
43+
if err != nil {
44+
return nil, err
45+
}
46+
prv, ok := prvKey.(*rsa.PrivateKey)
47+
if !ok {
48+
err = fmt.Errorf("prvKey type error")
49+
return nil, err
50+
}
51+
addr := sha256.Sum256(pub.N.Bytes())
52+
return &Signer{
53+
Address: utils.Base64Encode(addr[:]),
54+
PubKey: pub,
55+
PrvKey: prv,
56+
}, nil
57+
}
58+
59+
func (s *Signer) SignTx(tx *types.Transaction) error {
60+
signData, err := utils.GetSignatureData(tx)
61+
if err != nil {
62+
return err
63+
}
64+
sig, err := utils.Sign(signData, s.PrvKey)
65+
if err != nil {
66+
return err
67+
}
68+
69+
txId := sha256.Sum256(sig)
70+
tx.ID = utils.Base64Encode(txId[:])
71+
tx.Signature = utils.Base64Encode(sig)
72+
return nil
73+
}
74+
75+
func (s *Signer) Owner() string {
76+
return utils.Base64Encode(s.PubKey.N.Bytes())
77+
}
78+
79+
func (s *Signer) SignMsg(msg []byte) ([]byte, error) {
80+
return utils.Sign(msg, s.PrvKey)
81+
}

0 commit comments

Comments
 (0)