Minimal, unoptimized, and unaudited keccak and sponge function library in JavaScript/TypeScript.
npm install @bradthomasbrown/ecdsaecdsa package, but this is listed here for completeness.
sh
npm i @bradthomasbrown/ecdsa
`
Usage
`js
import { Ecdsa } from "@bradthomasbrown/ecdsa";
import { secp256k1 } from "@bradthomasbrown/finite-domain/domains";
import { keccak_c, sha_3 } from "@bradthomasbrown/keccak";
const keccak256 = sha_3(keccak_c, 512, 0b0, 0);
const encoder = new TextEncoder();
const ecdsa_keccak256 = new Ecdsa(secp256k1, keccak256, 32);
const generateSecret = (B:number) => uint8ArrayToBigint_LE(crypto.getRandomValues(new Uint8Array(B)));
// sign
let Qu = undefined;
let S = undefined;
{
const d = generateSecret(32);
Qu = secp256k1.public(d);
const H = keccak256(encoder.encode("hello world"));
S = ecdsa_keccak256.sign(H, d);
console.log({ Qu, H, S });
}
// verify
{
const H = keccak256(encoder.encode("hello world"));
const verified = ecdsa_keccak256.verify(Qu, S, H);
console.log({ verified });
// { verified: true }
}
// recover
{
const H = keccak256(encoder.encode("hello world"));
for (const Qa of ecdsa_keccak256.recover_p3mod4(S, H)) {
const equal = Qa.equals(Qu);
console.log({ equal, Qa });
// { equal: true: Qa: ... } for some Qa of recover_p3mod4
}
}
``