SDK — Crypto Helpers

View as Markdown

Source: packages/sdk/src/crypto.ts. Re-exported at the package root for convenience.

1import {
2 base58Encode, base58Decode,
3 base64UrlEncode, base64UrlDecode,
4 bytesToHex, hexToBytes,
5 generateNonce, sha256,
6 ed25519Sign, ed25519Verify, generateEd25519KeyPair,
7 secp256k1Sign, secp256k1Verify, generateSecp256k1KeyPair,
8} from '@infinia/ida-sdk';
FunctionSignaturePurpose
base58Encode(data)(Uint8Array) => stringBitcoin-alphabet Base58
base58Decode(str)(string) => Uint8ArrayInverse; throws on invalid char
base64UrlEncode(data)(Uint8Array | string) => stringURL-safe, no padding
base64UrlDecode(str)(string) => Uint8Array
bytesToHex(bytes)(Uint8Array) => stringLower-case hex
hexToBytes(hex)(string) => Uint8ArrayThrows on odd length
generateNonce(length?)(number=32) => stringReturns hex; uses crypto.getRandomValues
sha256(data)(Uint8Array | string) => Promise<Uint8Array>Web Crypto
generateEd25519KeyPair()() => Promise<{ publicKey, privateKey }>Web Crypto Ed25519 (with HMAC-SHA-256 fallback when unavailable; see crypto.ts:206-216)
ed25519Sign(privateKey, data)(Uint8Array, Uint8Array) => Promise<Uint8Array>
ed25519Verify(publicKey, data, signature)(Uint8Array×3) => Promise<boolean>
generateSecp256k1KeyPair()() => { publicKey, privateKey }Compressed pubkey via @noble/secp256k1
secp256k1Sign(privateKey, data)(Uint8Array, Uint8Array) => Promise<Uint8Array>SHA-256 + ECDSA, compact bytes
secp256k1Verify(publicKey, data, signature)(Uint8Array×3) => Promise<boolean>

Important: The Ed25519 fallback path (when Web Crypto’s Ed25519 algorithm is unavailable in the runtime) silently switches to HMAC-SHA-256 for compatibility with very old browsers. Verifiers MUST NOT trust signatures produced via this fallback. In production, ensure your runtime supports Ed25519 (Node 20+, Chrome 116+, Safari 17+, Firefox 130+).