0.3.2 • Published 11 months ago

split-hash v0.3.2

Weekly downloads
9
License
MIT
Repository
github
Last release
11 months ago

split-hash

Split the stream based on bytes and get digests from each part.

Install

npm install --save split-hash
# or
yarn add split-hash

Usage

Hash

import { splitHash } from 'split-hash/nodejs'
import * as crypto from 'crypto'

const KiB = 1024

const createHash = () => {
  const hash = crypto.createHash('sha256')
  return {
    update(buffer) {
      hash.update(buffer)
    }
  , digest() {
      return hash.digest('hex')
    }
  }
}

const stream = fs.createReadStream('filename.bin')
const iter = splitHash(stream, 512 * KiB, createHash)

for await (const hash of iter) {
  console.log(hash)
}

Validate

import { SplitHashValidator } from 'split-hash/nodejs'
import * as crypto from 'crypto'
import { pipeline } from 'stream'

const KiB = 1024

const createHash = () => {
  const hash = crypto.createHash('sha256')
  return {
    update(buffer) {
      hash.update(buffer)
    }
  , digest() {
      return hash.digest('hex')
    }
  }
}

const hashList = [/* ... */]
const validator = new SplitHashValidator(hashList, 512 * KiB, createHash)

const stream = pipeline(
  fs.createReadStream('filename.bin')
, validator
, err => {
    // ...
  }
)

API

Node.js

type ProgressiveHashFactory<T> = () => ProgressiveHash<T>

interface IProgressiveHash<T> {
  update(buffer: Buffer): void
  digest(): T
}

splitHash

function splitHash<T>(
  stream: NodeJS.ReadableStream
, blockSizeBytes: number
, createHash: ProgressiveHashFactory<T>
): AsyncIterableIterator<T>

It throws StreamEncodingError when the stream encoding is set.

SplitHashValidator

class SplitHashValidator<T> extends Stream.Transform {
  constructor(
    digests: T[]
  , blockSizeBytes: number
  , createHash: ProgressiveHashFactory<T>
  , equals: (a: T, b: T) => boolean = Object.is
  )
}

It throws NotMatchedError when the stream does not match digests.

StreamEncodingError

class StreamEncodingError extends Error

NotMatchedError

class NotMatchedError extends Error

WHATWG

type ProgressiveHashFactory<T> = () => IProgressiveHash<T>

interface IProgressiveHash<T> {
  update(buffer: Uint8Array): void
  digest(): Promise<T>
}

splitHash

async function* splitHash<T>(
  stream: ReadableStream
, blockSize: number
, createHash: ProgressiveHashFactory<T>
): AsyncIterableIterator<T>
0.3.2

11 months ago

0.3.0

1 year ago

0.3.1

1 year ago

0.2.2

1 year ago

0.2.1

2 years ago

0.2.0

2 years ago

0.1.7

2 years ago

0.1.6

2 years ago

0.1.5

3 years ago

0.1.4

3 years ago

0.1.3

3 years ago

0.1.2

4 years ago

0.1.1

4 years ago

0.1.0

4 years ago