@textrp/briij-js-sdk 41.0.1 → 43.0.0

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 (380) hide show
  1. package/CHANGELOG.md +14 -1
  2. package/LICENSE +177 -177
  3. package/README.md +85 -3
  4. package/lib/@types/AESEncryptedSecretStoragePayload.js.map +1 -1
  5. package/lib/@types/IIdentityServerProvider.js.map +1 -1
  6. package/lib/@types/PushRules.js +14 -14
  7. package/lib/@types/PushRules.js.map +1 -1
  8. package/lib/@types/another-json.d.js.map +1 -1
  9. package/lib/@types/auth.d.ts +72 -1
  10. package/lib/@types/auth.d.ts.map +1 -1
  11. package/lib/@types/auth.js +57 -54
  12. package/lib/@types/auth.js.map +1 -1
  13. package/lib/@types/beacon.js +100 -100
  14. package/lib/@types/beacon.js.map +1 -1
  15. package/lib/@types/common.js.map +1 -1
  16. package/lib/@types/crypto.js.map +1 -1
  17. package/lib/@types/event.d.ts +59 -0
  18. package/lib/@types/event.d.ts.map +1 -1
  19. package/lib/@types/event.js +105 -102
  20. package/lib/@types/event.js.map +1 -1
  21. package/lib/@types/events.js.map +1 -1
  22. package/lib/@types/extensible_events.js +53 -53
  23. package/lib/@types/extensible_events.js.map +1 -1
  24. package/lib/@types/local_notifications.js.map +1 -1
  25. package/lib/@types/location.js +41 -41
  26. package/lib/@types/location.js.map +1 -1
  27. package/lib/@types/matrix-sdk-crypto-wasm.d.js.map +1 -1
  28. package/lib/@types/media.js.map +1 -1
  29. package/lib/@types/membership.js +39 -39
  30. package/lib/@types/membership.js.map +1 -1
  31. package/lib/@types/partials.js +25 -25
  32. package/lib/@types/partials.js.map +1 -1
  33. package/lib/@types/polls.js +46 -46
  34. package/lib/@types/polls.js.map +1 -1
  35. package/lib/@types/read_receipts.js +14 -14
  36. package/lib/@types/read_receipts.js.map +1 -1
  37. package/lib/@types/registration.js.map +1 -1
  38. package/lib/@types/search.js +14 -14
  39. package/lib/@types/search.js.map +1 -1
  40. package/lib/@types/signed.js.map +1 -1
  41. package/lib/@types/spaces.js.map +1 -1
  42. package/lib/@types/state_events.js.map +1 -1
  43. package/lib/@types/synapse.js.map +1 -1
  44. package/lib/@types/sync.js +18 -18
  45. package/lib/@types/sync.js.map +1 -1
  46. package/lib/@types/threepids.js +14 -14
  47. package/lib/@types/threepids.js.map +1 -1
  48. package/lib/@types/topic.js +47 -47
  49. package/lib/@types/topic.js.map +1 -1
  50. package/lib/@types/uia.js.map +1 -1
  51. package/lib/NamespacedValue.js +20 -20
  52. package/lib/NamespacedValue.js.map +1 -1
  53. package/lib/ReEmitter.js +16 -16
  54. package/lib/ReEmitter.js.map +1 -1
  55. package/lib/base64.js +32 -32
  56. package/lib/base64.js.map +1 -1
  57. package/lib/briij.d.ts +4 -0
  58. package/lib/briij.d.ts.map +1 -1
  59. package/lib/briij.js +4 -0
  60. package/lib/briij.js.map +1 -1
  61. package/lib/client.d.ts +48 -1
  62. package/lib/client.d.ts.map +1 -1
  63. package/lib/client.js +262 -108
  64. package/lib/client.js.map +1 -1
  65. package/lib/common-crypto/key-passphrase.js +19 -19
  66. package/lib/common-crypto/key-passphrase.js.map +1 -1
  67. package/lib/content-helpers.js +57 -57
  68. package/lib/content-helpers.js.map +1 -1
  69. package/lib/content-repo.js +36 -36
  70. package/lib/content-repo.js.map +1 -1
  71. package/lib/crypto/store/base.js +69 -69
  72. package/lib/crypto/store/base.js.map +1 -1
  73. package/lib/crypto/store/indexeddb-crypto-store-backend.js +58 -58
  74. package/lib/crypto/store/indexeddb-crypto-store-backend.js.map +1 -1
  75. package/lib/crypto/store/indexeddb-crypto-store.js +193 -193
  76. package/lib/crypto/store/indexeddb-crypto-store.js.map +1 -1
  77. package/lib/crypto/store/localStorage-crypto-store.js +72 -72
  78. package/lib/crypto/store/localStorage-crypto-store.js.map +1 -1
  79. package/lib/crypto/store/memory-crypto-store.js +74 -74
  80. package/lib/crypto/store/memory-crypto-store.js.map +1 -1
  81. package/lib/crypto-api/CryptoEventHandlerMap.js.map +1 -1
  82. package/lib/crypto-api/key-passphrase.js +22 -22
  83. package/lib/crypto-api/key-passphrase.js.map +1 -1
  84. package/lib/crypto-api/keybackup.js.map +1 -1
  85. package/lib/crypto-api/recovery-key.js +20 -20
  86. package/lib/crypto-api/recovery-key.js.map +1 -1
  87. package/lib/digest.js +21 -21
  88. package/lib/digest.js.map +1 -1
  89. package/lib/extensible_events_v1/ExtensibleEvent.js +39 -39
  90. package/lib/extensible_events_v1/ExtensibleEvent.js.map +1 -1
  91. package/lib/extensible_events_v1/InvalidEventError.js +16 -16
  92. package/lib/extensible_events_v1/InvalidEventError.js.map +1 -1
  93. package/lib/extensible_events_v1/MessageEvent.js +39 -39
  94. package/lib/extensible_events_v1/MessageEvent.js.map +1 -1
  95. package/lib/extensible_events_v1/PollEndEvent.js +29 -29
  96. package/lib/extensible_events_v1/PollEndEvent.js.map +1 -1
  97. package/lib/extensible_events_v1/PollResponseEvent.js +39 -39
  98. package/lib/extensible_events_v1/PollResponseEvent.js.map +1 -1
  99. package/lib/extensible_events_v1/PollStartEvent.js +52 -52
  100. package/lib/extensible_events_v1/PollStartEvent.js.map +1 -1
  101. package/lib/extensible_events_v1/utilities.js +22 -22
  102. package/lib/extensible_events_v1/utilities.js.map +1 -1
  103. package/lib/feature.js +16 -16
  104. package/lib/feature.js.map +1 -1
  105. package/lib/http-api/method.js +14 -14
  106. package/lib/http-api/method.js.map +1 -1
  107. package/lib/http-api/prefix.js +26 -26
  108. package/lib/http-api/prefix.js.map +1 -1
  109. package/lib/indexeddb-helpers.js +21 -21
  110. package/lib/indexeddb-helpers.js.map +1 -1
  111. package/lib/indexeddb-worker.js +18 -18
  112. package/lib/indexeddb-worker.js.map +1 -1
  113. package/lib/matrixrtc/IKeyTransport.js +17 -17
  114. package/lib/matrixrtc/IKeyTransport.js.map +1 -1
  115. package/lib/matrixrtc/IMembershipManager.js +27 -27
  116. package/lib/matrixrtc/IMembershipManager.js.map +1 -1
  117. package/lib/matrixrtc/LivekitTransport.js +19 -19
  118. package/lib/matrixrtc/LivekitTransport.js.map +1 -1
  119. package/lib/matrixrtc/index.js +14 -14
  120. package/lib/matrixrtc/index.js.map +1 -1
  121. package/lib/matrixrtc/utils.js +27 -27
  122. package/lib/matrixrtc/utils.js.map +1 -1
  123. package/lib/models/ToDeviceMessage.js.map +1 -1
  124. package/lib/models/device.js +24 -24
  125. package/lib/models/device.js.map +1 -1
  126. package/lib/models/event-status.js +17 -17
  127. package/lib/models/event-status.js.map +1 -1
  128. package/lib/models/invites-ignorer-types.js +25 -25
  129. package/lib/models/invites-ignorer-types.js.map +1 -1
  130. package/lib/models/profile-keys.js +26 -26
  131. package/lib/models/profile-keys.js.map +1 -1
  132. package/lib/models/room-summary.js +26 -26
  133. package/lib/models/room-summary.js.map +1 -1
  134. package/lib/models/search-result.js +22 -22
  135. package/lib/models/search-result.js.map +1 -1
  136. package/lib/models/typed-event-emitter.js +122 -122
  137. package/lib/models/typed-event-emitter.js.map +1 -1
  138. package/lib/oidc/authorize.js +76 -76
  139. package/lib/oidc/authorize.js.map +1 -1
  140. package/lib/oidc/error.js +17 -17
  141. package/lib/oidc/error.js.map +1 -1
  142. package/lib/oidc/index.js +17 -17
  143. package/lib/oidc/index.js.map +1 -1
  144. package/lib/oidc/register.js +41 -41
  145. package/lib/oidc/register.js.map +1 -1
  146. package/lib/oidc/tokenRefresher.js +51 -51
  147. package/lib/oidc/tokenRefresher.js.map +1 -1
  148. package/lib/oidc/validate.js +59 -59
  149. package/lib/oidc/validate.js.map +1 -1
  150. package/lib/randomstring.js +35 -35
  151. package/lib/randomstring.js.map +1 -1
  152. package/lib/realtime-callbacks.js +39 -39
  153. package/lib/realtime-callbacks.js.map +1 -1
  154. package/lib/receipt-accumulator.js +44 -44
  155. package/lib/receipt-accumulator.js.map +1 -1
  156. package/lib/rendezvous/RendezvousChannel.js.map +1 -1
  157. package/lib/rendezvous/RendezvousCode.js.map +1 -1
  158. package/lib/rendezvous/RendezvousError.js +14 -14
  159. package/lib/rendezvous/RendezvousError.js.map +1 -1
  160. package/lib/rendezvous/RendezvousFailureReason.js +14 -14
  161. package/lib/rendezvous/RendezvousFailureReason.js.map +1 -1
  162. package/lib/rendezvous/RendezvousIntent.js +14 -14
  163. package/lib/rendezvous/RendezvousIntent.js.map +1 -1
  164. package/lib/rendezvous/RendezvousTransport.js.map +1 -1
  165. package/lib/rendezvous/channels/MSC4108SecureChannel.js +63 -63
  166. package/lib/rendezvous/channels/MSC4108SecureChannel.js.map +1 -1
  167. package/lib/rendezvous/channels/index.js +14 -14
  168. package/lib/rendezvous/channels/index.js.map +1 -1
  169. package/lib/rendezvous/index.js +14 -14
  170. package/lib/rendezvous/index.js.map +1 -1
  171. package/lib/rendezvous/transports/index.js +14 -14
  172. package/lib/rendezvous/transports/index.js.map +1 -1
  173. package/lib/rust-crypto/CrossSigningIdentity.js +29 -29
  174. package/lib/rust-crypto/CrossSigningIdentity.js.map +1 -1
  175. package/lib/rust-crypto/OutgoingRequestsManager.js +37 -37
  176. package/lib/rust-crypto/OutgoingRequestsManager.js.map +1 -1
  177. package/lib/rust-crypto/device-converter.js +30 -30
  178. package/lib/rust-crypto/device-converter.js.map +1 -1
  179. package/lib/rust-crypto/secret-storage.js +30 -30
  180. package/lib/rust-crypto/secret-storage.js.map +1 -1
  181. package/lib/service-types.js +14 -14
  182. package/lib/service-types.js.map +1 -1
  183. package/lib/store/local-storage-events-emitter.js +21 -21
  184. package/lib/store/local-storage-events-emitter.js.map +1 -1
  185. package/lib/sync-accumulator.js +50 -50
  186. package/lib/sync-accumulator.js.map +1 -1
  187. package/lib/thread-utils.js +20 -20
  188. package/lib/thread-utils.js.map +1 -1
  189. package/lib/types.js +34 -34
  190. package/lib/types.js.map +1 -1
  191. package/lib/utils/decryptAESSecretStorageItem.js +22 -22
  192. package/lib/utils/decryptAESSecretStorageItem.js.map +1 -1
  193. package/lib/utils/encryptAESSecretStorageItem.js +26 -26
  194. package/lib/utils/encryptAESSecretStorageItem.js.map +1 -1
  195. package/lib/utils/internal/deriveKeys.js +21 -21
  196. package/lib/utils/internal/deriveKeys.js.map +1 -1
  197. package/lib/utils/roomVersion.js +26 -26
  198. package/lib/utils/roomVersion.js.map +1 -1
  199. package/lib/version-support.js +26 -26
  200. package/lib/version-support.js.map +1 -1
  201. package/lib/wallet-recovery.d.ts +24 -0
  202. package/lib/wallet-recovery.d.ts.map +1 -0
  203. package/lib/wallet-recovery.js +232 -0
  204. package/lib/wallet-recovery.js.map +1 -0
  205. package/lib/webrtc/audioContext.js +24 -24
  206. package/lib/webrtc/audioContext.js.map +1 -1
  207. package/lib/webrtc/callEventTypes.js.map +1 -1
  208. package/lib/webrtc/stats/callFeedStatsReporter.js +14 -14
  209. package/lib/webrtc/stats/callFeedStatsReporter.js.map +1 -1
  210. package/lib/webrtc/stats/callStatsReportGatherer.js +14 -14
  211. package/lib/webrtc/stats/callStatsReportGatherer.js.map +1 -1
  212. package/lib/webrtc/stats/callStatsReportSummary.js.map +1 -1
  213. package/lib/webrtc/stats/connectionStats.js +14 -14
  214. package/lib/webrtc/stats/connectionStats.js.map +1 -1
  215. package/lib/webrtc/stats/connectionStatsBuilder.js +14 -14
  216. package/lib/webrtc/stats/connectionStatsBuilder.js.map +1 -1
  217. package/lib/webrtc/stats/connectionStatsReportBuilder.js +14 -14
  218. package/lib/webrtc/stats/connectionStatsReportBuilder.js.map +1 -1
  219. package/lib/webrtc/stats/groupCallStats.js +14 -14
  220. package/lib/webrtc/stats/groupCallStats.js.map +1 -1
  221. package/lib/webrtc/stats/media/mediaSsrcHandler.js +14 -14
  222. package/lib/webrtc/stats/media/mediaSsrcHandler.js.map +1 -1
  223. package/lib/webrtc/stats/media/mediaTrackHandler.js +14 -14
  224. package/lib/webrtc/stats/media/mediaTrackHandler.js.map +1 -1
  225. package/lib/webrtc/stats/media/mediaTrackStats.js +27 -27
  226. package/lib/webrtc/stats/media/mediaTrackStats.js.map +1 -1
  227. package/lib/webrtc/stats/media/mediaTrackStatsHandler.js +20 -20
  228. package/lib/webrtc/stats/media/mediaTrackStatsHandler.js.map +1 -1
  229. package/lib/webrtc/stats/statsReport.js +14 -14
  230. package/lib/webrtc/stats/statsReport.js.map +1 -1
  231. package/lib/webrtc/stats/statsReportEmitter.js +14 -14
  232. package/lib/webrtc/stats/statsReportEmitter.js.map +1 -1
  233. package/lib/webrtc/stats/trackStatsBuilder.js +4 -4
  234. package/lib/webrtc/stats/trackStatsBuilder.js.map +1 -1
  235. package/lib/webrtc/stats/transportStats.js.map +1 -1
  236. package/lib/webrtc/stats/transportStatsBuilder.js.map +1 -1
  237. package/lib/webrtc/stats/valueFormatter.js +11 -11
  238. package/lib/webrtc/stats/valueFormatter.js.map +1 -1
  239. package/lib/xrpl/identity.d.ts +28 -0
  240. package/lib/xrpl/identity.d.ts.map +1 -0
  241. package/lib/xrpl/identity.js +213 -0
  242. package/lib/xrpl/identity.js.map +1 -0
  243. package/lib/xrpl/trust.d.ts +8 -0
  244. package/lib/xrpl/trust.d.ts.map +1 -0
  245. package/lib/xrpl/trust.js +61 -0
  246. package/lib/xrpl/trust.js.map +1 -0
  247. package/lib/xrpl/verification.d.ts +26 -0
  248. package/lib/xrpl/verification.d.ts.map +1 -0
  249. package/lib/xrpl/verification.js +295 -0
  250. package/lib/xrpl/verification.js.map +1 -0
  251. package/package.json +130 -129
  252. package/src/@types/AESEncryptedSecretStoragePayload.ts +29 -29
  253. package/src/@types/IIdentityServerProvider.ts +24 -24
  254. package/src/@types/PushRules.ts +208 -208
  255. package/src/@types/another-json.d.ts +19 -19
  256. package/src/@types/auth.ts +340 -258
  257. package/src/@types/beacon.ts +140 -140
  258. package/src/@types/common.ts +24 -24
  259. package/src/@types/crypto.ts +71 -71
  260. package/src/@types/event.ts +508 -449
  261. package/src/@types/events.ts +119 -119
  262. package/src/@types/extensible_events.ts +147 -147
  263. package/src/@types/local_notifications.ts +19 -19
  264. package/src/@types/location.ts +92 -92
  265. package/src/@types/matrix-sdk-crypto-wasm.d.ts +39 -39
  266. package/src/@types/media.ts +245 -245
  267. package/src/@types/membership.ts +57 -57
  268. package/src/@types/partials.ts +103 -103
  269. package/src/@types/polls.ts +120 -120
  270. package/src/@types/read_receipts.ts +61 -61
  271. package/src/@types/registration.ts +102 -102
  272. package/src/@types/search.ts +119 -119
  273. package/src/@types/signed.ts +25 -25
  274. package/src/@types/spaces.ts +37 -37
  275. package/src/@types/state_events.ts +153 -153
  276. package/src/@types/synapse.ts +40 -40
  277. package/src/@types/sync.ts +27 -27
  278. package/src/@types/threepids.ts +29 -29
  279. package/src/@types/topic.ts +69 -69
  280. package/src/@types/uia.ts +24 -24
  281. package/src/NamespacedValue.ts +121 -121
  282. package/src/ReEmitter.ts +93 -93
  283. package/src/base64.ts +86 -86
  284. package/src/briij.ts +4 -0
  285. package/src/client.ts +183 -10
  286. package/src/common-crypto/README.md +4 -4
  287. package/src/common-crypto/key-passphrase.ts +43 -43
  288. package/src/content-helpers.ts +298 -298
  289. package/src/content-repo.ts +122 -122
  290. package/src/crypto/store/base.ts +388 -388
  291. package/src/crypto/store/indexeddb-crypto-store-backend.ts +655 -655
  292. package/src/crypto/store/indexeddb-crypto-store.ts +555 -555
  293. package/src/crypto/store/localStorage-crypto-store.ts +409 -409
  294. package/src/crypto/store/memory-crypto-store.ts +326 -326
  295. package/src/crypto-api/CryptoEventHandlerMap.ts +42 -42
  296. package/src/crypto-api/key-passphrase.ts +58 -58
  297. package/src/crypto-api/keybackup.ts +114 -114
  298. package/src/crypto-api/recovery-key.ts +69 -69
  299. package/src/digest.ts +34 -34
  300. package/src/extensible_events_v1/ExtensibleEvent.ts +58 -58
  301. package/src/extensible_events_v1/InvalidEventError.ts +24 -24
  302. package/src/extensible_events_v1/MessageEvent.ts +143 -143
  303. package/src/extensible_events_v1/PollEndEvent.ts +97 -97
  304. package/src/extensible_events_v1/PollResponseEvent.ts +148 -148
  305. package/src/extensible_events_v1/PollStartEvent.ts +207 -207
  306. package/src/extensible_events_v1/utilities.ts +35 -35
  307. package/src/feature.ts +88 -88
  308. package/src/http-api/method.ts +25 -25
  309. package/src/http-api/prefix.ts +48 -48
  310. package/src/indexeddb-helpers.ts +50 -50
  311. package/src/indexeddb-worker.ts +24 -24
  312. package/src/matrixrtc/IKeyTransport.ts +63 -63
  313. package/src/matrixrtc/IMembershipManager.ts +120 -120
  314. package/src/matrixrtc/LivekitTransport.ts +46 -46
  315. package/src/matrixrtc/index.ts +24 -24
  316. package/src/matrixrtc/utils.ts +71 -71
  317. package/src/models/ToDeviceMessage.ts +38 -38
  318. package/src/models/device.ts +85 -85
  319. package/src/models/event-status.ts +39 -39
  320. package/src/models/invites-ignorer-types.ts +58 -58
  321. package/src/models/profile-keys.ts +33 -33
  322. package/src/models/room-summary.ts +78 -78
  323. package/src/models/search-result.ts +57 -57
  324. package/src/models/typed-event-emitter.ts +246 -246
  325. package/src/oidc/authorize.ts +279 -279
  326. package/src/oidc/error.ts +33 -33
  327. package/src/oidc/index.ts +33 -33
  328. package/src/oidc/register.ts +163 -163
  329. package/src/oidc/tokenRefresher.ts +184 -184
  330. package/src/oidc/validate.ts +265 -265
  331. package/src/randomstring.ts +103 -103
  332. package/src/realtime-callbacks.ts +191 -191
  333. package/src/receipt-accumulator.ts +189 -189
  334. package/src/rendezvous/RendezvousChannel.ts +48 -48
  335. package/src/rendezvous/RendezvousCode.ts +25 -25
  336. package/src/rendezvous/RendezvousError.ts +26 -26
  337. package/src/rendezvous/RendezvousFailureReason.ts +49 -49
  338. package/src/rendezvous/RendezvousIntent.ts +20 -20
  339. package/src/rendezvous/RendezvousTransport.ts +58 -58
  340. package/src/rendezvous/channels/MSC4108SecureChannel.ts +270 -270
  341. package/src/rendezvous/channels/index.ts +17 -17
  342. package/src/rendezvous/index.ts +25 -25
  343. package/src/rendezvous/transports/index.ts +17 -17
  344. package/src/rust-crypto/CrossSigningIdentity.ts +195 -195
  345. package/src/rust-crypto/OutgoingRequestsManager.ts +170 -170
  346. package/src/rust-crypto/device-converter.ts +128 -128
  347. package/src/rust-crypto/secret-storage.ts +60 -60
  348. package/src/service-types.ts +20 -20
  349. package/src/store/local-storage-events-emitter.ts +46 -46
  350. package/src/sync-accumulator.ts +779 -779
  351. package/src/thread-utils.ts +31 -31
  352. package/src/types.ts +59 -59
  353. package/src/utils/decryptAESSecretStorageItem.ts +54 -54
  354. package/src/utils/encryptAESSecretStorageItem.ts +73 -73
  355. package/src/utils/internal/deriveKeys.ts +63 -63
  356. package/src/utils/roomVersion.ts +35 -35
  357. package/src/version-support.ts +50 -50
  358. package/src/wallet-recovery.ts +252 -0
  359. package/src/webrtc/audioContext.ts +44 -44
  360. package/src/webrtc/callEventTypes.ts +101 -101
  361. package/src/webrtc/stats/callFeedStatsReporter.ts +91 -91
  362. package/src/webrtc/stats/callStatsReportGatherer.ts +219 -219
  363. package/src/webrtc/stats/callStatsReportSummary.ts +30 -30
  364. package/src/webrtc/stats/connectionStats.ts +47 -47
  365. package/src/webrtc/stats/connectionStatsBuilder.ts +28 -28
  366. package/src/webrtc/stats/connectionStatsReportBuilder.ts +140 -140
  367. package/src/webrtc/stats/groupCallStats.ts +93 -93
  368. package/src/webrtc/stats/media/mediaSsrcHandler.ts +57 -57
  369. package/src/webrtc/stats/media/mediaTrackHandler.ts +70 -70
  370. package/src/webrtc/stats/media/mediaTrackStats.ts +176 -176
  371. package/src/webrtc/stats/media/mediaTrackStatsHandler.ts +90 -90
  372. package/src/webrtc/stats/statsReport.ts +133 -133
  373. package/src/webrtc/stats/statsReportEmitter.ts +49 -49
  374. package/src/webrtc/stats/trackStatsBuilder.ts +207 -207
  375. package/src/webrtc/stats/transportStats.ts +26 -26
  376. package/src/webrtc/stats/transportStatsBuilder.ts +48 -48
  377. package/src/webrtc/stats/valueFormatter.ts +27 -27
  378. package/src/xrpl/identity.ts +245 -0
  379. package/src/xrpl/trust.ts +64 -0
  380. package/src/xrpl/verification.ts +284 -0
@@ -1,30 +1,30 @@
1
1
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
2
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
- /*
4
- Copyright 2024 The Matrix.org Foundation C.I.C.
5
-
6
- Licensed under the Apache License, Version 2.0 (the "License");
7
- you may not use this file except in compliance with the License.
8
- You may obtain a copy of the License at
9
-
10
- http://www.apache.org/licenses/LICENSE-2.0
11
-
12
- Unless required by applicable law or agreed to in writing, software
13
- distributed under the License is distributed on an "AS IS" BASIS,
14
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- See the License for the specific language governing permissions and
16
- limitations under the License.
3
+ /*
4
+ Copyright 2024 The Matrix.org Foundation C.I.C.
5
+
6
+ Licensed under the Apache License, Version 2.0 (the "License");
7
+ you may not use this file except in compliance with the License.
8
+ You may obtain a copy of the License at
9
+
10
+ http://www.apache.org/licenses/LICENSE-2.0
11
+
12
+ Unless required by applicable law or agreed to in writing, software
13
+ distributed under the License is distributed on an "AS IS" BASIS,
14
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ See the License for the specific language governing permissions and
16
+ limitations under the License.
17
17
  */
18
18
 
19
19
  import { Ecies, QrCodeData, QrCodeMode } from "@matrix-org/matrix-sdk-crypto-wasm";
20
20
  import { ClientRendezvousFailureReason, MSC4108FailureReason, RendezvousError } from "../index.js";
21
21
  import { logger } from "../../logger.js";
22
22
 
23
- /**
24
- * Prototype of the unstable [MSC4108](https://github.com/matrix-org/matrix-spec-proposals/pull/4108)
25
- * secure rendezvous session protocol.
26
- * @experimental Note that this is UNSTABLE and may have breaking changes without notice.
27
- * Imports @matrix-org/matrix-sdk-crypto-wasm so should be async-imported to avoid bundling the WASM into the main bundle.
23
+ /**
24
+ * Prototype of the unstable [MSC4108](https://github.com/matrix-org/matrix-spec-proposals/pull/4108)
25
+ * secure rendezvous session protocol.
26
+ * @experimental Note that this is UNSTABLE and may have breaking changes without notice.
27
+ * Imports @matrix-org/matrix-sdk-crypto-wasm so should be async-imported to avoid bundling the WASM into the main bundle.
28
28
  */
29
29
  export class MSC4108SecureChannel {
30
30
  constructor(rendezvousSession, theirPublicKey, onFailure) {
@@ -37,10 +37,10 @@ export class MSC4108SecureChannel {
37
37
  this.secureChannel = new Ecies();
38
38
  }
39
39
 
40
- /**
41
- * Generate a QR code for the current session.
42
- * @param mode the mode to generate the QR code in, either `Login` or `Reciprocate`.
43
- * @param serverName the name of the homeserver to connect to, as defined by server discovery in the spec, required for `Reciprocate` mode.
40
+ /**
41
+ * Generate a QR code for the current session.
42
+ * @param mode the mode to generate the QR code in, either `Login` or `Reciprocate`.
43
+ * @param serverName the name of the homeserver to connect to, as defined by server discovery in the spec, required for `Reciprocate` mode.
44
44
  */
45
45
 
46
46
  generateCode(mode, serverName) {
@@ -56,8 +56,8 @@ export class MSC4108SecureChannel {
56
56
  })();
57
57
  }
58
58
 
59
- /**
60
- * Returns the check code for the secure channel or undefined if not generated yet.
59
+ /**
60
+ * Returns the check code for the secure channel or undefined if not generated yet.
61
61
  */
62
62
  getCheckCode() {
63
63
  var _this$establishedChan;
@@ -68,8 +68,8 @@ export class MSC4108SecureChannel {
68
68
  return Array.from(x.as_bytes()).map(b => "".concat(b % 10)).join("");
69
69
  }
70
70
 
71
- /**
72
- * Connects and establishes a secure channel with the other device.
71
+ /**
72
+ * Connects and establishes a secure channel with the other device.
73
73
  */
74
74
  connect() {
75
75
  var _this2 = this;
@@ -82,28 +82,28 @@ export class MSC4108SecureChannel {
82
82
  var result = _this2.secureChannel.establish_outbound_channel(_this2.theirPublicKey, "MATRIX_QR_CODE_LOGIN_INITIATE");
83
83
  _this2.establishedChannel = result.channel;
84
84
 
85
- /*
86
- Secure Channel step 4. Device S sends the initial message
87
- Nonce := 0
88
- SH := ECDH(Ss, Gp)
89
- EncKey := HKDF_SHA256(SH, "MATRIX_QR_CODE_LOGIN|" || Gp || "|" || Sp, 0, 32)
90
- TaggedCiphertext := ChaCha20Poly1305_Encrypt(EncKey, Nonce, "MATRIX_QR_CODE_LOGIN_INITIATE")
91
- Nonce := Nonce + 2
92
- LoginInitiateMessage := UnpaddedBase64(TaggedCiphertext) || "|" || UnpaddedBase64(Sp)
85
+ /*
86
+ Secure Channel step 4. Device S sends the initial message
87
+ Nonce := 0
88
+ SH := ECDH(Ss, Gp)
89
+ EncKey := HKDF_SHA256(SH, "MATRIX_QR_CODE_LOGIN|" || Gp || "|" || Sp, 0, 32)
90
+ TaggedCiphertext := ChaCha20Poly1305_Encrypt(EncKey, Nonce, "MATRIX_QR_CODE_LOGIN_INITIATE")
91
+ Nonce := Nonce + 2
92
+ LoginInitiateMessage := UnpaddedBase64(TaggedCiphertext) || "|" || UnpaddedBase64(Sp)
93
93
  */
94
94
  {
95
95
  logger.info("Sending LoginInitiateMessage");
96
96
  yield _this2.rendezvousSession.send(result.initial_message);
97
97
  }
98
98
 
99
- /*
100
- Secure Channel step 6. Verification by Device S
101
- Nonce_G := 1
102
- (TaggedCiphertext, Sp) := Unpack(Message)
103
- Plaintext := ChaCha20Poly1305_Decrypt(EncKey, Nonce_G, TaggedCiphertext)
104
- Nonce_G := Nonce_G + 2
105
- unless Plaintext == "MATRIX_QR_CODE_LOGIN_OK":
106
- FAIL
99
+ /*
100
+ Secure Channel step 6. Verification by Device S
101
+ Nonce_G := 1
102
+ (TaggedCiphertext, Sp) := Unpack(Message)
103
+ Plaintext := ChaCha20Poly1305_Decrypt(EncKey, Nonce_G, TaggedCiphertext)
104
+ Nonce_G := Nonce_G + 2
105
+ unless Plaintext == "MATRIX_QR_CODE_LOGIN_OK":
106
+ FAIL
107
107
  */
108
108
  {
109
109
  logger.info("Waiting for LoginOkMessage");
@@ -119,14 +119,14 @@ export class MSC4108SecureChannel {
119
119
  // Step 6 is now complete. We trust the channel
120
120
  }
121
121
  } else {
122
- /*
123
- Secure Channel step 5. Device G confirms
124
- Nonce_S := 0
125
- (TaggedCiphertext, Sp) := Unpack(LoginInitiateMessage)
126
- SH := ECDH(Gs, Sp)
127
- EncKey := HKDF_SHA256(SH, "MATRIX_QR_CODE_LOGIN|" || Gp || "|" || Sp, 0, 32)
128
- Plaintext := ChaCha20Poly1305_Decrypt(EncKey, Nonce_S, TaggedCiphertext)
129
- Nonce_S := Nonce_S + 2
122
+ /*
123
+ Secure Channel step 5. Device G confirms
124
+ Nonce_S := 0
125
+ (TaggedCiphertext, Sp) := Unpack(LoginInitiateMessage)
126
+ SH := ECDH(Gs, Sp)
127
+ EncKey := HKDF_SHA256(SH, "MATRIX_QR_CODE_LOGIN|" || Gp || "|" || Sp, 0, 32)
128
+ Plaintext := ChaCha20Poly1305_Decrypt(EncKey, Nonce_S, TaggedCiphertext)
129
+ Nonce_S := Nonce_S + 2
130
130
  */
131
131
  // wait for the other side to send us their public key
132
132
  logger.info("Waiting for LoginInitiateMessage");
@@ -173,9 +173,9 @@ export class MSC4108SecureChannel {
173
173
  })();
174
174
  }
175
175
 
176
- /**
177
- * Sends a payload securely to the other device.
178
- * @param payload the payload to encrypt and send
176
+ /**
177
+ * Sends a payload securely to the other device.
178
+ * @param payload the payload to encrypt and send
179
179
  */
180
180
  secureSend(payload) {
181
181
  var _this5 = this;
@@ -189,8 +189,8 @@ export class MSC4108SecureChannel {
189
189
  })();
190
190
  }
191
191
 
192
- /**
193
- * Receives an encrypted payload from the other device and decrypts it.
192
+ /**
193
+ * Receives an encrypted payload from the other device and decrypts it.
194
194
  */
195
195
  secureReceive() {
196
196
  var _this6 = this;
@@ -209,8 +209,8 @@ export class MSC4108SecureChannel {
209
209
  })();
210
210
  }
211
211
 
212
- /**
213
- * Closes the secure channel.
212
+ /**
213
+ * Closes the secure channel.
214
214
  */
215
215
  close() {
216
216
  var _this7 = this;
@@ -219,9 +219,9 @@ export class MSC4108SecureChannel {
219
219
  })();
220
220
  }
