#!/bin/bash unset HISTFILE # workaround for Git Bash bug that copies script content to bash's command history on Windows. # BIP39-XOR.sh: encrypt or decrypt 12, 15, 18, 21 or 24 BIP39 codewords array (so-called "seed phrase") using exclusive OR (XOR)/Vernam cipher (a.k.a. One Time Pad). If not input by a user, an encryption key is automatically generated at random. Encryption with such a key preserves integrity of BIP-39 checksums of all keys (that's distinct while also compatible with SeedXOR implementation). # Examples: # $ bash BIP39-XOR.sh time until select then return void float true false case catch depart # $ bash BIP39-XOR.sh time until select then return void float true false case catch depart XOR age age age age age age age age age age age used # $ bash BIP39-XOR.sh time until select then return void float true false case catch depart XOR age age age age age age age age age age age used > BIP39_codewords.txt # $ bash BIP39-XOR.sh time until select then return void float true false case catch depart XOR $(< twelve_BIP39_codewords.txt) # $ bash BIP39-XOR.sh zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo party XOR zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo party # $ output_variable=$( ./BIP39-XOR.sh time until select then return void float true false case catch depart ) && encryption_key1=${output_variable%%XOR*} && encryption_key2=${output_variable##*XOR} # $ ./BIP39-XOR.sh age age age age age age age age age age age used XOR $( ./BIP39-XOR.sh animal loan slim stamp heavy airport carry rotate found pigeon cage shield XOR agree sorry quote park intact palm torch tiger script tomorrow jacket dolphin | tail -n 1) helptext_show () { printf "Usage: BIP39-XOR.sh [codewords...] [XOR] [codewords...]\n" printf " BIP39-XOR.sh [--auto-input]\n\n" printf "BIP39-XOR: encrypt a BIP39 codewords array (so-called \"seed phrase\") into two complementary ones (\"encryption keys\") or decrypt.\n\n" printf "EXAMPLES:\n\n" printf "$ bash BIP39-XOR.sh time until select then return void float true false case catch depart\n" printf "Encrypt into and output two complementary encryption keys encoded in BIP39 codewords.\n\n" printf "$ bash BIP39-XOR.sh time until select then return void float true false case catch depart XOR age age age age age age age age age age age used\n" printf "Use input keys to decrypt and output a key. Or, equivalently, encrypt an input key with another one and output two complementary encryption keys in BIP39 format.\n\n" printf "$ bash BIP39-XOR.sh --auto-input\n" printf "Generate input BIP-39 twelve codewords randomly and output two complementary encryption keys encoded in BIP39 codewords.\n\n" echo "This is the 5.0.2 version. Release date: 20240203T192000Z. Author: Greg Tonoski ." } INPUT_CODEWORDS_ARRAY1="" INPUT_CODEWORDS_ARRAY2="" INPUT_CODEWORDS_ARRAY1_AS_HEX="" INPUT_CODEWORDS_ARRAY2_AS_HEX="" ENTROPY_HEX="" CANDIDATE_KEY="" ENCRYPTION_KEY1="" ENCRYPTION_KEY1="" ENTROPY_CHECKSUM_BIP39=0 ENCRYPTION_KEY1_CHECKSUM_BIP39=0 ENCRYPTION_KEY2_CHECKSUM_BIP39=0 readonly BITS_IN_WORD=11 readonly BITS_IN_NIBBLE=4 readonly BITS_IN_SRANDOM=32 readonly BITS_IN_RANDOM=16 BIP39_CHECKSUM_BITS_COUNT=0 FN_ENG_WORDS_TO_HEX_RESULT="" FN_BIP39_CHECKSUM_RESULT=0 BIP39_WORDS="" bits_to_shift=0 last_bits_value=0 first_bits_value=0 i=0 FN_RIGHT_ROTATE_32_RESULT=0 FN_RIGHT_SHIFT_32_RESULT=0 FN_SHA256_RESULT="" FN_POWER_RESULT=0 fn_power () { i=0 FN_POWER_RESULT=1 while [ ${i} -lt ${1} ] ; do FN_POWER_RESULT=$(( FN_POWER_RESULT * 2 )) i=$(( ${i} + 1 )) done } fn_eng_words_to_hex () { hex_abandon=0x000 hex_ability=0x001 hex_able=0x002 hex_about=0x003 hex_above=0x004 hex_absent=0x005 hex_absorb=0x006 hex_abstract=0x007 hex_absurd=0x008 hex_abuse=0x009 hex_access=0x00A hex_accident=0x00B hex_account=0x00C hex_accuse=0x00D hex_achieve=0x00E hex_acid=0x00F hex_acoustic=0x010 hex_acquire=0x011 hex_across=0x012 hex_act=0x013 hex_action=0x014 hex_actor=0x015 hex_actress=0x016 hex_actual=0x017 hex_adapt=0x018 hex_add=0x019 hex_addict=0x01A hex_address=0x01B hex_adjust=0x01C hex_admit=0x01D hex_adult=0x01E hex_advance=0x01F hex_advice=0x020 hex_aerobic=0x021 hex_affair=0x022 hex_afford=0x023 hex_afraid=0x024 hex_again=0x025 hex_age=0x026 hex_agent=0x027 hex_agree=0x028 hex_ahead=0x029 hex_aim=0x02A hex_air=0x02B hex_airport=0x02C hex_aisle=0x02D hex_alarm=0x02E hex_album=0x02F hex_alcohol=0x030 hex_alert=0x031 hex_alien=0x032 hex_all=0x033 hex_alley=0x034 hex_allow=0x035 hex_almost=0x036 hex_alone=0x037 hex_alpha=0x038 hex_already=0x039 hex_also=0x03A hex_alter=0x03B hex_always=0x03C hex_amateur=0x03D hex_amazing=0x03E hex_among=0x03F hex_amount=0x040 hex_amused=0x041 hex_analyst=0x042 hex_anchor=0x043 hex_ancient=0x044 hex_anger=0x045 hex_angle=0x046 hex_angry=0x047 hex_animal=0x048 hex_ankle=0x049 hex_announce=0x04A hex_annual=0x04B hex_another=0x04C hex_answer=0x04D hex_antenna=0x04E hex_antique=0x04F hex_anxiety=0x050 hex_any=0x051 hex_apart=0x052 hex_apology=0x053 hex_appear=0x054 hex_apple=0x055 hex_approve=0x056 hex_april=0x057 hex_arch=0x058 hex_arctic=0x059 hex_area=0x05A hex_arena=0x05B hex_argue=0x05C hex_arm=0x05D hex_armed=0x05E hex_armor=0x05F hex_army=0x060 hex_around=0x061 hex_arrange=0x062 hex_arrest=0x063 hex_arrive=0x064 hex_arrow=0x065 hex_art=0x066 hex_artefact=0x067 hex_artist=0x068 hex_artwork=0x069 hex_ask=0x06A hex_aspect=0x06B hex_assault=0x06C hex_asset=0x06D hex_assist=0x06E hex_assume=0x06F hex_asthma=0x070 hex_athlete=0x071 hex_atom=0x072 hex_attack=0x073 hex_attend=0x074 hex_attitude=0x075 hex_attract=0x076 hex_auction=0x077 hex_audit=0x078 hex_august=0x079 hex_aunt=0x07A hex_author=0x07B hex_auto=0x07C hex_autumn=0x07D hex_average=0x07E hex_avocado=0x07F hex_avoid=0x080 hex_awake=0x081 hex_aware=0x082 hex_away=0x083 hex_awesome=0x084 hex_awful=0x085 hex_awkward=0x086 hex_axis=0x087 hex_baby=0x088 hex_bachelor=0x089 hex_bacon=0x08A hex_badge=0x08B hex_bag=0x08C hex_balance=0x08D hex_balcony=0x08E hex_ball=0x08F hex_bamboo=0x090 hex_banana=0x091 hex_banner=0x092 hex_bar=0x093 hex_barely=0x094 hex_bargain=0x095 hex_barrel=0x096 hex_base=0x097 hex_basic=0x098 hex_basket=0x099 hex_battle=0x09A hex_beach=0x09B hex_bean=0x09C hex_beauty=0x09D hex_because=0x09E hex_become=0x09F hex_beef=0x0A0 hex_before=0x0A1 hex_begin=0x0A2 hex_behave=0x0A3 hex_behind=0x0A4 hex_believe=0x0A5 hex_below=0x0A6 hex_belt=0x0A7 hex_bench=0x0A8 hex_benefit=0x0A9 hex_best=0x0AA hex_betray=0x0AB hex_better=0x0AC hex_between=0x0AD hex_beyond=0x0AE hex_bicycle=0x0AF hex_bid=0x0B0 hex_bike=0x0B1 hex_bind=0x0B2 hex_biology=0x0B3 hex_bird=0x0B4 hex_birth=0x0B5 hex_bitter=0x0B6 hex_black=0x0B7 hex_blade=0x0B8 hex_blame=0x0B9 hex_blanket=0x0BA hex_blast=0x0BB hex_bleak=0x0BC hex_bless=0x0BD hex_blind=0x0BE hex_blood=0x0BF hex_blossom=0x0C0 hex_blouse=0x0C1 hex_blue=0x0C2 hex_blur=0x0C3 hex_blush=0x0C4 hex_board=0x0C5 hex_boat=0x0C6 hex_body=0x0C7 hex_boil=0x0C8 hex_bomb=0x0C9 hex_bone=0x0CA hex_bonus=0x0CB hex_book=0x0CC hex_boost=0x0CD hex_border=0x0CE hex_boring=0x0CF hex_borrow=0x0D0 hex_boss=0x0D1 hex_bottom=0x0D2 hex_bounce=0x0D3 hex_box=0x0D4 hex_boy=0x0D5 hex_bracket=0x0D6 hex_brain=0x0D7 hex_brand=0x0D8 hex_brass=0x0D9 hex_brave=0x0DA hex_bread=0x0DB hex_breeze=0x0DC hex_brick=0x0DD hex_bridge=0x0DE hex_brief=0x0DF hex_bright=0x0E0 hex_bring=0x0E1 hex_brisk=0x0E2 hex_broccoli=0x0E3 hex_broken=0x0E4 hex_bronze=0x0E5 hex_broom=0x0E6 hex_brother=0x0E7 hex_brown=0x0E8 hex_brush=0x0E9 hex_bubble=0x0EA hex_buddy=0x0EB hex_budget=0x0EC hex_buffalo=0x0ED hex_build=0x0EE hex_bulb=0x0EF hex_bulk=0x0F0 hex_bullet=0x0F1 hex_bundle=0x0F2 hex_bunker=0x0F3 hex_burden=0x0F4 hex_burger=0x0F5 hex_burst=0x0F6 hex_bus=0x0F7 hex_business=0x0F8 hex_busy=0x0F9 hex_butter=0x0FA hex_buyer=0x0FB hex_buzz=0x0FC hex_cabbage=0x0FD hex_cabin=0x0FE hex_cable=0x0FF hex_cactus=0x100 hex_cage=0x101 hex_cake=0x102 hex_call=0x103 hex_calm=0x104 hex_camera=0x105 hex_camp=0x106 hex_can=0x107 hex_canal=0x108 hex_cancel=0x109 hex_candy=0x10A hex_cannon=0x10B hex_canoe=0x10C hex_canvas=0x10D hex_canyon=0x10E hex_capable=0x10F hex_capital=0x110 hex_captain=0x111 hex_car=0x112 hex_carbon=0x113 hex_card=0x114 hex_cargo=0x115 hex_carpet=0x116 hex_carry=0x117 hex_cart=0x118 hex_case=0x119 hex_cash=0x11A hex_casino=0x11B hex_castle=0x11C hex_casual=0x11D hex_cat=0x11E hex_catalog=0x11F hex_catch=0x120 hex_category=0x121 hex_cattle=0x122 hex_caught=0x123 hex_cause=0x124 hex_caution=0x125 hex_cave=0x126 hex_ceiling=0x127 hex_celery=0x128 hex_cement=0x129 hex_census=0x12A hex_century=0x12B hex_cereal=0x12C hex_certain=0x12D hex_chair=0x12E hex_chalk=0x12F hex_champion=0x130 hex_change=0x131 hex_chaos=0x132 hex_chapter=0x133 hex_charge=0x134 hex_chase=0x135 hex_chat=0x136 hex_cheap=0x137 hex_check=0x138 hex_cheese=0x139 hex_chef=0x13A hex_cherry=0x13B hex_chest=0x13C hex_chicken=0x13D hex_chief=0x13E hex_child=0x13F hex_chimney=0x140 hex_choice=0x141 hex_choose=0x142 hex_chronic=0x143 hex_chuckle=0x144 hex_chunk=0x145 hex_churn=0x146 hex_cigar=0x147 hex_cinnamon=0x148 hex_circle=0x149 hex_citizen=0x14A hex_city=0x14B hex_civil=0x14C hex_claim=0x14D hex_clap=0x14E hex_clarify=0x14F hex_claw=0x150 hex_clay=0x151 hex_clean=0x152 hex_clerk=0x153 hex_clever=0x154 hex_click=0x155 hex_client=0x156 hex_cliff=0x157 hex_climb=0x158 hex_clinic=0x159 hex_clip=0x15A hex_clock=0x15B hex_clog=0x15C hex_close=0x15D hex_cloth=0x15E hex_cloud=0x15F hex_clown=0x160 hex_club=0x161 hex_clump=0x162 hex_cluster=0x163 hex_clutch=0x164 hex_coach=0x165 hex_coast=0x166 hex_coconut=0x167 hex_code=0x168 hex_coffee=0x169 hex_coil=0x16A hex_coin=0x16B hex_collect=0x16C hex_color=0x16D hex_column=0x16E hex_combine=0x16F hex_come=0x170 hex_comfort=0x171 hex_comic=0x172 hex_common=0x173 hex_company=0x174 hex_concert=0x175 hex_conduct=0x176 hex_confirm=0x177 hex_congress=0x178 hex_connect=0x179 hex_consider=0x17A hex_control=0x17B hex_convince=0x17C hex_cook=0x17D hex_cool=0x17E hex_copper=0x17F hex_copy=0x180 hex_coral=0x181 hex_core=0x182 hex_corn=0x183 hex_correct=0x184 hex_cost=0x185 hex_cotton=0x186 hex_couch=0x187 hex_country=0x188 hex_couple=0x189 hex_course=0x18A hex_cousin=0x18B hex_cover=0x18C hex_coyote=0x18D hex_crack=0x18E hex_cradle=0x18F hex_craft=0x190 hex_cram=0x191 hex_crane=0x192 hex_crash=0x193 hex_crater=0x194 hex_crawl=0x195 hex_crazy=0x196 hex_cream=0x197 hex_credit=0x198 hex_creek=0x199 hex_crew=0x19A hex_cricket=0x19B hex_crime=0x19C hex_crisp=0x19D hex_critic=0x19E hex_crop=0x19F hex_cross=0x1A0 hex_crouch=0x1A1 hex_crowd=0x1A2 hex_crucial=0x1A3 hex_cruel=0x1A4 hex_cruise=0x1A5 hex_crumble=0x1A6 hex_crunch=0x1A7 hex_crush=0x1A8 hex_cry=0x1A9 hex_crystal=0x1AA hex_cube=0x1AB hex_culture=0x1AC hex_cup=0x1AD hex_cupboard=0x1AE hex_curious=0x1AF hex_current=0x1B0 hex_curtain=0x1B1 hex_curve=0x1B2 hex_cushion=0x1B3 hex_custom=0x1B4 hex_cute=0x1B5 hex_cycle=0x1B6 hex_dad=0x1B7 hex_damage=0x1B8 hex_damp=0x1B9 hex_dance=0x1BA hex_danger=0x1BB hex_daring=0x1BC hex_dash=0x1BD hex_daughter=0x1BE hex_dawn=0x1BF hex_day=0x1C0 hex_deal=0x1C1 hex_debate=0x1C2 hex_debris=0x1C3 hex_decade=0x1C4 hex_december=0x1C5 hex_decide=0x1C6 hex_decline=0x1C7 hex_decorate=0x1C8 hex_decrease=0x1C9 hex_deer=0x1CA hex_defense=0x1CB hex_define=0x1CC hex_defy=0x1CD hex_degree=0x1CE hex_delay=0x1CF hex_deliver=0x1D0 hex_demand=0x1D1 hex_demise=0x1D2 hex_denial=0x1D3 hex_dentist=0x1D4 hex_deny=0x1D5 hex_depart=0x1D6 hex_depend=0x1D7 hex_deposit=0x1D8 hex_depth=0x1D9 hex_deputy=0x1DA hex_derive=0x1DB hex_describe=0x1DC hex_desert=0x1DD hex_design=0x1DE hex_desk=0x1DF hex_despair=0x1E0 hex_destroy=0x1E1 hex_detail=0x1E2 hex_detect=0x1E3 hex_develop=0x1E4 hex_device=0x1E5 hex_devote=0x1E6 hex_diagram=0x1E7 hex_dial=0x1E8 hex_diamond=0x1E9 hex_diary=0x1EA hex_dice=0x1EB hex_diesel=0x1EC hex_diet=0x1ED hex_differ=0x1EE hex_digital=0x1EF hex_dignity=0x1F0 hex_dilemma=0x1F1 hex_dinner=0x1F2 hex_dinosaur=0x1F3 hex_direct=0x1F4 hex_dirt=0x1F5 hex_disagree=0x1F6 hex_discover=0x1F7 hex_disease=0x1F8 hex_dish=0x1F9 hex_dismiss=0x1FA hex_disorder=0x1FB hex_display=0x1FC hex_distance=0x1FD hex_divert=0x1FE hex_divide=0x1FF hex_divorce=0x200 hex_dizzy=0x201 hex_doctor=0x202 hex_document=0x203 hex_dog=0x204 hex_doll=0x205 hex_dolphin=0x206 hex_domain=0x207 hex_donate=0x208 hex_donkey=0x209 hex_donor=0x20A hex_door=0x20B hex_dose=0x20C hex_double=0x20D hex_dove=0x20E hex_draft=0x20F hex_dragon=0x210 hex_drama=0x211 hex_drastic=0x212 hex_draw=0x213 hex_dream=0x214 hex_dress=0x215 hex_drift=0x216 hex_drill=0x217 hex_drink=0x218 hex_drip=0x219 hex_drive=0x21A hex_drop=0x21B hex_drum=0x21C hex_dry=0x21D hex_duck=0x21E hex_dumb=0x21F hex_dune=0x220 hex_during=0x221 hex_dust=0x222 hex_dutch=0x223 hex_duty=0x224 hex_dwarf=0x225 hex_dynamic=0x226 hex_eager=0x227 hex_eagle=0x228 hex_early=0x229 hex_earn=0x22A hex_earth=0x22B hex_easily=0x22C hex_east=0x22D hex_easy=0x22E hex_echo=0x22F hex_ecology=0x230 hex_economy=0x231 hex_edge=0x232 hex_edit=0x233 hex_educate=0x234 hex_effort=0x235 hex_egg=0x236 hex_eight=0x237 hex_either=0x238 hex_elbow=0x239 hex_elder=0x23A hex_electric=0x23B hex_elegant=0x23C hex_element=0x23D hex_elephant=0x23E hex_elevator=0x23F hex_elite=0x240 hex_else=0x241 hex_embark=0x242 hex_embody=0x243 hex_embrace=0x244 hex_emerge=0x245 hex_emotion=0x246 hex_employ=0x247 hex_empower=0x248 hex_empty=0x249 hex_enable=0x24A hex_enact=0x24B hex_end=0x24C hex_endless=0x24D hex_endorse=0x24E hex_enemy=0x24F hex_energy=0x250 hex_enforce=0x251 hex_engage=0x252 hex_engine=0x253 hex_enhance=0x254 hex_enjoy=0x255 hex_enlist=0x256 hex_enough=0x257 hex_enrich=0x258 hex_enroll=0x259 hex_ensure=0x25A hex_enter=0x25B hex_entire=0x25C hex_entry=0x25D hex_envelope=0x25E hex_episode=0x25F hex_equal=0x260 hex_equip=0x261 hex_era=0x262 hex_erase=0x263 hex_erode=0x264 hex_erosion=0x265 hex_error=0x266 hex_erupt=0x267 hex_escape=0x268 hex_essay=0x269 hex_essence=0x26A hex_estate=0x26B hex_eternal=0x26C hex_ethics=0x26D hex_evidence=0x26E hex_evil=0x26F hex_evoke=0x270 hex_evolve=0x271 hex_exact=0x272 hex_example=0x273 hex_excess=0x274 hex_exchange=0x275 hex_excite=0x276 hex_exclude=0x277 hex_excuse=0x278 hex_execute=0x279 hex_exercise=0x27A hex_exhaust=0x27B hex_exhibit=0x27C hex_exile=0x27D hex_exist=0x27E hex_exit=0x27F hex_exotic=0x280 hex_expand=0x281 hex_expect=0x282 hex_expire=0x283 hex_explain=0x284 hex_expose=0x285 hex_express=0x286 hex_extend=0x287 hex_extra=0x288 hex_eye=0x289 hex_eyebrow=0x28A hex_fabric=0x28B hex_face=0x28C hex_faculty=0x28D hex_fade=0x28E hex_faint=0x28F hex_faith=0x290 hex_fall=0x291 hex_false=0x292 hex_fame=0x293 hex_family=0x294 hex_famous=0x295 hex_fan=0x296 hex_fancy=0x297 hex_fantasy=0x298 hex_farm=0x299 hex_fashion=0x29A hex_fat=0x29B hex_fatal=0x29C hex_father=0x29D hex_fatigue=0x29E hex_fault=0x29F hex_favorite=0x2A0 hex_feature=0x2A1 hex_february=0x2A2 hex_federal=0x2A3 hex_fee=0x2A4 hex_feed=0x2A5 hex_feel=0x2A6 hex_female=0x2A7 hex_fence=0x2A8 hex_festival=0x2A9 hex_fetch=0x2AA hex_fever=0x2AB hex_few=0x2AC hex_fiber=0x2AD hex_fiction=0x2AE hex_field=0x2AF hex_figure=0x2B0 hex_file=0x2B1 hex_film=0x2B2 hex_filter=0x2B3 hex_final=0x2B4 hex_find=0x2B5 hex_fine=0x2B6 hex_finger=0x2B7 hex_finish=0x2B8 hex_fire=0x2B9 hex_firm=0x2BA hex_first=0x2BB hex_fiscal=0x2BC hex_fish=0x2BD hex_fit=0x2BE hex_fitness=0x2BF hex_fix=0x2C0 hex_flag=0x2C1 hex_flame=0x2C2 hex_flash=0x2C3 hex_flat=0x2C4 hex_flavor=0x2C5 hex_flee=0x2C6 hex_flight=0x2C7 hex_flip=0x2C8 hex_float=0x2C9 hex_flock=0x2CA hex_floor=0x2CB hex_flower=0x2CC hex_fluid=0x2CD hex_flush=0x2CE hex_fly=0x2CF hex_foam=0x2D0 hex_focus=0x2D1 hex_fog=0x2D2 hex_foil=0x2D3 hex_fold=0x2D4 hex_follow=0x2D5 hex_food=0x2D6 hex_foot=0x2D7 hex_force=0x2D8 hex_forest=0x2D9 hex_forget=0x2DA hex_fork=0x2DB hex_fortune=0x2DC hex_forum=0x2DD hex_forward=0x2DE hex_fossil=0x2DF hex_foster=0x2E0 hex_found=0x2E1 hex_fox=0x2E2 hex_fragile=0x2E3 hex_frame=0x2E4 hex_frequent=0x2E5 hex_fresh=0x2E6 hex_friend=0x2E7 hex_fringe=0x2E8 hex_frog=0x2E9 hex_front=0x2EA hex_frost=0x2EB hex_frown=0x2EC hex_frozen=0x2ED hex_fruit=0x2EE hex_fuel=0x2EF hex_fun=0x2F0 hex_funny=0x2F1 hex_furnace=0x2F2 hex_fury=0x2F3 hex_future=0x2F4 hex_gadget=0x2F5 hex_gain=0x2F6 hex_galaxy=0x2F7 hex_gallery=0x2F8 hex_game=0x2F9 hex_gap=0x2FA hex_garage=0x2FB hex_garbage=0x2FC hex_garden=0x2FD hex_garlic=0x2FE hex_garment=0x2FF hex_gas=0x300 hex_gasp=0x301 hex_gate=0x302 hex_gather=0x303 hex_gauge=0x304 hex_gaze=0x305 hex_general=0x306 hex_genius=0x307 hex_genre=0x308 hex_gentle=0x309 hex_genuine=0x30A hex_gesture=0x30B hex_ghost=0x30C hex_giant=0x30D hex_gift=0x30E hex_giggle=0x30F hex_ginger=0x310 hex_giraffe=0x311 hex_girl=0x312 hex_give=0x313 hex_glad=0x314 hex_glance=0x315 hex_glare=0x316 hex_glass=0x317 hex_glide=0x318 hex_glimpse=0x319 hex_globe=0x31A hex_gloom=0x31B hex_glory=0x31C hex_glove=0x31D hex_glow=0x31E hex_glue=0x31F hex_goat=0x320 hex_goddess=0x321 hex_gold=0x322 hex_good=0x323 hex_goose=0x324 hex_gorilla=0x325 hex_gospel=0x326 hex_gossip=0x327 hex_govern=0x328 hex_gown=0x329 hex_grab=0x32A hex_grace=0x32B hex_grain=0x32C hex_grant=0x32D hex_grape=0x32E hex_grass=0x32F hex_gravity=0x330 hex_great=0x331 hex_green=0x332 hex_grid=0x333 hex_grief=0x334 hex_grit=0x335 hex_grocery=0x336 hex_group=0x337 hex_grow=0x338 hex_grunt=0x339 hex_guard=0x33A hex_guess=0x33B hex_guide=0x33C hex_guilt=0x33D hex_guitar=0x33E hex_gun=0x33F hex_gym=0x340 hex_habit=0x341 hex_hair=0x342 hex_half=0x343 hex_hammer=0x344 hex_hamster=0x345 hex_hand=0x346 hex_happy=0x347 hex_harbor=0x348 hex_hard=0x349 hex_harsh=0x34A hex_harvest=0x34B hex_hat=0x34C hex_have=0x34D hex_hawk=0x34E hex_hazard=0x34F hex_head=0x350 hex_health=0x351 hex_heart=0x352 hex_heavy=0x353 hex_hedgehog=0x354 hex_height=0x355 hex_hello=0x356 hex_helmet=0x357 hex_help=0x358 hex_hen=0x359 hex_hero=0x35A hex_hidden=0x35B hex_high=0x35C hex_hill=0x35D hex_hint=0x35E hex_hip=0x35F hex_hire=0x360 hex_history=0x361 hex_hobby=0x362 hex_hockey=0x363 hex_hold=0x364 hex_hole=0x365 hex_holiday=0x366 hex_hollow=0x367 hex_home=0x368 hex_honey=0x369 hex_hood=0x36A hex_hope=0x36B hex_horn=0x36C hex_horror=0x36D hex_horse=0x36E hex_hospital=0x36F hex_host=0x370 hex_hotel=0x371 hex_hour=0x372 hex_hover=0x373 hex_hub=0x374 hex_huge=0x375 hex_human=0x376 hex_humble=0x377 hex_humor=0x378 hex_hundred=0x379 hex_hungry=0x37A hex_hunt=0x37B hex_hurdle=0x37C hex_hurry=0x37D hex_hurt=0x37E hex_husband=0x37F hex_hybrid=0x380 hex_ice=0x381 hex_icon=0x382 hex_idea=0x383 hex_identify=0x384 hex_idle=0x385 hex_ignore=0x386 hex_ill=0x387 hex_illegal=0x388 hex_illness=0x389 hex_image=0x38A hex_imitate=0x38B hex_immense=0x38C hex_immune=0x38D hex_impact=0x38E hex_impose=0x38F hex_improve=0x390 hex_impulse=0x391 hex_inch=0x392 hex_include=0x393 hex_income=0x394 hex_increase=0x395 hex_index=0x396 hex_indicate=0x397 hex_indoor=0x398 hex_industry=0x399 hex_infant=0x39A hex_inflict=0x39B hex_inform=0x39C hex_inhale=0x39D hex_inherit=0x39E hex_initial=0x39F hex_inject=0x3A0 hex_injury=0x3A1 hex_inmate=0x3A2 hex_inner=0x3A3 hex_innocent=0x3A4 hex_input=0x3A5 hex_inquiry=0x3A6 hex_insane=0x3A7 hex_insect=0x3A8 hex_inside=0x3A9 hex_inspire=0x3AA hex_install=0x3AB hex_intact=0x3AC hex_interest=0x3AD hex_into=0x3AE hex_invest=0x3AF hex_invite=0x3B0 hex_involve=0x3B1 hex_iron=0x3B2 hex_island=0x3B3 hex_isolate=0x3B4 hex_issue=0x3B5 hex_item=0x3B6 hex_ivory=0x3B7 hex_jacket=0x3B8 hex_jaguar=0x3B9 hex_jar=0x3BA hex_jazz=0x3BB hex_jealous=0x3BC hex_jeans=0x3BD hex_jelly=0x3BE hex_jewel=0x3BF hex_job=0x3C0 hex_join=0x3C1 hex_joke=0x3C2 hex_journey=0x3C3 hex_joy=0x3C4 hex_judge=0x3C5 hex_juice=0x3C6 hex_jump=0x3C7 hex_jungle=0x3C8 hex_junior=0x3C9 hex_junk=0x3CA hex_just=0x3CB hex_kangaroo=0x3CC hex_keen=0x3CD hex_keep=0x3CE hex_ketchup=0x3CF hex_key=0x3D0 hex_kick=0x3D1 hex_kid=0x3D2 hex_kidney=0x3D3 hex_kind=0x3D4 hex_kingdom=0x3D5 hex_kiss=0x3D6 hex_kit=0x3D7 hex_kitchen=0x3D8 hex_kite=0x3D9 hex_kitten=0x3DA hex_kiwi=0x3DB hex_knee=0x3DC hex_knife=0x3DD hex_knock=0x3DE hex_know=0x3DF hex_lab=0x3E0 hex_label=0x3E1 hex_labor=0x3E2 hex_ladder=0x3E3 hex_lady=0x3E4 hex_lake=0x3E5 hex_lamp=0x3E6 hex_language=0x3E7 hex_laptop=0x3E8 hex_large=0x3E9 hex_later=0x3EA hex_latin=0x3EB hex_laugh=0x3EC hex_laundry=0x3ED hex_lava=0x3EE hex_law=0x3EF hex_lawn=0x3F0 hex_lawsuit=0x3F1 hex_layer=0x3F2 hex_lazy=0x3F3 hex_leader=0x3F4 hex_leaf=0x3F5 hex_learn=0x3F6 hex_leave=0x3F7 hex_lecture=0x3F8 hex_left=0x3F9 hex_leg=0x3FA hex_legal=0x3FB hex_legend=0x3FC hex_leisure=0x3FD hex_lemon=0x3FE hex_lend=0x3FF hex_length=0x400 hex_lens=0x401 hex_leopard=0x402 hex_lesson=0x403 hex_letter=0x404 hex_level=0x405 hex_liar=0x406 hex_liberty=0x407 hex_library=0x408 hex_license=0x409 hex_life=0x40A hex_lift=0x40B hex_light=0x40C hex_like=0x40D hex_limb=0x40E hex_limit=0x40F hex_link=0x410 hex_lion=0x411 hex_liquid=0x412 hex_list=0x413 hex_little=0x414 hex_live=0x415 hex_lizard=0x416 hex_load=0x417 hex_loan=0x418 hex_lobster=0x419 hex_local=0x41A hex_lock=0x41B hex_logic=0x41C hex_lonely=0x41D hex_long=0x41E hex_loop=0x41F hex_lottery=0x420 hex_loud=0x421 hex_lounge=0x422 hex_love=0x423 hex_loyal=0x424 hex_lucky=0x425 hex_luggage=0x426 hex_lumber=0x427 hex_lunar=0x428 hex_lunch=0x429 hex_luxury=0x42A hex_lyrics=0x42B hex_machine=0x42C hex_mad=0x42D hex_magic=0x42E hex_magnet=0x42F hex_maid=0x430 hex_mail=0x431 hex_main=0x432 hex_major=0x433 hex_make=0x434 hex_mammal=0x435 hex_man=0x436 hex_manage=0x437 hex_mandate=0x438 hex_mango=0x439 hex_mansion=0x43A hex_manual=0x43B hex_maple=0x43C hex_marble=0x43D hex_march=0x43E hex_margin=0x43F hex_marine=0x440 hex_market=0x441 hex_marriage=0x442 hex_mask=0x443 hex_mass=0x444 hex_master=0x445 hex_match=0x446 hex_material=0x447 hex_math=0x448 hex_matrix=0x449 hex_matter=0x44A hex_maximum=0x44B hex_maze=0x44C hex_meadow=0x44D hex_mean=0x44E hex_measure=0x44F hex_meat=0x450 hex_mechanic=0x451 hex_medal=0x452 hex_media=0x453 hex_melody=0x454 hex_melt=0x455 hex_member=0x456 hex_memory=0x457 hex_mention=0x458 hex_menu=0x459 hex_mercy=0x45A hex_merge=0x45B hex_merit=0x45C hex_merry=0x45D hex_mesh=0x45E hex_message=0x45F hex_metal=0x460 hex_method=0x461 hex_middle=0x462 hex_midnight=0x463 hex_milk=0x464 hex_million=0x465 hex_mimic=0x466 hex_mind=0x467 hex_minimum=0x468 hex_minor=0x469 hex_minute=0x46A hex_miracle=0x46B hex_mirror=0x46C hex_misery=0x46D hex_miss=0x46E hex_mistake=0x46F hex_mix=0x470 hex_mixed=0x471 hex_mixture=0x472 hex_mobile=0x473 hex_model=0x474 hex_modify=0x475 hex_mom=0x476 hex_moment=0x477 hex_monitor=0x478 hex_monkey=0x479 hex_monster=0x47A hex_month=0x47B hex_moon=0x47C hex_moral=0x47D hex_more=0x47E hex_morning=0x47F hex_mosquito=0x480 hex_mother=0x481 hex_motion=0x482 hex_motor=0x483 hex_mountain=0x484 hex_mouse=0x485 hex_move=0x486 hex_movie=0x487 hex_much=0x488 hex_muffin=0x489 hex_mule=0x48A hex_multiply=0x48B hex_muscle=0x48C hex_museum=0x48D hex_mushroom=0x48E hex_music=0x48F hex_must=0x490 hex_mutual=0x491 hex_myself=0x492 hex_mystery=0x493 hex_myth=0x494 hex_naive=0x495 hex_name=0x496 hex_napkin=0x497 hex_narrow=0x498 hex_nasty=0x499 hex_nation=0x49A hex_nature=0x49B hex_near=0x49C hex_neck=0x49D hex_need=0x49E hex_negative=0x49F hex_neglect=0x4A0 hex_neither=0x4A1 hex_nephew=0x4A2 hex_nerve=0x4A3 hex_nest=0x4A4 hex_net=0x4A5 hex_network=0x4A6 hex_neutral=0x4A7 hex_never=0x4A8 hex_news=0x4A9 hex_next=0x4AA hex_nice=0x4AB hex_night=0x4AC hex_noble=0x4AD hex_noise=0x4AE hex_nominee=0x4AF hex_noodle=0x4B0 hex_normal=0x4B1 hex_north=0x4B2 hex_nose=0x4B3 hex_notable=0x4B4 hex_note=0x4B5 hex_nothing=0x4B6 hex_notice=0x4B7 hex_novel=0x4B8 hex_now=0x4B9 hex_nuclear=0x4BA hex_number=0x4BB hex_nurse=0x4BC hex_nut=0x4BD hex_oak=0x4BE hex_obey=0x4BF hex_object=0x4C0 hex_oblige=0x4C1 hex_obscure=0x4C2 hex_observe=0x4C3 hex_obtain=0x4C4 hex_obvious=0x4C5 hex_occur=0x4C6 hex_ocean=0x4C7 hex_october=0x4C8 hex_odor=0x4C9 hex_off=0x4CA hex_offer=0x4CB hex_office=0x4CC hex_often=0x4CD hex_oil=0x4CE hex_okay=0x4CF hex_old=0x4D0 hex_olive=0x4D1 hex_olympic=0x4D2 hex_omit=0x4D3 hex_once=0x4D4 hex_one=0x4D5 hex_onion=0x4D6 hex_online=0x4D7 hex_only=0x4D8 hex_open=0x4D9 hex_opera=0x4DA hex_opinion=0x4DB hex_oppose=0x4DC hex_option=0x4DD hex_orange=0x4DE hex_orbit=0x4DF hex_orchard=0x4E0 hex_order=0x4E1 hex_ordinary=0x4E2 hex_organ=0x4E3 hex_orient=0x4E4 hex_original=0x4E5 hex_orphan=0x4E6 hex_ostrich=0x4E7 hex_other=0x4E8 hex_outdoor=0x4E9 hex_outer=0x4EA hex_output=0x4EB hex_outside=0x4EC hex_oval=0x4ED hex_oven=0x4EE hex_over=0x4EF hex_own=0x4F0 hex_owner=0x4F1 hex_oxygen=0x4F2 hex_oyster=0x4F3 hex_ozone=0x4F4 hex_pact=0x4F5 hex_paddle=0x4F6 hex_page=0x4F7 hex_pair=0x4F8 hex_palace=0x4F9 hex_palm=0x4FA hex_panda=0x4FB hex_panel=0x4FC hex_panic=0x4FD hex_panther=0x4FE hex_paper=0x4FF hex_parade=0x500 hex_parent=0x501 hex_park=0x502 hex_parrot=0x503 hex_party=0x504 hex_pass=0x505 hex_patch=0x506 hex_path=0x507 hex_patient=0x508 hex_patrol=0x509 hex_pattern=0x50A hex_pause=0x50B hex_pave=0x50C hex_payment=0x50D hex_peace=0x50E hex_peanut=0x50F hex_pear=0x510 hex_peasant=0x511 hex_pelican=0x512 hex_pen=0x513 hex_penalty=0x514 hex_pencil=0x515 hex_people=0x516 hex_pepper=0x517 hex_perfect=0x518 hex_permit=0x519 hex_person=0x51A hex_pet=0x51B hex_phone=0x51C hex_photo=0x51D hex_phrase=0x51E hex_physical=0x51F hex_piano=0x520 hex_picnic=0x521 hex_picture=0x522 hex_piece=0x523 hex_pig=0x524 hex_pigeon=0x525 hex_pill=0x526 hex_pilot=0x527 hex_pink=0x528 hex_pioneer=0x529 hex_pipe=0x52A hex_pistol=0x52B hex_pitch=0x52C hex_pizza=0x52D hex_place=0x52E hex_planet=0x52F hex_plastic=0x530 hex_plate=0x531 hex_play=0x532 hex_please=0x533 hex_pledge=0x534 hex_pluck=0x535 hex_plug=0x536 hex_plunge=0x537 hex_poem=0x538 hex_poet=0x539 hex_point=0x53A hex_polar=0x53B hex_pole=0x53C hex_police=0x53D hex_pond=0x53E hex_pony=0x53F hex_pool=0x540 hex_popular=0x541 hex_portion=0x542 hex_position=0x543 hex_possible=0x544 hex_post=0x545 hex_potato=0x546 hex_pottery=0x547 hex_poverty=0x548 hex_powder=0x549 hex_power=0x54A hex_practice=0x54B hex_praise=0x54C hex_predict=0x54D hex_prefer=0x54E hex_prepare=0x54F hex_present=0x550 hex_pretty=0x551 hex_prevent=0x552 hex_price=0x553 hex_pride=0x554 hex_primary=0x555 hex_print=0x556 hex_priority=0x557 hex_prison=0x558 hex_private=0x559 hex_prize=0x55A hex_problem=0x55B hex_process=0x55C hex_produce=0x55D hex_profit=0x55E hex_program=0x55F hex_project=0x560 hex_promote=0x561 hex_proof=0x562 hex_property=0x563 hex_prosper=0x564 hex_protect=0x565 hex_proud=0x566 hex_provide=0x567 hex_public=0x568 hex_pudding=0x569 hex_pull=0x56A hex_pulp=0x56B hex_pulse=0x56C hex_pumpkin=0x56D hex_punch=0x56E hex_pupil=0x56F hex_puppy=0x570 hex_purchase=0x571 hex_purity=0x572 hex_purpose=0x573 hex_purse=0x574 hex_push=0x575 hex_put=0x576 hex_puzzle=0x577 hex_pyramid=0x578 hex_quality=0x579 hex_quantum=0x57A hex_quarter=0x57B hex_question=0x57C hex_quick=0x57D hex_quit=0x57E hex_quiz=0x57F hex_quote=0x580 hex_rabbit=0x581 hex_raccoon=0x582 hex_race=0x583 hex_rack=0x584 hex_radar=0x585 hex_radio=0x586 hex_rail=0x587 hex_rain=0x588 hex_raise=0x589 hex_rally=0x58A hex_ramp=0x58B hex_ranch=0x58C hex_random=0x58D hex_range=0x58E hex_rapid=0x58F hex_rare=0x590 hex_rate=0x591 hex_rather=0x592 hex_raven=0x593 hex_raw=0x594 hex_razor=0x595 hex_ready=0x596 hex_real=0x597 hex_reason=0x598 hex_rebel=0x599 hex_rebuild=0x59A hex_recall=0x59B hex_receive=0x59C hex_recipe=0x59D hex_record=0x59E hex_recycle=0x59F hex_reduce=0x5A0 hex_reflect=0x5A1 hex_reform=0x5A2 hex_refuse=0x5A3 hex_region=0x5A4 hex_regret=0x5A5 hex_regular=0x5A6 hex_reject=0x5A7 hex_relax=0x5A8 hex_release=0x5A9 hex_relief=0x5AA hex_rely=0x5AB hex_remain=0x5AC hex_remember=0x5AD hex_remind=0x5AE hex_remove=0x5AF hex_render=0x5B0 hex_renew=0x5B1 hex_rent=0x5B2 hex_reopen=0x5B3 hex_repair=0x5B4 hex_repeat=0x5B5 hex_replace=0x5B6 hex_report=0x5B7 hex_require=0x5B8 hex_rescue=0x5B9 hex_resemble=0x5BA hex_resist=0x5BB hex_resource=0x5BC hex_response=0x5BD hex_result=0x5BE hex_retire=0x5BF hex_retreat=0x5C0 hex_return=0x5C1 hex_reunion=0x5C2 hex_reveal=0x5C3 hex_review=0x5C4 hex_reward=0x5C5 hex_rhythm=0x5C6 hex_rib=0x5C7 hex_ribbon=0x5C8 hex_rice=0x5C9 hex_rich=0x5CA hex_ride=0x5CB hex_ridge=0x5CC hex_rifle=0x5CD hex_right=0x5CE hex_rigid=0x5CF hex_ring=0x5D0 hex_riot=0x5D1 hex_ripple=0x5D2 hex_risk=0x5D3 hex_ritual=0x5D4 hex_rival=0x5D5 hex_river=0x5D6 hex_road=0x5D7 hex_roast=0x5D8 hex_robot=0x5D9 hex_robust=0x5DA hex_rocket=0x5DB hex_romance=0x5DC hex_roof=0x5DD hex_rookie=0x5DE hex_room=0x5DF hex_rose=0x5E0 hex_rotate=0x5E1 hex_rough=0x5E2 hex_round=0x5E3 hex_route=0x5E4 hex_royal=0x5E5 hex_rubber=0x5E6 hex_rude=0x5E7 hex_rug=0x5E8 hex_rule=0x5E9 hex_run=0x5EA hex_runway=0x5EB hex_rural=0x5EC hex_sad=0x5ED hex_saddle=0x5EE hex_sadness=0x5EF hex_safe=0x5F0 hex_sail=0x5F1 hex_salad=0x5F2 hex_salmon=0x5F3 hex_salon=0x5F4 hex_salt=0x5F5 hex_salute=0x5F6 hex_same=0x5F7 hex_sample=0x5F8 hex_sand=0x5F9 hex_satisfy=0x5FA hex_satoshi=0x5FB hex_sauce=0x5FC hex_sausage=0x5FD hex_save=0x5FE hex_say=0x5FF hex_scale=0x600 hex_scan=0x601 hex_scare=0x602 hex_scatter=0x603 hex_scene=0x604 hex_scheme=0x605 hex_school=0x606 hex_science=0x607 hex_scissors=0x608 hex_scorpion=0x609 hex_scout=0x60A hex_scrap=0x60B hex_screen=0x60C hex_script=0x60D hex_scrub=0x60E hex_sea=0x60F hex_search=0x610 hex_season=0x611 hex_seat=0x612 hex_second=0x613 hex_secret=0x614 hex_section=0x615 hex_security=0x616 hex_seed=0x617 hex_seek=0x618 hex_segment=0x619 hex_select=0x61A hex_sell=0x61B hex_seminar=0x61C hex_senior=0x61D hex_sense=0x61E hex_sentence=0x61F hex_series=0x620 hex_service=0x621 hex_session=0x622 hex_settle=0x623 hex_setup=0x624 hex_seven=0x625 hex_shadow=0x626 hex_shaft=0x627 hex_shallow=0x628 hex_share=0x629 hex_shed=0x62A hex_shell=0x62B hex_sheriff=0x62C hex_shield=0x62D hex_shift=0x62E hex_shine=0x62F hex_ship=0x630 hex_shiver=0x631 hex_shock=0x632 hex_shoe=0x633 hex_shoot=0x634 hex_shop=0x635 hex_short=0x636 hex_shoulder=0x637 hex_shove=0x638 hex_shrimp=0x639 hex_shrug=0x63A hex_shuffle=0x63B hex_shy=0x63C hex_sibling=0x63D hex_sick=0x63E hex_side=0x63F hex_siege=0x640 hex_sight=0x641 hex_sign=0x642 hex_silent=0x643 hex_silk=0x644 hex_silly=0x645 hex_silver=0x646 hex_similar=0x647 hex_simple=0x648 hex_since=0x649 hex_sing=0x64A hex_siren=0x64B hex_sister=0x64C hex_situate=0x64D hex_six=0x64E hex_size=0x64F hex_skate=0x650 hex_sketch=0x651 hex_ski=0x652 hex_skill=0x653 hex_skin=0x654 hex_skirt=0x655 hex_skull=0x656 hex_slab=0x657 hex_slam=0x658 hex_sleep=0x659 hex_slender=0x65A hex_slice=0x65B hex_slide=0x65C hex_slight=0x65D hex_slim=0x65E hex_slogan=0x65F hex_slot=0x660 hex_slow=0x661 hex_slush=0x662 hex_small=0x663 hex_smart=0x664 hex_smile=0x665 hex_smoke=0x666 hex_smooth=0x667 hex_snack=0x668 hex_snake=0x669 hex_snap=0x66A hex_sniff=0x66B hex_snow=0x66C hex_soap=0x66D hex_soccer=0x66E hex_social=0x66F hex_sock=0x670 hex_soda=0x671 hex_soft=0x672 hex_solar=0x673 hex_soldier=0x674 hex_solid=0x675 hex_solution=0x676 hex_solve=0x677 hex_someone=0x678 hex_song=0x679 hex_soon=0x67A hex_sorry=0x67B hex_sort=0x67C hex_soul=0x67D hex_sound=0x67E hex_soup=0x67F hex_source=0x680 hex_south=0x681 hex_space=0x682 hex_spare=0x683 hex_spatial=0x684 hex_spawn=0x685 hex_speak=0x686 hex_special=0x687 hex_speed=0x688 hex_spell=0x689 hex_spend=0x68A hex_sphere=0x68B hex_spice=0x68C hex_spider=0x68D hex_spike=0x68E hex_spin=0x68F hex_spirit=0x690 hex_split=0x691 hex_spoil=0x692 hex_sponsor=0x693 hex_spoon=0x694 hex_sport=0x695 hex_spot=0x696 hex_spray=0x697 hex_spread=0x698 hex_spring=0x699 hex_spy=0x69A hex_square=0x69B hex_squeeze=0x69C hex_squirrel=0x69D hex_stable=0x69E hex_stadium=0x69F hex_staff=0x6A0 hex_stage=0x6A1 hex_stairs=0x6A2 hex_stamp=0x6A3 hex_stand=0x6A4 hex_start=0x6A5 hex_state=0x6A6 hex_stay=0x6A7 hex_steak=0x6A8 hex_steel=0x6A9 hex_stem=0x6AA hex_step=0x6AB hex_stereo=0x6AC hex_stick=0x6AD hex_still=0x6AE hex_sting=0x6AF hex_stock=0x6B0 hex_stomach=0x6B1 hex_stone=0x6B2 hex_stool=0x6B3 hex_story=0x6B4 hex_stove=0x6B5 hex_strategy=0x6B6 hex_street=0x6B7 hex_strike=0x6B8 hex_strong=0x6B9 hex_struggle=0x6BA hex_student=0x6BB hex_stuff=0x6BC hex_stumble=0x6BD hex_style=0x6BE hex_subject=0x6BF hex_submit=0x6C0 hex_subway=0x6C1 hex_success=0x6C2 hex_such=0x6C3 hex_sudden=0x6C4 hex_suffer=0x6C5 hex_sugar=0x6C6 hex_suggest=0x6C7 hex_suit=0x6C8 hex_summer=0x6C9 hex_sun=0x6CA hex_sunny=0x6CB hex_sunset=0x6CC hex_super=0x6CD hex_supply=0x6CE hex_supreme=0x6CF hex_sure=0x6D0 hex_surface=0x6D1 hex_surge=0x6D2 hex_surprise=0x6D3 hex_surround=0x6D4 hex_survey=0x6D5 hex_suspect=0x6D6 hex_sustain=0x6D7 hex_swallow=0x6D8 hex_swamp=0x6D9 hex_swap=0x6DA hex_swarm=0x6DB hex_swear=0x6DC hex_sweet=0x6DD hex_swift=0x6DE hex_swim=0x6DF hex_swing=0x6E0 hex_switch=0x6E1 hex_sword=0x6E2 hex_symbol=0x6E3 hex_symptom=0x6E4 hex_syrup=0x6E5 hex_system=0x6E6 hex_table=0x6E7 hex_tackle=0x6E8 hex_tag=0x6E9 hex_tail=0x6EA hex_talent=0x6EB hex_talk=0x6EC hex_tank=0x6ED hex_tape=0x6EE hex_target=0x6EF hex_task=0x6F0 hex_taste=0x6F1 hex_tattoo=0x6F2 hex_taxi=0x6F3 hex_teach=0x6F4 hex_team=0x6F5 hex_tell=0x6F6 hex_ten=0x6F7 hex_tenant=0x6F8 hex_tennis=0x6F9 hex_tent=0x6FA hex_term=0x6FB hex_test=0x6FC hex_text=0x6FD hex_thank=0x6FE hex_that=0x6FF hex_theme=0x700 hex_then=0x701 hex_theory=0x702 hex_there=0x703 hex_they=0x704 hex_thing=0x705 hex_this=0x706 hex_thought=0x707 hex_three=0x708 hex_thrive=0x709 hex_throw=0x70A hex_thumb=0x70B hex_thunder=0x70C hex_ticket=0x70D hex_tide=0x70E hex_tiger=0x70F hex_tilt=0x710 hex_timber=0x711 hex_time=0x712 hex_tiny=0x713 hex_tip=0x714 hex_tired=0x715 hex_tissue=0x716 hex_title=0x717 hex_toast=0x718 hex_tobacco=0x719 hex_today=0x71A hex_toddler=0x71B hex_toe=0x71C hex_together=0x71D hex_toilet=0x71E hex_token=0x71F hex_tomato=0x720 hex_tomorrow=0x721 hex_tone=0x722 hex_tongue=0x723 hex_tonight=0x724 hex_tool=0x725 hex_tooth=0x726 hex_top=0x727 hex_topic=0x728 hex_topple=0x729 hex_torch=0x72A hex_tornado=0x72B hex_tortoise=0x72C hex_toss=0x72D hex_total=0x72E hex_tourist=0x72F hex_toward=0x730 hex_tower=0x731 hex_town=0x732 hex_toy=0x733 hex_track=0x734 hex_trade=0x735 hex_traffic=0x736 hex_tragic=0x737 hex_train=0x738 hex_transfer=0x739 hex_trap=0x73A hex_trash=0x73B hex_travel=0x73C hex_tray=0x73D hex_treat=0x73E hex_tree=0x73F hex_trend=0x740 hex_trial=0x741 hex_tribe=0x742 hex_trick=0x743 hex_trigger=0x744 hex_trim=0x745 hex_trip=0x746 hex_trophy=0x747 hex_trouble=0x748 hex_truck=0x749 hex_true=0x74A hex_truly=0x74B hex_trumpet=0x74C hex_trust=0x74D hex_truth=0x74E hex_try=0x74F hex_tube=0x750 hex_tuition=0x751 hex_tumble=0x752 hex_tuna=0x753 hex_tunnel=0x754 hex_turkey=0x755 hex_turn=0x756 hex_turtle=0x757 hex_twelve=0x758 hex_twenty=0x759 hex_twice=0x75A hex_twin=0x75B hex_twist=0x75C hex_two=0x75D hex_type=0x75E hex_typical=0x75F hex_ugly=0x760 hex_umbrella=0x761 hex_unable=0x762 hex_unaware=0x763 hex_uncle=0x764 hex_uncover=0x765 hex_under=0x766 hex_undo=0x767 hex_unfair=0x768 hex_unfold=0x769 hex_unhappy=0x76A hex_uniform=0x76B hex_unique=0x76C hex_unit=0x76D hex_universe=0x76E hex_unknown=0x76F hex_unlock=0x770 hex_until=0x771 hex_unusual=0x772 hex_unveil=0x773 hex_update=0x774 hex_upgrade=0x775 hex_uphold=0x776 hex_upon=0x777 hex_upper=0x778 hex_upset=0x779 hex_urban=0x77A hex_urge=0x77B hex_usage=0x77C hex_use=0x77D hex_used=0x77E hex_useful=0x77F hex_useless=0x780 hex_usual=0x781 hex_utility=0x782 hex_vacant=0x783 hex_vacuum=0x784 hex_vague=0x785 hex_valid=0x786 hex_valley=0x787 hex_valve=0x788 hex_van=0x789 hex_vanish=0x78A hex_vapor=0x78B hex_various=0x78C hex_vast=0x78D hex_vault=0x78E hex_vehicle=0x78F hex_velvet=0x790 hex_vendor=0x791 hex_venture=0x792 hex_venue=0x793 hex_verb=0x794 hex_verify=0x795 hex_version=0x796 hex_very=0x797 hex_vessel=0x798 hex_veteran=0x799 hex_viable=0x79A hex_vibrant=0x79B hex_vicious=0x79C hex_victory=0x79D hex_video=0x79E hex_view=0x79F hex_village=0x7A0 hex_vintage=0x7A1 hex_violin=0x7A2 hex_virtual=0x7A3 hex_virus=0x7A4 hex_visa=0x7A5 hex_visit=0x7A6 hex_visual=0x7A7 hex_vital=0x7A8 hex_vivid=0x7A9 hex_vocal=0x7AA hex_voice=0x7AB hex_void=0x7AC hex_volcano=0x7AD hex_volume=0x7AE hex_vote=0x7AF hex_voyage=0x7B0 hex_wage=0x7B1 hex_wagon=0x7B2 hex_wait=0x7B3 hex_walk=0x7B4 hex_wall=0x7B5 hex_walnut=0x7B6 hex_want=0x7B7 hex_warfare=0x7B8 hex_warm=0x7B9 hex_warrior=0x7BA hex_wash=0x7BB hex_wasp=0x7BC hex_waste=0x7BD hex_water=0x7BE hex_wave=0x7BF hex_way=0x7C0 hex_wealth=0x7C1 hex_weapon=0x7C2 hex_wear=0x7C3 hex_weasel=0x7C4 hex_weather=0x7C5 hex_web=0x7C6 hex_wedding=0x7C7 hex_weekend=0x7C8 hex_weird=0x7C9 hex_welcome=0x7CA hex_west=0x7CB hex_wet=0x7CC hex_whale=0x7CD hex_what=0x7CE hex_wheat=0x7CF hex_wheel=0x7D0 hex_when=0x7D1 hex_where=0x7D2 hex_whip=0x7D3 hex_whisper=0x7D4 hex_wide=0x7D5 hex_width=0x7D6 hex_wife=0x7D7 hex_wild=0x7D8 hex_will=0x7D9 hex_win=0x7DA hex_window=0x7DB hex_wine=0x7DC hex_wing=0x7DD hex_wink=0x7DE hex_winner=0x7DF hex_winter=0x7E0 hex_wire=0x7E1 hex_wisdom=0x7E2 hex_wise=0x7E3 hex_wish=0x7E4 hex_witness=0x7E5 hex_wolf=0x7E6 hex_woman=0x7E7 hex_wonder=0x7E8 hex_wood=0x7E9 hex_wool=0x7EA hex_word=0x7EB hex_work=0x7EC hex_world=0x7ED hex_worry=0x7EE hex_worth=0x7EF hex_wrap=0x7F0 hex_wreck=0x7F1 hex_wrestle=0x7F2 hex_wrist=0x7F3 hex_write=0x7F4 hex_wrong=0x7F5 hex_yard=0x7F6 hex_year=0x7F7 hex_yellow=0x7F8 hex_you=0x7F9 hex_young=0x7FA hex_youth=0x7FB hex_zebra=0x7FC hex_zero=0x7FD hex_zone=0x7FE hex_zoo=0x7FF word_BIP39="" hex_digit=0 digit_11bits=0 buffer=0 buffer_bits_count=0 words_to_convert=0 FN_ENG_WORDS_TO_HEX_RESULT="" eval "set -- $@" # intended for compatiblity with zsh words_to_convert=$# while [ ${words_to_convert} -gt 0 ] ; do eval "word_BIP39=\${${words_to_convert}}" eval "digit_11bits=\${hex_${word_BIP39}}" fn_power ${buffer_bits_count} buffer=$(( ${buffer} + ${digit_11bits} * ${FN_POWER_RESULT} )) buffer_bits_count=$(( ${buffer_bits_count} + ${BITS_IN_WORD} )) while [ ${buffer_bits_count} -ge ${BITS_IN_NIBBLE} ]; do hex_digit=$(( ${buffer} % 16 )) FN_ENG_WORDS_TO_HEX_RESULT=$( printf "%01X%s" "${hex_digit}" "${FN_ENG_WORDS_TO_HEX_RESULT}" ) buffer=$(( ${buffer} / 16 )) buffer_bits_count=$(( ${buffer_bits_count} - ${BITS_IN_NIBBLE} )) done words_to_convert=$(( ${words_to_convert} - 1 )) done if [ ${buffer_bits_count} -gt 0 ] ; then hex_digit=$(( ${buffer} % 16 )) FN_ENG_WORDS_TO_HEX_RESULT=$( printf "%01X%s" "${hex_digit}" "${FN_ENG_WORDS_TO_HEX_RESULT}" ) fi } fn_hex_to_bip39_eng_words () { bits=0 tempvar=0 word_value=0 word_index="" word="" words_string="" nibble=0 word_0='abandon' word_1='ability' word_2='able' word_3='about' word_4='above' word_5='absent' word_6='absorb' word_7='abstract' word_8='absurd' word_9='abuse' word_10='access' word_11='accident' word_12='account' word_13='accuse' word_14='achieve' word_15='acid' word_16='acoustic' word_17='acquire' word_18='across' word_19='act' word_20='action' word_21='actor' word_22='actress' word_23='actual' word_24='adapt' word_25='add' word_26='addict' word_27='address' word_28='adjust' word_29='admit' word_30='adult' word_31='advance' word_32='advice' word_33='aerobic' word_34='affair' word_35='afford' word_36='afraid' word_37='again' word_38='age' word_39='agent' word_40='agree' word_41='ahead' word_42='aim' word_43='air' word_44='airport' word_45='aisle' word_46='alarm' word_47='album' word_48='alcohol' word_49='alert' word_50='alien' word_51='all' word_52='alley' word_53='allow' word_54='almost' word_55='alone' word_56='alpha' word_57='already' word_58='also' word_59='alter' word_60='always' word_61='amateur' word_62='amazing' word_63='among' word_64='amount' word_65='amused' word_66='analyst' word_67='anchor' word_68='ancient' word_69='anger' word_70='angle' word_71='angry' word_72='animal' word_73='ankle' word_74='announce' word_75='annual' word_76='another' word_77='answer' word_78='antenna' word_79='antique' word_80='anxiety' word_81='any' word_82='apart' word_83='apology' word_84='appear' word_85='apple' word_86='approve' word_87='april' word_88='arch' word_89='arctic' word_90='area' word_91='arena' word_92='argue' word_93='arm' word_94='armed' word_95='armor' word_96='army' word_97='around' word_98='arrange' word_99='arrest' word_100='arrive' word_101='arrow' word_102='art' word_103='artefact' word_104='artist' word_105='artwork' word_106='ask' word_107='aspect' word_108='assault' word_109='asset' word_110='assist' word_111='assume' word_112='asthma' word_113='athlete' word_114='atom' word_115='attack' word_116='attend' word_117='attitude' word_118='attract' word_119='auction' word_120='audit' word_121='august' word_122='aunt' word_123='author' word_124='auto' word_125='autumn' word_126='average' word_127='avocado' word_128='avoid' word_129='awake' word_130='aware' word_131='away' word_132='awesome' word_133='awful' word_134='awkward' word_135='axis' word_136='baby' word_137='bachelor' word_138='bacon' word_139='badge' word_140='bag' word_141='balance' word_142='balcony' word_143='ball' word_144='bamboo' word_145='banana' word_146='banner' word_147='bar' word_148='barely' word_149='bargain' word_150='barrel' word_151='base' word_152='basic' word_153='basket' word_154='battle' word_155='beach' word_156='bean' word_157='beauty' word_158='because' word_159='become' word_160='beef' word_161='before' word_162='begin' word_163='behave' word_164='behind' word_165='believe' word_166='below' word_167='belt' word_168='bench' word_169='benefit' word_170='best' word_171='betray' word_172='better' word_173='between' word_174='beyond' word_175='bicycle' word_176='bid' word_177='bike' word_178='bind' word_179='biology' word_180='bird' word_181='birth' word_182='bitter' word_183='black' word_184='blade' word_185='blame' word_186='blanket' word_187='blast' word_188='bleak' word_189='bless' word_190='blind' word_191='blood' word_192='blossom' word_193='blouse' word_194='blue' word_195='blur' word_196='blush' word_197='board' word_198='boat' word_199='body' word_200='boil' word_201='bomb' word_202='bone' word_203='bonus' word_204='book' word_205='boost' word_206='border' word_207='boring' word_208='borrow' word_209='boss' word_210='bottom' word_211='bounce' word_212='box' word_213='boy' word_214='bracket' word_215='brain' word_216='brand' word_217='brass' word_218='brave' word_219='bread' word_220='breeze' word_221='brick' word_222='bridge' word_223='brief' word_224='bright' word_225='bring' word_226='brisk' word_227='broccoli' word_228='broken' word_229='bronze' word_230='broom' word_231='brother' word_232='brown' word_233='brush' word_234='bubble' word_235='buddy' word_236='budget' word_237='buffalo' word_238='build' word_239='bulb' word_240='bulk' word_241='bullet' word_242='bundle' word_243='bunker' word_244='burden' word_245='burger' word_246='burst' word_247='bus' word_248='business' word_249='busy' word_250='butter' word_251='buyer' word_252='buzz' word_253='cabbage' word_254='cabin' word_255='cable' word_256='cactus' word_257='cage' word_258='cake' word_259='call' word_260='calm' word_261='camera' word_262='camp' word_263='can' word_264='canal' word_265='cancel' word_266='candy' word_267='cannon' word_268='canoe' word_269='canvas' word_270='canyon' word_271='capable' word_272='capital' word_273='captain' word_274='car' word_275='carbon' word_276='card' word_277='cargo' word_278='carpet' word_279='carry' word_280='cart' word_281='case' word_282='cash' word_283='casino' word_284='castle' word_285='casual' word_286='cat' word_287='catalog' word_288='catch' word_289='category' word_290='cattle' word_291='caught' word_292='cause' word_293='caution' word_294='cave' word_295='ceiling' word_296='celery' word_297='cement' word_298='census' word_299='century' word_300='cereal' word_301='certain' word_302='chair' word_303='chalk' word_304='champion' word_305='change' word_306='chaos' word_307='chapter' word_308='charge' word_309='chase' word_310='chat' word_311='cheap' word_312='check' word_313='cheese' word_314='chef' word_315='cherry' word_316='chest' word_317='chicken' word_318='chief' word_319='child' word_320='chimney' word_321='choice' word_322='choose' word_323='chronic' word_324='chuckle' word_325='chunk' word_326='churn' word_327='cigar' word_328='cinnamon' word_329='circle' word_330='citizen' word_331='city' word_332='civil' word_333='claim' word_334='clap' word_335='clarify' word_336='claw' word_337='clay' word_338='clean' word_339='clerk' word_340='clever' word_341='click' word_342='client' word_343='cliff' word_344='climb' word_345='clinic' word_346='clip' word_347='clock' word_348='clog' word_349='close' word_350='cloth' word_351='cloud' word_352='clown' word_353='club' word_354='clump' word_355='cluster' word_356='clutch' word_357='coach' word_358='coast' word_359='coconut' word_360='code' word_361='coffee' word_362='coil' word_363='coin' word_364='collect' word_365='color' word_366='column' word_367='combine' word_368='come' word_369='comfort' word_370='comic' word_371='common' word_372='company' word_373='concert' word_374='conduct' word_375='confirm' word_376='congress' word_377='connect' word_378='consider' word_379='control' word_380='convince' word_381='cook' word_382='cool' word_383='copper' word_384='copy' word_385='coral' word_386='core' word_387='corn' word_388='correct' word_389='cost' word_390='cotton' word_391='couch' word_392='country' word_393='couple' word_394='course' word_395='cousin' word_396='cover' word_397='coyote' word_398='crack' word_399='cradle' word_400='craft' word_401='cram' word_402='crane' word_403='crash' word_404='crater' word_405='crawl' word_406='crazy' word_407='cream' word_408='credit' word_409='creek' word_410='crew' word_411='cricket' word_412='crime' word_413='crisp' word_414='critic' word_415='crop' word_416='cross' word_417='crouch' word_418='crowd' word_419='crucial' word_420='cruel' word_421='cruise' word_422='crumble' word_423='crunch' word_424='crush' word_425='cry' word_426='crystal' word_427='cube' word_428='culture' word_429='cup' word_430='cupboard' word_431='curious' word_432='current' word_433='curtain' word_434='curve' word_435='cushion' word_436='custom' word_437='cute' word_438='cycle' word_439='dad' word_440='damage' word_441='damp' word_442='dance' word_443='danger' word_444='daring' word_445='dash' word_446='daughter' word_447='dawn' word_448='day' word_449='deal' word_450='debate' word_451='debris' word_452='decade' word_453='december' word_454='decide' word_455='decline' word_456='decorate' word_457='decrease' word_458='deer' word_459='defense' word_460='define' word_461='defy' word_462='degree' word_463='delay' word_464='deliver' word_465='demand' word_466='demise' word_467='denial' word_468='dentist' word_469='deny' word_470='depart' word_471='depend' word_472='deposit' word_473='depth' word_474='deputy' word_475='derive' word_476='describe' word_477='desert' word_478='design' word_479='desk' word_480='despair' word_481='destroy' word_482='detail' word_483='detect' word_484='develop' word_485='device' word_486='devote' word_487='diagram' word_488='dial' word_489='diamond' word_490='diary' word_491='dice' word_492='diesel' word_493='diet' word_494='differ' word_495='digital' word_496='dignity' word_497='dilemma' word_498='dinner' word_499='dinosaur' word_500='direct' word_501='dirt' word_502='disagree' word_503='discover' word_504='disease' word_505='dish' word_506='dismiss' word_507='disorder' word_508='display' word_509='distance' word_510='divert' word_511='divide' word_512='divorce' word_513='dizzy' word_514='doctor' word_515='document' word_516='dog' word_517='doll' word_518='dolphin' word_519='domain' word_520='donate' word_521='donkey' word_522='donor' word_523='door' word_524='dose' word_525='double' word_526='dove' word_527='draft' word_528='dragon' word_529='drama' word_530='drastic' word_531='draw' word_532='dream' word_533='dress' word_534='drift' word_535='drill' word_536='drink' word_537='drip' word_538='drive' word_539='drop' word_540='drum' word_541='dry' word_542='duck' word_543='dumb' word_544='dune' word_545='during' word_546='dust' word_547='dutch' word_548='duty' word_549='dwarf' word_550='dynamic' word_551='eager' word_552='eagle' word_553='early' word_554='earn' word_555='earth' word_556='easily' word_557='east' word_558='easy' word_559='echo' word_560='ecology' word_561='economy' word_562='edge' word_563='edit' word_564='educate' word_565='effort' word_566='egg' word_567='eight' word_568='either' word_569='elbow' word_570='elder' word_571='electric' word_572='elegant' word_573='element' word_574='elephant' word_575='elevator' word_576='elite' word_577='else' word_578='embark' word_579='embody' word_580='embrace' word_581='emerge' word_582='emotion' word_583='employ' word_584='empower' word_585='empty' word_586='enable' word_587='enact' word_588='end' word_589='endless' word_590='endorse' word_591='enemy' word_592='energy' word_593='enforce' word_594='engage' word_595='engine' word_596='enhance' word_597='enjoy' word_598='enlist' word_599='enough' word_600='enrich' word_601='enroll' word_602='ensure' word_603='enter' word_604='entire' word_605='entry' word_606='envelope' word_607='episode' word_608='equal' word_609='equip' word_610='era' word_611='erase' word_612='erode' word_613='erosion' word_614='error' word_615='erupt' word_616='escape' word_617='essay' word_618='essence' word_619='estate' word_620='eternal' word_621='ethics' word_622='evidence' word_623='evil' word_624='evoke' word_625='evolve' word_626='exact' word_627='example' word_628='excess' word_629='exchange' word_630='excite' word_631='exclude' word_632='excuse' word_633='execute' word_634='exercise' word_635='exhaust' word_636='exhibit' word_637='exile' word_638='exist' word_639='exit' word_640='exotic' word_641='expand' word_642='expect' word_643='expire' word_644='explain' word_645='expose' word_646='express' word_647='extend' word_648='extra' word_649='eye' word_650='eyebrow' word_651='fabric' word_652='face' word_653='faculty' word_654='fade' word_655='faint' word_656='faith' word_657='fall' word_658='false' word_659='fame' word_660='family' word_661='famous' word_662='fan' word_663='fancy' word_664='fantasy' word_665='farm' word_666='fashion' word_667='fat' word_668='fatal' word_669='father' word_670='fatigue' word_671='fault' word_672='favorite' word_673='feature' word_674='february' word_675='federal' word_676='fee' word_677='feed' word_678='feel' word_679='female' word_680='fence' word_681='festival' word_682='fetch' word_683='fever' word_684='few' word_685='fiber' word_686='fiction' word_687='field' word_688='figure' word_689='file' word_690='film' word_691='filter' word_692='final' word_693='find' word_694='fine' word_695='finger' word_696='finish' word_697='fire' word_698='firm' word_699='first' word_700='fiscal' word_701='fish' word_702='fit' word_703='fitness' word_704='fix' word_705='flag' word_706='flame' word_707='flash' word_708='flat' word_709='flavor' word_710='flee' word_711='flight' word_712='flip' word_713='float' word_714='flock' word_715='floor' word_716='flower' word_717='fluid' word_718='flush' word_719='fly' word_720='foam' word_721='focus' word_722='fog' word_723='foil' word_724='fold' word_725='follow' word_726='food' word_727='foot' word_728='force' word_729='forest' word_730='forget' word_731='fork' word_732='fortune' word_733='forum' word_734='forward' word_735='fossil' word_736='foster' word_737='found' word_738='fox' word_739='fragile' word_740='frame' word_741='frequent' word_742='fresh' word_743='friend' word_744='fringe' word_745='frog' word_746='front' word_747='frost' word_748='frown' word_749='frozen' word_750='fruit' word_751='fuel' word_752='fun' word_753='funny' word_754='furnace' word_755='fury' word_756='future' word_757='gadget' word_758='gain' word_759='galaxy' word_760='gallery' word_761='game' word_762='gap' word_763='garage' word_764='garbage' word_765='garden' word_766='garlic' word_767='garment' word_768='gas' word_769='gasp' word_770='gate' word_771='gather' word_772='gauge' word_773='gaze' word_774='general' word_775='genius' word_776='genre' word_777='gentle' word_778='genuine' word_779='gesture' word_780='ghost' word_781='giant' word_782='gift' word_783='giggle' word_784='ginger' word_785='giraffe' word_786='girl' word_787='give' word_788='glad' word_789='glance' word_790='glare' word_791='glass' word_792='glide' word_793='glimpse' word_794='globe' word_795='gloom' word_796='glory' word_797='glove' word_798='glow' word_799='glue' word_800='goat' word_801='goddess' word_802='gold' word_803='good' word_804='goose' word_805='gorilla' word_806='gospel' word_807='gossip' word_808='govern' word_809='gown' word_810='grab' word_811='grace' word_812='grain' word_813='grant' word_814='grape' word_815='grass' word_816='gravity' word_817='great' word_818='green' word_819='grid' word_820='grief' word_821='grit' word_822='grocery' word_823='group' word_824='grow' word_825='grunt' word_826='guard' word_827='guess' word_828='guide' word_829='guilt' word_830='guitar' word_831='gun' word_832='gym' word_833='habit' word_834='hair' word_835='half' word_836='hammer' word_837='hamster' word_838='hand' word_839='happy' word_840='harbor' word_841='hard' word_842='harsh' word_843='harvest' word_844='hat' word_845='have' word_846='hawk' word_847='hazard' word_848='head' word_849='health' word_850='heart' word_851='heavy' word_852='hedgehog' word_853='height' word_854='hello' word_855='helmet' word_856='help' word_857='hen' word_858='hero' word_859='hidden' word_860='high' word_861='hill' word_862='hint' word_863='hip' word_864='hire' word_865='history' word_866='hobby' word_867='hockey' word_868='hold' word_869='hole' word_870='holiday' word_871='hollow' word_872='home' word_873='honey' word_874='hood' word_875='hope' word_876='horn' word_877='horror' word_878='horse' word_879='hospital' word_880='host' word_881='hotel' word_882='hour' word_883='hover' word_884='hub' word_885='huge' word_886='human' word_887='humble' word_888='humor' word_889='hundred' word_890='hungry' word_891='hunt' word_892='hurdle' word_893='hurry' word_894='hurt' word_895='husband' word_896='hybrid' word_897='ice' word_898='icon' word_899='idea' word_900='identify' word_901='idle' word_902='ignore' word_903='ill' word_904='illegal' word_905='illness' word_906='image' word_907='imitate' word_908='immense' word_909='immune' word_910='impact' word_911='impose' word_912='improve' word_913='impulse' word_914='inch' word_915='include' word_916='income' word_917='increase' word_918='index' word_919='indicate' word_920='indoor' word_921='industry' word_922='infant' word_923='inflict' word_924='inform' word_925='inhale' word_926='inherit' word_927='initial' word_928='inject' word_929='injury' word_930='inmate' word_931='inner' word_932='innocent' word_933='input' word_934='inquiry' word_935='insane' word_936='insect' word_937='inside' word_938='inspire' word_939='install' word_940='intact' word_941='interest' word_942='into' word_943='invest' word_944='invite' word_945='involve' word_946='iron' word_947='island' word_948='isolate' word_949='issue' word_950='item' word_951='ivory' word_952='jacket' word_953='jaguar' word_954='jar' word_955='jazz' word_956='jealous' word_957='jeans' word_958='jelly' word_959='jewel' word_960='job' word_961='join' word_962='joke' word_963='journey' word_964='joy' word_965='judge' word_966='juice' word_967='jump' word_968='jungle' word_969='junior' word_970='junk' word_971='just' word_972='kangaroo' word_973='keen' word_974='keep' word_975='ketchup' word_976='key' word_977='kick' word_978='kid' word_979='kidney' word_980='kind' word_981='kingdom' word_982='kiss' word_983='kit' word_984='kitchen' word_985='kite' word_986='kitten' word_987='kiwi' word_988='knee' word_989='knife' word_990='knock' word_991='know' word_992='lab' word_993='label' word_994='labor' word_995='ladder' word_996='lady' word_997='lake' word_998='lamp' word_999='language' word_1000='laptop' word_1001='large' word_1002='later' word_1003='latin' word_1004='laugh' word_1005='laundry' word_1006='lava' word_1007='law' word_1008='lawn' word_1009='lawsuit' word_1010='layer' word_1011='lazy' word_1012='leader' word_1013='leaf' word_1014='learn' word_1015='leave' word_1016='lecture' word_1017='left' word_1018='leg' word_1019='legal' word_1020='legend' word_1021='leisure' word_1022='lemon' word_1023='lend' word_1024='length' word_1025='lens' word_1026='leopard' word_1027='lesson' word_1028='letter' word_1029='level' word_1030='liar' word_1031='liberty' word_1032='library' word_1033='license' word_1034='life' word_1035='lift' word_1036='light' word_1037='like' word_1038='limb' word_1039='limit' word_1040='link' word_1041='lion' word_1042='liquid' word_1043='list' word_1044='little' word_1045='live' word_1046='lizard' word_1047='load' word_1048='loan' word_1049='lobster' word_1050='local' word_1051='lock' word_1052='logic' word_1053='lonely' word_1054='long' word_1055='loop' word_1056='lottery' word_1057='loud' word_1058='lounge' word_1059='love' word_1060='loyal' word_1061='lucky' word_1062='luggage' word_1063='lumber' word_1064='lunar' word_1065='lunch' word_1066='luxury' word_1067='lyrics' word_1068='machine' word_1069='mad' word_1070='magic' word_1071='magnet' word_1072='maid' word_1073='mail' word_1074='main' word_1075='major' word_1076='make' word_1077='mammal' word_1078='man' word_1079='manage' word_1080='mandate' word_1081='mango' word_1082='mansion' word_1083='manual' word_1084='maple' word_1085='marble' word_1086='march' word_1087='margin' word_1088='marine' word_1089='market' word_1090='marriage' word_1091='mask' word_1092='mass' word_1093='master' word_1094='match' word_1095='material' word_1096='math' word_1097='matrix' word_1098='matter' word_1099='maximum' word_1100='maze' word_1101='meadow' word_1102='mean' word_1103='measure' word_1104='meat' word_1105='mechanic' word_1106='medal' word_1107='media' word_1108='melody' word_1109='melt' word_1110='member' word_1111='memory' word_1112='mention' word_1113='menu' word_1114='mercy' word_1115='merge' word_1116='merit' word_1117='merry' word_1118='mesh' word_1119='message' word_1120='metal' word_1121='method' word_1122='middle' word_1123='midnight' word_1124='milk' word_1125='million' word_1126='mimic' word_1127='mind' word_1128='minimum' word_1129='minor' word_1130='minute' word_1131='miracle' word_1132='mirror' word_1133='misery' word_1134='miss' word_1135='mistake' word_1136='mix' word_1137='mixed' word_1138='mixture' word_1139='mobile' word_1140='model' word_1141='modify' word_1142='mom' word_1143='moment' word_1144='monitor' word_1145='monkey' word_1146='monster' word_1147='month' word_1148='moon' word_1149='moral' word_1150='more' word_1151='morning' word_1152='mosquito' word_1153='mother' word_1154='motion' word_1155='motor' word_1156='mountain' word_1157='mouse' word_1158='move' word_1159='movie' word_1160='much' word_1161='muffin' word_1162='mule' word_1163='multiply' word_1164='muscle' word_1165='museum' word_1166='mushroom' word_1167='music' word_1168='must' word_1169='mutual' word_1170='myself' word_1171='mystery' word_1172='myth' word_1173='naive' word_1174='name' word_1175='napkin' word_1176='narrow' word_1177='nasty' word_1178='nation' word_1179='nature' word_1180='near' word_1181='neck' word_1182='need' word_1183='negative' word_1184='neglect' word_1185='neither' word_1186='nephew' word_1187='nerve' word_1188='nest' word_1189='net' word_1190='network' word_1191='neutral' word_1192='never' word_1193='news' word_1194='next' word_1195='nice' word_1196='night' word_1197='noble' word_1198='noise' word_1199='nominee' word_1200='noodle' word_1201='normal' word_1202='north' word_1203='nose' word_1204='notable' word_1205='note' word_1206='nothing' word_1207='notice' word_1208='novel' word_1209='now' word_1210='nuclear' word_1211='number' word_1212='nurse' word_1213='nut' word_1214='oak' word_1215='obey' word_1216='object' word_1217='oblige' word_1218='obscure' word_1219='observe' word_1220='obtain' word_1221='obvious' word_1222='occur' word_1223='ocean' word_1224='october' word_1225='odor' word_1226='off' word_1227='offer' word_1228='office' word_1229='often' word_1230='oil' word_1231='okay' word_1232='old' word_1233='olive' word_1234='olympic' word_1235='omit' word_1236='once' word_1237='one' word_1238='onion' word_1239='online' word_1240='only' word_1241='open' word_1242='opera' word_1243='opinion' word_1244='oppose' word_1245='option' word_1246='orange' word_1247='orbit' word_1248='orchard' word_1249='order' word_1250='ordinary' word_1251='organ' word_1252='orient' word_1253='original' word_1254='orphan' word_1255='ostrich' word_1256='other' word_1257='outdoor' word_1258='outer' word_1259='output' word_1260='outside' word_1261='oval' word_1262='oven' word_1263='over' word_1264='own' word_1265='owner' word_1266='oxygen' word_1267='oyster' word_1268='ozone' word_1269='pact' word_1270='paddle' word_1271='page' word_1272='pair' word_1273='palace' word_1274='palm' word_1275='panda' word_1276='panel' word_1277='panic' word_1278='panther' word_1279='paper' word_1280='parade' word_1281='parent' word_1282='park' word_1283='parrot' word_1284='party' word_1285='pass' word_1286='patch' word_1287='path' word_1288='patient' word_1289='patrol' word_1290='pattern' word_1291='pause' word_1292='pave' word_1293='payment' word_1294='peace' word_1295='peanut' word_1296='pear' word_1297='peasant' word_1298='pelican' word_1299='pen' word_1300='penalty' word_1301='pencil' word_1302='people' word_1303='pepper' word_1304='perfect' word_1305='permit' word_1306='person' word_1307='pet' word_1308='phone' word_1309='photo' word_1310='phrase' word_1311='physical' word_1312='piano' word_1313='picnic' word_1314='picture' word_1315='piece' word_1316='pig' word_1317='pigeon' word_1318='pill' word_1319='pilot' word_1320='pink' word_1321='pioneer' word_1322='pipe' word_1323='pistol' word_1324='pitch' word_1325='pizza' word_1326='place' word_1327='planet' word_1328='plastic' word_1329='plate' word_1330='play' word_1331='please' word_1332='pledge' word_1333='pluck' word_1334='plug' word_1335='plunge' word_1336='poem' word_1337='poet' word_1338='point' word_1339='polar' word_1340='pole' word_1341='police' word_1342='pond' word_1343='pony' word_1344='pool' word_1345='popular' word_1346='portion' word_1347='position' word_1348='possible' word_1349='post' word_1350='potato' word_1351='pottery' word_1352='poverty' word_1353='powder' word_1354='power' word_1355='practice' word_1356='praise' word_1357='predict' word_1358='prefer' word_1359='prepare' word_1360='present' word_1361='pretty' word_1362='prevent' word_1363='price' word_1364='pride' word_1365='primary' word_1366='print' word_1367='priority' word_1368='prison' word_1369='private' word_1370='prize' word_1371='problem' word_1372='process' word_1373='produce' word_1374='profit' word_1375='program' word_1376='project' word_1377='promote' word_1378='proof' word_1379='property' word_1380='prosper' word_1381='protect' word_1382='proud' word_1383='provide' word_1384='public' word_1385='pudding' word_1386='pull' word_1387='pulp' word_1388='pulse' word_1389='pumpkin' word_1390='punch' word_1391='pupil' word_1392='puppy' word_1393='purchase' word_1394='purity' word_1395='purpose' word_1396='purse' word_1397='push' word_1398='put' word_1399='puzzle' word_1400='pyramid' word_1401='quality' word_1402='quantum' word_1403='quarter' word_1404='question' word_1405='quick' word_1406='quit' word_1407='quiz' word_1408='quote' word_1409='rabbit' word_1410='raccoon' word_1411='race' word_1412='rack' word_1413='radar' word_1414='radio' word_1415='rail' word_1416='rain' word_1417='raise' word_1418='rally' word_1419='ramp' word_1420='ranch' word_1421='random' word_1422='range' word_1423='rapid' word_1424='rare' word_1425='rate' word_1426='rather' word_1427='raven' word_1428='raw' word_1429='razor' word_1430='ready' word_1431='real' word_1432='reason' word_1433='rebel' word_1434='rebuild' word_1435='recall' word_1436='receive' word_1437='recipe' word_1438='record' word_1439='recycle' word_1440='reduce' word_1441='reflect' word_1442='reform' word_1443='refuse' word_1444='region' word_1445='regret' word_1446='regular' word_1447='reject' word_1448='relax' word_1449='release' word_1450='relief' word_1451='rely' word_1452='remain' word_1453='remember' word_1454='remind' word_1455='remove' word_1456='render' word_1457='renew' word_1458='rent' word_1459='reopen' word_1460='repair' word_1461='repeat' word_1462='replace' word_1463='report' word_1464='require' word_1465='rescue' word_1466='resemble' word_1467='resist' word_1468='resource' word_1469='response' word_1470='result' word_1471='retire' word_1472='retreat' word_1473='return' word_1474='reunion' word_1475='reveal' word_1476='review' word_1477='reward' word_1478='rhythm' word_1479='rib' word_1480='ribbon' word_1481='rice' word_1482='rich' word_1483='ride' word_1484='ridge' word_1485='rifle' word_1486='right' word_1487='rigid' word_1488='ring' word_1489='riot' word_1490='ripple' word_1491='risk' word_1492='ritual' word_1493='rival' word_1494='river' word_1495='road' word_1496='roast' word_1497='robot' word_1498='robust' word_1499='rocket' word_1500='romance' word_1501='roof' word_1502='rookie' word_1503='room' word_1504='rose' word_1505='rotate' word_1506='rough' word_1507='round' word_1508='route' word_1509='royal' word_1510='rubber' word_1511='rude' word_1512='rug' word_1513='rule' word_1514='run' word_1515='runway' word_1516='rural' word_1517='sad' word_1518='saddle' word_1519='sadness' word_1520='safe' word_1521='sail' word_1522='salad' word_1523='salmon' word_1524='salon' word_1525='salt' word_1526='salute' word_1527='same' word_1528='sample' word_1529='sand' word_1530='satisfy' word_1531='satoshi' word_1532='sauce' word_1533='sausage' word_1534='save' word_1535='say' word_1536='scale' word_1537='scan' word_1538='scare' word_1539='scatter' word_1540='scene' word_1541='scheme' word_1542='school' word_1543='science' word_1544='scissors' word_1545='scorpion' word_1546='scout' word_1547='scrap' word_1548='screen' word_1549='script' word_1550='scrub' word_1551='sea' word_1552='search' word_1553='season' word_1554='seat' word_1555='second' word_1556='secret' word_1557='section' word_1558='security' word_1559='seed' word_1560='seek' word_1561='segment' word_1562='select' word_1563='sell' word_1564='seminar' word_1565='senior' word_1566='sense' word_1567='sentence' word_1568='series' word_1569='service' word_1570='session' word_1571='settle' word_1572='setup' word_1573='seven' word_1574='shadow' word_1575='shaft' word_1576='shallow' word_1577='share' word_1578='shed' word_1579='shell' word_1580='sheriff' word_1581='shield' word_1582='shift' word_1583='shine' word_1584='ship' word_1585='shiver' word_1586='shock' word_1587='shoe' word_1588='shoot' word_1589='shop' word_1590='short' word_1591='shoulder' word_1592='shove' word_1593='shrimp' word_1594='shrug' word_1595='shuffle' word_1596='shy' word_1597='sibling' word_1598='sick' word_1599='side' word_1600='siege' word_1601='sight' word_1602='sign' word_1603='silent' word_1604='silk' word_1605='silly' word_1606='silver' word_1607='similar' word_1608='simple' word_1609='since' word_1610='sing' word_1611='siren' word_1612='sister' word_1613='situate' word_1614='six' word_1615='size' word_1616='skate' word_1617='sketch' word_1618='ski' word_1619='skill' word_1620='skin' word_1621='skirt' word_1622='skull' word_1623='slab' word_1624='slam' word_1625='sleep' word_1626='slender' word_1627='slice' word_1628='slide' word_1629='slight' word_1630='slim' word_1631='slogan' word_1632='slot' word_1633='slow' word_1634='slush' word_1635='small' word_1636='smart' word_1637='smile' word_1638='smoke' word_1639='smooth' word_1640='snack' word_1641='snake' word_1642='snap' word_1643='sniff' word_1644='snow' word_1645='soap' word_1646='soccer' word_1647='social' word_1648='sock' word_1649='soda' word_1650='soft' word_1651='solar' word_1652='soldier' word_1653='solid' word_1654='solution' word_1655='solve' word_1656='someone' word_1657='song' word_1658='soon' word_1659='sorry' word_1660='sort' word_1661='soul' word_1662='sound' word_1663='soup' word_1664='source' word_1665='south' word_1666='space' word_1667='spare' word_1668='spatial' word_1669='spawn' word_1670='speak' word_1671='special' word_1672='speed' word_1673='spell' word_1674='spend' word_1675='sphere' word_1676='spice' word_1677='spider' word_1678='spike' word_1679='spin' word_1680='spirit' word_1681='split' word_1682='spoil' word_1683='sponsor' word_1684='spoon' word_1685='sport' word_1686='spot' word_1687='spray' word_1688='spread' word_1689='spring' word_1690='spy' word_1691='square' word_1692='squeeze' word_1693='squirrel' word_1694='stable' word_1695='stadium' word_1696='staff' word_1697='stage' word_1698='stairs' word_1699='stamp' word_1700='stand' word_1701='start' word_1702='state' word_1703='stay' word_1704='steak' word_1705='steel' word_1706='stem' word_1707='step' word_1708='stereo' word_1709='stick' word_1710='still' word_1711='sting' word_1712='stock' word_1713='stomach' word_1714='stone' word_1715='stool' word_1716='story' word_1717='stove' word_1718='strategy' word_1719='street' word_1720='strike' word_1721='strong' word_1722='struggle' word_1723='student' word_1724='stuff' word_1725='stumble' word_1726='style' word_1727='subject' word_1728='submit' word_1729='subway' word_1730='success' word_1731='such' word_1732='sudden' word_1733='suffer' word_1734='sugar' word_1735='suggest' word_1736='suit' word_1737='summer' word_1738='sun' word_1739='sunny' word_1740='sunset' word_1741='super' word_1742='supply' word_1743='supreme' word_1744='sure' word_1745='surface' word_1746='surge' word_1747='surprise' word_1748='surround' word_1749='survey' word_1750='suspect' word_1751='sustain' word_1752='swallow' word_1753='swamp' word_1754='swap' word_1755='swarm' word_1756='swear' word_1757='sweet' word_1758='swift' word_1759='swim' word_1760='swing' word_1761='switch' word_1762='sword' word_1763='symbol' word_1764='symptom' word_1765='syrup' word_1766='system' word_1767='table' word_1768='tackle' word_1769='tag' word_1770='tail' word_1771='talent' word_1772='talk' word_1773='tank' word_1774='tape' word_1775='target' word_1776='task' word_1777='taste' word_1778='tattoo' word_1779='taxi' word_1780='teach' word_1781='team' word_1782='tell' word_1783='ten' word_1784='tenant' word_1785='tennis' word_1786='tent' word_1787='term' word_1788='test' word_1789='text' word_1790='thank' word_1791='that' word_1792='theme' word_1793='then' word_1794='theory' word_1795='there' word_1796='they' word_1797='thing' word_1798='this' word_1799='thought' word_1800='three' word_1801='thrive' word_1802='throw' word_1803='thumb' word_1804='thunder' word_1805='ticket' word_1806='tide' word_1807='tiger' word_1808='tilt' word_1809='timber' word_1810='time' word_1811='tiny' word_1812='tip' word_1813='tired' word_1814='tissue' word_1815='title' word_1816='toast' word_1817='tobacco' word_1818='today' word_1819='toddler' word_1820='toe' word_1821='together' word_1822='toilet' word_1823='token' word_1824='tomato' word_1825='tomorrow' word_1826='tone' word_1827='tongue' word_1828='tonight' word_1829='tool' word_1830='tooth' word_1831='top' word_1832='topic' word_1833='topple' word_1834='torch' word_1835='tornado' word_1836='tortoise' word_1837='toss' word_1838='total' word_1839='tourist' word_1840='toward' word_1841='tower' word_1842='town' word_1843='toy' word_1844='track' word_1845='trade' word_1846='traffic' word_1847='tragic' word_1848='train' word_1849='transfer' word_1850='trap' word_1851='trash' word_1852='travel' word_1853='tray' word_1854='treat' word_1855='tree' word_1856='trend' word_1857='trial' word_1858='tribe' word_1859='trick' word_1860='trigger' word_1861='trim' word_1862='trip' word_1863='trophy' word_1864='trouble' word_1865='truck' word_1866='true' word_1867='truly' word_1868='trumpet' word_1869='trust' word_1870='truth' word_1871='try' word_1872='tube' word_1873='tuition' word_1874='tumble' word_1875='tuna' word_1876='tunnel' word_1877='turkey' word_1878='turn' word_1879='turtle' word_1880='twelve' word_1881='twenty' word_1882='twice' word_1883='twin' word_1884='twist' word_1885='two' word_1886='type' word_1887='typical' word_1888='ugly' word_1889='umbrella' word_1890='unable' word_1891='unaware' word_1892='uncle' word_1893='uncover' word_1894='under' word_1895='undo' word_1896='unfair' word_1897='unfold' word_1898='unhappy' word_1899='uniform' word_1900='unique' word_1901='unit' word_1902='universe' word_1903='unknown' word_1904='unlock' word_1905='until' word_1906='unusual' word_1907='unveil' word_1908='update' word_1909='upgrade' word_1910='uphold' word_1911='upon' word_1912='upper' word_1913='upset' word_1914='urban' word_1915='urge' word_1916='usage' word_1917='use' word_1918='used' word_1919='useful' word_1920='useless' word_1921='usual' word_1922='utility' word_1923='vacant' word_1924='vacuum' word_1925='vague' word_1926='valid' word_1927='valley' word_1928='valve' word_1929='van' word_1930='vanish' word_1931='vapor' word_1932='various' word_1933='vast' word_1934='vault' word_1935='vehicle' word_1936='velvet' word_1937='vendor' word_1938='venture' word_1939='venue' word_1940='verb' word_1941='verify' word_1942='version' word_1943='very' word_1944='vessel' word_1945='veteran' word_1946='viable' word_1947='vibrant' word_1948='vicious' word_1949='victory' word_1950='video' word_1951='view' word_1952='village' word_1953='vintage' word_1954='violin' word_1955='virtual' word_1956='virus' word_1957='visa' word_1958='visit' word_1959='visual' word_1960='vital' word_1961='vivid' word_1962='vocal' word_1963='voice' word_1964='void' word_1965='volcano' word_1966='volume' word_1967='vote' word_1968='voyage' word_1969='wage' word_1970='wagon' word_1971='wait' word_1972='walk' word_1973='wall' word_1974='walnut' word_1975='want' word_1976='warfare' word_1977='warm' word_1978='warrior' word_1979='wash' word_1980='wasp' word_1981='waste' word_1982='water' word_1983='wave' word_1984='way' word_1985='wealth' word_1986='weapon' word_1987='wear' word_1988='weasel' word_1989='weather' word_1990='web' word_1991='wedding' word_1992='weekend' word_1993='weird' word_1994='welcome' word_1995='west' word_1996='wet' word_1997='whale' word_1998='what' word_1999='wheat' word_2000='wheel' word_2001='when' word_2002='where' word_2003='whip' word_2004='whisper' word_2005='wide' word_2006='width' word_2007='wife' word_2008='wild' word_2009='will' word_2010='win' word_2011='window' word_2012='wine' word_2013='wing' word_2014='wink' word_2015='winner' word_2016='winter' word_2017='wire' word_2018='wisdom' word_2019='wise' word_2020='wish' word_2021='witness' word_2022='wolf' word_2023='woman' word_2024='wonder' word_2025='wood' word_2026='wool' word_2027='word' word_2028='work' word_2029='world' word_2030='worry' word_2031='worth' word_2032='wrap' word_2033='wreck' word_2034='wrestle' word_2035='wrist' word_2036='write' word_2037='wrong' word_2038='yard' word_2039='year' word_2040='yellow' word_2041='you' word_2042='young' word_2043='youth' word_2044='zebra' word_2045='zero' word_2046='zone' word_2047='zoo' tempvar=${2} bits=${3} hex_substring="${1}" nibble="" while [ ${#hex_substring} -gt 0 ] ; do nibble="${hex_substring##${hex_substring%?}}" fn_power ${bits} tempvar=$(( ${tempvar} + ${FN_POWER_RESULT} * 0x${nibble} )) bits=$(( ${bits} + 4 )) if [ ${bits} -ge 11 ] ; then word_value=$(( ${tempvar} % 2048 )) word_index="word_${word_value}" eval "word=\"\${$word_index}\"" words_string="${word} ${words_string}" tempvar=$(( ${tempvar} / 2048 )) bits=$(( ${bits} - 11 )) fi hex_substring=${hex_substring%?} done BIP39_WORDS="${words_string}" } # Keep terminal window open - the part below can be safely removed without impacting encryption/decryption results: # fn_sanitize_var_names (), fn_ps_get (), fn_exit (). # If the parent process is shell then just exit. Otherwise replace the process to keep a terminal window open. fn_sanitize_var_names () { eval "set -- $@" # intended for compatiblity with zsh i=1 j=2 header_i="" header_j="" while [ "${i}" -le "${#}" ] ; do eval "header_i=\${${i}}" j=$(( ${i} + 1 )) while [ "${j}" -le "${#}" ]; do eval "header_j=\${${j}}" if [ "${header_i}" = "${header_j}" ] ; then eval "printf \"ps_\${${i}}${i} \"" i=$(( i + 1 )) break fi j=$(( ${j} + 1 )) done eval "printf \"ps_\${${i}} \"" i=$(( i + 1 )) done } fn_ps_get () { FN_PS_GET_RESULT="" PID_lookup="${1}" get_var="ps_${2}" columns_headers="" ps_variables="" remainder_if_any="" columns_headers=$( echo "${ps_output##"${ps_output%%[[:graph:]]*}"}" | { read columns_headers ; echo "${columns_headers}" ; } ) if [ -n "${columns_headers}" -a -z "${columns_headers%%*${2}*}" ] ; then ps_variables=$( fn_sanitize_var_names ${columns_headers} ) eval "set -- ${ps_variables}" # intended for compatiblity with zsh while read ${@} remainder_if_any ; do if [ -n "${ps_PID##[![:digit:]]}" ] ; then if [ "${PID_lookup}" -eq "${ps_PID##[![:digit:]]}" ] ; then eval "FN_PS_GET_RESULT=\$${get_var}" break fi fi done << delimiter $( echo "${ps_output#*"${columns_headers}"[[:space:]]}" ) delimiter fi } fn_exit () { ps_output="" parent_ID="" parent_ID_command_name="" if [ ! -z "${$+foobar}" -a "${TERM_PROGRAM}" != "Apple_Terminal" ] ; then if command -v ps >/dev/null ; then ps_output=$( ps -ef 2> /dev/null) if [ "${?}" -eq 0 ] ; then fn_ps_get "${$}" 'PPID' parent_ID="${FN_PS_GET_RESULT}" if [ -n "${parent_ID}" ] ; then fn_ps_get "${parent_ID}" 'CMD' parent_ID_command_name="${FN_PS_GET_RESULT}" case "${parent_ID_command_name}" in "sh" | *"/sh" | [[:punct:]]"sh" | "sh "* | *"/sh "* | "ash" | *"/ash" | [[:punct:]]"ash" | "ash "* | "bash" | *"/bash" | [[:punct:]]"bash" | "bash "* | *"/bash "* | "ksh" | *"/ksh" | [[:punct:]]"ksh" | "ksh "* | *"/ksh "* | "zsh" | *"/zsh" | [[:punct:]]"zsh" | "zsh "* | *"/zsh "* | *sh.exe | *bash.exe | *ksh.exe | *zsh.exe | "expect" | *"/expect" | "expect "* | *"/expect "* ) exit "${1}";; *) ;; esac fn_ps_get "${parent_ID}" 'COMMAND' parent_ID_command_name="${FN_PS_GET_RESULT}" case "${parent_ID_command_name}" in "sh" | *"/sh" | [[:punct:]]"sh" | "sh "* | *"/sh "* | "ash" | *"/ash" | [[:punct:]]"ash" | "ash "* | "bash" | *"/bash" | [[:punct:]]"bash" | "bash "* | *"/bash "* | "ksh" | *"/ksh" | [[:punct:]]"ksh" | "ksh "* | *"/ksh "* | "zsh" | *"/zsh" | [[:punct:]]"zsh" | "zsh "* | *"/zsh "* | *sh.exe | *bash.exe | *ksh.exe | *zsh.exe | "expect" | *"/expect" | "expect "* | *"/expect "* ) exit "${1}";; *) exec ${SHELL} ;; esac fi fi fi fi exit } fn_right_rotate_32 (){ FN_RIGHT_ROTATE_32_RESULT=0 fn_power $(( 32 - ${2} )) FN_RIGHT_ROTATE_32_RESULT=${FN_POWER_RESULT} fn_power ${2} FN_RIGHT_ROTATE_32_RESULT=$(( ( ${1} / ${FN_POWER_RESULT} ) + ( ${1} % ${FN_POWER_RESULT} ) * ${FN_RIGHT_ROTATE_32_RESULT} )) } fn_right_shift_32(){ FN_RIGHT_SHIFT_32_RESULT=0 FN_RIGHT_SHIFT_32_RESULT=$(( ${1} >> ${2} )) } fn_sha256 () { export LC_ALL=C CHUNK="" p1=0 p2=0 p3=0 s0=0 s1=0 w=0 w_index=0 ch=0 temp1=0 temp2=0 maj=0 a=0 b=0 c=0 d=0 e=0 f=0 g=0 h=0 bits_count=0 sha256_word=0 temp_sum=0 SHA2_WORDS0=$((0x6a09e667)) SHA2_WORDS1=$((0xbb67ae85)) SHA2_WORDS2=$((0x3c6ef372)) SHA2_WORDS3=$((0xa54ff53a)) SHA2_WORDS4=$((0x510e527f)) SHA2_WORDS5=$((0x9b05688c)) SHA2_WORDS6=$((0x1f83d9ab)) SHA2_WORDS7=$((0x5be0cd19)) KL0=$((0x428a2f98)) KL1=$((0x71374491)) KL2=$((0xb5c0fbcf)) KL3=$((0xe9b5dba5)) KL4=$((0x3956c25b)) KL5=$((0x59f111f1)) KL6=$((0x923f82a4)) KL7=$((0xab1c5ed5)) KL8=$((0xd807aa98)) KL9=$((0x12835b01)) KL10=$((0x243185be)) KL11=$((0x550c7dc3)) KL12=$((0x72be5d74)) KL13=$((0x80deb1fe)) KL14=$((0x9bdc06a7)) KL15=$((0xc19bf174)) KL16=$((0xe49b69c1)) KL17=$((0xefbe4786)) KL18=$((0x0fc19dc6)) KL19=$((0x240ca1cc)) KL20=$((0x2de92c6f)) KL21=$((0x4a7484aa)) KL22=$((0x5cb0a9dc)) KL23=$((0x76f988da)) KL24=$((0x983e5152)) KL25=$((0xa831c66d)) KL26=$((0xb00327c8)) KL27=$((0xbf597fc7)) KL28=$((0xc6e00bf3)) KL29=$((0xd5a79147)) KL30=$((0x06ca6351)) KL31=$((0x14292967)) KL32=$((0x27b70a85)) KL33=$((0x2e1b2138)) KL34=$((0x4d2c6dfc)) KL35=$((0x53380d13)) KL36=$((0x650a7354)) KL37=$((0x766a0abb)) KL38=$((0x81c2c92e)) KL39=$((0x92722c85)) KL40=$((0xa2bfe8a1)) KL41=$((0xa81a664b)) KL42=$((0xc24b8b70)) KL43=$((0xc76c51a3)) KL44=$((0xd192e819)) KL45=$((0xd6990624)) KL46=$((0xf40e3585)) KL47=$((0x106aa070)) KL48=$((0x19a4c116)) KL49=$((0x1e376c08)) KL50=$((0x2748774c)) KL51=$((0x34b0bcb5)) KL52=$((0x391c0cb3)) KL53=$((0x4ed8aa4a)) KL54=$((0x5b9cca4f)) KL55=$((0x682e6ff3)) KL56=$((0x748f82ee)) KL57=$((0x78a5636f)) KL58=$((0x84c87814)) KL59=$((0x8cc70208)) KL60=$((0x90befffa)) KL61=$((0xa4506ceb)) KL62=$((0xbef9a3f7)) KL63=$((0xc67178f2)) bits_count=$(( ${#1} * ${BITS_IN_NIBBLE} )) i=$(( ${bits_count} + 8 )) while [ ${i} -lt $(( 512 - 64)) ] ; do CHUNK="${CHUNK}0" i=$(( ${i}+${BITS_IN_NIBBLE} )) done CHUNK=$( printf "%s80%s%016X" "${1}" "${CHUNK}" "${bits_count}" ) count=0 chunk_substring=${CHUNK} segment_8chars="" while [ ${count} -lt 16 ] ; do segment_8chars=${chunk_substring%%${chunk_substring#????????}} eval "w${count}=0x${segment_8chars}" count=$(( ${count} + 1 )) chunk_substring=${chunk_substring#????????}} done count=16 while [ ${count} -lt 64 ] ; do w_index=$(( ${count} - 15)) eval "w=\$w${w_index}" fn_right_rotate_32 ${w} 7 p1=${FN_RIGHT_ROTATE_32_RESULT} fn_right_rotate_32 ${w} 18 p2=${FN_RIGHT_ROTATE_32_RESULT} fn_right_shift_32 ${w} 3 p3=${FN_RIGHT_SHIFT_32_RESULT} s0=$(( p1 ^ p2 ^ p3 )) w_index=$(( ${count} - 2)) eval "w=\$w${w_index}" fn_right_rotate_32 ${w} 17 p1=${FN_RIGHT_ROTATE_32_RESULT} fn_right_rotate_32 ${w} 19 p2=${FN_RIGHT_ROTATE_32_RESULT} fn_right_shift_32 ${w} 10 p3=${FN_RIGHT_SHIFT_32_RESULT} s1=$(( p1 ^ p2 ^ p3 )) w_index=$(( ${count} - 16 )) eval "w=\$w${w_index}" eval "w${count}=$(( ${w} + ${s0} ))" w_index=$(( ${count} - 7 )) eval "w=\$w${w_index}" eval "temp_sum=w${count}" eval "w${count}=$(( (${temp_sum} + ${w} + ${s1}) % 4294967296 ))" count=$(( ${count} + 1 )) done a=${SHA2_WORDS0} b=${SHA2_WORDS1} c=${SHA2_WORDS2} d=${SHA2_WORDS3} e=${SHA2_WORDS4} f=${SHA2_WORDS5} g=${SHA2_WORDS6} h=${SHA2_WORDS7} round=0 while [ ${round} -lt 64 ] ; do fn_right_rotate_32 ${e} 6 p1=${FN_RIGHT_ROTATE_32_RESULT} fn_right_rotate_32 ${e} 11 p2=${FN_RIGHT_ROTATE_32_RESULT} fn_right_rotate_32 ${e} 25 p3=${FN_RIGHT_ROTATE_32_RESULT} s1=$(( ${p1} ^ ${p2} ^ ${p3} )) ch=$(( ( ( ${e} & ${f} ) ^ (~${e} & ${g}) ) % 4294967296 )) eval "KLround=\$KL${round}" eval "w=\$w${round}" temp1=$(( ( ${h} + ${s1} + ${ch} + ${KLround} + ${w} ) % 4294967296 )) fn_right_rotate_32 ${a} 2 p1=${FN_RIGHT_ROTATE_32_RESULT} fn_right_rotate_32 ${a} 13 p2=${FN_RIGHT_ROTATE_32_RESULT} fn_right_rotate_32 ${a} 22 p3=${FN_RIGHT_ROTATE_32_RESULT} s0=$(( ${p1} ^ ${p2} ^ ${p3} )) maj=$(( ( ( ${a} & ${b} ) ^ ( ${a} & ${c} ) ^ ( ${b} & ${c} ) ) % 4294967296 )) temp2=$(( ( ${s0} + ${maj} ) % 4294967296 )) h=${g} g=${f} f=${e} e=$(( ( ${d} + ${temp1} ) % 4294967296 )) d=${c} c=${b} b=${a} a=$(( ( ${temp1} + ${temp2} ) % 4294967296 )) round=$(( ${round} + 1 )) done SHA2_WORDS0=$(( ( ${SHA2_WORDS0} + ${a} ) % 4294967296 )) SHA2_WORDS1=$(( ( ${SHA2_WORDS1} + ${b} ) % 4294967296 )) SHA2_WORDS2=$(( ( ${SHA2_WORDS2} + ${c} ) % 4294967296 )) SHA2_WORDS3=$(( ( ${SHA2_WORDS3} + ${d} ) % 4294967296 )) SHA2_WORDS4=$(( ( ${SHA2_WORDS4} + ${e} ) % 4294967296 )) SHA2_WORDS5=$(( ( ${SHA2_WORDS5} + ${f} ) % 4294967296 )) SHA2_WORDS6=$(( ( ${SHA2_WORDS6} + ${g} ) % 4294967296 )) SHA2_WORDS7=$(( ( ${SHA2_WORDS7} + ${h} ) % 4294967296 )) FN_SHA256_RESULT="" i=0 while [ ${i} -lt 8 ] ; do eval "sha256_word=\$SHA2_WORDS${i}" FN_SHA256_RESULT=$( printf "%s%08X" "${FN_SHA256_RESULT}" "${sha256_word}" ) i=$(( ${i} + 1 )); done } fn_bip39_checksum () { sha256_digest_hex="" bip39_checksum=0 counter=0 hex_substring=${1} hex_suffix="" if [ ! -z "${BASH_VERSION+foobar}" -o ! -z "${ZSH_VERSION+foobar}" ] ; then if command -v sha256sum >/dev/null ; then sha256_digest_hex=$( while [ ${hex_substring} ] ; do printf "\x${hex_substring%${hex_substring#??}}" ; hex_substring=${hex_substring#??} ; done | sha256sum -b ) elif command -v shasum >/dev/null ; then sha256_digest_hex=$( while [ ${hex_substring} ] ; do printf "\x${hex_substring%${hex_substring#??}}" ; hex_substring=${hex_substring#??} ; done | shasum -a 256 -b ) elif command -v openssl >/dev/null ; then sha256_digest_hex=$( while [ ${hex_substring} ] ; do printf "\x${hex_substring%${hex_substring#??}}" ; hex_substring=${hex_substring#??} ; done | openssl dgst -digest -sha256 -r ) else fn_sha256 ${1} sha256_digest_hex=${FN_SHA256_RESULT} fi else fn_sha256 ${1} sha256_digest_hex=${FN_SHA256_RESULT} fi counter=$(( ( ${BIP39_CHECKSUM_BITS_COUNT} + 3 ) / ${BITS_IN_NIBBLE} )) hex_suffix=${sha256_digest_hex} while [ ${counter} -gt 0 ] ; do hex_suffix=${hex_suffix#?} counter=$(( ${counter} - 1 )) done bip39_checksum=$( printf "%d" "0x${sha256_digest_hex%%${hex_suffix}}" ) if [ $(( ${BIP39_CHECKSUM_BITS_COUNT} % ${BITS_IN_NIBBLE} )) -ne 0 ] ; then fn_power $(( ( ${BITS_IN_NIBBLE} - ( ${BIP39_CHECKSUM_BITS_COUNT} % ${BITS_IN_NIBBLE} ) ) )) bip39_checksum=$(( ${bip39_checksum} / ${FN_POWER_RESULT} )) fi FN_BIP39_CHECKSUM_RESULT="${bip39_checksum}" } fn_bitwiseXOR () { substring_a=${1} substring_b=${2} while [ ${#substring_a} -lt ${#substring_b} ] ; do substring_a="0${substring_a}" done while [ ${#substring_b} -lt ${#substring_a} ] ; do substring_b="0${substring_b}" done while [ ${#substring_a} -gt 0 ] ; do printf "%01X" $(( 0x${substring_a%%${substring_a#?}} ^ 0x${substring_b%%${substring_b#?}} )) substring_a="${substring_a#?}" substring_b="${substring_b#?}" done } fn_pick_at_random () { i=0 CANDIDATE_KEY="" read_random="" if [ ! -z ${SRANDOM+foobar} ] ; then while [ ${i} -lt ${1} ] ; do CANDIDATE_KEY=$( printf "%s%08X" "${CANDIDATE_KEY}" "$SRANDOM" ) i=$(( ${i} + ( ${BITS_IN_SRANDOM}/${BITS_IN_NIBBLE} ) )) done elif [ ! -z ${RANDOM+foobar} ] ; then # if $SRANDOM is not supported like in older version (e.g. 3.2) of Bash and zsh then use $RANDOM while [ ${i} -lt ${1} ] ; do CANDIDATE_KEY=$( printf "%s%04X" "${CANDIDATE_KEY}" "$RANDOM" ) i=$(( ${i} + ( ${BITS_IN_RANDOM}/${BITS_IN_NIBBLE} ) )) done elif [ -e '/dev/random' ] ; then IFS= while [ "${1}" -gt "${#CANDIDATE_KEY}" ] ; do if read read_random < '/dev/random' ; then CANDIDATE_KEY=$( while [ ${#read_random} -gt 0 ] ; do printf "%02X" "'${read_random%%${read_random#?}}" ; read_random="${read_random#?}" ; done ; ) CANDIDATE_KEY="${CANDIDATE_KEY}0A" else CANDIDATE_KEY="${CANDIDATE_KEY}00" fi done unset ${IFS} fi CANDIDATE_KEY=$( printf "%.*s" "${1}" "${CANDIDATE_KEY}" ) CANDIDATE_KEY=${CANDIDATE_KEY%00000000000000000000000000000000*} # sanity check that entropy isn't none and a key is not trivial if [ ${#CANDIDATE_KEY} -lt ${1} ] ; then printf "Input a candidate key as hexadecimal numeral (must be max %d characters long): " "${1}" read CANDIDATE_KEY fi if [ -z ${#CANDIDATE_KEY} ] ; then printf "Error: candidate key is empty.\n" fn_exit 7 fi } fn_parse_arguments () { argument="" eval "set -- $@" # in order to process quoted arguments (user input) as well if [ $# -eq 30 -o $# -eq 36 -o $# -eq 42 -o $# -eq 48 ] ; then i=1 while [ ${i} -le $(( $# / 2 )) ] ; do eval "argument=\${${i}}" INPUT_CODEWORDS_ARRAY1="${INPUT_CODEWORDS_ARRAY1}${argument} " i=$(( ${i} + 1 )) done i=$(($# / 2 + 1)) while [ ${i} -le $# ] ; do eval "argument=\${${i}}" INPUT_CODEWORDS_ARRAY2="${INPUT_CODEWORDS_ARRAY2}${argument} " i=$(( ${i} + 1 )) done elif [ $# -eq 12 -o $# -eq 15 -o $# -eq 18 -o $# -eq 21 -o $# -eq 24 ] ; then INPUT_CODEWORDS_ARRAY1="${@}" elif [ $# -eq 13 -o $# -eq 16 -o $# -eq 19 -o $# -eq 22 ] ; then eval "argument=\${${#}}" if [ "${argument}" = "XOR" ] ; then i=1 while [ ${i} -lt $# ] ; do eval "argument=\${${i}}" INPUT_CODEWORDS_ARRAY1="${INPUT_CODEWORDS_ARRAY1}${argument} " i=$(( ${i} + 1 )) done fi elif [ $# -eq 25 -o $# -eq 31 -o $# -eq 37 -o $# -eq 43 -o $# -eq 49 ] ; then median=$(( $#/2 + 1 )) eval "argument=\${${median}}" if [ "${argument}" = "XOR" ] ; then i=1 while [ ${i} -le $(( $# / 2 )) ] ; do eval "argument=\${${i}}" INPUT_CODEWORDS_ARRAY1="${INPUT_CODEWORDS_ARRAY1}${argument} " i=$(( ${i} + 1 )) done i=$(($# / 2 + 2)) while [ ${i} -le $# ] ; do eval "argument=\${${i}}" INPUT_CODEWORDS_ARRAY2="${INPUT_CODEWORDS_ARRAY2}${argument} " i=$(( ${i} + 1 )) done elif [ "${25}" = "XOR" ] ; then i=1 while [ "${i}" -lt 25 ] ; do eval "argument=\${${i}}" INPUT_CODEWORDS_ARRAY1="${INPUT_CODEWORDS_ARRAY1}${argument} " i=$(( ${i} + 1 )) done else echo "ERROR: the input words are not accepted because XOR keyword/delimiter is missing or misplaced." fn_exit 2 fi elif [ "${1}" = "-h" -o "${1}" = "--help" ] ; then helptext_show fn_exit 2 elif [ "${1}" = "--auto-input" ] ; then fn_pick_at_random 32 ENTROPY_HEX=${CANDIDATE_KEY} BIP39_CHECKSUM_BITS_COUNT=$(( ${#ENTROPY_HEX} * ${BITS_IN_NIBBLE} / 32 )) fn_bip39_checksum ${ENTROPY_HEX} ENTROPY_CHECKSUM_BIP39=${FN_BIP39_CHECKSUM_RESULT} else echo "ERROR: the input words are not accepted. Either there are too many or too few of them or the \"XOR\" delimiting keyword is missing or misplaced. There were $# words read." helptext_show fn_exit 1 fi } fn_separate_entropy_and_checksum_BIP39_hex () { first_bits_value=0 last_bits_value=0 ENTROPY_HEX="" bits_to_shift=0 NEW_NIBBLE="" i=$(( ${#1} - ${2} / ${BITS_IN_NIBBLE} )) hex_prefix=${1} while [ ${i} -lt ${#1} ] ; do hex_prefix=${hex_prefix%?} i=$(( ${i} + 1 )) done ENTROPY_CHECKSUM_BIP39=$(( 0x${1#${hex_prefix}} )) bits_to_shift=$(( ${2} % ${BITS_IN_NIBBLE} )) if [ "${bits_to_shift}" -gt 0 ] ; then fn_power ${2} ENTROPY_CHECKSUM_BIP39=$(( 0x${1#${hex_prefix%?}} % ${FN_POWER_RESULT} )) while [ ${#hex_prefix} -gt 1 ] ; do fn_power ${bits_to_shift} last_bits_value=$(( 0x${hex_prefix#${hex_prefix%?}} / ${FN_POWER_RESULT} )) hex_prefix=${hex_prefix%?} first_bits_value=$(( ( 0x${hex_prefix#${hex_prefix%?}} % ${FN_POWER_RESULT} ) )) fn_power $(( ${BITS_IN_NIBBLE} - ${bits_to_shift} )) first_bits_value=$(( ${first_bits_value} * ${FN_POWER_RESULT} )) NEW_NIBBLE=$( printf "%01X" $(( ${last_bits_value} + ${first_bits_value} )) ) ENTROPY_HEX=$( printf "%c%s" "${NEW_NIBBLE}" "${ENTROPY_HEX}" ) done else ENTROPY_HEX=${hex_prefix} fi } # BEGINNING if [ $# -eq 0 ] ; then printf "\nEncrypt or decrypt 12, 15, 18, 21 or 24 BIP39 codewords array (so-called \"seed phrase\") using exclusive OR (XOR).\n" printf "The program may be terminated at any time by ctrl+c keys combination.\n" printf "Examples:\n" printf "BIP39 codewords: time until select then return void float true false case catch depart\n" printf "BIP39 codewords: time until select then return void float true false case catch depart XOR age age age age age age age age age age age used\n\n" printf "BIP39 codewords: " read read_input fn_parse_arguments ${read_input} else fn_parse_arguments $@ fi if [ -n "${INPUT_CODEWORDS_ARRAY1}" ] ; then fn_eng_words_to_hex ${INPUT_CODEWORDS_ARRAY1} INPUT_CODEWORDS_ARRAY1_AS_HEX=${FN_ENG_WORDS_TO_HEX_RESULT} BIP39_CHECKSUM_BITS_COUNT=$(( ${#INPUT_CODEWORDS_ARRAY1_AS_HEX} * ${BITS_IN_NIBBLE} / 33 )) fn_separate_entropy_and_checksum_BIP39_hex ${INPUT_CODEWORDS_ARRAY1_AS_HEX} ${BIP39_CHECKSUM_BITS_COUNT} fi # Explanation of the corner case: it is impossible to generate a matching key if an input key value is 0 sum=0 digit="" entropy_hex_substring=${ENTROPY_HEX} while [ ${#entropy_hex_substring} -gt 0 ] ; do digit=${entropy_hex_substring%%${entropy_hex_substring#?}} sum=$(( ${sum} + 0x${digit} )) entropy_hex_substring=${entropy_hex_substring#?} done if [ "${sum}" -eq 0 -a ${ENTROPY_CHECKSUM_BIP39} -ne 0 ] ; then echo "There isn't any entropy value that would satisfy the condition of result of XOR calculation of BIP39 checksums being equal BIP39 checksum of input." fn_exit 4 fi if [ -z "${INPUT_CODEWORDS_ARRAY2}" ] ; then fn_pick_at_random ${#ENTROPY_HEX} ENCRYPTION_KEY1=${CANDIDATE_KEY} fn_bip39_checksum ${ENCRYPTION_KEY1} ENCRYPTION_KEY1_CHECKSUM_BIP39=${FN_BIP39_CHECKSUM_RESULT} ENCRYPTION_KEY2=$( fn_bitwiseXOR ${ENCRYPTION_KEY1} ${ENTROPY_HEX} ) fn_bip39_checksum ${ENCRYPTION_KEY2} ENCRYPTION_KEY2_CHECKSUM_BIP39=${FN_BIP39_CHECKSUM_RESULT} while [ $(( ${ENTROPY_CHECKSUM_BIP39} ^ ${ENCRYPTION_KEY1_CHECKSUM_BIP39} )) -ne ${ENCRYPTION_KEY2_CHECKSUM_BIP39} ] ; do fn_pick_at_random ${#ENTROPY_HEX} ENCRYPTION_KEY1=${CANDIDATE_KEY} fn_bip39_checksum ${ENCRYPTION_KEY1} ENCRYPTION_KEY1_CHECKSUM_BIP39=${FN_BIP39_CHECKSUM_RESULT} printf "Candidate key: 0x%s\r" "${ENCRYPTION_KEY1}" ENCRYPTION_KEY2=$( fn_bitwiseXOR ${ENCRYPTION_KEY1} ${ENTROPY_HEX} ) fn_bip39_checksum ${ENCRYPTION_KEY2} ENCRYPTION_KEY2_CHECKSUM_BIP39=${FN_BIP39_CHECKSUM_RESULT} done fn_hex_to_bip39_eng_words "${ENCRYPTION_KEY1}" ${ENCRYPTION_KEY1_CHECKSUM_BIP39} ${BIP39_CHECKSUM_BITS_COUNT} printf "%s\n" "${BIP39_WORDS% }" fn_hex_to_bip39_eng_words "${ENCRYPTION_KEY2}" ${ENCRYPTION_KEY2_CHECKSUM_BIP39} ${BIP39_CHECKSUM_BITS_COUNT} echo "XOR" printf "%s\n" "${BIP39_WORDS% }" else fn_eng_words_to_hex ${INPUT_CODEWORDS_ARRAY2} INPUT_CODEWORDS_ARRAY2_AS_HEX=${FN_ENG_WORDS_TO_HEX_RESULT} fn_hex_to_bip39_eng_words $( fn_bitwiseXOR "${INPUT_CODEWORDS_ARRAY1_AS_HEX}" "${INPUT_CODEWORDS_ARRAY2_AS_HEX}" ) 0 0 echo "${INPUT_CODEWORDS_ARRAY2% }" echo "XOR" printf "%s\n" "${BIP39_WORDS% }" fi fn_exit 0