Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

nostr-wasm

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

nostr-wasm

nostr stuff in wasm

  • 0.1.0
  • latest
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

nostr-wasm

Nostr signature stuff in WASM based on libsecp256k1.

Install

yarn install

Demo

A demo application using this package is available at https://nostr-wasm-demo.pages.dev/.

Usage

First, choose which import method suites your needs:

Default

Import with the WASM binary preloaded and uncompressed. No need to perform fetch, but bundle will be larger (+332 KiB).

import {initNostrWasm} from 'nostr-wasm'
const nw = await initNostrWasm()
Compressed

Import with the WASM binary preloaded and gzipped (requires access to globalThis.DecompressionSteam). No need to perform fetch, but bundle will be still be a bit larger (+175 KiB).

import {initNostrWasm} from 'nostr-wasm/gzipped'
const nw = await initNostrWasm()
Headless

Import without the WASM binary. Produces the smallest bundle size but requires fetching the binary yourself.

import {NostrWasm} from 'nostr-wasm/headless'

// provide the binary (the constructor also accepts raw bytes)
const nw = await NostrWasm(await fetch('secp256k1.wasm'))

Using the instance:

// generate a random private key
const sec = nw.generateSecretKey()

// get its corresponding public key
const pubkey = nw.getPublicKey(sec)

// finalize a nostr event in-place, filling it with id, pubkey and sig
nw.finalizeEvent(event, sec)

// verify a nostr event checking its id and its signature against the given pubkey
try {
  nw.verifyEvent(event)
} catch (err) {
  console.log(err)
}

Caller is responsible for zero-ing out private keys in the Uint8Array it passes. Library only zeroes out the bytes in the copies it makes.

Is libsecp256k1 modified?

No, the library is imported as a git submodule directly from upstream.

Building from source

Prerequisites:

git clone --recurse-submodules https://github.com/fiatjaf/nostr-wasm
cd nostr-wasm
bun install
just

The WASM binary will be output to public/out/secp256k1.wasm.

The Emscripten-generated js file at public/out/secp256k1.js is not needed for production if you are using the provided wrapper.

FAQs

Package last updated on 22 Dec 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc