UNPKG

@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 35.7 kB
{"version":3,"sources":["../src/index.ts","../src/constants.ts","../src/utils.ts","../src/accountId.ts","../src/ss58/ss58.ts","../src/ss58/ss58Address.ts","../src/ss58/ss58PublicKey.ts","../src/bip39.ts","../src/bip39EnWordlist.ts","../src/substrateBip39.ts","../src/parseSuri.ts","../src/ecdsa.ts","../src/ed25519.ts","../src/sr25519.ts","../src/ecdsaDerive.ts","../src/ed25519Derive.ts","../src/sr25519Derive.ts","../src/createChainCode.ts","../src/parseDerivations.ts","../src/createDerive.ts"],"sourcesContent":["export * from \"./types\"\nexport * from \"./constants\"\nexport * from \"./utils\"\nexport * from \"./accountId\"\nexport * from \"./ss58\"\nexport * from \"./bip39\"\nexport * from \"./bip39EnWordlist\"\nexport * from \"./substrateBip39\"\nexport * from \"./parseSuri\"\nexport * from \"./ecdsa\"\nexport * from \"./ed25519\"\nexport * from \"./sr25519\"\nexport * from \"./ecdsaDerive\"\nexport * from \"./ed25519Derive\"\nexport * from \"./sr25519Derive\"\nexport * from \"./createDerive\"\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 { ensureBytes as ensureBytes_ } from \"@noble/curves/abstract/utils\"\nimport { blake2b } from \"@noble/hashes/blake2b\"\nimport { Bytes, Tuple, str } from \"scale-ts\"\n\nimport type { DeriveKeyPairFn } from \"./internal/types\"\nimport type { Hex } from \"./types\"\n\nexport const blake2b256 = (msg: Hex) => blake2b(msg, { dkLen: 32 })\nexport const blake2b512 = (msg: Hex) => blake2b(msg, { dkLen: 64 })\n\nexport const ensureBytes = (\n title: string,\n hex: Hex,\n expectedLength?: number,\n) => {\n if (typeof hex === \"string\" && hex[1] === \"x\") hex = hex.slice(2)\n return ensureBytes_(title, hex, expectedLength)\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 { type Hex, blake2b256, ensureBytes } 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","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\"\n\nimport { ss58Encode } from \"./ss58\"\n\nexport const ss58Address = (publicKey: Hex, prefix = 42) =>\n ss58Encode(accountId(publicKey), prefix)\n","import type { Hex } from \"..\"\n\nimport { ss58Encode } from \"./ss58\"\n\nexport const ss58PublicKey: (publicKey: Hex, prefix?: number) => string =\n ss58Encode\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/sha256\"\nimport { randomBytes } from \"@noble/hashes/utils\"\n\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 (e) {\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","import { pbkdf2, pbkdf2Async } from \"@noble/hashes/pbkdf2\"\nimport { sha512 } from \"@noble/hashes/sha512\"\n\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","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 { secp256k1 } from \"@noble/curves/secp256k1\"\n\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 const signature = secp256k1.sign(\n blake2b256(ensureBytes(\"message\", message)),\n ensureBytes(\"privateKey\", privateKey),\n )\n const signedBytes = signature.toCompactRawBytes()\n const out = new Uint8Array(signedBytes.length + 1)\n out.set(signedBytes)\n out[signedBytes.length] = signature.recovery\n return out\n },\n verify(signature, message, publicKey) {\n return secp256k1.verify(\n secp256k1.Signature.fromCompact(\n ensureBytes(\"signature\", signature).slice(0, 64),\n ),\n blake2b256(ensureBytes(\"message\", message)),\n ensureBytes(\"publicKey\", publicKey),\n )\n },\n}\n","import { ed25519 as ed25519_ } from \"@noble/curves/ed25519\"\n\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 { getPublicKey, sign, verify } from \"micro-sr25519\"\nimport { ensureBytes } from \"./utils\"\n\nimport type { Curve } from \"./types\"\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 { createDeriveKeyPairFn } from \"./utils\"\n\nexport const ecdsaDerive =\n /* @__PURE__ */ createDeriveKeyPairFn(\"Secp256k1HDKD\")\n","import { createDeriveKeyPairFn } from \"./utils\"\n\nexport const ed25519Derive =\n /* @__PURE__ */ createDeriveKeyPairFn(\"Ed25519HDKD\")\n","import { randomBytes } from \"@noble/hashes/utils\"\nimport { HDKD, getPublicKey, secretFromSeed } from \"micro-sr25519\"\nimport type { DeriveKeyPairFn } from \"./internal/types\"\n\nexport const sr25519Derive: DeriveKeyPairFn = (seed, curve, derivations) => {\n const privateKey = derivations.reduce(\n (secretKey, [type, chainCode]) =>\n type === \"hard\"\n ? HDKD.secretHard(secretKey, chainCode)\n : HDKD.secretSoft(secretKey, chainCode, randomBytes),\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 { 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 { 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"],"mappings":"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","names":["ensureBytes_","seed","import_utils","ed25519_","import_utils","import_micro_sr25519","import_scale_ts"]}