# @okxweb3/crypto-lib

> A base package for @okxweb3/coin-*

Latest version **2.0.6** (published 2026-06-03) · MIT OR MPL 2.0 license · 0 weekly downloads

## Install

```sh
npm install @okxweb3/crypto-lib
pnpm add @okxweb3/crypto-lib
yarn add @okxweb3/crypto-lib
bun add @okxweb3/crypto-lib
```

## Health

**Score 55/100 (C)** — status: active.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

## Facts

| | |
|---|---|
| Version | 2.0.6 |
| Published | 2026-06-03 |
| First published | 2023-09-13 |
| Weekly downloads | 0 |
| License | MIT OR MPL 2.0 |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 20 |
| Unpacked size | 608.4 KB |
| Known vulnerabilities | 0 (+11 in 1 direct dependencies) |
| Install scripts | yes |
| GitHub stars | 387 |
| Author | okx |
| Maintainers | xiao.xu, moxixii, martynyan, toringona, linus.wang, debuggor, jjay98, shisilu, npm-okx |
| Keywords | wallet, web3, crypto, blockchain, sdk, transaction, signing, address, private-key |

## Links

- npm: https://www.npmjs.com/package/@okxweb3/crypto-lib
- Repository: https://github.com/okx/js-wallet-sdk
- Homepage: https://github.com/okx/js-wallet-sdk#readme
- Issues: https://github.com/okx/js-wallet-sdk/issues
- npm.io page: https://npm.io/package/@okxweb3/crypto-lib

## Dependencies (20)

