@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.
- package/CHANGELOG.md +14 -1
- package/LICENSE +177 -177
- package/README.md +85 -3
- package/lib/@types/AESEncryptedSecretStoragePayload.js.map +1 -1
- package/lib/@types/IIdentityServerProvider.js.map +1 -1
- package/lib/@types/PushRules.js +14 -14
- package/lib/@types/PushRules.js.map +1 -1
- package/lib/@types/another-json.d.js.map +1 -1
- package/lib/@types/auth.d.ts +72 -1
- package/lib/@types/auth.d.ts.map +1 -1
- package/lib/@types/auth.js +57 -54
- package/lib/@types/auth.js.map +1 -1
- package/lib/@types/beacon.js +100 -100
- package/lib/@types/beacon.js.map +1 -1
- package/lib/@types/common.js.map +1 -1
- package/lib/@types/crypto.js.map +1 -1
- package/lib/@types/event.d.ts +59 -0
- package/lib/@types/event.d.ts.map +1 -1
- package/lib/@types/event.js +105 -102
- package/lib/@types/event.js.map +1 -1
- package/lib/@types/events.js.map +1 -1
- package/lib/@types/extensible_events.js +53 -53
- package/lib/@types/extensible_events.js.map +1 -1
- package/lib/@types/local_notifications.js.map +1 -1
- package/lib/@types/location.js +41 -41
- package/lib/@types/location.js.map +1 -1
- package/lib/@types/matrix-sdk-crypto-wasm.d.js.map +1 -1
- package/lib/@types/media.js.map +1 -1
- package/lib/@types/membership.js +39 -39
- package/lib/@types/membership.js.map +1 -1
- package/lib/@types/partials.js +25 -25
- package/lib/@types/partials.js.map +1 -1
- package/lib/@types/polls.js +46 -46
- package/lib/@types/polls.js.map +1 -1
- package/lib/@types/read_receipts.js +14 -14
- package/lib/@types/read_receipts.js.map +1 -1
- package/lib/@types/registration.js.map +1 -1
- package/lib/@types/search.js +14 -14
- package/lib/@types/search.js.map +1 -1
- package/lib/@types/signed.js.map +1 -1
- package/lib/@types/spaces.js.map +1 -1
- package/lib/@types/state_events.js.map +1 -1
- package/lib/@types/synapse.js.map +1 -1
- package/lib/@types/sync.js +18 -18
- package/lib/@types/sync.js.map +1 -1
- package/lib/@types/threepids.js +14 -14
- package/lib/@types/threepids.js.map +1 -1
- package/lib/@types/topic.js +47 -47
- package/lib/@types/topic.js.map +1 -1
- package/lib/@types/uia.js.map +1 -1
- package/lib/NamespacedValue.js +20 -20
- package/lib/NamespacedValue.js.map +1 -1
- package/lib/ReEmitter.js +16 -16
- package/lib/ReEmitter.js.map +1 -1
- package/lib/base64.js +32 -32
- package/lib/base64.js.map +1 -1
- package/lib/briij.d.ts +4 -0
- package/lib/briij.d.ts.map +1 -1
- package/lib/briij.js +4 -0
- package/lib/briij.js.map +1 -1
- package/lib/client.d.ts +48 -1
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +262 -108
- package/lib/client.js.map +1 -1
- package/lib/common-crypto/key-passphrase.js +19 -19
- package/lib/common-crypto/key-passphrase.js.map +1 -1
- package/lib/content-helpers.js +57 -57
- package/lib/content-helpers.js.map +1 -1
- package/lib/content-repo.js +36 -36
- package/lib/content-repo.js.map +1 -1
- package/lib/crypto/store/base.js +69 -69
- package/lib/crypto/store/base.js.map +1 -1
- package/lib/crypto/store/indexeddb-crypto-store-backend.js +58 -58
- package/lib/crypto/store/indexeddb-crypto-store-backend.js.map +1 -1
- package/lib/crypto/store/indexeddb-crypto-store.js +193 -193
- package/lib/crypto/store/indexeddb-crypto-store.js.map +1 -1
- package/lib/crypto/store/localStorage-crypto-store.js +72 -72
- package/lib/crypto/store/localStorage-crypto-store.js.map +1 -1
- package/lib/crypto/store/memory-crypto-store.js +74 -74
- package/lib/crypto/store/memory-crypto-store.js.map +1 -1
- package/lib/crypto-api/CryptoEventHandlerMap.js.map +1 -1
- package/lib/crypto-api/key-passphrase.js +22 -22
- package/lib/crypto-api/key-passphrase.js.map +1 -1
- package/lib/crypto-api/keybackup.js.map +1 -1
- package/lib/crypto-api/recovery-key.js +20 -20
- package/lib/crypto-api/recovery-key.js.map +1 -1
- package/lib/digest.js +21 -21
- package/lib/digest.js.map +1 -1
- package/lib/extensible_events_v1/ExtensibleEvent.js +39 -39
- package/lib/extensible_events_v1/ExtensibleEvent.js.map +1 -1
- package/lib/extensible_events_v1/InvalidEventError.js +16 -16
- package/lib/extensible_events_v1/InvalidEventError.js.map +1 -1
- package/lib/extensible_events_v1/MessageEvent.js +39 -39
- package/lib/extensible_events_v1/MessageEvent.js.map +1 -1
- package/lib/extensible_events_v1/PollEndEvent.js +29 -29
- package/lib/extensible_events_v1/PollEndEvent.js.map +1 -1
- package/lib/extensible_events_v1/PollResponseEvent.js +39 -39
- package/lib/extensible_events_v1/PollResponseEvent.js.map +1 -1
- package/lib/extensible_events_v1/PollStartEvent.js +52 -52
- package/lib/extensible_events_v1/PollStartEvent.js.map +1 -1
- package/lib/extensible_events_v1/utilities.js +22 -22
- package/lib/extensible_events_v1/utilities.js.map +1 -1
- package/lib/feature.js +16 -16
- package/lib/feature.js.map +1 -1
- package/lib/http-api/method.js +14 -14
- package/lib/http-api/method.js.map +1 -1
- package/lib/http-api/prefix.js +26 -26
- package/lib/http-api/prefix.js.map +1 -1
- package/lib/indexeddb-helpers.js +21 -21
- package/lib/indexeddb-helpers.js.map +1 -1
- package/lib/indexeddb-worker.js +18 -18
- package/lib/indexeddb-worker.js.map +1 -1
- package/lib/matrixrtc/IKeyTransport.js +17 -17
- package/lib/matrixrtc/IKeyTransport.js.map +1 -1
- package/lib/matrixrtc/IMembershipManager.js +27 -27
- package/lib/matrixrtc/IMembershipManager.js.map +1 -1
- package/lib/matrixrtc/LivekitTransport.js +19 -19
- package/lib/matrixrtc/LivekitTransport.js.map +1 -1
- package/lib/matrixrtc/index.js +14 -14
- package/lib/matrixrtc/index.js.map +1 -1
- package/lib/matrixrtc/utils.js +27 -27
- package/lib/matrixrtc/utils.js.map +1 -1
- package/lib/models/ToDeviceMessage.js.map +1 -1
- package/lib/models/device.js +24 -24
- package/lib/models/device.js.map +1 -1
- package/lib/models/event-status.js +17 -17
- package/lib/models/event-status.js.map +1 -1
- package/lib/models/invites-ignorer-types.js +25 -25
- package/lib/models/invites-ignorer-types.js.map +1 -1
- package/lib/models/profile-keys.js +26 -26
- package/lib/models/profile-keys.js.map +1 -1
- package/lib/models/room-summary.js +26 -26
- package/lib/models/room-summary.js.map +1 -1
- package/lib/models/search-result.js +22 -22
- package/lib/models/search-result.js.map +1 -1
- package/lib/models/typed-event-emitter.js +122 -122
- package/lib/models/typed-event-emitter.js.map +1 -1
- package/lib/oidc/authorize.js +76 -76
- package/lib/oidc/authorize.js.map +1 -1
- package/lib/oidc/error.js +17 -17
- package/lib/oidc/error.js.map +1 -1
- package/lib/oidc/index.js +17 -17
- package/lib/oidc/index.js.map +1 -1
- package/lib/oidc/register.js +41 -41
- package/lib/oidc/register.js.map +1 -1
- package/lib/oidc/tokenRefresher.js +51 -51
- package/lib/oidc/tokenRefresher.js.map +1 -1
- package/lib/oidc/validate.js +59 -59
- package/lib/oidc/validate.js.map +1 -1
- package/lib/randomstring.js +35 -35
- package/lib/randomstring.js.map +1 -1
- package/lib/realtime-callbacks.js +39 -39
- package/lib/realtime-callbacks.js.map +1 -1
- package/lib/receipt-accumulator.js +44 -44
- package/lib/receipt-accumulator.js.map +1 -1
- package/lib/rendezvous/RendezvousChannel.js.map +1 -1
- package/lib/rendezvous/RendezvousCode.js.map +1 -1
- package/lib/rendezvous/RendezvousError.js +14 -14
- package/lib/rendezvous/RendezvousError.js.map +1 -1
- package/lib/rendezvous/RendezvousFailureReason.js +14 -14
- package/lib/rendezvous/RendezvousFailureReason.js.map +1 -1
- package/lib/rendezvous/RendezvousIntent.js +14 -14
- package/lib/rendezvous/RendezvousIntent.js.map +1 -1
- package/lib/rendezvous/RendezvousTransport.js.map +1 -1
- package/lib/rendezvous/channels/MSC4108SecureChannel.js +63 -63
- package/lib/rendezvous/channels/MSC4108SecureChannel.js.map +1 -1
- package/lib/rendezvous/channels/index.js +14 -14
- package/lib/rendezvous/channels/index.js.map +1 -1
- package/lib/rendezvous/index.js +14 -14
- package/lib/rendezvous/index.js.map +1 -1
- package/lib/rendezvous/transports/index.js +14 -14
- package/lib/rendezvous/transports/index.js.map +1 -1
- package/lib/rust-crypto/CrossSigningIdentity.js +29 -29
- package/lib/rust-crypto/CrossSigningIdentity.js.map +1 -1
- package/lib/rust-crypto/OutgoingRequestsManager.js +37 -37
- package/lib/rust-crypto/OutgoingRequestsManager.js.map +1 -1
- package/lib/rust-crypto/device-converter.js +30 -30
- package/lib/rust-crypto/device-converter.js.map +1 -1
- package/lib/rust-crypto/secret-storage.js +30 -30
- package/lib/rust-crypto/secret-storage.js.map +1 -1
- package/lib/service-types.js +14 -14
- package/lib/service-types.js.map +1 -1
- package/lib/store/local-storage-events-emitter.js +21 -21
- package/lib/store/local-storage-events-emitter.js.map +1 -1
- package/lib/sync-accumulator.js +50 -50
- package/lib/sync-accumulator.js.map +1 -1
- package/lib/thread-utils.js +20 -20
- package/lib/thread-utils.js.map +1 -1
- package/lib/types.js +34 -34
- package/lib/types.js.map +1 -1
- package/lib/utils/decryptAESSecretStorageItem.js +22 -22
- package/lib/utils/decryptAESSecretStorageItem.js.map +1 -1
- package/lib/utils/encryptAESSecretStorageItem.js +26 -26
- package/lib/utils/encryptAESSecretStorageItem.js.map +1 -1
- package/lib/utils/internal/deriveKeys.js +21 -21
- package/lib/utils/internal/deriveKeys.js.map +1 -1
- package/lib/utils/roomVersion.js +26 -26
- package/lib/utils/roomVersion.js.map +1 -1
- package/lib/version-support.js +26 -26
- package/lib/version-support.js.map +1 -1
- package/lib/wallet-recovery.d.ts +24 -0
- package/lib/wallet-recovery.d.ts.map +1 -0
- package/lib/wallet-recovery.js +232 -0
- package/lib/wallet-recovery.js.map +1 -0
- package/lib/webrtc/audioContext.js +24 -24
- package/lib/webrtc/audioContext.js.map +1 -1
- package/lib/webrtc/callEventTypes.js.map +1 -1
- package/lib/webrtc/stats/callFeedStatsReporter.js +14 -14
- package/lib/webrtc/stats/callFeedStatsReporter.js.map +1 -1
- package/lib/webrtc/stats/callStatsReportGatherer.js +14 -14
- package/lib/webrtc/stats/callStatsReportGatherer.js.map +1 -1
- package/lib/webrtc/stats/callStatsReportSummary.js.map +1 -1
- package/lib/webrtc/stats/connectionStats.js +14 -14
- package/lib/webrtc/stats/connectionStats.js.map +1 -1
- package/lib/webrtc/stats/connectionStatsBuilder.js +14 -14
- package/lib/webrtc/stats/connectionStatsBuilder.js.map +1 -1
- package/lib/webrtc/stats/connectionStatsReportBuilder.js +14 -14
- package/lib/webrtc/stats/connectionStatsReportBuilder.js.map +1 -1
- package/lib/webrtc/stats/groupCallStats.js +14 -14
- package/lib/webrtc/stats/groupCallStats.js.map +1 -1
- package/lib/webrtc/stats/media/mediaSsrcHandler.js +14 -14
- package/lib/webrtc/stats/media/mediaSsrcHandler.js.map +1 -1
- package/lib/webrtc/stats/media/mediaTrackHandler.js +14 -14
- package/lib/webrtc/stats/media/mediaTrackHandler.js.map +1 -1
- package/lib/webrtc/stats/media/mediaTrackStats.js +27 -27
- package/lib/webrtc/stats/media/mediaTrackStats.js.map +1 -1
- package/lib/webrtc/stats/media/mediaTrackStatsHandler.js +20 -20
- package/lib/webrtc/stats/media/mediaTrackStatsHandler.js.map +1 -1
- package/lib/webrtc/stats/statsReport.js +14 -14
- package/lib/webrtc/stats/statsReport.js.map +1 -1
- package/lib/webrtc/stats/statsReportEmitter.js +14 -14
- package/lib/webrtc/stats/statsReportEmitter.js.map +1 -1
- package/lib/webrtc/stats/trackStatsBuilder.js +4 -4
- package/lib/webrtc/stats/trackStatsBuilder.js.map +1 -1
- package/lib/webrtc/stats/transportStats.js.map +1 -1
- package/lib/webrtc/stats/transportStatsBuilder.js.map +1 -1
- package/lib/webrtc/stats/valueFormatter.js +11 -11
- package/lib/webrtc/stats/valueFormatter.js.map +1 -1
- package/lib/xrpl/identity.d.ts +28 -0
- package/lib/xrpl/identity.d.ts.map +1 -0
- package/lib/xrpl/identity.js +213 -0
- package/lib/xrpl/identity.js.map +1 -0
- package/lib/xrpl/trust.d.ts +8 -0
- package/lib/xrpl/trust.d.ts.map +1 -0
- package/lib/xrpl/trust.js +61 -0
- package/lib/xrpl/trust.js.map +1 -0
- package/lib/xrpl/verification.d.ts +26 -0
- package/lib/xrpl/verification.d.ts.map +1 -0
- package/lib/xrpl/verification.js +295 -0
- package/lib/xrpl/verification.js.map +1 -0
- package/package.json +130 -129
- package/src/@types/AESEncryptedSecretStoragePayload.ts +29 -29
- package/src/@types/IIdentityServerProvider.ts +24 -24
- package/src/@types/PushRules.ts +208 -208
- package/src/@types/another-json.d.ts +19 -19
- package/src/@types/auth.ts +340 -258
- package/src/@types/beacon.ts +140 -140
- package/src/@types/common.ts +24 -24
- package/src/@types/crypto.ts +71 -71
- package/src/@types/event.ts +508 -449
- package/src/@types/events.ts +119 -119
- package/src/@types/extensible_events.ts +147 -147
- package/src/@types/local_notifications.ts +19 -19
- package/src/@types/location.ts +92 -92
- package/src/@types/matrix-sdk-crypto-wasm.d.ts +39 -39
- package/src/@types/media.ts +245 -245
- package/src/@types/membership.ts +57 -57
- package/src/@types/partials.ts +103 -103
- package/src/@types/polls.ts +120 -120
- package/src/@types/read_receipts.ts +61 -61
- package/src/@types/registration.ts +102 -102
- package/src/@types/search.ts +119 -119
- package/src/@types/signed.ts +25 -25
- package/src/@types/spaces.ts +37 -37
- package/src/@types/state_events.ts +153 -153
- package/src/@types/synapse.ts +40 -40
- package/src/@types/sync.ts +27 -27
- package/src/@types/threepids.ts +29 -29
- package/src/@types/topic.ts +69 -69
- package/src/@types/uia.ts +24 -24
- package/src/NamespacedValue.ts +121 -121
- package/src/ReEmitter.ts +93 -93
- package/src/base64.ts +86 -86
- package/src/briij.ts +4 -0
- package/src/client.ts +183 -10
- package/src/common-crypto/README.md +4 -4
- package/src/common-crypto/key-passphrase.ts +43 -43
- package/src/content-helpers.ts +298 -298
- package/src/content-repo.ts +122 -122
- package/src/crypto/store/base.ts +388 -388
- package/src/crypto/store/indexeddb-crypto-store-backend.ts +655 -655
- package/src/crypto/store/indexeddb-crypto-store.ts +555 -555
- package/src/crypto/store/localStorage-crypto-store.ts +409 -409
- package/src/crypto/store/memory-crypto-store.ts +326 -326
- package/src/crypto-api/CryptoEventHandlerMap.ts +42 -42
- package/src/crypto-api/key-passphrase.ts +58 -58
- package/src/crypto-api/keybackup.ts +114 -114
- package/src/crypto-api/recovery-key.ts +69 -69
- package/src/digest.ts +34 -34
- package/src/extensible_events_v1/ExtensibleEvent.ts +58 -58
- package/src/extensible_events_v1/InvalidEventError.ts +24 -24
- package/src/extensible_events_v1/MessageEvent.ts +143 -143
- package/src/extensible_events_v1/PollEndEvent.ts +97 -97
- package/src/extensible_events_v1/PollResponseEvent.ts +148 -148
- package/src/extensible_events_v1/PollStartEvent.ts +207 -207
- package/src/extensible_events_v1/utilities.ts +35 -35
- package/src/feature.ts +88 -88
- package/src/http-api/method.ts +25 -25
- package/src/http-api/prefix.ts +48 -48
- package/src/indexeddb-helpers.ts +50 -50
- package/src/indexeddb-worker.ts +24 -24
- package/src/matrixrtc/IKeyTransport.ts +63 -63
- package/src/matrixrtc/IMembershipManager.ts +120 -120
- package/src/matrixrtc/LivekitTransport.ts +46 -46
- package/src/matrixrtc/index.ts +24 -24
- package/src/matrixrtc/utils.ts +71 -71
- package/src/models/ToDeviceMessage.ts +38 -38
- package/src/models/device.ts +85 -85
- package/src/models/event-status.ts +39 -39
- package/src/models/invites-ignorer-types.ts +58 -58
- package/src/models/profile-keys.ts +33 -33
- package/src/models/room-summary.ts +78 -78
- package/src/models/search-result.ts +57 -57
- package/src/models/typed-event-emitter.ts +246 -246
- package/src/oidc/authorize.ts +279 -279
- package/src/oidc/error.ts +33 -33
- package/src/oidc/index.ts +33 -33
- package/src/oidc/register.ts +163 -163
- package/src/oidc/tokenRefresher.ts +184 -184
- package/src/oidc/validate.ts +265 -265
- package/src/randomstring.ts +103 -103
- package/src/realtime-callbacks.ts +191 -191
- package/src/receipt-accumulator.ts +189 -189
- package/src/rendezvous/RendezvousChannel.ts +48 -48
- package/src/rendezvous/RendezvousCode.ts +25 -25
- package/src/rendezvous/RendezvousError.ts +26 -26
- package/src/rendezvous/RendezvousFailureReason.ts +49 -49
- package/src/rendezvous/RendezvousIntent.ts +20 -20
- package/src/rendezvous/RendezvousTransport.ts +58 -58
- package/src/rendezvous/channels/MSC4108SecureChannel.ts +270 -270
- package/src/rendezvous/channels/index.ts +17 -17
- package/src/rendezvous/index.ts +25 -25
- package/src/rendezvous/transports/index.ts +17 -17
- package/src/rust-crypto/CrossSigningIdentity.ts +195 -195
- package/src/rust-crypto/OutgoingRequestsManager.ts +170 -170
- package/src/rust-crypto/device-converter.ts +128 -128
- package/src/rust-crypto/secret-storage.ts +60 -60
- package/src/service-types.ts +20 -20
- package/src/store/local-storage-events-emitter.ts +46 -46
- package/src/sync-accumulator.ts +779 -779
- package/src/thread-utils.ts +31 -31
- package/src/types.ts +59 -59
- package/src/utils/decryptAESSecretStorageItem.ts +54 -54
- package/src/utils/encryptAESSecretStorageItem.ts +73 -73
- package/src/utils/internal/deriveKeys.ts +63 -63
- package/src/utils/roomVersion.ts +35 -35
- package/src/version-support.ts +50 -50
- package/src/wallet-recovery.ts +252 -0
- package/src/webrtc/audioContext.ts +44 -44
- package/src/webrtc/callEventTypes.ts +101 -101
- package/src/webrtc/stats/callFeedStatsReporter.ts +91 -91
- package/src/webrtc/stats/callStatsReportGatherer.ts +219 -219
- package/src/webrtc/stats/callStatsReportSummary.ts +30 -30
- package/src/webrtc/stats/connectionStats.ts +47 -47
- package/src/webrtc/stats/connectionStatsBuilder.ts +28 -28
- package/src/webrtc/stats/connectionStatsReportBuilder.ts +140 -140
- package/src/webrtc/stats/groupCallStats.ts +93 -93
- package/src/webrtc/stats/media/mediaSsrcHandler.ts +57 -57
- package/src/webrtc/stats/media/mediaTrackHandler.ts +70 -70
- package/src/webrtc/stats/media/mediaTrackStats.ts +176 -176
- package/src/webrtc/stats/media/mediaTrackStatsHandler.ts +90 -90
- package/src/webrtc/stats/statsReport.ts +133 -133
- package/src/webrtc/stats/statsReportEmitter.ts +49 -49
- package/src/webrtc/stats/trackStatsBuilder.ts +207 -207
- package/src/webrtc/stats/transportStats.ts +26 -26
- package/src/webrtc/stats/transportStatsBuilder.ts +48 -48
- package/src/webrtc/stats/valueFormatter.ts +27 -27
- package/src/xrpl/identity.ts +245 -0
- package/src/xrpl/trust.ts +64 -0
- 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
|
-
|
|
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
|
-
|
|
102
|
-
(TaggedCiphertext, Sp) := Unpack(Message)
|
|
103
|
-
Plaintext := ChaCha20Poly1305_Decrypt(EncKey, Nonce_G, TaggedCiphertext)
|
|
104
|
-
Nonce_G := Nonce_G + 2
|
|
105
|
-
|
|
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
|
-
|
|
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":["/*\
|
|
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":[]}
|
package/lib/rendezvous/index.js
CHANGED
|
@@ -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":["/*\
|
|
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":["/*\
|
|
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":[]}
|