@imagina-build/ias-cli 0.0.0 → 0.1.1

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.
Files changed (78) hide show
  1. package/README.md +406 -2
  2. package/bin/ias.mjs +19 -0
  3. package/package.json +31 -12
  4. package/schema/ias.schema.json +535 -0
  5. package/shared/credentials/cms.mjs +105 -0
  6. package/shared/credentials/index.mjs +354 -0
  7. package/shared/credentials/plist.mjs +93 -0
  8. package/shared/vault/approvers-vectors.mjs +188 -0
  9. package/shared/vault/approvers.mjs +234 -0
  10. package/shared/vault/index.mjs +583 -0
  11. package/shared/vault/plaintext.mjs +115 -0
  12. package/shared/vault/test-vectors/ias-vault-2/approvers.json +2122 -0
  13. package/shared/vault/test-vectors/ias-vault-2/keys.json +43 -0
  14. package/shared/vault/test-vectors/ias-vault-2/malformed.json +1739 -0
  15. package/shared/vault/test-vectors/ias-vault-2/plaintexts.json +149 -0
  16. package/shared/vault/test-vectors/ias-vault-2/runners.json +580 -0
  17. package/shared/vault/test-vectors/ias-vault-2/sealed.json +567 -0
  18. package/shared/vault/test-vectors/ias-vault-2/tampered.json +989 -0
  19. package/shared/vault/test-vectors/keys.json +31 -0
  20. package/shared/vault/test-vectors/malformed.json +1341 -0
  21. package/shared/vault/test-vectors/sealed.json +384 -0
  22. package/shared/vault/test-vectors/tampered.json +610 -0
  23. package/shared/vault/vectors.mjs +720 -0
  24. package/src/cli.mjs +231 -0
  25. package/src/commands/apps/index.mjs +36 -0
  26. package/src/commands/auth/index.mjs +141 -0
  27. package/src/commands/build/follow.mjs +168 -0
  28. package/src/commands/build/index.mjs +110 -0
  29. package/src/commands/build/local.mjs +69 -0
  30. package/src/commands/build/profile.mjs +50 -0
  31. package/src/commands/build/source.mjs +71 -0
  32. package/src/commands/builds/index.mjs +148 -0
  33. package/src/commands/credentials/index.mjs +256 -0
  34. package/src/commands/credentials/material.mjs +159 -0
  35. package/src/commands/devices/asc.mjs +116 -0
  36. package/src/commands/devices/index.mjs +65 -0
  37. package/src/commands/devices/sync.mjs +223 -0
  38. package/src/commands/dist/index.mjs +108 -0
  39. package/src/commands/doctor/index.mjs +158 -0
  40. package/src/commands/env/index.mjs +163 -0
  41. package/src/commands/github/index.mjs +53 -0
  42. package/src/commands/init/index.mjs +224 -0
  43. package/src/commands/migrate/credentials.mjs +213 -0
  44. package/src/commands/migrate/eas-cli.mjs +153 -0
  45. package/src/commands/migrate/index.mjs +73 -0
  46. package/src/commands/migrate/numbers.mjs +85 -0
  47. package/src/commands/migrate/profiles.mjs +174 -0
  48. package/src/commands/migrate/project.mjs +249 -0
  49. package/src/commands/migrate/survey.mjs +205 -0
  50. package/src/commands/migrate/variables.mjs +183 -0
  51. package/src/commands/push/index.mjs +334 -0
  52. package/src/commands/sdk/index.mjs +81 -0
  53. package/src/commands/submit/index.mjs +85 -0
  54. package/src/commands/update/index.mjs +526 -0
  55. package/src/commands/usage/index.mjs +57 -0
  56. package/src/commands/vault/approvers.mjs +129 -0
  57. package/src/commands/vault/index.mjs +159 -0
  58. package/src/commands/vault/runners.mjs +115 -0
  59. package/src/commands/vault/team.mjs +111 -0
  60. package/src/commands/version/index.mjs +71 -0
  61. package/src/commands/webhooks/index.mjs +104 -0
  62. package/src/commands/workflows/index.mjs +88 -0
  63. package/src/config.mjs +261 -0
  64. package/src/dist.mjs +99 -0
  65. package/src/errors.mjs +158 -0
  66. package/src/http.mjs +45 -0
  67. package/src/legacy.mjs +73 -0
  68. package/src/manage.mjs +120 -0
  69. package/src/ota.mjs +122 -0
  70. package/src/output.mjs +36 -0
  71. package/src/process.mjs +45 -0
  72. package/src/schema.mjs +131 -0
  73. package/src/sdk.mjs +114 -0
  74. package/src/secret-input.mjs +27 -0
  75. package/src/secrets.mjs +37 -0
  76. package/src/shared.mjs +5 -0
  77. package/src/team-vault.mjs +152 -0
  78. package/src/token-store.mjs +93 -0
