npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

tarobox

v1.0.16

Published

tarobox - ridiculously simple hash primitive build on base64 expand step and xor compress step

Downloads

18

Readme

tarobox

TaroBox - A simple variable-size PRNG built from btoa and XOR

Program

Compression step

  input - raw data, compressed length

  output - data of compressed length

  procedure - simply wrap around the data from end to start, and xor it, and add a counter to it

  operations are done modulo 256

Expansion step

  input - compressed data

  output - raw data

  procedure - take the btoa of the data (performing any necessary conversion first to make the data valid input for btoa)

Hypothesis

This should be a pretty good PRNG for states of size 8 and above, and especially of size 20 and above

Benefits

  • Built with simple widely available primitivies (XOR, ADD, BTOA)
  • Easy to conceptualize and remember
  • Tunable parameters
  • No magic constants or BS

Costs

  • Slow if secure (we sum the state to produce output byte), yielding 1 byte of IID and entropy per round.
  • Fast but insecure (we could run in 'streaming' mode, just output the entire state on each round, yielding 20 bytes of IID per round but zero bytes of entropy (since you can reconstruct the next state from this one).
  • Untested. It passes gzip/zip test. Even if it passes SMHasher / PractRand, it's not "cryptographic".

Testing

Let's test it, at first just using ZIP tests.

Test 1 - Generate 1000000 random bytes, compress with gzip. Result: 0% compression with gzip.

Possible applications

  • For fun
  • For producing statistically IID numbers / bits
  • For constructing a proof-of-work / hash algorithm.
  • For constructing a toy (or DIY, depending on your risk tolerance / trust) stream cipher.

Where did this idea come from?

It just came to me all in an instant. Out of nowhere.

I intuited that the combination of simple compression and expansion functions, with a counter, would produce good entropy / IID. And it does. I have experience doing this.

Where is the name from?

TaroBox is an anagram of the constituent parts "btoa" and "xor"

Install

npm i --save tarobox