-
Notifications
You must be signed in to change notification settings - Fork 0
/
verify.go
65 lines (51 loc) · 1.15 KB
/
verify.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
package subcommand
import (
"bytes"
"errors"
"fmt"
"github.com/sean9999/go-flargs"
"github.com/sean9999/go-oracle"
)
func Verify(env *flargs.Environment, settings *ParamSet) error {
me := settings.Me
conf := settings.Config
signedMsg := new(bytes.Buffer)
signedMsg.ReadFrom(env.InputStream)
pt := new(oracle.PlainText)
if settings.Format == "pem" {
err := pt.UnmarshalPEM(signedMsg.Bytes())
if err != nil {
return err
}
} else {
err := pt.UnmarshalIon(signedMsg.Bytes())
if err != nil {
return err
}
}
pubHex, ok := pt.Headers["pubkey"]
if !ok {
return errors.New("there was no 'pubkey' header")
}
asserter, err := oracle.PeerFromHex([]byte(pubHex))
if err != nil {
return err
}
ok = me.Verify(pt, asserter)
if ok {
err = me.AddPeer(asserter)
if err != nil {
return err
}
err = me.Export(conf)
if err != nil {
return err
}
} else {
//return errors.New("the assertion could not be validated")
return NewOracleError("the assertion could not be validated.", nil)
}
fmt.Fprintf(env.OutputStream, "Peer %s was validated and saved to %s\n", asserter.Nickname(), conf.Name())
conf.Close()
return nil
}