221
221
 
222
- /**
223
- * Cancels the secure channel.
224
- * @param reason the reason for the cancellation
222
+ /**
223
+ * Cancels the secure channel.
224
+ * @param reason the reason for the cancellation
225
225
  */
226
226
  cancel(reason) {
227
227
  var _this8 = this;
@@ -236,8 +236,8 @@ export class MSC4108SecureChannel {
236
236
  })();
237
237
  }
238
238
 
239
- /**
240
- * Returns whether the rendezvous session has been cancelled.
239
+ /**
240
+ * Returns whether the rendezvous session has been cancelled.
241
241
  */
242
242
  get cancelled() {
243
243
  return this.rendezvousSession.cancelled;
@@ -1 +1 @@
1
- {"version":3,"file":"MSC4108SecureChannel.js","names":["Ecies","QrCodeData","QrCodeMode","ClientRendezvousFailureReason","MSC4108FailureReason","RendezvousError","logger","MSC4108SecureChannel","constructor","rendezvousSession","theirPublicKey","onFailure","_defineProperty","secureChannel","generateCode","mode","serverName","_this","_asyncToGenerator","url","Error","public_key","Reciprocate","undefined","toBytes","getCheckCode","_this$establishedChan","x","establishedChannel","check_code","Array","from","as_bytes","map","b","concat","join","connect","_this2","connected","result","establish_outbound_channel","channel","info","send","initial_message","ciphertext","receive","UnexpectedMessageReceived","candidateLoginOkMessage","decrypt","InsecureChannelDetected","loginInitiateMessage","message","candidateLoginInitiateMessage","establish_inbound_channel","loginOkMessage","encrypt","_this3","plaintext","_this4","secureSend","payload","_this5","stringifiedPayload","JSON","stringify","debug","type","secureReceive","_this6","json","parse","close","_this7","cancel","reason","_this8","_this8$onFailure","call","cancelled"],"sources":["../../../src/rendezvous/channels/MSC4108SecureChannel.ts"],"sourcesContent":["/*\r\nCopyright 2024 The Matrix.org Foundation C.I.C.\r\n\r\nLicensed under the Apache License, Version 2.0 (the \"License\");\r\nyou may not use this file except in compliance with the License.\r\nYou may obtain a copy of the License at\r\n\r\n http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nUnless required by applicable law or agreed to in writing, software\r\ndistributed under the License is distributed on an \"AS IS\" BASIS,\r\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\nSee the License for the specific language governing permissions and\r\nlimitations under the License.\r\n*/\r\n\r\nimport {\r\n type Curve25519PublicKey,\r\n Ecies,\r\n type EstablishedEcies,\r\n QrCodeData,\r\n QrCodeMode,\r\n} from \"@matrix-org/matrix-sdk-crypto-wasm\";\r\n\r\nimport {\r\n ClientRendezvousFailureReason,\r\n MSC4108FailureReason,\r\n type MSC4108Payload,\r\n RendezvousError,\r\n type RendezvousFailureListener,\r\n} from \"../index.ts\";\r\nimport { type MSC4108RendezvousSession } from \"../transports/MSC4108RendezvousSession.ts\";\r\nimport { logger } from \"../../logger.ts\";\r\n\r\n/**\r\n * Prototype of the unstable [MSC4108](https://github.com/matrix-org/matrix-spec-proposals/pull/4108)\r\n * secure rendezvous session protocol.\r\n * @experimental Note that this is UNSTABLE and may have breaking changes without notice.\r\n * Imports @matrix-org/matrix-sdk-crypto-wasm so should be async-imported to avoid bundling the WASM into the main bundle.\r\n */\r\nexport class MSC4108SecureChannel {\r\n private readonly secureChannel: Ecies;\r\n private establishedChannel?: EstablishedEcies;\r\n private connected = false;\r\n\r\n public constructor(\r\n private rendezvousSession: MSC4108RendezvousSession,\r\n private theirPublicKey?: Curve25519PublicKey,\r\n public onFailure?: RendezvousFailureListener,\r\n ) {\r\n this.secureChannel = new Ecies();\r\n }\r\n\r\n /**\r\n * Generate a QR code for the current session.\r\n * @param mode the mode to generate the QR code in, either `Login` or `Reciprocate`.\r\n * @param serverName the name of the homeserver to connect to, as defined by server discovery in the spec, required for `Reciprocate` mode.\r\n */\r\n public async generateCode(mode: QrCodeMode.Login): Promise<Uint8Array>;\r\n public async generateCode(mode: QrCodeMode.Reciprocate, serverName: string): Promise<Uint8Array>;\r\n public async generateCode(mode: QrCodeMode, serverName?: string): Promise<Uint8Array> {\r\n const { url } = this.rendezvousSession;\r\n\r\n if (!url) {\r\n throw new Error(\"No rendezvous session URL\");\r\n }\r\n\r\n return new QrCodeData(\r\n this.secureChannel.public_key(),\r\n url,\r\n mode === QrCodeMode.Reciprocate ? serverName : undefined,\r\n ).toBytes();\r\n }\r\n\r\n /**\r\n * Returns the check code for the secure channel or undefined if not generated yet.\r\n */\r\n public getCheckCode(): string | undefined {\r\n const x = this.establishedChannel?.check_code();\r\n\r\n if (!x) {\r\n return undefined;\r\n }\r\n return Array.from(x.as_bytes())\r\n .map((b) => `${b % 10}`)\r\n .join(\"\");\r\n }\r\n\r\n /**\r\n * Connects and establishes a secure channel with the other device.\r\n */\r\n public async connect(): Promise<void> {\r\n if (this.connected) {\r\n throw new Error(\"Channel already connected\");\r\n }\r\n\r\n if (this.theirPublicKey) {\r\n // We are the scanning device\r\n const result = this.secureChannel.establish_outbound_channel(\r\n this.theirPublicKey,\r\n \"MATRIX_QR_CODE_LOGIN_INITIATE\",\r\n );\r\n this.establishedChannel = result.channel;\r\n\r\n /*\r\n Secure Channel step 4. Device S sends the initial message\r\n\r\n Nonce := 0\r\n SH := ECDH(Ss, Gp)\r\n EncKey := HKDF_SHA256(SH, \"MATRIX_QR_CODE_LOGIN|\" || Gp || \"|\" || Sp, 0, 32)\r\n TaggedCiphertext := ChaCha20Poly1305_Encrypt(EncKey, Nonce, \"MATRIX_QR_CODE_LOGIN_INITIATE\")\r\n Nonce := Nonce + 2\r\n LoginInitiateMessage := UnpaddedBase64(TaggedCiphertext) || \"|\" || UnpaddedBase64(Sp)\r\n */\r\n {\r\n logger.info(\"Sending LoginInitiateMessage\");\r\n await this.rendezvousSession.send(result.initial_message);\r\n }\r\n\r\n /*\r\n Secure Channel step 6. Verification by Device S\r\n\r\n Nonce_G := 1\r\n (TaggedCiphertext, Sp) := Unpack(Message)\r\n Plaintext := ChaCha20Poly1305_Decrypt(EncKey, Nonce_G, TaggedCiphertext)\r\n Nonce_G := Nonce_G + 2\r\n\r\n unless Plaintext == \"MATRIX_QR_CODE_LOGIN_OK\":\r\n FAIL\r\n */\r\n {\r\n logger.info(\"Waiting for LoginOkMessage\");\r\n const ciphertext = await this.rendezvousSession.receive();\r\n\r\n if (!ciphertext) {\r\n throw new RendezvousError(\r\n \"No response from other device\",\r\n MSC4108FailureReason.UnexpectedMessageReceived,\r\n );\r\n }\r\n const candidateLoginOkMessage = await this.decrypt(ciphertext);\r\n\r\n if (candidateLoginOkMessage !== \"MATRIX_QR_CODE_LOGIN_OK\") {\r\n throw new RendezvousError(\r\n \"Invalid response from other device\",\r\n ClientRendezvousFailureReason.InsecureChannelDetected,\r\n );\r\n }\r\n\r\n // Step 6 is now complete. We trust the channel\r\n }\r\n } else {\r\n /*\r\n Secure Channel step 5. Device G confirms\r\n\r\n Nonce_S := 0\r\n (TaggedCiphertext, Sp) := Unpack(LoginInitiateMessage)\r\n SH := ECDH(Gs, Sp)\r\n EncKey := HKDF_SHA256(SH, \"MATRIX_QR_CODE_LOGIN|\" || Gp || \"|\" || Sp, 0, 32)\r\n Plaintext := ChaCha20Poly1305_Decrypt(EncKey, Nonce_S, TaggedCiphertext)\r\n Nonce_S := Nonce_S + 2\r\n */\r\n // wait for the other side to send us their public key\r\n logger.info(\"Waiting for LoginInitiateMessage\");\r\n const loginInitiateMessage = await this.rendezvousSession.receive();\r\n if (!loginInitiateMessage) {\r\n throw new Error(\"No response from other device\");\r\n }\r\n\r\n const { channel, message: candidateLoginInitiateMessage } =\r\n this.secureChannel.establish_inbound_channel(loginInitiateMessage);\r\n this.establishedChannel = channel;\r\n\r\n if (candidateLoginInitiateMessage !== \"MATRIX_QR_CODE_LOGIN_INITIATE\") {\r\n throw new RendezvousError(\r\n \"Invalid response from other device\",\r\n ClientRendezvousFailureReason.InsecureChannelDetected,\r\n );\r\n }\r\n logger.info(\"LoginInitiateMessage received\");\r\n\r\n logger.info(\"Sending LoginOkMessage\");\r\n const loginOkMessage = await this.encrypt(\"MATRIX_QR_CODE_LOGIN_OK\");\r\n await this.rendezvousSession.send(loginOkMessage);\r\n\r\n // Step 5 is complete. We don't yet trust the channel\r\n\r\n // next step will be for the user to confirm the check code on the other device\r\n }\r\n\r\n this.connected = true;\r\n }\r\n\r\n private async decrypt(ciphertext: string): Promise<string> {\r\n if (!this.establishedChannel) {\r\n throw new Error(\"Channel closed\");\r\n }\r\n\r\n return this.establishedChannel.decrypt(ciphertext);\r\n }\r\n\r\n private async encrypt(plaintext: string): Promise<string> {\r\n if (!this.establishedChannel) {\r\n throw new Error(\"Channel closed\");\r\n }\r\n\r\n return this.establishedChannel.encrypt(plaintext);\r\n }\r\n\r\n /**\r\n * Sends a payload securely to the other device.\r\n * @param payload the payload to encrypt and send\r\n */\r\n public async secureSend<T extends MSC4108Payload>(payload: T): Promise<void> {\r\n if (!this.connected) {\r\n throw new Error(\"Channel closed\");\r\n }\r\n\r\n const stringifiedPayload = JSON.stringify(payload);\r\n logger.debug(`=> {\"type\": ${JSON.stringify(payload.type)}, ...}`);\r\n\r\n await this.rendezvousSession.send(await this.encrypt(stringifiedPayload));\r\n }\r\n\r\n /**\r\n * Receives an encrypted payload from the other device and decrypts it.\r\n */\r\n public async secureReceive<T extends MSC4108Payload>(): Promise<Partial<T> | undefined> {\r\n if (!this.establishedChannel) {\r\n throw new Error(\"Channel closed\");\r\n }\r\n\r\n const ciphertext = await this.rendezvousSession.receive();\r\n if (!ciphertext) {\r\n return undefined;\r\n }\r\n const plaintext = await this.decrypt(ciphertext);\r\n const json = JSON.parse(plaintext);\r\n\r\n logger.debug(`<= {\"type\": ${JSON.stringify(json.type)}, ...}`);\r\n return json as Partial<T> | undefined;\r\n }\r\n\r\n /**\r\n * Closes the secure channel.\r\n */\r\n public async close(): Promise<void> {\r\n await this.rendezvousSession.close();\r\n }\r\n\r\n /**\r\n * Cancels the secure channel.\r\n * @param reason the reason for the cancellation\r\n */\r\n public async cancel(reason: MSC4108FailureReason | ClientRendezvousFailureReason): Promise<void> {\r\n try {\r\n await this.rendezvousSession.cancel(reason);\r\n this.onFailure?.(reason);\r\n } finally {\r\n await this.close();\r\n }\r\n }\r\n\r\n /**\r\n * Returns whether the rendezvous session has been cancelled.\r\n */\r\n public get cancelled(): boolean {\r\n return this.rendezvousSession.cancelled;\r\n }\r\n}\r\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"MSC4108SecureChannel.js","names":["Ecies","QrCodeData","QrCodeMode","ClientRendezvousFailureReason","MSC4108FailureReason","RendezvousError","logger","MSC4108SecureChannel","constructor","rendezvousSession","theirPublicKey","onFailure","_defineProperty","secureChannel","generateCode","mode","serverName","_this","_asyncToGenerator","url","Error","public_key","Reciprocate","undefined","toBytes","getCheckCode","_this$establishedChan","x","establishedChannel","check_code","Array","from","as_bytes","map","b","concat","join","connect","_this2","connected","result","establish_outbound_channel","channel","info","send","initial_message","ciphertext","receive","UnexpectedMessageReceived","candidateLoginOkMessage","decrypt","InsecureChannelDetected","loginInitiateMessage","message","candidateLoginInitiateMessage","establish_inbound_channel","loginOkMessage","encrypt","_this3","plaintext","_this4","secureSend","payload","_this5","stringifiedPayload","JSON","stringify","debug","type","secureReceive","_this6","json","parse","close","_this7","cancel","reason","_this8","_this8$onFailure","call","cancelled"],"sources":["../../../src/rendezvous/channels/MSC4108SecureChannel.ts"],"sourcesContent":["/*\nCopyright 2024 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport {\n type Curve25519PublicKey,\n Ecies,\n type EstablishedEcies,\n QrCodeData,\n QrCodeMode,\n} from \"@matrix-org/matrix-sdk-crypto-wasm\";\n\nimport {\n ClientRendezvousFailureReason,\n MSC4108FailureReason,\n type MSC4108Payload,\n RendezvousError,\n type RendezvousFailureListener,\n} from \"../index.ts\";\nimport { type MSC4108RendezvousSession } from \"../transports/MSC4108RendezvousSession.ts\";\nimport { logger } from \"../../logger.ts\";\n\n/**\n * Prototype of the unstable [MSC4108](https://github.com/matrix-org/matrix-spec-proposals/pull/4108)\n * secure rendezvous session protocol.\n * @experimental Note that this is UNSTABLE and may have breaking changes without notice.\n * Imports @matrix-org/matrix-sdk-crypto-wasm so should be async-imported to avoid bundling the WASM into the main bundle.\n */\nexport class MSC4108SecureChannel {\n private readonly secureChannel: Ecies;\n private establishedChannel?: EstablishedEcies;\n private connected = false;\n\n public constructor(\n private rendezvousSession: MSC4108RendezvousSession,\n private theirPublicKey?: Curve25519PublicKey,\n public onFailure?: RendezvousFailureListener,\n ) {\n this.secureChannel = new Ecies();\n }\n\n /**\n * Generate a QR code for the current session.\n * @param mode the mode to generate the QR code in, either `Login` or `Reciprocate`.\n * @param serverName the name of the homeserver to connect to, as defined by server discovery in the spec, required for `Reciprocate` mode.\n */\n public async generateCode(mode: QrCodeMode.Login): Promise<Uint8Array>;\n public async generateCode(mode: QrCodeMode.Reciprocate, serverName: string): Promise<Uint8Array>;\n public async generateCode(mode: QrCodeMode, serverName?: string): Promise<Uint8Array> {\n const { url } = this.rendezvousSession;\n\n if (!url) {\n throw new Error(\"No rendezvous session URL\");\n }\n\n return new QrCodeData(\n this.secureChannel.public_key(),\n url,\n mode === QrCodeMode.Reciprocate ? serverName : undefined,\n ).toBytes();\n }\n\n /**\n * Returns the check code for the secure channel or undefined if not generated yet.\n */\n public getCheckCode(): string | undefined {\n const x = this.establishedChannel?.check_code();\n\n if (!x) {\n return undefined;\n }\n return Array.from(x.as_bytes())\n .map((b) => `${b % 10}`)\n .join(\"\");\n }\n\n /**\n * Connects and establishes a secure channel with the other device.\n */\n public async connect(): Promise<void> {\n if (this.connected) {\n throw new Error(\"Channel already connected\");\n }\n\n if (this.theirPublicKey) {\n // We are the scanning device\n const result = this.secureChannel.establish_outbound_channel(\n this.theirPublicKey,\n \"MATRIX_QR_CODE_LOGIN_INITIATE\",\n );\n this.establishedChannel = result.channel;\n\n /*\n Secure Channel step 4. Device S sends the initial message\n\n Nonce := 0\n SH := ECDH(Ss, Gp)\n EncKey := HKDF_SHA256(SH, \"MATRIX_QR_CODE_LOGIN|\" || Gp || \"|\" || Sp, 0, 32)\n TaggedCiphertext := ChaCha20Poly1305_Encrypt(EncKey, Nonce, \"MATRIX_QR_CODE_LOGIN_INITIATE\")\n Nonce := Nonce + 2\n LoginInitiateMessage := UnpaddedBase64(TaggedCiphertext) || \"|\" || UnpaddedBase64(Sp)\n */\n {\n logger.info(\"Sending LoginInitiateMessage\");\n await this.rendezvousSession.send(result.initial_message);\n }\n\n /*\n Secure Channel step 6. Verification by Device S\n\n Nonce_G := 1\n (TaggedCiphertext, Sp) := Unpack(Message)\n Plaintext := ChaCha20Poly1305_Decrypt(EncKey, Nonce_G, TaggedCiphertext)\n Nonce_G := Nonce_G + 2\n\n unless Plaintext == \"MATRIX_QR_CODE_LOGIN_OK\":\n FAIL\n */\n {\n logger.info(\"Waiting for LoginOkMessage\");\n const ciphertext = await this.rendezvousSession.receive();\n\n if (!ciphertext) {\n throw new RendezvousError(\n \"No response from other device\",\n MSC4108FailureReason.UnexpectedMessageReceived,\n );\n }\n const candidateLoginOkMessage = await this.decrypt(ciphertext);\n\n if (candidateLoginOkMessage !== \"MATRIX_QR_CODE_LOGIN_OK\") {\n throw new RendezvousError(\n \"Invalid response from other device\",\n ClientRendezvousFailureReason.InsecureChannelDetected,\n );\n }\n\n // Step 6 is now complete. We trust the channel\n }\n } else {\n /*\n Secure Channel step 5. Device G confirms\n\n Nonce_S := 0\n (TaggedCiphertext, Sp) := Unpack(LoginInitiateMessage)\n SH := ECDH(Gs, Sp)\n EncKey := HKDF_SHA256(SH, \"MATRIX_QR_CODE_LOGIN|\" || Gp || \"|\" || Sp, 0, 32)\n Plaintext := ChaCha20Poly1305_Decrypt(EncKey, Nonce_S, TaggedCiphertext)\n Nonce_S := Nonce_S + 2\n */\n // wait for the other side to send us their public key\n logger.info(\"Waiting for LoginInitiateMessage\");\n const loginInitiateMessage = await this.rendezvousSession.receive();\n if (!loginInitiateMessage) {\n throw new Error(\"No response from other device\");\n }\n\n const { channel, message: candidateLoginInitiateMessage } =\n this.secureChannel.establish_inbound_channel(loginInitiateMessage);\n this.establishedChannel = channel;\n\n if (candidateLoginInitiateMessage !== \"MATRIX_QR_CODE_LOGIN_INITIATE\") {\n throw new RendezvousError(\n \"Invalid response from other device\",\n ClientRendezvousFailureReason.InsecureChannelDetected,\n );\n }\n logger.info(\"LoginInitiateMessage received\");\n\n logger.info(\"Sending LoginOkMessage\");\n const loginOkMessage = await this.encrypt(\"MATRIX_QR_CODE_LOGIN_OK\");\n await this.rendezvousSession.send(loginOkMessage);\n\n // Step 5 is complete. We don't yet trust the channel\n\n // next step will be for the user to confirm the check code on the other device\n }\n\n this.connected = true;\n }\n\n private async decrypt(ciphertext: string): Promise<string> {\n if (!this.establishedChannel) {\n throw new Error(\"Channel closed\");\n }\n\n return this.establishedChannel.decrypt(ciphertext);\n }\n\n private async encrypt(plaintext: string): Promise<string> {\n if (!this.establishedChannel) {\n throw new Error(\"Channel closed\");\n }\n\n return this.establishedChannel.encrypt(plaintext);\n }\n\n /**\n * Sends a payload securely to the other device.\n * @param payload the payload to encrypt and send\n */\n public async secureSend<T extends MSC4108Payload>(payload: T): Promise<void> {\n if (!this.connected) {\n throw new Error(\"Channel closed\");\n }\n\n const stringifiedPayload = JSON.stringify(payload);\n logger.debug(`=> {\"type\": ${JSON.stringify(payload.type)}, ...}`);\n\n await this.rendezvousSession.send(await this.encrypt(stringifiedPayload));\n }\n\n /**\n * Receives an encrypted payload from the other device and decrypts it.\n */\n public async secureReceive<T extends MSC4108Payload>(): Promise<Partial<T> | undefined> {\n if (!this.establishedChannel) {\n throw new Error(\"Channel closed\");\n }\n\n const ciphertext = await this.rendezvousSession.receive();\n if (!ciphertext) {\n return undefined;\n }\n const plaintext = await this.decrypt(ciphertext);\n const json = JSON.parse(plaintext);\n\n logger.debug(`<= {\"type\": ${JSON.stringify(json.type)}, ...}`);\n return json as Partial<T> | undefined;\n }\n\n /**\n * Closes the secure channel.\n */\n public async close(): Promise<void> {\n await this.rendezvousSession.close();\n }\n\n /**\n * Cancels the secure channel.\n * @param reason the reason for the cancellation\n */\n public async cancel(reason: MSC4108FailureReason | ClientRendezvousFailureReason): Promise<void> {\n try {\n await this.rendezvousSession.cancel(reason);\n this.onFailure?.(reason);\n } finally {\n await this.close();\n }\n }\n\n /**\n * Returns whether the rendezvous session has been cancelled.\n */\n public get cancelled(): boolean {\n return this.rendezvousSession.cancelled;\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,17 +1,17 @@
1
- /*
2
- Copyright 2022 The Matrix.org Foundation C.I.C.
3
-
4
- Licensed under the Apache License, Version 2.0 (the "License");
5
- you may not use this file except in compliance with the License.
6
- You may obtain a copy of the License at
7
-
8
- http://www.apache.org/licenses/LICENSE-2.0
9
-
10
- Unless required by applicable law or agreed to in writing, software
11
- distributed under the License is distributed on an "AS IS" BASIS,
12
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- See the License for the specific language governing permissions and
14
- limitations under the License.
1
+ /*
2
+ Copyright 2022 The Matrix.org Foundation C.I.C.
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
15
15
  */
16
16
 
17
17
  export * from "./MSC4108SecureChannel.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/rendezvous/channels/index.ts"],"sourcesContent":["/*\r\nCopyright 2022 The Matrix.org Foundation C.I.C.\r\n\r\nLicensed under the Apache License, Version 2.0 (the \"License\");\r\nyou may not use this file except in compliance with the License.\r\nYou may obtain a copy of the License at\r\n\r\n http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nUnless required by applicable law or agreed to in writing, software\r\ndistributed under the License is distributed on an \"AS IS\" BASIS,\r\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\nSee the License for the specific language governing permissions and\r\nlimitations under the License.\r\n*/\r\n\r\nexport * from \"./MSC4108SecureChannel.ts\";\r\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,cAAc,2BAA2B","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/rendezvous/channels/index.ts"],"sourcesContent":["/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nexport * from \"./MSC4108SecureChannel.ts\";\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,cAAc,2BAA2B","ignoreList":[]}
@@ -1,17 +1,17 @@
1
- /*
2
- Copyright 2022 The Matrix.org Foundation C.I.C.
3
-
4
- Licensed under the Apache License, Version 2.0 (the "License");
5
- you may not use this file except in compliance with the License.
6
- You may obtain a copy of the License at
7
-
8
- http://www.apache.org/licenses/LICENSE-2.0
9
-
10
- Unless required by applicable law or agreed to in writing, software
11
- distributed under the License is distributed on an "AS IS" BASIS,
12
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- See the License for the specific language governing permissions and
14
- limitations under the License.
1
+ /*
2
+ Copyright 2022 The Matrix.org Foundation C.I.C.
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
15
15
  */
16
16
 
17
17
  export * from "./MSC4108SignInWithQR.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/rendezvous/index.ts"],"sourcesContent":["/*\r\nCopyright 2022 The Matrix.org Foundation C.I.C.\r\n\r\nLicensed under the Apache License, Version 2.0 (the \"License\");\r\nyou may not use this file except in compliance with the License.\r\nYou may obtain a copy of the License at\r\n\r\n http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nUnless required by applicable law or agreed to in writing, software\r\ndistributed under the License is distributed on an \"AS IS\" BASIS,\r\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\nSee the License for the specific language governing permissions and\r\nlimitations under the License.\r\n*/\r\n\r\nexport * from \"./MSC4108SignInWithQR.ts\";\r\nexport type * from \"./RendezvousChannel.ts\";\r\nexport type * from \"./RendezvousCode.ts\";\r\nexport * from \"./RendezvousError.ts\";\r\nexport * from \"./RendezvousFailureReason.ts\";\r\nexport * from \"./RendezvousIntent.ts\";\r\nexport type * from \"./RendezvousTransport.ts\";\r\nexport * from \"./transports/index.ts\";\r\nexport * from \"./channels/index.ts\";\r\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,cAAc,0BAA0B;AAGxC,cAAc,sBAAsB;AACpC,cAAc,8BAA8B;AAC5C,cAAc,uBAAuB;AAErC,cAAc,uBAAuB;AACrC,cAAc,qBAAqB","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/rendezvous/index.ts"],"sourcesContent":["/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nexport * from \"./MSC4108SignInWithQR.ts\";\nexport type * from \"./RendezvousChannel.ts\";\nexport type * from \"./RendezvousCode.ts\";\nexport * from \"./RendezvousError.ts\";\nexport * from \"./RendezvousFailureReason.ts\";\nexport * from \"./RendezvousIntent.ts\";\nexport type * from \"./RendezvousTransport.ts\";\nexport * from \"./transports/index.ts\";\nexport * from \"./channels/index.ts\";\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,cAAc,0BAA0B;AAGxC,cAAc,sBAAsB;AACpC,cAAc,8BAA8B;AAC5C,cAAc,uBAAuB;AAErC,cAAc,uBAAuB;AACrC,cAAc,qBAAqB","ignoreList":[]}
@@ -1,17 +1,17 @@
1
- /*
2
- Copyright 2022 The Matrix.org Foundation C.I.C.
3
-
4
- Licensed under the Apache License, Version 2.0 (the "License");
5
- you may not use this file except in compliance with the License.
6
- You may obtain a copy of the License at
7
-
8
- http://www.apache.org/licenses/LICENSE-2.0
9
-
10
- Unless required by applicable law or agreed to in writing, software
11
- distributed under the License is distributed on an "AS IS" BASIS,
12
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- See the License for the specific language governing permissions and
14
- limitations under the License.
1
+ /*
2
+ Copyright 2022 The Matrix.org Foundation C.I.C.
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
15
15
  */
16
16
 
17
17
  export * from "./MSC4108RendezvousSession.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/rendezvous/transports/index.ts"],"sourcesContent":["/*\r\nCopyright 2022 The Matrix.org Foundation C.I.C.\r\n\r\nLicensed under the Apache License, Version 2.0 (the \"License\");\r\nyou may not use this file except in compliance with the License.\r\nYou may obtain a copy of the License at\r\n\r\n http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nUnless required by applicable law or agreed to in writing, software\r\ndistributed under the License is distributed on an \"AS IS\" BASIS,\r\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\nSee the License for the specific language governing permissions and\r\nlimitations under the License.\r\n*/\r\n\r\nexport * from \"./MSC4108RendezvousSession.ts\";\r\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,cAAc,+BAA+B","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/rendezvous/transports/index.ts"],"sourcesContent":["/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nexport * from \"./MSC4108RendezvousSession.ts\";\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,cAAc,+BAA+B","ignoreList":[]}
@@ -1,23 +1,23 @@
1
1
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
- /*
3
- Copyright 2023 The Matrix.org Foundation C.I.C.
4
-
5
- Licensed under the Apache License, Version 2.0 (the "License");
6
- you may not use this file except in compliance with the License.
7
- You may obtain a copy of the License at
8
-
9
- http://www.apache.org/licenses/LICENSE-2.0
10
-
11
- Unless required by applicable law or agreed to in writing, software
12
- distributed under the License is distributed on an "AS IS" BASIS,
13
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- See the License for the specific language governing permissions and
15
- limitations under the License.
2
+ /*
3
+ Copyright 2023 The Matrix.org Foundation C.I.C.
4
+
5
+ Licensed under the Apache License, Version 2.0 (the "License");
6
+ you may not use this file except in compliance with the License.
7
+ You may obtain a copy of the License at
8
+
9
+ http://www.apache.org/licenses/LICENSE-2.0
10
+
11
+ Unless required by applicable law or agreed to in writing, software
12
+ distributed under the License is distributed on an "AS IS" BASIS,
13
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ See the License for the specific language governing permissions and
15
+ limitations under the License.
16
16
  */
17
17
 
18
- /** Manages the cross-signing keys for our own user.
19
- *
20
- * @internal
18
+ /** Manages the cross-signing keys for our own user.
19
+ *
20
+ * @internal
21
21
  */
22
22
  export class CrossSigningIdentity {
23
23
  constructor(logger, olmMachine, outgoingRequestProcessor, secretStorage) {
@@ -27,8 +27,8 @@ export class CrossSigningIdentity {
27
27
  this.secretStorage = secretStorage;
28
28
  }
29
29
 
30
- /**
31
- * Initialise our cross-signing keys by creating new keys if they do not exist, and uploading to the server
30
+ /**
31
+ * Initialise our cross-signing keys by creating new keys if they do not exist, and uploading to the server
32
32
  */
33
33
  bootstrapCrossSigning(opts) {
34
34
  var _this = this;
@@ -98,12 +98,12 @@ export class CrossSigningIdentity {
98
98
  })();
99
99
  }
100
100
 
101
- /** Reset our cross-signing keys
102
- *
103
- * This method will:
104
- * * Tell the OlmMachine to create new keys
105
- * * Upload the new public keys and the device signature to the server
106
- * * Upload the private keys to SSSS, if it is set up
101
+ /** Reset our cross-signing keys
102
+ *
103
+ * This method will:
104
+ * * Tell the OlmMachine to create new keys
105
+ * * Upload the new public keys and the device signature to the server
106
+ * * Upload the private keys to SSSS, if it is set up
107
107
  */
108
108
  resetCrossSigning(authUploadDeviceSigningKeys) {
109
109
  var _this2 = this;
@@ -132,10 +132,10 @@ export class CrossSigningIdentity {
132
132
  })();
133
133
  }
134
134
 
135
- /**
136
- * Extract the cross-signing keys from the olm machine and save them to secret storage, if it is configured
137
- *
138
- * (If secret storage is *not* configured, we assume that the export will happen when it is set up)
135
+ /**
136
+ * Extract the cross-signing keys from the olm machine and save them to secret storage, if it is configured
137
+ *
138
+ * (If secret storage is *not* configured, we assume that the export will happen when it is set up)
139
139
  */
140
140
  exportCrossSigningKeysToStorage() {
141
141
  var _this3 = this;
@@ -1 +1 @@
1
- {"version":3,"file":"CrossSigningIdentity.js","names":["CrossSigningIdentity","constructor","logger","olmMachine","outgoingRequestProcessor","secretStorage","bootstrapCrossSigning","opts","_this","_asyncToGenerator","setupNewCrossSigning","resetCrossSigning","authUploadDeviceSigningKeys","olmDeviceStatus","crossSigningStatus","masterKeyFromSecretStorage","get","selfSigningKeyFromSecretStorage","userSigningKeyFromSecretStorage","privateKeysInSecretStorage","Boolean","olmDeviceHasKeys","hasMaster","hasUserSigning","hasSelfSigning","debug","olmDeviceHasMaster","olmDeviceHasUserSigning","olmDeviceHasSelfSigning","hasKey","warn","exportCrossSigningKeysToStorage","status","importCrossSigningKeys","Error","device","getDevice","userId","deviceId","request","verify","makeOutgoingRequest","free","_this2","outgoingRequests","req","uploadKeysRequest","uploadSigningKeysRequest","uploadSignaturesRequest","_this3","exported","exportCrossSigningKeys","masterKey","store","error","self_signing_key","userSigningKey"],"sources":["../../src/rust-crypto/CrossSigningIdentity.ts"],"sourcesContent":["/*\r\nCopyright 2023 The Matrix.org Foundation C.I.C.\r\n\r\nLicensed under the Apache License, Version 2.0 (the \"License\");\r\nyou may not use this file except in compliance with the License.\r\nYou may obtain a copy of the License at\r\n\r\n http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nUnless required by applicable law or agreed to in writing, software\r\ndistributed under the License is distributed on an \"AS IS\" BASIS,\r\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\nSee the License for the specific language governing permissions and\r\nlimitations under the License.\r\n*/\r\n\r\nimport {\r\n type OlmMachine,\r\n type CrossSigningStatus,\r\n type CrossSigningBootstrapRequests,\r\n} from \"@matrix-org/matrix-sdk-crypto-wasm\";\r\n\r\nimport type * as RustSdkCryptoJs from \"@matrix-org/matrix-sdk-crypto-wasm\";\r\nimport { type BootstrapCrossSigningOpts } from \"../crypto-api/index.ts\";\r\nimport { type Logger } from \"../logger.ts\";\r\nimport { type OutgoingRequestProcessor } from \"./OutgoingRequestProcessor.ts\";\r\nimport { type UIAuthCallback } from \"../interactive-auth.ts\";\r\nimport { type ServerSideSecretStorage } from \"../secret-storage.ts\";\r\n\r\n/** Manages the cross-signing keys for our own user.\r\n *\r\n * @internal\r\n */\r\nexport class CrossSigningIdentity {\r\n public constructor(\r\n private readonly logger: Logger,\r\n private readonly olmMachine: OlmMachine,\r\n private readonly outgoingRequestProcessor: OutgoingRequestProcessor,\r\n private readonly secretStorage: ServerSideSecretStorage,\r\n ) {}\r\n\r\n /**\r\n * Initialise our cross-signing keys by creating new keys if they do not exist, and uploading to the server\r\n */\r\n public async bootstrapCrossSigning(opts: BootstrapCrossSigningOpts): Promise<void> {\r\n if (opts.setupNewCrossSigning) {\r\n await this.resetCrossSigning(opts.authUploadDeviceSigningKeys);\r\n return;\r\n }\r\n\r\n const olmDeviceStatus: CrossSigningStatus = await this.olmMachine.crossSigningStatus();\r\n\r\n // Try to fetch cross signing keys from the secret storage\r\n const masterKeyFromSecretStorage = await this.secretStorage.get(\"m.cross_signing.master\");\r\n const selfSigningKeyFromSecretStorage = await this.secretStorage.get(\"m.cross_signing.self_signing\");\r\n const userSigningKeyFromSecretStorage = await this.secretStorage.get(\"m.cross_signing.user_signing\");\r\n const privateKeysInSecretStorage = Boolean(\r\n masterKeyFromSecretStorage && selfSigningKeyFromSecretStorage && userSigningKeyFromSecretStorage,\r\n );\r\n\r\n const olmDeviceHasKeys =\r\n olmDeviceStatus.hasMaster && olmDeviceStatus.hasUserSigning && olmDeviceStatus.hasSelfSigning;\r\n\r\n // Log all relevant state for easier parsing of debug logs.\r\n this.logger.debug(\"bootstrapCrossSigning: starting\", {\r\n setupNewCrossSigning: opts.setupNewCrossSigning,\r\n olmDeviceHasMaster: olmDeviceStatus.hasMaster,\r\n olmDeviceHasUserSigning: olmDeviceStatus.hasUserSigning,\r\n olmDeviceHasSelfSigning: olmDeviceStatus.hasSelfSigning,\r\n privateKeysInSecretStorage,\r\n });\r\n\r\n if (olmDeviceHasKeys) {\r\n if (!(await this.secretStorage.hasKey())) {\r\n this.logger.warn(\r\n \"bootstrapCrossSigning: Olm device has private keys, but secret storage is not yet set up; doing nothing for now.\",\r\n );\r\n // the keys should get uploaded to 4S once that is set up.\r\n } else if (!privateKeysInSecretStorage) {\r\n // the device has the keys but they are not in 4S, so update it\r\n this.logger.debug(\"bootstrapCrossSigning: Olm device has private keys: exporting to secret storage\");\r\n await this.exportCrossSigningKeysToStorage();\r\n } else {\r\n this.logger.debug(\r\n \"bootstrapCrossSigning: Olm device has private keys and they are saved in secret storage; doing nothing\",\r\n );\r\n }\r\n } /* (!olmDeviceHasKeys) */ else {\r\n if (privateKeysInSecretStorage) {\r\n // they are in 4S, so import from there\r\n this.logger.debug(\r\n \"bootstrapCrossSigning: Cross-signing private keys not found locally, but they are available \" +\r\n \"in secret storage, reading storage and caching locally\",\r\n );\r\n const status = await this.olmMachine.importCrossSigningKeys(\r\n masterKeyFromSecretStorage,\r\n selfSigningKeyFromSecretStorage,\r\n userSigningKeyFromSecretStorage,\r\n );\r\n\r\n // Check that `importCrossSigningKeys` worked correctly (for example, it will fail silently if the\r\n // public keys are not available).\r\n if (!status.hasMaster || !status.hasSelfSigning || !status.hasUserSigning) {\r\n throw new Error(\"importCrossSigningKeys failed to import the keys\");\r\n }\r\n\r\n // Get the current device\r\n const device: RustSdkCryptoJs.Device = (await this.olmMachine.getDevice(\r\n this.olmMachine.userId,\r\n this.olmMachine.deviceId,\r\n ))!;\r\n try {\r\n // Sign the device with our cross-signing key and upload the signature\r\n const request: RustSdkCryptoJs.SignatureUploadRequest = await device.verify();\r\n await this.outgoingRequestProcessor.makeOutgoingRequest(request);\r\n } finally {\r\n device.free();\r\n }\r\n } else {\r\n this.logger.debug(\r\n \"bootstrapCrossSigning: Cross-signing private keys not found locally or in secret storage, creating new keys\",\r\n );\r\n await this.resetCrossSigning(opts.authUploadDeviceSigningKeys);\r\n }\r\n }\r\n\r\n // TODO: we might previously have bootstrapped cross-signing but not completed uploading the keys to the\r\n // server -- in which case we should call OlmDevice.bootstrap_cross_signing. How do we know?\r\n this.logger.debug(\"bootstrapCrossSigning: complete\");\r\n }\r\n\r\n /** Reset our cross-signing keys\r\n *\r\n * This method will:\r\n * * Tell the OlmMachine to create new keys\r\n * * Upload the new public keys and the device signature to the server\r\n * * Upload the private keys to SSSS, if it is set up\r\n */\r\n private async resetCrossSigning(authUploadDeviceSigningKeys?: UIAuthCallback<void>): Promise<void> {\r\n // XXX: We must find a way to make this atomic, currently if the user does not remember his account password\r\n // or 4S passphrase/key the process will fail in a bad state, with keys rotated but not uploaded or saved in 4S.\r\n const outgoingRequests: CrossSigningBootstrapRequests = await this.olmMachine.bootstrapCrossSigning(true);\r\n\r\n // If 4S is configured we need to update it.\r\n if (!(await this.secretStorage.hasKey())) {\r\n this.logger.warn(\r\n \"resetCrossSigning: Secret storage is not yet set up; not exporting keys to secret storage yet.\",\r\n );\r\n // the keys should get uploaded to 4S once that is set up.\r\n } else {\r\n // Update 4S before uploading cross-signing keys, to stay consistent with legacy that asks\r\n // 4S passphrase before asking for account password.\r\n // Ultimately should be made atomic and resistant to forgotten password/passphrase.\r\n this.logger.debug(\"resetCrossSigning: exporting private keys to secret storage\");\r\n await this.exportCrossSigningKeysToStorage();\r\n }\r\n\r\n this.logger.debug(\"resetCrossSigning: publishing public keys to server\");\r\n for (const req of [\r\n outgoingRequests.uploadKeysRequest,\r\n outgoingRequests.uploadSigningKeysRequest,\r\n outgoingRequests.uploadSignaturesRequest,\r\n ]) {\r\n if (req) {\r\n await this.outgoingRequestProcessor.makeOutgoingRequest(req, authUploadDeviceSigningKeys);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Extract the cross-signing keys from the olm machine and save them to secret storage, if it is configured\r\n *\r\n * (If secret storage is *not* configured, we assume that the export will happen when it is set up)\r\n */\r\n private async exportCrossSigningKeysToStorage(): Promise<void> {\r\n const exported: RustSdkCryptoJs.CrossSigningKeyExport | undefined =\r\n await this.olmMachine.exportCrossSigningKeys();\r\n /* istanbul ignore else (this function is only called when we know the olm machine has keys) */\r\n if (exported?.masterKey) {\r\n await this.secretStorage.store(\"m.cross_signing.master\", exported.masterKey);\r\n } else {\r\n this.logger.error(`Cannot export MSK to secret storage, private key unknown`);\r\n }\r\n if (exported?.self_signing_key) {\r\n await this.secretStorage.store(\"m.cross_signing.self_signing\", exported.self_signing_key);\r\n } else {\r\n this.logger.error(`Cannot export SSK to secret storage, private key unknown`);\r\n }\r\n if (exported?.userSigningKey) {\r\n await this.secretStorage.store(\"m.cross_signing.user_signing\", exported.userSigningKey);\r\n } else {\r\n this.logger.error(`Cannot export USK to secret storage, private key unknown`);\r\n }\r\n }\r\n}\r\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"CrossSigningIdentity.js","names":["CrossSigningIdentity","constructor","logger","olmMachine","outgoingRequestProcessor","secretStorage","bootstrapCrossSigning","opts","_this","_asyncToGenerator","setupNewCrossSigning","resetCrossSigning","authUploadDeviceSigningKeys","olmDeviceStatus","crossSigningStatus","masterKeyFromSecretStorage","get","selfSigningKeyFromSecretStorage","userSigningKeyFromSecretStorage","privateKeysInSecretStorage","Boolean","olmDeviceHasKeys","hasMaster","hasUserSigning","hasSelfSigning","debug","olmDeviceHasMaster","olmDeviceHasUserSigning","olmDeviceHasSelfSigning","hasKey","warn","exportCrossSigningKeysToStorage","status","importCrossSigningKeys","Error","device","getDevice","userId","deviceId","request","verify","makeOutgoingRequest","free","_this2","outgoingRequests","req","uploadKeysRequest","uploadSigningKeysRequest","uploadSignaturesRequest","_this3","exported","exportCrossSigningKeys","masterKey","store","error","self_signing_key","userSigningKey"],"sources":["../../src/rust-crypto/CrossSigningIdentity.ts"],"sourcesContent":["/*\nCopyright 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport {\n type OlmMachine,\n type CrossSigningStatus,\n type CrossSigningBootstrapRequests,\n} from \"@matrix-org/matrix-sdk-crypto-wasm\";\n\nimport type * as RustSdkCryptoJs from \"@matrix-org/matrix-sdk-crypto-wasm\";\nimport { type BootstrapCrossSigningOpts } from \"../crypto-api/index.ts\";\nimport { type Logger } from \"../logger.ts\";\nimport { type OutgoingRequestProcessor } from \"./OutgoingRequestProcessor.ts\";\nimport { type UIAuthCallback } from \"../interactive-auth.ts\";\nimport { type ServerSideSecretStorage } from \"../secret-storage.ts\";\n\n/** Manages the cross-signing keys for our own user.\n *\n * @internal\n */\nexport class CrossSigningIdentity {\n public constructor(\n private readonly logger: Logger,\n private readonly olmMachine: OlmMachine,\n private readonly outgoingRequestProcessor: OutgoingRequestProcessor,\n private readonly secretStorage: ServerSideSecretStorage,\n ) {}\n\n /**\n * Initialise our cross-signing keys by creating new keys if they do not exist, and uploading to the server\n */\n public async bootstrapCrossSigning(opts: BootstrapCrossSigningOpts): Promise<void> {\n if (opts.setupNewCrossSigning) {\n await this.resetCrossSigning(opts.authUploadDeviceSigningKeys);\n return;\n }\n\n const olmDeviceStatus: CrossSigningStatus = await this.olmMachine.crossSigningStatus();\n\n // Try to fetch cross signing keys from the secret storage\n const masterKeyFromSecretStorage = await this.secretStorage.get(\"m.cross_signing.master\");\n const selfSigningKeyFromSecretStorage = await this.secretStorage.get(\"m.cross_signing.self_signing\");\n const userSigningKeyFromSecretStorage = await this.secretStorage.get(\"m.cross_signing.user_signing\");\n const privateKeysInSecretStorage = Boolean(\n masterKeyFromSecretStorage && selfSigningKeyFromSecretStorage && userSigningKeyFromSecretStorage,\n );\n\n const olmDeviceHasKeys =\n olmDeviceStatus.hasMaster && olmDeviceStatus.hasUserSigning && olmDeviceStatus.hasSelfSigning;\n\n // Log all relevant state for easier parsing of debug logs.\n this.logger.debug(\"bootstrapCrossSigning: starting\", {\n setupNewCrossSigning: opts.setupNewCrossSigning,\n olmDeviceHasMaster: olmDeviceStatus.hasMaster,\n olmDeviceHasUserSigning: olmDeviceStatus.hasUserSigning,\n olmDeviceHasSelfSigning: olmDeviceStatus.hasSelfSigning,\n privateKeysInSecretStorage,\n });\n\n if (olmDeviceHasKeys) {\n if (!(await this.secretStorage.hasKey())) {\n this.logger.warn(\n \"bootstrapCrossSigning: Olm device has private keys, but secret storage is not yet set up; doing nothing for now.\",\n );\n // the keys should get uploaded to 4S once that is set up.\n } else if (!privateKeysInSecretStorage) {\n // the device has the keys but they are not in 4S, so update it\n this.logger.debug(\"bootstrapCrossSigning: Olm device has private keys: exporting to secret storage\");\n await this.exportCrossSigningKeysToStorage();\n } else {\n this.logger.debug(\n \"bootstrapCrossSigning: Olm device has private keys and they are saved in secret storage; doing nothing\",\n );\n }\n } /* (!olmDeviceHasKeys) */ else {\n if (privateKeysInSecretStorage) {\n // they are in 4S, so import from there\n this.logger.debug(\n \"bootstrapCrossSigning: Cross-signing private keys not found locally, but they are available \" +\n \"in secret storage, reading storage and caching locally\",\n );\n const status = await this.olmMachine.importCrossSigningKeys(\n masterKeyFromSecretStorage,\n selfSigningKeyFromSecretStorage,\n userSigningKeyFromSecretStorage,\n );\n\n // Check that `importCrossSigningKeys` worked correctly (for example, it will fail silently if the\n // public keys are not available).\n if (!status.hasMaster || !status.hasSelfSigning || !status.hasUserSigning) {\n throw new Error(\"importCrossSigningKeys failed to import the keys\");\n }\n\n // Get the current device\n const device: RustSdkCryptoJs.Device = (await this.olmMachine.getDevice(\n this.olmMachine.userId,\n this.olmMachine.deviceId,\n ))!;\n try {\n // Sign the device with our cross-signing key and upload the signature\n const request: RustSdkCryptoJs.SignatureUploadRequest = await device.verify();\n await this.outgoingRequestProcessor.makeOutgoingRequest(request);\n } finally {\n device.free();\n }\n } else {\n this.logger.debug(\n \"bootstrapCrossSigning: Cross-signing private keys not found locally or in secret storage, creating new keys\",\n );\n await this.resetCrossSigning(opts.authUploadDeviceSigningKeys);\n }\n }\n\n // TODO: we might previously have bootstrapped cross-signing but not completed uploading the keys to the\n // server -- in which case we should call OlmDevice.bootstrap_cross_signing. How do we know?\n this.logger.debug(\"bootstrapCrossSigning: complete\");\n }\n\n /** Reset our cross-signing keys\n *\n * This method will:\n * * Tell the OlmMachine to create new keys\n * * Upload the new public keys and the device signature to the server\n * * Upload the private keys to SSSS, if it is set up\n */\n private async resetCrossSigning(authUploadDeviceSigningKeys?: UIAuthCallback<void>): Promise<void> {\n // XXX: We must find a way to make this atomic, currently if the user does not remember his account password\n // or 4S passphrase/key the process will fail in a bad state, with keys rotated but not uploaded or saved in 4S.\n const outgoingRequests: CrossSigningBootstrapRequests = await this.olmMachine.bootstrapCrossSigning(true);\n\n // If 4S is configured we need to update it.\n if (!(await this.secretStorage.hasKey())) {\n this.logger.warn(\n \"resetCrossSigning: Secret storage is not yet set up; not exporting keys to secret storage yet.\",\n );\n // the keys should get uploaded to 4S once that is set up.\n } else {\n // Update 4S before uploading cross-signing keys, to stay consistent with legacy that asks\n // 4S passphrase before asking for account password.\n // Ultimately should be made atomic and resistant to forgotten password/passphrase.\n this.logger.debug(\"resetCrossSigning: exporting private keys to secret storage\");\n await this.exportCrossSigningKeysToStorage();\n }\n\n this.logger.debug(\"resetCrossSigning: publishing public keys to server\");\n for (const req of [\n outgoingRequests.uploadKeysRequest,\n outgoingRequests.uploadSigningKeysRequest,\n outgoingRequests.uploadSignaturesRequest,\n ]) {\n if (req) {\n await this.outgoingRequestProcessor.makeOutgoingRequest(req, authUploadDeviceSigningKeys);\n }\n }\n }\n\n /**\n * Extract the cross-signing keys from the olm machine and save them to secret storage, if it is configured\n *\n * (If secret storage is *not* configured, we assume that the export will happen when it is set up)\n */\n private async exportCrossSigningKeysToStorage(): Promise<void> {\n const exported: RustSdkCryptoJs.CrossSigningKeyExport | undefined =\n await this.olmMachine.exportCrossSigningKeys();\n /* istanbul ignore else (this function is only called when we know the olm machine has keys) */\n if (exported?.masterKey) {\n await this.secretStorage.store(\"m.cross_signing.master\", exported.masterKey);\n } else {\n this.logger.error(`Cannot export MSK to secret storage, private key unknown`);\n }\n if (exported?.self_signing_key) {\n await this.secretStorage.store(\"m.cross_signing.self_signing\", exported.self_signing_key);\n } else {\n this.logger.error(`Cannot export SSK to secret storage, private key unknown`);\n }\n if (exported?.userSigningKey) {\n await this.secretStorage.store(\"m.cross_signing.user_signing\", exported.userSigningKey);\n } else {\n this.logger.error(`Cannot export USK to secret storage, private key unknown`);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}