frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

fp.

Open in hackernews

Show HN: aero.zip - E2EE resumable file transfer, not P2P, 100 GB, OPAQUE auth

https://aero.zip
5•pypt•7h ago
Hey HN! I'm Linas, and here's my take on XKCD 949.

I've created a file sending/sharing website (think WeTransfer) which I believe is unique in several ways:

* End-to-end encrypted * Recipients can start their download anytime, i.e. it's not P2P WebRTC-based thing like FilePizza * (Effectively) no limit on the size of the uploaded data, i.e. it will encrypt/decrypt 100 GB just fine * (Effectively) no limit the number of files that get sent * Real-time transfers, i.e. recipients can start downloading their files even before you finish uploading them * Resumable uploads/downloads * ZIP downloads - creates ZIPs on the fly in the browser from decrypted data * Full passkey auth, i.e. can derive data encryption key from a passkey with PRF * Fast - 10 Gbps link, plus due to the chunking design, uploading 1024 files of 1 KB or a single 1 MB file take about the same amount of time * No nasty trackers

Also, it has a dark mode!

The upload process joins small files together, splits large files apart, builds ~1 MB chunks from the data, encrypts each chunk with AES-256-GCM (each with its own unique IV), and streams it out via a WebSockets channel; the download process does pretty much the same thing in reverse.

Server-side, incoming uploads get written into a bespoke binary format (something like Protobuf) supporting random access. This enables upload/download resume, selective download of one or more files, and real-time downloads.

When downloading, the website sets up a service worker and adds its URL as an iframe (a known hack to force the browser to download something produced by JavaScript). Said service worker fetches the data, decrypts it, and then creates an uncompressed ZIP archive on the fly; for that purpose, I've implemented a whole new streaming ZIP64 archiver (which I'm considering open-sourcing at some point).

I'm using OPAQUE for authentication (though serenity-kit/opaque and Facebook's opaque-ke), as this seemed to be a good way to prevent me from being able to learn anyone's "hunter2" (passwords are used for encrypting the DEK which in turn encrypts uploads' "secret keys" for authenticated users). Also, OPAQUE would prevent weak passwords from getting cracked in case of a security mess-up on my end.

The website is able to authenticate the user fully using just the passkey. If the passkey provider has support for PRF, the website won't have to ask the user for their master password as it will then be able to decrypt the DEK using the PRF; otherwise, passkeys serve as a way to do 2FA. If you'd like to try it out, use iCloud Keychain (on macOS / iOS), Windows Hello, or Android for storing a passkey.

The frontend uses Svelte 5. I'm no frontend magician like some here, but I think at least I managed to keep it fast and simple.

I figured that if our messages are now E2E-encrypted by default, and even which news articles I'm reading on my news website are protected by TLS, then the users of file sending services should enjoy some privacy too - at this point E2EE should be just basic privacy hygiene.

The whole project took way longer than I'd like to admit, mostly because I got nerd-sniped by a bunch of premature optimization, and also had to fake my way into learning how to do modern frontend.

There's a 2 GB free limit for free transfers, also a Premium subscription option with a 100 GB limit. I want this to exist for the long term, but I have to make the finances work. If you find it useful, I'd love your support! If there's interest from HN, happy to share a promo code for a free trial (no CC required).

Feedback welcome!

(Please excuse the grammatical mistakes if any, I'm not a native English speaker, and I didn't want to feed this to an LLM to make it look like AI slop.)

Comments

KomoD•3h ago
> (Effectively) no limit on the size of the uploaded data

Except there is, it's 2GB or 100GB, you said it yourself.

> Send up to 2 GB in a single upload

> Store up to 2 GB of data

> Send up to 100 GB in a single upload

> Store up to 100 GB of data

I uploaded a file and now I can't download it because the download endpoint is a 404.

pypt•2h ago
Hey KomoD, thanks for trying it out!

> I uploaded a file and now I can't download it because the download endpoint is a 404.

Weird, looking at the logs it appears that the service worker didn't manage to register in your browser. Are you using some aggressive adblock by any chance?

I have to resort to registering a service worker and using it for downloads to make the decryption + download as a ZIP work for very large streams. The registered SW then gets added as an iframe, and that iframe triggers the download. In your case, it's as if the SW didn't manage to register so the added iframe led to nowhere.

> Except there is, it's 2GB or 100GB, you said it yourself.

Fair point - my phrasing was poor there. I meant that the architecture has no technical limits (unlike browser-based encryption which often crashes RAM on large files), whereas the 2GB/100GB are just business quotas to keep the lights on.

The architectural difference is actually why I built this. Standard E2EE services often choke on thousands of small files (because they attempt to upload everything with individual HTTP PUTs to S3) or struggle with massive single files (due to memory limits). By streaming encrypted chunks via WebSockets, aero.zip's setup handles 10k 1KB files or one 10GB file with roughly the same performance.

