| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179 |
- #!/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),
- }
- digits = { 'bip39': words }
- @classmethod
- def nwords2seedlen(cls,nwords,in_bytes=False,in_hex=False):
- for k,v in cls.constants.items():
- if v[1] == nwords:
- return int(k)//8 if in_bytes else int(k)//4 if in_hex else int(k)
- raise MnemonicError('{!r}: invalid word length for BIP39 mnemonic'.format(nwords))
- @classmethod
- def seedlen2nwords(cls,seed_len,in_bytes=False,in_hex=False):
- seed_bits = seed_len * 8 if in_bytes else seed_len * 4 if in_hex else seed_len
- try:
- return cls.constants[str(seed_bits)][1]
- except:
- raise ValueError('{!r}: invalid seed length for BIP39 mnemonic'.format(seed_bits))
- @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')
|