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

blind-signature

v0.1.3

Published

Implementation of Chaum's blind signatures

Downloads

9

Readme

Blind Signature

Node.js implementation of Chaum's blind signatures

This is based on the JSBN library for BigNumbers. It doesn't handle the generation of RSA keys but expects them in the normal format of:

export interface PublicRSAKey {
  n: BigInteger,
  e: number
}

export interface PrivateRSAKey extends PublicRSAKey {
  p: BigInteger
  q: BigInteger
  d: BigInteger
  dmp1: BigInteger
  dmq1: BigInteger
  coeff: BigInteger
}

The RSA key you use for this library should be used only for these blind signatures! If you use it for encryption or other signatures too, it opens up serious vulnerabilities. This is a pretty low level blind signatures library so make sure you understand the underlying cryptography and the potential vulnerabilities.

Messages are hashed before they are signed. For maximum safety, a hash function is used with the same bitlength as the RSA key's modulus. We accomplish this by hmac'ing the message with 1, then 2, and so on, concatenating the outputs together until we get the desired length.

Usage Example

import {
  hashAndBlindMessage,
  signBlindedMessageHash,
  unblindSignature,
  verifySignature
} from 'blind-signature'

// this happens on client
const publicKey = // ...
const message = 'hello world'
const { blindedMessageHash, blindingFactor } =
  hashAndBlindMessage(publicKey, message)

// this happens on server/signer
const privateKey = // ...
const blindSignature =
  signBlindedMessageHash(privateKey, blindedMessageHash)

// this happens on client
const signature =
  unblindSignature(publicKey, blindSignature, blindingFactor)

// verification can be done by the signer or client at any time
const isVerified = verifySignature(publicKey, message, signature)