For Chinese version please see README-zh.
Lightweight BFMeta signing SDK: creates keypairs, derives addresses, signs and verifies payloads. Ships ESM+CJS builds from src/ through tsconfig.all.json.
src/core TS sources (BFMetaSignUtil, CryptoHelperInterface, helpers)scripts/clean.tsclear build outputstest/sample/validation cases- Build:
pnpm build(tsc withtsconfig.all.json), watch:pnpm dev, clean+rebuild:pnpm rebuild - Outputs:
build/esm,build/cjs, exported viapackage.json.exports
import { BFMetaSignUtil } from "@bfmeta/sign-util";
import crypto from "node:crypto";
class CryptoHelper implements BFMetaSignUtil.CryptoHelperInterface {
sha256(msg: string | Uint8Array) {
return crypto.createHash("sha256").update(msg).digest();
}
md5(data?: any) { return crypto.createHash("md5").update(data ?? "").digest(); }
ripemd160(data?: any) { return crypto.createHash("ripemd160").update(data ?? "").digest(); }
}
const util = new BFMetaSignUtil("c", Buffer as any, new CryptoHelper());
const keypair = await util.createKeypair("passphrase");
const addr = util.getAddressFromPublicKey(keypair.publicKey);
const sig = await util.detachedSign(new Uint8Array([1,2,3]), keypair.secretKey);
const ok = util.detachedVeriy(new Uint8Array([1,2,3]), sig, keypair.publicKey);- SDK layer (Layer 2B): keep TS strict; avoid
any/@ts-ignore. - Shared crypto helpers live in
src/crypto*; prefer extending rather than duplicating. - Tests: add cases under
test/for new hash/addr formats before release. - Publishing:
pnpm pub(usespnpm publish --no-git-checks), ensurepnpm rebuildpasses first. - Branches:
feature/<scope>/fix/<issue>; concise verb-based commits.