-
Notifications
You must be signed in to change notification settings - Fork 1
/
b58.go
192 lines (159 loc) · 4.06 KB
/
b58.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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
// Package b58 contains Base58 decoding functions of various Tezos types
package b58
import (
"errors"
tz "github.com/ecadlabs/gotez/v2"
"github.com/ecadlabs/gotez/v2/b58/base58"
"github.com/ecadlabs/gotez/v2/b58/prefix"
)
//go:generate go run generate.go
func ParsePublicKey(src []byte) (tz.PublicKey, error) {
pre, payload, err := base58.DecodeTZ(src)
if err != nil {
return nil, err
}
switch pre {
case &prefix.Ed25519PublicKey:
var out tz.Ed25519PublicKey
copy(out[:], payload)
return &out, nil
case &prefix.Secp256k1PublicKey:
var out tz.Secp256k1PublicKey
copy(out[:], payload)
return &out, nil
case &prefix.P256PublicKey:
var out tz.P256PublicKey
copy(out[:], payload)
return &out, nil
case &prefix.BLS12_381PublicKey:
var out tz.BLSPublicKey
copy(out[:], payload)
return &out, nil
default:
return nil, errors.New("gotez: unknown public key prefix")
}
}
func ParsePublicKeyHash(src []byte) (tz.PublicKeyHash, error) {
pre, payload, err := base58.DecodeTZ(src)
if err != nil {
return nil, err
}
switch pre {
case &prefix.Ed25519PublicKeyHash:
var out tz.Ed25519PublicKeyHash
copy(out[:], payload)
return &out, nil
case &prefix.Secp256k1PublicKeyHash:
var out tz.Secp256k1PublicKeyHash
copy(out[:], payload)
return &out, nil
case &prefix.P256PublicKeyHash:
var out tz.P256PublicKeyHash
copy(out[:], payload)
return &out, nil
case &prefix.BLS12_381PublicKeyHash:
var out tz.BLSPublicKeyHash
copy(out[:], payload)
return &out, nil
default:
return nil, errors.New("gotez: unknown public key prefix")
}
}
func ParsePrivateKey(src []byte) (tz.PrivateKey, error) {
pre, payload, err := base58.DecodeTZ(src)
if err != nil {
return nil, err
}
switch pre {
case &prefix.Ed25519Seed:
var out tz.Ed25519PrivateKey
copy(out[:], payload)
return &out, nil
case &prefix.Secp256k1SecretKey:
var out tz.Secp256k1PrivateKey
copy(out[:], payload)
return &out, nil
case &prefix.P256SecretKey:
var out tz.P256PrivateKey
copy(out[:], payload)
return &out, nil
case &prefix.BLS12_381SecretKey:
var out tz.BLSPrivateKey
copy(out[:], payload)
return &out, nil
default:
return nil, errors.New("gotez: unknown private key prefix")
}
}
func ParseEncryptedPrivateKey(src []byte) (tz.EncryptedPrivateKey, error) {
pre, payload, err := base58.DecodeTZ(src)
if err != nil {
return nil, err
}
switch pre {
case &prefix.Ed25519Seed:
var out tz.Ed25519PrivateKey
copy(out[:], payload)
return &out, nil
case &prefix.Secp256k1SecretKey:
var out tz.Secp256k1PrivateKey
copy(out[:], payload)
return &out, nil
case &prefix.P256SecretKey:
var out tz.P256PrivateKey
copy(out[:], payload)
return &out, nil
case &prefix.BLS12_381SecretKey:
var out tz.BLSPrivateKey
copy(out[:], payload)
return &out, nil
case &prefix.Ed25519EncryptedSeed:
var out tz.Ed25519EncryptedPrivateKey
copy(out[:], payload)
return &out, nil
case &prefix.Secp256k1EncryptedSecretKey:
var out tz.Secp256k1EncryptedPrivateKey
copy(out[:], payload)
return &out, nil
case &prefix.P256EncryptedSecretKey:
var out tz.P256EncryptedPrivateKey
copy(out[:], payload)
return &out, nil
case &prefix.BLS12_381EncryptedSecretKey:
var out tz.BLSEncryptedPrivateKey
copy(out[:], payload)
return &out, nil
default:
return nil, errors.New("gotez: unknown private key prefix")
}
}
func ParseSignature(src []byte) (tz.Signature, error) {
pre, payload, err := base58.DecodeTZ(src)
if err != nil {
return nil, err
}
switch pre {
case &prefix.GenericSignature:
var out tz.GenericSignature
copy(out[:], payload)
return &out, nil
case &prefix.Ed25519Signature:
var out tz.Ed25519Signature
copy(out[:], payload)
return &out, nil
case &prefix.Secp256k1Signature:
var out tz.Secp256k1Signature
copy(out[:], payload)
return &out, nil
case &prefix.P256Signature:
var out tz.P256Signature
copy(out[:], payload)
return &out, nil
case &prefix.BLS12_381Signature:
var out tz.BLSSignature
copy(out[:], payload)
return &out, nil
default:
return nil, errors.New("gotez: unknown signature prefix")
}
}