- [wif](https://npm.io/package/wif.md) 2.0.6
- [long](https://npm.io/package/long.md) 5.2.4
- [bn.js](https://npm.io/package/bn.js.md) 4.12.3
- [brorand](https://npm.io/package/brorand.md) 1.1.0
- [hash.js](https://npm.io/package/hash.js.md) 1.1.7
- [inherits](https://npm.io/package/inherits.md) 2.0.4
- [hmac-drbg](https://npm.io/package/hmac-drbg.md) 1.0.1
- [typeforce](https://npm.io/package/typeforce.md) 1.18.0
- [protobufjs](https://npm.io/package/protobufjs.md) 7.5.5
- [@scure/base](https://npm.io/package/@scure/base.md) 1.2.6
- [randombytes](https://npm.io/package/randombytes.md) 2.1.0
- [@scure/bip32](https://npm.io/package/@scure/bip32.md) 1.7.0
- [asmcrypto.js](https://npm.io/package/asmcrypto.js.md) 2.3.2
- [bignumber.js](https://npm.io/package/bignumber.js.md) 9.1.2
- [@noble/hashes](https://npm.io/package/@noble/hashes.md) 1.7.2
- [@noble/ed25519](https://npm.io/package/@noble/ed25519.md) 1.7.3
- [@noble/secp256k1](https://npm.io/package/@noble/secp256k1.md) 1.7.1
- [@metamask/key-tree](https://npm.io/package/@metamask/key-tree.md) 10.1.1
- [minimalistic-assert](https://npm.io/package/minimalistic-assert.md) 1.0.1
- [minimalistic-crypto-utils](https://npm.io/package/minimalistic-crypto-utils.md) 1.0.1

## Alternatives

- [@gemini-wallet/core](https://npm.io/package/@gemini-wallet/core.md) — 515.6K weekly downloads
- [utility](https://npm.io/package/utility.md) — 416.6K weekly downloads
- [@primno/dpapi](https://npm.io/package/@primno/dpapi.md) — 7.2K weekly downloads
- [pi-readseek](https://npm.io/package/pi-readseek.md) — 3.7K weekly downloads
- [@emilia-protocol/verify](https://npm.io/package/@emilia-protocol/verify.md) — 1.1K weekly downloads

## Recent versions

- 2.0.6 (latest) — 2026-06-03
- 2.0.4-beta.0 (beta) — 2025-09-28
- 2.0.5 — 2025-10-09
- 2.0.4 — 2025-09-28
- 1.0.13 — 2025-07-30
- 1.0.13-beta.0 — 2025-07-24
- 2.0.0-beta.0 — 2025-07-01
- 1.0.12 — 2025-06-17
- 1.0.11-beta.1 — 2025-06-10
- 1.0.10-beta.1 — 2025-06-10
- 1.0.11 — 2025-03-12
- 1.0.10 — 2025-01-15
- 1.0.9 — 2025-01-15
- 1.0.8 — 2025-01-09
- 1.0.7-beta.10 — 2024-12-23
- … 18 more at https://npm.io/package/@okxweb3/crypto-lib/versions

## README

# Installation
This is a base package on which all currencies depend. You need to install this library.

```shell
npm install @okxweb3/crypto-lib
```

## Provides
We provide common functions about bip32, bip39, ecdsa, ed25519, etc.

#### bip32 method
```typescript
let node: bip32.BIP32Interface = bip32.fromSeed(base.fromHex("000102030405060708090a0b0c0d0e0f"));
console.info("publicKey: ", base.toHex(node.publicKey));
console.info("privateKey: ", base.toHex(node.privateKey!));
console.info("chainCode: ", base.toHex(node.chainCode));
```

#### bip39 generate private key and public key, sign message,
```typescript
const mnemonic = bip39.generateMnemonic()
const masterSeed = await bip39.mnemonicToSeed(mnemonic)
const rootKey = bip32.fromSeed(masterSeed)
const childKey =  rootKey.derivePath("m/44'/0'/0'/0/0")
const items = []
items.push(mnemonic)
items.push(base.toHex(rootKey.privateKey!))
items.push(base.toHex(childKey.privateKey!) )

const pk = childKey.privateKey!
const pb1 =  signUtil.secp256k1.publicKeyCreate(pk, true)
items.push(base.toHex(pb1))

const pb2 = signUtil.ed25519.publicKeyCreate(pk)
items.push(base.toHex(pb2))

const msg = base.randomBytes(32)
items.push(base.toHex(msg))

// recovery + r + s
const s1 = signUtil.secp256k1.sign(msg, pk, true)
items.push(base.toHex(base.concatBytes(Uint8Array.of(s1.recovery + 27), s1.signature)))

const s2 = signUtil.ed25519.sign(msg, pk)
items.push(base.toHex(s2))
```

#### common hash and format methods
```typescript
const msg = base.randomBytes(32)
const s1 = base.toHex(base.sha256(msg))
const s2 = base.toHex(base.sha512(msg))
const s3 = base.toBase58(msg)
const s4 = base.toBase58Check(msg)
const s5 = base.toBase64(msg)
const s6 = base.toBech32("prefix", msg)
const s7 = base.toHex(base.hash160(msg))
const s8 = base.toHex(base.keccak256(msg))
const s9 = base.toHex(base.hmacSHA256("key", msg))
```

#### ed25519 common sign method
```typescript
const str = "f339d78368680b2fa1c7c0e67c6c40ab0da01ce21ceb1cbbdb707ae7920eff68d84e93f864287b8be1b3d6c5363b6b0dc0140fbbfadcc4c3cb15eae5da901926";
const secretKey = base.fromHex(str);

const p = signUtil.ed25519.publicKeyCreate(secretKey)
console.info(base.toHex(p));

const v = signUtil.ed25519.publicKeyVerify(p)
console.info(v);

const f1 = signUtil.ed25519.fromSeed(secretKey.slice(0, 32))
const f2 = signUtil.ed25519.fromSecret(secretKey)
console.info(f1, f2);

const msgHash = sha256("abc")
const signature2 = signUtil.ed25519.sign(msgHash, base.fromHex(str.substring(0, 64)))
const r2 = signUtil.ed25519.verify(msgHash, signature2, p)
console.info(base.toHex(signature2), r2);
```

#### ecdsa common sign method
```typescript
const secretKey = Buffer.from(base.fromHex("5dfce364a4e9020d1bc187c9c14060e1a2f8815b3b0ceb40f45e7e39eb122103"))
const v = signUtil.secp256k1.privateKeyVerify(secretKey)
console.info(v);

const publicKeyCompressed = signUtil.secp256k1.publicKeyCreate(secretKey, true)
const publicKeyUnCompressed = signUtil.secp256k1.publicKeyCreate(secretKey, false)
console.info(base.toHex(publicKeyCompressed), base.toHex(publicKeyUnCompressed));

const v1 = signUtil.secp256k1.publicKeyVerify(publicKeyCompressed)
const v2 = signUtil.secp256k1.publicKeyVerify(publicKeyCompressed)
console.info(v1, v2);

const k1 = signUtil.secp256k1.loadPublicKey(publicKeyCompressed)!
console.info(base.toHex(k1.x.toArray()), base.toHex(k1.y.toArray()));

const k2 = signUtil.secp256k1.loadPublicKey(publicKeyUnCompressed)!
console.info(base.toHex(k2.x.toArray()), base.toHex(k2.y.toArray()));

const c = signUtil.secp256k1.publicKeyConvert(publicKeyUnCompressed, true)!
console.info(base.toHex(c));

const msgHash = base.sha256("abc");
const s = signUtil.secp256k1.sign(Buffer.from(msgHash), secretKey)
console.info(base.toHex(s.signature), s.recovery);

const r = signUtil.secp256k1.recover(Buffer.from(s.signature), s.recovery, Buffer.from(msgHash), true)
if(r != null) {
    console.info(base.toHex(r))
}

// message: Buffer, r: string, s: string, publicKey: Buffer
const vv = signUtil.secp256k1.getV(Buffer.from(msgHash), base.toHex(s.signature.slice(0,32)), base.toHex(s.signature.slice(32)), publicKeyCompressed)
console.info(vv);

const bb = signUtil.secp256k1.verifyWithNoRecovery(msgHash, s.signature, publicKeyCompressed)
console.info(bb);
```

## License

Current package is [MIT](<https://github.com/okx/js-wallet-sdk/blob/main/LICENSE>) licensed.

---
_Source: https://npm.io/package/@okxweb3/crypto-lib · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
