1package libkb
2
3import (
4	"testing"
5
6	keybase1 "github.com/keybase/client/go/protocol/keybase1"
7	"github.com/stretchr/testify/require"
8)
9
10func importExportLink(tc TestContext, data []byte, uid keybase1.UID) {
11	m := NewMetaContextForTest(tc)
12	linkServer, err := ImportLinkFromServer(m, nil, data, uid)
13	require.NoError(tc.T, err)
14	packed, err := linkServer.Pack()
15	require.NoError(tc.T, err)
16	packedBytes, err := packed.Marshal()
17	require.NoError(tc.T, err)
18	unpacked := NewChainLink(tc.G, nil, linkServer.id)
19	err = unpacked.unpackFromLocalStorage(m, uid, packedBytes)
20	require.NoError(tc.T, err)
21	repacked, err := unpacked.Pack()
22	require.NoError(tc.T, err)
23	repackedBytes, err := repacked.Marshal()
24	require.NoError(tc.T, err)
25	require.True(tc.T, FastByteArrayEq(packedBytes, repackedBytes))
26}
27
28func TestChainLinkImport(t *testing.T) {
29	tc := SetupTest(t, "chainlinkimport", 1)
30	defer tc.Cleanup()
31
32	importExportLink(tc, []byte(linkVer1), linkUID)
33	importExportLink(tc, []byte(linkVer2), linkUID)
34}
35
36var linkUID = keybase1.UID("38566cd216a6c42c33134c5229452c19")
37
38const linkVer1 = `{
39      "seqno": 5,
40      "payload_hash": "d8c707d2f253b2bd50ed75764cf404bbbcc58ccb7246f3d6ae17828dae57f332",
41      "merkle_seqno": 98495,
42      "sig_id": "535c9f11743bc307bc6c82721f36afa519a554dd7ec36a7b7ceb77ac7d82ded70f",
43      "sig_id_short": "U1yfEXQ7wwe8bIJyHzavpRmlVN1-w2p7fOt3",
44      "kid": "0120e5b206afdd8ad09f527e79721e21024237d31db98e6cb4038d5bcc785b68b6130a",
45      "sig": "hKRib2R5hqhkZXRhY2hlZMOpaGFzaF90eXBlCqNrZXnEIwEg5bIGr92K0J9SfnlyHiECQjfTHbmObLQDjVvMeFtothMKp3BheWxvYWTFBDx7ImJvZHkiOnsiZGV2aWNlIjp7ImlkIjoiZGQ4MzBmYmNhZjkyYWMzODUzMDk5M2Q3NjkzNmNlMTgiLCJraWQiOiIwMTIxNDQxZTZkOWJmYTFlYzdmMmM5ZTI0NWIzYzIzZjZmZDk1NDRhOTA1MGI4NmE1NGNmYjgyYzVjZDJjNGIwOTkzMDBhIiwic3RhdHVzIjoxfSwia2V5Ijp7ImVsZGVzdF9raWQiOiIwMTIwNTdiZDg2YTVjMmE4ZTVlMGJhMjI4MDIxYjQ5MjE2ZTM4MTU4Y2UwNGFiYmEwNjlmZTliM2MyMjk4ZDI4M2E2MDBhIiwiaG9zdCI6ImtleWJhc2UuaW8iLCJraWQiOiIwMTIwZTViMjA2YWZkZDhhZDA5ZjUyN2U3OTcyMWUyMTAyNDIzN2QzMWRiOThlNmNiNDAzOGQ1YmNjNzg1YjY4YjYxMzBhIiwidWlkIjoiMzg1NjZjZDIxNmE2YzQyYzMzMTM0YzUyMjk0NTJjMTkiLCJ1c2VybmFtZSI6InRlc3R1c2VyMTg3NCJ9LCJtZXJrbGVfcm9vdCI6eyJjdGltZSI6MTUxOTMxNjAwOSwiaGFzaCI6ImQ3MjMxMGVmMmY3MmZmMDM4YzA5YThmYTdkYjYxZjg4ZDFiNzdkNGMzZGRjMzgxNDI1NDcxOTQ5YzI5OGMyMjJmNzFjZmVlODA5NjYzZjQyNzgxNDRlZmE2ZjU4YWYyOGM3NjNlOWYzNGU0YWM1Mzg0MDRkYTNkMmU5N2YyZmM5IiwiaGFzaF9tZXRhIjoiNjcyMzE3ODU0ZGUwYTgyOGIyMzg5Yzg3MTYxMmZkMDAyMjJmMDM3YmRjYjMzNTFlZTVhNjQzODVmMWUwZmFjYiIsInNlcW5vIjo5ODQ5NH0sInN1YmtleSI6eyJraWQiOiIwMTIxNDQxZTZkOWJmYTFlYzdmMmM5ZTI0NWIzYzIzZjZmZDk1NDRhOTA1MGI4NmE1NGNmYjgyYzVjZDJjNGIwOTkzMDBhIiwicGFyZW50X2tpZCI6IjAxMjBlNWIyMDZhZmRkOGFkMDlmNTI3ZTc5NzIxZTIxMDI0MjM3ZDMxZGI5OGU2Y2I0MDM4ZDViY2M3ODViNjhiNjEzMGEifSwidHlwZSI6InN1YmtleSIsInZlcnNpb24iOjF9LCJjbGllbnQiOnsibmFtZSI6ImtleWJhc2UuaW8gZ28gY2xpZW50IiwidmVyc2lvbiI6IjEuMC40MSJ9LCJjdGltZSI6MTUxOTMxNjAwOSwiZXhwaXJlX2luIjo1MDQ1NzYwMDAsInByZXYiOiIyNzhmOWZhZmE5MTc5YWE0OWY4NTJlZTI5ODhlOTI1NWUwZjMyYmM5MjEyZTNiMTI3OWU5YTMzNmQxYTZmNTYwIiwic2Vxbm8iOjUsInRhZyI6InNpZ25hdHVyZSJ9o3NpZ8RAaFWjav1+kGe8j73ulzmDTJYSPlD2VQsRXUzX2Ch628qdnVzbg24ZuOgwPMKt8RENC9O6VCnPAhSnMfuYO86lAKhzaWdfdHlwZSCkaGFzaIKkdHlwZQildmFsdWXEICg/YL04OBin+W3+BrM9GNwSVHg9fegkZUhrARIc1tSxo3RhZ80CAqd2ZXJzaW9uAQ==",
46      "payload_json": "{\"body\":{\"device\":{\"id\":\"dd830fbcaf92ac38530993d76936ce18\",\"kid\":\"0121441e6d9bfa1ec7f2c9e245b3c23f6fd9544a9050b86a54cfb82c5cd2c4b099300a\",\"status\":1},\"key\":{\"eldest_kid\":\"012057bd86a5c2a8e5e0ba228021b49216e38158ce04abba069fe9b3c2298d283a600a\",\"host\":\"keybase.io\",\"kid\":\"0120e5b206afdd8ad09f527e79721e21024237d31db98e6cb4038d5bcc785b68b6130a\",\"uid\":\"38566cd216a6c42c33134c5229452c19\",\"username\":\"testuser1874\"},\"merkle_root\":{\"ctime\":1519316009,\"hash\":\"d72310ef2f72ff038c09a8fa7db61f88d1b77d4c3ddc381425471949c298c222f71cfee809663f4278144efa6f58af28c763e9f34e4ac538404da3d2e97f2fc9\",\"hash_meta\":\"672317854de0a828b2389c871612fd00222f037bdcb3351ee5a64385f1e0facb\",\"seqno\":98494},\"subkey\":{\"kid\":\"0121441e6d9bfa1ec7f2c9e245b3c23f6fd9544a9050b86a54cfb82c5cd2c4b099300a\",\"parent_kid\":\"0120e5b206afdd8ad09f527e79721e21024237d31db98e6cb4038d5bcc785b68b6130a\"},\"type\":\"subkey\",\"version\":1},\"client\":{\"name\":\"keybase.io go client\",\"version\":\"1.0.41\"},\"ctime\":1519316009,\"expire_in\":504576000,\"prev\":\"278f9fafa9179aa49f852ee2988e9255e0f32bc9212e3b1279e9a336d1a6f560\",\"seqno\":5,\"tag\":\"signature\"}",
47      "sig_type": 1,
48      "sig_version": 1,
49      "ctime": 1519316009,
50      "etime": 2023892009,
51      "rtime": null,
52      "eldest_seqno": 1,
53      "sig_status": 0,
54      "prev": "278f9fafa9179aa49f852ee2988e9255e0f32bc9212e3b1279e9a336d1a6f560",
55      "proof_id": null,
56      "proof_type": null,
57      "proof_text_check": null,
58      "proof_text_full": null,
59      "check_data_json": null,
60      "remote_id": null,
61      "api_url": null,
62      "human_url": null,
63      "proof_state": null,
64      "proof_status": null,
65      "retry_count": null,
66      "hard_fail_count": null,
67      "last_check": null,
68      "last_success": null,
69      "version": null,
70      "fingerprint": "",
71      "si1" : "aFWjav1+kGe8j73ulzmDTJYSPlD2VQsRXUzX2Ch628qdnVzbg24ZuOgwPMKt8RENC9O6VCnPAhSnMfuYO86lAA=="
72    }`
73
74const linkVer2 = `{
75      "seqno": 6,
76      "payload_hash": "63a09ace5f83816e96ae96f9d2869912987ffd62bd3fab6f256fc873f01f4205",
77      "merkle_seqno": 98496,
78      "sig_id": "28335497e87230131e3f1473dd98accd21d4329a420bf970833fa5a60127d1610f",
79      "sig_id_short": "KDNUl-hyMBMePxRz3ZiszSHUMppCC_lwgz-l",
80      "kid": "012057bd86a5c2a8e5e0ba228021b49216e38158ce04abba069fe9b3c2298d283a600a",
81      "sig": "hKRib2R5hqhkZXRhY2hlZMOpaGFzaF90eXBlCqNrZXnEIwEgV72GpcKo5eC6IoAhtJIW44FYzgSrugaf6bPCKY0oOmAKp3BheWxvYWTESpcCBsQg2McH0vJTsr1Q7XV2TPQEu7zFjMtyRvPWrheCja5X8zLEIPqyUjccwO63+bVojYys2Jy6K1c1d5BdO5LuwfloA8MxAwHCo3NpZ8RAg38rHEmvaUJHc3QGMqx8tZCDjxi2z1e7c+9brX1WWbqSHOLXDY+hRsnSkPNv7MfnrOK6hjzww/udG30iQYvEDqhzaWdfdHlwZSCkaGFzaIKkdHlwZQildmFsdWXEIFyjQhLjrdVvb2nv98JI5/nebzxDH17MpGIEZ0dleTJko3RhZ80CAqd2ZXJzaW9uAQ==",
82      "payload_json": "{\"body\":{\"key\":{\"eldest_kid\":\"012057bd86a5c2a8e5e0ba228021b49216e38158ce04abba069fe9b3c2298d283a600a\",\"host\":\"keybase.io\",\"kid\":\"012057bd86a5c2a8e5e0ba228021b49216e38158ce04abba069fe9b3c2298d283a600a\",\"uid\":\"38566cd216a6c42c33134c5229452c19\",\"username\":\"testuser1874\"},\"merkle_root\":{\"ctime\":1519316009,\"hash\":\"b8447dbc02e6e58a69827207c5d7aa09bb77b5cf0129a49e39738c96d9ad757434249d610b2b9099f2c3385c249bdce0fb27b27e661f527e20ad083742000cc3\",\"hash_meta\":\"4eb194235868bbdc2eb2416d4365bc70378ce7edbc132dcc5b37b8c2cc79fa54\",\"seqno\":98495},\"track\":{\"basics\":{\"id_version\":0,\"last_id_change\":1519314299,\"username\":\"followtest92652\"},\"id\":\"6c01fd886268fd6df8185cac265ca819\",\"remote_proofs\":[],\"seq_tail\":null},\"type\":\"track\",\"version\":2},\"client\":{\"name\":\"keybase.io go client\",\"version\":\"1.0.41\"},\"ctime\":1519316042,\"expire_in\":504576000,\"prev\":\"d8c707d2f253b2bd50ed75764cf404bbbcc58ccb7246f3d6ae17828dae57f332\",\"seqno\":6,\"tag\":\"signature\"}",
83      "sig_type": 3,
84      "sig_version": 2,
85      "ctime": 1519316042,
86      "etime": 2023892042,
87      "rtime": null,
88      "eldest_seqno": 1,
89      "sig_status": 0,
90      "prev": "d8c707d2f253b2bd50ed75764cf404bbbcc58ccb7246f3d6ae17828dae57f332",
91      "proof_id": null,
92      "proof_type": null,
93      "proof_text_check": null,
94      "proof_text_full": null,
95      "check_data_json": null,
96      "remote_id": null,
97      "api_url": null,
98      "human_url": null,
99      "proof_state": null,
100      "proof_status": null,
101      "retry_count": null,
102      "hard_fail_count": null,
103      "last_check": null,
104      "last_success": null,
105      "version": null,
106      "fingerprint": "",
107      "si2" : "k8RAg38rHEmvaUJHc3QGMqx8tZCDjxi2z1e7c+9brX1WWbqSHOLXDY+hRsnSkPNv7MfnrOK6hjzww/udG30iQYvEDpcCBsDAAwHCBw=="
108    }`
109