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.
- package/CHANGELOG.md +9 -0
- package/lib/alloc.js +6 -8
- package/lib/base.js +64 -62
- package/lib/main.js +1 -3
- package/lib/parse3.js +21 -6
- package/lib/schema3.js +51 -31
- package/lib/scrapers/twitter.js +13 -13
- package/lib/subkey.js +16 -14
- package/lib/util.js +15 -1
- package/package.json +7 -2
- package/src/alloc.iced +2 -4
- package/src/base.iced +6 -3
- package/src/constants.iced +4 -0
- package/src/main.iced +0 -2
- package/src/parse3.iced +9 -3
- package/src/schema3.iced +20 -7
- package/src/scrapers/twitter.iced +3 -3
- package/src/subkey.iced +6 -4
- package/src/util.iced +11 -0
- package/.travis.yml +0 -10
- package/CONTRIBUTORS.md +0 -5
- package/Makefile +0 -70
- package/lib/wot.js +0 -147
- package/src/wot.iced +0 -96
- package/teams_sample.cson +0 -211
- package/test/files/auth.iced +0 -132
- package/test/files/b64.iced +0 -58
- package/test/files/errsan.iced +0 -13
- package/test/files/expand.iced +0 -128
- package/test/files/generic_social.iced +0 -67
- package/test/files/per_user_key.iced +0 -74
- package/test/files/sibkey.iced +0 -60
- package/test/files/team.iced +0 -118
- package/test/files/team_hidden.iced +0 -321
- package/test/files/util.iced +0 -55
- package/test/files/v2.iced +0 -410
- package/test/files/wallet.iced +0 -110
- package/test/files/wot.iced +0 -99
- package/test/make_esc.iced +0 -48
- package/test/run.iced +0 -1
- package/test_scraper.iced +0 -49
package/teams_sample.cson
DELETED
|
@@ -1,211 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"body": {
|
|
3
|
-
"key": {
|
|
4
|
-
"eldest_kid": "01013ef90b4c4e62121d12a51d18569b57996002c8bdccc9b2740935c9e4a07d20b40a",
|
|
5
|
-
"host": "keybase.io",
|
|
6
|
-
"kid": "0120bd7350508b78d8be24a04789dc88f409c9fe607713dbc685215091b7a37aec130a",
|
|
7
|
-
"uid": "dbb165b7879fe7b1174df73bed0b9500",
|
|
8
|
-
"username": "max"
|
|
9
|
-
},
|
|
10
|
-
"team" : {
|
|
11
|
-
"name" : "acme",
|
|
12
|
-
"id" : "3399881122994004422",
|
|
13
|
-
"members" : {
|
|
14
|
-
"owner" : [ "max", "chris", "cr#10" ],
|
|
15
|
-
"admin" : [ "jack" ],
|
|
16
|
-
"writer" : [ "jinyang" ],
|
|
17
|
-
"reader" : [ "robert#33" ],
|
|
18
|
-
},
|
|
19
|
-
"shared_key" : {
|
|
20
|
-
# Epemeral DH public key
|
|
21
|
-
"E" : "012030034004023059902834028430f",
|
|
22
|
-
"gen" : 1,
|
|
23
|
-
"boxes" : {
|
|
24
|
-
# pack [ version=1, chain-link-of-shared-dh-key, box ]
|
|
25
|
-
"max" : "kwFkxDAqZQTm+aLnRUc7YDZUFGdE95Rj8fXe/I5B0d1Y+aRQVtbkVb96PwNPtxZp0GQPUFU=",
|
|
26
|
-
"chris" : "kwFkxDAqZQTm+aLnRUc7YDZUFGdE95Rj8fXe/I5B0d1Y+aRQVtbkVb96PwNPtxZp0GQPUFU=",
|
|
27
|
-
"cr" : "kwFkxDAqZQTm+aLnRUc7YDZUFGdE95Rj8fXe/I5B0d1Y+aRQVtbkVb96PwNPtxZp0GQPUFU=",
|
|
28
|
-
"jack" : "kwFkxDAqZQTm+aLnRUc7YDZUFGdE95Rj8fXe/I5B0d1Y+aRQVtbkVb96PwNPtxZp0GQPUFU="
|
|
29
|
-
},
|
|
30
|
-
}
|
|
31
|
-
},
|
|
32
|
-
"type": "team.root",
|
|
33
|
-
"version": 1
|
|
34
|
-
},
|
|
35
|
-
"client": {
|
|
36
|
-
"name": "keybase.io go client",
|
|
37
|
-
"version": "1.0.18"
|
|
38
|
-
},
|
|
39
|
-
"ctime": 1488484752,
|
|
40
|
-
"expire_in": 504576000,
|
|
41
|
-
"merkle_root": {
|
|
42
|
-
"ctime": 1488484733,
|
|
43
|
-
"hash": "cfd761cb7bd98478137e9a2e65a4b8e5e7c443348894d76a6f2a68f65c52c73cc69c8b633a4851ecd29671b3390e0a0b03af3d28adc3b18626b8d7cbbd4914bd",
|
|
44
|
-
"seqno": 935116
|
|
45
|
-
},
|
|
46
|
-
"prev": "f9562b567b87d1093431fa134bf1555106c5c32011480f06cf25e17f22b928bb",
|
|
47
|
-
"seqno": 282,
|
|
48
|
-
"tag": "signature"
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
"body": {
|
|
52
|
-
"key": {
|
|
53
|
-
"eldest_kid": "01013ef90b4c4e62121d12a51d18569b57996002c8bdccc9b2740935c9e4a07d20b40a",
|
|
54
|
-
"host": "keybase.io",
|
|
55
|
-
"kid": "0120bd7350508b78d8be24a04789dc88f409c9fe607713dbc685215091b7a37aec130a",
|
|
56
|
-
"uid": "dbb165b7879fe7b1174df73bed0b9500",
|
|
57
|
-
"username": "max"
|
|
58
|
-
},
|
|
59
|
-
"team" : {
|
|
60
|
-
"name" : "acme.board",
|
|
61
|
-
"id" : "3399881122eeff4422",
|
|
62
|
-
"members" : {
|
|
63
|
-
"admin" : [ "jack" ],
|
|
64
|
-
"writer" : [ "jinyang" ]
|
|
65
|
-
}
|
|
66
|
-
},
|
|
67
|
-
"type": "team.new_subteam",
|
|
68
|
-
"version": 1
|
|
69
|
-
},
|
|
70
|
-
"client": {
|
|
71
|
-
"name": "keybase.io go client",
|
|
72
|
-
"version": "1.0.18"
|
|
73
|
-
},
|
|
74
|
-
"ctime": 1488484752,
|
|
75
|
-
"expire_in": 504576000,
|
|
76
|
-
"merkle_root": {
|
|
77
|
-
"ctime": 1488484733,
|
|
78
|
-
"hash": "cfd761cb7bd98478137e9a2e65a4b8e5e7c443348894d76a6f2a68f65c52c73cc69c8b633a4851ecd29671b3390e0a0b03af3d28adc3b18626b8d7cbbd4914bd",
|
|
79
|
-
"seqno": 935116
|
|
80
|
-
},
|
|
81
|
-
"prev": "f9562b567b87d1093431fa134bf1555106c5c32011480f06cf25e17f22b928bb",
|
|
82
|
-
"seqno": 282,
|
|
83
|
-
"tag": "signature"
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
"body": {
|
|
87
|
-
"key": {
|
|
88
|
-
"eldest_kid": "01013ef90b4c4e62121d12a51d18569b57996002c8bdccc9b2740935c9e4a07d20b40a",
|
|
89
|
-
"host": "keybase.io",
|
|
90
|
-
"kid": "0120bd7350508b78d8be24a04789dc88f409c9fe607713dbc685215091b7a37aec130a",
|
|
91
|
-
"uid": "dbb165b7879fe7b1174df73bed0b9500",
|
|
92
|
-
"username": "max"
|
|
93
|
-
},
|
|
94
|
-
"team" : {
|
|
95
|
-
"id" : "3399881122eeff4422",
|
|
96
|
-
"members" : {
|
|
97
|
-
"none" : [ "jinyang" ]
|
|
98
|
-
},
|
|
99
|
-
"shared_key" : {
|
|
100
|
-
# Epemeral DH public key
|
|
101
|
-
"E" : "012030034004023059902834028430f",
|
|
102
|
-
"gen" : 2,
|
|
103
|
-
"boxes" : {
|
|
104
|
-
# pack [ version, chain-link-of-shared-dh-key, box ]
|
|
105
|
-
"max" : "kwFkxDAqZQTm+aLnRUc7YDZUFGdE95Rj8fXe/I5B0d1Y+aRQVtbkVb96PwNPtxZp0GQPUFU=",
|
|
106
|
-
"chris" : "kwFkxDAqZQTm+aLnRUc7YDZUFGdE95Rj8fXe/I5B0d1Y+aRQVtbkVb96PwNPtxZp0GQPUFU=",
|
|
107
|
-
"cr" : "kwFkxDAqZQTm+aLnRUc7YDZUFGdE95Rj8fXe/I5B0d1Y+aRQVtbkVb96PwNPtxZp0GQPUFU=",
|
|
108
|
-
"jack" : "kwFkxDAqZQTm+aLnRUc7YDZUFGdE95Rj8fXe/I5B0d1Y+aRQVtbkVb96PwNPtxZp0GQPUFU="
|
|
109
|
-
},
|
|
110
|
-
"prev" : "kwFkxDAqZQTm+aLnRUc7YDZUFGdE95Rj8fXe/I5B0d1Y+aRQVtbkVb96PwNPtxZp0GQPUFU="
|
|
111
|
-
},
|
|
112
|
-
"type": "team.change_membership",
|
|
113
|
-
"version": 1
|
|
114
|
-
},
|
|
115
|
-
"client": {
|
|
116
|
-
"name": "keybase.io go client",
|
|
117
|
-
"version": "1.0.18"
|
|
118
|
-
},
|
|
119
|
-
"ctime": 1488484752,
|
|
120
|
-
"expire_in": 504576000,
|
|
121
|
-
"merkle_root": {
|
|
122
|
-
"ctime": 1488484733,
|
|
123
|
-
"hash": "cfd761cb7bd98478137e9a2e65a4b8e5e7c443348894d76a6f2a68f65c52c73cc69c8b633a4851ecd29671b3390e0a0b03af3d28adc3b18626b8d7cbbd4914bd",
|
|
124
|
-
"seqno": 935116
|
|
125
|
-
},
|
|
126
|
-
"prev": "f9562b567b87d1093431fa134bf1555106c5c32011480f06cf25e17f22b928bb",
|
|
127
|
-
"seqno": 282,
|
|
128
|
-
"tag": "signature"
|
|
129
|
-
},
|
|
130
|
-
{
|
|
131
|
-
"body": {
|
|
132
|
-
"key": {
|
|
133
|
-
"eldest_kid": "01013ef90b4c4e62121d12a51d18569b57996002c8bdccc9b2740935c9e4a07d20b40a",
|
|
134
|
-
"host": "keybase.io",
|
|
135
|
-
"kid": "0120bd7350508b78d8be24a04789dc88f409c9fe607713dbc685215091b7a37aec130a",
|
|
136
|
-
"uid": "dbb165b7879fe7b1174df73bed0b9500",
|
|
137
|
-
"username": "max"
|
|
138
|
-
},
|
|
139
|
-
"team" : {
|
|
140
|
-
"id" : "3399881122eeff4422",
|
|
141
|
-
"shared_key" : {
|
|
142
|
-
# Epemeral DH public key
|
|
143
|
-
"E" : "012030034004023059902834028430f",
|
|
144
|
-
"gen" : 3,
|
|
145
|
-
"boxes" : {
|
|
146
|
-
# pack [ version, chain-link-of-shared-dh-key, box ]
|
|
147
|
-
"max" : "kwFkxDAqZQTm+aLnRUc7YDZUFGdE95Rj8fXe/I5B0d1Y+aRQVtbkVb96PwNPtxZp0GQPUFU=",
|
|
148
|
-
"chris" : "kwFkxDAqZQTm+aLnRUc7YDZUFGdE95Rj8fXe/I5B0d1Y+aRQVtbkVb96PwNPtxZp0GQPUFU=",
|
|
149
|
-
"cr" : "kwFkxDAqZQTm+aLnRUc7YDZUFGdE95Rj8fXe/I5B0d1Y+aRQVtbkVb96PwNPtxZp0GQPUFU=",
|
|
150
|
-
"jack" : "kwFkxDAqZQTm+aLnRUc7YDZUFGdE95Rj8fXe/I5B0d1Y+aRQVtbkVb96PwNPtxZp0GQPUFU="
|
|
151
|
-
},
|
|
152
|
-
"prev" : "kwFkxDAqZQTm+aLnRUc7YDZUFGdE95Rj8fXe/I5B0d1Y+aRQVtbkVb96PwNPtxZp0GQPUFU="
|
|
153
|
-
},
|
|
154
|
-
"type": "team.rotate",
|
|
155
|
-
"version": 1
|
|
156
|
-
},
|
|
157
|
-
"client": {
|
|
158
|
-
"name": "keybase.io go client",
|
|
159
|
-
"version": "1.0.18"
|
|
160
|
-
},
|
|
161
|
-
"ctime": 1488484752,
|
|
162
|
-
"expire_in": 504576000,
|
|
163
|
-
"merkle_root": {
|
|
164
|
-
"ctime": 1488484733,
|
|
165
|
-
"hash": "cfd761cb7bd98478137e9a2e65a4b8e5e7c443348894d76a6f2a68f65c52c73cc69c8b633a4851ecd29671b3390e0a0b03af3d28adc3b18626b8d7cbbd4914bd",
|
|
166
|
-
"seqno": 935116
|
|
167
|
-
},
|
|
168
|
-
"prev": "f9562b567b87d1093431fa134bf1555106c5c32011480f06cf25e17f22b928bb",
|
|
169
|
-
"seqno": 282,
|
|
170
|
-
"tag": "signature"
|
|
171
|
-
},
|
|
172
|
-
{
|
|
173
|
-
"body": {
|
|
174
|
-
"key": {
|
|
175
|
-
"eldest_kid": "01013ef90b4c4e62121d12a51d18569b57996002c8bdccc9b2740935c9e4a07d20b40a",
|
|
176
|
-
"host": "keybase.io",
|
|
177
|
-
"kid": "0120bd7350508b78d8be24a04789dc88f409c9fe607713dbc685215091b7a37aec130a",
|
|
178
|
-
"uid": "dbb165b7879fe7b1174df73bed0b9500",
|
|
179
|
-
"username": "max"
|
|
180
|
-
},
|
|
181
|
-
"team" : {
|
|
182
|
-
"id" : "3399881122eeff4422",
|
|
183
|
-
"index" : {
|
|
184
|
-
"root" : "44aabb343344555",
|
|
185
|
-
"subteams" : {
|
|
186
|
-
# Map of Team ID -> [ tail seqno, tail hash ] pairs
|
|
187
|
-
"1123499eee334" : [ 10, "3349955000293945" ],
|
|
188
|
-
"3344993440059" : [ 30, "3349950029945902" ],
|
|
189
|
-
"4499928834552" : [ 40, "3399488592993949" ]
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
},
|
|
193
|
-
"type": "team.index",
|
|
194
|
-
"version": 1
|
|
195
|
-
},
|
|
196
|
-
"client": {
|
|
197
|
-
"name": "keybase.io go client",
|
|
198
|
-
"version": "1.0.18"
|
|
199
|
-
},
|
|
200
|
-
"ctime": 1488484752,
|
|
201
|
-
"expire_in": 504576000,
|
|
202
|
-
"merkle_root": {
|
|
203
|
-
"ctime": 1488484733,
|
|
204
|
-
"hash": "cfd761cb7bd98478137e9a2e65a4b8e5e7c443348894d76a6f2a68f65c52c73cc69c8b633a4851ecd29671b3390e0a0b03af3d28adc3b18626b8d7cbbd4914bd",
|
|
205
|
-
"seqno": 935116
|
|
206
|
-
},
|
|
207
|
-
"prev": "f9562b567b87d1093431fa134bf1555106c5c32011480f06cf25e17f22b928bb",
|
|
208
|
-
"seqno": 282,
|
|
209
|
-
"tag": "signature"
|
|
210
|
-
}
|
|
211
|
-
|
package/test/files/auth.iced
DELETED
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
{KeyManager} = require('kbpgp').kb
|
|
3
|
-
{prng} = require 'crypto'
|
|
4
|
-
{errors,alloc,Auth} = require '../../'
|
|
5
|
-
|
|
6
|
-
new_uid = () -> prng(16).toString('hex')
|
|
7
|
-
new_username = () -> "u_" + prng(5).toString('hex')
|
|
8
|
-
new_user = () -> {uid : new_uid(), username : new_username() }
|
|
9
|
-
new_host = () -> prng(4).toString('hex') + ".foo.com"
|
|
10
|
-
new_session = () -> "sess-" + prng(16).toString('hex')
|
|
11
|
-
new_nonce = () -> "nonce-" + prng(16).toString('hex')
|
|
12
|
-
new_email = () -> "foo" + prng(6).toString('hex') + "@foo.com"
|
|
13
|
-
|
|
14
|
-
test_auth = (T, {gen_hook, verify_hook, err_hook}, cb) ->
|
|
15
|
-
await KeyManager.generate {}, T.esc(defer(km), cb)
|
|
16
|
-
user = new_user()
|
|
17
|
-
host = new_host()
|
|
18
|
-
sig_eng = km.make_sig_eng()
|
|
19
|
-
nonce = new_nonce()
|
|
20
|
-
session = new_session()
|
|
21
|
-
garg = { user : local : user, host, sig_eng, nonce, session }
|
|
22
|
-
gen_hook garg if gen_hook?
|
|
23
|
-
auth = new Auth garg
|
|
24
|
-
await auth.generate T.esc(defer(sig), cb)
|
|
25
|
-
varg = { armored : sig.armored, skip_ids : true, make_ids : true }
|
|
26
|
-
carg = { sig_eng, host, user : local : user }
|
|
27
|
-
verify_hook varg, carg if verify_hook?
|
|
28
|
-
verifier = alloc 'auth', carg
|
|
29
|
-
await verifier.verify varg, defer err
|
|
30
|
-
if err_hook?
|
|
31
|
-
err_hook err
|
|
32
|
-
else
|
|
33
|
-
T.no_error err, "no error expected"
|
|
34
|
-
cb()
|
|
35
|
-
|
|
36
|
-
exports.test_auth_success = (T,cb) ->
|
|
37
|
-
test_auth T, {}, cb
|
|
38
|
-
exports.test_auth_success_uid_only = (T,cb) ->
|
|
39
|
-
test_auth T, { gen_hook : (garg) -> delete garg.user.local.username }, cb
|
|
40
|
-
exports.test_auth_success_username_only = (T,cb) ->
|
|
41
|
-
test_auth T, { gen_hook : (garg) -> delete garg.user.local.uid }, cb
|
|
42
|
-
|
|
43
|
-
exports.test_auth_fail_no_user = (T,cb) ->
|
|
44
|
-
test_auth T, {
|
|
45
|
-
gen_hook : (garg) ->
|
|
46
|
-
delete garg.user.local.uid
|
|
47
|
-
delete garg.user.local.username
|
|
48
|
-
err_hook : (err) ->
|
|
49
|
-
T.assert err?, "errored out on no user"
|
|
50
|
-
}, cb
|
|
51
|
-
|
|
52
|
-
exports.test_auth_success_email_only = (T,cb) ->
|
|
53
|
-
email = new_email()
|
|
54
|
-
test_auth T, {
|
|
55
|
-
gen_hook : (garg) ->
|
|
56
|
-
delete garg.user.local.uid
|
|
57
|
-
delete garg.user.local.username
|
|
58
|
-
garg.user.local.email = email
|
|
59
|
-
verify_hook : (varg, carg) ->
|
|
60
|
-
carg.user.local.emails = [ email ]
|
|
61
|
-
}, cb
|
|
62
|
-
|
|
63
|
-
exports.test_auth_success_email_only_upper_case = (T,cb) ->
|
|
64
|
-
email = new_email()
|
|
65
|
-
test_auth T, {
|
|
66
|
-
gen_hook : (garg) ->
|
|
67
|
-
delete garg.user.local.uid
|
|
68
|
-
delete garg.user.local.username
|
|
69
|
-
garg.user.local.email = email.toUpperCase()
|
|
70
|
-
verify_hook : (varg, carg) ->
|
|
71
|
-
carg.user.local.emails = [ email ]
|
|
72
|
-
}, cb
|
|
73
|
-
|
|
74
|
-
exports.test_auth_failure_wrong_email = (T,cb) ->
|
|
75
|
-
email = new_email()
|
|
76
|
-
test_auth T, {
|
|
77
|
-
gen_hook : (garg) ->
|
|
78
|
-
garg.user.local.email = email
|
|
79
|
-
verify_hook : (varg, carg) ->
|
|
80
|
-
carg.user.local.emails = [ "x" + email ]
|
|
81
|
-
err_hook : (err) ->
|
|
82
|
-
T.assert err?, "errored out on bad email"
|
|
83
|
-
}, cb
|
|
84
|
-
|
|
85
|
-
exports.test_auth_failure_wrong_uid = (T,cb) ->
|
|
86
|
-
test_auth T, {
|
|
87
|
-
verify_hook : (varg, carg) ->
|
|
88
|
-
carg.user.local.uid = new_uid()
|
|
89
|
-
err_hook : (err) ->
|
|
90
|
-
T.assert err?, "errored out on bad uid"
|
|
91
|
-
}, cb
|
|
92
|
-
|
|
93
|
-
exports.test_auth_failure_wrong_username = (T,cb) ->
|
|
94
|
-
test_auth T, {
|
|
95
|
-
verify_hook : (varg, carg) ->
|
|
96
|
-
carg.user.local.username = new_username()
|
|
97
|
-
err_hook : (err) ->
|
|
98
|
-
T.assert err?, "errored out on bad uid"
|
|
99
|
-
}, cb
|
|
100
|
-
|
|
101
|
-
exports.test_auth_failure_wrong_host = (T,cb) ->
|
|
102
|
-
test_auth T, {
|
|
103
|
-
verify_hook : (varg, carg) ->
|
|
104
|
-
carg.host = new_host()
|
|
105
|
-
err_hook : (err) ->
|
|
106
|
-
T.assert err?, "errored out on bad host"
|
|
107
|
-
}, cb
|
|
108
|
-
|
|
109
|
-
exports.test_auth_failure_no_host = (T,cb) ->
|
|
110
|
-
test_auth T, {
|
|
111
|
-
gen_hook : (garg, carg) ->
|
|
112
|
-
delete garg.host
|
|
113
|
-
err_hook : (err) ->
|
|
114
|
-
T.assert err?, "errored out on no host"
|
|
115
|
-
}, cb
|
|
116
|
-
|
|
117
|
-
exports.test_bad_ctime = (T,cb) ->
|
|
118
|
-
now = 100000000
|
|
119
|
-
ctime = now + 800
|
|
120
|
-
ccs = 400
|
|
121
|
-
test_auth T, {
|
|
122
|
-
gen_hook : (garg, carg) ->
|
|
123
|
-
garg.ctime = ctime
|
|
124
|
-
garg.now = now
|
|
125
|
-
verify_hook : (varg, carg) ->
|
|
126
|
-
varg.ctime = ctime
|
|
127
|
-
varg.now = now
|
|
128
|
-
varg.critical_clock_skew_secs = ccs
|
|
129
|
-
err_hook : (err) ->
|
|
130
|
-
T.assert err?, "errored out bad ctime"
|
|
131
|
-
T.assert (err instanceof errors.ClockSkewError), "the right kind of error"
|
|
132
|
-
}, cb
|
package/test/files/b64.iced
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
{b64find} = require '../..'
|
|
3
|
-
|
|
4
|
-
exports.test_find = (T,cb) ->
|
|
5
|
-
corpus = """
|
|
6
|
-
g6Rib2R5hqhkZXRhY2hlZMOpaGFzaF90eXBlCqNrZXnEIwEgMnetRTUoE40n8GY8OMnSM4qkVTdJ5bXG
|
|
7
|
-
oLpTdjWgNqcKp3BheWxvYWTFAvd7ImJvZHkiOnsia2V5Ijp7ImVsZGVzdF9raWQiOiIwMTIwMzI3N2Fk
|
|
8
|
-
NDUzNTI4MTM4ZDI3ZjA2NjNjMzhjOWQyMzM4YWE0NTUzNzQ5ZTViNWM2YTBiYTUzNzYzNWEwMzZhNzBh
|
|
9
|
-
IiwiaG9zdCI6ImtleWJhc2UuaW8iLCJraWQiOiIwMTIwMzI3N2FkNDUzNTI4MTM4ZDI3ZjA2NjNjMzhj
|
|
10
|
-
OWQyMzM4YWE0NTUzNzQ5ZTViNWM2YTBiYTUzNzYzNWEwMzZhNzBhIiwidWlkIjoiNmQ0YTY1NWVhMTQ1
|
|
11
|
-
YTQwNzI2YjY5YjhmMTllNjI5MTkiLCJ1c2VybmFtZSI6Imphc29uY29vbWJzY2VvIn0sInNlcnZpY2Ui
|
|
12
|
-
OnsibmFtZSI6ImdpdGh1YiIsInVzZXJuYW1lIjoicHVibGljc3RhcnR1cCJ9LCJ0eXBlIjoid2ViX3Nl
|
|
13
|
-
cnZpY2VfYmluZGluZyIsInZlcnNpb24iOjF9LCJjbGllbnQiOnsibmFtZSI6ImtleWJhc2UuaW8gZ28g
|
|
14
|
-
Y2xpZW50IiwidmVyc2lvbiI6IjEuMC43In0sImN0aW1lIjoxNDUxNTQyMjM3LCJleHBpcmVfaW4iOjUw
|
|
15
|
-
NDU3NjAwMCwibWVya2xlX3Jvb3QiOnsiY3RpbWUiOjE0NTE1NDIyMjcsImhhc2giOiJmZjU4ZDc5MmMz
|
|
16
|
-
YjgzMjVlOWZiMzNiNmNkNzA4NTBhMmE4MGQ0NWI0ODVhZDNlNWZlMTIxYWY4OGQ0OGJkMzg2OTcyNWIy
|
|
17
|
-
MTQ4ZGEyNzFkMTVhM2RhYzFjYzlmNTdlNWIyNzM4ZDMzMmFhMTc2NWNlNWQ0ZWY4MDVjNDk1MGY5NCIs
|
|
18
|
-
InNlcW5vIjozNDA2MzV9LCJwcmV2IjoiNTc3YmE0N2Y5YjE5ODI2NmI2NmM1MTE3ZTY2ZmQ1OTgwMGE2
|
|
19
|
-
MzU4NGQ3NjRlOThkYzIxN2IyOWNiY2M4OGI1MiIsInNlcW5vIjoxNiwidGFnIjoic2lnbmF0dXJlIn2j
|
|
20
|
-
c2lnxEC6tw5+PA7o7Yplpg9dQv+XLYPvbXlf3JcXK0P4D05HkC1NxU5GjPY6+haOB5nx25SKCwWRkaHb
|
|
21
|
-
DesQ+W+qH0IOqHNpZ190eXBlIKN0YWfNAgKndmVyc2lvbgE=
|
|
22
|
-
"""
|
|
23
|
-
needle = Buffer.from "g6Rib2R5hqhkZXRhY2hlZMOpaGFzaF90eXBlCqNrZXnEIwEgMnetRTUoE40n8GY8OMnSM4qkVTdJ5bXGoLpTdjWgNqcKp3BheWxvYWTFAvd7ImJvZHkiOnsia2V5Ijp7ImVsZGVzdF9raWQiOiIwMTIwMzI3N2FkNDUzNTI4MTM4ZDI3ZjA2NjNjMzhjOWQyMzM4YWE0NTUzNzQ5ZTViNWM2YTBiYTUzNzYzNWEwMzZhNzBhIiwiaG9zdCI6ImtleWJhc2UuaW8iLCJraWQiOiIwMTIwMzI3N2FkNDUzNTI4MTM4ZDI3ZjA2NjNjMzhjOWQyMzM4YWE0NTUzNzQ5ZTViNWM2YTBiYTUzNzYzNWEwMzZhNzBhIiwidWlkIjoiNmQ0YTY1NWVhMTQ1YTQwNzI2YjY5YjhmMTllNjI5MTkiLCJ1c2VybmFtZSI6Imphc29uY29vbWJzY2VvIn0sInNlcnZpY2UiOnsibmFtZSI6ImdpdGh1YiIsInVzZXJuYW1lIjoicHVibGljc3RhcnR1cCJ9LCJ0eXBlIjoid2ViX3NlcnZpY2VfYmluZGluZyIsInZlcnNpb24iOjF9LCJjbGllbnQiOnsibmFtZSI6ImtleWJhc2UuaW8gZ28gY2xpZW50IiwidmVyc2lvbiI6IjEuMC43In0sImN0aW1lIjoxNDUxNTQyMjM3LCJleHBpcmVfaW4iOjUwNDU3NjAwMCwibWVya2xlX3Jvb3QiOnsiY3RpbWUiOjE0NTE1NDIyMjcsImhhc2giOiJmZjU4ZDc5MmMzYjgzMjVlOWZiMzNiNmNkNzA4NTBhMmE4MGQ0NWI0ODVhZDNlNWZlMTIxYWY4OGQ0OGJkMzg2OTcyNWIyMTQ4ZGEyNzFkMTVhM2RhYzFjYzlmNTdlNWIyNzM4ZDMzMmFhMTc2NWNlNWQ0ZWY4MDVjNDk1MGY5NCIsInNlcW5vIjozNDA2MzV9LCJwcmV2IjoiNTc3YmE0N2Y5YjE5ODI2NmI2NmM1MTE3ZTY2ZmQ1OTgwMGE2MzU4NGQ3NjRlOThkYzIxN2IyOWNiY2M4OGI1MiIsInNlcW5vIjoxNiwidGFnIjoic2lnbmF0dXJlIn2jc2lnxEC6tw5+PA7o7Yplpg9dQv+XLYPvbXlf3JcXK0P4D05HkC1NxU5GjPY6+haOB5nx25SKCwWRkaHbDesQ+W+qH0IOqHNpZ190eXBlIKN0YWfNAgKndmVyc2lvbgE=", 'base64'
|
|
24
|
-
|
|
25
|
-
T.assert b64find corpus, needle
|
|
26
|
-
T.assert not b64find("ABB" + corpus, needle)
|
|
27
|
-
T.assert b64find("\n\nABBCCC\n\nCCCCC\n\n#{corpus}\nEEEEE===\nFFFFF==\n", needle)
|
|
28
|
-
T.assert b64find(corpus.split(/\n/).join(""), needle)
|
|
29
|
-
cb()
|
|
30
|
-
|
|
31
|
-
exports.test_find_pgp = (T,cb) ->
|
|
32
|
-
corpus = """
|
|
33
|
-
-----BEGIN PGP MESSAGE-----
|
|
34
|
-
Version: Keybase OpenPGP v2.0.49
|
|
35
|
-
Comment: https://keybase.io/crypto
|
|
36
|
-
|
|
37
|
-
yMIcAnicrVJbSBVBGD6mFp4KpAsYpeVGmBds5uzuzOyWVARGRCgVQmieZndndb3s
|
|
38
|
-
OZ49x2snhKyewkoQKyULvIRBSZlBWRlKRAWhIQT2kBBGYNGLQnabNXsIemxgGOb/
|
|
39
|
-
v+/j+37+kZWxHm/M3K0rPVeaytWY58PnIp6CU2f6GgQtYNQJaoNQzhYeVmEwJ+wv
|
|
40
|
-
twxBFQAEUFQMGeiYQAMrWEJENCjUqQgBk2QFAqCZWNIRQRhhXSeSggGmBgAy8Eka
|
|
41
|
-
8UkmoEKWYFp2CQsFQ5Yd5rJUwYpENKIZQFNEQk0oQcmECOqSKSNDQgbBiCLGiaUB
|
|
42
|
-
x2Vwcxp1WLYV4DX+8S/Y+wf+P/uO/JYDoomRZiDCj4ipD2pAIwRTk1EmQsUFOixk
|
|
43
|
-
00rG0ZW0VkFCNEvgpWpLZ+5UF1slVrg0ov0ND1M9EKyIOO51WeG6oFuuYZp/UcCv
|
|
44
|
-
WbbBB8h51SzkWAFbUCFH6mHLVYCSDHkiWZGzBFYbtELMb7kIGSMC+MkSgiFWzSWx
|
|
45
|
-
omOe0pQID8uzA1kHDBo+AxlA4RkJZkhihOmYt6hOoahRHYnUxycDfLIb02FVdkBQ
|
|
46
|
-
fdwmLeGSjlVi03AkxITok8dFcZ4Yr2dp/BJ3sTzehMQ/65ZUvOynk2bOX+zanfJl
|
|
47
|
-
ABbseN4/mFN8eDy5fmzU3DY6czUu2jv7eOr614M7Og507mm2jlzaGW1/X1FzrO91
|
|
48
|
-
auWd/NOdqRMDn/YbnxMmycfkRy/Uoe3qypnBTXnCZPGb3NnuvP5n+24O96W/u922
|
|
49
|
-
t6r/FdrSaGfbG7viaWL0bEbOibnCxrTkDxcC3pbxzQUPy2bCRdG5ppqc3jUnM27c
|
|
50
|
-
PbC8rGNqyNz1tO12QkqmZq/2Pk0f3rW0qTBmgnWo6743rrrfdjmwPe5HWtU3+eyh
|
|
51
|
-
B6eP52WywtaRGdadv2HF0bzcObm1OTZyLfH6+R4VJM0P1o9MrX2Ycvzl+umW6YH2
|
|
52
|
-
t/fGWtJ3tm0VfgH+Czll
|
|
53
|
-
=MpBu
|
|
54
|
-
-----END PGP MESSAGE-----
|
|
55
|
-
"""
|
|
56
|
-
needle = Buffer.from "yMIcAnicrVJbSBVBGD6mFp4KpAsYpeVGmBds5uzuzOyWVARGRCgVQmieZndndb3sOZ49x2snhKyewkoQKyULvIRBSZlBWRlKRAWhIQT2kBBGYNGLQnabNXsIemxgGOb/v+/j+37+kZWxHm/M3K0rPVeaytWY58PnIp6CU2f6GgQtYNQJaoNQzhYeVmEwJ+wvtwxBFQAEUFQMGeiYQAMrWEJENCjUqQgBk2QFAqCZWNIRQRhhXSeSggGmBgAy8Eka8UkmoEKWYFp2CQsFQ5Yd5rJUwYpENKIZQFNEQk0oQcmECOqSKSNDQgbBiCLGiaUBx2Vwcxp1WLYV4DX+8S/Y+wf+P/uO/JYDoomRZiDCj4ipD2pAIwRTk1EmQsUFOixk00rG0ZW0VkFCNEvgpWpLZ+5UF1slVrg0ov0ND1M9EKyIOO51WeG6oFuuYZp/UcCvWbbBB8h51SzkWAFbUCFH6mHLVYCSDHkiWZGzBFYbtELMb7kIGSMC+MkSgiFWzSWxomOe0pQID8uzA1kHDBo+AxlA4RkJZkhihOmYt6hOoahRHYnUxycDfLIb02FVdkBQfdwmLeGSjlVi03AkxITok8dFcZ4Yr2dp/BJ3sTzehMQ/65ZUvOynk2bOX+zanfJlABbseN4/mFN8eDy5fmzU3DY6czUu2jv7eOr614M7Og507mm2jlzaGW1/X1FzrO91auWd/NOdqRMDn/YbnxMmycfkRy/Uoe3qypnBTXnCZPGb3NnuvP5n+24O96W/u922t6r/FdrSaGfbG7viaWL0bEbOibnCxrTkDxcC3pbxzQUPy2bCRdG5ppqc3jUnM27cPbC8rGNqyNz1tO12QkqmZq/2Pk0f3rW0qTBmgnWo6743rrrfdjmwPe5HWtU3+eyhB6eP52WywtaRGdadv2HF0bzcObm1OTZyLfH6+R4VJM0P1o9MrX2Ycvzl+umW6YH2t/fGWtJ3tm0VfgH+Czll", "base64"
|
|
57
|
-
T.assert b64find corpus, needle
|
|
58
|
-
cb()
|
package/test/files/errsan.iced
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
{errsan} = require '../../lib/errors'
|
|
3
|
-
|
|
4
|
-
exports.errsan = (T,cb) ->
|
|
5
|
-
cases = [
|
|
6
|
-
[ "alice bob charlie" , "alice bob charlie" ]
|
|
7
|
-
[10, 10]
|
|
8
|
-
["aabbccee1122", "aabbccee1122"]
|
|
9
|
-
['just hanging out <what> <happened> "here"', "just hanging out <what> <happened> "here""]
|
|
10
|
-
]
|
|
11
|
-
for [inp, outp] in cases
|
|
12
|
-
T.equal errsan(inp), outp, "right input/output"
|
|
13
|
-
cb null
|
package/test/files/expand.iced
DELETED
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
{prng} = require 'crypto'
|
|
2
|
-
{expand_json,stub_json,hmac_obj} = require '../../lib/expand'
|
|
3
|
-
triplesec = require('triplesec')
|
|
4
|
-
pgp_utils = require('pgp-utils')
|
|
5
|
-
{katch,json_stringify_sorted} = pgp_utils.util
|
|
6
|
-
{KeyManager} = require('kbpgp').kb
|
|
7
|
-
{prng} = require 'crypto'
|
|
8
|
-
{constants,errors,alloc,Cryptocurrency} = require '../../'
|
|
9
|
-
{createHash} = require 'crypto'
|
|
10
|
-
{make_ids} = require '../../lib/base'
|
|
11
|
-
{make_esc} = require 'iced-error'
|
|
12
|
-
{errors} = require '../../lib/errors'
|
|
13
|
-
|
|
14
|
-
new_uid = () -> prng(15).toString('hex') + "19"
|
|
15
|
-
new_username = () -> "u_" + prng(5).toString('hex')
|
|
16
|
-
|
|
17
|
-
twiddle_hex = (s) ->
|
|
18
|
-
b = Buffer.from(s, 'hex')
|
|
19
|
-
b[0] ^= 1
|
|
20
|
-
return b.toString('hex')
|
|
21
|
-
|
|
22
|
-
make_expansions = (v) ->
|
|
23
|
-
ret = {}
|
|
24
|
-
for obj in v
|
|
25
|
-
key = prng(16)
|
|
26
|
-
hmac = hmac_obj({obj, key}).toString('hex')
|
|
27
|
-
ret[hmac] = { obj, key : key.toString('hex') }
|
|
28
|
-
return ret
|
|
29
|
-
|
|
30
|
-
exports.happy = (T,cb) ->
|
|
31
|
-
expansion_vals = [ ["a","b","c"], 300 ]
|
|
32
|
-
expansions = make_expansions expansion_vals
|
|
33
|
-
h = Object.keys(expansions)
|
|
34
|
-
|
|
35
|
-
json = {
|
|
36
|
-
a : 10
|
|
37
|
-
b : "hi"
|
|
38
|
-
c : d : e : h[0]
|
|
39
|
-
f : [1,2,3]
|
|
40
|
-
g : [
|
|
41
|
-
{ h : h[1] }
|
|
42
|
-
]
|
|
43
|
-
i : h
|
|
44
|
-
}
|
|
45
|
-
res = expand_json { json, expansions }
|
|
46
|
-
json.c.d.e = expansion_vals[0]
|
|
47
|
-
json.g[0].h = expansion_vals[1]
|
|
48
|
-
json.i[0] = expansion_vals[0]
|
|
49
|
-
json.i[1] = expansion_vals[1]
|
|
50
|
-
T.equal json, res, "worked"
|
|
51
|
-
cb null
|
|
52
|
-
|
|
53
|
-
exports.sad1 = (T,cb) ->
|
|
54
|
-
expansion_vals = [ ["a","b","c"], 300 ]
|
|
55
|
-
expansions = make_expansions expansion_vals
|
|
56
|
-
h = Object.keys(expansions)
|
|
57
|
-
|
|
58
|
-
tests = [
|
|
59
|
-
{ expansions : { "a" : ["10"] }, json : 10, err : "bad hash" }
|
|
60
|
-
{ expansions : {}, json : 10, err : "hashcheck failure" }
|
|
61
|
-
{ expansions, json : 10, err : "Did not find expansion for" }
|
|
62
|
-
{ expansions : make_expansions(["💩"]), json : 10, err : "non-ASCII" }
|
|
63
|
-
{ expansions : {}, json : 10, err : "hashcheck failure" }
|
|
64
|
-
{ expansions : {}, json : 10, err : "bad hmac key" }
|
|
65
|
-
]
|
|
66
|
-
expansion = expansions[h[0]]
|
|
67
|
-
tests[1].expansions[h[0]] = { obj : ["a","b"], key : expansion.key }
|
|
68
|
-
tests[4].expansions[h[0]] = { obj : expansion.obj, key : twiddle_hex(expansion.key) }
|
|
69
|
-
tests[5].expansions[h[0]] = { obj : expansion.obj, key : expansion.key[0...12] }
|
|
70
|
-
|
|
71
|
-
for t in tests
|
|
72
|
-
err = null
|
|
73
|
-
try
|
|
74
|
-
expand_json t
|
|
75
|
-
catch e
|
|
76
|
-
err = e
|
|
77
|
-
T.assert err?, "error for case #{JSON.stringify t}"
|
|
78
|
-
T.assert err.toString().indexOf(t.err) >= 0, "found #{t.err}"
|
|
79
|
-
|
|
80
|
-
cb null
|
|
81
|
-
|
|
82
|
-
exports.check_unstub_expand = (T,cb) ->
|
|
83
|
-
json = {
|
|
84
|
-
a : b : c : { z : 1, y : 2, w : 3}
|
|
85
|
-
d : e : f : true
|
|
86
|
-
g : h : false
|
|
87
|
-
}
|
|
88
|
-
orig = JSON.parse JSON.stringify json
|
|
89
|
-
expansions = {}
|
|
90
|
-
stub_json { json, expansions, path : "a.b.c" }
|
|
91
|
-
stub_json { json, expansions, path : "d.e"}
|
|
92
|
-
|
|
93
|
-
expanded = expand_json { expansions, json }
|
|
94
|
-
T.equal orig, expanded, "got the right value out"
|
|
95
|
-
|
|
96
|
-
cb null
|
|
97
|
-
|
|
98
|
-
exports.stubbed_chainlink = (T,cb) ->
|
|
99
|
-
esc = make_esc cb, "@generate"
|
|
100
|
-
await KeyManager.generate {}, esc defer km
|
|
101
|
-
arg =
|
|
102
|
-
user :
|
|
103
|
-
local :
|
|
104
|
-
username : new_username()
|
|
105
|
-
uid : new_uid()
|
|
106
|
-
host : "keybase.io"
|
|
107
|
-
sig_eng : km.make_sig_eng()
|
|
108
|
-
seq_type : constants.seq_types.PUBLIC
|
|
109
|
-
cryptocurrency :
|
|
110
|
-
address: "1BjgMvwVkpmmJ5HFGZ3L3H1G6fcKLNGT5h"
|
|
111
|
-
type: "bitcoin"
|
|
112
|
-
seqno : 1
|
|
113
|
-
prev : null
|
|
114
|
-
stub_paths : [ "body.cryptocurrency" ]
|
|
115
|
-
btc = new Cryptocurrency arg
|
|
116
|
-
await btc.generate_v2 esc defer out
|
|
117
|
-
|
|
118
|
-
verifier = alloc out.inner.obj.body.type, arg
|
|
119
|
-
varg = { armored : out.armored, skip_ids : true, make_ids : true, inner : out.inner.str, expansions : out.expansions}
|
|
120
|
-
await verifier.verify_v2 varg, esc defer()
|
|
121
|
-
for k,v of out.expansions
|
|
122
|
-
v.obj.foo = "bar"
|
|
123
|
-
out.expansions[k] = v
|
|
124
|
-
await verifier.verify_v2 varg, defer err
|
|
125
|
-
T.assert err?, "failed to destub"
|
|
126
|
-
T.assert (err instanceof errors.ExpansionError), "right kind of error"
|
|
127
|
-
T.assert (err.toString().indexOf("hashcheck failure in stub import") >= 0), "right error message"
|
|
128
|
-
cb null
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
{alloc,GenericSocialBinding,constants} = require '../../'
|
|
2
|
-
{EncKeyManager,KeyManager} = require('kbpgp').kb
|
|
3
|
-
{make_esc} = require 'iced-error'
|
|
4
|
-
{new_sig_arg} = require './util'
|
|
5
|
-
|
|
6
|
-
generic_name_regexp = /^[a-z0-9_-]{2,15}$/
|
|
7
|
-
|
|
8
|
-
exports.test_generic_social_proof = (T, cb) ->
|
|
9
|
-
esc = make_esc cb, "test_generic_social_proof"
|
|
10
|
-
await KeyManager.generate {}, esc defer device
|
|
11
|
-
arg = new_sig_arg { km : device }
|
|
12
|
-
arg.user.remote = "al1ce"
|
|
13
|
-
arg.remote_service = "api.crypto_pals.social"
|
|
14
|
-
arg.name_regexp = generic_name_regexp
|
|
15
|
-
obj = new GenericSocialBinding arg
|
|
16
|
-
await obj.generate esc defer out
|
|
17
|
-
|
|
18
|
-
obj2 = alloc "web_service_binding.generic_social", arg
|
|
19
|
-
err = obj2.check_inputs()
|
|
20
|
-
T.assert not(err?), "expects check_inputs not to return error, returned: #{err?.toString()}"
|
|
21
|
-
varg = { armored : out.armored, skip_ids : true, make_ids : true, inner : out.inner.str }
|
|
22
|
-
await obj2.verify varg, esc defer err
|
|
23
|
-
|
|
24
|
-
T.equal obj2.service_obj(), { name : arg.remote_service, username : arg.user.remote }
|
|
25
|
-
T.equal obj2.proof_type(), constants.proof_types.generic_social, "got right proof_type"
|
|
26
|
-
T.equal obj2.service_name(), arg.remote_service, "got right service_name"
|
|
27
|
-
T.equal obj2.single_occupancy(), false, "got right single_occupancy"
|
|
28
|
-
|
|
29
|
-
cb null
|
|
30
|
-
|
|
31
|
-
exports.test_generic_social_inputs = (T, cb) ->
|
|
32
|
-
assert_err = (err, str) ->
|
|
33
|
-
err_str = err?.toString()
|
|
34
|
-
T.assert err_str?.indexOf(str) isnt -1, "Expecting error to contain '#{str}', got: #{err_str}"
|
|
35
|
-
|
|
36
|
-
esc = make_esc cb, "test_generic_social_proof"
|
|
37
|
-
await KeyManager.generate {}, esc defer device
|
|
38
|
-
arg = new_sig_arg { km : device }
|
|
39
|
-
arg.user.remote = "b0b"
|
|
40
|
-
arg.remote_service = "cryptopals"
|
|
41
|
-
arg.name_regexp = generic_name_regexp
|
|
42
|
-
obj = new GenericSocialBinding arg
|
|
43
|
-
err = obj.check_inputs()
|
|
44
|
-
assert_err err, "invalid remote_service"
|
|
45
|
-
|
|
46
|
-
arg.remote_service = "cryptopals.club"
|
|
47
|
-
arg.user.remote = "HelloBobby$$$"
|
|
48
|
-
obj = new GenericSocialBinding arg
|
|
49
|
-
err = obj.check_inputs()
|
|
50
|
-
assert_err err, "Bad remote_username given"
|
|
51
|
-
|
|
52
|
-
arg = new_sig_arg { km : device }
|
|
53
|
-
arg.user.remote = "b0b"
|
|
54
|
-
arg.remote_service = "cryptopals.club"
|
|
55
|
-
obj = new GenericSocialBinding arg
|
|
56
|
-
err = obj.check_inputs()
|
|
57
|
-
assert_err err, "No name_regexp given"
|
|
58
|
-
|
|
59
|
-
# Invalid regexp
|
|
60
|
-
arg.name_regexp = "[1-.]{1,5}"
|
|
61
|
-
obj = new GenericSocialBinding arg
|
|
62
|
-
err = obj.check_inputs()
|
|
63
|
-
assert_err err, "No name_regexp given"
|
|
64
|
-
|
|
65
|
-
cb null
|
|
66
|
-
|
|
67
|
-
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
{EncKeyManager,KeyManager} = require('kbpgp').kb
|
|
2
|
-
{make_esc} = require 'iced-error'
|
|
3
|
-
{alloc,PerUserKey} = require '../../'
|
|
4
|
-
{prng} = require 'crypto'
|
|
5
|
-
{new_sig_arg} = require './util'
|
|
6
|
-
pgp_utils = require('pgp-utils')
|
|
7
|
-
{json_stringify_sorted} = pgp_utils.util
|
|
8
|
-
|
|
9
|
-
exports.test_per_user_key = (T,cb) ->
|
|
10
|
-
esc = make_esc cb, "test_per_user_key"
|
|
11
|
-
await EncKeyManager.generate {}, esc defer ekm
|
|
12
|
-
await KeyManager.generate {}, esc defer skm
|
|
13
|
-
await KeyManager.generate {}, esc defer pkm
|
|
14
|
-
arg = new_sig_arg { km : pkm }
|
|
15
|
-
arg.kms =
|
|
16
|
-
encryption : ekm
|
|
17
|
-
signing : skm
|
|
18
|
-
arg.generation = 1
|
|
19
|
-
pf = new PerUserKey arg
|
|
20
|
-
await pf.generate_v2 esc defer out
|
|
21
|
-
pf2 = alloc out.inner.obj.body.type, arg
|
|
22
|
-
varg = { armored : out.armored, skip_ids : true, make_ids : true, inner : out.inner.str }
|
|
23
|
-
await pf2.verify_v2 varg, esc defer()
|
|
24
|
-
cb()
|
|
25
|
-
|
|
26
|
-
round_trip_with_corrupted_reverse_sig = ({T, corrupt, skip_reverse_sig}, cb) ->
|
|
27
|
-
esc = make_esc cb, "round_trip_with_corrupted_reverse_sig"
|
|
28
|
-
await KeyManager.generate {}, esc defer elder
|
|
29
|
-
await KeyManager.generate {}, esc defer skm
|
|
30
|
-
await EncKeyManager.generate {}, esc defer ekm
|
|
31
|
-
arg = new_sig_arg { km : elder }
|
|
32
|
-
arg.kms =
|
|
33
|
-
encryption : ekm
|
|
34
|
-
signing : skm
|
|
35
|
-
arg.generation = 3
|
|
36
|
-
obj = new PerUserKey arg
|
|
37
|
-
|
|
38
|
-
obj._v_generate = (opts, cb) ->
|
|
39
|
-
esc = make_esc cb, "_v_generate"
|
|
40
|
-
x = { reverse_sig: null }
|
|
41
|
-
@set_new_key_section x
|
|
42
|
-
x.signing_kid = @get_new_km().get_ekid().toString('hex')
|
|
43
|
-
eng = @get_new_km().make_sig_eng()
|
|
44
|
-
await @generate_json { version : opts.version }, esc defer msg
|
|
45
|
-
msg2 = JSON.parse msg
|
|
46
|
-
msg2.foo = "bar" if corrupt
|
|
47
|
-
msg = json_stringify_sorted(msg2)
|
|
48
|
-
await eng.box msg, esc defer { armored, type }
|
|
49
|
-
x.reverse_sig = armored unless skip_reverse_sig
|
|
50
|
-
cb null
|
|
51
|
-
|
|
52
|
-
await obj.generate esc defer out
|
|
53
|
-
typ = out.inner.obj.body.type
|
|
54
|
-
obj2 = alloc typ, arg
|
|
55
|
-
varg = { armored : out.armored, skip_ids : true, make_ids : true, inner : out.inner.str }
|
|
56
|
-
await obj2.verify varg, defer err
|
|
57
|
-
if corrupt
|
|
58
|
-
T.assert err?, "got an error back"
|
|
59
|
-
T.assert (err.message.indexOf('Reverse sig json mismatch') >= 0), "found right error message"
|
|
60
|
-
else if skip_reverse_sig
|
|
61
|
-
T.assert err?, "got an error back"
|
|
62
|
-
T.assert (err.message.indexOf("Need a reverse sig, but didn't find one") >= 0), "found right error message"
|
|
63
|
-
else
|
|
64
|
-
T.no_error err, "in the success case, don't expect an error"
|
|
65
|
-
cb null
|
|
66
|
-
|
|
67
|
-
exports.test_corruption_mechanism = (T,cb) ->
|
|
68
|
-
round_trip_with_corrupted_reverse_sig { T, corrupt : false }, cb
|
|
69
|
-
|
|
70
|
-
exports.test_reverse_sig_failure = (T,cb) ->
|
|
71
|
-
round_trip_with_corrupted_reverse_sig { T, corrupt : true }, cb
|
|
72
|
-
|
|
73
|
-
exports.test_reverse_sig_failure = (T,cb) ->
|
|
74
|
-
round_trip_with_corrupted_reverse_sig { T, skip_reverse_sig : true }, cb
|