-
Notifications
You must be signed in to change notification settings - Fork 16
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Chunked (pseudo-stream) encryption & upload #433
Comments
@drzraf Thant's right! I also want the feature of stream encryption & upload. Why?Here is why Piping UI doesn't support chunked upload for now. The reason is a compatibility with Let me know if a standard way to chunked-upload via HTTP. I'd like to use a standard way to implement chunked feature for Piping UI. Pure HTTP stream on browser
I think so too. I watching the issue about the issue you also commented on. According to the issue, Firefox, Safari and Chrome team seemed to be interested to upload any Alternative solutionHere is an alternative solution chunked stream encryption & upload & download via Piping Server. Piping Chunk is a PoC application for chunked encryption stream upload via Piping Server. So, it's more free to implement an experimental no-standard chunked upload & download than this project. Because of PoC, if you try Piping Chunk, Google Chrome is recommended. |
We indeed lack a standard for chunked uploads so most software rolls their own (eg: owncloud). There is no actual HTTP (1.1) client-side stream-upload implementation, nor resumable/chunked upload client/server standard (which would basically mandate server-side to implement a specific way to assemble segments packets, assuming some headers). The nearest attempts are
But aside from Tus protocol I'm personally interested in one specific (HTTP 1) server-side implementations : Large Object Storage, in S3 but mostly in OpenStack Swift object-storage Independently to the way chunks are sent (incremented query-string parameter, headers, ...), each plaintext File/Blob (or camera) probably have to lead to a |
@drzraf Thank you so much for the information. I heard tus before. Resumable is very attractive. The purpose of Piping UI is to transfer data for every device in secure way over Piping Server, and I'd like to make Piping Server simple as possible. So, I'd like to use client-side data assembling instead of server-side. Now, Piping UI has two E2E encryption methods - password-protection and passwordless protection. As I mentioned the previous comment, password-protection has a compatibility with So, I have a plan to implement chunked upload & download in passwordless protection. When key change process and some field like |
Good news! Google Chrome Canary has now an experimental /Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary --enable-features=FetchUploadStreaming Note that even if you run Chrome above, Piping UI does not support streaming encryption upload yet. |
Good news again! The latest stable Chrome (Version 90.0.4430.93 (Official Build) (x86_64)) now supports Demo videoHere is a full demo video transferring about 1GB file with E2E encryption. This is real stream not chunked (pseudo-stream). piping-ui-e2ee-1g-trim1.mp4Application: https://600584c9b454fcff8b585a46--piping-ui.netlify.app/ BranchThe feature is implemented in branch https://github.com/nwtgck/piping-ui-web/tree/feature/streaming-encrypting-upload. |
Good news! We will have the streaming feature in Chrome 105. |
@drzraf Use passwordless protection for this feature. Passwordless will be enabled by default in the future. The current implementation of Piping UI Robust is here: |
piping-ui-web/src/components/DataUploader.vue
Lines 324 to 327 in e14a9f7
I think we are far from
fetch
'sRequest
ReadableStream
wide browser-support and the only suitable alternative for files > 200 MB is chunked upload.Theoretically,
openpgp.encrypt
can accept aReadableSteam
and we could iteratively read() AEAD-encrypted chunks from it with no need to convey the full Blob in memory at once (neither plain nor encrypted).The implementation challenge rather lies in the upload/chunking.
(A stream-friendly chunked-upload would also allow for live-video upload without the need for memory-hungry temporary storage) (flowjs/flow.js#295)
Have you considered this aspect and possible solutions for it?
BTW: Great work! This software uses state-of-art standards & components and further push an idea once illustrated by https://github.com/hellais/pgp-file-upload/ or encrypt.to. Streamlining these pipelines seems like the last missing piece.
The text was updated successfully, but these errors were encountered: