keybase-proofs 2.3.33 → 2.3.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,60 +0,0 @@
1
- {alloc,Sibkey} = require '../../'
2
- {EncKeyManager,KeyManager} = require('kbpgp').kb
3
- {make_esc} = require 'iced-error'
4
- {new_sig_arg} = require './util'
5
- pgp_utils = require('pgp-utils')
6
- {json_stringify_sorted} = pgp_utils.util
7
-
8
- exports.test_sibkey_happy_path = (T,cb) ->
9
- esc = make_esc cb, "test_sibkey_happy_path"
10
- await KeyManager.generate {}, esc defer elder
11
- await KeyManager.generate {}, esc defer sib
12
- arg = new_sig_arg { km : elder }
13
- arg.sibkm = sib
14
- obj = new Sibkey arg
15
- await obj.generate esc defer out
16
- typ = out.inner.obj.body.type
17
- obj2 = alloc typ, arg
18
- varg = { armored : out.armored, skip_ids : true, make_ids : true, inner : out.inner.str }
19
- await obj2.verify varg, esc defer()
20
- cb null
21
-
22
- round_trip_with_corrupted_reverse_sig = ({T, corrupt}, cb) ->
23
- esc = make_esc cb, "round_trip_with_corrupted_reverse_sig"
24
- await KeyManager.generate {}, esc defer elder
25
- await KeyManager.generate {}, esc defer sib
26
- arg = new_sig_arg { km : elder }
27
- arg.sibkm = sib
28
- obj = new Sibkey arg
29
-
30
- obj._v_generate = (opts, cb) ->
31
- esc = make_esc cb, "_v_generate"
32
- x = { reverse_sig: null }
33
- @set_new_key_section x
34
- x.kid = @get_new_km().get_ekid().toString('hex')
35
- eng = @get_new_km().make_sig_eng()
36
- await @generate_json { version : opts.version }, esc defer msg
37
- msg2 = JSON.parse msg
38
- msg2.foo = "bar" if corrupt
39
- msg = json_stringify_sorted(msg2)
40
- await eng.box msg, esc defer { armored, type }
41
- x.reverse_sig = armored
42
- cb null
43
-
44
- await obj.generate esc defer out
45
- typ = out.inner.obj.body.type
46
- obj2 = alloc typ, arg
47
- varg = { armored : out.armored, skip_ids : true, make_ids : true, inner : out.inner.str }
48
- await obj2.verify varg, defer err
49
- if corrupt
50
- T.assert err?, "got an error back"
51
- T.assert (err.message.indexOf('Reverse sig json mismatch') >= 0), "found right error message"
52
- else
53
- T.no_error err, "in the success case, don't expect an error"
54
- cb null
55
-
56
- exports.test_corruption_mechanism = (T,cb) ->
57
- round_trip_with_corrupted_reverse_sig { T, corrupt : false }, cb
58
-
59
- exports.test_reverse_sig_failure = (T,cb) ->
60
- round_trip_with_corrupted_reverse_sig { T, corrupt : true }, cb
@@ -1,118 +0,0 @@
1
- {alloc,team} = require '../../'
2
- {EncKeyManager,KeyManager} = require('kbpgp').kb
3
- {make_esc} = require 'iced-error'
4
- {new_sig_arg} = require './util'
5
- pgp_utils = require('pgp-utils')
6
- {json_stringify_sorted} = pgp_utils.util
7
-
8
- test_klass = ({T,arg, klass, keys}, cb) ->
9
- esc = make_esc cb, "test_klass"
10
- delete arg.kms
11
- delete arg.team.per_team_key
12
- if keys
13
- arg.kms = {}
14
- await EncKeyManager.generate {}, esc defer arg.kms.encryption
15
- await KeyManager.generate {}, esc defer arg.kms.signing
16
- arg.kms.generation = 10
17
- obj = new klass arg
18
- await obj.generate_v2 esc(defer(out)), {dohash:true}
19
- typ = out.inner.obj.body.type
20
- obj2 = alloc typ, arg
21
- varg = { armored : out.armored, skip_ids : true, make_ids : true, inner : out.inner.str, require_packet_hash : true }
22
- await obj2.verify_v2 varg, esc defer()
23
- T.waypoint "checked #{typ} #{if keys then 'with' else 'without'} keys"
24
- cb null
25
-
26
- exports.test_all_classes = (T,cb) ->
27
- esc = make_esc cb, "test_all_classes"
28
- klasses = [team.Index, team.Root, team.ChangeMembership, team.RotateKey,
29
- team.NewSubteam, team.Leave, team.SubteamHead, team.RenameSubteam,
30
- team.Invite, team.RenameUpPointer, team.DeleteSubteam, team.DeleteRoot,
31
- team.DeleteUpPointer, team.KBFS, team.Settings, team.BotSettings]
32
- await KeyManager.generate {}, esc defer km
33
- arg = new_sig_arg { km }
34
- arg.team = { members : { admin : ["a"] } }
35
- for klass in klasses
36
- await test_klass { T, arg, klass, keys : true }, esc defer()
37
- await test_klass { T, arg, klass, keys : false }, esc defer()
38
- cb()
39
-
40
- exports.test_key_section_bad_and_good = (T,cb) ->
41
- esc = make_esc cb, "test_bad_key_section"
42
- await KeyManager.generate {}, esc defer km
43
- arg = new_sig_arg { km }
44
- arg.team = { members : { admin : ["a"] } }
45
- arg.kms = {}
46
- await EncKeyManager.generate {}, esc defer arg.kms.encryption
47
- await KeyManager.generate {}, esc defer arg.kms.signing
48
-
49
- verify_from_arg = ({arg}, cb) ->
50
- obj = new team.RotateKey arg
51
- await obj.generate_v2 esc(defer(out)), {dohash:true}
52
- typ = out.inner.obj.body.type
53
- obj2 = alloc typ, arg
54
- varg = { armored : out.armored, skip_ids : true, make_ids : true, inner : out.inner.str, require_packet_hash : true }
55
- await obj2.verify_v2 varg, defer err
56
- cb err
57
- await verify_from_arg { arg }, defer err
58
- T.assert err?, "we got an error back"
59
- T.equal err.message, "Need per_team_key.generation to be an integer > 0 (got undefined)", "right message"
60
-
61
- arg.kms.generation = 10
62
- arg.kms.appkey_derivation_version = "foo"
63
- await verify_from_arg { arg }, defer err
64
- T.assert err?, "we got an error back"
65
- T.equal err.message, "Need per_team_key.appkey_derivation_version to be an integer >= 1 (got foo)", "right message"
66
-
67
- arg.kms.appkey_derivation_version = 0
68
- await verify_from_arg { arg }, defer err
69
- T.assert err?, "we got an error back"
70
- T.equal err.message, "Need per_team_key.appkey_derivation_version to be an integer >= 1 (got 0)", "right message"
71
-
72
- arg.kms.appkey_derivation_version = 2
73
- await verify_from_arg { arg }, defer err
74
- T.no_error err, "should work"
75
-
76
- cb null
77
-
78
- round_trip_with_corrupted_reverse_sig = ({T, corrupt}, cb) ->
79
- esc = make_esc cb, "test_bad_key_section"
80
- await KeyManager.generate {}, esc defer km
81
- arg = new_sig_arg { km }
82
- arg.team = { members : { admin : ["a"] } }
83
- arg.kms = {}
84
- await EncKeyManager.generate {}, esc defer arg.kms.encryption
85
- await KeyManager.generate {}, esc defer arg.kms.signing
86
- arg.kms.generation = 10
87
- obj = new team.RotateKey arg
88
-
89
- obj._v_generate = (opts, cb) ->
90
- esc = make_esc cb, "_v_generate"
91
- x = { reverse_sig: null }
92
- @set_new_key_section x
93
- eng = @get_new_km().make_sig_eng()
94
- await @generate_json { version : opts.version }, esc defer msg
95
- msg2 = JSON.parse msg
96
- msg2.foo = "bar" if corrupt
97
- msg = json_stringify_sorted(msg2)
98
- await eng.box msg, esc defer { armored, type }
99
- x.reverse_sig = armored
100
- cb null
101
-
102
- await obj.generate_v2 esc(defer(out)), {dohash:true}
103
- typ = out.inner.obj.body.type
104
- obj2 = alloc typ, arg
105
- varg = { armored : out.armored, skip_ids : true, make_ids : true, inner : out.inner.str, require_packet_hash : true }
106
- await obj2.verify_v2 varg, defer err
107
- if corrupt
108
- T.assert err?, "got an error back"
109
- T.assert (err.message.indexOf('Reverse sig json mismatch') >= 0), "found right error message"
110
- else
111
- T.no_error err, "in the success case, don't expect an error"
112
- cb null
113
-
114
- exports.test_corruption_mechanism = (T,cb) ->
115
- round_trip_with_corrupted_reverse_sig { T, corrupt : false }, cb
116
-
117
- exports.test_reverse_sig_failure = (T,cb) ->
118
- round_trip_with_corrupted_reverse_sig { T, corrupt : true }, cb
@@ -1,321 +0,0 @@
1
- {sig3,alloc_v3,team_hidden,errors,constants} = require '../../'
2
- {EncKeyManager,KeyManager} = require('kbpgp').kb
3
- {make_esc} = require 'iced-error'
4
- {new_sig_arg_v3} = require './util'
5
- {prng} = require 'crypto'
6
- {pack,unpack} = require 'purepack'
7
- parse = require '../../lib/parse3'
8
- pgp_utils = require('pgp-utils')
9
- {unix_time} = pgp_utils.util
10
-
11
- twiddle = (b) -> b[0] ^= 1
12
- twiddle_hex = (b) ->
13
- buf = Buffer.from(b, 'hex')
14
- twiddle buf
15
- buf.toString('hex')
16
-
17
- _to_check_params = (a) ->
18
- return {
19
- user : a.user
20
- seqno : a.seqno
21
- prev : a.prev
22
- }
23
-
24
- seed_check = (ptk) -> ptk.seed_check = { h : prng(32), v : 1 }
25
-
26
- exports.test_generate_team_hidden_rotate = (T,cb) ->
27
- esc = make_esc cb
28
- await gen { T }, esc defer { km, ret, arg }
29
- await alloc_v3 { km, armored : ret.armored, check_params : _to_check_params(arg) }, esc defer()
30
- cb null, ret
31
-
32
- exports.test_generate_team_hidden_rotate_with_implicit_admin = (T,cb) ->
33
- esc = make_esc cb
34
- admin = {
35
- id : prng(16)
36
- seqno : 20
37
- chain_type : 3
38
- }
39
- f = (arg) -> arg.team.admin = admin
40
- await gen { T, f }, esc defer { km, ret, arg }
41
- await alloc_v3 { km, armored : ret.armored, check_params : _to_check_params(arg) }, esc defer ret
42
- T.equal ret.objs.inner.team.admin, admin, "admin is right"
43
- cb null
44
-
45
- gen = ({T,f},cb) ->
46
- esc = make_esc cb
47
- await KeyManager.generate {}, esc defer km
48
- ptk = { generation : 10, ptk_type : constants.ptk_types.reader }
49
- arg = new_sig_arg_v3 { mk_prev : true, km }
50
- arg.per_team_keys = [ ptk ]
51
- arg.team = { id : prng(16) }
52
- await EncKeyManager.generate {}, esc defer ptk.enc_km
53
- await KeyManager.generate {}, esc defer ptk.sig_km
54
- seed_check ptk
55
- f? arg
56
- obj = new team_hidden.RotateKey arg
57
- await obj.generate {}, esc defer ret
58
- cb null, {ret, km, arg }
59
-
60
- exports.test_head = (T,cb) ->
61
- esc = make_esc cb
62
- f = (arg) ->
63
- arg.seqno = 1
64
- arg.prev = null
65
- await gen { T, f }, esc defer { km, ret, arg }
66
- await alloc_v3 { km, armored : ret.armored, check_params : _to_check_params(arg) }, esc defer()
67
- cb null
68
-
69
- exports.test_many_ptks = (T,cb) ->
70
- esc = make_esc cb
71
- await KeyManager.generate {}, esc defer km
72
- arg = new_sig_arg_v3 { mk_prev : true, km }
73
- arg.team = { id : prng(16) }
74
- arg.per_team_keys = []
75
- constants.ptk_types.bot = 999
76
- constants.ptk_types.admin = 9999
77
- for i in Object.values(constants.ptk_types)
78
- ptk = { generation : 10, ptk_type : i }
79
- await EncKeyManager.generate {}, esc defer ptk.enc_km
80
- await KeyManager.generate {}, esc defer ptk.sig_km
81
- seed_check ptk
82
- arg.per_team_keys.push ptk
83
- obj = new team_hidden.RotateKey arg
84
- await obj.generate {}, esc defer ret
85
- await alloc_v3 { km, armored : ret.armored, check_params : _to_check_params(arg) }, esc defer { objs }
86
- T.equal objs.inner.per_team_keys.length, 3, "3 ptks"
87
-
88
- arg.per_team_keys[0].ptk_type = 0
89
- arg.per_team_keys[1].ptk_type = 0
90
- await obj.generate {}, esc defer ret
91
- await alloc_v3 { km, armored : ret.armored, check_params : _to_check_params(arg) }, defer err
92
- T.assert err?, "got an error back if repeating the type"
93
- T.equal err.message, "Repeated PTK type 0 not allowed", "right message"
94
-
95
- arg.per_team_keys[1].ptk_type = 100
96
- await obj.generate {}, esc defer ret
97
- await alloc_v3 { km, armored : ret.armored, check_params : _to_check_params(arg) }, defer err
98
- T.assert err?, "got an error back if using a bad PTK type"
99
- T.equal err.message, "At inner.b.k.1.t: value must be a PTK type"
100
-
101
- cb null
102
-
103
- exports.test_generate_verify_team_hidden_rotate = (T,cb) ->
104
- esc = make_esc cb
105
- await gen { T }, esc defer {ret, km, arg }
106
- await alloc_v3 { km, armored : ret.armored, check_params : _to_check_params(arg) }, esc defer { objs }
107
- await KeyManager.generate {}, esc defer km2
108
- await alloc_v3 { km : km2, armored : ret.armored, check_params : _to_check_params(arg) }, defer err
109
- T.assert err?, "got an error"
110
- T.equal err.message, "Signature failed to verify", "right error message"
111
-
112
- arg.user.local.uid = twiddle_hex arg.user.local.uid
113
- await alloc_v3 { km, armored : ret.armored, check_params : _to_check_params(arg) }, defer err
114
- T.assert err?, "got an error"
115
- T.equal err.message, "bad UID", "got the wrong UID"
116
- arg.user.local.uid = twiddle_hex arg.user.local.uid
117
-
118
- arg.user.local.eldest_seqno++
119
- await alloc_v3 { km, armored : ret.armored, check_params : _to_check_params(arg) }, defer err
120
- T.assert err?, "got an error"
121
- T.equal err.message, "bad eldest_seqno", "got the wrong eldest"
122
- arg.user.local.eldest_seqno--
123
-
124
- twiddle arg.prev
125
- await alloc_v3 { km, armored : ret.armored, check_params : _to_check_params(arg) }, defer err
126
- T.assert err?, "got an error"
127
- T.assert (err instanceof errors.BadPrevError), "right error type"
128
- twiddle arg.prev
129
-
130
- await alloc_v3 { km, armored : ret.armored, check_params : _to_check_params(arg), now : unix_time()+1000000 }, defer err
131
- T.assert err?, "got an error"
132
- T.assert (err instanceof errors.ClockSkewError), "right error type"
133
-
134
- inner_armored = ret.armored.inner
135
- inner = unpack(Buffer.from(ret.armored.inner, "base64"))
136
- inner.c++
137
- ret.armored.inner = pack(inner).toString('base64')
138
- await alloc_v3 { km, armored : ret.armored, check_params : _to_check_params(arg) }, defer err
139
- T.assert err?, "got an error ack"
140
- T.equal err.message, "outer's body hash doesn't match inner link", "right message"
141
- ret.armored.inner = inner_armored
142
-
143
- cb null
144
-
145
- exports.test_bad_encoding = (T,cb) ->
146
- esc = make_esc cb
147
- await KeyManager.generate {}, esc defer km
148
- ptk = { generation : 10, ptk_type : constants.ptk_types.reader }
149
- arg = new_sig_arg_v3 { mk_prev : true, km }
150
- arg.per_team_keys = [ ptk ]
151
- arg.team = { id : prng(16) }
152
- await EncKeyManager.generate {}, esc defer ptk.enc_km
153
- await KeyManager.generate {}, esc defer ptk.sig_km
154
- seed_check ptk
155
- obj = new team_hidden.RotateKey arg
156
- await obj.generate {}, esc defer ret
157
- s = ret.armored.inner
158
- n = 30
159
- ret.armored.inner = s[0...n] + " " + s[n...]
160
- await alloc_v3 { km, armored : ret.armored, check_params : _to_check_params(arg) }, defer err
161
- T.assert err?, "error"
162
- T.equal err.message, "non-canonical base64-encoding in inner", "right message"
163
- cb null
164
-
165
- exports.test_bad_outer = (T,cb) ->
166
- esc = make_esc cb
167
- run = (f, msg, cb) ->
168
- await KeyManager.generate {}, esc defer km
169
- ptk = { generation : 10, ptk_type : constants.ptk_types.reader }
170
- arg = new_sig_arg_v3 { mk_prev : true, km }
171
- arg.per_team_keys = [ ptk ]
172
- arg.team = { id : prng(16) }
173
- await EncKeyManager.generate {}, esc defer ptk.enc_km
174
- await KeyManager.generate {}, esc defer ptk.sig_km
175
- ptk.seed_check = { h : prng(32), v : 1 }
176
- obj = new team_hidden.RotateKey arg
177
- obj._generate_outer = ({inner}) ->
178
- ret = (new sig3.OuterLink {
179
- version: obj._version()
180
- seqno : obj.seqno
181
- prev : parse.unhex(obj.prev)
182
- inner_hash : obj._hash(inner)
183
- link_type : obj._v_link_type_v3()
184
- chain_type : obj._v_chain_type_v3()
185
- ignore_if_unsupported : obj.ignore_if_unsupported
186
- }).encode()
187
- f ret
188
- ret
189
- await obj.generate {}, esc defer ret
190
- await alloc_v3 { km, armored : ret.armored, check_params : _to_check_params(arg) }, defer err
191
- T.assert err?, "error"
192
- T.equal err.message, msg, "right message"
193
- cb null
194
-
195
- await run ((v) -> v.push "foo"), "At outer: need an array with 8 fields", defer()
196
- await run ((v) -> v.pop()), "At outer: need an array with 8 fields", defer()
197
- await run ((v) -> v[0]++), "At outer.0: must be set to value 3", defer()
198
- await run ((v) -> v[1] = ["hi"]), "At outer.1: value must be a seqno (sequence number)", defer()
199
- await run ((v) -> v[2] = Buffer.alloc(33)), "At outer.2: value needs to be buffer of length 32", defer()
200
- await run ((v) -> v[3] = Buffer.alloc(33)), "At outer.3: value needs to be buffer of length 32", defer()
201
- await run ((v) -> v[4] = 1000), "At outer.4: value must be a valid link type", defer()
202
- await run ((v) -> v[5] = 1000), "At outer.5: value must be a valid chain type", defer()
203
- await run ((v) -> v[5] = 3), "bad chain/link type combo", defer()
204
-
205
- cb null
206
-
207
- exports.test_bad_inner = (T,cb) ->
208
-
209
- esc = make_esc cb
210
- ptk = { generation : 10, ptk_type : constants.ptk_types.reader }
211
- await KeyManager.generate {}, esc defer km
212
- await EncKeyManager.generate {}, esc defer ptk.enc_km
213
- await KeyManager.generate {}, esc defer ptk.sig_km
214
- seed_check ptk
215
-
216
- run = (f, msg, cb) ->
217
- arg = new_sig_arg_v3 { mk_prev : true, km }
218
- arg.per_team_keys = [ ptk ]
219
- arg.team = { id : prng(16), admin : { id : prng(16), seqno : 19, chain_type : 3 } }
220
- obj = new team_hidden.RotateKey arg
221
- obj._generate_inner = (opts, cb) ->
222
- await obj._generate_inner_impl opts, defer err, json
223
- f json
224
- cb err, json
225
- await obj.generate {}, esc defer ret
226
- await alloc_v3 { km, armored : ret.armored, check_params : _to_check_params(arg) }, defer err
227
- T.assert err?, "error"
228
- T.equal err.message, msg, "right message"
229
- cb null
230
-
231
- await run ((o) -> o.c = "blah"), "At inner.c: value must be a UTC timestamp", defer()
232
- await run ((o) -> o.e = Buffer.alloc(13)), "At inner.e: value needs to be buffer of length 16", defer()
233
- await run ((o) -> o.m = [1]), "At inner.m: need a dictionary", defer()
234
- await run ((o) -> o.m.c = [1]), "At inner.m.c: value must be a UTC timestamp", defer()
235
- await run ((o) -> o.m.h = Buffer.alloc(40)), "At inner.m.h: value needs to be buffer of length 32", defer()
236
- await run ((o) -> o.m.s = -1), "At inner.m.s: value must be a seqno (sequence number)", defer()
237
- await run ((o) -> delete o.s), "At inner.s: key is missing but is mandatory", defer()
238
- await run ((o) -> o.s.e = "foo"), "At inner.s.e: value must be a seqno (sequence number)", defer()
239
- await run ((o) -> o.s.e++), "bad eldest_seqno", defer()
240
- await run ((o) -> o.s.k = Buffer.alloc(30)), "At inner.s.k: value needs to be buffer of length 35", defer()
241
- await run ((o) -> o.s.u = [1]), "At inner.s.u: value needs to be buffer of length 16", defer()
242
- await run ((o) -> o.s.u = Buffer.alloc(16)), "bad UID", defer()
243
- await run ((o) -> o.p.h = Buffer.alloc(30)), "At inner.p.h: value needs to be buffer of length 32", defer()
244
- await run ((o) -> o.p.s = {}), "At inner.p.s: value must be a seqno (sequence number)", defer()
245
- await run ((o) -> o.i.d = 10), "At inner.i.d: value must be a string", defer()
246
- await run ((o) -> o.i.v = 10), "At inner.i.v: value must be a string", defer()
247
- await run ((o) -> o.x = 10), "At inner.x: key is not supported", defer()
248
- await run ((o) -> o.i.x = 10), "At inner.i.x: key is not supported", defer()
249
- await run ((o) -> o.m.x = 10), "At inner.m.x: key is not supported", defer()
250
- await run ((o) -> o.t.i = 10), "At inner.t.i: value needs to be buffer of length 16", defer()
251
- await run ((o) -> o.t = 10), "At inner.t: need a dictionary", defer()
252
- await run ((o) -> o.b.k[0].x = 10), "At inner.b.k.0.x: key is not supported", defer()
253
- await run ((o) -> o.b.k[0].s = Buffer.alloc(32)), "At inner.b.k.0.s: value needs to be buffer of length 35" , defer()
254
- await run ((o) -> o.b.k[0].e = Buffer.alloc(32)), "At inner.b.k.0.e: value needs to be buffer of length 35" , defer()
255
- await run ((o) -> o.b.k[0].g = Buffer.alloc(3)), "At inner.b.k.0.g: value must be a seqno (sequence number)" , defer()
256
- await run ((o) -> o.b.k[0].a = 4), "At inner.b.k.0.a: must be set to value 1" , defer()
257
- await run ((o) -> o.t.a = 10), "At inner.t.a: need a dictionary", defer()
258
- await run ((o) -> o.t.a.i = 10), "At inner.t.a.i: value needs to be buffer of length 16", defer()
259
- await run ((o) -> o.t.a.t = 4), "At inner.t.a.t: value must be a valid chain type", defer()
260
- await run ((o) -> o.t.a.s = "f"), "At inner.t.a.s: value must be a seqno (sequence number)", defer()
261
-
262
- cb null
263
-
264
- exports.test_bad_reverse_sig = (T,cb) ->
265
- esc = make_esc cb
266
- await KeyManager.generate {}, esc defer km
267
- ptk = { generation : 10, ptk_type : constants.ptk_types.reader }
268
- arg = new_sig_arg_v3 { mk_prev : true, km }
269
- arg.per_team_keys = [ ptk ]
270
- arg.team = { id : prng(16) }
271
- await EncKeyManager.generate {}, esc defer ptk.enc_km
272
- await KeyManager.generate {}, esc defer ptk.sig_km
273
- seed_check ptk
274
- obj = new team_hidden.RotateKey arg
275
-
276
- # Hack - instead of assigning the right reverse sig, assign a twiddled
277
- # signature (with one bit off).
278
- obj._v_reverse_sign = ({inner, outer}, cb) ->
279
- esc = make_esc cb
280
- for k,i in obj.per_team_keys
281
- await obj._sign { sig_eng : k.sig_km.make_sig_eng(), outer }, esc defer sig
282
- twiddle sig
283
- inner.b.k[i].r = sig
284
- outer = obj._generate_outer { inner }
285
- cb null, { inner, outer }
286
-
287
- await obj.generate {}, esc defer ret
288
- await alloc_v3 { km, armored : ret.armored, check_params : _to_check_params(arg) }, defer err
289
- T.assert err?, "got an error"
290
- T.equal err.message, "Signature failed to verify", "right error"
291
- T.assert (err.stack.indexOf("_v_verify_reverse_sig") > 0), "we find a reverse sig in the stack"
292
- cb null
293
-
294
- exports.test_schema_localize = (T, cb) ->
295
- esc = make_esc cb
296
- await gen { T }, esc defer { km, ret, arg }
297
- [err, outer_obj] = sig3.OuterLink.decode ret.raw.outer
298
- T.no_error err
299
-
300
- obj = new team_hidden.RotateKey {}
301
- await obj.decode_inner { json: ret.raw.inner, outer_obj }, esc defer()
302
- localized = obj.get_schema().debug_localize(ret.raw.inner)
303
-
304
- for f in ['ctime', 'entropy', 'merkle_root', 'signer', 'parent_chain_tail', 'client_info', 'team', 'body']
305
- T.assert localized[f]?, "looking for field #{f}"
306
- for f in ['ctime', 'hash_meta', 'seqno']
307
- T.assert localized.merkle_root?[f]?, "looking for field merkle_root.#{f}"
308
- for f in ['eldest_seqno', 'kid', 'uid']
309
- T.assert localized.signer?[f]?, "looking for field signer.#{f}"
310
- for f in ['tail', 'seqno', 'chain_type']
311
- T.assert localized.parent_chain_tail?[f]?, "looking for field parent_chain_tail.#{f}"
312
- for f in ['description', 'version']
313
- T.assert localized.client_info?[f]?, "looking for field client_info.#{f}"
314
- for f in ['team_id', 'is_implicit', 'is_public']
315
- T.assert localized.team?[f]?, "looking for field team.#{f}"
316
- T.assert localized.body?.keys?, "looking for localized.body.keys"
317
- for k in localized.body?.keys ? []
318
- for f in ['appkey_derivation_version', 'seed_check', 'encryption_kid', 'generation', 'reverse_sig', 'signing_kid', 'ptk_type']
319
- T.assert k[f]?, "looking for field body.keys.#{f}"
320
-
321
- cb null
@@ -1,55 +0,0 @@
1
- {prng} = require 'crypto'
2
- {constants} = require '../..'
3
- pgp_utils = require('pgp-utils')
4
- {unix_time} = pgp_utils.util
5
- {KeyManager} = require('kbpgp').kb
6
- {make_esc} = require 'iced-error'
7
-
8
- exports.new_uid = new_uid = () -> Buffer.concat([ prng(15), Buffer.from([0x19])]).toString('hex')
9
- exports.new_sig_id = new_sig_id = () -> Buffer.concat([ prng(32), Buffer.from([0x22])]).toString('hex')
10
- exports.new_username = new_username = () -> "u_" + prng(5).toString('hex')
11
- exports.new_payload_hash = new_payload_hash = () -> prng(32).toString('hex')
12
-
13
- exports.skip = 1
14
-
15
- exports.new_sig_arg = new_sig_arg = ({km}) ->
16
- arg =
17
- user :
18
- local :
19
- uid : new_uid()
20
- username : new_username()
21
- host : "keybase.io"
22
- sig_eng : km.make_sig_eng()
23
- seqno : 0
24
- seq_type : constants.seq_types.PUBLIC
25
- prev : null
26
-
27
- exports.new_sig_arg_v3 = new_sig_arg_v3 = ({km, mk_prev, eldest_seqno, seqno, parent_chain_tail}) ->
28
- arg =
29
- user :
30
- local :
31
- uid : new_uid()
32
- eldest_seqno : eldest_seqno or 1
33
- sig_eng : km.make_sig_eng()
34
- seqno : seqno or 7
35
- prev : (if mk_prev then prng(32) else null)
36
- parent_chain_tail : (parent_chain_tail or {
37
- hash : prng(32)
38
- seqno : 10
39
- chain_type : constants.seq_types.SEMIPRIVATE
40
- })
41
- client :
42
- name : "go darwin"
43
- version : "4.1.0"
44
- ctime : unix_time()
45
- ignore_if_unsupported : false
46
- merkle_root :
47
- ctime : unix_time() - 10
48
- hash_meta : "db951e27435ec22ac266f6880dcedeb6f57cbed28f014a0f774a54b932fcb153"
49
- seqno : 4768147
50
-
51
- exports.new_km_and_sig_arg = (opts, cb) ->
52
- esc = make_esc cb
53
- await KeyManager.generate {}, esc defer km
54
- arg = new_sig_arg { km }
55
- cb null, arg