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

crypto-aes-ctr

v2.0.0

Published

Convenience wrapper that allows starting aes-256-ctr decryption midstream

Downloads

16

Readme

Crypto AES CTR

NPM version

A convenience wrapper around node's aes-256-ctr cipher stream that allows one to specify the starting counter for AES CTR mode. This gives the option to start reading an AES encrypted file in the middle of the file (i.e. 'seek') vs CBC mode which requires that you start from the beginning.

The counter parameter is the AES block index that the file stream is starting at. The block size of AES is 128 bits or 16 bytes, so you need to start the file steam at a byte location that is a multiple of 16. See this wikipedia page for more details on how AES CTR mode works.

Install

npm install --save crypto-aes-ctr

Usage


var cryptoAesCtr = require("crypto-aes-ctr");
var crypto = require("crypto");

// key is a 32 byte buffer
var key = crypto.pbkdf2Sync(password, salt, iterations, 32);

// iv is an 16 byte buffer (it is important that it is random)
var iv = crypto.randomBytes(16);
var cipherStream = cryptoAesCtr.createStream(key, iv);

// pipe encrypted input stream to cipherStream

This example works for both encryption and decryption of an entire file.

If you would like to start decrypting in the middle of a file, you just need to pass in a counter of the AES block you are starting the file stream at (starting from zero).


// discard 3 AES blocks
var aesBlockSize = 16;
var counter = 3;

// starting in middle of encrypted file
var fileInStream = fs.createReadStream(myFile, { start: (aesBlockSize * counter) });

// ...

// create cipher stream with correct counter
var cipherStream = cryptoAesCtr.createStream(key, iv, counter);

// pipe encrypted input stream to cipherStream
fileInStream.pipe(cipherStream);

License

MIT License