This package has been deprecated

Author message:

WARNING: This project has been renamed to @hazae41/berith. Install using @hazae41/berith instead.

ed25519_dalek
TypeScript icon, indicating that this package has built-in type declarations

1.1.16 • Public • Published

Ed25519 for WebAssembly

WebAssembly port of Ed25519_dalek, a Rust implementation of Ed25519 signatures.

Install (Node)

npm i ed25519_dalek

Test (Deno)

deno run --allow-net https://deno.land/x/ed25519_dalek/test/deno/test.ts

Benchmark (Deno)

About 6x to 8x faster than @noble/ed25519

git clone https://github.com/hazae41/ed25519-dalek-wasm && cd ed25519-dalek-wasm/bench/deno && npm run bench
cpu: Apple M1 Max
runtime: deno 1.26.0 (aarch64-apple-darwin)

benchmark                                time (avg)             (min … max)       p75       p99      p995
--------------------------------------------------------------------------- -----------------------------
ed25519_dalek 1.1.11 (unserialized)  289.94 µs/iter (281.71 µs … 370.79 µs) 290.75 µs  311.5 µs 320.08 µs
@noble/ed25519 1.7.1                    2.1 ms/iter     (1.95 ms … 2.77 ms)   2.14 ms    2.3 ms   2.39 ms

summary
  ed25519_dalek 1.1.11 (unserialized)
   7.25x faster than @noble/ed25519 1.7.1

ed25519_dalek 1.1.11 (serialized)    332.09 µs/iter    (323.17 µs … 474 µs) 332.38 µs 361.46 µs 368.25 µs
@noble/ed25519 1.7.1                   2.07 ms/iter     (1.95 ms … 2.32 ms)   2.12 ms   2.26 ms   2.26 ms

summary
  ed25519_dalek 1.1.11 (serialized)
   6.23x faster than @noble/ed25519 1.7.1

Benchmark (Node)

Not as fast as supercop.wasm (Emscripten port of @orlp/ed25519, a C implementation of Ed25519)

git clone https://github.com/hazae41/ed25519-dalek-wasm && cd ed25519-dalek-wasm/bench/node && npm i && npm run bench
ed25519_dalek 1.1.12 (unserialized) 4,072 ops/sec ±0.06% (12215 samples)
ed25519_dalek 1.1.12 (serialized) 3,544 ops/sec ±0.09% (10638 samples)
@noble/ed25519 1.7.1 485 ops/sec ±0.23% (1447 samples)
supercop.wasm 5.0.1 5,902 ops/sec ±0.2% (17698 samples)
node:crypto (unserialized) 7,102 ops/sec ±1.6% (21228 samples)
node:crypto (serialized) 5,648 ops/sec ±0.52% (16914 samples)

Basic usage

import * as Ed25519 from "ed25519_dalek";
import {
  Ed25519Keypair,
  Ed25519PublicKey,
  Ed25519Signature,
} from "ed25519_dalek";

// -- Wait for WASM to load --
Ed25519.initSyncBundledOnce();

// -- Generating an identity --
const keypair = new Ed25519Keypair();
const identity = keypair.public(); // Ed25519PublicKey

// -- Signing & Verifying --
const bytes = new TextEncoder().encode("hello world"); // Uint8Array

const proof = keypair.sign(bytes); // Ed25519Signature
const verified = identity.verify(bytes, proof); // boolean

Serializing to Uint8Array

const bytes = new Ed25519Keypair().to_bytes();
const keypair = Ed25519Keypair.from_bytes(bytes);
const bytes = keypair.public().to_bytes();
const identity = Ed25519PublicKey.from_bytes(bytes);
const bytes = keypair.sign(input).to_bytes();
const proof = Ed25519Signature.from_bytes(bytes);

Building

https://deno.land

  • Install binaryen (for wasm-opt) and add it your PATH

https://github.com/WebAssembly/binaryen/releases

cargo install wasm-pack
  • Install dependencies
npm install
  • Build wasm and module
npm run build

Readme

Keywords

none

Package Sidebar

Install

npm i ed25519_dalek

Weekly Downloads

1

Version

1.1.16

License

Unlicense

Unpacked Size

739 kB

Total Files

46

Last publish

Collaborators

  • hazae41