Samsung to halt SATA SSD production, leaker warns

https://www.notebookcheck.net/Samsung-to-halt-SATA-SSD-production-leaker-warns-of-up-to-18-months...
3•walterbell•1m ago•0 comments

"Just doing things" is not a path to value

https://productpicnic.beehiiv.com/p/action-without-critical-thinking-is
1•gpi•2m ago•0 comments

Teaching Postgres to Facet Like Elasticsearch

https://www.paradedb.com/blog/faceting
1•jamesgresql•3m ago•1 comments

Show HN: Smart Widgets to Optimise Conversion

https://getrevdock.com
1•imadbkr•4m ago•0 comments

EU Ombudswoman on von der Leyen's disappearing texts

https://www.euronews.com/my-europe/2025/12/12/documents-shouldnt-disappear-eu-ombudswoman-weighs-...
2•HelloUsername•8m ago•0 comments

Hash tables in Go and advantage of self-hosted compilers

https://rushter.com/blog/go-and-hashmaps/
2•f311a•8m ago•0 comments

Turn Your Google Pixel into a Linux Desktop [video]

https://www.youtube.com/watch?v=yzDO-GS-Bm8
2•LucidLynx•9m ago•0 comments

The Worm Hunters of Southern Ontario

https://thelocal.to/ontario-nightcrawler-worm-industry-immigration-labour-climate-change/
1•NaOH•10m ago•0 comments

Invoice Made Easy

https://invoice-parser.netlify.app
1•Slowrodreguez•12m ago•0 comments

Show HN: duel, an online, terminal-based 1v1 game

https://github.com/clarkfannin/cli-duel
1•clarkfannin•13m ago•0 comments

Reddit Answers (Currently in Beta)

https://support.reddithelp.com/hc/en-us/articles/32026729424916-Reddit-Answers-Currently-in-Beta
2•saikatsg•17m ago•0 comments

Treating LLMs as "Stochastic CPUs" Instead of Chatbots (Undergrad)

https://zenodo.org/records/17924469
2•MFOUR_LABS•19m ago•1 comments

The Future of Remote Work

https://staysaasy.com/management/2023/08/05/the-future-of-remote-work.html
2•dailymorn•25m ago•0 comments

Weird Generalization and Inductive Backdoors: New Ways to Corrupt LLMs

https://arxiv.org/abs/2512.09742
2•_tk_•26m ago•0 comments

Paris Pneumatic Clock Network

http://www.douglas-self.com/MUSEUM/COMMS/airclock/airclock.htm
4•reconnecting•29m ago•1 comments

Show HN: Sourcewizard – Turn user feedback into tickets, plans, and PRs

https://edit-me-two.vercel.app
2•doctorslimm•30m ago•3 comments

HyperCard on the Macintosh

https://stonetools.ghost.io/hypercard-mac/
2•rcarmo•32m ago•0 comments

GNU recutils: Plain text database

https://www.gnu.org/software/recutils/
2•polyrand•32m ago•0 comments

The Compact EV That Fits Dense Cities Better Than a Scooter or a Car

https://chargingstack.com/scuter-electric-cabin-ev/
1•simonebrunozzi•33m ago•1 comments

Freakpages

https://freakpages.org/
4•bookofjoe•34m ago•0 comments

Show HN: GameTran – Your language assistant in computer games

https://github.com/ivanyu/GameTran
1•ivanyu•35m ago•0 comments

Auto-Grading Ten Years of Earnings Calls for Prescience and Delusion

https://knowtrend.ai/blog/hindsight-analysis
1•codevs•37m ago•1 comments

Postfix Macros and Let Place

https://nadrieril.github.io/blog/2025/12/09/postfix-macros-and-let-place.html
1•todsacerdoti•38m ago•0 comments

Frutiger Aero

https://en.wikipedia.org/wiki/Frutiger_Aero
2•firefax•42m ago•0 comments

A stalking app, $1.2M Macomb Co. mansion lead feds to pcTattletale creator

https://www.usatoday.com/
1•cebert•43m ago•0 comments

Coding Agents and Complexity Budgets

https://leerob.com/agents
1•saveriomazza2•45m ago•0 comments

Update Now Warning Issued to All iPhone Users

https://www.forbes.com/sites/kateoflahertyuk/2025/12/14/ios-262-update-now-waning-issued-to-all-i...
6•01-_-•45m ago•5 comments

Juggernaut

https://juggernaut-three.vercel.app/email-collection
1•AkashCiel93•45m ago•0 comments

Why My Payment Agent Is Named George, Not Stripe-Agent

https://blog.kestrelsnest.social/posts/2025-12-14-why-my-payment-agent-is-named-george-not-stripe...
1•fortyseven•46m ago•0 comments

Google Translate expands live translation to all earbuds on Android

https://arstechnica.com/google/2025/12/google-translate-learns-slang-and-idioms-expands-live-tran...
1•01-_-•46m ago•0 comments