@protontech/drive-sdk 0.0.10
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/README.md +17 -0
- package/dist/cache/index.d.ts +2 -0
- package/dist/cache/index.js +6 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/interface.d.ts +105 -0
- package/dist/cache/interface.js +3 -0
- package/dist/cache/interface.js.map +1 -0
- package/dist/cache/memoryCache.d.ts +18 -0
- package/dist/cache/memoryCache.js +78 -0
- package/dist/cache/memoryCache.js.map +1 -0
- package/dist/cache/memoryCache.test.d.ts +1 -0
- package/dist/cache/memoryCache.test.js +121 -0
- package/dist/cache/memoryCache.test.js.map +1 -0
- package/dist/config.d.ts +2 -0
- package/dist/config.js +11 -0
- package/dist/config.js.map +1 -0
- package/dist/crypto/driveCrypto.d.ts +209 -0
- package/dist/crypto/driveCrypto.js +364 -0
- package/dist/crypto/driveCrypto.js.map +1 -0
- package/dist/crypto/driveCrypto.test.d.ts +1 -0
- package/dist/crypto/driveCrypto.test.js +42 -0
- package/dist/crypto/driveCrypto.test.js.map +1 -0
- package/dist/crypto/hmac.d.ts +22 -0
- package/dist/crypto/hmac.js +44 -0
- package/dist/crypto/hmac.js.map +1 -0
- package/dist/crypto/index.d.ts +6 -0
- package/dist/crypto/index.js +13 -0
- package/dist/crypto/index.js.map +1 -0
- package/dist/crypto/interface.d.ts +125 -0
- package/dist/crypto/interface.js +10 -0
- package/dist/crypto/interface.js.map +1 -0
- package/dist/crypto/openPGPCrypto.d.ts +145 -0
- package/dist/crypto/openPGPCrypto.js +250 -0
- package/dist/crypto/openPGPCrypto.js.map +1 -0
- package/dist/crypto/utils.d.ts +2 -0
- package/dist/crypto/utils.js +35 -0
- package/dist/crypto/utils.js.map +1 -0
- package/dist/errors.d.ts +138 -0
- package/dist/errors.js +163 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.js +48 -0
- package/dist/index.js.map +1 -0
- package/dist/interface/account.d.ts +36 -0
- package/dist/interface/account.js +3 -0
- package/dist/interface/account.js.map +1 -0
- package/dist/interface/author.d.ts +26 -0
- package/dist/interface/author.js +3 -0
- package/dist/interface/author.js.map +1 -0
- package/dist/interface/devices.d.ts +18 -0
- package/dist/interface/devices.js +10 -0
- package/dist/interface/devices.js.map +1 -0
- package/dist/interface/download.d.ts +29 -0
- package/dist/interface/download.js +3 -0
- package/dist/interface/download.js.map +1 -0
- package/dist/interface/events.d.ts +26 -0
- package/dist/interface/events.js +11 -0
- package/dist/interface/events.js.map +1 -0
- package/dist/interface/httpClient.d.ts +38 -0
- package/dist/interface/httpClient.js +3 -0
- package/dist/interface/httpClient.js.map +1 -0
- package/dist/interface/index.d.ts +43 -0
- package/dist/interface/index.js +22 -0
- package/dist/interface/index.js.map +1 -0
- package/dist/interface/nodes.d.ts +161 -0
- package/dist/interface/nodes.js +21 -0
- package/dist/interface/nodes.js.map +1 -0
- package/dist/interface/result.d.ts +9 -0
- package/dist/interface/result.js +11 -0
- package/dist/interface/result.js.map +1 -0
- package/dist/interface/sharing.d.ts +73 -0
- package/dist/interface/sharing.js +9 -0
- package/dist/interface/sharing.js.map +1 -0
- package/dist/interface/telemetry.d.ts +61 -0
- package/dist/interface/telemetry.js +18 -0
- package/dist/interface/telemetry.js.map +1 -0
- package/dist/interface/thumbnail.d.ts +17 -0
- package/dist/interface/thumbnail.js +9 -0
- package/dist/interface/thumbnail.js.map +1 -0
- package/dist/interface/upload.d.ts +16 -0
- package/dist/interface/upload.js +3 -0
- package/dist/interface/upload.js.map +1 -0
- package/dist/internal/apiService/apiService.d.ts +51 -0
- package/dist/internal/apiService/apiService.js +305 -0
- package/dist/internal/apiService/apiService.js.map +1 -0
- package/dist/internal/apiService/apiService.test.d.ts +1 -0
- package/dist/internal/apiService/apiService.test.js +237 -0
- package/dist/internal/apiService/apiService.test.js.map +1 -0
- package/dist/internal/apiService/coreTypes.d.ts +24438 -0
- package/dist/internal/apiService/coreTypes.js +7 -0
- package/dist/internal/apiService/coreTypes.js.map +1 -0
- package/dist/internal/apiService/driveTypes.d.ts +11840 -0
- package/dist/internal/apiService/driveTypes.js +7 -0
- package/dist/internal/apiService/driveTypes.js.map +1 -0
- package/dist/internal/apiService/errorCodes.d.ts +30 -0
- package/dist/internal/apiService/errorCodes.js +11 -0
- package/dist/internal/apiService/errorCodes.js.map +1 -0
- package/dist/internal/apiService/errors.d.ts +19 -0
- package/dist/internal/apiService/errors.js +76 -0
- package/dist/internal/apiService/errors.js.map +1 -0
- package/dist/internal/apiService/errors.test.d.ts +1 -0
- package/dist/internal/apiService/errors.test.js +69 -0
- package/dist/internal/apiService/errors.test.js.map +1 -0
- package/dist/internal/apiService/index.d.ts +7 -0
- package/dist/internal/apiService/index.js +30 -0
- package/dist/internal/apiService/index.js.map +1 -0
- package/dist/internal/apiService/observerStream.d.ts +3 -0
- package/dist/internal/apiService/observerStream.js +15 -0
- package/dist/internal/apiService/observerStream.js.map +1 -0
- package/dist/internal/apiService/transformers.d.ts +4 -0
- package/dist/internal/apiService/transformers.js +48 -0
- package/dist/internal/apiService/transformers.js.map +1 -0
- package/dist/internal/batchLoading.d.ts +34 -0
- package/dist/internal/batchLoading.js +68 -0
- package/dist/internal/batchLoading.js.map +1 -0
- package/dist/internal/batchLoading.test.d.ts +1 -0
- package/dist/internal/batchLoading.test.js +50 -0
- package/dist/internal/batchLoading.test.js.map +1 -0
- package/dist/internal/devices/apiService.d.ts +38 -0
- package/dist/internal/devices/apiService.js +105 -0
- package/dist/internal/devices/apiService.js.map +1 -0
- package/dist/internal/devices/cryptoService.d.ts +30 -0
- package/dist/internal/devices/cryptoService.js +47 -0
- package/dist/internal/devices/cryptoService.js.map +1 -0
- package/dist/internal/devices/index.d.ts +15 -0
- package/dist/internal/devices/index.js +22 -0
- package/dist/internal/devices/index.js.map +1 -0
- package/dist/internal/devices/interface.d.ts +31 -0
- package/dist/internal/devices/interface.js +3 -0
- package/dist/internal/devices/interface.js.map +1 -0
- package/dist/internal/devices/manager.d.ts +18 -0
- package/dist/internal/devices/manager.js +103 -0
- package/dist/internal/devices/manager.js.map +1 -0
- package/dist/internal/devices/manager.test.d.ts +1 -0
- package/dist/internal/devices/manager.test.js +100 -0
- package/dist/internal/devices/manager.test.js.map +1 -0
- package/dist/internal/download/apiService.d.ts +27 -0
- package/dist/internal/download/apiService.js +110 -0
- package/dist/internal/download/apiService.js.map +1 -0
- package/dist/internal/download/controller.d.ts +8 -0
- package/dist/internal/download/controller.js +22 -0
- package/dist/internal/download/controller.js.map +1 -0
- package/dist/internal/download/cryptoService.d.ts +17 -0
- package/dist/internal/download/cryptoService.js +82 -0
- package/dist/internal/download/cryptoService.js.map +1 -0
- package/dist/internal/download/fileDownloader.d.ts +33 -0
- package/dist/internal/download/fileDownloader.js +226 -0
- package/dist/internal/download/fileDownloader.js.map +1 -0
- package/dist/internal/download/fileDownloader.test.d.ts +1 -0
- package/dist/internal/download/fileDownloader.test.js +324 -0
- package/dist/internal/download/fileDownloader.test.js.map +1 -0
- package/dist/internal/download/index.d.ts +10 -0
- package/dist/internal/download/index.js +82 -0
- package/dist/internal/download/index.js.map +1 -0
- package/dist/internal/download/interface.d.ts +35 -0
- package/dist/internal/download/interface.js +3 -0
- package/dist/internal/download/interface.js.map +1 -0
- package/dist/internal/download/queue.d.ts +5 -0
- package/dist/internal/download/queue.js +31 -0
- package/dist/internal/download/queue.js.map +1 -0
- package/dist/internal/download/telemetry.d.ts +14 -0
- package/dist/internal/download/telemetry.js +106 -0
- package/dist/internal/download/telemetry.js.map +1 -0
- package/dist/internal/download/telemetry.test.d.ts +1 -0
- package/dist/internal/download/telemetry.test.js +111 -0
- package/dist/internal/download/telemetry.test.js.map +1 -0
- package/dist/internal/download/thumbnailDownloader.d.ts +19 -0
- package/dist/internal/download/thumbnailDownloader.js +198 -0
- package/dist/internal/download/thumbnailDownloader.js.map +1 -0
- package/dist/internal/download/thumbnailDownloader.test.d.ts +1 -0
- package/dist/internal/download/thumbnailDownloader.test.js +179 -0
- package/dist/internal/download/thumbnailDownloader.test.js.map +1 -0
- package/dist/internal/errors.d.ts +6 -0
- package/dist/internal/errors.js +28 -0
- package/dist/internal/errors.js.map +1 -0
- package/dist/internal/errors.test.d.ts +1 -0
- package/dist/internal/errors.test.js +22 -0
- package/dist/internal/errors.test.js.map +1 -0
- package/dist/internal/events/apiService.d.ts +18 -0
- package/dist/internal/events/apiService.js +81 -0
- package/dist/internal/events/apiService.js.map +1 -0
- package/dist/internal/events/cache.d.ts +28 -0
- package/dist/internal/events/cache.js +67 -0
- package/dist/internal/events/cache.js.map +1 -0
- package/dist/internal/events/cache.test.d.ts +1 -0
- package/dist/internal/events/cache.test.js +43 -0
- package/dist/internal/events/cache.test.js.map +1 -0
- package/dist/internal/events/coreEventManager.d.ts +25 -0
- package/dist/internal/events/coreEventManager.js +63 -0
- package/dist/internal/events/coreEventManager.js.map +1 -0
- package/dist/internal/events/eventManager.d.ts +62 -0
- package/dist/internal/events/eventManager.js +159 -0
- package/dist/internal/events/eventManager.js.map +1 -0
- package/dist/internal/events/eventManager.test.d.ts +1 -0
- package/dist/internal/events/eventManager.test.js +120 -0
- package/dist/internal/events/eventManager.test.js.map +1 -0
- package/dist/internal/events/index.d.ts +50 -0
- package/dist/internal/events/index.js +117 -0
- package/dist/internal/events/index.js.map +1 -0
- package/dist/internal/events/interface.d.ts +47 -0
- package/dist/internal/events/interface.js +12 -0
- package/dist/internal/events/interface.js.map +1 -0
- package/dist/internal/events/volumeEventManager.d.ts +27 -0
- package/dist/internal/events/volumeEventManager.js +69 -0
- package/dist/internal/events/volumeEventManager.js.map +1 -0
- package/dist/internal/nodes/apiService.d.ts +54 -0
- package/dist/internal/nodes/apiService.js +308 -0
- package/dist/internal/nodes/apiService.js.map +1 -0
- package/dist/internal/nodes/apiService.test.d.ts +1 -0
- package/dist/internal/nodes/apiService.test.js +344 -0
- package/dist/internal/nodes/apiService.test.js.map +1 -0
- package/dist/internal/nodes/cache.d.ts +57 -0
- package/dist/internal/nodes/cache.js +226 -0
- package/dist/internal/nodes/cache.js.map +1 -0
- package/dist/internal/nodes/cache.test.d.ts +1 -0
- package/dist/internal/nodes/cache.test.js +160 -0
- package/dist/internal/nodes/cache.test.js.map +1 -0
- package/dist/internal/nodes/cryptoCache.d.ts +16 -0
- package/dist/internal/nodes/cryptoCache.js +50 -0
- package/dist/internal/nodes/cryptoCache.js.map +1 -0
- package/dist/internal/nodes/cryptoCache.test.d.ts +1 -0
- package/dist/internal/nodes/cryptoCache.test.js +79 -0
- package/dist/internal/nodes/cryptoCache.test.js.map +1 -0
- package/dist/internal/nodes/cryptoService.d.ts +75 -0
- package/dist/internal/nodes/cryptoService.js +409 -0
- package/dist/internal/nodes/cryptoService.js.map +1 -0
- package/dist/internal/nodes/cryptoService.test.d.ts +1 -0
- package/dist/internal/nodes/cryptoService.test.js +698 -0
- package/dist/internal/nodes/cryptoService.test.js.map +1 -0
- package/dist/internal/nodes/events.d.ts +91 -0
- package/dist/internal/nodes/events.js +243 -0
- package/dist/internal/nodes/events.js.map +1 -0
- package/dist/internal/nodes/events.test.d.ts +1 -0
- package/dist/internal/nodes/events.test.js +318 -0
- package/dist/internal/nodes/events.test.js.map +1 -0
- package/dist/internal/nodes/extendedAttributes.d.ts +23 -0
- package/dist/internal/nodes/extendedAttributes.js +117 -0
- package/dist/internal/nodes/extendedAttributes.js.map +1 -0
- package/dist/internal/nodes/extendedAttributes.test.d.ts +1 -0
- package/dist/internal/nodes/extendedAttributes.test.js +176 -0
- package/dist/internal/nodes/extendedAttributes.test.js.map +1 -0
- package/dist/internal/nodes/index.d.ts +26 -0
- package/dist/internal/nodes/index.js +40 -0
- package/dist/internal/nodes/index.js.map +1 -0
- package/dist/internal/nodes/index.test.d.ts +1 -0
- package/dist/internal/nodes/index.test.js +112 -0
- package/dist/internal/nodes/index.test.js.map +1 -0
- package/dist/internal/nodes/interface.d.ts +135 -0
- package/dist/internal/nodes/interface.js +3 -0
- package/dist/internal/nodes/interface.js.map +1 -0
- package/dist/internal/nodes/mediaTypes.d.ts +2 -0
- package/dist/internal/nodes/mediaTypes.js +13 -0
- package/dist/internal/nodes/mediaTypes.js.map +1 -0
- package/dist/internal/nodes/nodesAccess.d.ts +49 -0
- package/dist/internal/nodes/nodesAccess.js +332 -0
- package/dist/internal/nodes/nodesAccess.js.map +1 -0
- package/dist/internal/nodes/nodesAccess.test.d.ts +1 -0
- package/dist/internal/nodes/nodesAccess.test.js +487 -0
- package/dist/internal/nodes/nodesAccess.test.js.map +1 -0
- package/dist/internal/nodes/nodesManagement.d.ts +33 -0
- package/dist/internal/nodes/nodesManagement.js +222 -0
- package/dist/internal/nodes/nodesManagement.js.map +1 -0
- package/dist/internal/nodes/nodesManagement.test.d.ts +1 -0
- package/dist/internal/nodes/nodesManagement.test.js +178 -0
- package/dist/internal/nodes/nodesManagement.test.js.map +1 -0
- package/dist/internal/nodes/nodesRevisions.d.ts +18 -0
- package/dist/internal/nodes/nodesRevisions.js +55 -0
- package/dist/internal/nodes/nodesRevisions.js.map +1 -0
- package/dist/internal/nodes/validations.d.ts +4 -0
- package/dist/internal/nodes/validations.js +21 -0
- package/dist/internal/nodes/validations.js.map +1 -0
- package/dist/internal/photos/albums.d.ts +13 -0
- package/dist/internal/photos/albums.js +30 -0
- package/dist/internal/photos/albums.js.map +1 -0
- package/dist/internal/photos/apiService.d.ts +8 -0
- package/dist/internal/photos/apiService.js +18 -0
- package/dist/internal/photos/apiService.js.map +1 -0
- package/dist/internal/photos/cache.d.ts +6 -0
- package/dist/internal/photos/cache.js +15 -0
- package/dist/internal/photos/cache.js.map +1 -0
- package/dist/internal/photos/index.d.ts +9 -0
- package/dist/internal/photos/index.js +18 -0
- package/dist/internal/photos/index.js.map +1 -0
- package/dist/internal/photos/interface.d.ts +6 -0
- package/dist/internal/photos/interface.js +3 -0
- package/dist/internal/photos/interface.js.map +1 -0
- package/dist/internal/photos/photosTimeline.d.ts +10 -0
- package/dist/internal/photos/photosTimeline.js +20 -0
- package/dist/internal/photos/photosTimeline.js.map +1 -0
- package/dist/internal/sdkEvents.d.ts +12 -0
- package/dist/internal/sdkEvents.js +44 -0
- package/dist/internal/sdkEvents.js.map +1 -0
- package/dist/internal/sdkEvents.test.d.ts +1 -0
- package/dist/internal/sdkEvents.test.js +45 -0
- package/dist/internal/sdkEvents.test.js.map +1 -0
- package/dist/internal/shares/apiService.d.ts +51 -0
- package/dist/internal/shares/apiService.js +128 -0
- package/dist/internal/shares/apiService.js.map +1 -0
- package/dist/internal/shares/cache.d.ts +15 -0
- package/dist/internal/shares/cache.js +63 -0
- package/dist/internal/shares/cache.js.map +1 -0
- package/dist/internal/shares/cache.test.d.ts +1 -0
- package/dist/internal/shares/cache.test.js +54 -0
- package/dist/internal/shares/cache.test.js.map +1 -0
- package/dist/internal/shares/cryptoCache.d.ts +20 -0
- package/dist/internal/shares/cryptoCache.js +35 -0
- package/dist/internal/shares/cryptoCache.js.map +1 -0
- package/dist/internal/shares/cryptoCache.test.d.ts +1 -0
- package/dist/internal/shares/cryptoCache.test.js +58 -0
- package/dist/internal/shares/cryptoCache.test.js.map +1 -0
- package/dist/internal/shares/cryptoService.d.ts +42 -0
- package/dist/internal/shares/cryptoService.js +126 -0
- package/dist/internal/shares/cryptoService.js.map +1 -0
- package/dist/internal/shares/cryptoService.test.d.ts +1 -0
- package/dist/internal/shares/cryptoService.test.js +120 -0
- package/dist/internal/shares/cryptoService.test.js.map +1 -0
- package/dist/internal/shares/index.d.ts +15 -0
- package/dist/internal/shares/index.js +26 -0
- package/dist/internal/shares/index.js.map +1 -0
- package/dist/internal/shares/interface.d.ts +94 -0
- package/dist/internal/shares/interface.js +11 -0
- package/dist/internal/shares/interface.js.map +1 -0
- package/dist/internal/shares/manager.d.ts +68 -0
- package/dist/internal/shares/manager.js +186 -0
- package/dist/internal/shares/manager.js.map +1 -0
- package/dist/internal/shares/manager.test.d.ts +1 -0
- package/dist/internal/shares/manager.test.js +176 -0
- package/dist/internal/shares/manager.test.js.map +1 -0
- package/dist/internal/sharing/apiService.d.ts +80 -0
- package/dist/internal/sharing/apiService.js +325 -0
- package/dist/internal/sharing/apiService.js.map +1 -0
- package/dist/internal/sharing/cache.d.ts +37 -0
- package/dist/internal/sharing/cache.js +105 -0
- package/dist/internal/sharing/cache.js.map +1 -0
- package/dist/internal/sharing/cache.test.d.ts +1 -0
- package/dist/internal/sharing/cache.test.js +82 -0
- package/dist/internal/sharing/cache.test.js.map +1 -0
- package/dist/internal/sharing/cryptoService.d.ts +112 -0
- package/dist/internal/sharing/cryptoService.js +269 -0
- package/dist/internal/sharing/cryptoService.js.map +1 -0
- package/dist/internal/sharing/events.d.ts +57 -0
- package/dist/internal/sharing/events.js +153 -0
- package/dist/internal/sharing/events.js.map +1 -0
- package/dist/internal/sharing/events.test.d.ts +1 -0
- package/dist/internal/sharing/events.test.js +246 -0
- package/dist/internal/sharing/events.test.js.map +1 -0
- package/dist/internal/sharing/index.d.ts +20 -0
- package/dist/internal/sharing/index.js +30 -0
- package/dist/internal/sharing/index.js.map +1 -0
- package/dist/internal/sharing/interface.d.ts +169 -0
- package/dist/internal/sharing/interface.js +9 -0
- package/dist/internal/sharing/interface.js.map +1 -0
- package/dist/internal/sharing/sharingAccess.d.ts +32 -0
- package/dist/internal/sharing/sharingAccess.js +119 -0
- package/dist/internal/sharing/sharingAccess.js.map +1 -0
- package/dist/internal/sharing/sharingAccess.test.d.ts +1 -0
- package/dist/internal/sharing/sharingAccess.test.js +84 -0
- package/dist/internal/sharing/sharingAccess.test.js.map +1 -0
- package/dist/internal/sharing/sharingManagement.d.ts +43 -0
- package/dist/internal/sharing/sharingManagement.js +439 -0
- package/dist/internal/sharing/sharingManagement.js.map +1 -0
- package/dist/internal/sharing/sharingManagement.test.d.ts +1 -0
- package/dist/internal/sharing/sharingManagement.test.js +788 -0
- package/dist/internal/sharing/sharingManagement.test.js.map +1 -0
- package/dist/internal/uids.d.ts +38 -0
- package/dist/internal/uids.js +85 -0
- package/dist/internal/uids.js.map +1 -0
- package/dist/internal/upload/apiService.d.ts +65 -0
- package/dist/internal/upload/apiService.js +137 -0
- package/dist/internal/upload/apiService.js.map +1 -0
- package/dist/internal/upload/blockVerifier.d.ts +16 -0
- package/dist/internal/upload/blockVerifier.js +33 -0
- package/dist/internal/upload/blockVerifier.js.map +1 -0
- package/dist/internal/upload/chunkStreamReader.d.ts +13 -0
- package/dist/internal/upload/chunkStreamReader.js +46 -0
- package/dist/internal/upload/chunkStreamReader.js.map +1 -0
- package/dist/internal/upload/chunkStreamReader.test.d.ts +1 -0
- package/dist/internal/upload/chunkStreamReader.test.js +75 -0
- package/dist/internal/upload/chunkStreamReader.test.js.map +1 -0
- package/dist/internal/upload/controller.d.ts +8 -0
- package/dist/internal/upload/controller.js +25 -0
- package/dist/internal/upload/controller.js.map +1 -0
- package/dist/internal/upload/cryptoService.d.ts +29 -0
- package/dist/internal/upload/cryptoService.js +104 -0
- package/dist/internal/upload/cryptoService.js.map +1 -0
- package/dist/internal/upload/digests.d.ts +8 -0
- package/dist/internal/upload/digests.js +22 -0
- package/dist/internal/upload/digests.js.map +1 -0
- package/dist/internal/upload/fileUploader.d.ts +65 -0
- package/dist/internal/upload/fileUploader.js +463 -0
- package/dist/internal/upload/fileUploader.js.map +1 -0
- package/dist/internal/upload/fileUploader.test.d.ts +1 -0
- package/dist/internal/upload/fileUploader.test.js +393 -0
- package/dist/internal/upload/fileUploader.test.js.map +1 -0
- package/dist/internal/upload/index.d.ts +16 -0
- package/dist/internal/upload/index.js +77 -0
- package/dist/internal/upload/index.js.map +1 -0
- package/dist/internal/upload/interface.d.ts +117 -0
- package/dist/internal/upload/interface.js +3 -0
- package/dist/internal/upload/interface.js.map +1 -0
- package/dist/internal/upload/manager.d.ts +31 -0
- package/dist/internal/upload/manager.js +250 -0
- package/dist/internal/upload/manager.js.map +1 -0
- package/dist/internal/upload/manager.test.d.ts +1 -0
- package/dist/internal/upload/manager.test.js +349 -0
- package/dist/internal/upload/manager.test.js.map +1 -0
- package/dist/internal/upload/queue.d.ts +5 -0
- package/dist/internal/upload/queue.js +32 -0
- package/dist/internal/upload/queue.js.map +1 -0
- package/dist/internal/upload/telemetry.d.ts +15 -0
- package/dist/internal/upload/telemetry.js +111 -0
- package/dist/internal/upload/telemetry.js.map +1 -0
- package/dist/internal/upload/telemetry.test.d.ts +1 -0
- package/dist/internal/upload/telemetry.test.js +107 -0
- package/dist/internal/upload/telemetry.test.js.map +1 -0
- package/dist/internal/utils.d.ts +1 -0
- package/dist/internal/utils.js +13 -0
- package/dist/internal/utils.js.map +1 -0
- package/dist/internal/wait.d.ts +3 -0
- package/dist/internal/wait.js +28 -0
- package/dist/internal/wait.js.map +1 -0
- package/dist/internal/wait.test.d.ts +1 -0
- package/dist/internal/wait.test.js +21 -0
- package/dist/internal/wait.test.js.map +1 -0
- package/dist/protonDriveClient.d.ts +593 -0
- package/dist/protonDriveClient.js +768 -0
- package/dist/protonDriveClient.js.map +1 -0
- package/dist/protonDrivePhotosClient.d.ts +16 -0
- package/dist/protonDrivePhotosClient.js +46 -0
- package/dist/protonDrivePhotosClient.js.map +1 -0
- package/dist/telemetry.d.ts +187 -0
- package/dist/telemetry.js +297 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/tests/logger.d.ts +2 -0
- package/dist/tests/logger.js +12 -0
- package/dist/tests/logger.js.map +1 -0
- package/dist/tests/telemetry.d.ts +2 -0
- package/dist/tests/telemetry.js +11 -0
- package/dist/tests/telemetry.js.map +1 -0
- package/dist/transformers.d.ts +17 -0
- package/dist/transformers.js +77 -0
- package/dist/transformers.js.map +1 -0
- package/dist/version.d.ts +1 -0
- package/dist/version.js +6 -0
- package/dist/version.js.map +1 -0
- package/package.json +49 -0
- package/src/cache/index.ts +2 -0
- package/src/cache/interface.ts +104 -0
- package/src/cache/memoryCache.test.ts +150 -0
- package/src/cache/memoryCache.ts +85 -0
- package/src/config.ts +9 -0
- package/src/crypto/driveCrypto.test.ts +45 -0
- package/src/crypto/driveCrypto.ts +696 -0
- package/src/crypto/hmac.ts +46 -0
- package/src/crypto/index.ts +6 -0
- package/src/crypto/interface.ts +230 -0
- package/src/crypto/openPGPCrypto.ts +398 -0
- package/src/crypto/utils.ts +40 -0
- package/src/errors.ts +168 -0
- package/src/index.ts +30 -0
- package/src/interface/account.ts +38 -0
- package/src/interface/author.ts +29 -0
- package/src/interface/devices.ts +21 -0
- package/src/interface/download.ts +32 -0
- package/src/interface/events.ts +30 -0
- package/src/interface/httpClient.ts +42 -0
- package/src/interface/index.ts +46 -0
- package/src/interface/nodes.ts +168 -0
- package/src/interface/result.ts +11 -0
- package/src/interface/sharing.ts +87 -0
- package/src/interface/telemetry.ts +107 -0
- package/src/interface/thumbnail.ts +14 -0
- package/src/interface/upload.ts +19 -0
- package/src/internal/apiService/apiService.test.ts +285 -0
- package/src/internal/apiService/apiService.ts +353 -0
- package/src/internal/apiService/coreTypes.ts +24439 -0
- package/src/internal/apiService/driveTypes.ts +11841 -0
- package/src/internal/apiService/errorCodes.ts +38 -0
- package/src/internal/apiService/errors.test.ts +63 -0
- package/src/internal/apiService/errors.ts +91 -0
- package/src/internal/apiService/index.ts +7 -0
- package/src/internal/apiService/observerStream.ts +10 -0
- package/src/internal/apiService/transformers.ts +45 -0
- package/src/internal/batchLoading.test.ts +58 -0
- package/src/internal/batchLoading.ts +74 -0
- package/src/internal/devices/apiService.ts +142 -0
- package/src/internal/devices/cryptoService.ts +65 -0
- package/src/internal/devices/index.ts +31 -0
- package/src/internal/devices/interface.ts +28 -0
- package/src/internal/devices/manager.test.ts +129 -0
- package/src/internal/devices/manager.ts +113 -0
- package/src/internal/download/apiService.ts +145 -0
- package/src/internal/download/controller.ts +22 -0
- package/src/internal/download/cryptoService.ts +96 -0
- package/src/internal/download/fileDownloader.test.ts +381 -0
- package/src/internal/download/fileDownloader.ts +266 -0
- package/src/internal/download/index.ts +122 -0
- package/src/internal/download/interface.ts +38 -0
- package/src/internal/download/queue.ts +30 -0
- package/src/internal/download/telemetry.test.ts +134 -0
- package/src/internal/download/telemetry.ts +115 -0
- package/src/internal/download/thumbnailDownloader.test.ts +226 -0
- package/src/internal/download/thumbnailDownloader.ts +250 -0
- package/src/internal/errors.test.ts +21 -0
- package/src/internal/errors.ts +28 -0
- package/src/internal/events/apiService.ts +87 -0
- package/src/internal/events/cache.test.ts +47 -0
- package/src/internal/events/cache.ts +80 -0
- package/src/internal/events/coreEventManager.ts +69 -0
- package/src/internal/events/eventManager.test.ts +139 -0
- package/src/internal/events/eventManager.ts +168 -0
- package/src/internal/events/index.ts +131 -0
- package/src/internal/events/interface.ts +51 -0
- package/src/internal/events/volumeEventManager.ts +74 -0
- package/src/internal/nodes/apiService.test.ts +394 -0
- package/src/internal/nodes/apiService.ts +455 -0
- package/src/internal/nodes/cache.test.ts +197 -0
- package/src/internal/nodes/cache.ts +240 -0
- package/src/internal/nodes/cryptoCache.test.ts +92 -0
- package/src/internal/nodes/cryptoCache.ts +47 -0
- package/src/internal/nodes/cryptoService.test.ts +814 -0
- package/src/internal/nodes/cryptoService.ts +550 -0
- package/src/internal/nodes/events.test.ts +383 -0
- package/src/internal/nodes/events.ts +271 -0
- package/src/internal/nodes/extendedAttributes.test.ts +177 -0
- package/src/internal/nodes/extendedAttributes.ts +180 -0
- package/src/internal/nodes/index.test.ts +135 -0
- package/src/internal/nodes/index.ts +52 -0
- package/src/internal/nodes/interface.ts +152 -0
- package/src/internal/nodes/mediaTypes.ts +10 -0
- package/src/internal/nodes/nodesAccess.test.ts +555 -0
- package/src/internal/nodes/nodesAccess.ts +360 -0
- package/src/internal/nodes/nodesManagement.test.ts +221 -0
- package/src/internal/nodes/nodesManagement.ts +272 -0
- package/src/internal/nodes/nodesRevisions.ts +58 -0
- package/src/internal/nodes/validations.ts +26 -0
- package/src/internal/photos/albums.ts +29 -0
- package/src/internal/photos/apiService.ts +16 -0
- package/src/internal/photos/cache.ts +11 -0
- package/src/internal/photos/index.ts +23 -0
- package/src/internal/photos/interface.ts +7 -0
- package/src/internal/photos/photosTimeline.ts +18 -0
- package/src/internal/sdkEvents.test.ts +55 -0
- package/src/internal/sdkEvents.ts +52 -0
- package/src/internal/shares/apiService.ts +176 -0
- package/src/internal/shares/cache.test.ts +58 -0
- package/src/internal/shares/cache.ts +64 -0
- package/src/internal/shares/cryptoCache.test.ts +70 -0
- package/src/internal/shares/cryptoCache.ts +35 -0
- package/src/internal/shares/cryptoService.test.ts +137 -0
- package/src/internal/shares/cryptoService.ts +143 -0
- package/src/internal/shares/index.ts +35 -0
- package/src/internal/shares/interface.ts +104 -0
- package/src/internal/shares/manager.test.ts +210 -0
- package/src/internal/shares/manager.ts +213 -0
- package/src/internal/sharing/apiService.ts +483 -0
- package/src/internal/sharing/cache.test.ts +99 -0
- package/src/internal/sharing/cache.ts +109 -0
- package/src/internal/sharing/cryptoService.ts +378 -0
- package/src/internal/sharing/events.test.ts +268 -0
- package/src/internal/sharing/events.ts +166 -0
- package/src/internal/sharing/index.ts +43 -0
- package/src/internal/sharing/interface.ts +177 -0
- package/src/internal/sharing/sharingAccess.test.ts +102 -0
- package/src/internal/sharing/sharingAccess.ts +133 -0
- package/src/internal/sharing/sharingManagement.test.ts +895 -0
- package/src/internal/sharing/sharingManagement.ts +521 -0
- package/src/internal/uids.ts +83 -0
- package/src/internal/upload/apiService.ts +243 -0
- package/src/internal/upload/blockVerifier.ts +40 -0
- package/src/internal/upload/chunkStreamReader.test.ts +89 -0
- package/src/internal/upload/chunkStreamReader.ts +49 -0
- package/src/internal/upload/controller.ts +25 -0
- package/src/internal/upload/cryptoService.ts +162 -0
- package/src/internal/upload/digests.ts +18 -0
- package/src/internal/upload/fileUploader.test.ts +513 -0
- package/src/internal/upload/fileUploader.ts +576 -0
- package/src/internal/upload/index.ts +126 -0
- package/src/internal/upload/interface.ts +128 -0
- package/src/internal/upload/manager.test.ts +390 -0
- package/src/internal/upload/manager.ts +320 -0
- package/src/internal/upload/queue.ts +31 -0
- package/src/internal/upload/telemetry.test.ts +129 -0
- package/src/internal/upload/telemetry.ts +121 -0
- package/src/internal/utils.ts +9 -0
- package/src/internal/wait.test.ts +21 -0
- package/src/internal/wait.ts +26 -0
- package/src/protonDriveClient.ts +861 -0
- package/src/protonDrivePhotosClient.ts +56 -0
- package/src/telemetry.ts +346 -0
- package/src/tests/logger.ts +10 -0
- package/src/tests/telemetry.ts +9 -0
- package/src/transformers.ts +98 -0
- package/src/version.ts +4 -0
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.arrayToHexString = exports.DriveCrypto = void 0;
|
|
4
|
+
exports.uint8ArrayToUtf8 = uint8ArrayToUtf8;
|
|
5
|
+
const utils_1 = require("./utils");
|
|
6
|
+
// TODO: Switch to CryptoProxy module once available.
|
|
7
|
+
const hmac_1 = require("./hmac");
|
|
8
|
+
var SIGNING_CONTEXTS;
|
|
9
|
+
(function (SIGNING_CONTEXTS) {
|
|
10
|
+
SIGNING_CONTEXTS["SHARING_INVITER"] = "drive.share-member.inviter";
|
|
11
|
+
SIGNING_CONTEXTS["SHARING_INVITER_EXTERNAL_INVITATION"] = "drive.share-member.external-invitation";
|
|
12
|
+
SIGNING_CONTEXTS["SHARING_MEMBER"] = "drive.share-member.member";
|
|
13
|
+
})(SIGNING_CONTEXTS || (SIGNING_CONTEXTS = {}));
|
|
14
|
+
/**
|
|
15
|
+
* Drive crypto layer to provide general operations for Drive crypto.
|
|
16
|
+
*
|
|
17
|
+
* This layer focuses on providing general Drive crypto functions. Only
|
|
18
|
+
* high-level functions that are required on multiple places should be
|
|
19
|
+
* peresent. E.g., no specific implementation how keys are encrypted,
|
|
20
|
+
* but we do share same key generation across shares and nodes modules,
|
|
21
|
+
* for example, which we can generelise here and in each module just
|
|
22
|
+
* call with specific arguments.
|
|
23
|
+
*/
|
|
24
|
+
class DriveCrypto {
|
|
25
|
+
openPGPCrypto;
|
|
26
|
+
srpModule;
|
|
27
|
+
constructor(openPGPCrypto, srpModule) {
|
|
28
|
+
this.openPGPCrypto = openPGPCrypto;
|
|
29
|
+
this.srpModule = srpModule;
|
|
30
|
+
this.openPGPCrypto = openPGPCrypto;
|
|
31
|
+
this.srpModule = srpModule;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* It generates passphrase and key that is encrypted with the
|
|
35
|
+
* generated passphrase.
|
|
36
|
+
*
|
|
37
|
+
* `encrpytionKeys` are used to generate session key, which is
|
|
38
|
+
* also used to encrypt the passphrase. The encrypted passphrase
|
|
39
|
+
* is signed with `signingKey`.
|
|
40
|
+
*
|
|
41
|
+
* @returns Object with:
|
|
42
|
+
* - encrypted (armored) data (key, passphrase and passphrase
|
|
43
|
+
* signature) for sending to the server
|
|
44
|
+
* - decrypted data (key, sessionKey) for crypto usage
|
|
45
|
+
*/
|
|
46
|
+
async generateKey(encryptionKeys, signingKey) {
|
|
47
|
+
const passphrase = this.openPGPCrypto.generatePassphrase();
|
|
48
|
+
const [{ privateKey, armoredKey }, passphraseSessionKey] = await Promise.all([
|
|
49
|
+
this.openPGPCrypto.generateKey(passphrase),
|
|
50
|
+
this.openPGPCrypto.generateSessionKey(encryptionKeys),
|
|
51
|
+
]);
|
|
52
|
+
const { armoredPassphrase, armoredPassphraseSignature } = await this.encryptPassphrase(passphrase, passphraseSessionKey, encryptionKeys, signingKey);
|
|
53
|
+
return {
|
|
54
|
+
encrypted: {
|
|
55
|
+
armoredKey,
|
|
56
|
+
armoredPassphrase,
|
|
57
|
+
armoredPassphraseSignature,
|
|
58
|
+
},
|
|
59
|
+
decrypted: {
|
|
60
|
+
passphrase,
|
|
61
|
+
key: privateKey,
|
|
62
|
+
passphraseSessionKey,
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
;
|
|
67
|
+
/**
|
|
68
|
+
* It generates content key from node key for encrypting file blocks.
|
|
69
|
+
*
|
|
70
|
+
* @param encryptionKey - Its own node key.
|
|
71
|
+
* @returns Object with serialised key packet and decrypted session key.
|
|
72
|
+
*/
|
|
73
|
+
async generateContentKey(encryptionKey) {
|
|
74
|
+
const contentKeyPacketSessionKey = await this.openPGPCrypto.generateSessionKey([encryptionKey]);
|
|
75
|
+
const { signature: armoredContentKeyPacketSignature } = await this.openPGPCrypto.signArmored(contentKeyPacketSessionKey.data, [encryptionKey]);
|
|
76
|
+
const { keyPacket } = await this.openPGPCrypto.encryptSessionKey(contentKeyPacketSessionKey, [encryptionKey]);
|
|
77
|
+
return {
|
|
78
|
+
encrypted: {
|
|
79
|
+
base64ContentKeyPacket: (0, utils_1.uint8ArrayToBase64String)(keyPacket),
|
|
80
|
+
armoredContentKeyPacketSignature,
|
|
81
|
+
},
|
|
82
|
+
decrypted: {
|
|
83
|
+
contentKeyPacketSessionKey,
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* It encrypts passphrase with provided session and encryption keys.
|
|
89
|
+
* This should be used only for re-encrypting the passphrase with
|
|
90
|
+
* different key (e.g., moving the node to different parent).
|
|
91
|
+
*
|
|
92
|
+
* @returns Object with armored passphrase and passphrase signature.
|
|
93
|
+
*/
|
|
94
|
+
async encryptPassphrase(passphrase, sessionKey, encryptionKeys, signingKey) {
|
|
95
|
+
const { armoredData: armoredPassphrase, armoredSignature: armoredPassphraseSignature } = await this.openPGPCrypto.encryptAndSignDetachedArmored(new TextEncoder().encode(passphrase), sessionKey, encryptionKeys, signingKey);
|
|
96
|
+
return {
|
|
97
|
+
armoredPassphrase,
|
|
98
|
+
armoredPassphraseSignature,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* It decrypts key generated via `generateKey`.
|
|
103
|
+
*
|
|
104
|
+
* Armored data are passed from the server. `decryptionKeys` are used
|
|
105
|
+
* to decrypt the session key from the `armoredPassphrase`. Then the
|
|
106
|
+
* session key is used with `verificationKeys` to decrypt and verify
|
|
107
|
+
* the passphrase. Finally, the armored key is decrypted.
|
|
108
|
+
*
|
|
109
|
+
* Note: The function doesn't throw in case of verification issue.
|
|
110
|
+
* You have to read `verified` result and act based on that.
|
|
111
|
+
*
|
|
112
|
+
* @returns key and sessionKey for crypto usage, and verification status
|
|
113
|
+
*/
|
|
114
|
+
async decryptKey(armoredKey, armoredPassphrase, armoredPassphraseSignature, decryptionKeys, verificationKeys) {
|
|
115
|
+
const passphraseSessionKey = await this.decryptSessionKey(armoredPassphrase, decryptionKeys);
|
|
116
|
+
const { data: decryptedPassphrase, verified } = await this.openPGPCrypto.decryptArmoredAndVerifyDetached(armoredPassphrase, armoredPassphraseSignature, passphraseSessionKey, verificationKeys);
|
|
117
|
+
const passphrase = uint8ArrayToUtf8(decryptedPassphrase);
|
|
118
|
+
const key = await this.openPGPCrypto.decryptKey(armoredKey, passphrase);
|
|
119
|
+
return {
|
|
120
|
+
passphrase,
|
|
121
|
+
key,
|
|
122
|
+
passphraseSessionKey,
|
|
123
|
+
verified,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* It encrypts session key with provided encryption key.
|
|
128
|
+
*/
|
|
129
|
+
async encryptSessionKey(sessionKey, encryptionKey) {
|
|
130
|
+
const { keyPacket } = await this.openPGPCrypto.encryptSessionKey(sessionKey, [encryptionKey]);
|
|
131
|
+
return {
|
|
132
|
+
base64KeyPacket: (0, utils_1.uint8ArrayToBase64String)(keyPacket),
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* It encrypts password with provided address key that can be used to
|
|
137
|
+
* manage the public link, encrypts share passphrase session key using
|
|
138
|
+
* provided bcrypt passphrase and generates SRP verifier.
|
|
139
|
+
*/
|
|
140
|
+
async encryptPublicLinkPasswordAndSessionKey(password, addressKey, bcryptPassphrase, sharePassphraseSessionKey) {
|
|
141
|
+
const [{ armoredData: armoredPassword }, { keyPacket }, srp] = await Promise.all([
|
|
142
|
+
this.openPGPCrypto.encryptArmored(new TextEncoder().encode(password), [addressKey]),
|
|
143
|
+
this.openPGPCrypto.encryptSessionKeyWithPassword(sharePassphraseSessionKey, bcryptPassphrase),
|
|
144
|
+
this.srpModule.getSrpVerifier(password),
|
|
145
|
+
]);
|
|
146
|
+
return {
|
|
147
|
+
armoredPassword,
|
|
148
|
+
base64SharePassphraseKeyPacket: (0, utils_1.uint8ArrayToBase64String)(keyPacket),
|
|
149
|
+
srp,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* It decrypts session key from armored data.
|
|
154
|
+
*
|
|
155
|
+
* `decryptionKeys` are used to decrypt the session key from the `armoredData`.
|
|
156
|
+
*/
|
|
157
|
+
async decryptSessionKey(armoredData, decryptionKeys) {
|
|
158
|
+
const sessionKey = await this.openPGPCrypto.decryptArmoredSessionKey(armoredData, decryptionKeys);
|
|
159
|
+
return sessionKey;
|
|
160
|
+
}
|
|
161
|
+
async decryptAndVerifySessionKey(base64data, armoredSignature, decryptionKeys, verificationKeys) {
|
|
162
|
+
const data = (0, utils_1.base64StringToUint8Array)(base64data);
|
|
163
|
+
const sessionKey = await this.openPGPCrypto.decryptSessionKey(data, decryptionKeys);
|
|
164
|
+
let verified;
|
|
165
|
+
if (armoredSignature) {
|
|
166
|
+
const result = await this.openPGPCrypto.verify(sessionKey.data, armoredSignature, verificationKeys);
|
|
167
|
+
verified = result.verified;
|
|
168
|
+
}
|
|
169
|
+
return {
|
|
170
|
+
sessionKey,
|
|
171
|
+
verified,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* It decrypts key similarly like `decryptKey`, but without signature
|
|
176
|
+
* verification. This is used for invitations.
|
|
177
|
+
*/
|
|
178
|
+
async decryptUnsignedKey(armoredKey, armoredPassphrase, decryptionKeys) {
|
|
179
|
+
const { data: decryptedPassphrase } = await this.openPGPCrypto.decryptArmoredAndVerify(armoredPassphrase, decryptionKeys, []);
|
|
180
|
+
const passphrase = uint8ArrayToUtf8(decryptedPassphrase);
|
|
181
|
+
const key = await this.openPGPCrypto.decryptKey(armoredKey, passphrase);
|
|
182
|
+
return key;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* It encrypts and armors signature with provided session and encryption keys.
|
|
186
|
+
*/
|
|
187
|
+
async encryptSignature(signature, encryptionKey, sessionKey) {
|
|
188
|
+
const { armoredData: armoredSignature } = await this.openPGPCrypto.encryptArmored(signature, [encryptionKey], sessionKey);
|
|
189
|
+
return {
|
|
190
|
+
armoredSignature,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* It generates random 32 bytes that are encrypted and signed with
|
|
195
|
+
* the provided key.
|
|
196
|
+
*/
|
|
197
|
+
async generateHashKey(encryptionAndSigningKey) {
|
|
198
|
+
// Once all clients can use non-ascii bytes, switch to simple
|
|
199
|
+
// generating of random bytes without encoding it into base64:
|
|
200
|
+
//const passphrase crypto.getRandomValues(new Uint8Array(32));
|
|
201
|
+
const passphrase = this.openPGPCrypto.generatePassphrase();
|
|
202
|
+
const hashKey = new TextEncoder().encode(passphrase);
|
|
203
|
+
const { armoredData: armoredHashKey } = await this.openPGPCrypto.encryptAndSignArmored(hashKey, undefined, [encryptionAndSigningKey], encryptionAndSigningKey);
|
|
204
|
+
return {
|
|
205
|
+
armoredHashKey,
|
|
206
|
+
hashKey,
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
async generateLookupHash(newName, parentHashKey) {
|
|
210
|
+
const key = await (0, hmac_1.importHmacKey)(parentHashKey);
|
|
211
|
+
const signature = await (0, hmac_1.computeHmacSignature)(key, new TextEncoder().encode(newName));
|
|
212
|
+
return (0, exports.arrayToHexString)(signature);
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* It converts node name into bytes array and encrypts and signs
|
|
216
|
+
* with provided keys.
|
|
217
|
+
*
|
|
218
|
+
* The function accepts either encryption or session key. Use encryption
|
|
219
|
+
* key if you want to encrypt the name for the new node. Use session key
|
|
220
|
+
* if you want to encrypt the new name for the existing node.
|
|
221
|
+
*/
|
|
222
|
+
async encryptNodeName(nodeName, sessionKey, encryptionKey, signingKey) {
|
|
223
|
+
if (!sessionKey && !encryptionKey) {
|
|
224
|
+
throw new Error('Neither session nor encryption key provided for encrypting node name');
|
|
225
|
+
}
|
|
226
|
+
const { armoredData: armoredNodeName } = await this.openPGPCrypto.encryptAndSignArmored(new TextEncoder().encode(nodeName), sessionKey, encryptionKey ? [encryptionKey] : [], signingKey);
|
|
227
|
+
return {
|
|
228
|
+
armoredNodeName,
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* It decrypts armored node name and verifies embeded signature.
|
|
233
|
+
*
|
|
234
|
+
* Note: The function doesn't throw in case of verification issue.
|
|
235
|
+
* You have to read `verified` result and act based on that.
|
|
236
|
+
*/
|
|
237
|
+
async decryptNodeName(armoredNodeName, decryptionKey, verificationKeys) {
|
|
238
|
+
const { data: name, verified } = await this.openPGPCrypto.decryptArmoredAndVerify(armoredNodeName, [decryptionKey], verificationKeys);
|
|
239
|
+
return {
|
|
240
|
+
name: uint8ArrayToUtf8(name),
|
|
241
|
+
verified,
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* It decrypts armored node hash key and verifies embeded signature.
|
|
246
|
+
*
|
|
247
|
+
* Note: The function doesn't throw in case of verification issue.
|
|
248
|
+
* You have to read `verified` result and act based on that.
|
|
249
|
+
*/
|
|
250
|
+
async decryptNodeHashKey(armoredHashKey, decryptionAndVerificationKey, extraVerificationKeys) {
|
|
251
|
+
// In the past, we had misunderstanding what key is used to sign hash
|
|
252
|
+
// key. Originally, it meant to be the node key, which web used for all
|
|
253
|
+
// nodes besides the root one, where address key was used instead.
|
|
254
|
+
// Similarly, iOS or Android used address key for all nodes. Latest
|
|
255
|
+
// versions should use node key in all cases, but we accept also
|
|
256
|
+
// address key. Its still signed with a valid key.
|
|
257
|
+
const { data: hashKey, verified } = await this.openPGPCrypto.decryptArmoredAndVerify(armoredHashKey, [decryptionAndVerificationKey], [decryptionAndVerificationKey, ...extraVerificationKeys]);
|
|
258
|
+
return {
|
|
259
|
+
hashKey,
|
|
260
|
+
verified,
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
async encryptExtendedAttributes(extendedAttributes, encryptionKey, signingKey) {
|
|
264
|
+
const { armoredData: armoredExtendedAttributes } = await this.openPGPCrypto.encryptAndSignArmored(new TextEncoder().encode(extendedAttributes), undefined, [encryptionKey], signingKey);
|
|
265
|
+
return {
|
|
266
|
+
armoredExtendedAttributes,
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
async decryptExtendedAttributes(armoreExtendedAttributes, decryptionKey, verificationKeys) {
|
|
270
|
+
const { data: decryptedExtendedAttributes, verified } = await this.openPGPCrypto.decryptArmoredAndVerify(armoreExtendedAttributes, [decryptionKey], verificationKeys);
|
|
271
|
+
return {
|
|
272
|
+
extendedAttributes: uint8ArrayToUtf8(decryptedExtendedAttributes),
|
|
273
|
+
verified,
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
async encryptInvitation(shareSessionKey, encryptionKey, signingKey) {
|
|
277
|
+
const { keyPacket } = await this.openPGPCrypto.encryptSessionKey(shareSessionKey, encryptionKey);
|
|
278
|
+
const { signature: keyPacketSignature } = await this.openPGPCrypto.sign(keyPacket, signingKey, SIGNING_CONTEXTS.SHARING_INVITER);
|
|
279
|
+
return {
|
|
280
|
+
base64KeyPacket: (0, utils_1.uint8ArrayToBase64String)(keyPacket),
|
|
281
|
+
base64KeyPacketSignature: (0, utils_1.uint8ArrayToBase64String)(keyPacketSignature),
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
async acceptInvitation(base64KeyPacket, signingKey) {
|
|
285
|
+
const sessionKey = await this.decryptSessionKey(base64KeyPacket, signingKey);
|
|
286
|
+
const { signature } = await this.openPGPCrypto.sign(sessionKey.data, signingKey, SIGNING_CONTEXTS.SHARING_MEMBER);
|
|
287
|
+
return {
|
|
288
|
+
base64SessionKeySignature: (0, utils_1.uint8ArrayToBase64String)(signature),
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
async encryptExternalInvitation(shareSessionKey, signingKey, inviteeEmail) {
|
|
292
|
+
const data = inviteeEmail.concat('|').concat((0, utils_1.uint8ArrayToBase64String)(shareSessionKey.data));
|
|
293
|
+
const { signature: externalInviationSignature } = await this.openPGPCrypto.sign(new TextEncoder().encode(data), signingKey, SIGNING_CONTEXTS.SHARING_INVITER_EXTERNAL_INVITATION);
|
|
294
|
+
return {
|
|
295
|
+
base64ExternalInvitationSignature: (0, utils_1.uint8ArrayToBase64String)(externalInviationSignature),
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
async encryptThumbnailBlock(thumbnailData, sessionKey, signingKey) {
|
|
299
|
+
const { encryptedData } = await this.openPGPCrypto.encryptAndSign(thumbnailData, sessionKey, [], // Thumbnails use the session key so we do not send encryption key.
|
|
300
|
+
signingKey);
|
|
301
|
+
return {
|
|
302
|
+
encryptedData,
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
async decryptThumbnailBlock(encryptedThumbnail, sessionKey, verificationKeys) {
|
|
306
|
+
const { data: decryptedThumbnail, verified } = await this.openPGPCrypto.decryptAndVerify(encryptedThumbnail, sessionKey, verificationKeys);
|
|
307
|
+
return {
|
|
308
|
+
decryptedThumbnail,
|
|
309
|
+
verified,
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
async encryptBlock(blockData, encryptionKey, sessionKey, signingKey) {
|
|
313
|
+
const { encryptedData, signature } = await this.openPGPCrypto.encryptAndSignDetached(blockData, sessionKey, [], // Blocks use the session key so we do not send encryption key.
|
|
314
|
+
signingKey);
|
|
315
|
+
const { armoredSignature } = await this.encryptSignature(signature, encryptionKey, sessionKey);
|
|
316
|
+
return {
|
|
317
|
+
encryptedData,
|
|
318
|
+
armoredSignature,
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
async decryptBlock(encryptedBlock, armoredSignature, decryptionKey, sessionKey, verificationKeys) {
|
|
322
|
+
const signature = armoredSignature ? await this.openPGPCrypto.decryptArmored(armoredSignature, [decryptionKey]) : undefined;
|
|
323
|
+
const { data: decryptedBlock, verified } = await this.openPGPCrypto.decryptAndVerifyDetached(encryptedBlock, signature, sessionKey, verificationKeys);
|
|
324
|
+
return {
|
|
325
|
+
decryptedBlock,
|
|
326
|
+
verified,
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
async signManifest(manifest, signingKey) {
|
|
330
|
+
const { signature: armoredManifestSignature } = await this.openPGPCrypto.signArmored(manifest, signingKey);
|
|
331
|
+
return {
|
|
332
|
+
armoredManifestSignature,
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
async verifyManifest(manifest, armoredSignature, verificationKeys) {
|
|
336
|
+
const { verified } = await this.openPGPCrypto.verify(manifest, armoredSignature, verificationKeys);
|
|
337
|
+
return {
|
|
338
|
+
verified,
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
async decryptShareUrlPassword(armoredPassword, decryptionKeys) {
|
|
342
|
+
const password = await this.openPGPCrypto.decryptArmored(armoredPassword, decryptionKeys);
|
|
343
|
+
return uint8ArrayToUtf8(password);
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
exports.DriveCrypto = DriveCrypto;
|
|
347
|
+
function uint8ArrayToUtf8(input) {
|
|
348
|
+
return new TextDecoder('utf-8', { fatal: true }).decode(input);
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* Convert an array of 8-bit integers to a hex string
|
|
352
|
+
* @param bytes - Array of 8-bit integers to convert
|
|
353
|
+
* @returns Hexadecimal representation of the array
|
|
354
|
+
*/
|
|
355
|
+
const arrayToHexString = (bytes) => {
|
|
356
|
+
const hexAlphabet = '0123456789abcdef';
|
|
357
|
+
let s = '';
|
|
358
|
+
bytes.forEach((v) => {
|
|
359
|
+
s += hexAlphabet[v >> 4] + hexAlphabet[v & 15];
|
|
360
|
+
});
|
|
361
|
+
return s;
|
|
362
|
+
};
|
|
363
|
+
exports.arrayToHexString = arrayToHexString;
|
|
364
|
+
//# sourceMappingURL=driveCrypto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driveCrypto.js","sourceRoot":"","sources":["../../src/crypto/driveCrypto.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const driveCrypto_1 = require("./driveCrypto");
|
|
4
|
+
describe("uint8ArrayToUtf8", () => {
|
|
5
|
+
it("should convert a Uint8Array to a UTF-8 string", () => {
|
|
6
|
+
const input = new Uint8Array([72, 101, 108, 108, 111]);
|
|
7
|
+
const expectedOutput = "Hello";
|
|
8
|
+
const result = (0, driveCrypto_1.uint8ArrayToUtf8)(input);
|
|
9
|
+
expect(result).toBe(expectedOutput);
|
|
10
|
+
});
|
|
11
|
+
it("should handle an empty Uint8Array", () => {
|
|
12
|
+
const input = new Uint8Array([]);
|
|
13
|
+
const expectedOutput = "";
|
|
14
|
+
const result = (0, driveCrypto_1.uint8ArrayToUtf8)(input);
|
|
15
|
+
expect(result).toBe(expectedOutput);
|
|
16
|
+
});
|
|
17
|
+
it("should throw if input is invalid", () => {
|
|
18
|
+
const input = new Uint8Array([887987979887897989]);
|
|
19
|
+
expect(() => (0, driveCrypto_1.uint8ArrayToUtf8)(input)).toThrow("The encoded data was not valid for encoding utf-8");
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
describe("arrayToHexString", () => {
|
|
23
|
+
it("should convert a Uint8Array to a hex string", () => {
|
|
24
|
+
const input = new Uint8Array([0, 255, 16, 32]);
|
|
25
|
+
const expectedOutput = "00ff1020";
|
|
26
|
+
const result = (0, driveCrypto_1.arrayToHexString)(input);
|
|
27
|
+
expect(result).toBe(expectedOutput);
|
|
28
|
+
});
|
|
29
|
+
it("should handle an empty Uint8Array", () => {
|
|
30
|
+
const input = new Uint8Array([]);
|
|
31
|
+
const expectedOutput = "";
|
|
32
|
+
const result = (0, driveCrypto_1.arrayToHexString)(input);
|
|
33
|
+
expect(result).toBe(expectedOutput);
|
|
34
|
+
});
|
|
35
|
+
it("should handle a Uint8Array with one element", () => {
|
|
36
|
+
const input = new Uint8Array([1]);
|
|
37
|
+
const expectedOutput = "01";
|
|
38
|
+
const result = (0, driveCrypto_1.arrayToHexString)(input);
|
|
39
|
+
expect(result).toBe(expectedOutput);
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=driveCrypto.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driveCrypto.test.js","sourceRoot":"","sources":["../../src/crypto/driveCrypto.test.ts"],"names":[],"mappings":";;AAAA,+CAAmE;AAEnE,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACrD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACvD,MAAM,cAAc,GAAG,OAAO,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAA,8BAAgB,EAAC,KAAK,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QACzC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;QACjC,MAAM,cAAc,GAAG,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,IAAA,8BAAgB,EAAC,KAAK,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QACxC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,8BAAgB,EAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,mDAAmD,CAAC,CAAC;IACvG,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACnD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC/C,MAAM,cAAc,GAAG,UAAU,CAAC;QAClC,MAAM,MAAM,GAAG,IAAA,8BAAgB,EAAC,KAAK,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QACzC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;QACjC,MAAM,cAAc,GAAG,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,IAAA,8BAAgB,EAAC,KAAK,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACnD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,cAAc,GAAG,IAAI,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAA,8BAAgB,EAAC,KAAK,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export type HmacCryptoKey = CryptoKey;
|
|
2
|
+
type HmacKeyUsage = 'sign' | 'verify';
|
|
3
|
+
/**
|
|
4
|
+
* Import an HMAC-SHA256 key in order to use it with `signData` and `verifyData`.
|
|
5
|
+
*/
|
|
6
|
+
export declare const importHmacKey: (key: Uint8Array, keyUsage?: HmacKeyUsage[]) => Promise<HmacCryptoKey>;
|
|
7
|
+
/**
|
|
8
|
+
* Sign data using HMAC-SHA256
|
|
9
|
+
* @param key - WebCrypto secret key for signing
|
|
10
|
+
* @param data - data to sign
|
|
11
|
+
* @param additionalData - additional data to authenticate
|
|
12
|
+
*/
|
|
13
|
+
export declare const computeHmacSignature: (key: HmacCryptoKey, data: Uint8Array) => Promise<Uint8Array>;
|
|
14
|
+
/**
|
|
15
|
+
* Verify data using HMAC-SHA256
|
|
16
|
+
* @param key - WebCrypto secret key for verification
|
|
17
|
+
* @param signature - signature over data
|
|
18
|
+
* @param data - data to verify
|
|
19
|
+
* @param additionalData - additional data to authenticate
|
|
20
|
+
*/
|
|
21
|
+
export declare const verifyData: (key: HmacCryptoKey, signature: Uint8Array, data: Uint8Array) => Promise<boolean>;
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.verifyData = exports.computeHmacSignature = exports.importHmacKey = void 0;
|
|
4
|
+
const HASH_ALGORITHM = 'SHA-256';
|
|
5
|
+
const KEY_LENGTH_BYTES = 32;
|
|
6
|
+
/**
|
|
7
|
+
* Import an HMAC-SHA256 key in order to use it with `signData` and `verifyData`.
|
|
8
|
+
*/
|
|
9
|
+
const importHmacKey = async (key, keyUsage = ['sign', 'verify']) => {
|
|
10
|
+
// From https://datatracker.ietf.org/doc/html/rfc2104:
|
|
11
|
+
// The key for HMAC can be of any length (keys longer than B bytes are first hashed using H).
|
|
12
|
+
// However, less than L bytes (L = 32 bytes for SHA-256) is strongly discouraged as it would
|
|
13
|
+
// decrease the security strength of the function. Keys longer than L bytes are acceptable
|
|
14
|
+
// but the extra length would not significantly increase the function strength.
|
|
15
|
+
// (A longer key may be advisable if the randomness of the key is considered weak.)
|
|
16
|
+
if (key.length < KEY_LENGTH_BYTES) {
|
|
17
|
+
throw new Error('Unexpected HMAC key size: key is too short');
|
|
18
|
+
}
|
|
19
|
+
return crypto.subtle.importKey('raw', key, { name: 'HMAC', hash: HASH_ALGORITHM }, false, keyUsage);
|
|
20
|
+
};
|
|
21
|
+
exports.importHmacKey = importHmacKey;
|
|
22
|
+
/**
|
|
23
|
+
* Sign data using HMAC-SHA256
|
|
24
|
+
* @param key - WebCrypto secret key for signing
|
|
25
|
+
* @param data - data to sign
|
|
26
|
+
* @param additionalData - additional data to authenticate
|
|
27
|
+
*/
|
|
28
|
+
const computeHmacSignature = async (key, data) => {
|
|
29
|
+
const signatureBuffer = await crypto.subtle.sign({ name: 'HMAC', hash: HASH_ALGORITHM }, key, data);
|
|
30
|
+
return new Uint8Array(signatureBuffer);
|
|
31
|
+
};
|
|
32
|
+
exports.computeHmacSignature = computeHmacSignature;
|
|
33
|
+
/**
|
|
34
|
+
* Verify data using HMAC-SHA256
|
|
35
|
+
* @param key - WebCrypto secret key for verification
|
|
36
|
+
* @param signature - signature over data
|
|
37
|
+
* @param data - data to verify
|
|
38
|
+
* @param additionalData - additional data to authenticate
|
|
39
|
+
*/
|
|
40
|
+
const verifyData = async (key, signature, data) => {
|
|
41
|
+
return crypto.subtle.verify({ name: 'HMAC', hash: HASH_ALGORITHM }, key, signature, data);
|
|
42
|
+
};
|
|
43
|
+
exports.verifyData = verifyData;
|
|
44
|
+
//# sourceMappingURL=hmac.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hmac.js","sourceRoot":"","sources":["../../src/crypto/hmac.ts"],"names":[],"mappings":";;;AAAA,MAAM,cAAc,GAAG,SAAS,CAAC;AACjC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAK5B;;GAEG;AACI,MAAM,aAAa,GAAG,KAAK,EAC9B,GAAe,EACf,WAA2B,CAAC,MAAM,EAAE,QAAQ,CAAC,EACvB,EAAE;IACxB,sDAAsD;IACtD,6FAA6F;IAC7F,4FAA4F;IAC5F,2FAA2F;IAC3F,+EAA+E;IAC/E,mFAAmF;IACnF,IAAI,GAAG,CAAC,MAAM,GAAG,gBAAgB,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;AACxG,CAAC,CAAC;AAdW,QAAA,aAAa,iBAcxB;AAEF;;;;;GAKG;AACI,MAAM,oBAAoB,GAAG,KAAK,EAAE,GAAkB,EAAE,IAAgB,EAAE,EAAE;IAC/E,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IACpG,OAAO,IAAI,UAAU,CAAC,eAAe,CAAC,CAAC;AAC3C,CAAC,CAAC;AAHW,QAAA,oBAAoB,wBAG/B;AAEF;;;;;;GAMG;AACI,MAAM,UAAU,GAAG,KAAK,EAAE,GAAkB,EAAE,SAAqB,EAAE,IAAgB,EAAE,EAAE;IAC5F,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AAC9F,CAAC,CAAC;AAFW,QAAA,UAAU,cAErB"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type { OpenPGPCrypto, PrivateKey, PublicKey, SessionKey, SRPModule, SRPVerifier } from './interface';
|
|
2
|
+
export { VERIFICATION_STATUS } from './interface';
|
|
3
|
+
export { DriveCrypto } from './driveCrypto';
|
|
4
|
+
export type { OpenPGPCryptoProxy } from './openPGPCrypto';
|
|
5
|
+
export { OpenPGPCryptoWithCryptoProxy } from './openPGPCrypto';
|
|
6
|
+
export { uint8ArrayToBase64String, base64StringToUint8Array } from './utils';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.base64StringToUint8Array = exports.uint8ArrayToBase64String = exports.OpenPGPCryptoWithCryptoProxy = exports.DriveCrypto = exports.VERIFICATION_STATUS = void 0;
|
|
4
|
+
var interface_1 = require("./interface");
|
|
5
|
+
Object.defineProperty(exports, "VERIFICATION_STATUS", { enumerable: true, get: function () { return interface_1.VERIFICATION_STATUS; } });
|
|
6
|
+
var driveCrypto_1 = require("./driveCrypto");
|
|
7
|
+
Object.defineProperty(exports, "DriveCrypto", { enumerable: true, get: function () { return driveCrypto_1.DriveCrypto; } });
|
|
8
|
+
var openPGPCrypto_1 = require("./openPGPCrypto");
|
|
9
|
+
Object.defineProperty(exports, "OpenPGPCryptoWithCryptoProxy", { enumerable: true, get: function () { return openPGPCrypto_1.OpenPGPCryptoWithCryptoProxy; } });
|
|
10
|
+
var utils_1 = require("./utils");
|
|
11
|
+
Object.defineProperty(exports, "uint8ArrayToBase64String", { enumerable: true, get: function () { return utils_1.uint8ArrayToBase64String; } });
|
|
12
|
+
Object.defineProperty(exports, "base64StringToUint8Array", { enumerable: true, get: function () { return utils_1.base64StringToUint8Array; } });
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/crypto/index.ts"],"names":[],"mappings":";;;AACA,yCAAkD;AAAzC,gHAAA,mBAAmB,OAAA;AAC5B,6CAA4C;AAAnC,0GAAA,WAAW,OAAA;AAEpB,iDAA+D;AAAtD,6HAAA,4BAA4B,OAAA;AACrC,iCAA6E;AAApE,iHAAA,wBAAwB,OAAA;AAAE,iHAAA,wBAAwB,OAAA"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
export interface PublicKey {
|
|
2
|
+
readonly _idx: any;
|
|
3
|
+
readonly _keyContentHash: [string, string];
|
|
4
|
+
getVersion(): number;
|
|
5
|
+
getFingerprint(): string;
|
|
6
|
+
getSHA256Fingerprints(): string[];
|
|
7
|
+
getKeyID(): any;
|
|
8
|
+
getKeyIDs(): any[];
|
|
9
|
+
getAlgorithmInfo(): any;
|
|
10
|
+
getCreationTime(): Date;
|
|
11
|
+
isPrivate: any;
|
|
12
|
+
isPrivateKeyV4: any;
|
|
13
|
+
isPrivateKeyV6: any;
|
|
14
|
+
getExpirationTime(): Date | number | null;
|
|
15
|
+
getUserIDs(): string[];
|
|
16
|
+
isWeak(): boolean;
|
|
17
|
+
equals(otherKey: any, ignoreOtherCerts?: boolean): boolean;
|
|
18
|
+
subkeys: {
|
|
19
|
+
getAlgorithmInfo(): any;
|
|
20
|
+
getKeyID(): any;
|
|
21
|
+
}[];
|
|
22
|
+
}
|
|
23
|
+
export interface PrivateKey extends PublicKey {
|
|
24
|
+
readonly _dummyType: 'private';
|
|
25
|
+
}
|
|
26
|
+
export interface SessionKey {
|
|
27
|
+
data: Uint8Array;
|
|
28
|
+
algorithm: any;
|
|
29
|
+
aeadAlgorithm?: any;
|
|
30
|
+
}
|
|
31
|
+
export declare enum VERIFICATION_STATUS {
|
|
32
|
+
NOT_SIGNED = 0,
|
|
33
|
+
SIGNED_AND_VALID = 1,
|
|
34
|
+
SIGNED_AND_INVALID = 2
|
|
35
|
+
}
|
|
36
|
+
export interface SRPModule {
|
|
37
|
+
getSrpVerifier: (password: string) => Promise<SRPVerifier>;
|
|
38
|
+
}
|
|
39
|
+
export type SRPVerifier = {
|
|
40
|
+
modulusId: string;
|
|
41
|
+
version: number;
|
|
42
|
+
salt: string;
|
|
43
|
+
verifier: string;
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* OpenPGP crypto layer to provide necessary PGP operations for Drive crypto.
|
|
47
|
+
*
|
|
48
|
+
* This layer focuses on providing general openPGP functions. Every operation
|
|
49
|
+
* should prefer binary input and output. Ideally, armoring should be done
|
|
50
|
+
* later in serialisation step, but for now, it is part of the interface to
|
|
51
|
+
* be somewhat compatible with current web app, and also be more efficient
|
|
52
|
+
* (current CryptoProxy can do encryption and armoring in one operation with
|
|
53
|
+
* less passing data between web workers). In the future, we want to separate
|
|
54
|
+
* this out of here more.
|
|
55
|
+
*/
|
|
56
|
+
export interface OpenPGPCrypto {
|
|
57
|
+
/**
|
|
58
|
+
* Generate a random passphrase.
|
|
59
|
+
*
|
|
60
|
+
* 32 random bytes are generated and encoded into a base64 string.
|
|
61
|
+
*/
|
|
62
|
+
generatePassphrase: () => string;
|
|
63
|
+
generateSessionKey: (encryptionKeys: PrivateKey[]) => Promise<SessionKey>;
|
|
64
|
+
encryptSessionKey: (sessionKey: SessionKey, encryptionKeys: PublicKey | PublicKey[]) => Promise<{
|
|
65
|
+
keyPacket: Uint8Array;
|
|
66
|
+
}>;
|
|
67
|
+
encryptSessionKeyWithPassword: (sessionKey: SessionKey, password: string) => Promise<{
|
|
68
|
+
keyPacket: Uint8Array;
|
|
69
|
+
}>;
|
|
70
|
+
/**
|
|
71
|
+
* Generate a new key pair locked by a passphrase.
|
|
72
|
+
*
|
|
73
|
+
* The key pair is generated using the Curve25519 algorithm.
|
|
74
|
+
*/
|
|
75
|
+
generateKey: (passphrase: string) => Promise<{
|
|
76
|
+
privateKey: PrivateKey;
|
|
77
|
+
armoredKey: string;
|
|
78
|
+
}>;
|
|
79
|
+
encryptArmored: (data: Uint8Array, encryptionKeys: PrivateKey[], sessionKey?: SessionKey) => Promise<{
|
|
80
|
+
armoredData: string;
|
|
81
|
+
}>;
|
|
82
|
+
encryptAndSign: (data: Uint8Array, sessionKey: SessionKey, encryptionKeys: PrivateKey[], signingKey: PrivateKey) => Promise<{
|
|
83
|
+
encryptedData: Uint8Array;
|
|
84
|
+
}>;
|
|
85
|
+
encryptAndSignArmored: (data: Uint8Array, sessionKey: SessionKey | undefined, encryptionKeys: PrivateKey[], signingKey: PrivateKey) => Promise<{
|
|
86
|
+
armoredData: string;
|
|
87
|
+
}>;
|
|
88
|
+
encryptAndSignDetached: (data: Uint8Array, sessionKey: SessionKey, encryptionKeys: PrivateKey[], signingKey: PrivateKey) => Promise<{
|
|
89
|
+
encryptedData: Uint8Array;
|
|
90
|
+
signature: Uint8Array;
|
|
91
|
+
}>;
|
|
92
|
+
encryptAndSignDetachedArmored: (data: Uint8Array, sessionKey: SessionKey, encryptionKeys: PrivateKey[], signingKey: PrivateKey) => Promise<{
|
|
93
|
+
armoredData: string;
|
|
94
|
+
armoredSignature: string;
|
|
95
|
+
}>;
|
|
96
|
+
sign: (data: Uint8Array, signingKey: PrivateKey, signatureContext: string) => Promise<{
|
|
97
|
+
signature: Uint8Array;
|
|
98
|
+
}>;
|
|
99
|
+
signArmored: (data: Uint8Array, signingKey: PrivateKey | PrivateKey[]) => Promise<{
|
|
100
|
+
signature: string;
|
|
101
|
+
}>;
|
|
102
|
+
verify: (data: Uint8Array, armoredSignature: string, verificationKeys: PublicKey | PublicKey[]) => Promise<{
|
|
103
|
+
verified: VERIFICATION_STATUS;
|
|
104
|
+
}>;
|
|
105
|
+
decryptSessionKey: (data: Uint8Array, decryptionKeys: PrivateKey | PrivateKey[]) => Promise<SessionKey>;
|
|
106
|
+
decryptArmoredSessionKey: (armoredData: string, decryptionKeys: PrivateKey | PrivateKey[]) => Promise<SessionKey>;
|
|
107
|
+
decryptKey: (armoredKey: string, passphrase: string) => Promise<PrivateKey>;
|
|
108
|
+
decryptAndVerify(data: Uint8Array, sessionKey: SessionKey, verificationKeys: PublicKey | PublicKey[]): Promise<{
|
|
109
|
+
data: Uint8Array;
|
|
110
|
+
verified: VERIFICATION_STATUS;
|
|
111
|
+
}>;
|
|
112
|
+
decryptAndVerifyDetached(data: Uint8Array, signature: Uint8Array | undefined, sessionKey: SessionKey, verificationKeys?: PublicKey | PublicKey[]): Promise<{
|
|
113
|
+
data: Uint8Array;
|
|
114
|
+
verified: VERIFICATION_STATUS;
|
|
115
|
+
}>;
|
|
116
|
+
decryptArmored(armoredData: string, decryptionKeys: PrivateKey | PrivateKey[]): Promise<Uint8Array>;
|
|
117
|
+
decryptArmoredAndVerify: (armoredData: string, decryptionKeys: PrivateKey | PrivateKey[], verificationKeys: PublicKey | PublicKey[]) => Promise<{
|
|
118
|
+
data: Uint8Array;
|
|
119
|
+
verified: VERIFICATION_STATUS;
|
|
120
|
+
}>;
|
|
121
|
+
decryptArmoredAndVerifyDetached: (armoredData: string, armoredSignature: string, sessionKey: SessionKey, verificationKeys: PublicKey | PublicKey[]) => Promise<{
|
|
122
|
+
data: Uint8Array;
|
|
123
|
+
verified: VERIFICATION_STATUS;
|
|
124
|
+
}>;
|
|
125
|
+
}
|