# Vendored code — Dead Drop page

| file | package | version | license | SHA-256 of the file |
|---|---|---|---|---|
| `vendor/hash-wasm/argon2.umd.min.js` | [hash-wasm](https://www.npmjs.com/package/hash-wasm) | 4.12.0 | MIT (`vendor/hash-wasm/LICENSE`) | `dcec617a2e1b700fa132d1583a186cb70611113395e869f2dd6cc82b415d3094` |

Provenance (2026-09-17): the file is byte-identical to `package/dist/argon2.umd.min.js` inside the npm tarball
`hash-wasm-4.12.0.tgz`, whose SHA-512 matches the registry integrity
`sha512-+/2B2rYLb48I/evdOIhP+K/DD2ca2fgBjp6O+GBEnCDk2e4rpeXIK8GvIyRPjTezgmWn9gmKwkQjjx6BtqDHVQ==`.
`apps/pages/tests/test_drop_page.py` pins the hash above, so a silent swap fails the test suite.

Only Argon2id comes from a library, and only for password-protected drops (it needs WebAssembly, which Tor Browser
disables at the "Safer" level). SHA3-256, HMAC and HKDF are implemented in `drop-core.js` and pinned by
`deaddrop_vectors.json` (a copy of `crypto/deaddrop_vectors.json`); AES-256-GCM and the random source are the
browser's own Web Crypto.
