@protontech/drive-sdk 0.0.13 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cache/index.d.ts +1 -0
- package/dist/cache/index.js +3 -1
- package/dist/cache/index.js.map +1 -1
- package/dist/cache/memoryCache.d.ts +1 -1
- package/dist/cache/memoryCache.js +0 -1
- package/dist/cache/memoryCache.js.map +1 -1
- package/dist/cache/memoryCache.test.js +2 -4
- package/dist/cache/memoryCache.test.js.map +1 -1
- package/dist/cache/nullCache.d.ts +14 -0
- package/dist/cache/nullCache.js +36 -0
- package/dist/cache/nullCache.js.map +1 -0
- package/dist/config.d.ts +16 -1
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/dist/crypto/driveCrypto.d.ts +2 -5
- package/dist/crypto/driveCrypto.js +7 -12
- package/dist/crypto/driveCrypto.js.map +1 -1
- package/dist/crypto/driveCrypto.test.js +14 -14
- package/dist/crypto/openPGPCrypto.js +5 -3
- package/dist/crypto/openPGPCrypto.js.map +1 -1
- package/dist/diagnostic/eventsGenerator.d.ts +14 -0
- package/dist/diagnostic/eventsGenerator.js +49 -0
- package/dist/diagnostic/eventsGenerator.js.map +1 -0
- package/dist/diagnostic/httpClient.d.ts +16 -0
- package/dist/diagnostic/httpClient.js +81 -0
- package/dist/diagnostic/httpClient.js.map +1 -0
- package/dist/diagnostic/index.d.ts +10 -0
- package/dist/diagnostic/index.js +35 -0
- package/dist/diagnostic/index.js.map +1 -0
- package/dist/diagnostic/integrityVerificationStream.d.ts +21 -0
- package/dist/diagnostic/integrityVerificationStream.js +56 -0
- package/dist/diagnostic/integrityVerificationStream.js.map +1 -0
- package/dist/diagnostic/interface.d.ts +102 -0
- package/dist/diagnostic/interface.js +3 -0
- package/dist/diagnostic/interface.js.map +1 -0
- package/dist/diagnostic/sdkDiagnostic.d.ts +22 -0
- package/dist/diagnostic/sdkDiagnostic.js +222 -0
- package/dist/diagnostic/sdkDiagnostic.js.map +1 -0
- package/dist/diagnostic/sdkDiagnosticFull.d.ts +18 -0
- package/dist/diagnostic/sdkDiagnosticFull.js +35 -0
- package/dist/diagnostic/sdkDiagnosticFull.js.map +1 -0
- package/dist/diagnostic/telemetry.d.ts +25 -0
- package/dist/diagnostic/telemetry.js +70 -0
- package/dist/diagnostic/telemetry.js.map +1 -0
- package/dist/diagnostic/zipGenerators.d.ts +9 -0
- package/dist/diagnostic/zipGenerators.js +64 -0
- package/dist/diagnostic/zipGenerators.js.map +1 -0
- package/dist/diagnostic/zipGenerators.test.js +144 -0
- package/dist/diagnostic/zipGenerators.test.js.map +1 -0
- package/dist/errors.d.ts +2 -1
- package/dist/errors.js +3 -1
- package/dist/errors.js.map +1 -1
- package/dist/interface/config.d.ts +26 -0
- package/dist/interface/config.js +3 -0
- package/dist/interface/config.js.map +1 -0
- package/dist/interface/download.d.ts +2 -2
- package/dist/interface/events.d.ts +58 -20
- package/dist/interface/events.js +11 -1
- package/dist/interface/events.js.map +1 -1
- package/dist/interface/httpClient.d.ts +0 -14
- package/dist/interface/index.d.ts +11 -7
- package/dist/interface/index.js +2 -2
- package/dist/interface/index.js.map +1 -1
- package/dist/interface/nodes.d.ts +9 -0
- package/dist/interface/nodes.js.map +1 -1
- package/dist/interface/result.js.map +1 -1
- package/dist/interface/sharing.d.ts +2 -0
- package/dist/interface/sharing.js.map +1 -1
- package/dist/interface/telemetry.js +0 -8
- package/dist/interface/telemetry.js.map +1 -1
- package/dist/interface/thumbnail.js.map +1 -1
- package/dist/interface/upload.d.ts +7 -1
- package/dist/internal/apiService/apiService.d.ts +1 -1
- package/dist/internal/apiService/apiService.js +7 -11
- package/dist/internal/apiService/apiService.js.map +1 -1
- package/dist/internal/apiService/apiService.test.js +55 -48
- package/dist/internal/apiService/apiService.test.js.map +1 -1
- package/dist/internal/apiService/coreTypes.d.ts +2356 -2356
- package/dist/internal/apiService/driveTypes.d.ts +1680 -1680
- package/dist/internal/apiService/errors.js +14 -8
- package/dist/internal/apiService/errors.js.map +1 -1
- package/dist/internal/apiService/errors.test.js +17 -12
- package/dist/internal/apiService/errors.test.js.map +1 -1
- package/dist/internal/apiService/transformers.d.ts +1 -1
- package/dist/internal/apiService/transformers.js +1 -1
- package/dist/internal/asyncIteratorMap.test.js +2 -2
- package/dist/internal/asyncIteratorMap.test.js.map +1 -1
- package/dist/internal/asyncIteratorRace.d.ts +13 -0
- package/dist/internal/asyncIteratorRace.js +59 -0
- package/dist/internal/asyncIteratorRace.js.map +1 -0
- package/dist/internal/asyncIteratorRace.test.d.ts +1 -0
- package/dist/internal/asyncIteratorRace.test.js +119 -0
- package/dist/internal/asyncIteratorRace.test.js.map +1 -0
- package/dist/internal/batch.d.ts +1 -0
- package/dist/internal/batch.js +12 -0
- package/dist/internal/batch.js.map +1 -0
- package/dist/internal/batch.test.d.ts +1 -0
- package/dist/internal/batch.test.js +41 -0
- package/dist/internal/batch.test.js.map +1 -0
- package/dist/internal/batchLoading.js.map +1 -1
- package/dist/internal/batchLoading.test.js +13 -13
- package/dist/internal/batchLoading.test.js.map +1 -1
- package/dist/internal/devices/apiService.d.ts +3 -3
- package/dist/internal/devices/apiService.js +2 -2
- package/dist/internal/devices/apiService.js.map +1 -1
- package/dist/internal/devices/cryptoService.js +1 -2
- package/dist/internal/devices/cryptoService.js.map +1 -1
- package/dist/internal/devices/index.d.ts +5 -5
- package/dist/internal/devices/index.js.map +1 -1
- package/dist/internal/devices/interface.d.ts +3 -3
- package/dist/internal/devices/manager.js +2 -2
- package/dist/internal/devices/manager.js.map +1 -1
- package/dist/internal/devices/manager.test.js +38 -7
- package/dist/internal/devices/manager.test.js.map +1 -1
- package/dist/internal/download/apiService.d.ts +4 -4
- package/dist/internal/download/apiService.js +32 -32
- package/dist/internal/download/apiService.js.map +1 -1
- package/dist/internal/download/cryptoService.d.ts +4 -4
- package/dist/internal/download/cryptoService.js +6 -5
- package/dist/internal/download/cryptoService.js.map +1 -1
- package/dist/internal/download/fileDownloader.d.ts +6 -6
- package/dist/internal/download/fileDownloader.js +3 -2
- package/dist/internal/download/fileDownloader.js.map +1 -1
- package/dist/internal/download/fileDownloader.test.js +1 -1
- package/dist/internal/download/fileDownloader.test.js.map +1 -1
- package/dist/internal/download/index.d.ts +5 -5
- package/dist/internal/download/index.js +5 -5
- package/dist/internal/download/index.js.map +1 -1
- package/dist/internal/download/interface.d.ts +3 -4
- package/dist/internal/download/telemetry.d.ts +3 -3
- package/dist/internal/download/telemetry.js +4 -2
- package/dist/internal/download/telemetry.js.map +1 -1
- package/dist/internal/download/telemetry.test.js +8 -8
- package/dist/internal/download/telemetry.test.js.map +1 -1
- package/dist/internal/download/thumbnailDownloader.d.ts +4 -4
- package/dist/internal/download/thumbnailDownloader.js +6 -6
- package/dist/internal/download/thumbnailDownloader.js.map +1 -1
- package/dist/internal/download/thumbnailDownloader.test.js.map +1 -1
- package/dist/internal/errors.d.ts +1 -1
- package/dist/internal/errors.js +1 -3
- package/dist/internal/errors.js.map +1 -1
- package/dist/internal/events/apiService.d.ts +5 -7
- package/dist/internal/events/apiService.js +19 -22
- package/dist/internal/events/apiService.js.map +1 -1
- package/dist/internal/events/coreEventManager.d.ts +9 -12
- package/dist/internal/events/coreEventManager.js +19 -36
- package/dist/internal/events/coreEventManager.js.map +1 -1
- package/dist/internal/events/coreEventManager.test.d.ts +1 -0
- package/dist/internal/events/coreEventManager.test.js +87 -0
- package/dist/internal/events/coreEventManager.test.js.map +1 -0
- package/dist/internal/events/eventManager.d.ts +11 -36
- package/dist/internal/events/eventManager.js +59 -106
- package/dist/internal/events/eventManager.js.map +1 -1
- package/dist/internal/events/eventManager.test.js +177 -83
- package/dist/internal/events/eventManager.test.js.map +1 -1
- package/dist/internal/events/index.d.ts +16 -36
- package/dist/internal/events/index.js +56 -72
- package/dist/internal/events/index.js.map +1 -1
- package/dist/internal/events/interface.d.ts +59 -14
- package/dist/internal/events/interface.js +12 -3
- package/dist/internal/events/interface.js.map +1 -1
- package/dist/internal/events/volumeEventManager.d.ts +9 -19
- package/dist/internal/events/volumeEventManager.js +58 -45
- package/dist/internal/events/volumeEventManager.js.map +1 -1
- package/dist/internal/events/volumeEventManager.test.d.ts +1 -0
- package/dist/internal/events/volumeEventManager.test.js +203 -0
- package/dist/internal/events/volumeEventManager.test.js.map +1 -0
- package/dist/internal/nodes/apiService.d.ts +4 -3
- package/dist/internal/nodes/apiService.js +36 -15
- package/dist/internal/nodes/apiService.js.map +1 -1
- package/dist/internal/nodes/apiService.test.js +60 -41
- package/dist/internal/nodes/apiService.test.js.map +1 -1
- package/dist/internal/nodes/cache.d.ts +14 -5
- package/dist/internal/nodes/cache.js +31 -7
- package/dist/internal/nodes/cache.js.map +1 -1
- package/dist/internal/nodes/cache.test.js +31 -9
- package/dist/internal/nodes/cache.test.js.map +1 -1
- package/dist/internal/nodes/cryptoCache.d.ts +2 -2
- package/dist/internal/nodes/cryptoCache.js.map +1 -1
- package/dist/internal/nodes/cryptoCache.test.js +24 -4
- package/dist/internal/nodes/cryptoCache.test.js.map +1 -1
- package/dist/internal/nodes/cryptoService.d.ts +4 -4
- package/dist/internal/nodes/cryptoService.js +11 -17
- package/dist/internal/nodes/cryptoService.js.map +1 -1
- package/dist/internal/nodes/cryptoService.test.js +320 -241
- package/dist/internal/nodes/cryptoService.test.js.map +1 -1
- package/dist/internal/nodes/events.d.ts +8 -84
- package/dist/internal/nodes/events.js +43 -217
- package/dist/internal/nodes/events.js.map +1 -1
- package/dist/internal/nodes/events.test.js +35 -279
- package/dist/internal/nodes/events.test.js.map +1 -1
- package/dist/internal/nodes/extendedAttributes.d.ts +1 -1
- package/dist/internal/nodes/extendedAttributes.js +3 -1
- package/dist/internal/nodes/extendedAttributes.js.map +1 -1
- package/dist/internal/nodes/extendedAttributes.test.js +7 -10
- package/dist/internal/nodes/extendedAttributes.test.js.map +1 -1
- package/dist/internal/nodes/index.d.ts +12 -13
- package/dist/internal/nodes/index.js +5 -5
- package/dist/internal/nodes/index.js.map +1 -1
- package/dist/internal/nodes/index.test.js +24 -32
- package/dist/internal/nodes/index.test.js.map +1 -1
- package/dist/internal/nodes/interface.d.ts +2 -2
- package/dist/internal/nodes/nodesAccess.d.ts +22 -7
- package/dist/internal/nodes/nodesAccess.js +65 -16
- package/dist/internal/nodes/nodesAccess.js.map +1 -1
- package/dist/internal/nodes/nodesAccess.test.js +165 -101
- package/dist/internal/nodes/nodesAccess.test.js.map +1 -1
- package/dist/internal/nodes/nodesManagement.d.ts +7 -9
- package/dist/internal/nodes/nodesManagement.js +21 -33
- package/dist/internal/nodes/nodesManagement.js.map +1 -1
- package/dist/internal/nodes/nodesManagement.test.js +42 -21
- package/dist/internal/nodes/nodesManagement.test.js.map +1 -1
- package/dist/internal/nodes/nodesRevisions.d.ts +4 -4
- package/dist/internal/nodes/nodesRevisions.js.map +1 -1
- package/dist/internal/photos/albums.d.ts +3 -3
- package/dist/internal/photos/albums.js.map +1 -1
- package/dist/internal/photos/apiService.d.ts +1 -1
- package/dist/internal/photos/apiService.js +3 -6
- package/dist/internal/photos/apiService.js.map +1 -1
- package/dist/internal/photos/cache.d.ts +1 -1
- package/dist/internal/photos/index.d.ts +5 -5
- package/dist/internal/photos/index.js.map +1 -1
- package/dist/internal/photos/interface.d.ts +2 -2
- package/dist/internal/photos/photosTimeline.d.ts +3 -3
- package/dist/internal/photos/photosTimeline.js +1 -2
- package/dist/internal/photos/photosTimeline.js.map +1 -1
- package/dist/internal/sdkEvents.d.ts +1 -1
- package/dist/internal/sdkEvents.js +2 -7
- package/dist/internal/sdkEvents.js.map +1 -1
- package/dist/internal/sdkEvents.test.js +8 -8
- package/dist/internal/shares/apiService.d.ts +2 -2
- package/dist/internal/shares/apiService.js +5 -3
- package/dist/internal/shares/apiService.js.map +1 -1
- package/dist/internal/shares/cache.d.ts +4 -2
- package/dist/internal/shares/cache.js +14 -6
- package/dist/internal/shares/cache.js.map +1 -1
- package/dist/internal/shares/cache.test.js.map +1 -1
- package/dist/internal/shares/cryptoCache.d.ts +2 -2
- package/dist/internal/shares/cryptoCache.test.js +8 -2
- package/dist/internal/shares/cryptoCache.test.js.map +1 -1
- package/dist/internal/shares/cryptoService.d.ts +3 -3
- package/dist/internal/shares/cryptoService.js.map +1 -1
- package/dist/internal/shares/cryptoService.test.js +42 -42
- package/dist/internal/shares/cryptoService.test.js.map +1 -1
- package/dist/internal/shares/index.d.ts +4 -4
- package/dist/internal/shares/index.js.map +1 -1
- package/dist/internal/shares/interface.d.ts +2 -2
- package/dist/internal/shares/manager.d.ts +8 -7
- package/dist/internal/shares/manager.js +3 -0
- package/dist/internal/shares/manager.js.map +1 -1
- package/dist/internal/shares/manager.test.js +71 -63
- package/dist/internal/shares/manager.test.js.map +1 -1
- package/dist/internal/sharing/apiService.d.ts +4 -4
- package/dist/internal/sharing/apiService.js +5 -3
- package/dist/internal/sharing/apiService.js.map +1 -1
- package/dist/internal/sharing/cache.d.ts +1 -1
- package/dist/internal/sharing/cache.test.js +33 -33
- package/dist/internal/sharing/cryptoService.d.ts +3 -3
- package/dist/internal/sharing/cryptoService.js +3 -4
- package/dist/internal/sharing/cryptoService.js.map +1 -1
- package/dist/internal/sharing/cryptoService.test.js +39 -39
- package/dist/internal/sharing/cryptoService.test.js.map +1 -1
- package/dist/internal/sharing/events.d.ts +24 -56
- package/dist/internal/sharing/events.js +45 -138
- package/dist/internal/sharing/events.js.map +1 -1
- package/dist/internal/sharing/events.test.js +85 -189
- package/dist/internal/sharing/events.test.js.map +1 -1
- package/dist/internal/sharing/index.d.ts +8 -9
- package/dist/internal/sharing/index.js +5 -5
- package/dist/internal/sharing/index.js.map +1 -1
- package/dist/internal/sharing/interface.d.ts +8 -4
- package/dist/internal/sharing/sharingAccess.d.ts +6 -6
- package/dist/internal/sharing/sharingAccess.js +8 -4
- package/dist/internal/sharing/sharingAccess.js.map +1 -1
- package/dist/internal/sharing/sharingAccess.test.js +45 -39
- package/dist/internal/sharing/sharingAccess.test.js.map +1 -1
- package/dist/internal/sharing/sharingManagement.d.ts +5 -6
- package/dist/internal/sharing/sharingManagement.js +12 -16
- package/dist/internal/sharing/sharingManagement.js.map +1 -1
- package/dist/internal/sharing/sharingManagement.test.js +305 -286
- package/dist/internal/sharing/sharingManagement.test.js.map +1 -1
- package/dist/internal/uids.js.map +1 -1
- package/dist/internal/upload/apiService.d.ts +5 -6
- package/dist/internal/upload/apiService.js +8 -5
- package/dist/internal/upload/apiService.js.map +1 -1
- package/dist/internal/upload/blockVerifier.d.ts +3 -3
- package/dist/internal/upload/blockVerifier.js +1 -1
- package/dist/internal/upload/blockVerifier.js.map +1 -1
- package/dist/internal/upload/chunkStreamReader.test.js +6 -6
- package/dist/internal/upload/cryptoService.d.ts +4 -4
- package/dist/internal/upload/cryptoService.js +4 -4
- package/dist/internal/upload/cryptoService.js.map +1 -1
- package/dist/internal/upload/digests.js.map +1 -1
- package/dist/internal/upload/fileUploader.d.ts +6 -6
- package/dist/internal/upload/fileUploader.js.map +1 -1
- package/dist/internal/upload/fileUploader.test.js.map +1 -1
- package/dist/internal/upload/index.d.ts +6 -6
- package/dist/internal/upload/index.js +3 -3
- package/dist/internal/upload/index.js.map +1 -1
- package/dist/internal/upload/interface.d.ts +5 -3
- package/dist/internal/upload/manager.d.ts +8 -8
- package/dist/internal/upload/manager.js +23 -52
- package/dist/internal/upload/manager.js.map +1 -1
- package/dist/internal/upload/manager.test.js +185 -147
- package/dist/internal/upload/manager.test.js.map +1 -1
- package/dist/internal/upload/streamUploader.d.ts +6 -6
- package/dist/internal/upload/streamUploader.js +9 -8
- package/dist/internal/upload/streamUploader.js.map +1 -1
- package/dist/internal/upload/streamUploader.test.js +17 -12
- package/dist/internal/upload/streamUploader.test.js.map +1 -1
- package/dist/internal/upload/telemetry.d.ts +3 -3
- package/dist/internal/upload/telemetry.js +5 -3
- package/dist/internal/upload/telemetry.js.map +1 -1
- package/dist/internal/upload/telemetry.test.js +8 -8
- package/dist/internal/upload/telemetry.test.js.map +1 -1
- package/dist/protonDriveClient.d.ts +27 -170
- package/dist/protonDriveClient.js +37 -198
- package/dist/protonDriveClient.js.map +1 -1
- package/dist/protonDrivePhotosClient.js +3 -2
- package/dist/protonDrivePhotosClient.js.map +1 -1
- package/dist/telemetry.js +18 -15
- package/dist/telemetry.js.map +1 -1
- package/dist/tests/logger.js.map +1 -1
- package/dist/tests/telemetry.d.ts +1 -1
- package/dist/transformers.js +4 -2
- package/dist/transformers.js.map +1 -1
- package/package.json +3 -3
- package/src/cache/index.ts +1 -0
- package/src/cache/interface.ts +22 -22
- package/src/cache/memoryCache.test.ts +7 -7
- package/src/cache/memoryCache.ts +5 -5
- package/src/cache/nullCache.ts +38 -0
- package/src/config.ts +17 -2
- package/src/crypto/driveCrypto.test.ts +15 -15
- package/src/crypto/driveCrypto.ts +120 -156
- package/src/crypto/hmac.ts +1 -1
- package/src/crypto/interface.ts +63 -72
- package/src/crypto/openPGPCrypto.ts +76 -94
- package/src/crypto/utils.ts +1 -1
- package/src/diagnostic/eventsGenerator.ts +48 -0
- package/src/diagnostic/httpClient.ts +84 -0
- package/src/diagnostic/index.ts +40 -0
- package/src/diagnostic/integrityVerificationStream.ts +55 -0
- package/src/diagnostic/interface.ts +158 -0
- package/src/diagnostic/sdkDiagnostic.ts +249 -0
- package/src/diagnostic/sdkDiagnosticFull.ts +37 -0
- package/src/diagnostic/telemetry.ts +74 -0
- package/src/diagnostic/zipGenerators.test.ts +177 -0
- package/src/diagnostic/zipGenerators.ts +70 -0
- package/src/errors.ts +25 -22
- package/src/index.ts +3 -3
- package/src/interface/account.ts +10 -10
- package/src/interface/author.ts +6 -6
- package/src/interface/config.ts +28 -0
- package/src/interface/devices.ts +6 -6
- package/src/interface/download.ts +12 -9
- package/src/interface/events.ts +76 -25
- package/src/interface/httpClient.ts +11 -27
- package/src/interface/index.ts +81 -20
- package/src/interface/nodes.ts +67 -60
- package/src/interface/result.ts +1 -3
- package/src/interface/sharing.ts +60 -56
- package/src/interface/telemetry.ts +74 -74
- package/src/interface/thumbnail.ts +5 -6
- package/src/interface/upload.ts +25 -11
- package/src/internal/apiService/apiService.test.ts +109 -76
- package/src/internal/apiService/apiService.ts +40 -26
- package/src/internal/apiService/coreTypes.ts +2474 -2463
- package/src/internal/apiService/driveTypes.ts +1868 -1822
- package/src/internal/apiService/errorCodes.ts +4 -4
- package/src/internal/apiService/errors.test.ts +25 -23
- package/src/internal/apiService/errors.ts +15 -9
- package/src/internal/apiService/index.ts +1 -1
- package/src/internal/apiService/transformers.ts +2 -2
- package/src/internal/asyncIteratorMap.test.ts +4 -4
- package/src/internal/asyncIteratorMap.ts +1 -1
- package/src/internal/asyncIteratorRace.test.ts +149 -0
- package/src/internal/asyncIteratorRace.ts +79 -0
- package/src/internal/batch.test.ts +50 -0
- package/src/internal/batch.ts +9 -0
- package/src/internal/batchLoading.test.ts +13 -14
- package/src/internal/batchLoading.ts +8 -8
- package/src/internal/devices/apiService.ts +58 -51
- package/src/internal/devices/cryptoService.ts +22 -17
- package/src/internal/devices/index.ts +17 -10
- package/src/internal/devices/interface.ts +21 -12
- package/src/internal/devices/manager.test.ts +40 -9
- package/src/internal/devices/manager.ts +3 -3
- package/src/internal/download/apiService.ts +72 -52
- package/src/internal/download/cryptoService.ts +34 -18
- package/src/internal/download/fileDownloader.test.ts +25 -9
- package/src/internal/download/fileDownloader.ts +38 -20
- package/src/internal/download/index.ts +19 -19
- package/src/internal/download/interface.ts +19 -20
- package/src/internal/download/queue.ts +3 -3
- package/src/internal/download/telemetry.test.ts +11 -11
- package/src/internal/download/telemetry.ts +24 -14
- package/src/internal/download/thumbnailDownloader.test.ts +11 -6
- package/src/internal/download/thumbnailDownloader.ts +43 -32
- package/src/internal/errors.ts +7 -5
- package/src/internal/events/apiService.ts +46 -36
- package/src/internal/events/coreEventManager.test.ts +101 -0
- package/src/internal/events/coreEventManager.ts +26 -48
- package/src/internal/events/eventManager.test.ts +211 -93
- package/src/internal/events/eventManager.ts +72 -117
- package/src/internal/events/index.ts +71 -91
- package/src/internal/events/interface.ts +92 -29
- package/src/internal/events/volumeEventManager.test.ts +239 -0
- package/src/internal/events/volumeEventManager.ts +68 -57
- package/src/internal/nodes/apiService.test.ts +197 -147
- package/src/internal/nodes/apiService.ts +288 -174
- package/src/internal/nodes/cache.test.ts +48 -20
- package/src/internal/nodes/cache.ts +79 -45
- package/src/internal/nodes/cryptoCache.test.ts +34 -14
- package/src/internal/nodes/cryptoCache.ts +10 -5
- package/src/internal/nodes/cryptoService.test.ts +492 -351
- package/src/internal/nodes/cryptoService.ts +171 -89
- package/src/internal/nodes/events.test.ts +48 -344
- package/src/internal/nodes/events.ts +48 -254
- package/src/internal/nodes/extendedAttributes.test.ts +28 -24
- package/src/internal/nodes/extendedAttributes.ts +20 -15
- package/src/internal/nodes/index.test.ts +51 -55
- package/src/internal/nodes/index.ts +32 -22
- package/src/internal/nodes/interface.ts +44 -31
- package/src/internal/nodes/nodesAccess.test.ts +237 -130
- package/src/internal/nodes/nodesAccess.ts +113 -50
- package/src/internal/nodes/nodesManagement.test.ts +64 -39
- package/src/internal/nodes/nodesManagement.ts +51 -62
- package/src/internal/nodes/nodesRevisions.ts +7 -7
- package/src/internal/nodes/validations.ts +2 -2
- package/src/internal/photos/albums.ts +5 -5
- package/src/internal/photos/apiService.ts +4 -7
- package/src/internal/photos/cache.ts +1 -1
- package/src/internal/photos/index.ts +8 -8
- package/src/internal/photos/interface.ts +2 -2
- package/src/internal/photos/photosTimeline.ts +4 -5
- package/src/internal/sdkEvents.test.ts +10 -10
- package/src/internal/sdkEvents.ts +5 -13
- package/src/internal/shares/apiService.ts +44 -33
- package/src/internal/shares/cache.test.ts +6 -4
- package/src/internal/shares/cache.ts +25 -14
- package/src/internal/shares/cryptoCache.test.ts +17 -11
- package/src/internal/shares/cryptoCache.ts +4 -4
- package/src/internal/shares/cryptoService.test.ts +72 -74
- package/src/internal/shares/cryptoService.ts +48 -23
- package/src/internal/shares/index.ts +23 -11
- package/src/internal/shares/interface.ts +8 -8
- package/src/internal/shares/manager.test.ts +88 -80
- package/src/internal/shares/manager.ts +27 -23
- package/src/internal/sharing/apiService.ts +283 -175
- package/src/internal/sharing/cache.test.ts +35 -35
- package/src/internal/sharing/cache.ts +3 -3
- package/src/internal/sharing/cryptoService.test.ts +58 -46
- package/src/internal/sharing/cryptoService.ts +121 -83
- package/src/internal/sharing/events.test.ts +97 -207
- package/src/internal/sharing/events.ts +46 -157
- package/src/internal/sharing/index.ts +24 -16
- package/src/internal/sharing/interface.ts +46 -42
- package/src/internal/sharing/sharingAccess.test.ts +71 -65
- package/src/internal/sharing/sharingAccess.ts +39 -21
- package/src/internal/sharing/sharingManagement.test.ts +405 -335
- package/src/internal/sharing/sharingManagement.ts +144 -75
- package/src/internal/uids.ts +1 -1
- package/src/internal/upload/apiService.ts +168 -119
- package/src/internal/upload/blockVerifier.ts +8 -6
- package/src/internal/upload/chunkStreamReader.test.ts +7 -7
- package/src/internal/upload/cryptoService.ts +42 -36
- package/src/internal/upload/digests.ts +2 -2
- package/src/internal/upload/fileUploader.test.ts +15 -3
- package/src/internal/upload/fileUploader.ts +39 -17
- package/src/internal/upload/index.ts +17 -18
- package/src/internal/upload/interface.ts +79 -77
- package/src/internal/upload/manager.test.ts +222 -175
- package/src/internal/upload/manager.ts +74 -80
- package/src/internal/upload/queue.ts +3 -3
- package/src/internal/upload/streamUploader.test.ts +40 -27
- package/src/internal/upload/streamUploader.ts +87 -71
- package/src/internal/upload/telemetry.test.ts +11 -11
- package/src/internal/upload/telemetry.ts +25 -15
- package/src/internal/wait.test.ts +1 -1
- package/src/internal/wait.ts +3 -3
- package/src/protonDriveClient.ts +189 -276
- package/src/protonDrivePhotosClient.ts +20 -13
- package/src/telemetry.ts +60 -52
- package/src/tests/logger.ts +1 -1
- package/src/tests/telemetry.ts +2 -2
- package/src/transformers.ts +27 -21
- package/src/version.ts +0 -1
- package/dist/internal/events/cache.d.ts +0 -28
- package/dist/internal/events/cache.js +0 -67
- package/dist/internal/events/cache.js.map +0 -1
- package/dist/internal/events/cache.test.js +0 -43
- package/dist/internal/events/cache.test.js.map +0 -1
- package/src/internal/events/cache.test.ts +0 -47
- package/src/internal/events/cache.ts +0 -80
- /package/dist/{internal/events/cache.test.d.ts → diagnostic/zipGenerators.test.d.ts} +0 -0
|
@@ -1,7 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
OpenPGPCrypto,
|
|
3
|
+
PrivateKey,
|
|
4
|
+
PublicKey,
|
|
5
|
+
SessionKey,
|
|
6
|
+
SRPModule,
|
|
7
|
+
SRPVerifier,
|
|
8
|
+
VERIFICATION_STATUS,
|
|
9
|
+
} from './interface';
|
|
2
10
|
import { uint8ArrayToBase64String, base64StringToUint8Array } from './utils';
|
|
3
11
|
// TODO: Switch to CryptoProxy module once available.
|
|
4
|
-
import { importHmacKey, computeHmacSignature } from
|
|
12
|
+
import { importHmacKey, computeHmacSignature } from './hmac';
|
|
5
13
|
|
|
6
14
|
enum SIGNING_CONTEXTS {
|
|
7
15
|
SHARING_INVITER = 'drive.share-member.inviter',
|
|
@@ -11,7 +19,7 @@ enum SIGNING_CONTEXTS {
|
|
|
11
19
|
|
|
12
20
|
/**
|
|
13
21
|
* Drive crypto layer to provide general operations for Drive crypto.
|
|
14
|
-
*
|
|
22
|
+
*
|
|
15
23
|
* This layer focuses on providing general Drive crypto functions. Only
|
|
16
24
|
* high-level functions that are required on multiple places should be
|
|
17
25
|
* peresent. E.g., no specific implementation how keys are encrypted,
|
|
@@ -20,7 +28,10 @@ enum SIGNING_CONTEXTS {
|
|
|
20
28
|
* call with specific arguments.
|
|
21
29
|
*/
|
|
22
30
|
export class DriveCrypto {
|
|
23
|
-
constructor(
|
|
31
|
+
constructor(
|
|
32
|
+
private openPGPCrypto: OpenPGPCrypto,
|
|
33
|
+
private srpModule: SRPModule,
|
|
34
|
+
) {
|
|
24
35
|
this.openPGPCrypto = openPGPCrypto;
|
|
25
36
|
this.srpModule = srpModule;
|
|
26
37
|
}
|
|
@@ -28,11 +39,11 @@ export class DriveCrypto {
|
|
|
28
39
|
/**
|
|
29
40
|
* It generates passphrase and key that is encrypted with the
|
|
30
41
|
* generated passphrase.
|
|
31
|
-
*
|
|
42
|
+
*
|
|
32
43
|
* `encrpytionKeys` are used to generate session key, which is
|
|
33
44
|
* also used to encrypt the passphrase. The encrypted passphrase
|
|
34
45
|
* is signed with `signingKey`.
|
|
35
|
-
*
|
|
46
|
+
*
|
|
36
47
|
* @returns Object with:
|
|
37
48
|
* - encrypted (armored) data (key, passphrase and passphrase
|
|
38
49
|
* signature) for sending to the server
|
|
@@ -43,15 +54,15 @@ export class DriveCrypto {
|
|
|
43
54
|
signingKey: PrivateKey,
|
|
44
55
|
): Promise<{
|
|
45
56
|
encrypted: {
|
|
46
|
-
armoredKey: string
|
|
47
|
-
armoredPassphrase: string
|
|
48
|
-
armoredPassphraseSignature: string
|
|
49
|
-
}
|
|
57
|
+
armoredKey: string;
|
|
58
|
+
armoredPassphrase: string;
|
|
59
|
+
armoredPassphraseSignature: string;
|
|
60
|
+
};
|
|
50
61
|
decrypted: {
|
|
51
|
-
passphrase: string
|
|
52
|
-
key: PrivateKey
|
|
53
|
-
passphraseSessionKey: SessionKey
|
|
54
|
-
}
|
|
62
|
+
passphrase: string;
|
|
63
|
+
key: PrivateKey;
|
|
64
|
+
passphraseSessionKey: SessionKey;
|
|
65
|
+
};
|
|
55
66
|
}> {
|
|
56
67
|
const passphrase = this.openPGPCrypto.generatePassphrase();
|
|
57
68
|
const [{ privateKey, armoredKey }, passphraseSessionKey] = await Promise.all([
|
|
@@ -78,7 +89,7 @@ export class DriveCrypto {
|
|
|
78
89
|
passphraseSessionKey,
|
|
79
90
|
},
|
|
80
91
|
};
|
|
81
|
-
}
|
|
92
|
+
}
|
|
82
93
|
|
|
83
94
|
/**
|
|
84
95
|
* It generates content key from node key for encrypting file blocks.
|
|
@@ -86,19 +97,20 @@ export class DriveCrypto {
|
|
|
86
97
|
* @param encryptionKey - Its own node key.
|
|
87
98
|
* @returns Object with serialised key packet and decrypted session key.
|
|
88
99
|
*/
|
|
89
|
-
async generateContentKey(
|
|
90
|
-
encryptionKey: PrivateKey,
|
|
91
|
-
): Promise<{
|
|
100
|
+
async generateContentKey(encryptionKey: PrivateKey): Promise<{
|
|
92
101
|
encrypted: {
|
|
93
|
-
base64ContentKeyPacket: string
|
|
94
|
-
armoredContentKeyPacketSignature: string
|
|
95
|
-
}
|
|
102
|
+
base64ContentKeyPacket: string;
|
|
103
|
+
armoredContentKeyPacketSignature: string;
|
|
104
|
+
};
|
|
96
105
|
decrypted: {
|
|
97
|
-
contentKeyPacketSessionKey: SessionKey
|
|
98
|
-
}
|
|
106
|
+
contentKeyPacketSessionKey: SessionKey;
|
|
107
|
+
};
|
|
99
108
|
}> {
|
|
100
109
|
const contentKeyPacketSessionKey = await this.openPGPCrypto.generateSessionKey([encryptionKey]);
|
|
101
|
-
const { signature: armoredContentKeyPacketSignature } = await this.openPGPCrypto.signArmored(
|
|
110
|
+
const { signature: armoredContentKeyPacketSignature } = await this.openPGPCrypto.signArmored(
|
|
111
|
+
contentKeyPacketSessionKey.data,
|
|
112
|
+
[encryptionKey],
|
|
113
|
+
);
|
|
102
114
|
const { keyPacket } = await this.openPGPCrypto.encryptSessionKey(contentKeyPacketSessionKey, [encryptionKey]);
|
|
103
115
|
|
|
104
116
|
return {
|
|
@@ -108,7 +120,7 @@ export class DriveCrypto {
|
|
|
108
120
|
},
|
|
109
121
|
decrypted: {
|
|
110
122
|
contentKeyPacketSessionKey,
|
|
111
|
-
}
|
|
123
|
+
},
|
|
112
124
|
};
|
|
113
125
|
}
|
|
114
126
|
|
|
@@ -116,7 +128,7 @@ export class DriveCrypto {
|
|
|
116
128
|
* It encrypts passphrase with provided session and encryption keys.
|
|
117
129
|
* This should be used only for re-encrypting the passphrase with
|
|
118
130
|
* different key (e.g., moving the node to different parent).
|
|
119
|
-
*
|
|
131
|
+
*
|
|
120
132
|
* @returns Object with armored passphrase and passphrase signature.
|
|
121
133
|
*/
|
|
122
134
|
async encryptPassphrase(
|
|
@@ -125,15 +137,16 @@ export class DriveCrypto {
|
|
|
125
137
|
encryptionKeys: PrivateKey[],
|
|
126
138
|
signingKey: PrivateKey,
|
|
127
139
|
): Promise<{
|
|
128
|
-
armoredPassphrase: string
|
|
129
|
-
armoredPassphraseSignature: string
|
|
140
|
+
armoredPassphrase: string;
|
|
141
|
+
armoredPassphraseSignature: string;
|
|
130
142
|
}> {
|
|
131
|
-
const { armoredData: armoredPassphrase, armoredSignature: armoredPassphraseSignature } =
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
143
|
+
const { armoredData: armoredPassphrase, armoredSignature: armoredPassphraseSignature } =
|
|
144
|
+
await this.openPGPCrypto.encryptAndSignDetachedArmored(
|
|
145
|
+
new TextEncoder().encode(passphrase),
|
|
146
|
+
sessionKey,
|
|
147
|
+
encryptionKeys,
|
|
148
|
+
signingKey,
|
|
149
|
+
);
|
|
137
150
|
|
|
138
151
|
return {
|
|
139
152
|
armoredPassphrase,
|
|
@@ -143,15 +156,15 @@ export class DriveCrypto {
|
|
|
143
156
|
|
|
144
157
|
/**
|
|
145
158
|
* It decrypts key generated via `generateKey`.
|
|
146
|
-
*
|
|
159
|
+
*
|
|
147
160
|
* Armored data are passed from the server. `decryptionKeys` are used
|
|
148
161
|
* to decrypt the session key from the `armoredPassphrase`. Then the
|
|
149
162
|
* session key is used with `verificationKeys` to decrypt and verify
|
|
150
163
|
* the passphrase. Finally, the armored key is decrypted.
|
|
151
|
-
*
|
|
164
|
+
*
|
|
152
165
|
* Note: The function doesn't throw in case of verification issue.
|
|
153
166
|
* You have to read `verified` result and act based on that.
|
|
154
|
-
*
|
|
167
|
+
*
|
|
155
168
|
* @returns key and sessionKey for crypto usage, and verification status
|
|
156
169
|
*/
|
|
157
170
|
async decryptKey(
|
|
@@ -161,12 +174,12 @@ export class DriveCrypto {
|
|
|
161
174
|
decryptionKeys: PrivateKey[],
|
|
162
175
|
verificationKeys: PublicKey[],
|
|
163
176
|
): Promise<{
|
|
164
|
-
passphrase: string
|
|
165
|
-
key: PrivateKey
|
|
166
|
-
passphraseSessionKey: SessionKey
|
|
167
|
-
verified: VERIFICATION_STATUS
|
|
177
|
+
passphrase: string;
|
|
178
|
+
key: PrivateKey;
|
|
179
|
+
passphraseSessionKey: SessionKey;
|
|
180
|
+
verified: VERIFICATION_STATUS;
|
|
168
181
|
}> {
|
|
169
|
-
const passphraseSessionKey = await this.
|
|
182
|
+
const passphraseSessionKey = await this.openPGPCrypto.decryptArmoredSessionKey(armoredPassphrase, decryptionKeys);
|
|
170
183
|
|
|
171
184
|
const { data: decryptedPassphrase, verified } = await this.openPGPCrypto.decryptArmoredAndVerifyDetached(
|
|
172
185
|
armoredPassphrase,
|
|
@@ -177,10 +190,7 @@ export class DriveCrypto {
|
|
|
177
190
|
|
|
178
191
|
const passphrase = uint8ArrayToUtf8(decryptedPassphrase);
|
|
179
192
|
|
|
180
|
-
const key = await this.openPGPCrypto.decryptKey(
|
|
181
|
-
armoredKey,
|
|
182
|
-
passphrase,
|
|
183
|
-
);
|
|
193
|
+
const key = await this.openPGPCrypto.decryptKey(armoredKey, passphrase);
|
|
184
194
|
return {
|
|
185
195
|
passphrase,
|
|
186
196
|
key,
|
|
@@ -196,12 +206,12 @@ export class DriveCrypto {
|
|
|
196
206
|
sessionKey: SessionKey,
|
|
197
207
|
encryptionKey: PublicKey,
|
|
198
208
|
): Promise<{
|
|
199
|
-
base64KeyPacket: string
|
|
209
|
+
base64KeyPacket: string;
|
|
200
210
|
}> {
|
|
201
211
|
const { keyPacket } = await this.openPGPCrypto.encryptSessionKey(sessionKey, [encryptionKey]);
|
|
202
212
|
return {
|
|
203
213
|
base64KeyPacket: uint8ArrayToBase64String(keyPacket),
|
|
204
|
-
}
|
|
214
|
+
};
|
|
205
215
|
}
|
|
206
216
|
|
|
207
217
|
/**
|
|
@@ -215,9 +225,9 @@ export class DriveCrypto {
|
|
|
215
225
|
bcryptPassphrase: string,
|
|
216
226
|
sharePassphraseSessionKey: SessionKey,
|
|
217
227
|
): Promise<{
|
|
218
|
-
armoredPassword: string
|
|
219
|
-
base64SharePassphraseKeyPacket: string
|
|
220
|
-
srp: SRPVerifier
|
|
228
|
+
armoredPassword: string;
|
|
229
|
+
base64SharePassphraseKeyPacket: string;
|
|
230
|
+
srp: SRPVerifier;
|
|
221
231
|
}> {
|
|
222
232
|
const [{ armoredData: armoredPassword }, { keyPacket }, srp] = await Promise.all([
|
|
223
233
|
this.openPGPCrypto.encryptArmored(new TextEncoder().encode(password), [addressKey]),
|
|
@@ -234,28 +244,25 @@ export class DriveCrypto {
|
|
|
234
244
|
|
|
235
245
|
/**
|
|
236
246
|
* It decrypts the key using the password via SRP protocol.
|
|
237
|
-
*
|
|
247
|
+
*
|
|
238
248
|
* The function follows the same functionality as `decryptKey` but uses SRP
|
|
239
249
|
* protocol to decrypt the passphrase of the key. It is used for saved
|
|
240
250
|
* public links where user saved the link with password and is not direct
|
|
241
|
-
* member of the share.
|
|
242
|
-
|
|
251
|
+
* member of the share.
|
|
252
|
+
*/
|
|
243
253
|
async decryptKeyWithSrpPassword(
|
|
244
254
|
password: string,
|
|
245
255
|
salt: string,
|
|
246
256
|
armoredKey: string,
|
|
247
257
|
armoredPassphrase: string,
|
|
248
258
|
): Promise<{
|
|
249
|
-
key: PrivateKey
|
|
259
|
+
key: PrivateKey;
|
|
250
260
|
}> {
|
|
251
261
|
const keyPassword = await this.srpModule.computeKeyPassword(password, salt);
|
|
252
262
|
|
|
253
263
|
const passphrase = await this.openPGPCrypto.decryptArmoredWithPassword(armoredPassphrase, keyPassword);
|
|
254
264
|
|
|
255
|
-
const key = await this.openPGPCrypto.decryptKey(
|
|
256
|
-
armoredKey,
|
|
257
|
-
new TextDecoder().decode(passphrase),
|
|
258
|
-
);
|
|
265
|
+
const key = await this.openPGPCrypto.decryptKey(armoredKey, new TextDecoder().decode(passphrase));
|
|
259
266
|
|
|
260
267
|
return {
|
|
261
268
|
key,
|
|
@@ -264,17 +271,11 @@ export class DriveCrypto {
|
|
|
264
271
|
|
|
265
272
|
/**
|
|
266
273
|
* It decrypts session key from armored data.
|
|
267
|
-
*
|
|
274
|
+
*
|
|
268
275
|
* `decryptionKeys` are used to decrypt the session key from the `armoredData`.
|
|
269
276
|
*/
|
|
270
|
-
async decryptSessionKey(
|
|
271
|
-
armoredData
|
|
272
|
-
decryptionKeys: PrivateKey | PrivateKey[],
|
|
273
|
-
): Promise<SessionKey> {
|
|
274
|
-
const sessionKey = await this.openPGPCrypto.decryptArmoredSessionKey(
|
|
275
|
-
armoredData,
|
|
276
|
-
decryptionKeys,
|
|
277
|
-
);
|
|
277
|
+
async decryptSessionKey(armoredData: string, decryptionKeys: PrivateKey | PrivateKey[]): Promise<SessionKey> {
|
|
278
|
+
const sessionKey = await this.openPGPCrypto.decryptArmoredSessionKey(armoredData, decryptionKeys);
|
|
278
279
|
return sessionKey;
|
|
279
280
|
}
|
|
280
281
|
|
|
@@ -284,16 +285,12 @@ export class DriveCrypto {
|
|
|
284
285
|
decryptionKeys: PrivateKey | PrivateKey[],
|
|
285
286
|
verificationKeys: PublicKey[],
|
|
286
287
|
): Promise<{
|
|
287
|
-
sessionKey: SessionKey
|
|
288
|
-
verified?: VERIFICATION_STATUS
|
|
288
|
+
sessionKey: SessionKey;
|
|
289
|
+
verified?: VERIFICATION_STATUS;
|
|
289
290
|
}> {
|
|
290
|
-
|
|
291
291
|
const data = base64StringToUint8Array(base64data);
|
|
292
292
|
|
|
293
|
-
const sessionKey = await this.openPGPCrypto.decryptSessionKey(
|
|
294
|
-
data,
|
|
295
|
-
decryptionKeys,
|
|
296
|
-
);
|
|
293
|
+
const sessionKey = await this.openPGPCrypto.decryptSessionKey(data, decryptionKeys);
|
|
297
294
|
|
|
298
295
|
let verified;
|
|
299
296
|
if (armoredSignature) {
|
|
@@ -304,7 +301,7 @@ export class DriveCrypto {
|
|
|
304
301
|
return {
|
|
305
302
|
sessionKey,
|
|
306
303
|
verified,
|
|
307
|
-
}
|
|
304
|
+
};
|
|
308
305
|
}
|
|
309
306
|
|
|
310
307
|
/**
|
|
@@ -324,10 +321,7 @@ export class DriveCrypto {
|
|
|
324
321
|
|
|
325
322
|
const passphrase = uint8ArrayToUtf8(decryptedPassphrase);
|
|
326
323
|
|
|
327
|
-
const key = await this.openPGPCrypto.decryptKey(
|
|
328
|
-
armoredKey,
|
|
329
|
-
passphrase,
|
|
330
|
-
);
|
|
324
|
+
const key = await this.openPGPCrypto.decryptKey(armoredKey, passphrase);
|
|
331
325
|
|
|
332
326
|
return key;
|
|
333
327
|
}
|
|
@@ -340,7 +334,7 @@ export class DriveCrypto {
|
|
|
340
334
|
encryptionKey: PrivateKey,
|
|
341
335
|
sessionKey: SessionKey,
|
|
342
336
|
): Promise<{
|
|
343
|
-
armoredSignature: string
|
|
337
|
+
armoredSignature: string;
|
|
344
338
|
}> {
|
|
345
339
|
const { armoredData: armoredSignature } = await this.openPGPCrypto.encryptArmored(
|
|
346
340
|
signature,
|
|
@@ -349,18 +343,16 @@ export class DriveCrypto {
|
|
|
349
343
|
);
|
|
350
344
|
return {
|
|
351
345
|
armoredSignature,
|
|
352
|
-
}
|
|
346
|
+
};
|
|
353
347
|
}
|
|
354
348
|
|
|
355
349
|
/**
|
|
356
350
|
* It generates random 32 bytes that are encrypted and signed with
|
|
357
351
|
* the provided key.
|
|
358
352
|
*/
|
|
359
|
-
async generateHashKey(
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
armoredHashKey: string,
|
|
363
|
-
hashKey: Uint8Array,
|
|
353
|
+
async generateHashKey(encryptionAndSigningKey: PrivateKey): Promise<{
|
|
354
|
+
armoredHashKey: string;
|
|
355
|
+
hashKey: Uint8Array;
|
|
364
356
|
}> {
|
|
365
357
|
// Once all clients can use non-ascii bytes, switch to simple
|
|
366
358
|
// generating of random bytes without encoding it into base64:
|
|
@@ -377,7 +369,7 @@ export class DriveCrypto {
|
|
|
377
369
|
return {
|
|
378
370
|
armoredHashKey,
|
|
379
371
|
hashKey,
|
|
380
|
-
}
|
|
372
|
+
};
|
|
381
373
|
}
|
|
382
374
|
|
|
383
375
|
async generateLookupHash(newName: string, parentHashKey: Uint8Array): Promise<string> {
|
|
@@ -401,7 +393,7 @@ export class DriveCrypto {
|
|
|
401
393
|
encryptionKey: PrivateKey | undefined,
|
|
402
394
|
signingKey: PrivateKey,
|
|
403
395
|
): Promise<{
|
|
404
|
-
armoredNodeName: string
|
|
396
|
+
armoredNodeName: string;
|
|
405
397
|
}> {
|
|
406
398
|
if (!sessionKey && !encryptionKey) {
|
|
407
399
|
throw new Error('Neither session nor encryption key provided for encrypting node name');
|
|
@@ -415,12 +407,12 @@ export class DriveCrypto {
|
|
|
415
407
|
);
|
|
416
408
|
return {
|
|
417
409
|
armoredNodeName,
|
|
418
|
-
}
|
|
410
|
+
};
|
|
419
411
|
}
|
|
420
412
|
|
|
421
413
|
/**
|
|
422
414
|
* It decrypts armored node name and verifies embeded signature.
|
|
423
|
-
*
|
|
415
|
+
*
|
|
424
416
|
* Note: The function doesn't throw in case of verification issue.
|
|
425
417
|
* You have to read `verified` result and act based on that.
|
|
426
418
|
*/
|
|
@@ -429,8 +421,8 @@ export class DriveCrypto {
|
|
|
429
421
|
decryptionKey: PrivateKey,
|
|
430
422
|
verificationKeys: PublicKey[],
|
|
431
423
|
): Promise<{
|
|
432
|
-
name: string
|
|
433
|
-
verified: VERIFICATION_STATUS
|
|
424
|
+
name: string;
|
|
425
|
+
verified: VERIFICATION_STATUS;
|
|
434
426
|
}> {
|
|
435
427
|
const { data: name, verified } = await this.openPGPCrypto.decryptArmoredAndVerify(
|
|
436
428
|
armoredNodeName,
|
|
@@ -440,12 +432,12 @@ export class DriveCrypto {
|
|
|
440
432
|
return {
|
|
441
433
|
name: uint8ArrayToUtf8(name),
|
|
442
434
|
verified,
|
|
443
|
-
}
|
|
435
|
+
};
|
|
444
436
|
}
|
|
445
437
|
|
|
446
438
|
/**
|
|
447
439
|
* It decrypts armored node hash key and verifies embeded signature.
|
|
448
|
-
*
|
|
440
|
+
*
|
|
449
441
|
* Note: The function doesn't throw in case of verification issue.
|
|
450
442
|
* You have to read `verified` result and act based on that.
|
|
451
443
|
*/
|
|
@@ -454,8 +446,8 @@ export class DriveCrypto {
|
|
|
454
446
|
decryptionAndVerificationKey: PrivateKey,
|
|
455
447
|
extraVerificationKeys: PublicKey[],
|
|
456
448
|
): Promise<{
|
|
457
|
-
hashKey: Uint8Array
|
|
458
|
-
verified: VERIFICATION_STATUS
|
|
449
|
+
hashKey: Uint8Array;
|
|
450
|
+
verified: VERIFICATION_STATUS;
|
|
459
451
|
}> {
|
|
460
452
|
// In the past, we had misunderstanding what key is used to sign hash
|
|
461
453
|
// key. Originally, it meant to be the node key, which web used for all
|
|
@@ -479,7 +471,7 @@ export class DriveCrypto {
|
|
|
479
471
|
encryptionKey: PrivateKey,
|
|
480
472
|
signingKey: PrivateKey,
|
|
481
473
|
): Promise<{
|
|
482
|
-
armoredExtendedAttributes: string
|
|
474
|
+
armoredExtendedAttributes: string;
|
|
483
475
|
}> {
|
|
484
476
|
const { armoredData: armoredExtendedAttributes } = await this.openPGPCrypto.encryptAndSignArmored(
|
|
485
477
|
new TextEncoder().encode(extendedAttributes),
|
|
@@ -497,8 +489,8 @@ export class DriveCrypto {
|
|
|
497
489
|
decryptionKey: PrivateKey,
|
|
498
490
|
verificationKeys: PublicKey[],
|
|
499
491
|
): Promise<{
|
|
500
|
-
extendedAttributes: string
|
|
501
|
-
verified: VERIFICATION_STATUS
|
|
492
|
+
extendedAttributes: string;
|
|
493
|
+
verified: VERIFICATION_STATUS;
|
|
502
494
|
}> {
|
|
503
495
|
const { data: decryptedExtendedAttributes, verified } = await this.openPGPCrypto.decryptArmoredAndVerify(
|
|
504
496
|
armoreExtendedAttributes,
|
|
@@ -517,29 +509,29 @@ export class DriveCrypto {
|
|
|
517
509
|
encryptionKey: PublicKey,
|
|
518
510
|
signingKey: PrivateKey,
|
|
519
511
|
): Promise<{
|
|
520
|
-
base64KeyPacket: string
|
|
521
|
-
base64KeyPacketSignature: string
|
|
512
|
+
base64KeyPacket: string;
|
|
513
|
+
base64KeyPacketSignature: string;
|
|
522
514
|
}> {
|
|
523
515
|
const { keyPacket } = await this.openPGPCrypto.encryptSessionKey(shareSessionKey, encryptionKey);
|
|
524
516
|
const { signature: keyPacketSignature } = await this.openPGPCrypto.sign(
|
|
525
517
|
keyPacket,
|
|
526
518
|
signingKey,
|
|
527
519
|
SIGNING_CONTEXTS.SHARING_INVITER,
|
|
528
|
-
)
|
|
520
|
+
);
|
|
529
521
|
return {
|
|
530
522
|
base64KeyPacket: uint8ArrayToBase64String(keyPacket),
|
|
531
523
|
base64KeyPacketSignature: uint8ArrayToBase64String(keyPacketSignature),
|
|
532
|
-
}
|
|
524
|
+
};
|
|
533
525
|
}
|
|
534
526
|
|
|
535
527
|
async acceptInvitation(
|
|
536
528
|
base64KeyPacket: string,
|
|
537
529
|
signingKey: PrivateKey,
|
|
538
530
|
): Promise<{
|
|
539
|
-
base64SessionKeySignature: string
|
|
531
|
+
base64SessionKeySignature: string;
|
|
540
532
|
}> {
|
|
541
|
-
const sessionKey = await this.decryptSessionKey(
|
|
542
|
-
base64KeyPacket,
|
|
533
|
+
const sessionKey = await this.openPGPCrypto.decryptSessionKey(
|
|
534
|
+
base64StringToUint8Array(base64KeyPacket),
|
|
543
535
|
signingKey,
|
|
544
536
|
);
|
|
545
537
|
|
|
@@ -551,7 +543,7 @@ export class DriveCrypto {
|
|
|
551
543
|
|
|
552
544
|
return {
|
|
553
545
|
base64SessionKeySignature: uint8ArrayToBase64String(signature),
|
|
554
|
-
}
|
|
546
|
+
};
|
|
555
547
|
}
|
|
556
548
|
|
|
557
549
|
async encryptExternalInvitation(
|
|
@@ -559,7 +551,7 @@ export class DriveCrypto {
|
|
|
559
551
|
signingKey: PrivateKey,
|
|
560
552
|
inviteeEmail: string,
|
|
561
553
|
): Promise<{
|
|
562
|
-
base64ExternalInvitationSignature: string
|
|
554
|
+
base64ExternalInvitationSignature: string;
|
|
563
555
|
}> {
|
|
564
556
|
const data = inviteeEmail.concat('|').concat(uint8ArrayToBase64String(shareSessionKey.data));
|
|
565
557
|
|
|
@@ -567,10 +559,10 @@ export class DriveCrypto {
|
|
|
567
559
|
new TextEncoder().encode(data),
|
|
568
560
|
signingKey,
|
|
569
561
|
SIGNING_CONTEXTS.SHARING_INVITER_EXTERNAL_INVITATION,
|
|
570
|
-
)
|
|
562
|
+
);
|
|
571
563
|
return {
|
|
572
564
|
base64ExternalInvitationSignature: uint8ArrayToBase64String(externalInviationSignature),
|
|
573
|
-
}
|
|
565
|
+
};
|
|
574
566
|
}
|
|
575
567
|
|
|
576
568
|
async encryptThumbnailBlock(
|
|
@@ -578,7 +570,7 @@ export class DriveCrypto {
|
|
|
578
570
|
sessionKey: SessionKey,
|
|
579
571
|
signingKey: PrivateKey,
|
|
580
572
|
): Promise<{
|
|
581
|
-
encryptedData: Uint8Array
|
|
573
|
+
encryptedData: Uint8Array;
|
|
582
574
|
}> {
|
|
583
575
|
const { encryptedData } = await this.openPGPCrypto.encryptAndSign(
|
|
584
576
|
thumbnailData,
|
|
@@ -597,8 +589,8 @@ export class DriveCrypto {
|
|
|
597
589
|
sessionKey: SessionKey,
|
|
598
590
|
verificationKeys: PublicKey[],
|
|
599
591
|
): Promise<{
|
|
600
|
-
decryptedThumbnail: Uint8Array
|
|
601
|
-
verified: VERIFICATION_STATUS
|
|
592
|
+
decryptedThumbnail: Uint8Array;
|
|
593
|
+
verified: VERIFICATION_STATUS;
|
|
602
594
|
}> {
|
|
603
595
|
const { data: decryptedThumbnail, verified } = await this.openPGPCrypto.decryptAndVerify(
|
|
604
596
|
encryptedThumbnail,
|
|
@@ -617,8 +609,8 @@ export class DriveCrypto {
|
|
|
617
609
|
sessionKey: SessionKey,
|
|
618
610
|
signingKey: PrivateKey,
|
|
619
611
|
): Promise<{
|
|
620
|
-
encryptedData: Uint8Array
|
|
621
|
-
armoredSignature: string
|
|
612
|
+
encryptedData: Uint8Array;
|
|
613
|
+
armoredSignature: string;
|
|
622
614
|
}> {
|
|
623
615
|
const { encryptedData, signature } = await this.openPGPCrypto.encryptAndSignDetached(
|
|
624
616
|
blockData,
|
|
@@ -637,45 +629,27 @@ export class DriveCrypto {
|
|
|
637
629
|
|
|
638
630
|
async decryptBlock(
|
|
639
631
|
encryptedBlock: Uint8Array,
|
|
640
|
-
armoredSignature: string | undefined,
|
|
641
|
-
decryptionKey: PrivateKey,
|
|
642
632
|
sessionKey: SessionKey,
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
decryptedBlock: Uint8Array,
|
|
646
|
-
verified: VERIFICATION_STATUS,
|
|
647
|
-
}> {
|
|
648
|
-
const signature = armoredSignature ? await this.openPGPCrypto.decryptArmored(
|
|
649
|
-
armoredSignature,
|
|
650
|
-
[decryptionKey],
|
|
651
|
-
) : undefined;
|
|
652
|
-
|
|
653
|
-
const { data: decryptedBlock, verified } = await this.openPGPCrypto.decryptAndVerifyDetached(
|
|
633
|
+
): Promise<Uint8Array> {
|
|
634
|
+
const { data: decryptedBlock } = await this.openPGPCrypto.decryptAndVerify(
|
|
654
635
|
encryptedBlock,
|
|
655
|
-
signature,
|
|
656
636
|
sessionKey,
|
|
657
|
-
|
|
637
|
+
[],
|
|
658
638
|
);
|
|
659
639
|
|
|
660
|
-
return
|
|
661
|
-
decryptedBlock,
|
|
662
|
-
verified,
|
|
663
|
-
};
|
|
640
|
+
return decryptedBlock;
|
|
664
641
|
}
|
|
665
642
|
|
|
666
643
|
async signManifest(
|
|
667
644
|
manifest: Uint8Array,
|
|
668
645
|
signingKey: PrivateKey,
|
|
669
646
|
): Promise<{
|
|
670
|
-
armoredManifestSignature: string
|
|
647
|
+
armoredManifestSignature: string;
|
|
671
648
|
}> {
|
|
672
|
-
const { signature: armoredManifestSignature } = await this.openPGPCrypto.signArmored(
|
|
673
|
-
manifest,
|
|
674
|
-
signingKey,
|
|
675
|
-
);
|
|
649
|
+
const { signature: armoredManifestSignature } = await this.openPGPCrypto.signArmored(manifest, signingKey);
|
|
676
650
|
return {
|
|
677
651
|
armoredManifestSignature,
|
|
678
|
-
}
|
|
652
|
+
};
|
|
679
653
|
}
|
|
680
654
|
|
|
681
655
|
async verifyManifest(
|
|
@@ -683,26 +657,16 @@ export class DriveCrypto {
|
|
|
683
657
|
armoredSignature: string,
|
|
684
658
|
verificationKeys: PublicKey | PublicKey[],
|
|
685
659
|
): Promise<{
|
|
686
|
-
verified: VERIFICATION_STATUS
|
|
660
|
+
verified: VERIFICATION_STATUS;
|
|
687
661
|
}> {
|
|
688
|
-
const { verified } = await this.openPGPCrypto.verify(
|
|
689
|
-
manifest,
|
|
690
|
-
armoredSignature,
|
|
691
|
-
verificationKeys,
|
|
692
|
-
);
|
|
662
|
+
const { verified } = await this.openPGPCrypto.verify(manifest, armoredSignature, verificationKeys);
|
|
693
663
|
return {
|
|
694
664
|
verified,
|
|
695
|
-
}
|
|
665
|
+
};
|
|
696
666
|
}
|
|
697
667
|
|
|
698
|
-
async decryptShareUrlPassword(
|
|
699
|
-
armoredPassword
|
|
700
|
-
decryptionKeys: PrivateKey[],
|
|
701
|
-
): Promise<string> {
|
|
702
|
-
const password = await this.openPGPCrypto.decryptArmored(
|
|
703
|
-
armoredPassword,
|
|
704
|
-
decryptionKeys,
|
|
705
|
-
);
|
|
668
|
+
async decryptShareUrlPassword(armoredPassword: string, decryptionKeys: PrivateKey[]): Promise<string> {
|
|
669
|
+
const password = await this.openPGPCrypto.decryptArmored(armoredPassword, decryptionKeys);
|
|
706
670
|
return uint8ArrayToUtf8(password);
|
|
707
671
|
}
|
|
708
672
|
}
|
package/src/crypto/hmac.ts
CHANGED
|
@@ -9,7 +9,7 @@ type HmacKeyUsage = 'sign' | 'verify';
|
|
|
9
9
|
*/
|
|
10
10
|
export const importHmacKey = async (
|
|
11
11
|
key: Uint8Array,
|
|
12
|
-
keyUsage: HmacKeyUsage[] = ['sign', 'verify']
|
|
12
|
+
keyUsage: HmacKeyUsage[] = ['sign', 'verify'],
|
|
13
13
|
): Promise<HmacCryptoKey> => {
|
|
14
14
|
// From https://datatracker.ietf.org/doc/html/rfc2104:
|
|
15
15
|
// The key for HMAC can be of any length (keys longer than B bytes are first hashed using H).
|