forked from keybase/client
/
saltpack.go
127 lines (111 loc) · 3.87 KB
/
saltpack.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
// Copyright 2015 Keybase, Inc. All rights reserved. Use of
// this source code is governed by the included BSD license.
package service
import (
"github.com/keybase/client/go/engine"
"github.com/keybase/client/go/libkb"
keybase1 "github.com/keybase/client/go/protocol"
rpc "github.com/keybase/go-framed-msgpack-rpc"
"golang.org/x/net/context"
)
type SaltpackHandler struct {
*BaseHandler
libkb.Contextified
}
type RemoteSaltpackUI struct {
sessionID int
cli keybase1.SaltpackUiClient
}
func NewRemoteSaltpackUI(sessionID int, c *rpc.Client) *RemoteSaltpackUI {
return &RemoteSaltpackUI{
sessionID: sessionID,
cli: keybase1.SaltpackUiClient{Cli: c},
}
}
func (r *RemoteSaltpackUI) SaltpackPromptForDecrypt(ctx context.Context, arg keybase1.SaltpackPromptForDecryptArg, usedDelegateUI bool) (err error) {
arg.SessionID = r.sessionID
arg.UsedDelegateUI = usedDelegateUI
return r.cli.SaltpackPromptForDecrypt(ctx, arg)
}
func (r *RemoteSaltpackUI) SaltpackVerifySuccess(ctx context.Context, arg keybase1.SaltpackVerifySuccessArg) (err error) {
arg.SessionID = r.sessionID
return r.cli.SaltpackVerifySuccess(ctx, arg)
}
func NewSaltpackHandler(xp rpc.Transporter, g *libkb.GlobalContext) *SaltpackHandler {
return &SaltpackHandler{
BaseHandler: NewBaseHandler(xp),
Contextified: libkb.NewContextified(g),
}
}
func (h *SaltpackHandler) SaltpackDecrypt(_ context.Context, arg keybase1.SaltpackDecryptArg) (info keybase1.SaltpackEncryptedMessageInfo, err error) {
cli := h.getStreamUICli()
src := libkb.NewRemoteStreamBuffered(arg.Source, cli, arg.SessionID)
snk := libkb.NewRemoteStreamBuffered(arg.Sink, cli, arg.SessionID)
earg := &engine.SaltpackDecryptArg{
Sink: snk,
Source: src,
Opts: arg.Opts,
}
ctx := &engine.Context{
IdentifyUI: h.NewRemoteIdentifyUI(arg.SessionID, h.G()),
SecretUI: h.getSecretUI(arg.SessionID, h.G()),
SaltpackUI: h.getSaltpackUI(arg.SessionID),
SessionID: arg.SessionID,
}
eng := engine.NewSaltpackDecrypt(earg, h.G())
err = engine.RunEngine(eng, ctx)
info = eng.MessageInfo()
return info, err
}
func (h *SaltpackHandler) SaltpackEncrypt(_ context.Context, arg keybase1.SaltpackEncryptArg) error {
cli := h.getStreamUICli()
src := libkb.NewRemoteStreamBuffered(arg.Source, cli, arg.SessionID)
snk := libkb.NewRemoteStreamBuffered(arg.Sink, cli, arg.SessionID)
earg := &engine.SaltpackEncryptArg{
Opts: arg.Opts,
Sink: snk,
Source: src,
}
ctx := &engine.Context{
IdentifyUI: h.NewRemoteIdentifyUI(arg.SessionID, h.G()),
SecretUI: h.getSecretUI(arg.SessionID, h.G()),
SessionID: arg.SessionID,
}
eng := engine.NewSaltpackEncrypt(earg, h.G())
return engine.RunEngine(eng, ctx)
}
func (h *SaltpackHandler) SaltpackSign(_ context.Context, arg keybase1.SaltpackSignArg) error {
cli := h.getStreamUICli()
src := libkb.NewRemoteStreamBuffered(arg.Source, cli, arg.SessionID)
snk := libkb.NewRemoteStreamBuffered(arg.Sink, cli, arg.SessionID)
earg := &engine.SaltpackSignArg{
Opts: arg.Opts,
Sink: snk,
Source: src,
}
ctx := &engine.Context{
IdentifyUI: h.NewRemoteIdentifyUI(arg.SessionID, h.G()),
SecretUI: h.getSecretUI(arg.SessionID, h.G()),
SessionID: arg.SessionID,
}
eng := engine.NewSaltpackSign(earg, h.G())
return engine.RunEngine(eng, ctx)
}
func (h *SaltpackHandler) SaltpackVerify(_ context.Context, arg keybase1.SaltpackVerifyArg) error {
cli := h.getStreamUICli()
src := libkb.NewRemoteStreamBuffered(arg.Source, cli, arg.SessionID)
snk := libkb.NewRemoteStreamBuffered(arg.Sink, cli, arg.SessionID)
earg := &engine.SaltpackVerifyArg{
Opts: arg.Opts,
Sink: snk,
Source: src,
}
ctx := &engine.Context{
IdentifyUI: h.NewRemoteIdentifyUI(arg.SessionID, h.G()),
SecretUI: h.getSecretUI(arg.SessionID, h.G()),
SaltpackUI: h.getSaltpackUI(arg.SessionID),
SessionID: arg.SessionID,
}
eng := engine.NewSaltpackVerify(earg, h.G())
return engine.RunEngine(eng, ctx)
}