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/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
-
@@ -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
@@ -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()
@@ -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 &lt;what&gt; &lt;happened&gt; &quot;here&quot;"]
10
- ]
11
- for [inp, outp] in cases
12
- T.equal errsan(inp), outp, "right input/output"
13
- cb null
@@ -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