| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163 |
- #!/usr/bin/env python3
- #
- # mmgen = Multi-Mode GENerator, command-line Bitcoin cold storage solution
- # Copyright (C)2013-2019 The MMGen Project <mmgen@tuta.io>
- #
- # This program is free software: you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation, either version 3 of the License, or
- # (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
- """
- bip39.py - Data and routines for BIP39 mnemonic seed phrases
- """
- from hashlib import sha256
- from mmgen.exception import *
- from mmgen.util import baseconv,is_hex_str
- # implements a subset of the baseconv API
- class bip39(baseconv):
- words = tuple("""
- 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
- """.split())
- mn_base = 2048
- mn_ids = ('bip39',)
- wl_chksums = { 'bip39': 'f18b9a84' }
- # ENT CS MS
- constants = {
- '128': (4, 12),
- '160': (5, 15),
- '192': (6, 18),
- '224': (7, 21),
- '256': (8, 24),
- }
- @classmethod
- def tohex(cls,words,wl_id,pad=None):
- assert isinstance(words,(list,tuple)),'words must be list or tuple'
- assert wl_id == 'bip39',"'wl_id' must be 'bip39'"
- wl = cls.digits[wl_id]
- for w in words:
- if w not in wl:
- raise MnemonicError('{!r} is not in the BIP39 word list'.format(w))
- res = ''.join(['{:011b}'.format(wl.index(w)) for w in words])
- for k in cls.constants:
- if len(words) == cls.constants[k][1]:
- bitlen = int(k)
- break
- else:
- raise MnemonicError('{}: invalid seed phrase length'.format(len(words)))
- if pad != None:
- assert pad * 4 == bitlen, '{}: invalid pad length'.format(pad)
- seed_bin = res[:bitlen]
- chk_bin = res[bitlen:]
- seed_hex = '{:0{w}x}'.format(int(seed_bin,2),w=bitlen//4)
- seed_bytes = bytes.fromhex(seed_hex)
- chk_len = cls.constants[str(bitlen)][0]
- chk_hex_chk = sha256(seed_bytes).hexdigest()
- chk_bin_chk = '{:0{w}b}'.format(int(chk_hex_chk,16),w=256)[:chk_len]
- if chk_bin != chk_bin_chk:
- raise MnemonicError('{}: invalid checksum (should be {})'.format(chk_bin,chk_bin_chk))
- return seed_hex
- @classmethod
- def fromhex(cls,seed_hex,wl_id,pad=None,tostr=False):
- assert is_hex_str(seed_hex),"{!r}: not a hexadecimal string".format(seed_hex)
- assert wl_id == 'bip39',"'wl_id' must be 'bip39'"
- assert tostr == False,"'tostr' must be False for 'bip39'"
- wl = cls.digits[wl_id]
- seed_bytes = bytes.fromhex(seed_hex)
- bitlen = len(seed_bytes) * 8
- assert str(bitlen) in cls.constants,'{}: invalid seed bit length'.format(bitlen)
- chk_len,mn_len = cls.constants[str(bitlen)]
- if pad != None:
- assert mn_len == pad, '{}: invalid pad length'.format(pad)
- chk_hex = sha256(seed_bytes).hexdigest()
- seed_bin = '{:0{w}b}'.format(int(seed_hex,16),w=bitlen)
- chk_bin = '{:0{w}b}'.format(int(chk_hex,16),w=256)[:chk_len]
- res = seed_bin + chk_bin
- return tuple(wl[int(res[i*11:(i+1)*11],2)] for i in range(mn_len))
- @classmethod
- def b58encode(cls,*args,**kwargs):
- raise NotImplementedError('not implemented')
- @classmethod
- def b58decode(cls,*args,**kwargs):
- raise NotImplementedError('not implemented')
|