@polkadot-labs/hdkd-helpers
Version:
Composable utility functions to generate key pairs for the sr25519, ed25519, and ecdsa cryptographic schemes, along with utilities for hierarchical deterministic (HD) key derivation, tailored for use in the Polkadot and Substrate ecosystems.
1 lines • 37.8 kB
Source Map (JSON)
{"version":3,"sources":["../src/index.ts","../src/accountId.ts","../src/bip39.ts","../src/bip39EnWordlist.ts","../src/constants.ts","../src/createChainCode.ts","../src/parseDerivations.ts","../src/utils.ts","../src/createDerive.ts","../src/ecdsa.ts","../src/ecdsaDerive.ts","../src/ed25519.ts","../src/ed25519Derive.ts","../src/parseSuri.ts","../src/sr25519.ts","../src/sr25519Derive.ts","../src/ss58/ss58.ts","../src/ss58/ss58Address.ts","../src/ss58/ss58PublicKey.ts","../src/substrateBip39.ts"],"sourcesContent":["export * from \"./accountId\"\nexport * from \"./bip39\"\nexport * from \"./bip39EnWordlist\"\nexport * from \"./constants\"\nexport * from \"./createDerive\"\nexport * from \"./ecdsa\"\nexport * from \"./ecdsaDerive\"\nexport * from \"./ed25519\"\nexport * from \"./ed25519Derive\"\nexport * from \"./parseSuri\"\nexport * from \"./sr25519\"\nexport * from \"./sr25519Derive\"\nexport * from \"./ss58\"\nexport * from \"./substrateBip39\"\nexport * from \"./types\"\nexport * from \"./utils\"\n","import { blake2b256, ensureBytes, type Hex } from \".\"\n\nconst VALID_PUBLICKEY_LENGTHS = [32, 33]\nexport const accountId = (publicKey: Hex) => {\n publicKey = ensureBytes(\"publicKey\", publicKey)\n if (!VALID_PUBLICKEY_LENGTHS.includes(publicKey.length))\n throw new Error(\"Invalid publicKey\")\n return publicKey.length === 33 ? blake2b256(publicKey) : publicKey\n}\n","// Copyright (c) 2014, Wei Lu <luwei.here@gmail.com> and Daniel Cousens <email@dcousens.com>\n//\n// Adapted from https://github.com/bitcoinjs/bip39/blob/a7ecbfe2e60d0214ce17163d610cad9f7b23140c/ts_src/index.ts\n\nimport { sha256 } from \"@noble/hashes/sha2.js\"\nimport { randomBytes } from \"@noble/hashes/utils.js\"\nimport { BIP39_EN_WORDLIST } from \"./bip39EnWordlist\"\n\nconst INVALID_MNEMONIC = \"Invalid mnemonic\"\nconst INVALID_ENTROPY = \"Invalid entropy\"\nconst INVALID_CHECKSUM = \"Invalid mnemonic checksum\"\nconst WORDLIST_REQUIRED = \"Invalid wordlist\"\n\nconst parseWordlist = (wordlistStr: string) => {\n const wordlist = wordlistStr.split(\"|\")\n if (wordlist.length !== 2048) throw new Error(WORDLIST_REQUIRED)\n return wordlist\n}\n\nconst deriveChecksumBits = (entropy: Uint8Array) =>\n sha256(entropy)[0]!\n .toString(2)\n .padStart(8, \"0\")\n .slice(0, entropy.length / 4)\n\nexport const mnemonicToEntropy = (\n mnemonic: string,\n wordlistStr: string = BIP39_EN_WORDLIST,\n): Uint8Array => {\n const words = mnemonic.normalize(\"NFKD\").split(\" \")\n if (words.length % 3 !== 0 || words.length < 12 || words.length > 24)\n throw new Error(INVALID_MNEMONIC)\n\n const wordlist = parseWordlist(wordlistStr)\n\n // convert word indices to 11 bit binary strings\n const bits = words\n .map((word) => {\n const index = wordlist.indexOf(word)\n if (index === -1) throw new Error(INVALID_MNEMONIC)\n return index.toString(2).padStart(11, \"0\")\n })\n .join(\"\")\n\n // split the binary string into entropy/checksum\n const dividerIndex = bits.length - words.length / 3\n\n // calculate the checksum and compare\n const entropyBytes = bits\n .slice(0, dividerIndex)\n .match(/(.{1,8})/g)\n ?.map((bin) => Number.parseInt(bin, 2))\n if (\n !entropyBytes ||\n entropyBytes.length < 16 ||\n entropyBytes.length > 32 ||\n entropyBytes.length % 4 !== 0\n )\n throw new Error(INVALID_ENTROPY)\n\n const entropy = Uint8Array.from(entropyBytes)\n if (deriveChecksumBits(entropy) !== bits.slice(dividerIndex))\n throw new Error(INVALID_CHECKSUM)\n\n return entropy\n}\n\nexport const entropyToMnemonic = (\n entropy: Uint8Array,\n wordlistStr: string = BIP39_EN_WORDLIST,\n): string => {\n const wordlist = parseWordlist(wordlistStr)\n if (!wordlist || wordlist.length !== 2048) throw new Error(WORDLIST_REQUIRED)\n\n // 128 <= ENT <= 256\n if (entropy.length < 16 || entropy.length > 32 || entropy.length % 4 !== 0)\n throw new TypeError(INVALID_ENTROPY)\n\n const entropyBits = Array.from(entropy)\n .map((byte) => byte.toString(2).padStart(8, \"0\"))\n .join(\"\")\n\n return (entropyBits + deriveChecksumBits(entropy))\n .match(/(.{1,11})/g)!\n .map((binary) => wordlist[Number.parseInt(binary, 2)])\n .join(\" \")\n}\n\nexport const generateMnemonic = (\n strength = 128,\n wordlist: string = BIP39_EN_WORDLIST,\n): string => entropyToMnemonic(randomBytes(strength / 8), wordlist)\n\nexport const validateMnemonic = (\n mnemonic: string,\n wordlist: string = BIP39_EN_WORDLIST,\n): boolean => {\n try {\n mnemonicToEntropy(mnemonic, wordlist)\n } catch (_) {\n return false\n }\n return true\n}\n","export const BIP39_EN_WORDLIST: string =\n \"abandon|ability|able|about|above|absent|absorb|abstract|absurd|abuse|access|accident|account|accuse|achieve|acid|acoustic|acquire|across|act|action|actor|actress|actual|adapt|add|addict|address|adjust|admit|adult|advance|advice|aerobic|affair|afford|afraid|again|age|agent|agree|ahead|aim|air|airport|aisle|alarm|album|alcohol|alert|alien|all|alley|allow|almost|alone|alpha|already|also|alter|always|amateur|amazing|among|amount|amused|analyst|anchor|ancient|anger|angle|angry|animal|ankle|announce|annual|another|answer|antenna|antique|anxiety|any|apart|apology|appear|apple|approve|april|arch|arctic|area|arena|argue|arm|armed|armor|army|around|arrange|arrest|arrive|arrow|art|artefact|artist|artwork|ask|aspect|assault|asset|assist|assume|asthma|athlete|atom|attack|attend|attitude|attract|auction|audit|august|aunt|author|auto|autumn|average|avocado|avoid|awake|aware|away|awesome|awful|awkward|axis|baby|bachelor|bacon|badge|bag|balance|balcony|ball|bamboo|banana|banner|bar|barely|bargain|barrel|base|basic|basket|battle|beach|bean|beauty|because|become|beef|before|begin|behave|behind|believe|below|belt|bench|benefit|best|betray|better|between|beyond|bicycle|bid|bike|bind|biology|bird|birth|bitter|black|blade|blame|blanket|blast|bleak|bless|blind|blood|blossom|blouse|blue|blur|blush|board|boat|body|boil|bomb|bone|bonus|book|boost|border|boring|borrow|boss|bottom|bounce|box|boy|bracket|brain|brand|brass|brave|bread|breeze|brick|bridge|brief|bright|bring|brisk|broccoli|broken|bronze|broom|brother|brown|brush|bubble|buddy|budget|buffalo|build|bulb|bulk|bullet|bundle|bunker|burden|burger|burst|bus|business|busy|butter|buyer|buzz|cabbage|cabin|cable|cactus|cage|cake|call|calm|camera|camp|can|canal|cancel|candy|cannon|canoe|canvas|canyon|capable|capital|captain|car|carbon|card|cargo|carpet|carry|cart|case|cash|casino|castle|casual|cat|catalog|catch|category|cattle|caught|cause|caution|cave|ceiling|celery|cement|census|century|cereal|certain|chair|chalk|champion|change|chaos|chapter|charge|chase|chat|cheap|check|cheese|chef|cherry|chest|chicken|chief|child|chimney|choice|choose|chronic|chuckle|chunk|churn|cigar|cinnamon|circle|citizen|city|civil|claim|clap|clarify|claw|clay|clean|clerk|clever|click|client|cliff|climb|clinic|clip|clock|clog|close|cloth|cloud|clown|club|clump|cluster|clutch|coach|coast|coconut|code|coffee|coil|coin|collect|color|column|combine|come|comfort|comic|common|company|concert|conduct|confirm|congress|connect|consider|control|convince|cook|cool|copper|copy|coral|core|corn|correct|cost|cotton|couch|country|couple|course|cousin|cover|coyote|crack|cradle|craft|cram|crane|crash|crater|crawl|crazy|cream|credit|creek|crew|cricket|crime|crisp|critic|crop|cross|crouch|crowd|crucial|cruel|cruise|crumble|crunch|crush|cry|crystal|cube|culture|cup|cupboard|curious|current|curtain|curve|cushion|custom|cute|cycle|dad|damage|damp|dance|danger|daring|dash|daughter|dawn|day|deal|debate|debris|decade|december|decide|decline|decorate|decrease|deer|defense|define|defy|degree|delay|deliver|demand|demise|denial|dentist|deny|depart|depend|deposit|depth|deputy|derive|describe|desert|design|desk|despair|destroy|detail|detect|develop|device|devote|diagram|dial|diamond|diary|dice|diesel|diet|differ|digital|dignity|dilemma|dinner|dinosaur|direct|dirt|disagree|discover|disease|dish|dismiss|disorder|display|distance|divert|divide|divorce|dizzy|doctor|document|dog|doll|dolphin|domain|donate|donkey|donor|door|dose|double|dove|draft|dragon|drama|drastic|draw|dream|dress|drift|drill|drink|drip|drive|drop|drum|dry|duck|dumb|dune|during|dust|dutch|duty|dwarf|dynamic|eager|eagle|early|earn|earth|easily|east|easy|echo|ecology|economy|edge|edit|educate|effort|egg|eight|either|elbow|elder|electric|elegant|element|elephant|elevator|elite|else|embark|embody|embrace|emerge|emotion|employ|empower|empty|enable|enact|end|endless|endorse|enemy|energy|enforce|engage|engine|enhance|enjoy|enlist|enough|enrich|enroll|ensure|enter|entire|entry|envelope|episode|equal|equip|era|erase|erode|erosion|error|erupt|escape|essay|essence|estate|eternal|ethics|evidence|evil|evoke|evolve|exact|example|excess|exchange|excite|exclude|excuse|execute|exercise|exhaust|exhibit|exile|exist|exit|exotic|expand|expect|expire|explain|expose|express|extend|extra|eye|eyebrow|fabric|face|faculty|fade|faint|faith|fall|false|fame|family|famous|fan|fancy|fantasy|farm|fashion|fat|fatal|father|fatigue|fault|favorite|feature|february|federal|fee|feed|feel|female|fence|festival|fetch|fever|few|fiber|fiction|field|figure|file|film|filter|final|find|fine|finger|finish|fire|firm|first|fiscal|fish|fit|fitness|fix|flag|flame|flash|flat|flavor|flee|flight|flip|float|flock|floor|flower|fluid|flush|fly|foam|focus|fog|foil|fold|follow|food|foot|force|forest|forget|fork|fortune|forum|forward|fossil|foster|found|fox|fragile|frame|frequent|fresh|friend|fringe|frog|front|frost|frown|frozen|fruit|fuel|fun|funny|furnace|fury|future|gadget|gain|galaxy|gallery|game|gap|garage|garbage|garden|garlic|garment|gas|gasp|gate|gather|gauge|gaze|general|genius|genre|gentle|genuine|gesture|ghost|giant|gift|giggle|ginger|giraffe|girl|give|glad|glance|glare|glass|glide|glimpse|globe|gloom|glory|glove|glow|glue|goat|goddess|gold|good|goose|gorilla|gospel|gossip|govern|gown|grab|grace|grain|grant|grape|grass|gravity|great|green|grid|grief|grit|grocery|group|grow|grunt|guard|guess|guide|guilt|guitar|gun|gym|habit|hair|half|hammer|hamster|hand|happy|harbor|hard|harsh|harvest|hat|have|hawk|hazard|head|health|heart|heavy|hedgehog|height|hello|helmet|help|hen|hero|hidden|high|hill|hint|hip|hire|history|hobby|hockey|hold|hole|holiday|hollow|home|honey|hood|hope|horn|horror|horse|hospital|host|hotel|hour|hover|hub|huge|human|humble|humor|hundred|hungry|hunt|hurdle|hurry|hurt|husband|hybrid|ice|icon|idea|identify|idle|ignore|ill|illegal|illness|image|imitate|immense|immune|impact|impose|improve|impulse|inch|include|income|increase|index|indicate|indoor|industry|infant|inflict|inform|inhale|inherit|initial|inject|injury|inmate|inner|innocent|input|inquiry|insane|insect|inside|inspire|install|intact|interest|into|invest|invite|involve|iron|island|isolate|issue|item|ivory|jacket|jaguar|jar|jazz|jealous|jeans|jelly|jewel|job|join|joke|journey|joy|judge|juice|jump|jungle|junior|junk|just|kangaroo|keen|keep|ketchup|key|kick|kid|kidney|kind|kingdom|kiss|kit|kitchen|kite|kitten|kiwi|knee|knife|knock|know|lab|label|labor|ladder|lady|lake|lamp|language|laptop|large|later|latin|laugh|laundry|lava|law|lawn|lawsuit|layer|lazy|leader|leaf|learn|leave|lecture|left|leg|legal|legend|leisure|lemon|lend|length|lens|leopard|lesson|letter|level|liar|liberty|library|license|life|lift|light|like|limb|limit|link|lion|liquid|list|little|live|lizard|load|loan|lobster|local|lock|logic|lonely|long|loop|lottery|loud|lounge|love|loyal|lucky|luggage|lumber|lunar|lunch|luxury|lyrics|machine|mad|magic|magnet|maid|mail|main|major|make|mammal|man|manage|mandate|mango|mansion|manual|maple|marble|march|margin|marine|market|marriage|mask|mass|master|match|material|math|matrix|matter|maximum|maze|meadow|mean|measure|meat|mechanic|medal|media|melody|melt|member|memory|mention|menu|mercy|merge|merit|merry|mesh|message|metal|method|middle|midnight|milk|million|mimic|mind|minimum|minor|minute|miracle|mirror|misery|miss|mistake|mix|mixed|mixture|mobile|model|modify|mom|moment|monitor|monkey|monster|month|moon|moral|more|morning|mosquito|mother|motion|motor|mountain|mouse|move|movie|much|muffin|mule|multiply|muscle|museum|mushroom|music|must|mutual|myself|mystery|myth|naive|name|napkin|narrow|nasty|nation|nature|near|neck|need|negative|neglect|neither|nephew|nerve|nest|net|network|neutral|never|news|next|nice|night|noble|noise|nominee|noodle|normal|north|nose|notable|note|nothing|notice|novel|now|nuclear|number|nurse|nut|oak|obey|object|oblige|obscure|observe|obtain|obvious|occur|ocean|october|odor|off|offer|office|often|oil|okay|old|olive|olympic|omit|once|one|onion|online|only|open|opera|opinion|oppose|option|orange|orbit|orchard|order|ordinary|organ|orient|original|orphan|ostrich|other|outdoor|outer|output|outside|oval|oven|over|own|owner|oxygen|oyster|ozone|pact|paddle|page|pair|palace|palm|panda|panel|panic|panther|paper|parade|parent|park|parrot|party|pass|patch|path|patient|patrol|pattern|pause|pave|payment|peace|peanut|pear|peasant|pelican|pen|penalty|pencil|people|pepper|perfect|permit|person|pet|phone|photo|phrase|physical|piano|picnic|picture|piece|pig|pigeon|pill|pilot|pink|pioneer|pipe|pistol|pitch|pizza|place|planet|plastic|plate|play|please|pledge|pluck|plug|plunge|poem|poet|point|polar|pole|police|pond|pony|pool|popular|portion|position|possible|post|potato|pottery|poverty|powder|power|practice|praise|predict|prefer|prepare|present|pretty|prevent|price|pride|primary|print|priority|prison|private|prize|problem|process|produce|profit|program|project|promote|proof|property|prosper|protect|proud|provide|public|pudding|pull|pulp|pulse|pumpkin|punch|pupil|puppy|purchase|purity|purpose|purse|push|put|puzzle|pyramid|quality|quantum|quarter|question|quick|quit|quiz|quote|rabbit|raccoon|race|rack|radar|radio|rail|rain|raise|rally|ramp|ranch|random|range|rapid|rare|rate|rather|raven|raw|razor|ready|real|reason|rebel|rebuild|recall|receive|recipe|record|recycle|reduce|reflect|reform|refuse|region|regret|regular|reject|relax|release|relief|rely|remain|remember|remind|remove|render|renew|rent|reopen|repair|repeat|replace|report|require|rescue|resemble|resist|resource|response|result|retire|retreat|return|reunion|reveal|review|reward|rhythm|rib|ribbon|rice|rich|ride|ridge|rifle|right|rigid|ring|riot|ripple|risk|ritual|rival|river|road|roast|robot|robust|rocket|romance|roof|rookie|room|rose|rotate|rough|round|route|royal|rubber|rude|rug|rule|run|runway|rural|sad|saddle|sadness|safe|sail|salad|salmon|salon|salt|salute|same|sample|sand|satisfy|satoshi|sauce|sausage|save|say|scale|scan|scare|scatter|scene|scheme|school|science|scissors|scorpion|scout|scrap|screen|script|scrub|sea|search|season|seat|second|secret|section|security|seed|seek|segment|select|sell|seminar|senior|sense|sentence|series|service|session|settle|setup|seven|shadow|shaft|shallow|share|shed|shell|sheriff|shield|shift|shine|ship|shiver|shock|shoe|shoot|shop|short|shoulder|shove|shrimp|shrug|shuffle|shy|sibling|sick|side|siege|sight|sign|silent|silk|silly|silver|similar|simple|since|sing|siren|sister|situate|six|size|skate|sketch|ski|skill|skin|skirt|skull|slab|slam|sleep|slender|slice|slide|slight|slim|slogan|slot|slow|slush|small|smart|smile|smoke|smooth|snack|snake|snap|sniff|snow|soap|soccer|social|sock|soda|soft|solar|soldier|solid|solution|solve|someone|song|soon|sorry|sort|soul|sound|soup|source|south|space|spare|spatial|spawn|speak|special|speed|spell|spend|sphere|spice|spider|spike|spin|spirit|split|spoil|sponsor|spoon|sport|spot|spray|spread|spring|spy|square|squeeze|squirrel|stable|stadium|staff|stage|stairs|stamp|stand|start|state|stay|steak|steel|stem|step|stereo|stick|still|sting|stock|stomach|stone|stool|story|stove|strategy|street|strike|strong|struggle|student|stuff|stumble|style|subject|submit|subway|success|such|sudden|suffer|sugar|suggest|suit|summer|sun|sunny|sunset|super|supply|supreme|sure|surface|surge|surprise|surround|survey|suspect|sustain|swallow|swamp|swap|swarm|swear|sweet|swift|swim|swing|switch|sword|symbol|symptom|syrup|system|table|tackle|tag|tail|talent|talk|tank|tape|target|task|taste|tattoo|taxi|teach|team|tell|ten|tenant|tennis|tent|term|test|text|thank|that|theme|then|theory|there|they|thing|this|thought|three|thrive|throw|thumb|thunder|ticket|tide|tiger|tilt|timber|time|tiny|tip|tired|tissue|title|toast|tobacco|today|toddler|toe|together|toilet|token|tomato|tomorrow|tone|tongue|tonight|tool|tooth|top|topic|topple|torch|tornado|tortoise|toss|total|tourist|toward|tower|town|toy|track|trade|traffic|tragic|train|transfer|trap|trash|travel|tray|treat|tree|trend|trial|tribe|trick|trigger|trim|trip|trophy|trouble|truck|true|truly|trumpet|trust|truth|try|tube|tuition|tumble|tuna|tunnel|turkey|turn|turtle|twelve|twenty|twice|twin|twist|two|type|typical|ugly|umbrella|unable|unaware|uncle|uncover|under|undo|unfair|unfold|unhappy|uniform|unique|unit|universe|unknown|unlock|until|unusual|unveil|update|upgrade|uphold|upon|upper|upset|urban|urge|usage|use|used|useful|useless|usual|utility|vacant|vacuum|vague|valid|valley|valve|van|vanish|vapor|various|vast|vault|vehicle|velvet|vendor|venture|venue|verb|verify|version|very|vessel|veteran|viable|vibrant|vicious|victory|video|view|village|vintage|violin|virtual|virus|visa|visit|visual|vital|vivid|vocal|voice|void|volcano|volume|vote|voyage|wage|wagon|wait|walk|wall|walnut|want|warfare|warm|warrior|wash|wasp|waste|water|wave|way|wealth|weapon|wear|weasel|weather|web|wedding|weekend|weird|welcome|west|wet|whale|what|wheat|wheel|when|where|whip|whisper|wide|width|wife|wild|will|win|window|wine|wing|wink|winner|winter|wire|wisdom|wise|wish|witness|wolf|woman|wonder|wood|wool|word|work|world|worry|worth|wrap|wreck|wrestle|wrist|write|wrong|yard|year|yellow|you|young|youth|zebra|zero|zone|zoo\"\n","export const DEV_PHRASE =\n \"bottom drive obey lake curtain smoke basket hold race lonely fit walk\"\nexport const DEV_MINI_SECRET =\n \"fac7959dbfe72f052e5a0c3c8d6530f202b02fd8f9f5ca3580ec8deb7797479e\"\n","import { str, u32 } from \"scale-ts\"\n\nexport const createChainCode = (code: string) => {\n const chainCode = new Uint8Array(32)\n // FIXME: check if u256 could be supported\n chainCode.set(Number.isNaN(+code) ? str.enc(code) : u32.enc(+code))\n return chainCode\n}\n","const DERIVATION_RE = /(\\/{1,2})([^/]+)/g\n\nexport const parseDerivations = (derivationsStr: string) => {\n const derivations = [] as [type: \"hard\" | \"soft\", code: string][]\n for (const [_, type, code] of derivationsStr.matchAll(DERIVATION_RE)) {\n derivations.push([type === \"//\" ? \"hard\" : \"soft\", code!])\n }\n return derivations\n}\n","import { blake2b } from \"@noble/hashes/blake2.js\"\nimport { hexToBytes, isBytes } from \"@noble/hashes/utils.js\"\nimport { Bytes, str, Tuple } from \"scale-ts\"\nimport type { DeriveKeyPairFn } from \"./internal/types\"\nimport type { Hex } from \"./types\"\n\nexport const blake2b256 = (msg: Hex) =>\n blake2b(ensureBytes(\"msg\", msg), { dkLen: 32 })\nexport const blake2b512 = (msg: Hex) =>\n blake2b(ensureBytes(\"msg\", msg), { dkLen: 64 })\n\n/**\n * Adapted from: https://github.com/paulmillr/noble-curves/blob/a0ac59846ee76c52f7c18886f4963e1211345d48/src/utils.ts#L104 (MIT License)\n *\n * Takes hex string or Uint8Array, converts to Uint8Array.\n * Validates output length.\n * Will throw error for other types.\n * @param title descriptive title for an error e.g. 'secret key'\n * @param hex hex string or Uint8Array\n * @param expectedLength optional, will compare to result array's length\n * @returns\n */\nexport const ensureBytes = (\n title: string,\n hex: Hex,\n expectedLength?: number,\n) => {\n let res: Uint8Array\n if (typeof hex === \"string\") {\n try {\n if (hex[1] === \"x\") hex = hex.slice(2)\n res = hexToBytes(hex)\n } catch (e) {\n throw new Error(`${title} must be hex string or Uint8Array, cause: ${e}`)\n }\n } else if (isBytes(hex)) {\n // Uint8Array.from() instead of hash.slice() because node.js Buffer\n // is instance of Uint8Array, and its slice() creates **mutable** copy\n res = Uint8Array.from(hex)\n } else {\n throw new Error(`${title} must be hex string or Uint8Array`)\n }\n const len = res.length\n if (typeof expectedLength === \"number\" && len !== expectedLength)\n throw new Error(`${title} of length ${expectedLength} expected, got ${len}`)\n return res\n}\n\nconst derivationCodec = /* @__PURE__ */ Tuple(str, Bytes(32), Bytes(32))\nconst createDeriveFn =\n (prefix: string) => (seed: Uint8Array, chainCode: Uint8Array) =>\n blake2b256(derivationCodec.enc([prefix, seed, chainCode]))\n\nexport const createDeriveKeyPairFn =\n (prefix: string): DeriveKeyPairFn =>\n (seed, curve, derivations) => {\n const derive = createDeriveFn(prefix)\n const privateKey = derivations.reduce((seed, [type, chainCode]) => {\n if (type === \"soft\") throw new Error(\"Soft derivations are not supported\")\n return derive(seed, chainCode)\n }, seed)\n return {\n publicKey: curve.getPublicKey(privateKey),\n sign(message) {\n return curve.sign(message, privateKey)\n },\n }\n }\n","import { createChainCode } from \"./createChainCode\"\nimport type { DeriveKeyPairFn } from \"./internal/types\"\nimport { parseDerivations } from \"./parseDerivations\"\nimport type { Curve, DeriveFn, Hex } from \"./types\"\nimport { ensureBytes } from \"./utils\"\n\ntype CreateDeriveOptions = {\n seed: Hex\n curve: Curve\n derive: DeriveKeyPairFn\n}\nexport const createDerive =\n ({ seed, curve, derive }: CreateDeriveOptions): DeriveFn =>\n (path) =>\n derive(\n ensureBytes(\"seed\", seed, 32),\n {\n getPublicKey: (privateKey) => curve.getPublicKey(privateKey),\n sign: (message, privateKey) => curve.sign(message, privateKey),\n verify: (signature, message, publicKey) =>\n curve.verify(signature, message, publicKey),\n },\n parseDerivations(path).map(([type, code]) => [\n type,\n createChainCode(code),\n ]),\n )\n","import { secp256k1 } from \"@noble/curves/secp256k1.js\"\nimport type { Curve } from \"./types\"\nimport { blake2b256, ensureBytes } from \"./utils\"\n\nexport const ecdsa: Curve = {\n getPublicKey(privateKey) {\n return secp256k1.getPublicKey(ensureBytes(\"privateKey\", privateKey))\n },\n sign(message, privateKey) {\n // See https://github.com/paritytech/substrate/blob/033d4e86cc7eff0066cd376b9375f815761d653c/primitives/core/src/ecdsa.rs#L326\n const recoverableSignature = secp256k1.sign(\n blake2b256(ensureBytes(\"message\", message)),\n ensureBytes(\"privateKey\", privateKey),\n { prehash: false, format: \"recovered\" },\n )\n const signature = new Uint8Array(recoverableSignature.length)\n signature.set(recoverableSignature.subarray(1, recoverableSignature.length))\n signature[recoverableSignature.length] = recoverableSignature[0]!\n return signature\n },\n verify(signature, message, publicKey) {\n signature = ensureBytes(\"signature\", signature)\n const recoverableSignature = new Uint8Array(signature.length)\n recoverableSignature.set(signature.subarray(0, signature.length - 1), 1)\n recoverableSignature[0] = signature[recoverableSignature.length]!\n return secp256k1.verify(\n recoverableSignature,\n blake2b256(ensureBytes(\"message\", message)),\n ensureBytes(\"publicKey\", publicKey),\n { prehash: false, format: \"recovered\" },\n )\n },\n}\n","import { createDeriveKeyPairFn } from \"./utils\"\n\nexport const ecdsaDerive =\n /* @__PURE__ */ createDeriveKeyPairFn(\"Secp256k1HDKD\")\n","import { ed25519 as ed25519_ } from \"@noble/curves/ed25519.js\"\nimport { ensureBytes } from \".\"\nimport type { Curve } from \"./types\"\n\nexport const ed25519: Curve = {\n getPublicKey(privateKey) {\n return ed25519_.getPublicKey(ensureBytes(\"privateKey\", privateKey))\n },\n sign(message, privateKey) {\n return ed25519_.sign(\n ensureBytes(\"message\", message),\n ensureBytes(\"privateKey\", privateKey),\n )\n },\n verify(signature, message, publicKey) {\n return ed25519_.verify(\n ensureBytes(\"signature\", signature),\n ensureBytes(\"message\", message),\n ensureBytes(\"privateKey\", publicKey),\n )\n },\n}\n","import { createDeriveKeyPairFn } from \"./utils\"\n\nexport const ed25519Derive =\n /* @__PURE__ */ createDeriveKeyPairFn(\"Ed25519HDKD\")\n","const SURI_RE = /^(\\w+(?: \\w+)*)((?:\\/{1,2}\\w+)*)(?:\\/{3}(.*))?$/\n\nexport const parseSuri = (suri: string) => {\n const [, phrase, paths, password] = SURI_RE.exec(suri) ?? []\n return { phrase, paths, password }\n}\n","import { getPublicKey, sign, verify } from \"@scure/sr25519\"\nimport type { Curve } from \"./types\"\nimport { ensureBytes } from \"./utils\"\n\nexport const sr25519: Curve = {\n getPublicKey(privateKey) {\n return getPublicKey(ensureBytes(\"privateKey\", privateKey, 64))\n },\n sign(message, privateKey) {\n return sign(\n ensureBytes(\"privateKey\", privateKey, 64),\n ensureBytes(\"message\", message),\n )\n },\n verify(signature, message, publicKey) {\n return verify(\n ensureBytes(\"message\", message),\n ensureBytes(\"signature\", signature, 64),\n ensureBytes(\"publicKey\", publicKey, 32),\n )\n },\n}\n","import { getPublicKey, HDKD, secretFromSeed } from \"@scure/sr25519\"\nimport type { DeriveKeyPairFn } from \"./internal/types\"\n\nexport const sr25519Derive: DeriveKeyPairFn = (seed, curve, derivations) => {\n const privateKey = derivations.reduce<Uint8Array>(\n (secretKey, [type, chainCode]) => {\n const deriveFn = type === \"hard\" ? HDKD.secretHard : HDKD.secretSoft\n return deriveFn(secretKey, chainCode)\n },\n secretFromSeed(seed),\n )\n const publicKey = getPublicKey(privateKey)\n return {\n publicKey,\n sign(message) {\n return curve.sign(message, privateKey)\n },\n }\n}\n","import { base58 } from \"@scure/base\"\nimport type { Hex } from \"..\"\nimport { blake2b512, ensureBytes } from \"../utils\"\n\nconst SS58PRE = /* @__PURE__ */ new TextEncoder().encode(\"SS58PRE\")\nconst CHECKSUM_LENGTH = 2\n\nconst VALID_PAYLOAD_LENGTHS = [32, 33]\nexport const ss58Encode = (payload: Hex, prefix = 42) => {\n payload = ensureBytes(\"payload\", payload)\n if (!VALID_PAYLOAD_LENGTHS.includes(payload.length))\n throw new Error(\"Invalid payload\")\n\n const prefixBytes =\n prefix < 64\n ? Uint8Array.of(prefix)\n : Uint8Array.of(\n ((prefix & 0b0000_0000_1111_1100) >> 2) | 0b0100_0000,\n (prefix >> 8) | ((prefix & 0b0000_0000_0000_0011) << 6),\n )\n const checksum = blake2b512(\n Uint8Array.of(...SS58PRE, ...prefixBytes, ...payload),\n ).subarray(0, CHECKSUM_LENGTH)\n return base58.encode(Uint8Array.of(...prefixBytes, ...payload, ...checksum))\n}\n\nconst VALID_ADDRESS_LENGTHS = [35, 36, 37]\nexport const ss58Decode = (\n addressStr: string,\n): [payload: Uint8Array, prefix: number] => {\n const address = base58.decode(addressStr)\n if (!VALID_ADDRESS_LENGTHS.includes(address.length))\n throw new Error(\"Invalid address length\")\n\n const addressChecksum = address.subarray(address.length - CHECKSUM_LENGTH)\n const checksum = blake2b512(\n Uint8Array.of(\n ...SS58PRE,\n ...address.subarray(0, address.length - CHECKSUM_LENGTH),\n ),\n ).subarray(0, CHECKSUM_LENGTH)\n if (addressChecksum[0] !== checksum[0] || addressChecksum[1] !== checksum[1])\n throw new Error(\"Invalid checksum\")\n\n const prefixLength = address[0]! & 0b0100_0000 ? 2 : 1\n const prefix: number =\n prefixLength === 1\n ? address[0]!\n : ((address[0]! & 0b0011_1111) << 2) |\n (address[1]! >> 6) |\n ((address[1]! & 0b0011_1111) << 8)\n const payload = address.slice(prefixLength, address.length - CHECKSUM_LENGTH)\n return [payload, prefix]\n}\n","import type { Hex } from \"..\"\nimport { accountId } from \"../accountId\"\nimport { ss58Encode } from \"./ss58\"\n\nexport const ss58Address = (publicKey: Hex, prefix = 42) =>\n ss58Encode(accountId(publicKey), prefix)\n","import type { Hex } from \"..\"\nimport { ss58Encode } from \"./ss58\"\n\nexport const ss58PublicKey: (publicKey: Hex, prefix?: number) => string =\n ss58Encode\n","import { pbkdf2, pbkdf2Async } from \"@noble/hashes/pbkdf2.js\"\nimport { sha512 } from \"@noble/hashes/sha2.js\"\nimport { mnemonicToEntropy } from \"./bip39\"\nimport { BIP39_EN_WORDLIST } from \"./bip39EnWordlist\"\n\nconst salt = (password: string) =>\n new TextEncoder().encode(`mnemonic${password.normalize(\"NFKD\")}`)\n\nexport const entropyToMiniSecret = (\n entropy: Uint8Array,\n password = \"\",\n): Uint8Array =>\n pbkdf2(sha512, entropy, salt(password), {\n c: 2048,\n dkLen: 64,\n })\n // return the first 32 bytes as the seed\n .slice(0, 32)\n\nexport const entropyToMiniSecretAsync = async (\n entropy: Uint8Array,\n password = \"\",\n): Promise<Uint8Array> =>\n (\n await pbkdf2Async(sha512, entropy, salt(password), {\n c: 2048,\n dkLen: 64,\n })\n )\n // return the first 32 bytes as the seed\n .slice(0, 32)\n\nexport const mnemonicToMiniSecret = (\n mnemonic: string,\n password = \"\",\n wordlist: string = BIP39_EN_WORDLIST,\n): Uint8Array =>\n entropyToMiniSecret(mnemonicToEntropy(mnemonic, wordlist), password)\n\nexport const mnemonicToMiniSecretAsync = (\n mnemonic: string,\n password = \"\",\n wordlist: string = BIP39_EN_WORDLIST,\n): Promise<Uint8Array> =>\n entropyToMiniSecretAsync(mnemonicToEntropy(mnemonic, wordlist), password)\n"],"mappings":"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","names":["import_utils","import_scale_ts","seed","ed25519_","import_sr25519","import_sha2"]}