Skip to content

Conversation

@jimhark
Copy link

@jimhark jimhark commented Jul 21, 2025

Summary

Store encrypted data, which is as large as the source html file, as Base64. Reduces size by 1/3 and improves performance.

Store the encrypted data as Base64. A data URL is a great way to store data in an HTML file, and it supports Base64 encoding.

Fixes

Fixes #228

Details

  • password_template.html: div added to hold data URL
  • cryptoEngine.js provides Base64Encoder
  • cli/index.js: encryptedMatch now matches the data URL, and is parsed using Base64Encoder
  • staticryptJs.js: getEncrypted() reads encrypted data from DOM and returns Uint8Array

Testing

I manually tested node encrypt, node decrypt, and HTML wrapper decrypt.

Notes for Reviewers

Pay attention to how fast a large web page is encrypted and decrypted. Also note file size.

jimhark and others added 7 commits July 20, 2025 20:51
This is part of a push to support larger files. The focus is the switch
to using Uint8Array to store binary data. But also includes:

- When running on Node, use Buffer.from() for hex string conversions.

- To avoid large buffer copy, signedMsg as been replaced by an object
    containing  iv, encrypted, and hmac.

- hmac calculation has changed so it avoids copying (possibly very
    large) encrypted data. See signDigest() in lib/codec.js.

- Minor cleanup

Handling hex encode/decode at the input/output boundaries and using
Uint8Array internally for representing binary data has these benefits:

- More memory efficient, allows processing of 2x larger files.

- Aligns with cryptographic best practices: hashing is now performed
  on raw binary data (Uint8Array) instead of hex strings.

- Behavior is (mostly) unchanged
  - scripts/index_template.html textContent is not implemented and
    needs to be redesigned.
makes unnamed function more self documenting
Also removed use of recursion to improve readability (and debugability).
As a bonus, function is actually shorter (LoC AND lines of text)
cuts size by 1/3 and noticeably improves performance
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

1 participant