<!-- start pr-codex -->
## PR-Codex overview
The focus of this PR is to update dependencies across multiple packages and fix minor code issues.
### Detailed summary
- Updated `typedoc` to versions `0.26.7`.
- Updated `tsup` to versions `8.2.4`.
- Updated `typescript` to versions `5.6.2`.
- Updated various packages to use the latest TypeScript version.
- Fixed minor code issues like handling `delete` operations and eslint comments.
> The following files were skipped due to too many changes: `packages/thirdweb/src/wallets/in-app/core/eip5972/in-app-wallet-calls.ts`, `legacy_packages/wallets/src/evm/connectors/gcp-kms/utils/gcp-kms-utils.ts`, `apps/dashboard/package.json`, `packages/thirdweb/package.json`, `legacy_packages/contracts-js/package.json`, `pnpm-lock.yaml`
> ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}`
<!-- end pr-codex -->
thirdweb crypto
Secure, performant and cross-platform cryptography methods commonly used across other thirdweb packages.
Installation
npm install @thirdweb-dev/crypto
Available methods
Encryption
| method | use case | return type | underlying technology |
|---|---|---|---|
aesEncrypt(<plaintext>, <password>) |
Encrypts a string/Uint8Array with AES-GCM | Promise<string> |
WebCrypto (AES-GCM) |
aesDecrypt(<ciphertext>, <password>) |
Decrypts a value encrypted via aesEncrypt |
Promise<string> |
WebCrypto (AES-GCM) |
aesDecryptCompat(<ciphertext>, <password>) |
Same as aesDecrypt but also supports values encrypted via crypto-js (for backwards compatibility) |
Promise<string> |
WebCrypto (AES-GCM) |
Hashing
| method | use case | return type | underlying technology |
|---|---|---|---|
sha256(<value>) |
Hashes a string/Uint8Array with SHA256 | Promise<Uint8Array> |
WebCrypto |
sha256Hex(<value>) |
Same as sha256 but reruns as hex string |
Promise<string> |
WebCrypto |
sha256Sync(<value>) |
Same as sha256 but synchronous |
Uint8Array |
@noble/hashes |
sha256SyncHex(<value>) |
Same as sha256Sync but reruns as hex string |
string |
@noble/hashes |
keccak256Sync(<value>) |
Hashes a string/Uint8Array with Keccak256 | Uint8Array |
js-sha3 |
keccak256SyncHex(<value>) |
Same as keccak256Sync but returns as hex string |
string |
js-sha3 |
keccak256SyncHexPrefixed(<value>) |
Same as keccak256Sync but returns as 0x prefixed hex string |
0x${string} |
js-sha3 |
Initial Benchmarks
sha256 -> Uint8Array
┌──────────────────────────────┬─────────┬────────────────────┬────────┬─────────┐
│ Task Name │ ops/sec │ Average Time (ns) │ Margin │ Samples │
├──────────────────────────────┼─────────┼────────────────────┼────────┼─────────┤
│ @thirdweb-dev/crypto (async) │ 112,929 │ 8855.08539999982 │ ±1.37% │ 100000 │
│ @thirdweb-dev/crypto (sync) │ 55,004 │ 18180.482820000594 │ ±1.02% │ 100000 │
│ crypto-js (sync) │ 19,213 │ 52047.35353999857 │ ±0.25% │ 100000 │
└──────────────────────────────┴─────────┴────────────────────┴────────┴─────────┘
sha256 -> hex
┌──────────────────────────────┬─────────┬────────────────────┬────────┬─────────┐
│ Task Name │ ops/sec │ Average Time (ns) │ Margin │ Samples │
├──────────────────────────────┼─────────┼────────────────────┼────────┼─────────┤
│ @thirdweb-dev/crypto (async) │ 100,845 │ 9916.125730001713 │ ±1.24% │ 100000 │
│ @thirdweb-dev/crypto (sync) │ 53,751 │ 18604.047449997142 │ ±0.92% │ 100000 │
│ crypto-js (sync) │ 19,077 │ 52419.03465000334 │ ±0.24% │ 100000 │
└──────────────────────────────┴─────────┴────────────────────┴────────┴─────────┘
keccack256 -> Uint8Array
┌──────────────────────┬─────────┬────────────────────┬────────┬─────────┐
│ Task Name │ ops/sec │ Average Time (ns) │ Margin │ Samples │
├──────────────────────┼─────────┼────────────────────┼────────┼─────────┤
│ @thirdweb-dev/crypto │ 72,533 │ 13786.719900000808 │ ±0.31% │ 100000 │
│ ethers@v5 │ 71,891 │ 13909.94663000107 │ ±0.33% │ 100000 │
│ @noble/hashes │ 27,244 │ 36704.73226000136 │ ±0.19% │ 100000 │
│ viem │ 27,115 │ 36879.07953999698 │ ±0.26% │ 100000 │
└──────────────────────┴─────────┴────────────────────┴────────┴─────────┘
keccack256 -> hex
┌──────────────────────┬─────────┬───────────────────┬────────┬─────────┐
│ Task Name │ ops/sec │ Average Time (ns) │ Margin │ Samples │
├──────────────────────┼─────────┼───────────────────┼────────┼─────────┤
│ @thirdweb-dev/crypto │ 42,947 │ 23284.22780000266 │ ±0.23% │ 100000 │
│ ethers@5 │ 35,568 │ 28114.98005000045 │ ±0.42% │ 100000 │
│ @noble/hashes │ 15,149 │ 66009.80448000187 │ ±0.26% │ 100000 │
│ viem │ 15,217 │ 65714.15843999518 │ ±0.25% │ 100000 │
└──────────────────────┴─────────┴───────────────────┴────────┴─────────┘