@@ -0,0 +1,567 @@
1
+ {
2
+ "format": "ias-vault-2",
3
+ "description": "Envelopes made with injected randomness and signed by the team (Ed25519 is deterministic): an implementation must produce the same envelope from the same inputs, signedText is what the signature covers, and every key gets the outcome in opens when it checks the signature against the team key. changes are a grant (rewrap) and a revocation on top of the first case, each signed again.",
4
+ "warning": "Test vectors: the keys are public. Never use them for anything else.",
5
+ "server": {
6
+ "formats": [
7
+ "ias-vault-2"
8
+ ],
9
+ "requiredKids": [
10
+ "gY6AuqT5ADs7vK-fmj9UEb5Gf6ZSdOLxT1mBWwD5hA0"
11
+ ],
12
+ "signingKid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y"
13
+ },
14
+ "cases": [
15
+ {
16
+ "name": "keystore-for-recovery-and-runner-a",
17
+ "description": "An upload keystore of jscheduler (fake), sealed for the recovery key and runner-a and signed by the team.",
18
+ "plaintext": "eyJ0eXBlIjoiYW5kcm9pZF91cGxvYWRfa2V5c3RvcmUiLCJhcHBsaWNhdGlvbiI6ImpzY2hlZHVsZXIiLCJrZXlzdG9yZSI6ImJtOTBJR0VnY21WaGJDQnJaWGx6ZEc5eVpUb2dNTzcxZm1UYWtodFlzWDhSV01nNDNJdkZGa2hxU3NURDdLWGFfVEplcXdzIiwic3RvcmVfcGFzc3dvcmQiOiJub3QtYS1yZWFsLXN0b3JlLXBhc3N3b3JkIiwia2V5X2FsaWFzIjoidXBsb2FkIiwia2V5X3Bhc3N3b3JkIjoibm90LWEtcmVhbC1rZXktcGFzc3dvcmQifQ",
19
+ "content": {
20
+ "type": "android_upload_keystore",
21
+ "application": "jscheduler",
22
+ "keystore": "bm90IGEgcmVhbCBrZXlzdG9yZTogMO71fmTakhtYsX8RWMg43IvFFkhqSsTD7KXa_TJeqws",
23
+ "store_password": "not-a-real-store-password",
24
+ "key_alias": "upload",
25
+ "key_password": "not-a-real-key-password"
26
+ },
27
+ "credential": {
28
+ "id": "00000000-0000-4000-8000-00000000e001",
29
+ "type": "android_upload_keystore",
30
+ "version": 1
31
+ },
32
+ "recipients": [
33
+ "recovery",
34
+ "runner-a"
35
+ ],
36
+ "signer": "team",
37
+ "random": {
38
+ "dataKey": "NgXKEJKqfP4eazWKdhiNupzUVuei4eqfpdWzzL8TZwk",
39
+ "dataIv": "0XaZsTpE_agQ_g89",
40
+ "wraps": [
41
+ {
42
+ "ephemeralPrivateKey": "3Gh4ZFfR4w4YfM7FMZQDwhFvu4JDGavmE1nnmCWLusg",
43
+ "iv": "KvzUT7AfW9mgBjjq"
44
+ },
45
+ {
46
+ "ephemeralPrivateKey": "nWi5vRUZdP8rZ5wGwFPp8OLsYoRcSKiOpf51Z-H_qlE",
47
+ "iv": "a3oFvAfEAGJRkhAv"
48
+ }
49
+ ]
50
+ },
51
+ "aad": "ias-vault-2\ndata\n00000000-0000-4000-8000-00000000e001\nandroid_upload_keystore\n1",
52
+ "wraps": [
53
+ {
54
+ "kid": "gY6AuqT5ADs7vK-fmj9UEb5Gf6ZSdOLxT1mBWwD5hA0",
55
+ "ephemeralPrivateKey": "3Gh4ZFfR4w4YfM7FMZQDwhFvu4JDGavmE1nnmCWLusg",
56
+ "iv": "KvzUT7AfW9mgBjjq",
57
+ "sharedSecret": "mvzLLqmRD5lFg0NBqt65I4TEw8QsFg_sJujI7_Z1aRo",
58
+ "hkdfSalt": "f2gDGPbAdYQ9rJX5zaFwDjfCswRnjPGZN0iHNh4ifBXPjzQvJ5h52E83Gp_lCrSAum0jFnlLGQGMvH_lMrWxEg",
59
+ "wrapKey": "NCDVb5-v81zFiqAkie3U3AeARDKLMLTMJzm4FI_LyNQ",
60
+ "aad": "ias-vault-2\nwrap\n00000000-0000-4000-8000-00000000e001\nandroid_upload_keystore\n1\ngY6AuqT5ADs7vK-fmj9UEb5Gf6ZSdOLxT1mBWwD5hA0"
61
+ },
62
+ {
63
+ "kid": "OHeCFPD25tPd2DRaYj34dS7DLtio-1gUq_-NYsYmqNk",
64
+ "ephemeralPrivateKey": "nWi5vRUZdP8rZ5wGwFPp8OLsYoRcSKiOpf51Z-H_qlE",
65
+ "iv": "a3oFvAfEAGJRkhAv",
66
+ "sharedSecret": "3PaAX2G6Hhtsh2PmaLJAly_eUO0uC302TjQMqibYqy8",
67
+ "hkdfSalt": "7N6B-jhSAl4t6tyP8fR7g81VIEwoTKvAKOUNRAPgcVADxjW5UZFcS-hrXHMY2-UsEVynLntQ7YajZXlZ2OERSA",
68
+ "wrapKey": "qTHuBWhfFVXTZCB-UQFW72pSLMucFI0ZhG_NAY3o-6c",
69
+ "aad": "ias-vault-2\nwrap\n00000000-0000-4000-8000-00000000e001\nandroid_upload_keystore\n1\nOHeCFPD25tPd2DRaYj34dS7DLtio-1gUq_-NYsYmqNk"
70
+ }
71
+ ],
72
+ "signedText": "ias-vault-2\nsignature\nkj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y\n00000000-0000-4000-8000-00000000e001\nandroid_upload_keystore\n1\n0XaZsTpE_agQ_g89\ntM6ENIdfVPy_YbVYoQ3C1YJTaYYwCrgMEros4BApV6mRDDyxIsFdmXiwH0r5wyK8P-LbbOMIJPM4izcB6ZSyhPwe6NeUP2wQxdKoMVf08fVvFR9ijdHbplTePWBE6myGyY0KefsmVH513JU5AtZ9FpYPH2sSlO_Jc-4oBBeoAoOAmvSff_hk7zp_7rwH4tEFsZWdQlwhV17sbYlb8H0XQV2m3SU1FjIYE_aYHUxEfq02DaY-Hh-MndhciUabSiorhrmhAFa0ZP1SiFtpEGI2iOduIRFZOrpDQeyVaaOULWIwTa155_2txN_t1V2mL5qJvhG7jr5N1J6_DQFjAdGI_9TYQYWdnPptw_w9LdQ\n2\ngY6AuqT5ADs7vK-fmj9UEb5Gf6ZSdOLxT1mBWwD5hA0\nf2gDGPbAdYQ9rJX5zaFwDjfCswRnjPGZN0iHNh4ifBU\nKvzUT7AfW9mgBjjq\nxeIt4rLJj3AIrN7KChMOdNOQS_ZZ5q4mcWbQeBn_3FXysWuT8zjwDhaT-c5VU3fd\nOHeCFPD25tPd2DRaYj34dS7DLtio-1gUq_-NYsYmqNk\n7N6B-jhSAl4t6tyP8fR7g81VIEwoTKvAKOUNRAPgcVA\na3oFvAfEAGJRkhAv\n4DTOiTVkxA-YeV1uSdtsvBg3jAfroWp_18xfZ_H0OJYo6lpE0Hc5fWryZ7WUaQt5",
73
+ "envelope": {
74
+ "format": "ias-vault-2",
75
+ "credential": {
76
+ "id": "00000000-0000-4000-8000-00000000e001",
77
+ "type": "android_upload_keystore",
78
+ "version": 1
79
+ },
80
+ "data": {
81
+ "iv": "0XaZsTpE_agQ_g89",
82
+ "ct": "tM6ENIdfVPy_YbVYoQ3C1YJTaYYwCrgMEros4BApV6mRDDyxIsFdmXiwH0r5wyK8P-LbbOMIJPM4izcB6ZSyhPwe6NeUP2wQxdKoMVf08fVvFR9ijdHbplTePWBE6myGyY0KefsmVH513JU5AtZ9FpYPH2sSlO_Jc-4oBBeoAoOAmvSff_hk7zp_7rwH4tEFsZWdQlwhV17sbYlb8H0XQV2m3SU1FjIYE_aYHUxEfq02DaY-Hh-MndhciUabSiorhrmhAFa0ZP1SiFtpEGI2iOduIRFZOrpDQeyVaaOULWIwTa155_2txN_t1V2mL5qJvhG7jr5N1J6_DQFjAdGI_9TYQYWdnPptw_w9LdQ"
83
+ },
84
+ "recipients": [
85
+ {
86
+ "kid": "gY6AuqT5ADs7vK-fmj9UEb5Gf6ZSdOLxT1mBWwD5hA0",
87
+ "epk": "f2gDGPbAdYQ9rJX5zaFwDjfCswRnjPGZN0iHNh4ifBU",
88
+ "iv": "KvzUT7AfW9mgBjjq",
89
+ "wk": "xeIt4rLJj3AIrN7KChMOdNOQS_ZZ5q4mcWbQeBn_3FXysWuT8zjwDhaT-c5VU3fd"
90
+ },
91
+ {
92
+ "kid": "OHeCFPD25tPd2DRaYj34dS7DLtio-1gUq_-NYsYmqNk",
93
+ "epk": "7N6B-jhSAl4t6tyP8fR7g81VIEwoTKvAKOUNRAPgcVA",
94
+ "iv": "a3oFvAfEAGJRkhAv",
95
+ "wk": "4DTOiTVkxA-YeV1uSdtsvBg3jAfroWp_18xfZ_H0OJYo6lpE0Hc5fWryZ7WUaQt5"
96
+ }
97
+ ],
98
+ "signature": {
99
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
100
+ "sig": "dK2mO7LMMxGnQnj9DEldMNEOHJfYmtekHod-bQZXX9JTD-Ftulri6Ssiq9qo1v9UW8bLNqCnB6b6kljngq22Bg"
101
+ }
102
+ },
103
+ "digest": "8zOC-bdcd8avwCDlMq2hExm8S5AG5dKvkxNcY8NPcVA",
104
+ "opens": {
105
+ "recovery": {
106
+ "plaintext": "eyJ0eXBlIjoiYW5kcm9pZF91cGxvYWRfa2V5c3RvcmUiLCJhcHBsaWNhdGlvbiI6ImpzY2hlZHVsZXIiLCJrZXlzdG9yZSI6ImJtOTBJR0VnY21WaGJDQnJaWGx6ZEc5eVpUb2dNTzcxZm1UYWtodFlzWDhSV01nNDNJdkZGa2hxU3NURDdLWGFfVEplcXdzIiwic3RvcmVfcGFzc3dvcmQiOiJub3QtYS1yZWFsLXN0b3JlLXBhc3N3b3JkIiwia2V5X2FsaWFzIjoidXBsb2FkIiwia2V5X3Bhc3N3b3JkIjoibm90LWEtcmVhbC1rZXktcGFzc3dvcmQifQ"
107
+ },
108
+ "runner-a": {
109
+ "plaintext": "eyJ0eXBlIjoiYW5kcm9pZF91cGxvYWRfa2V5c3RvcmUiLCJhcHBsaWNhdGlvbiI6ImpzY2hlZHVsZXIiLCJrZXlzdG9yZSI6ImJtOTBJR0VnY21WaGJDQnJaWGx6ZEc5eVpUb2dNTzcxZm1UYWtodFlzWDhSV01nNDNJdkZGa2hxU3NURDdLWGFfVEplcXdzIiwic3RvcmVfcGFzc3dvcmQiOiJub3QtYS1yZWFsLXN0b3JlLXBhc3N3b3JkIiwia2V5X2FsaWFzIjoidXBsb2FkIiwia2V5X3Bhc3N3b3JkIjoibm90LWEtcmVhbC1rZXktcGFzc3dvcmQifQ"
110
+ },
111
+ "runner-b": {
112
+ "error": "not-a-recipient"
113
+ },
114
+ "outsider": {
115
+ "error": "not-a-recipient"
116
+ }
117
+ }
118
+ },
119
+ {
120
+ "name": "variable-for-recovery",
121
+ "description": "A secret environment variable (fake), sealed for the recovery key only, as ias env set does while there are no runners.",
122
+ "plaintext": "eyJ0eXBlIjoiZW52aXJvbm1lbnRfdmFyaWFibGUiLCJhcHBsaWNhdGlvbiI6ImpzY2hlZHVsZXIiLCJlbnZpcm9ubWVudCI6InByb2R1Y3Rpb24iLCJuYW1lIjoiU0VOVFJZX0FVVEhfVE9LRU4iLCJ2YWx1ZSI6Im5vdC1hLXJlYWwtc2VudHJ5LXRva2VuIn0",
123
+ "content": {
124
+ "type": "environment_variable",
125
+ "application": "jscheduler",
126
+ "environment": "production",
127
+ "name": "SENTRY_AUTH_TOKEN",
128
+ "value": "not-a-real-sentry-token"
129
+ },
130
+ "credential": {
131
+ "id": "00000000-0000-4000-8000-00000000f002",
132
+ "type": "environment_variable",
133
+ "version": 1
134
+ },
135
+ "recipients": [
136
+ "recovery"
137
+ ],
138
+ "signer": "team",
139
+ "random": {
140
+ "dataKey": "yIPrGgWRAEhxYAo9ENUbkTQRfDCjR9isqiRKEY-vD8I",
141
+ "dataIv": "Kt2FBzf1mo-HPR8R",
142
+ "wraps": [
143
+ {
144
+ "ephemeralPrivateKey": "t7jf_BnHi89MuTHwGLmk9VG2xMy3N1zREXeufcQxQFY",
145
+ "iv": "EMKN_NYs3Y-fMXHi"
146
+ }
147
+ ]
148
+ },
149
+ "aad": "ias-vault-2\ndata\n00000000-0000-4000-8000-00000000f002\nenvironment_variable\n1",
150
+ "wraps": [
151
+ {
152
+ "kid": "gY6AuqT5ADs7vK-fmj9UEb5Gf6ZSdOLxT1mBWwD5hA0",
153
+ "ephemeralPrivateKey": "t7jf_BnHi89MuTHwGLmk9VG2xMy3N1zREXeufcQxQFY",
154
+ "iv": "EMKN_NYs3Y-fMXHi",
155
+ "sharedSecret": "aw2hC-JELSFpmnhdw4Kclv_i7Q7TkfzL3hlCAqK0aRA",
156
+ "hkdfSalt": "3uORhI4XyCVVJX1QGH9eoxwfYwLGpfYDuKDT_TuC9WXPjzQvJ5h52E83Gp_lCrSAum0jFnlLGQGMvH_lMrWxEg",
157
+ "wrapKey": "MOQ7X8hFt5XqYm0qWN34-X9E_A-FK9ikUOSdPSyhgh0",
158
+ "aad": "ias-vault-2\nwrap\n00000000-0000-4000-8000-00000000f002\nenvironment_variable\n1\ngY6AuqT5ADs7vK-fmj9UEb5Gf6ZSdOLxT1mBWwD5hA0"
159
+ }
160
+ ],
161
+ "signedText": "ias-vault-2\nsignature\nkj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y\n00000000-0000-4000-8000-00000000f002\nenvironment_variable\n1\nKt2FBzf1mo-HPR8R\nQfKnJwaWlu94G9FGJ0qcwQ1Meox-_9r0cR9q-n1B7Hdp6FSyRshn9wK88GEMt5E9775fc-vnqVUydBmIP9zKVF_zAxy5MAZYf8RiKfy5H5FwfZGJudrr3qQP7a6N2ittbcFNQfTojjU9m6kpp2-3NNXqkRjrsM-Zd7MSqfPjqECixprbuJF9K4CDBkmlb9gOcVcG0OOlEUyNcqAkVw_tta6h\n1\ngY6AuqT5ADs7vK-fmj9UEb5Gf6ZSdOLxT1mBWwD5hA0\n3uORhI4XyCVVJX1QGH9eoxwfYwLGpfYDuKDT_TuC9WU\nEMKN_NYs3Y-fMXHi\n695M5l-bNTViDyU7-CdxJgNalJTTeEoCGT0rQr1MMgpL-afsH6yYkaoAMumKX5gl",
162
+ "envelope": {
163
+ "format": "ias-vault-2",
164
+ "credential": {
165
+ "id": "00000000-0000-4000-8000-00000000f002",
166
+ "type": "environment_variable",
167
+ "version": 1
168
+ },
169
+ "data": {
170
+ "iv": "Kt2FBzf1mo-HPR8R",
171
+ "ct": "QfKnJwaWlu94G9FGJ0qcwQ1Meox-_9r0cR9q-n1B7Hdp6FSyRshn9wK88GEMt5E9775fc-vnqVUydBmIP9zKVF_zAxy5MAZYf8RiKfy5H5FwfZGJudrr3qQP7a6N2ittbcFNQfTojjU9m6kpp2-3NNXqkRjrsM-Zd7MSqfPjqECixprbuJF9K4CDBkmlb9gOcVcG0OOlEUyNcqAkVw_tta6h"
172
+ },
173
+ "recipients": [
174
+ {
175
+ "kid": "gY6AuqT5ADs7vK-fmj9UEb5Gf6ZSdOLxT1mBWwD5hA0",
176
+ "epk": "3uORhI4XyCVVJX1QGH9eoxwfYwLGpfYDuKDT_TuC9WU",
177
+ "iv": "EMKN_NYs3Y-fMXHi",
178
+ "wk": "695M5l-bNTViDyU7-CdxJgNalJTTeEoCGT0rQr1MMgpL-afsH6yYkaoAMumKX5gl"
179
+ }
180
+ ],
181
+ "signature": {
182
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
183
+ "sig": "lrBp5Xj6e-E4x2A19ShhCzgRHONfpt1NuO3-8dzvTOVAUNRidM1LKf34YPsxJLHqCHwbfPXVxVfyvYWa1wxZAA"
184
+ }
185
+ },
186
+ "digest": "aMELdvlYvrc6nuXlh8mMyMxCMm3uR4wIGR2CXZ1H6dc",
187
+ "opens": {
188
+ "recovery": {
189
+ "plaintext": "eyJ0eXBlIjoiZW52aXJvbm1lbnRfdmFyaWFibGUiLCJhcHBsaWNhdGlvbiI6ImpzY2hlZHVsZXIiLCJlbnZpcm9ubWVudCI6InByb2R1Y3Rpb24iLCJuYW1lIjoiU0VOVFJZX0FVVEhfVE9LRU4iLCJ2YWx1ZSI6Im5vdC1hLXJlYWwtc2VudHJ5LXRva2VuIn0"
190
+ },
191
+ "runner-a": {
192
+ "error": "not-a-recipient"
193
+ },
194
+ "runner-b": {
195
+ "error": "not-a-recipient"
196
+ },
197
+ "outsider": {
198
+ "error": "not-a-recipient"
199
+ }
200
+ }
201
+ },
202
+ {
203
+ "name": "certificate-version-2-for-three",
204
+ "description": "Version 2 of a distribution certificate of the team (fake), for the recovery key, runner-a and runner-b.",
205
+ "plaintext": "eyJ0eXBlIjoiYXBwbGVfZGlzdHJpYnV0aW9uX2NlcnRpZmljYXRlIiwicDEyIjoiYm05MElHRWdjbVZoYkNCd01USTZJTEh6cVJZRUtEYVpPdVdGQXVQY2tVN0hmeUhoS0ZoUDVaQTJpS3dSaE4zSyIsInBhc3N3b3JkIjoibm90LWEtcmVhbC1wMTItcGFzc3dvcmQifQ",
206
+ "content": {
207
+ "type": "apple_distribution_certificate",
208
+ "p12": "bm90IGEgcmVhbCBwMTI6ILHzqRYEKDaZOuWFAuPckU7HfyHhKFhP5ZA2iKwRhN3K",
209
+ "password": "not-a-real-p12-password"
210
+ },
211
+ "credential": {
212
+ "id": "00000000-0000-4000-8000-00000000e010",
213
+ "type": "apple_distribution_certificate",
214
+ "version": 2
215
+ },
216
+ "recipients": [
217
+ "recovery",
218
+ "runner-a",
219
+ "runner-b"
220
+ ],
221
+ "signer": "team",
222
+ "random": {
223
+ "dataKey": "wu71mbPmK-a5yFXs5cnKDeHOjYGA7pTOGlPvrTqeia4",
224
+ "dataIv": "M8WtpiGVOEOTlqNq",
225
+ "wraps": [
226
+ {
227
+ "ephemeralPrivateKey": "InHiHB70q1Nn7oRRvl8JP58NCJ3nedbgpCIdrB5a4lY",
228
+ "iv": "tkK1rCEmI9bkIXPh"
229
+ },
230
+ {
231
+ "ephemeralPrivateKey": "fs0AhxaqJD-iVaYTME-RJJPo6dtWdeMdQwCIaV18IFE",
232
+ "iv": "qIiq1Syz4ceUZ_RF"
233
+ },
234
+ {
235
+ "ephemeralPrivateKey": "jP1Hwz6E_6qRObGDWmuG1E5P1aat9N4e_4nPNJJtRsk",
236
+ "iv": "nizR1mpBBJDgLfmu"
237
+ }
238
+ ]
239
+ },
240
+ "aad": "ias-vault-2\ndata\n00000000-0000-4000-8000-00000000e010\napple_distribution_certificate\n2",
241
+ "wraps": [
242
+ {
243
+ "kid": "gY6AuqT5ADs7vK-fmj9UEb5Gf6ZSdOLxT1mBWwD5hA0",
244
+ "ephemeralPrivateKey": "InHiHB70q1Nn7oRRvl8JP58NCJ3nedbgpCIdrB5a4lY",
245
+ "iv": "tkK1rCEmI9bkIXPh",
246
+ "sharedSecret": "B4LarsrBhY_xtxKYZW1IqOXlBp90aCgj7hmwhODNswk",
247
+ "hkdfSalt": "qloQrbVMqc2TEXolKiO4Or2svIfFCZsQYmA8UaAWMHLPjzQvJ5h52E83Gp_lCrSAum0jFnlLGQGMvH_lMrWxEg",
248
+ "wrapKey": "GP_St9F5mywgGd4lVxny3vqAPQyVgT0a6CPM2OEMDMk",
249
+ "aad": "ias-vault-2\nwrap\n00000000-0000-4000-8000-00000000e010\napple_distribution_certificate\n2\ngY6AuqT5ADs7vK-fmj9UEb5Gf6ZSdOLxT1mBWwD5hA0"
250
+ },
251
+ {
252
+ "kid": "OHeCFPD25tPd2DRaYj34dS7DLtio-1gUq_-NYsYmqNk",
253
+ "ephemeralPrivateKey": "fs0AhxaqJD-iVaYTME-RJJPo6dtWdeMdQwCIaV18IFE",
254
+ "iv": "qIiq1Syz4ceUZ_RF",
255
+ "sharedSecret": "kUMyoT0TFqEoLDgX2mSzPIW85950dcd1qiiUMwFUgW4",
256
+ "hkdfSalt": "lhXN_u1CONI0clRi8_S_5n_EmF8P2t2oEDz-WUKHWHMDxjW5UZFcS-hrXHMY2-UsEVynLntQ7YajZXlZ2OERSA",
257
+ "wrapKey": "roqrOGmaHgLzxH-_MmjV2NgN46r7caxjb5vkMgEMHSE",
258
+ "aad": "ias-vault-2\nwrap\n00000000-0000-4000-8000-00000000e010\napple_distribution_certificate\n2\nOHeCFPD25tPd2DRaYj34dS7DLtio-1gUq_-NYsYmqNk"
259
+ },
260
+ {
261
+ "kid": "3ZL6nCkm1BcKR1Nd5MqK3OMzPTijlc-wKtLHjIB-5hg",
262
+ "ephemeralPrivateKey": "jP1Hwz6E_6qRObGDWmuG1E5P1aat9N4e_4nPNJJtRsk",
263
+ "iv": "nizR1mpBBJDgLfmu",
264
+ "sharedSecret": "RvTDeFEVni9Z-s8FWVQnC79kgJM4Z0Il517gqemUfUg",
265
+ "hkdfSalt": "6InfhB8V67EbYsOsWqCUQTqKRLzCi4rB1ZatDx0hrgcHAHIdyhghpFL0B93o3vrq2mL-NzcnR54cNCQ58ZsXXA",
266
+ "wrapKey": "WcSDIFvoCxIse0YWzOUU3w0KR-ZKvEfsDO4QtLYD3Yo",
267
+ "aad": "ias-vault-2\nwrap\n00000000-0000-4000-8000-00000000e010\napple_distribution_certificate\n2\n3ZL6nCkm1BcKR1Nd5MqK3OMzPTijlc-wKtLHjIB-5hg"
268
+ }
269
+ ],
270
+ "signedText": "ias-vault-2\nsignature\nkj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y\n00000000-0000-4000-8000-00000000e010\napple_distribution_certificate\n2\nM8WtpiGVOEOTlqNq\nmVx3i0SE7ZbX8o1X32sBZ-L2NcxuIh8Q0Oy1pZfXCoPneKJmfG6Z47yo6WtnOz_gu_DcBxd9L6Bgb-37Fu70CYqOZ08MrZmJkMZuiVXOpvcOslnLp12uqU-uURDsMtBvlG_EpQ2LcZc7cNgBRdmp-GVYZQGW05P30QlcUW5LbYEM_q77Dqz-4SdpfmCgtJP2bNJ0f7FFsC5d-3C5rEeu_hl9WtN6V04\n3\ngY6AuqT5ADs7vK-fmj9UEb5Gf6ZSdOLxT1mBWwD5hA0\nqloQrbVMqc2TEXolKiO4Or2svIfFCZsQYmA8UaAWMHI\ntkK1rCEmI9bkIXPh\nkwYQrtGsCfOp4ylyYiYYqATT8UVaYNhCNrN7IcKDGiKoTVlxiSmr4O-yP-Y1QCkW\nOHeCFPD25tPd2DRaYj34dS7DLtio-1gUq_-NYsYmqNk\nlhXN_u1CONI0clRi8_S_5n_EmF8P2t2oEDz-WUKHWHM\nqIiq1Syz4ceUZ_RF\nGYXb9NrgogqVdFcc02koG9iEgIbpEBpr-Dl6FdLG-T9d4jvWj36NhIUlePk9Cvjz\n3ZL6nCkm1BcKR1Nd5MqK3OMzPTijlc-wKtLHjIB-5hg\n6InfhB8V67EbYsOsWqCUQTqKRLzCi4rB1ZatDx0hrgc\nnizR1mpBBJDgLfmu\nJomuGV8XcXHIoqkGcNCCgefV0DI8QAMlf3U6pSpudqCabs3nbmHbNjoGKUbye2zs",
271
+ "envelope": {
272
+ "format": "ias-vault-2",
273
+ "credential": {
274
+ "id": "00000000-0000-4000-8000-00000000e010",
275
+ "type": "apple_distribution_certificate",
276
+ "version": 2
277
+ },
278
+ "data": {
279
+ "iv": "M8WtpiGVOEOTlqNq",
280
+ "ct": "mVx3i0SE7ZbX8o1X32sBZ-L2NcxuIh8Q0Oy1pZfXCoPneKJmfG6Z47yo6WtnOz_gu_DcBxd9L6Bgb-37Fu70CYqOZ08MrZmJkMZuiVXOpvcOslnLp12uqU-uURDsMtBvlG_EpQ2LcZc7cNgBRdmp-GVYZQGW05P30QlcUW5LbYEM_q77Dqz-4SdpfmCgtJP2bNJ0f7FFsC5d-3C5rEeu_hl9WtN6V04"
281
+ },
282
+ "recipients": [
283
+ {
284
+ "kid": "gY6AuqT5ADs7vK-fmj9UEb5Gf6ZSdOLxT1mBWwD5hA0",
285
+ "epk": "qloQrbVMqc2TEXolKiO4Or2svIfFCZsQYmA8UaAWMHI",
286
+ "iv": "tkK1rCEmI9bkIXPh",
287
+ "wk": "kwYQrtGsCfOp4ylyYiYYqATT8UVaYNhCNrN7IcKDGiKoTVlxiSmr4O-yP-Y1QCkW"
288
+ },
289
+ {
290
+ "kid": "OHeCFPD25tPd2DRaYj34dS7DLtio-1gUq_-NYsYmqNk",
291
+ "epk": "lhXN_u1CONI0clRi8_S_5n_EmF8P2t2oEDz-WUKHWHM",
292
+ "iv": "qIiq1Syz4ceUZ_RF",
293
+ "wk": "GYXb9NrgogqVdFcc02koG9iEgIbpEBpr-Dl6FdLG-T9d4jvWj36NhIUlePk9Cvjz"
294
+ },
295
+ {
296
+ "kid": "3ZL6nCkm1BcKR1Nd5MqK3OMzPTijlc-wKtLHjIB-5hg",
297
+ "epk": "6InfhB8V67EbYsOsWqCUQTqKRLzCi4rB1ZatDx0hrgc",
298
+ "iv": "nizR1mpBBJDgLfmu",
299
+ "wk": "JomuGV8XcXHIoqkGcNCCgefV0DI8QAMlf3U6pSpudqCabs3nbmHbNjoGKUbye2zs"
300
+ }
301
+ ],
302
+ "signature": {
303
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
304
+ "sig": "YG9SBez3weICl1Oi8gM6NoBzbMVid2eRez2HK9DSNt70nrpFuJLS0151x6dZ4PEnbamfktQBVyUPmdPxGl10Cg"
305
+ }
306
+ },
307
+ "digest": "n5nKW2m9RtlTy1V89F9R-hfEjcYHfIs98fNr-NMxsPI",
308
+ "opens": {
309
+ "recovery": {
310
+ "plaintext": "eyJ0eXBlIjoiYXBwbGVfZGlzdHJpYnV0aW9uX2NlcnRpZmljYXRlIiwicDEyIjoiYm05MElHRWdjbVZoYkNCd01USTZJTEh6cVJZRUtEYVpPdVdGQXVQY2tVN0hmeUhoS0ZoUDVaQTJpS3dSaE4zSyIsInBhc3N3b3JkIjoibm90LWEtcmVhbC1wMTItcGFzc3dvcmQifQ"
311
+ },
312
+ "runner-a": {
313
+ "plaintext": "eyJ0eXBlIjoiYXBwbGVfZGlzdHJpYnV0aW9uX2NlcnRpZmljYXRlIiwicDEyIjoiYm05MElHRWdjbVZoYkNCd01USTZJTEh6cVJZRUtEYVpPdVdGQXVQY2tVN0hmeUhoS0ZoUDVaQTJpS3dSaE4zSyIsInBhc3N3b3JkIjoibm90LWEtcmVhbC1wMTItcGFzc3dvcmQifQ"
314
+ },
315
+ "runner-b": {
316
+ "plaintext": "eyJ0eXBlIjoiYXBwbGVfZGlzdHJpYnV0aW9uX2NlcnRpZmljYXRlIiwicDEyIjoiYm05MElHRWdjbVZoYkNCd01USTZJTEh6cVJZRUtEYVpPdVdGQXVQY2tVN0hmeUhoS0ZoUDVaQTJpS3dSaE4zSyIsInBhc3N3b3JkIjoibm90LWEtcmVhbC1wMTItcGFzc3dvcmQifQ"
317
+ },
318
+ "outsider": {
319
+ "error": "not-a-recipient"
320
+ }
321
+ }
322
+ },
323
+ {
324
+ "name": "same-credential-other-data-key",
325
+ "description": "The credential of the first case sealed again with another data key, for runner-a and the recovery key. tampered.json moves its pieces into the first case.",
326
+ "plaintext": "eyJ0eXBlIjoiYW5kcm9pZF91cGxvYWRfa2V5c3RvcmUiLCJhcHBsaWNhdGlvbiI6ImpzY2hlZHVsZXIiLCJrZXlzdG9yZSI6ImJtOTBJR0VnY21WaGJDQnZkR2hsY2lCclpYbHpkRzl5WlRvZ0dybVRDRDlLTTVXbHVMZ3RzWTFIUDBSbWJOWDlOX2xxNXl0SHRUcmlNVTAiLCJzdG9yZV9wYXNzd29yZCI6Im5vdC1hLXJlYWwtc3RvcmUtcGFzc3dvcmQiLCJrZXlfYWxpYXMiOiJ1cGxvYWQiLCJrZXlfcGFzc3dvcmQiOiJub3QtYS1yZWFsLWtleS1wYXNzd29yZCJ9",
327
+ "content": {
328
+ "type": "android_upload_keystore",
329
+ "application": "jscheduler",
330
+ "keystore": "bm90IGEgcmVhbCBvdGhlciBrZXlzdG9yZTogGrmTCD9KM5WluLgtsY1HP0RmbNX9N_lq5ytHtTriMU0",
331
+ "store_password": "not-a-real-store-password",
332
+ "key_alias": "upload",
333
+ "key_password": "not-a-real-key-password"
334
+ },
335
+ "credential": {
336
+ "id": "00000000-0000-4000-8000-00000000e001",
337
+ "type": "android_upload_keystore",
338
+ "version": 1
339
+ },
340
+ "recipients": [
341
+ "runner-a",
342
+ "recovery"
343
+ ],
344
+ "signer": "team",
345
+ "random": {
346
+ "dataKey": "x7LDtFqWvSdHij3S_al5PkWYk6nBrffKtW68GcQWoFI",
347
+ "dataIv": "Ca5vCsNsCKAHKWb4",
348
+ "wraps": [
349
+ {
350
+ "ephemeralPrivateKey": "atayEhTY56tzLbE1a0flzxnTKWElxYiJXKA_3bLoldk",
351
+ "iv": "ofubjoZ7H7iFMoY5"
352
+ },
353
+ {
354
+ "ephemeralPrivateKey": "amWa6zqRLuvau4zpr9o8c-TsIMs_l7Rw_-1Shf0oem0",
355
+ "iv": "O4SR5DRT_RDNo_QS"
356
+ }
357
+ ]
358
+ },
359
+ "aad": "ias-vault-2\ndata\n00000000-0000-4000-8000-00000000e001\nandroid_upload_keystore\n1",
360
+ "wraps": [
361
+ {
362
+ "kid": "OHeCFPD25tPd2DRaYj34dS7DLtio-1gUq_-NYsYmqNk",
363
+ "ephemeralPrivateKey": "atayEhTY56tzLbE1a0flzxnTKWElxYiJXKA_3bLoldk",
364
+ "iv": "ofubjoZ7H7iFMoY5",
365
+ "sharedSecret": "W1a7oVBm_YGZjuQP68knibLogQtIxPvH_LiPmjjIsB0",
366
+ "hkdfSalt": "1HC14Kn2H4kYohhULZ4TT-tf3_sBYPm_92kcBjLf7jcDxjW5UZFcS-hrXHMY2-UsEVynLntQ7YajZXlZ2OERSA",
367
+ "wrapKey": "c_SRDE3gDGginumLgAqxBuOSwXWnh2MU7tuveg8NrSU",
368
+ "aad": "ias-vault-2\nwrap\n00000000-0000-4000-8000-00000000e001\nandroid_upload_keystore\n1\nOHeCFPD25tPd2DRaYj34dS7DLtio-1gUq_-NYsYmqNk"
369
+ },
370
+ {
371
+ "kid": "gY6AuqT5ADs7vK-fmj9UEb5Gf6ZSdOLxT1mBWwD5hA0",
372
+ "ephemeralPrivateKey": "amWa6zqRLuvau4zpr9o8c-TsIMs_l7Rw_-1Shf0oem0",
373
+ "iv": "O4SR5DRT_RDNo_QS",
374
+ "sharedSecret": "T08thR9xOTJhLDNeIuw22oW-HEm1xyDiB33JF0jF9TM",
375
+ "hkdfSalt": "pdnQLF7GbJtCybaVbIOupm6KB-RWSaXasMcO47i-OBLPjzQvJ5h52E83Gp_lCrSAum0jFnlLGQGMvH_lMrWxEg",
376
+ "wrapKey": "9TkmqCzThbjznieQAGzmi0_MFn_ipjQl3avw4aMzvjc",
377
+ "aad": "ias-vault-2\nwrap\n00000000-0000-4000-8000-00000000e001\nandroid_upload_keystore\n1\ngY6AuqT5ADs7vK-fmj9UEb5Gf6ZSdOLxT1mBWwD5hA0"
378
+ }
379
+ ],
380
+ "signedText": "ias-vault-2\nsignature\nkj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y\n00000000-0000-4000-8000-00000000e001\nandroid_upload_keystore\n1\nCa5vCsNsCKAHKWb4\n1ClCW8J8qQWj6sqcW8ksrPJUiaDmSakIQ4S-XvIqXZHNfWT5w_iyId3M49crCpA0YMz4PpF6JjWEDnRYffA7Ti_p75DM1qL8VoF1RttCPa3fVXUBa_gGXKgyG2fgD1AIAXtOCN_yCq4zXBMOzZKj9pjR2baIVeWbGO4E1_5LlDL81iBzAq7pp7-mSZxndXZyv6Ix5UTb5wIWxzFRSOcQBhbTWqhONPEQDNJ_uCbp0vEPMAxfPywGd60WyWEIg2nxMuV7A8-i3ojhB6HFTVuRqQHxNZlsoowePgYHBus7DHSFOEeeMHqV1ZQSkmdFt-FnHw63fZazrQ1hs6Z3Da0FxfDQ1NZphyq-M-y8mz-6_e9O-tEyMQ\n2\nOHeCFPD25tPd2DRaYj34dS7DLtio-1gUq_-NYsYmqNk\n1HC14Kn2H4kYohhULZ4TT-tf3_sBYPm_92kcBjLf7jc\nofubjoZ7H7iFMoY5\nvuYYZhPOBY-BWfx2Qg-w5UWVjYL-yvrnNpzYX-srZowzLYqzJVwz01TP_LCDzfdb\ngY6AuqT5ADs7vK-fmj9UEb5Gf6ZSdOLxT1mBWwD5hA0\npdnQLF7GbJtCybaVbIOupm6KB-RWSaXasMcO47i-OBI\nO4SR5DRT_RDNo_QS\n6wLEGNyUuAsSfOOU-uxUxmQreCaQSHeRd1ExoNi___pIlHVRVBO8RZhqZiuO04pt",
381
+ "envelope": {
382
+ "format": "ias-vault-2",
383
+ "credential": {
384
+ "id": "00000000-0000-4000-8000-00000000e001",
385
+ "type": "android_upload_keystore",
386
+ "version": 1
387
+ },
388
+ "data": {
389
+ "iv": "Ca5vCsNsCKAHKWb4",
390
+ "ct": "1ClCW8J8qQWj6sqcW8ksrPJUiaDmSakIQ4S-XvIqXZHNfWT5w_iyId3M49crCpA0YMz4PpF6JjWEDnRYffA7Ti_p75DM1qL8VoF1RttCPa3fVXUBa_gGXKgyG2fgD1AIAXtOCN_yCq4zXBMOzZKj9pjR2baIVeWbGO4E1_5LlDL81iBzAq7pp7-mSZxndXZyv6Ix5UTb5wIWxzFRSOcQBhbTWqhONPEQDNJ_uCbp0vEPMAxfPywGd60WyWEIg2nxMuV7A8-i3ojhB6HFTVuRqQHxNZlsoowePgYHBus7DHSFOEeeMHqV1ZQSkmdFt-FnHw63fZazrQ1hs6Z3Da0FxfDQ1NZphyq-M-y8mz-6_e9O-tEyMQ"
391
+ },
392
+ "recipients": [
393
+ {
394
+ "kid": "OHeCFPD25tPd2DRaYj34dS7DLtio-1gUq_-NYsYmqNk",
395
+ "epk": "1HC14Kn2H4kYohhULZ4TT-tf3_sBYPm_92kcBjLf7jc",
396
+ "iv": "ofubjoZ7H7iFMoY5",
397
+ "wk": "vuYYZhPOBY-BWfx2Qg-w5UWVjYL-yvrnNpzYX-srZowzLYqzJVwz01TP_LCDzfdb"
398
+ },
399
+ {
400
+ "kid": "gY6AuqT5ADs7vK-fmj9UEb5Gf6ZSdOLxT1mBWwD5hA0",
401
+ "epk": "pdnQLF7GbJtCybaVbIOupm6KB-RWSaXasMcO47i-OBI",
402
+ "iv": "O4SR5DRT_RDNo_QS",
403
+ "wk": "6wLEGNyUuAsSfOOU-uxUxmQreCaQSHeRd1ExoNi___pIlHVRVBO8RZhqZiuO04pt"
404
+ }
405
+ ],
406
+ "signature": {
407
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
408
+ "sig": "4c4ok7vsZOjVFgh-DEVH2Fr5kwhQaw4bFm9udEAVSoz_TeN6uieA1dNa2_HKz-iu1hlqh1IIVcatcJ_PFtFWCQ"
409
+ }
410
+ },
411
+ "digest": "gvc8Tc542thunYa4eDXxvpoQjCt7uPh5ny9RWaclC0k",
412
+ "opens": {
413
+ "recovery": {
414
+ "plaintext": "eyJ0eXBlIjoiYW5kcm9pZF91cGxvYWRfa2V5c3RvcmUiLCJhcHBsaWNhdGlvbiI6ImpzY2hlZHVsZXIiLCJrZXlzdG9yZSI6ImJtOTBJR0VnY21WaGJDQnZkR2hsY2lCclpYbHpkRzl5WlRvZ0dybVRDRDlLTTVXbHVMZ3RzWTFIUDBSbWJOWDlOX2xxNXl0SHRUcmlNVTAiLCJzdG9yZV9wYXNzd29yZCI6Im5vdC1hLXJlYWwtc3RvcmUtcGFzc3dvcmQiLCJrZXlfYWxpYXMiOiJ1cGxvYWQiLCJrZXlfcGFzc3dvcmQiOiJub3QtYS1yZWFsLWtleS1wYXNzd29yZCJ9"
415
+ },
416
+ "runner-a": {
417
+ "plaintext": "eyJ0eXBlIjoiYW5kcm9pZF91cGxvYWRfa2V5c3RvcmUiLCJhcHBsaWNhdGlvbiI6ImpzY2hlZHVsZXIiLCJrZXlzdG9yZSI6ImJtOTBJR0VnY21WaGJDQnZkR2hsY2lCclpYbHpkRzl5WlRvZ0dybVRDRDlLTTVXbHVMZ3RzWTFIUDBSbWJOWDlOX2xxNXl0SHRUcmlNVTAiLCJzdG9yZV9wYXNzd29yZCI6Im5vdC1hLXJlYWwtc3RvcmUtcGFzc3dvcmQiLCJrZXlfYWxpYXMiOiJ1cGxvYWQiLCJrZXlfcGFzc3dvcmQiOiJub3QtYS1yZWFsLWtleS1wYXNzd29yZCJ9"
418
+ },
419
+ "runner-b": {
420
+ "error": "not-a-recipient"
421
+ },
422
+ "outsider": {
423
+ "error": "not-a-recipient"
424
+ }
425
+ }
426
+ }
427
+ ],
428
+ "changes": [
429
+ {
430
+ "name": "grant-runner-b",
431
+ "description": "ias vault grant: the recovery key opens the first case, wraps its data key for runner-b and the team signs the envelope again. runner-a is already a recipient and keeps its wrap.",
432
+ "operation": "rewrap",
433
+ "from": "keystore-for-recovery-and-runner-a",
434
+ "opener": "recovery",
435
+ "add": [
436
+ "runner-b",
437
+ "runner-a"
438
+ ],
439
+ "signer": "team",
440
+ "random": {
441
+ "wraps": [
442
+ {
443
+ "ephemeralPrivateKey": "28R1YRSSSJUqlsum_a8W2nGfOTG4A4-qSS3be3y-NJ8",
444
+ "iv": "mPcpYC89IJ9aekfA"
445
+ }
446
+ ]
447
+ },
448
+ "wraps": [
449
+ {
450
+ "kid": "3ZL6nCkm1BcKR1Nd5MqK3OMzPTijlc-wKtLHjIB-5hg",
451
+ "ephemeralPrivateKey": "28R1YRSSSJUqlsum_a8W2nGfOTG4A4-qSS3be3y-NJ8",
452
+ "iv": "mPcpYC89IJ9aekfA",
453
+ "sharedSecret": "XmwbKq5bueJxtaSuTwv6tY3dBOYBroXG8lFHoYbmMl0",
454
+ "hkdfSalt": "f70uUGZmE5VeaUBtSB8Z-NEyEoZFfx_kAll6XHwGCXcHAHIdyhghpFL0B93o3vrq2mL-NzcnR54cNCQ58ZsXXA",
455
+ "wrapKey": "92ydzOcXblMVnJ5fWbP60mkCxogK-TvDZ53LQaPd-4s",
456
+ "aad": "ias-vault-2\nwrap\n00000000-0000-4000-8000-00000000e001\nandroid_upload_keystore\n1\n3ZL6nCkm1BcKR1Nd5MqK3OMzPTijlc-wKtLHjIB-5hg"
457
+ }
458
+ ],
459
+ "signedText": "ias-vault-2\nsignature\nkj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y\n00000000-0000-4000-8000-00000000e001\nandroid_upload_keystore\n1\n0XaZsTpE_agQ_g89\ntM6ENIdfVPy_YbVYoQ3C1YJTaYYwCrgMEros4BApV6mRDDyxIsFdmXiwH0r5wyK8P-LbbOMIJPM4izcB6ZSyhPwe6NeUP2wQxdKoMVf08fVvFR9ijdHbplTePWBE6myGyY0KefsmVH513JU5AtZ9FpYPH2sSlO_Jc-4oBBeoAoOAmvSff_hk7zp_7rwH4tEFsZWdQlwhV17sbYlb8H0XQV2m3SU1FjIYE_aYHUxEfq02DaY-Hh-MndhciUabSiorhrmhAFa0ZP1SiFtpEGI2iOduIRFZOrpDQeyVaaOULWIwTa155_2txN_t1V2mL5qJvhG7jr5N1J6_DQFjAdGI_9TYQYWdnPptw_w9LdQ\n3\ngY6AuqT5ADs7vK-fmj9UEb5Gf6ZSdOLxT1mBWwD5hA0\nf2gDGPbAdYQ9rJX5zaFwDjfCswRnjPGZN0iHNh4ifBU\nKvzUT7AfW9mgBjjq\nxeIt4rLJj3AIrN7KChMOdNOQS_ZZ5q4mcWbQeBn_3FXysWuT8zjwDhaT-c5VU3fd\nOHeCFPD25tPd2DRaYj34dS7DLtio-1gUq_-NYsYmqNk\n7N6B-jhSAl4t6tyP8fR7g81VIEwoTKvAKOUNRAPgcVA\na3oFvAfEAGJRkhAv\n4DTOiTVkxA-YeV1uSdtsvBg3jAfroWp_18xfZ_H0OJYo6lpE0Hc5fWryZ7WUaQt5\n3ZL6nCkm1BcKR1Nd5MqK3OMzPTijlc-wKtLHjIB-5hg\nf70uUGZmE5VeaUBtSB8Z-NEyEoZFfx_kAll6XHwGCXc\nmPcpYC89IJ9aekfA\nC19eGc_bOsrmwy1xjVPYW6pGSM4Srw7r9M-OCbqgxHpuAGjrZSZJ7b24R66IHhrR",
460
+ "envelope": {
461
+ "format": "ias-vault-2",
462
+ "credential": {
463
+ "id": "00000000-0000-4000-8000-00000000e001",
464
+ "type": "android_upload_keystore",
465
+ "version": 1
466
+ },
467
+ "data": {
468
+ "iv": "0XaZsTpE_agQ_g89",
469
+ "ct": "tM6ENIdfVPy_YbVYoQ3C1YJTaYYwCrgMEros4BApV6mRDDyxIsFdmXiwH0r5wyK8P-LbbOMIJPM4izcB6ZSyhPwe6NeUP2wQxdKoMVf08fVvFR9ijdHbplTePWBE6myGyY0KefsmVH513JU5AtZ9FpYPH2sSlO_Jc-4oBBeoAoOAmvSff_hk7zp_7rwH4tEFsZWdQlwhV17sbYlb8H0XQV2m3SU1FjIYE_aYHUxEfq02DaY-Hh-MndhciUabSiorhrmhAFa0ZP1SiFtpEGI2iOduIRFZOrpDQeyVaaOULWIwTa155_2txN_t1V2mL5qJvhG7jr5N1J6_DQFjAdGI_9TYQYWdnPptw_w9LdQ"
470
+ },
471
+ "recipients": [
472
+ {
473
+ "kid": "gY6AuqT5ADs7vK-fmj9UEb5Gf6ZSdOLxT1mBWwD5hA0",
474
+ "epk": "f2gDGPbAdYQ9rJX5zaFwDjfCswRnjPGZN0iHNh4ifBU",
475
+ "iv": "KvzUT7AfW9mgBjjq",
476
+ "wk": "xeIt4rLJj3AIrN7KChMOdNOQS_ZZ5q4mcWbQeBn_3FXysWuT8zjwDhaT-c5VU3fd"
477
+ },
478
+ {
479
+ "kid": "OHeCFPD25tPd2DRaYj34dS7DLtio-1gUq_-NYsYmqNk",
480
+ "epk": "7N6B-jhSAl4t6tyP8fR7g81VIEwoTKvAKOUNRAPgcVA",
481
+ "iv": "a3oFvAfEAGJRkhAv",
482
+ "wk": "4DTOiTVkxA-YeV1uSdtsvBg3jAfroWp_18xfZ_H0OJYo6lpE0Hc5fWryZ7WUaQt5"
483
+ },
484
+ {
485
+ "kid": "3ZL6nCkm1BcKR1Nd5MqK3OMzPTijlc-wKtLHjIB-5hg",
486
+ "epk": "f70uUGZmE5VeaUBtSB8Z-NEyEoZFfx_kAll6XHwGCXc",
487
+ "iv": "mPcpYC89IJ9aekfA",
488
+ "wk": "C19eGc_bOsrmwy1xjVPYW6pGSM4Srw7r9M-OCbqgxHpuAGjrZSZJ7b24R66IHhrR"
489
+ }
490
+ ],
491
+ "signature": {
492
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
493
+ "sig": "4vtYvT1T6j5YhzspoAIi4EqcLJHZIXLWnEiP2ozECTgDvU1i017D5ejS0ph3RGTFQlGtDoU7CC4A4WG_5yWiDQ"
494
+ }
495
+ },
496
+ "digest": "8zOC-bdcd8avwCDlMq2hExm8S5AG5dKvkxNcY8NPcVA",
497
+ "opens": {
498
+ "recovery": {
499
+ "plaintext": "eyJ0eXBlIjoiYW5kcm9pZF91cGxvYWRfa2V5c3RvcmUiLCJhcHBsaWNhdGlvbiI6ImpzY2hlZHVsZXIiLCJrZXlzdG9yZSI6ImJtOTBJR0VnY21WaGJDQnJaWGx6ZEc5eVpUb2dNTzcxZm1UYWtodFlzWDhSV01nNDNJdkZGa2hxU3NURDdLWGFfVEplcXdzIiwic3RvcmVfcGFzc3dvcmQiOiJub3QtYS1yZWFsLXN0b3JlLXBhc3N3b3JkIiwia2V5X2FsaWFzIjoidXBsb2FkIiwia2V5X3Bhc3N3b3JkIjoibm90LWEtcmVhbC1rZXktcGFzc3dvcmQifQ"
500
+ },
501
+ "runner-a": {
502
+ "plaintext": "eyJ0eXBlIjoiYW5kcm9pZF91cGxvYWRfa2V5c3RvcmUiLCJhcHBsaWNhdGlvbiI6ImpzY2hlZHVsZXIiLCJrZXlzdG9yZSI6ImJtOTBJR0VnY21WaGJDQnJaWGx6ZEc5eVpUb2dNTzcxZm1UYWtodFlzWDhSV01nNDNJdkZGa2hxU3NURDdLWGFfVEplcXdzIiwic3RvcmVfcGFzc3dvcmQiOiJub3QtYS1yZWFsLXN0b3JlLXBhc3N3b3JkIiwia2V5X2FsaWFzIjoidXBsb2FkIiwia2V5X3Bhc3N3b3JkIjoibm90LWEtcmVhbC1rZXktcGFzc3dvcmQifQ"
503
+ },
504
+ "runner-b": {
505
+ "plaintext": "eyJ0eXBlIjoiYW5kcm9pZF91cGxvYWRfa2V5c3RvcmUiLCJhcHBsaWNhdGlvbiI6ImpzY2hlZHVsZXIiLCJrZXlzdG9yZSI6ImJtOTBJR0VnY21WaGJDQnJaWGx6ZEc5eVpUb2dNTzcxZm1UYWtodFlzWDhSV01nNDNJdkZGa2hxU3NURDdLWGFfVEplcXdzIiwic3RvcmVfcGFzc3dvcmQiOiJub3QtYS1yZWFsLXN0b3JlLXBhc3N3b3JkIiwia2V5X2FsaWFzIjoidXBsb2FkIiwia2V5X3Bhc3N3b3JkIjoibm90LWEtcmVhbC1rZXktcGFzc3dvcmQifQ"
506
+ },
507
+ "outsider": {
508
+ "error": "not-a-recipient"
509
+ }
510
+ }
511
+ },
512
+ {
513
+ "name": "revoke-runner-a",
514
+ "description": "ias vault revoke: the wrap of runner-a removed from the previous case and the envelope signed again. The data and the other wraps do not change; the signature does.",
515
+ "operation": "remove",
516
+ "from": "grant-runner-b",
517
+ "remove": "runner-a",
518
+ "signer": "team",
519
+ "signedText": "ias-vault-2\nsignature\nkj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y\n00000000-0000-4000-8000-00000000e001\nandroid_upload_keystore\n1\n0XaZsTpE_agQ_g89\ntM6ENIdfVPy_YbVYoQ3C1YJTaYYwCrgMEros4BApV6mRDDyxIsFdmXiwH0r5wyK8P-LbbOMIJPM4izcB6ZSyhPwe6NeUP2wQxdKoMVf08fVvFR9ijdHbplTePWBE6myGyY0KefsmVH513JU5AtZ9FpYPH2sSlO_Jc-4oBBeoAoOAmvSff_hk7zp_7rwH4tEFsZWdQlwhV17sbYlb8H0XQV2m3SU1FjIYE_aYHUxEfq02DaY-Hh-MndhciUabSiorhrmhAFa0ZP1SiFtpEGI2iOduIRFZOrpDQeyVaaOULWIwTa155_2txN_t1V2mL5qJvhG7jr5N1J6_DQFjAdGI_9TYQYWdnPptw_w9LdQ\n2\ngY6AuqT5ADs7vK-fmj9UEb5Gf6ZSdOLxT1mBWwD5hA0\nf2gDGPbAdYQ9rJX5zaFwDjfCswRnjPGZN0iHNh4ifBU\nKvzUT7AfW9mgBjjq\nxeIt4rLJj3AIrN7KChMOdNOQS_ZZ5q4mcWbQeBn_3FXysWuT8zjwDhaT-c5VU3fd\n3ZL6nCkm1BcKR1Nd5MqK3OMzPTijlc-wKtLHjIB-5hg\nf70uUGZmE5VeaUBtSB8Z-NEyEoZFfx_kAll6XHwGCXc\nmPcpYC89IJ9aekfA\nC19eGc_bOsrmwy1xjVPYW6pGSM4Srw7r9M-OCbqgxHpuAGjrZSZJ7b24R66IHhrR",
520
+ "envelope": {
521
+ "format": "ias-vault-2",
522
+ "credential": {
523
+ "id": "00000000-0000-4000-8000-00000000e001",
524
+ "type": "android_upload_keystore",
525
+ "version": 1
526
+ },
527
+ "data": {
528
+ "iv": "0XaZsTpE_agQ_g89",
529
+ "ct": "tM6ENIdfVPy_YbVYoQ3C1YJTaYYwCrgMEros4BApV6mRDDyxIsFdmXiwH0r5wyK8P-LbbOMIJPM4izcB6ZSyhPwe6NeUP2wQxdKoMVf08fVvFR9ijdHbplTePWBE6myGyY0KefsmVH513JU5AtZ9FpYPH2sSlO_Jc-4oBBeoAoOAmvSff_hk7zp_7rwH4tEFsZWdQlwhV17sbYlb8H0XQV2m3SU1FjIYE_aYHUxEfq02DaY-Hh-MndhciUabSiorhrmhAFa0ZP1SiFtpEGI2iOduIRFZOrpDQeyVaaOULWIwTa155_2txN_t1V2mL5qJvhG7jr5N1J6_DQFjAdGI_9TYQYWdnPptw_w9LdQ"
530
+ },
531
+ "recipients": [
532
+ {
533
+ "kid": "gY6AuqT5ADs7vK-fmj9UEb5Gf6ZSdOLxT1mBWwD5hA0",
534
+ "epk": "f2gDGPbAdYQ9rJX5zaFwDjfCswRnjPGZN0iHNh4ifBU",
535
+ "iv": "KvzUT7AfW9mgBjjq",
536
+ "wk": "xeIt4rLJj3AIrN7KChMOdNOQS_ZZ5q4mcWbQeBn_3FXysWuT8zjwDhaT-c5VU3fd"
537
+ },
538
+ {
539
+ "kid": "3ZL6nCkm1BcKR1Nd5MqK3OMzPTijlc-wKtLHjIB-5hg",
540
+ "epk": "f70uUGZmE5VeaUBtSB8Z-NEyEoZFfx_kAll6XHwGCXc",
541
+ "iv": "mPcpYC89IJ9aekfA",
542
+ "wk": "C19eGc_bOsrmwy1xjVPYW6pGSM4Srw7r9M-OCbqgxHpuAGjrZSZJ7b24R66IHhrR"
543
+ }
544
+ ],
545
+ "signature": {
546
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
547
+ "sig": "kuvM6QtJTWpfQ9jUcWQbwCtA6Qt2LbPIwRT9I4XLYyqal8oV051ryZIgWX4fmd7hddBNIflmAgvxiAucR2eLBg"
548
+ }
549
+ },
550
+ "digest": "8zOC-bdcd8avwCDlMq2hExm8S5AG5dKvkxNcY8NPcVA",
551
+ "opens": {
552
+ "recovery": {
553
+ "plaintext": "eyJ0eXBlIjoiYW5kcm9pZF91cGxvYWRfa2V5c3RvcmUiLCJhcHBsaWNhdGlvbiI6ImpzY2hlZHVsZXIiLCJrZXlzdG9yZSI6ImJtOTBJR0VnY21WaGJDQnJaWGx6ZEc5eVpUb2dNTzcxZm1UYWtodFlzWDhSV01nNDNJdkZGa2hxU3NURDdLWGFfVEplcXdzIiwic3RvcmVfcGFzc3dvcmQiOiJub3QtYS1yZWFsLXN0b3JlLXBhc3N3b3JkIiwia2V5X2FsaWFzIjoidXBsb2FkIiwia2V5X3Bhc3N3b3JkIjoibm90LWEtcmVhbC1rZXktcGFzc3dvcmQifQ"
554
+ },
555
+ "runner-a": {
556
+ "error": "not-a-recipient"
557
+ },
558
+ "runner-b": {
559
+ "plaintext": "eyJ0eXBlIjoiYW5kcm9pZF91cGxvYWRfa2V5c3RvcmUiLCJhcHBsaWNhdGlvbiI6ImpzY2hlZHVsZXIiLCJrZXlzdG9yZSI6ImJtOTBJR0VnY21WaGJDQnJaWGx6ZEc5eVpUb2dNTzcxZm1UYWtodFlzWDhSV01nNDNJdkZGa2hxU3NURDdLWGFfVEplcXdzIiwic3RvcmVfcGFzc3dvcmQiOiJub3QtYS1yZWFsLXN0b3JlLXBhc3N3b3JkIiwia2V5X2FsaWFzIjoidXBsb2FkIiwia2V5X3Bhc3N3b3JkIjoibm90LWEtcmVhbC1rZXktcGFzc3dvcmQifQ"
560
+ },
561
+ "outsider": {
562
+ "error": "not-a-recipient"
563
+ }
564
+ }
565
+ }
566
+ ]
567
+ }