-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathed25519.go
46 lines (37 loc) · 952 Bytes
/
ed25519.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
package transaction
import "golang.org/x/crypto/ed25519"
func SignerEd25519(privkey []byte) Signer {
return signerEd25519{privkey}
}
func VerifierEd25519(publickey []byte) Verifier {
return verifierEd25519{publickey}
}
type signerEd25519 struct {
privkey []byte
}
type verifierEd25519 struct {
publickey []byte
}
func (s signerEd25519) Sign(t *Transaction) (err error) {
t.sig, err = s.sign(s.privkey, t.msg)
return err
}
func (s signerEd25519) sign(key []byte, msg []byte) (signature []byte, err error) {
priv := ed25519.PrivateKey(key)
signature = ed25519.Sign(priv, msg)
return
}
func (v verifierEd25519) Verify(t *Transaction) error {
if len(t.sig) == 0 {
return NOT_SIGNED
}
return v.verify(v.publickey, t.msg, t.sig)
}
func (v verifierEd25519) verify(key []byte, msg []byte, sig []byte) error {
public := ed25519.PublicKey(key)
valid := ed25519.Verify(public, msg, sig)
if !valid {
return INVALID_SIG
}
return nil
}