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 │
└──────────────────────┴─────────┴───────────────────┴────────┴─────────┘