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 🙏

© 2025 – Pkg Stats / Ryan Hefner

@wault-pw/srp6a-webcrypto

v1.0.9

Published

Pure javascript implementation of SRP-6a (RFC-5054, RFC-2945) using web-crypto

Downloads

83

Readme

srp6a-webcrypto

Test

This is tiny Javascript SRP6a implementation fully complies with the RFC-5054/RFC-2945.

It uses built-in crypto primitives from Web crypto API in a browser (cryptographically strong random number generator and hash functions).

This client is used with golang SRP6a server implementation.

Installation

yarn add @wault-pw/srp6a-webcrypto

Usage

All internal operations are made with byte sequence (build in type Uint8Array), all returned values are also bytes, so it's up to you how to encode the communication between client and server (protobuf or HEX representation with JSON).

Registration flow

import {SrpClient, RFC5054b1024Sha1} from "@wault-pw/srp6a-webcrypto"

const client = new SrpClient("login", "password", RFC5054b1024Sha1)

client.seed(await client.randomSalt())
const verifier = await client.verifier()
const identifier = client.username
const salt = client.salt
// send identifier, verifier and salt to the server

Login flow

import {SrpClient, RFC5054b1024Sha1} from "@wault-pw/srp6a-webcrypto"

const client = new SrpClient("login", "password", RFC5054b1024Sha1)

// 1) send user identifier to the server
// 2) get a salt and server public key from server response
const {salt, serverPublickKey} = await fetch(`?username=${identifier}`)
client.seed(salt)

const challenge = await client.setServerPublicKey(serverPublickKey)

// 3) send client's public key and proof to the server
const proof = challenge.proof
const publicKey = challenge.publicKey
const {serverProof} = await fetch(`?proof=${proof}&publicKey=${publicKey}`)

// 4) get server proof and validate it
challenge.isProofValid(serverProof)
// 5) now you have identical session key with server
challenge.secretKey()

SRP Group Parameters

Preconfigured RFC-5054 SRP Group Parameters:

// RFC-5054 complicated params set:
import {
  RFC5054b1024Sha1,
  RFC5054b1536Sha1,
  RFC5054b2048Sha1,
  RFC5054b3072Sha1,
  RFC5054b4096Sha1,
  RFC5054b6144Sha1,
  RFC5054b8192Sha1,
} from "@wault-pw/srp6a-webcrypto"

// RFC-5054 complicated set,
// with non-standart hash function SHA-256
import {
  RFC5054b8192Sha256,
  RFC5054b6144Sha256,
  RFC5054b4096Sha256,
  RFC5054b1024Sha256,
  RFC5054b1536Sha256,
  RFC5054b2048Sha256,
  RFC5054b3072Sha256
} from "@wault-pw/srp6a-webcrypto"