-
Notifications
You must be signed in to change notification settings - Fork 28
/
crypto.go
115 lines (98 loc) · 2.39 KB
/
crypto.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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package lkcrypto
import (
"io/ioutil"
"os"
"encoding/hex"
"errors"
"fmt"
gocrypto "third_part/lkcrypto/go-crypto"
)
func SignWithHexPrivkey(priv string, msg []byte) ([]byte, error) {
key, err := HexToPrivkey(priv)
if err != nil {
return []byte{}, fmt.Errorf("HexToPrivkey: %v",err)
}
return key.Sign(msg).Bytes(), nil
}
func VerifySignWithHexPubkey(pub string, msg, sign []byte)(bool, error){
key, err := HexToPubkey(pub)
if err != nil {
return false, fmt.Errorf("HexToPubkey: %v", err)
}
return VerifySign(*key, msg, sign), nil
}
func Sign(priv gocrypto.PrivKey, msg []byte) []byte {
return priv.Sign(msg).Bytes()
}
func VerifySign(pubKey gocrypto.PubKey, msg, sign []byte) bool {
sig, err := gocrypto.SignatureFromBytes(sign)
if err != nil {
return false
}
return pubKey.VerifyBytes(msg, sig)
}
func GenPrivKeySecp256k1(privateFile, publicFile string) error{
privateKey := gocrypto.GenPrivKeySecp256k1()
k := hex.EncodeToString(privateKey.Bytes())
if err := ioutil.WriteFile(privateFile, []byte(k), 0600); err != nil {
return err
}
k = hex.EncodeToString(privateKey.PubKey().Bytes())
if err := ioutil.WriteFile(publicFile, []byte(k), 0600); err != nil {
return err
}
return nil
}
func LoadPubkey(file string)(*gocrypto.PubKey, error){
fd, err := os.Open(file)
if err != nil {
return nil, err
}
defer fd.Close()
buf, err := ioutil.ReadAll(fd)
if err != nil {
return nil, err
}
key, err := hex.DecodeString(string(buf))
if err != nil {
return nil, err
}
pubKey, err := gocrypto.PubKeyFromBytes(key)
if err != nil {
return nil, err
}
return &pubKey, nil
}
func LoadPrivkey(file string)(*gocrypto.PrivKey, error){
fd, err := os.Open(file)
if err != nil {
return nil, err
}
defer fd.Close()
buf, err := ioutil.ReadAll(fd)
if err != nil {
return nil, err
}
key, err := hex.DecodeString(string(buf))
if err != nil {
return nil, err
}
privKey, err := gocrypto.PrivKeyFromBytes(key)
return &privKey, err
}
func HexToPubkey(pub string)(*gocrypto.PubKey, error){
key, err := hex.DecodeString(pub)
if err != nil {
return nil, errors.New("invalid hex string")
}
pubKey, err := gocrypto.PubKeyFromBytes(key)
return &pubKey, err
}
func HexToPrivkey(priv string)(*gocrypto.PrivKey, error){
key, err := hex.DecodeString(priv)
if err != nil {
return nil, errors.New("invalid hex string")
}
privKey, err := gocrypto.PrivKeyFromBytes(key)
return &privKey, err
}