From c4f9c1a335c054c4d74d0701953b48983fdcaa4a Mon Sep 17 00:00:00 2001 From: Ben Abraham Date: Tue, 6 Apr 2021 02:28:00 -0400 Subject: [PATCH 01/10] Added IPFS gateway option in the settings menu. Added 7 preset IPFS gateways. 2x Cloudflare, 2x ipfs.io, dweb, GreyH.at, and Infura Added 'ipfsGateway' setting to BRSharedPrefs. Added helper function in Utils class for creating an ipfs url from the hash. --- app/src/main/AndroidManifest.xml | 5 + .../settings/IPFSGatewayActivity.java | 197 ++++++++++++++++++ .../activities/settings/SettingsActivity.java | 9 + .../presenter/entities/IPFSGateway.java | 49 +++++ .../fragments/FragmentAssetMenu.java | 4 +- .../presenter/fragments/FragmentIPFS.java | 3 +- .../tools/manager/BRSharedPrefs.java | 12 ++ .../ravenwallet/tools/util/BRConstants.java | 2 + .../com/ravenwallet/tools/util/Utils.java | 6 + .../layout/activity_ipfs_gateway_settings.xml | 50 +++++ app/src/main/res/layout/gateway_list_item.xml | 57 +++++ app/src/main/res/values/strings.xml | 2 + 12 files changed, 392 insertions(+), 4 deletions(-) create mode 100644 app/src/main/java/com/ravenwallet/presenter/activities/settings/IPFSGatewayActivity.java create mode 100644 app/src/main/java/com/ravenwallet/presenter/entities/IPFSGateway.java create mode 100644 app/src/main/res/layout/activity_ipfs_gateway_settings.xml create mode 100644 app/src/main/res/layout/gateway_list_item.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d39c2f164..1ef6d3f79 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -145,6 +145,11 @@ android:name="com.ravenwallet.presenter.activities.settings.DisplayCurrencyActivity" android:launchMode="singleTask" + android:screenOrientation="portrait"/> + parent, View view, + int position, long id) { + IPFSGateway newGateway = adapter.getItem(position); + BRSharedPrefs.putPreferredIPFSGateway(IPFSGatewayActivity.this, newGateway.hostname); + adapter.notifyDataSetChanged(); + } + + }); + + listView.setAdapter(adapter); + adapter.notifyDataSetChanged(); + } + + @Override + protected void onResume() { + super.onResume(); + appVisible = true; + app = this; + } + + @Override + protected void onPause() { + super.onPause(); + appVisible = false; + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + overridePendingTransition(R.anim.enter_from_left, R.anim.exit_to_right); + } + + public class GatewayListAdapter extends ArrayAdapter { + public final String TAG = GatewayListAdapter.class.getName(); + + private final Context mContext; + private final int layoutResourceId; + private TextView textViewItem; + private final Point displayParameters = new Point(); + + public GatewayListAdapter(Context mContext) { + + super(mContext, R.layout.gateway_list_item); + + this.layoutResourceId = R.layout.gateway_list_item; + this.mContext = mContext; + ((Activity) mContext).getWindowManager().getDefaultDisplay().getSize(displayParameters); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + + final String oldHost = BRSharedPrefs.getPreferredIPFSGateway(mContext); + if (convertView == null) { + LayoutInflater inflater = ((Activity) mContext).getLayoutInflater(); + convertView = inflater.inflate(layoutResourceId, parent, false); + } + textViewItem = convertView.findViewById(R.id.gateway_item_name); + FontManager.overrideFonts(textViewItem); + IPFSGateway gateway = getItem(position); + textViewItem.setText(String.format("%s (%s)", gateway.name, gateway.hostname)); + ImageView checkMark = convertView.findViewById(R.id.gateway_checkmark); + + if (gateway.hostname.equalsIgnoreCase(oldHost)) { + checkMark.setVisibility(View.VISIBLE); + } else { + checkMark.setVisibility(View.GONE); + } + normalizeTextView(); + return convertView; + } + + @Override + public int getCount() { + return super.getCount(); + } + + @Override + public int getItemViewType(int position) { + return IGNORE_ITEM_VIEW_TYPE; + } + + private boolean isTextSizeAcceptable(TextView textView) { + textView.measure(0, 0); + int textWidth = textView.getMeasuredWidth(); + int checkMarkWidth = 76 + 20; + return (textWidth <= (displayParameters.x - checkMarkWidth)); + } + + private boolean normalizeTextView() { + int count = 0; + while (!isTextSizeAcceptable(textViewItem)) { + count++; + float textSize = textViewItem.getTextSize(); + textViewItem.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize - 2); + this.notifyDataSetChanged(); + } + return (count > 0); + } + + } + + +} diff --git a/app/src/main/java/com/ravenwallet/presenter/activities/settings/SettingsActivity.java b/app/src/main/java/com/ravenwallet/presenter/activities/settings/SettingsActivity.java index bf3157679..ccd472bb8 100644 --- a/app/src/main/java/com/ravenwallet/presenter/activities/settings/SettingsActivity.java +++ b/app/src/main/java/com/ravenwallet/presenter/activities/settings/SettingsActivity.java @@ -205,6 +205,15 @@ public void onClick(View v) { } }, false)); + items.add(new BRSettingsItem(getString(R.string.Settings_ipfsgateway), BRSharedPrefs.getPreferredIPFSGateway(this), new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(SettingsActivity.this, IPFSGatewayActivity.class); + startActivity(intent); + overridePendingTransition(R.anim.enter_from_right, R.anim.exit_to_left); + } + }, false)); + items.add(new BRSettingsItem(getString(R.string.Settings_currencySettings), "", null, true)); items.add(new BRSettingsItem(getString(R.string.Settings_redeem_private_key), "", new View.OnClickListener() { diff --git a/app/src/main/java/com/ravenwallet/presenter/entities/IPFSGateway.java b/app/src/main/java/com/ravenwallet/presenter/entities/IPFSGateway.java new file mode 100644 index 000000000..e0a64542b --- /dev/null +++ b/app/src/main/java/com/ravenwallet/presenter/entities/IPFSGateway.java @@ -0,0 +1,49 @@ +package com.ravenwallet.presenter.entities; + +import java.io.Serializable; + + +/** + * RavenWallet + *

+ * Created by Mihail Gutan on 8/18/15. + * Copyright (c) 2016 breadwallet LLC + *

+ * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + *

+ * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + *

+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +public class IPFSGateway implements Serializable { + public static final String TAG = IPFSGateway.class.getName(); + + public String hostname;//the gateway's hostname, ie: ipfs.io or cloudflare-ipfs.com + public String name;//the gateway's display name + + public IPFSGateway(String name, String hostname) { + this.hostname = hostname; + this.name = name; + } + + public IPFSGateway() { + } + + @Override + public String toString() { + return "host: " + hostname + " name: " + name; + } +} diff --git a/app/src/main/java/com/ravenwallet/presenter/fragments/FragmentAssetMenu.java b/app/src/main/java/com/ravenwallet/presenter/fragments/FragmentAssetMenu.java index 1f8d01686..6976707ac 100644 --- a/app/src/main/java/com/ravenwallet/presenter/fragments/FragmentAssetMenu.java +++ b/app/src/main/java/com/ravenwallet/presenter/fragments/FragmentAssetMenu.java @@ -27,6 +27,7 @@ import com.ravenwallet.tools.animation.BRAnimator; import com.ravenwallet.tools.animation.BRDialog; import com.ravenwallet.tools.manager.BRSharedPrefs; +import com.ravenwallet.tools.util.Utils; import com.ravenwallet.wallet.WalletsMaster; import com.ravenwallet.wallet.abstracts.BaseWalletManager; import com.ravenwallet.wallet.RvnWalletManager; @@ -50,7 +51,6 @@ public class FragmentAssetMenu extends Fragment implements BurnFragmentListener, private BRButton getDataButton; private Asset mAsset; private final static String EXTRAS_ASSET_KEY = "extras.asset.key"; - private String BASE_IPFS_URL = "http://ipfs.io/ipfs/"; public static FragmentAssetMenu newInstance(Asset asset) { FragmentAssetMenu fragment = new FragmentAssetMenu(); @@ -203,7 +203,7 @@ public void onClick(View view) { String IPFSHash = mAsset.getIpfsHash(); if (!TextUtils.isEmpty(IPFSHash)) { closeMe(); - String URL = BASE_IPFS_URL.concat(IPFSHash); + String URL = Utils.getIpfsUrlFromHash(getContext(), IPFSHash); startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(URL))); //BRAnimator.showIPFSFragment(getActivity(), IPFSHash); } diff --git a/app/src/main/java/com/ravenwallet/presenter/fragments/FragmentIPFS.java b/app/src/main/java/com/ravenwallet/presenter/fragments/FragmentIPFS.java index 01cec148c..fd254c2f3 100644 --- a/app/src/main/java/com/ravenwallet/presenter/fragments/FragmentIPFS.java +++ b/app/src/main/java/com/ravenwallet/presenter/fragments/FragmentIPFS.java @@ -53,7 +53,6 @@ public class FragmentIPFS extends Fragment { public LinearLayout backgroundLayout; public CardView signalLayout; private WebView webView; - private String BASE_IPFS_URL = "http://ipfs.io/ipfs/"; public static String IPFS_HASH_KEY_EXTRAS = "IPFS.hash.key.extras"; @@ -84,7 +83,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa getActivity().getFragmentManager().popBackStack(); return null; } else { - String URL = BASE_IPFS_URL.concat(IPFSHash); + String URL = Utils.getIpfsUrlFromHash(getContext(), IPFSHash); WebSettings webSettings = webView.getSettings(); diff --git a/app/src/main/java/com/ravenwallet/tools/manager/BRSharedPrefs.java b/app/src/main/java/com/ravenwallet/tools/manager/BRSharedPrefs.java index 3873182ed..be8df2dac 100644 --- a/app/src/main/java/com/ravenwallet/tools/manager/BRSharedPrefs.java +++ b/app/src/main/java/com/ravenwallet/tools/manager/BRSharedPrefs.java @@ -95,6 +95,18 @@ public static void putPreferredFiatIso(Context context, String iso) { } + public static String getPreferredIPFSGateway(Context context) { + SharedPreferences settingsToGet = context.getSharedPreferences(PREFS_NAME, 0); + return settingsToGet.getString("ipfsGateway", null); + } + + public static void putPreferredIPFSGateway(Context context, String gateway) { + SharedPreferences settings = context.getSharedPreferences(PREFS_NAME, 0); + SharedPreferences.Editor editor = settings.edit(); + editor.putString("ipfsGateway", gateway); + editor.apply(); + } + public static boolean getExpertMode(Context context) { SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); return prefs.getBoolean("expertMode", false); diff --git a/app/src/main/java/com/ravenwallet/tools/util/BRConstants.java b/app/src/main/java/com/ravenwallet/tools/util/BRConstants.java index 03a419674..1c5d7d720 100644 --- a/app/src/main/java/com/ravenwallet/tools/util/BRConstants.java +++ b/app/src/main/java/com/ravenwallet/tools/util/BRConstants.java @@ -136,6 +136,8 @@ public class BRConstants { public static final String IP_REGEX = "^\\d{1,3}(\\.(\\d{1,3}(\\.(\\d{1,3}(\\.(\\d{1,3})?)?)?)?)?)?"; public static final String PRIVACY_URL = "https://ravencoin.org/mobilewallet/support/privacy.html"; + public static final String IPFS_URL_FORMAT = "https://%s/ipfs/%s"; + public static final List STR_ISSUE_ASSET_BURN_ADDESSES = Lists.newArrayList("RXissueAssetXXXXXXXXXXXXXXXXXhhZGt", "n1issueAssetXXXXXXXXXXXXXXXXWdnemQ"); diff --git a/app/src/main/java/com/ravenwallet/tools/util/Utils.java b/app/src/main/java/com/ravenwallet/tools/util/Utils.java index a438fd266..015b5c133 100644 --- a/app/src/main/java/com/ravenwallet/tools/util/Utils.java +++ b/app/src/main/java/com/ravenwallet/tools/util/Utils.java @@ -18,6 +18,7 @@ import android.widget.Toast; import com.ravenwallet.presenter.activities.intro.IntroActivity; +import com.ravenwallet.tools.manager.BRSharedPrefs; import java.text.SimpleDateFormat; import java.util.Calendar; @@ -224,4 +225,9 @@ public static String retrieveAddressChunk(String scanResult) { } return null; } + + public static String getIpfsUrlFromHash(Context app, String hash) { + //TODO: Hash Validation? + return String.format(BRConstants.IPFS_URL_FORMAT, BRSharedPrefs.getPreferredIPFSGateway(app), hash); + } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_ipfs_gateway_settings.xml b/app/src/main/res/layout/activity_ipfs_gateway_settings.xml new file mode 100644 index 000000000..8c27cb9b8 --- /dev/null +++ b/app/src/main/res/layout/activity_ipfs_gateway_settings.xml @@ -0,0 +1,50 @@ + + + + + + + + + + diff --git a/app/src/main/res/layout/gateway_list_item.xml b/app/src/main/res/layout/gateway_list_item.xml new file mode 100644 index 000000000..37afd8820 --- /dev/null +++ b/app/src/main/res/layout/gateway_list_item.xml @@ -0,0 +1,57 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a85db1cfb..5fac658da 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -397,6 +397,8 @@ Display Currency Currency Settings + IPFS Gateway + Attachments on assets, and other resources, are uploaded to the IPFS distributed network.\n\nThis option selects which centralized web-host the application should use, when displaying IPFS content. Sync Blockchain Redeem Wallet / Private Key Other From de2706bbf7a84e21ac022b5c11b0097f1702046b Mon Sep 17 00:00:00 2001 From: Ben Abraham Date: Tue, 6 Apr 2021 04:38:44 -0400 Subject: [PATCH 02/10] Fixed no ipfs host selected by default. Added BRConstants.IPFS_DEFAULT_HOST with default value "ipfs.io" Moved ipfs.io gateways to top of settings list since they are the default option. --- .../presenter/activities/settings/IPFSGatewayActivity.java | 6 +++--- .../java/com/ravenwallet/tools/manager/BRSharedPrefs.java | 2 +- .../main/java/com/ravenwallet/tools/util/BRConstants.java | 2 ++ 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/ravenwallet/presenter/activities/settings/IPFSGatewayActivity.java b/app/src/main/java/com/ravenwallet/presenter/activities/settings/IPFSGatewayActivity.java index dec6fa713..5a4af1440 100644 --- a/app/src/main/java/com/ravenwallet/presenter/activities/settings/IPFSGatewayActivity.java +++ b/app/src/main/java/com/ravenwallet/presenter/activities/settings/IPFSGatewayActivity.java @@ -77,12 +77,12 @@ public void onClick(BRDialogView brDialogView) { listView = findViewById(R.id.gateway_list_view); adapter = new GatewayListAdapter(this); - adapter.add(new IPFSGateway("Cloudflare A", "cf-ipfs.com")); - adapter.add(new IPFSGateway("Cloudflare B", "cloudflare-ipfs.com")); - adapter.add(new IPFSGateway("ipfs.io A", "ipfs.io")); adapter.add(new IPFSGateway("ipfs.io B", "gateway.ipfs.io")); + adapter.add(new IPFSGateway("Cloudflare A", "cf-ipfs.com")); + adapter.add(new IPFSGateway("Cloudflare B", "cloudflare-ipfs.com")); + adapter.add(new IPFSGateway("DWeb", "dweb.link")); adapter.add(new IPFSGateway("GreyH.at", "ipfs.greyh.at")); adapter.add(new IPFSGateway("infura.io", "ipfs.infura.io")); diff --git a/app/src/main/java/com/ravenwallet/tools/manager/BRSharedPrefs.java b/app/src/main/java/com/ravenwallet/tools/manager/BRSharedPrefs.java index be8df2dac..4305273d6 100644 --- a/app/src/main/java/com/ravenwallet/tools/manager/BRSharedPrefs.java +++ b/app/src/main/java/com/ravenwallet/tools/manager/BRSharedPrefs.java @@ -97,7 +97,7 @@ public static void putPreferredFiatIso(Context context, String iso) { public static String getPreferredIPFSGateway(Context context) { SharedPreferences settingsToGet = context.getSharedPreferences(PREFS_NAME, 0); - return settingsToGet.getString("ipfsGateway", null); + return settingsToGet.getString("ipfsGateway", BRConstants.IPFS_DEFAULT_HOST); } public static void putPreferredIPFSGateway(Context context, String gateway) { diff --git a/app/src/main/java/com/ravenwallet/tools/util/BRConstants.java b/app/src/main/java/com/ravenwallet/tools/util/BRConstants.java index 1c5d7d720..bbf350feb 100644 --- a/app/src/main/java/com/ravenwallet/tools/util/BRConstants.java +++ b/app/src/main/java/com/ravenwallet/tools/util/BRConstants.java @@ -137,6 +137,8 @@ public class BRConstants { public static final String PRIVACY_URL = "https://ravencoin.org/mobilewallet/support/privacy.html"; public static final String IPFS_URL_FORMAT = "https://%s/ipfs/%s"; + //NOTE: Additional hosts are defined in IPFSGatewayActivity.java + public static final String IPFS_DEFAULT_HOST = "ipfs.io"; public static final List STR_ISSUE_ASSET_BURN_ADDESSES = Lists.newArrayList("RXissueAssetXXXXXXXXXXXXXXXXXhhZGt", From 33878c46fdf5426dd2ce6e8d6df8cb8db6f166c9 Mon Sep 17 00:00:00 2001 From: Ben Abraham Date: Tue, 6 Apr 2021 17:58:03 -0400 Subject: [PATCH 03/10] Added rest of the mnemonic files as defined by the BIP39 spec (https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md) --- app/src/main/assets/words/cs-BIP39Words.txt | 2048 +++++++++++++++++ app/src/main/assets/words/it-BIP39Words.txt | 2048 +++++++++++++++++ app/src/main/assets/words/ko-BIP39Words.txt | 2048 +++++++++++++++++ app/src/main/assets/words/pt-BIP39Words.txt | 2048 +++++++++++++++++ ...zh-BIP39Words.txt => zh-CN-BIP39Words.txt} | 0 .../main/assets/words/zh-TW-BIP39Words.txt | 2048 +++++++++++++++++ app/src/test/java/PaperKeyTests.java | 7 +- app/src/test/resources/cs-BIP39Words.txt | 2048 +++++++++++++++++ app/src/test/resources/it-BIP39Words.txt | 2048 +++++++++++++++++ app/src/test/resources/ko-BIP39Words.txt | 2048 +++++++++++++++++ app/src/test/resources/pt-BIP39Words.txt | 2048 +++++++++++++++++ ...zh-BIP39Words.txt => zh-CN-BIP39Words.txt} | 0 app/src/test/resources/zh-TW-BIP39Words.txt | 2048 +++++++++++++++++ 13 files changed, 20486 insertions(+), 1 deletion(-) create mode 100644 app/src/main/assets/words/cs-BIP39Words.txt create mode 100644 app/src/main/assets/words/it-BIP39Words.txt create mode 100644 app/src/main/assets/words/ko-BIP39Words.txt create mode 100644 app/src/main/assets/words/pt-BIP39Words.txt rename app/src/main/assets/words/{zh-BIP39Words.txt => zh-CN-BIP39Words.txt} (100%) create mode 100644 app/src/main/assets/words/zh-TW-BIP39Words.txt create mode 100644 app/src/test/resources/cs-BIP39Words.txt create mode 100644 app/src/test/resources/it-BIP39Words.txt create mode 100644 app/src/test/resources/ko-BIP39Words.txt create mode 100644 app/src/test/resources/pt-BIP39Words.txt rename app/src/test/resources/{zh-BIP39Words.txt => zh-CN-BIP39Words.txt} (100%) create mode 100644 app/src/test/resources/zh-TW-BIP39Words.txt diff --git a/app/src/main/assets/words/cs-BIP39Words.txt b/app/src/main/assets/words/cs-BIP39Words.txt new file mode 100644 index 000000000..a41bdd28f --- /dev/null +++ b/app/src/main/assets/words/cs-BIP39Words.txt @@ -0,0 +1,2048 @@ +abdikace +abeceda +adresa +agrese +akce +aktovka +alej +alkohol +amputace +ananas +andulka +anekdota +anketa +antika +anulovat +archa +arogance +asfalt +asistent +aspirace +astma +astronom +atlas +atletika +atol +autobus +azyl +babka +bachor +bacil +baculka +badatel +bageta +bagr +bahno +bakterie +balada +baletka +balkon +balonek +balvan +balza +bambus +bankomat +barbar +baret +barman +baroko +barva +baterka +batoh +bavlna +bazalka +bazilika +bazuka +bedna +beran +beseda +bestie +beton +bezinka +bezmoc +beztak +bicykl +bidlo +biftek +bikiny +bilance +biograf +biolog +bitva +bizon +blahobyt +blatouch +blecha +bledule +blesk +blikat +blizna +blokovat +bloudit +blud +bobek +bobr +bodlina +bodnout +bohatost +bojkot +bojovat +bokorys +bolest +borec +borovice +bota +boubel +bouchat +bouda +boule +bourat +boxer +bradavka +brambora +branka +bratr +brepta +briketa +brko +brloh +bronz +broskev +brunetka +brusinka +brzda +brzy +bublina +bubnovat +buchta +buditel +budka +budova +bufet +bujarost +bukvice +buldok +bulva +bunda +bunkr +burza +butik +buvol +buzola +bydlet +bylina +bytovka +bzukot +capart +carevna +cedr +cedule +cejch +cejn +cela +celer +celkem +celnice +cenina +cennost +cenovka +centrum +cenzor +cestopis +cetka +chalupa +chapadlo +charita +chata +chechtat +chemie +chichot +chirurg +chlad +chleba +chlubit +chmel +chmura +chobot +chochol +chodba +cholera +chomout +chopit +choroba +chov +chrapot +chrlit +chrt +chrup +chtivost +chudina +chutnat +chvat +chvilka +chvost +chyba +chystat +chytit +cibule +cigareta +cihelna +cihla +cinkot +cirkus +cisterna +citace +citrus +cizinec +cizost +clona +cokoliv +couvat +ctitel +ctnost +cudnost +cuketa +cukr +cupot +cvaknout +cval +cvik +cvrkot +cyklista +daleko +dareba +datel +datum +dcera +debata +dechovka +decibel +deficit +deflace +dekl +dekret +demokrat +deprese +derby +deska +detektiv +dikobraz +diktovat +dioda +diplom +disk +displej +divadlo +divoch +dlaha +dlouho +dluhopis +dnes +dobro +dobytek +docent +dochutit +dodnes +dohled +dohoda +dohra +dojem +dojnice +doklad +dokola +doktor +dokument +dolar +doleva +dolina +doma +dominant +domluvit +domov +donutit +dopad +dopis +doplnit +doposud +doprovod +dopustit +dorazit +dorost +dort +dosah +doslov +dostatek +dosud +dosyta +dotaz +dotek +dotknout +doufat +doutnat +dovozce +dozadu +doznat +dozorce +drahota +drak +dramatik +dravec +draze +drdol +drobnost +drogerie +drozd +drsnost +drtit +drzost +duben +duchovno +dudek +duha +duhovka +dusit +dusno +dutost +dvojice +dvorec +dynamit +ekolog +ekonomie +elektron +elipsa +email +emise +emoce +empatie +epizoda +epocha +epopej +epos +esej +esence +eskorta +eskymo +etiketa +euforie +evoluce +exekuce +exkurze +expedice +exploze +export +extrakt +facka +fajfka +fakulta +fanatik +fantazie +farmacie +favorit +fazole +federace +fejeton +fenka +fialka +figurant +filozof +filtr +finance +finta +fixace +fjord +flanel +flirt +flotila +fond +fosfor +fotbal +fotka +foton +frakce +freska +fronta +fukar +funkce +fyzika +galeje +garant +genetika +geolog +gilotina +glazura +glejt +golem +golfista +gotika +graf +gramofon +granule +grep +gril +grog +groteska +guma +hadice +hadr +hala +halenka +hanba +hanopis +harfa +harpuna +havran +hebkost +hejkal +hejno +hejtman +hektar +helma +hematom +herec +herna +heslo +hezky +historik +hladovka +hlasivky +hlava +hledat +hlen +hlodavec +hloh +hloupost +hltat +hlubina +hluchota +hmat +hmota +hmyz +hnis +hnojivo +hnout +hoblina +hoboj +hoch +hodiny +hodlat +hodnota +hodovat +hojnost +hokej +holinka +holka +holub +homole +honitba +honorace +horal +horda +horizont +horko +horlivec +hormon +hornina +horoskop +horstvo +hospoda +hostina +hotovost +houba +houf +houpat +houska +hovor +hradba +hranice +hravost +hrazda +hrbolek +hrdina +hrdlo +hrdost +hrnek +hrobka +hromada +hrot +hrouda +hrozen +hrstka +hrubost +hryzat +hubenost +hubnout +hudba +hukot +humr +husita +hustota +hvozd +hybnost +hydrant +hygiena +hymna +hysterik +idylka +ihned +ikona +iluze +imunita +infekce +inflace +inkaso +inovace +inspekce +internet +invalida +investor +inzerce +ironie +jablko +jachta +jahoda +jakmile +jakost +jalovec +jantar +jarmark +jaro +jasan +jasno +jatka +javor +jazyk +jedinec +jedle +jednatel +jehlan +jekot +jelen +jelito +jemnost +jenom +jepice +jeseter +jevit +jezdec +jezero +jinak +jindy +jinoch +jiskra +jistota +jitrnice +jizva +jmenovat +jogurt +jurta +kabaret +kabel +kabinet +kachna +kadet +kadidlo +kahan +kajak +kajuta +kakao +kaktus +kalamita +kalhoty +kalibr +kalnost +kamera +kamkoliv +kamna +kanibal +kanoe +kantor +kapalina +kapela +kapitola +kapka +kaple +kapota +kapr +kapusta +kapybara +karamel +karotka +karton +kasa +katalog +katedra +kauce +kauza +kavalec +kazajka +kazeta +kazivost +kdekoliv +kdesi +kedluben +kemp +keramika +kino +klacek +kladivo +klam +klapot +klasika +klaun +klec +klenba +klepat +klesnout +klid +klima +klisna +klobouk +klokan +klopa +kloub +klubovna +klusat +kluzkost +kmen +kmitat +kmotr +kniha +knot +koalice +koberec +kobka +kobliha +kobyla +kocour +kohout +kojenec +kokos +koktejl +kolaps +koleda +kolize +kolo +komando +kometa +komik +komnata +komora +kompas +komunita +konat +koncept +kondice +konec +konfese +kongres +konina +konkurs +kontakt +konzerva +kopanec +kopie +kopnout +koprovka +korbel +korektor +kormidlo +koroptev +korpus +koruna +koryto +korzet +kosatec +kostka +kotel +kotleta +kotoul +koukat +koupelna +kousek +kouzlo +kovboj +koza +kozoroh +krabice +krach +krajina +kralovat +krasopis +kravata +kredit +krejcar +kresba +kreveta +kriket +kritik +krize +krkavec +krmelec +krmivo +krocan +krok +kronika +kropit +kroupa +krovka +krtek +kruhadlo +krupice +krutost +krvinka +krychle +krypta +krystal +kryt +kudlanka +kufr +kujnost +kukla +kulajda +kulich +kulka +kulomet +kultura +kuna +kupodivu +kurt +kurzor +kutil +kvalita +kvasinka +kvestor +kynolog +kyselina +kytara +kytice +kytka +kytovec +kyvadlo +labrador +lachtan +ladnost +laik +lakomec +lamela +lampa +lanovka +lasice +laso +lastura +latinka +lavina +lebka +leckdy +leden +lednice +ledovka +ledvina +legenda +legie +legrace +lehce +lehkost +lehnout +lektvar +lenochod +lentilka +lepenka +lepidlo +letadlo +letec +letmo +letokruh +levhart +levitace +levobok +libra +lichotka +lidojed +lidskost +lihovina +lijavec +lilek +limetka +linie +linka +linoleum +listopad +litina +litovat +lobista +lodivod +logika +logoped +lokalita +loket +lomcovat +lopata +lopuch +lord +losos +lotr +loudal +louh +louka +louskat +lovec +lstivost +lucerna +lucifer +lump +lusk +lustrace +lvice +lyra +lyrika +lysina +madam +madlo +magistr +mahagon +majetek +majitel +majorita +makak +makovice +makrela +malba +malina +malovat +malvice +maminka +mandle +manko +marnost +masakr +maskot +masopust +matice +matrika +maturita +mazanec +mazivo +mazlit +mazurka +mdloba +mechanik +meditace +medovina +melasa +meloun +mentolka +metla +metoda +metr +mezera +migrace +mihnout +mihule +mikina +mikrofon +milenec +milimetr +milost +mimika +mincovna +minibar +minomet +minulost +miska +mistr +mixovat +mladost +mlha +mlhovina +mlok +mlsat +mluvit +mnich +mnohem +mobil +mocnost +modelka +modlitba +mohyla +mokro +molekula +momentka +monarcha +monokl +monstrum +montovat +monzun +mosaz +moskyt +most +motivace +motorka +motyka +moucha +moudrost +mozaika +mozek +mozol +mramor +mravenec +mrkev +mrtvola +mrzet +mrzutost +mstitel +mudrc +muflon +mulat +mumie +munice +muset +mutace +muzeum +muzikant +myslivec +mzda +nabourat +nachytat +nadace +nadbytek +nadhoz +nadobro +nadpis +nahlas +nahnat +nahodile +nahradit +naivita +najednou +najisto +najmout +naklonit +nakonec +nakrmit +nalevo +namazat +namluvit +nanometr +naoko +naopak +naostro +napadat +napevno +naplnit +napnout +naposled +naprosto +narodit +naruby +narychlo +nasadit +nasekat +naslepo +nastat +natolik +navenek +navrch +navzdory +nazvat +nebe +nechat +necky +nedaleko +nedbat +neduh +negace +nehet +nehoda +nejen +nejprve +neklid +nelibost +nemilost +nemoc +neochota +neonka +nepokoj +nerost +nerv +nesmysl +nesoulad +netvor +neuron +nevina +nezvykle +nicota +nijak +nikam +nikdy +nikl +nikterak +nitro +nocleh +nohavice +nominace +nora +norek +nositel +nosnost +nouze +noviny +novota +nozdra +nuda +nudle +nuget +nutit +nutnost +nutrie +nymfa +obal +obarvit +obava +obdiv +obec +obehnat +obejmout +obezita +obhajoba +obilnice +objasnit +objekt +obklopit +oblast +oblek +obliba +obloha +obluda +obnos +obohatit +obojek +obout +obrazec +obrna +obruba +obrys +obsah +obsluha +obstarat +obuv +obvaz +obvinit +obvod +obvykle +obyvatel +obzor +ocas +ocel +ocenit +ochladit +ochota +ochrana +ocitnout +odboj +odbyt +odchod +odcizit +odebrat +odeslat +odevzdat +odezva +odhadce +odhodit +odjet +odjinud +odkaz +odkoupit +odliv +odluka +odmlka +odolnost +odpad +odpis +odplout +odpor +odpustit +odpykat +odrazka +odsoudit +odstup +odsun +odtok +odtud +odvaha +odveta +odvolat +odvracet +odznak +ofina +ofsajd +ohlas +ohnisko +ohrada +ohrozit +ohryzek +okap +okenice +oklika +okno +okouzlit +okovy +okrasa +okres +okrsek +okruh +okupant +okurka +okusit +olejnina +olizovat +omak +omeleta +omezit +omladina +omlouvat +omluva +omyl +onehdy +opakovat +opasek +operace +opice +opilost +opisovat +opora +opozice +opravdu +oproti +orbital +orchestr +orgie +orlice +orloj +ortel +osada +oschnout +osika +osivo +oslava +oslepit +oslnit +oslovit +osnova +osoba +osolit +ospalec +osten +ostraha +ostuda +ostych +osvojit +oteplit +otisk +otop +otrhat +otrlost +otrok +otruby +otvor +ovanout +ovar +oves +ovlivnit +ovoce +oxid +ozdoba +pachatel +pacient +padouch +pahorek +pakt +palanda +palec +palivo +paluba +pamflet +pamlsek +panenka +panika +panna +panovat +panstvo +pantofle +paprika +parketa +parodie +parta +paruka +paryba +paseka +pasivita +pastelka +patent +patrona +pavouk +pazneht +pazourek +pecka +pedagog +pejsek +peklo +peloton +penalta +pendrek +penze +periskop +pero +pestrost +petarda +petice +petrolej +pevnina +pexeso +pianista +piha +pijavice +pikle +piknik +pilina +pilnost +pilulka +pinzeta +pipeta +pisatel +pistole +pitevna +pivnice +pivovar +placenta +plakat +plamen +planeta +plastika +platit +plavidlo +plaz +plech +plemeno +plenta +ples +pletivo +plevel +plivat +plnit +plno +plocha +plodina +plomba +plout +pluk +plyn +pobavit +pobyt +pochod +pocit +poctivec +podat +podcenit +podepsat +podhled +podivit +podklad +podmanit +podnik +podoba +podpora +podraz +podstata +podvod +podzim +poezie +pohanka +pohnutka +pohovor +pohroma +pohyb +pointa +pojistka +pojmout +pokazit +pokles +pokoj +pokrok +pokuta +pokyn +poledne +polibek +polknout +poloha +polynom +pomalu +pominout +pomlka +pomoc +pomsta +pomyslet +ponechat +ponorka +ponurost +popadat +popel +popisek +poplach +poprosit +popsat +popud +poradce +porce +porod +porucha +poryv +posadit +posed +posila +poskok +poslanec +posoudit +pospolu +postava +posudek +posyp +potah +potkan +potlesk +potomek +potrava +potupa +potvora +poukaz +pouto +pouzdro +povaha +povidla +povlak +povoz +povrch +povstat +povyk +povzdech +pozdrav +pozemek +poznatek +pozor +pozvat +pracovat +prahory +praktika +prales +praotec +praporek +prase +pravda +princip +prkno +probudit +procento +prodej +profese +prohra +projekt +prolomit +promile +pronikat +propad +prorok +prosba +proton +proutek +provaz +prskavka +prsten +prudkost +prut +prvek +prvohory +psanec +psovod +pstruh +ptactvo +puberta +puch +pudl +pukavec +puklina +pukrle +pult +pumpa +punc +pupen +pusa +pusinka +pustina +putovat +putyka +pyramida +pysk +pytel +racek +rachot +radiace +radnice +radon +raft +ragby +raketa +rakovina +rameno +rampouch +rande +rarach +rarita +rasovna +rastr +ratolest +razance +razidlo +reagovat +reakce +recept +redaktor +referent +reflex +rejnok +reklama +rekord +rekrut +rektor +reputace +revize +revma +revolver +rezerva +riskovat +riziko +robotika +rodokmen +rohovka +rokle +rokoko +romaneto +ropovod +ropucha +rorejs +rosol +rostlina +rotmistr +rotoped +rotunda +roubenka +roucho +roup +roura +rovina +rovnice +rozbor +rozchod +rozdat +rozeznat +rozhodce +rozinka +rozjezd +rozkaz +rozloha +rozmar +rozpad +rozruch +rozsah +roztok +rozum +rozvod +rubrika +ruchadlo +rukavice +rukopis +ryba +rybolov +rychlost +rydlo +rypadlo +rytina +ryzost +sadista +sahat +sako +samec +samizdat +samota +sanitka +sardinka +sasanka +satelit +sazba +sazenice +sbor +schovat +sebranka +secese +sedadlo +sediment +sedlo +sehnat +sejmout +sekera +sekta +sekunda +sekvoje +semeno +seno +servis +sesadit +seshora +seskok +seslat +sestra +sesuv +sesypat +setba +setina +setkat +setnout +setrvat +sever +seznam +shoda +shrnout +sifon +silnice +sirka +sirotek +sirup +situace +skafandr +skalisko +skanzen +skaut +skeptik +skica +skladba +sklenice +sklo +skluz +skoba +skokan +skoro +skripta +skrz +skupina +skvost +skvrna +slabika +sladidlo +slanina +slast +slavnost +sledovat +slepec +sleva +slezina +slib +slina +sliznice +slon +sloupek +slovo +sluch +sluha +slunce +slupka +slza +smaragd +smetana +smilstvo +smlouva +smog +smrad +smrk +smrtka +smutek +smysl +snad +snaha +snob +sobota +socha +sodovka +sokol +sopka +sotva +souboj +soucit +soudce +souhlas +soulad +soumrak +souprava +soused +soutok +souviset +spalovna +spasitel +spis +splav +spodek +spojenec +spolu +sponzor +spornost +spousta +sprcha +spustit +sranda +sraz +srdce +srna +srnec +srovnat +srpen +srst +srub +stanice +starosta +statika +stavba +stehno +stezka +stodola +stolek +stopa +storno +stoupat +strach +stres +strhnout +strom +struna +studna +stupnice +stvol +styk +subjekt +subtropy +suchar +sudost +sukno +sundat +sunout +surikata +surovina +svah +svalstvo +svetr +svatba +svazek +svisle +svitek +svoboda +svodidlo +svorka +svrab +sykavka +sykot +synek +synovec +sypat +sypkost +syrovost +sysel +sytost +tabletka +tabule +tahoun +tajemno +tajfun +tajga +tajit +tajnost +taktika +tamhle +tampon +tancovat +tanec +tanker +tapeta +tavenina +tazatel +technika +tehdy +tekutina +telefon +temnota +tendence +tenista +tenor +teplota +tepna +teprve +terapie +termoska +textil +ticho +tiskopis +titulek +tkadlec +tkanina +tlapka +tleskat +tlukot +tlupa +tmel +toaleta +topinka +topol +torzo +touha +toulec +tradice +traktor +tramp +trasa +traverza +trefit +trest +trezor +trhavina +trhlina +trochu +trojice +troska +trouba +trpce +trpitel +trpkost +trubec +truchlit +truhlice +trus +trvat +tudy +tuhnout +tuhost +tundra +turista +turnaj +tuzemsko +tvaroh +tvorba +tvrdost +tvrz +tygr +tykev +ubohost +uboze +ubrat +ubrousek +ubrus +ubytovna +ucho +uctivost +udivit +uhradit +ujednat +ujistit +ujmout +ukazatel +uklidnit +uklonit +ukotvit +ukrojit +ulice +ulita +ulovit +umyvadlo +unavit +uniforma +uniknout +upadnout +uplatnit +uplynout +upoutat +upravit +uran +urazit +usednout +usilovat +usmrtit +usnadnit +usnout +usoudit +ustlat +ustrnout +utahovat +utkat +utlumit +utonout +utopenec +utrousit +uvalit +uvolnit +uvozovka +uzdravit +uzel +uzenina +uzlina +uznat +vagon +valcha +valoun +vana +vandal +vanilka +varan +varhany +varovat +vcelku +vchod +vdova +vedro +vegetace +vejce +velbloud +veletrh +velitel +velmoc +velryba +venkov +veranda +verze +veselka +veskrze +vesnice +vespodu +vesta +veterina +veverka +vibrace +vichr +videohra +vidina +vidle +vila +vinice +viset +vitalita +vize +vizitka +vjezd +vklad +vkus +vlajka +vlak +vlasec +vlevo +vlhkost +vliv +vlnovka +vloupat +vnucovat +vnuk +voda +vodivost +vodoznak +vodstvo +vojensky +vojna +vojsko +volant +volba +volit +volno +voskovka +vozidlo +vozovna +vpravo +vrabec +vracet +vrah +vrata +vrba +vrcholek +vrhat +vrstva +vrtule +vsadit +vstoupit +vstup +vtip +vybavit +vybrat +vychovat +vydat +vydra +vyfotit +vyhledat +vyhnout +vyhodit +vyhradit +vyhubit +vyjasnit +vyjet +vyjmout +vyklopit +vykonat +vylekat +vymazat +vymezit +vymizet +vymyslet +vynechat +vynikat +vynutit +vypadat +vyplatit +vypravit +vypustit +vyrazit +vyrovnat +vyrvat +vyslovit +vysoko +vystavit +vysunout +vysypat +vytasit +vytesat +vytratit +vyvinout +vyvolat +vyvrhel +vyzdobit +vyznat +vzadu +vzbudit +vzchopit +vzdor +vzduch +vzdychat +vzestup +vzhledem +vzkaz +vzlykat +vznik +vzorek +vzpoura +vztah +vztek +xylofon +zabrat +zabydlet +zachovat +zadarmo +zadusit +zafoukat +zahltit +zahodit +zahrada +zahynout +zajatec +zajet +zajistit +zaklepat +zakoupit +zalepit +zamezit +zamotat +zamyslet +zanechat +zanikat +zaplatit +zapojit +zapsat +zarazit +zastavit +zasunout +zatajit +zatemnit +zatknout +zaujmout +zavalit +zavelet +zavinit +zavolat +zavrtat +zazvonit +zbavit +zbrusu +zbudovat +zbytek +zdaleka +zdarma +zdatnost +zdivo +zdobit +zdroj +zdvih +zdymadlo +zelenina +zeman +zemina +zeptat +zezadu +zezdola +zhatit +zhltnout +zhluboka +zhotovit +zhruba +zima +zimnice +zjemnit +zklamat +zkoumat +zkratka +zkumavka +zlato +zlehka +zloba +zlom +zlost +zlozvyk +zmapovat +zmar +zmatek +zmije +zmizet +zmocnit +zmodrat +zmrzlina +zmutovat +znak +znalost +znamenat +znovu +zobrazit +zotavit +zoubek +zoufale +zplodit +zpomalit +zprava +zprostit +zprudka +zprvu +zrada +zranit +zrcadlo +zrnitost +zrno +zrovna +zrychlit +zrzavost +zticha +ztratit +zubovina +zubr +zvednout +zvenku +zvesela +zvon +zvrat +zvukovod +zvyk \ No newline at end of file diff --git a/app/src/main/assets/words/it-BIP39Words.txt b/app/src/main/assets/words/it-BIP39Words.txt new file mode 100644 index 000000000..e72be893e --- /dev/null +++ b/app/src/main/assets/words/it-BIP39Words.txt @@ -0,0 +1,2048 @@ +abaco +abbaglio +abbinato +abete +abisso +abolire +abrasivo +abrogato +accadere +accenno +accusato +acetone +achille +acido +acqua +acre +acrilico +acrobata +acuto +adagio +addebito +addome +adeguato +aderire +adipe +adottare +adulare +affabile +affetto +affisso +affranto +aforisma +afoso +africano +agave +agente +agevole +aggancio +agire +agitare +agonismo +agricolo +agrumeto +aguzzo +alabarda +alato +albatro +alberato +albo +albume +alce +alcolico +alettone +alfa +algebra +aliante +alibi +alimento +allagato +allegro +allievo +allodola +allusivo +almeno +alogeno +alpaca +alpestre +altalena +alterno +alticcio +altrove +alunno +alveolo +alzare +amalgama +amanita +amarena +ambito +ambrato +ameba +america +ametista +amico +ammasso +ammenda +ammirare +ammonito +amore +ampio +ampliare +amuleto +anacardo +anagrafe +analista +anarchia +anatra +anca +ancella +ancora +andare +andrea +anello +angelo +angolare +angusto +anima +annegare +annidato +anno +annuncio +anonimo +anticipo +anzi +apatico +apertura +apode +apparire +appetito +appoggio +approdo +appunto +aprile +arabica +arachide +aragosta +araldica +arancio +aratura +arazzo +arbitro +archivio +ardito +arenile +argento +argine +arguto +aria +armonia +arnese +arredato +arringa +arrosto +arsenico +arso +artefice +arzillo +asciutto +ascolto +asepsi +asettico +asfalto +asino +asola +aspirato +aspro +assaggio +asse +assoluto +assurdo +asta +astenuto +astice +astratto +atavico +ateismo +atomico +atono +attesa +attivare +attorno +attrito +attuale +ausilio +austria +autista +autonomo +autunno +avanzato +avere +avvenire +avviso +avvolgere +azione +azoto +azzimo +azzurro +babele +baccano +bacino +baco +badessa +badilata +bagnato +baita +balcone +baldo +balena +ballata +balzano +bambino +bandire +baraonda +barbaro +barca +baritono +barlume +barocco +basilico +basso +batosta +battuto +baule +bava +bavosa +becco +beffa +belgio +belva +benda +benevole +benigno +benzina +bere +berlina +beta +bibita +bici +bidone +bifido +biga +bilancia +bimbo +binocolo +biologo +bipede +bipolare +birbante +birra +biscotto +bisesto +bisnonno +bisonte +bisturi +bizzarro +blando +blatta +bollito +bonifico +bordo +bosco +botanico +bottino +bozzolo +braccio +bradipo +brama +branca +bravura +bretella +brevetto +brezza +briglia +brillante +brindare +broccolo +brodo +bronzina +brullo +bruno +bubbone +buca +budino +buffone +buio +bulbo +buono +burlone +burrasca +bussola +busta +cadetto +caduco +calamaro +calcolo +calesse +calibro +calmo +caloria +cambusa +camerata +camicia +cammino +camola +campale +canapa +candela +cane +canino +canotto +cantina +capace +capello +capitolo +capogiro +cappero +capra +capsula +carapace +carcassa +cardo +carisma +carovana +carretto +cartolina +casaccio +cascata +caserma +caso +cassone +castello +casuale +catasta +catena +catrame +cauto +cavillo +cedibile +cedrata +cefalo +celebre +cellulare +cena +cenone +centesimo +ceramica +cercare +certo +cerume +cervello +cesoia +cespo +ceto +chela +chiaro +chicca +chiedere +chimera +china +chirurgo +chitarra +ciao +ciclismo +cifrare +cigno +cilindro +ciottolo +circa +cirrosi +citrico +cittadino +ciuffo +civetta +civile +classico +clinica +cloro +cocco +codardo +codice +coerente +cognome +collare +colmato +colore +colposo +coltivato +colza +coma +cometa +commando +comodo +computer +comune +conciso +condurre +conferma +congelare +coniuge +connesso +conoscere +consumo +continuo +convegno +coperto +copione +coppia +copricapo +corazza +cordata +coricato +cornice +corolla +corpo +corredo +corsia +cortese +cosmico +costante +cottura +covato +cratere +cravatta +creato +credere +cremoso +crescita +creta +criceto +crinale +crisi +critico +croce +cronaca +crostata +cruciale +crusca +cucire +cuculo +cugino +cullato +cupola +curatore +cursore +curvo +cuscino +custode +dado +daino +dalmata +damerino +daniela +dannoso +danzare +datato +davanti +davvero +debutto +decennio +deciso +declino +decollo +decreto +dedicato +definito +deforme +degno +delegare +delfino +delirio +delta +demenza +denotato +dentro +deposito +derapata +derivare +deroga +descritto +deserto +desiderio +desumere +detersivo +devoto +diametro +dicembre +diedro +difeso +diffuso +digerire +digitale +diluvio +dinamico +dinnanzi +dipinto +diploma +dipolo +diradare +dire +dirotto +dirupo +disagio +discreto +disfare +disgelo +disposto +distanza +disumano +dito +divano +divelto +dividere +divorato +doblone +docente +doganale +dogma +dolce +domato +domenica +dominare +dondolo +dono +dormire +dote +dottore +dovuto +dozzina +drago +druido +dubbio +dubitare +ducale +duna +duomo +duplice +duraturo +ebano +eccesso +ecco +eclissi +economia +edera +edicola +edile +editoria +educare +egemonia +egli +egoismo +egregio +elaborato +elargire +elegante +elencato +eletto +elevare +elfico +elica +elmo +elsa +eluso +emanato +emblema +emesso +emiro +emotivo +emozione +empirico +emulo +endemico +enduro +energia +enfasi +enoteca +entrare +enzima +epatite +epilogo +episodio +epocale +eppure +equatore +erario +erba +erboso +erede +eremita +erigere +ermetico +eroe +erosivo +errante +esagono +esame +esanime +esaudire +esca +esempio +esercito +esibito +esigente +esistere +esito +esofago +esortato +esoso +espanso +espresso +essenza +esso +esteso +estimare +estonia +estroso +esultare +etilico +etnico +etrusco +etto +euclideo +europa +evaso +evidenza +evitato +evoluto +evviva +fabbrica +faccenda +fachiro +falco +famiglia +fanale +fanfara +fango +fantasma +fare +farfalla +farinoso +farmaco +fascia +fastoso +fasullo +faticare +fato +favoloso +febbre +fecola +fede +fegato +felpa +feltro +femmina +fendere +fenomeno +fermento +ferro +fertile +fessura +festivo +fetta +feudo +fiaba +fiducia +fifa +figurato +filo +finanza +finestra +finire +fiore +fiscale +fisico +fiume +flacone +flamenco +flebo +flemma +florido +fluente +fluoro +fobico +focaccia +focoso +foderato +foglio +folata +folclore +folgore +fondente +fonetico +fonia +fontana +forbito +forchetta +foresta +formica +fornaio +foro +fortezza +forzare +fosfato +fosso +fracasso +frana +frassino +fratello +freccetta +frenata +fresco +frigo +frollino +fronde +frugale +frutta +fucilata +fucsia +fuggente +fulmine +fulvo +fumante +fumetto +fumoso +fune +funzione +fuoco +furbo +furgone +furore +fuso +futile +gabbiano +gaffe +galateo +gallina +galoppo +gambero +gamma +garanzia +garbo +garofano +garzone +gasdotto +gasolio +gastrico +gatto +gaudio +gazebo +gazzella +geco +gelatina +gelso +gemello +gemmato +gene +genitore +gennaio +genotipo +gergo +ghepardo +ghiaccio +ghisa +giallo +gilda +ginepro +giocare +gioiello +giorno +giove +girato +girone +gittata +giudizio +giurato +giusto +globulo +glutine +gnomo +gobba +golf +gomito +gommone +gonfio +gonna +governo +gracile +grado +grafico +grammo +grande +grattare +gravoso +grazia +greca +gregge +grifone +grigio +grinza +grotta +gruppo +guadagno +guaio +guanto +guardare +gufo +guidare +ibernato +icona +identico +idillio +idolo +idra +idrico +idrogeno +igiene +ignaro +ignorato +ilare +illeso +illogico +illudere +imballo +imbevuto +imbocco +imbuto +immane +immerso +immolato +impacco +impeto +impiego +importo +impronta +inalare +inarcare +inattivo +incanto +incendio +inchino +incisivo +incluso +incontro +incrocio +incubo +indagine +india +indole +inedito +infatti +infilare +inflitto +ingaggio +ingegno +inglese +ingordo +ingrosso +innesco +inodore +inoltrare +inondato +insano +insetto +insieme +insonnia +insulina +intasato +intero +intonaco +intuito +inumidire +invalido +invece +invito +iperbole +ipnotico +ipotesi +ippica +iride +irlanda +ironico +irrigato +irrorare +isolato +isotopo +isterico +istituto +istrice +italia +iterare +labbro +labirinto +lacca +lacerato +lacrima +lacuna +laddove +lago +lampo +lancetta +lanterna +lardoso +larga +laringe +lastra +latenza +latino +lattuga +lavagna +lavoro +legale +leggero +lembo +lentezza +lenza +leone +lepre +lesivo +lessato +lesto +letterale +leva +levigato +libero +lido +lievito +lilla +limatura +limitare +limpido +lineare +lingua +liquido +lira +lirica +lisca +lite +litigio +livrea +locanda +lode +logica +lombare +londra +longevo +loquace +lorenzo +loto +lotteria +luce +lucidato +lumaca +luminoso +lungo +lupo +luppolo +lusinga +lusso +lutto +macabro +macchina +macero +macinato +madama +magico +maglia +magnete +magro +maiolica +malafede +malgrado +malinteso +malsano +malto +malumore +mana +mancia +mandorla +mangiare +manifesto +mannaro +manovra +mansarda +mantide +manubrio +mappa +maratona +marcire +maretta +marmo +marsupio +maschera +massaia +mastino +materasso +matricola +mattone +maturo +mazurca +meandro +meccanico +mecenate +medesimo +meditare +mega +melassa +melis +melodia +meninge +meno +mensola +mercurio +merenda +merlo +meschino +mese +messere +mestolo +metallo +metodo +mettere +miagolare +mica +micelio +michele +microbo +midollo +miele +migliore +milano +milite +mimosa +minerale +mini +minore +mirino +mirtillo +miscela +missiva +misto +misurare +mitezza +mitigare +mitra +mittente +mnemonico +modello +modifica +modulo +mogano +mogio +mole +molosso +monastero +monco +mondina +monetario +monile +monotono +monsone +montato +monviso +mora +mordere +morsicato +mostro +motivato +motosega +motto +movenza +movimento +mozzo +mucca +mucosa +muffa +mughetto +mugnaio +mulatto +mulinello +multiplo +mummia +munto +muovere +murale +musa +muscolo +musica +mutevole +muto +nababbo +nafta +nanometro +narciso +narice +narrato +nascere +nastrare +naturale +nautica +naviglio +nebulosa +necrosi +negativo +negozio +nemmeno +neofita +neretto +nervo +nessuno +nettuno +neutrale +neve +nevrotico +nicchia +ninfa +nitido +nobile +nocivo +nodo +nome +nomina +nordico +normale +norvegese +nostrano +notare +notizia +notturno +novella +nucleo +nulla +numero +nuovo +nutrire +nuvola +nuziale +oasi +obbedire +obbligo +obelisco +oblio +obolo +obsoleto +occasione +occhio +occidente +occorrere +occultare +ocra +oculato +odierno +odorare +offerta +offrire +offuscato +oggetto +oggi +ognuno +olandese +olfatto +oliato +oliva +ologramma +oltre +omaggio +ombelico +ombra +omega +omissione +ondoso +onere +onice +onnivoro +onorevole +onta +operato +opinione +opposto +oracolo +orafo +ordine +orecchino +orefice +orfano +organico +origine +orizzonte +orma +ormeggio +ornativo +orologio +orrendo +orribile +ortensia +ortica +orzata +orzo +osare +oscurare +osmosi +ospedale +ospite +ossa +ossidare +ostacolo +oste +otite +otre +ottagono +ottimo +ottobre +ovale +ovest +ovino +oviparo +ovocito +ovunque +ovviare +ozio +pacchetto +pace +pacifico +padella +padrone +paese +paga +pagina +palazzina +palesare +pallido +palo +palude +pandoro +pannello +paolo +paonazzo +paprica +parabola +parcella +parere +pargolo +pari +parlato +parola +partire +parvenza +parziale +passivo +pasticca +patacca +patologia +pattume +pavone +peccato +pedalare +pedonale +peggio +peloso +penare +pendice +penisola +pennuto +penombra +pensare +pentola +pepe +pepita +perbene +percorso +perdonato +perforare +pergamena +periodo +permesso +perno +perplesso +persuaso +pertugio +pervaso +pesatore +pesista +peso +pestifero +petalo +pettine +petulante +pezzo +piacere +pianta +piattino +piccino +picozza +piega +pietra +piffero +pigiama +pigolio +pigro +pila +pilifero +pillola +pilota +pimpante +pineta +pinna +pinolo +pioggia +piombo +piramide +piretico +pirite +pirolisi +pitone +pizzico +placebo +planare +plasma +platano +plenario +pochezza +poderoso +podismo +poesia +poggiare +polenta +poligono +pollice +polmonite +polpetta +polso +poltrona +polvere +pomice +pomodoro +ponte +popoloso +porfido +poroso +porpora +porre +portata +posa +positivo +possesso +postulato +potassio +potere +pranzo +prassi +pratica +precluso +predica +prefisso +pregiato +prelievo +premere +prenotare +preparato +presenza +pretesto +prevalso +prima +principe +privato +problema +procura +produrre +profumo +progetto +prolunga +promessa +pronome +proposta +proroga +proteso +prova +prudente +prugna +prurito +psiche +pubblico +pudica +pugilato +pugno +pulce +pulito +pulsante +puntare +pupazzo +pupilla +puro +quadro +qualcosa +quasi +querela +quota +raccolto +raddoppio +radicale +radunato +raffica +ragazzo +ragione +ragno +ramarro +ramingo +ramo +randagio +rantolare +rapato +rapina +rappreso +rasatura +raschiato +rasente +rassegna +rastrello +rata +ravveduto +reale +recepire +recinto +recluta +recondito +recupero +reddito +redimere +regalato +registro +regola +regresso +relazione +remare +remoto +renna +replica +reprimere +reputare +resa +residente +responso +restauro +rete +retina +retorica +rettifica +revocato +riassunto +ribadire +ribelle +ribrezzo +ricarica +ricco +ricevere +riciclato +ricordo +ricreduto +ridicolo +ridurre +rifasare +riflesso +riforma +rifugio +rigare +rigettato +righello +rilassato +rilevato +rimanere +rimbalzo +rimedio +rimorchio +rinascita +rincaro +rinforzo +rinnovo +rinomato +rinsavito +rintocco +rinuncia +rinvenire +riparato +ripetuto +ripieno +riportare +ripresa +ripulire +risata +rischio +riserva +risibile +riso +rispetto +ristoro +risultato +risvolto +ritardo +ritegno +ritmico +ritrovo +riunione +riva +riverso +rivincita +rivolto +rizoma +roba +robotico +robusto +roccia +roco +rodaggio +rodere +roditore +rogito +rollio +romantico +rompere +ronzio +rosolare +rospo +rotante +rotondo +rotula +rovescio +rubizzo +rubrica +ruga +rullino +rumine +rumoroso +ruolo +rupe +russare +rustico +sabato +sabbiare +sabotato +sagoma +salasso +saldatura +salgemma +salivare +salmone +salone +saltare +saluto +salvo +sapere +sapido +saporito +saraceno +sarcasmo +sarto +sassoso +satellite +satira +satollo +saturno +savana +savio +saziato +sbadiglio +sbalzo +sbancato +sbarra +sbattere +sbavare +sbendare +sbirciare +sbloccato +sbocciato +sbrinare +sbruffone +sbuffare +scabroso +scadenza +scala +scambiare +scandalo +scapola +scarso +scatenare +scavato +scelto +scenico +scettro +scheda +schiena +sciarpa +scienza +scindere +scippo +sciroppo +scivolo +sclerare +scodella +scolpito +scomparto +sconforto +scoprire +scorta +scossone +scozzese +scriba +scrollare +scrutinio +scuderia +scultore +scuola +scuro +scusare +sdebitare +sdoganare +seccatura +secondo +sedano +seggiola +segnalato +segregato +seguito +selciato +selettivo +sella +selvaggio +semaforo +sembrare +seme +seminato +sempre +senso +sentire +sepolto +sequenza +serata +serbato +sereno +serio +serpente +serraglio +servire +sestina +setola +settimana +sfacelo +sfaldare +sfamato +sfarzoso +sfaticato +sfera +sfida +sfilato +sfinge +sfocato +sfoderare +sfogo +sfoltire +sforzato +sfratto +sfruttato +sfuggito +sfumare +sfuso +sgabello +sgarbato +sgonfiare +sgorbio +sgrassato +sguardo +sibilo +siccome +sierra +sigla +signore +silenzio +sillaba +simbolo +simpatico +simulato +sinfonia +singolo +sinistro +sino +sintesi +sinusoide +sipario +sisma +sistole +situato +slitta +slogatura +sloveno +smarrito +smemorato +smentito +smeraldo +smilzo +smontare +smottato +smussato +snellire +snervato +snodo +sobbalzo +sobrio +soccorso +sociale +sodale +soffitto +sogno +soldato +solenne +solido +sollazzo +solo +solubile +solvente +somatico +somma +sonda +sonetto +sonnifero +sopire +soppeso +sopra +sorgere +sorpasso +sorriso +sorso +sorteggio +sorvolato +sospiro +sosta +sottile +spada +spalla +spargere +spatola +spavento +spazzola +specie +spedire +spegnere +spelatura +speranza +spessore +spettrale +spezzato +spia +spigoloso +spillato +spinoso +spirale +splendido +sportivo +sposo +spranga +sprecare +spronato +spruzzo +spuntino +squillo +sradicare +srotolato +stabile +stacco +staffa +stagnare +stampato +stantio +starnuto +stasera +statuto +stelo +steppa +sterzo +stiletto +stima +stirpe +stivale +stizzoso +stonato +storico +strappo +stregato +stridulo +strozzare +strutto +stuccare +stufo +stupendo +subentro +succoso +sudore +suggerito +sugo +sultano +suonare +superbo +supporto +surgelato +surrogato +sussurro +sutura +svagare +svedese +sveglio +svelare +svenuto +svezia +sviluppo +svista +svizzera +svolta +svuotare +tabacco +tabulato +tacciare +taciturno +tale +talismano +tampone +tannino +tara +tardivo +targato +tariffa +tarpare +tartaruga +tasto +tattico +taverna +tavolata +tazza +teca +tecnico +telefono +temerario +tempo +temuto +tendone +tenero +tensione +tentacolo +teorema +terme +terrazzo +terzetto +tesi +tesserato +testato +tetro +tettoia +tifare +tigella +timbro +tinto +tipico +tipografo +tiraggio +tiro +titanio +titolo +titubante +tizio +tizzone +toccare +tollerare +tolto +tombola +tomo +tonfo +tonsilla +topazio +topologia +toppa +torba +tornare +torrone +tortora +toscano +tossire +tostatura +totano +trabocco +trachea +trafila +tragedia +tralcio +tramonto +transito +trapano +trarre +trasloco +trattato +trave +treccia +tremolio +trespolo +tributo +tricheco +trifoglio +trillo +trincea +trio +tristezza +triturato +trivella +tromba +trono +troppo +trottola +trovare +truccato +tubatura +tuffato +tulipano +tumulto +tunisia +turbare +turchino +tuta +tutela +ubicato +uccello +uccisore +udire +uditivo +uffa +ufficio +uguale +ulisse +ultimato +umano +umile +umorismo +uncinetto +ungere +ungherese +unicorno +unificato +unisono +unitario +unte +uovo +upupa +uragano +urgenza +urlo +usanza +usato +uscito +usignolo +usuraio +utensile +utilizzo +utopia +vacante +vaccinato +vagabondo +vagliato +valanga +valgo +valico +valletta +valoroso +valutare +valvola +vampata +vangare +vanitoso +vano +vantaggio +vanvera +vapore +varano +varcato +variante +vasca +vedetta +vedova +veduto +vegetale +veicolo +velcro +velina +velluto +veloce +venato +vendemmia +vento +verace +verbale +vergogna +verifica +vero +verruca +verticale +vescica +vessillo +vestale +veterano +vetrina +vetusto +viandante +vibrante +vicenda +vichingo +vicinanza +vidimare +vigilia +vigneto +vigore +vile +villano +vimini +vincitore +viola +vipera +virgola +virologo +virulento +viscoso +visione +vispo +vissuto +visura +vita +vitello +vittima +vivanda +vivido +viziare +voce +voga +volatile +volere +volpe +voragine +vulcano +zampogna +zanna +zappato +zattera +zavorra +zefiro +zelante +zelo +zenzero +zerbino +zibetto +zinco +zircone +zitto +zolla +zotico +zucchero +zufolo +zulu +zuppa \ No newline at end of file diff --git a/app/src/main/assets/words/ko-BIP39Words.txt b/app/src/main/assets/words/ko-BIP39Words.txt new file mode 100644 index 000000000..77fadf532 --- /dev/null +++ b/app/src/main/assets/words/ko-BIP39Words.txt @@ -0,0 +1,2048 @@ +가격 +가끔 +가난 +가능 +가득 +가르침 +가뭄 +가방 +가상 +가슴 +가운데 +가을 +가이드 +가입 +가장 +가정 +가족 +가죽 +각오 +각자 +간격 +간부 +간섭 +간장 +간접 +간판 +갈등 +갈비 +갈색 +갈증 +감각 +감기 +감소 +감수성 +감자 +감정 +갑자기 +강남 +강당 +강도 +강력히 +강변 +강북 +강사 +강수량 +강아지 +강원도 +강의 +강제 +강조 +같이 +개구리 +개나리 +개방 +개별 +개선 +개성 +개인 +객관적 +거실 +거액 +거울 +거짓 +거품 +걱정 +건강 +건물 +건설 +건조 +건축 +걸음 +검사 +검토 +게시판 +게임 +겨울 +견해 +결과 +결국 +결론 +결석 +결승 +결심 +결정 +결혼 +경계 +경고 +경기 +경력 +경복궁 +경비 +경상도 +경영 +경우 +경쟁 +경제 +경주 +경찰 +경치 +경향 +경험 +계곡 +계단 +계란 +계산 +계속 +계약 +계절 +계층 +계획 +고객 +고구려 +고궁 +고급 +고등학생 +고무신 +고민 +고양이 +고장 +고전 +고집 +고춧가루 +고통 +고향 +곡식 +골목 +골짜기 +골프 +공간 +공개 +공격 +공군 +공급 +공기 +공동 +공무원 +공부 +공사 +공식 +공업 +공연 +공원 +공장 +공짜 +공책 +공통 +공포 +공항 +공휴일 +과목 +과일 +과장 +과정 +과학 +관객 +관계 +관광 +관념 +관람 +관련 +관리 +관습 +관심 +관점 +관찰 +광경 +광고 +광장 +광주 +괴로움 +굉장히 +교과서 +교문 +교복 +교실 +교양 +교육 +교장 +교직 +교통 +교환 +교훈 +구경 +구름 +구멍 +구별 +구분 +구석 +구성 +구속 +구역 +구입 +구청 +구체적 +국가 +국기 +국내 +국립 +국물 +국민 +국수 +국어 +국왕 +국적 +국제 +국회 +군대 +군사 +군인 +궁극적 +권리 +권위 +권투 +귀국 +귀신 +규정 +규칙 +균형 +그날 +그냥 +그늘 +그러나 +그룹 +그릇 +그림 +그제서야 +그토록 +극복 +극히 +근거 +근교 +근래 +근로 +근무 +근본 +근원 +근육 +근처 +글씨 +글자 +금강산 +금고 +금년 +금메달 +금액 +금연 +금요일 +금지 +긍정적 +기간 +기관 +기념 +기능 +기독교 +기둥 +기록 +기름 +기법 +기본 +기분 +기쁨 +기숙사 +기술 +기억 +기업 +기온 +기운 +기원 +기적 +기준 +기침 +기혼 +기획 +긴급 +긴장 +길이 +김밥 +김치 +김포공항 +깍두기 +깜빡 +깨달음 +깨소금 +껍질 +꼭대기 +꽃잎 +나들이 +나란히 +나머지 +나물 +나침반 +나흘 +낙엽 +난방 +날개 +날씨 +날짜 +남녀 +남대문 +남매 +남산 +남자 +남편 +남학생 +낭비 +낱말 +내년 +내용 +내일 +냄비 +냄새 +냇물 +냉동 +냉면 +냉방 +냉장고 +넥타이 +넷째 +노동 +노란색 +노력 +노인 +녹음 +녹차 +녹화 +논리 +논문 +논쟁 +놀이 +농구 +농담 +농민 +농부 +농업 +농장 +농촌 +높이 +눈동자 +눈물 +눈썹 +뉴욕 +느낌 +늑대 +능동적 +능력 +다방 +다양성 +다음 +다이어트 +다행 +단계 +단골 +단독 +단맛 +단순 +단어 +단위 +단점 +단체 +단추 +단편 +단풍 +달걀 +달러 +달력 +달리 +닭고기 +담당 +담배 +담요 +담임 +답변 +답장 +당근 +당분간 +당연히 +당장 +대규모 +대낮 +대단히 +대답 +대도시 +대략 +대량 +대륙 +대문 +대부분 +대신 +대응 +대장 +대전 +대접 +대중 +대책 +대출 +대충 +대통령 +대학 +대한민국 +대합실 +대형 +덩어리 +데이트 +도대체 +도덕 +도둑 +도망 +도서관 +도심 +도움 +도입 +도자기 +도저히 +도전 +도중 +도착 +독감 +독립 +독서 +독일 +독창적 +동화책 +뒷모습 +뒷산 +딸아이 +마누라 +마늘 +마당 +마라톤 +마련 +마무리 +마사지 +마약 +마요네즈 +마을 +마음 +마이크 +마중 +마지막 +마찬가지 +마찰 +마흔 +막걸리 +막내 +막상 +만남 +만두 +만세 +만약 +만일 +만점 +만족 +만화 +많이 +말기 +말씀 +말투 +맘대로 +망원경 +매년 +매달 +매력 +매번 +매스컴 +매일 +매장 +맥주 +먹이 +먼저 +먼지 +멀리 +메일 +며느리 +며칠 +면담 +멸치 +명단 +명령 +명예 +명의 +명절 +명칭 +명함 +모금 +모니터 +모델 +모든 +모범 +모습 +모양 +모임 +모조리 +모집 +모퉁이 +목걸이 +목록 +목사 +목소리 +목숨 +목적 +목표 +몰래 +몸매 +몸무게 +몸살 +몸속 +몸짓 +몸통 +몹시 +무관심 +무궁화 +무더위 +무덤 +무릎 +무슨 +무엇 +무역 +무용 +무조건 +무지개 +무척 +문구 +문득 +문법 +문서 +문제 +문학 +문화 +물가 +물건 +물결 +물고기 +물론 +물리학 +물음 +물질 +물체 +미국 +미디어 +미사일 +미술 +미역 +미용실 +미움 +미인 +미팅 +미혼 +민간 +민족 +민주 +믿음 +밀가루 +밀리미터 +밑바닥 +바가지 +바구니 +바나나 +바늘 +바닥 +바닷가 +바람 +바이러스 +바탕 +박물관 +박사 +박수 +반대 +반드시 +반말 +반발 +반성 +반응 +반장 +반죽 +반지 +반찬 +받침 +발가락 +발걸음 +발견 +발달 +발레 +발목 +발바닥 +발생 +발음 +발자국 +발전 +발톱 +발표 +밤하늘 +밥그릇 +밥맛 +밥상 +밥솥 +방금 +방면 +방문 +방바닥 +방법 +방송 +방식 +방안 +방울 +방지 +방학 +방해 +방향 +배경 +배꼽 +배달 +배드민턴 +백두산 +백색 +백성 +백인 +백제 +백화점 +버릇 +버섯 +버튼 +번개 +번역 +번지 +번호 +벌금 +벌레 +벌써 +범위 +범인 +범죄 +법률 +법원 +법적 +법칙 +베이징 +벨트 +변경 +변동 +변명 +변신 +변호사 +변화 +별도 +별명 +별일 +병실 +병아리 +병원 +보관 +보너스 +보라색 +보람 +보름 +보상 +보안 +보자기 +보장 +보전 +보존 +보통 +보편적 +보험 +복도 +복사 +복숭아 +복습 +볶음 +본격적 +본래 +본부 +본사 +본성 +본인 +본질 +볼펜 +봉사 +봉지 +봉투 +부근 +부끄러움 +부담 +부동산 +부문 +부분 +부산 +부상 +부엌 +부인 +부작용 +부장 +부정 +부족 +부지런히 +부친 +부탁 +부품 +부회장 +북부 +북한 +분노 +분량 +분리 +분명 +분석 +분야 +분위기 +분필 +분홍색 +불고기 +불과 +불교 +불꽃 +불만 +불법 +불빛 +불안 +불이익 +불행 +브랜드 +비극 +비난 +비닐 +비둘기 +비디오 +비로소 +비만 +비명 +비밀 +비바람 +비빔밥 +비상 +비용 +비율 +비중 +비타민 +비판 +빌딩 +빗물 +빗방울 +빗줄기 +빛깔 +빨간색 +빨래 +빨리 +사건 +사계절 +사나이 +사냥 +사람 +사랑 +사립 +사모님 +사물 +사방 +사상 +사생활 +사설 +사슴 +사실 +사업 +사용 +사월 +사장 +사전 +사진 +사촌 +사춘기 +사탕 +사투리 +사흘 +산길 +산부인과 +산업 +산책 +살림 +살인 +살짝 +삼계탕 +삼국 +삼십 +삼월 +삼촌 +상관 +상금 +상대 +상류 +상반기 +상상 +상식 +상업 +상인 +상자 +상점 +상처 +상추 +상태 +상표 +상품 +상황 +새벽 +색깔 +색연필 +생각 +생명 +생물 +생방송 +생산 +생선 +생신 +생일 +생활 +서랍 +서른 +서명 +서민 +서비스 +서양 +서울 +서적 +서점 +서쪽 +서클 +석사 +석유 +선거 +선물 +선배 +선생 +선수 +선원 +선장 +선전 +선택 +선풍기 +설거지 +설날 +설렁탕 +설명 +설문 +설사 +설악산 +설치 +설탕 +섭씨 +성공 +성당 +성명 +성별 +성인 +성장 +성적 +성질 +성함 +세금 +세미나 +세상 +세월 +세종대왕 +세탁 +센터 +센티미터 +셋째 +소규모 +소극적 +소금 +소나기 +소년 +소득 +소망 +소문 +소설 +소속 +소아과 +소용 +소원 +소음 +소중히 +소지품 +소질 +소풍 +소형 +속담 +속도 +속옷 +손가락 +손길 +손녀 +손님 +손등 +손목 +손뼉 +손실 +손질 +손톱 +손해 +솔직히 +솜씨 +송아지 +송이 +송편 +쇠고기 +쇼핑 +수건 +수년 +수단 +수돗물 +수동적 +수면 +수명 +수박 +수상 +수석 +수술 +수시로 +수업 +수염 +수영 +수입 +수준 +수집 +수출 +수컷 +수필 +수학 +수험생 +수화기 +숙녀 +숙소 +숙제 +순간 +순서 +순수 +순식간 +순위 +숟가락 +술병 +술집 +숫자 +스님 +스물 +스스로 +스승 +스웨터 +스위치 +스케이트 +스튜디오 +스트레스 +스포츠 +슬쩍 +슬픔 +습관 +습기 +승객 +승리 +승부 +승용차 +승진 +시각 +시간 +시골 +시금치 +시나리오 +시댁 +시리즈 +시멘트 +시민 +시부모 +시선 +시설 +시스템 +시아버지 +시어머니 +시월 +시인 +시일 +시작 +시장 +시절 +시점 +시중 +시즌 +시집 +시청 +시합 +시험 +식구 +식기 +식당 +식량 +식료품 +식물 +식빵 +식사 +식생활 +식초 +식탁 +식품 +신고 +신규 +신념 +신문 +신발 +신비 +신사 +신세 +신용 +신제품 +신청 +신체 +신화 +실감 +실내 +실력 +실례 +실망 +실수 +실습 +실시 +실장 +실정 +실질적 +실천 +실체 +실컷 +실태 +실패 +실험 +실현 +심리 +심부름 +심사 +심장 +심정 +심판 +쌍둥이 +씨름 +씨앗 +아가씨 +아나운서 +아드님 +아들 +아쉬움 +아스팔트 +아시아 +아울러 +아저씨 +아줌마 +아직 +아침 +아파트 +아프리카 +아픔 +아홉 +아흔 +악기 +악몽 +악수 +안개 +안경 +안과 +안내 +안녕 +안동 +안방 +안부 +안주 +알루미늄 +알코올 +암시 +암컷 +압력 +앞날 +앞문 +애인 +애정 +액수 +앨범 +야간 +야단 +야옹 +약간 +약국 +약속 +약수 +약점 +약품 +약혼녀 +양념 +양력 +양말 +양배추 +양주 +양파 +어둠 +어려움 +어른 +어젯밤 +어쨌든 +어쩌다가 +어쩐지 +언니 +언덕 +언론 +언어 +얼굴 +얼른 +얼음 +얼핏 +엄마 +업무 +업종 +업체 +엉덩이 +엉망 +엉터리 +엊그제 +에너지 +에어컨 +엔진 +여건 +여고생 +여관 +여군 +여권 +여대생 +여덟 +여동생 +여든 +여론 +여름 +여섯 +여성 +여왕 +여인 +여전히 +여직원 +여학생 +여행 +역사 +역시 +역할 +연결 +연구 +연극 +연기 +연락 +연설 +연세 +연속 +연습 +연애 +연예인 +연인 +연장 +연주 +연출 +연필 +연합 +연휴 +열기 +열매 +열쇠 +열심히 +열정 +열차 +열흘 +염려 +엽서 +영국 +영남 +영상 +영양 +영역 +영웅 +영원히 +영하 +영향 +영혼 +영화 +옆구리 +옆방 +옆집 +예감 +예금 +예방 +예산 +예상 +예선 +예술 +예습 +예식장 +예약 +예전 +예절 +예정 +예컨대 +옛날 +오늘 +오락 +오랫동안 +오렌지 +오로지 +오른발 +오븐 +오십 +오염 +오월 +오전 +오직 +오징어 +오페라 +오피스텔 +오히려 +옥상 +옥수수 +온갖 +온라인 +온몸 +온종일 +온통 +올가을 +올림픽 +올해 +옷차림 +와이셔츠 +와인 +완성 +완전 +왕비 +왕자 +왜냐하면 +왠지 +외갓집 +외국 +외로움 +외삼촌 +외출 +외침 +외할머니 +왼발 +왼손 +왼쪽 +요금 +요일 +요즘 +요청 +용기 +용서 +용어 +우산 +우선 +우승 +우연히 +우정 +우체국 +우편 +운동 +운명 +운반 +운전 +운행 +울산 +울음 +움직임 +웃어른 +웃음 +워낙 +원고 +원래 +원서 +원숭이 +원인 +원장 +원피스 +월급 +월드컵 +월세 +월요일 +웨이터 +위반 +위법 +위성 +위원 +위험 +위협 +윗사람 +유난히 +유럽 +유명 +유물 +유산 +유적 +유치원 +유학 +유행 +유형 +육군 +육상 +육십 +육체 +은행 +음력 +음료 +음반 +음성 +음식 +음악 +음주 +의견 +의논 +의문 +의복 +의식 +의심 +의외로 +의욕 +의원 +의학 +이것 +이곳 +이념 +이놈 +이달 +이대로 +이동 +이렇게 +이력서 +이론적 +이름 +이민 +이발소 +이별 +이불 +이빨 +이상 +이성 +이슬 +이야기 +이용 +이웃 +이월 +이윽고 +이익 +이전 +이중 +이튿날 +이틀 +이혼 +인간 +인격 +인공 +인구 +인근 +인기 +인도 +인류 +인물 +인생 +인쇄 +인연 +인원 +인재 +인종 +인천 +인체 +인터넷 +인하 +인형 +일곱 +일기 +일단 +일대 +일등 +일반 +일본 +일부 +일상 +일생 +일손 +일요일 +일월 +일정 +일종 +일주일 +일찍 +일체 +일치 +일행 +일회용 +임금 +임무 +입대 +입력 +입맛 +입사 +입술 +입시 +입원 +입장 +입학 +자가용 +자격 +자극 +자동 +자랑 +자부심 +자식 +자신 +자연 +자원 +자율 +자전거 +자정 +자존심 +자판 +작가 +작년 +작성 +작업 +작용 +작은딸 +작품 +잔디 +잔뜩 +잔치 +잘못 +잠깐 +잠수함 +잠시 +잠옷 +잠자리 +잡지 +장관 +장군 +장기간 +장래 +장례 +장르 +장마 +장면 +장모 +장미 +장비 +장사 +장소 +장식 +장애인 +장인 +장점 +장차 +장학금 +재능 +재빨리 +재산 +재생 +재작년 +재정 +재채기 +재판 +재학 +재활용 +저것 +저고리 +저곳 +저녁 +저런 +저렇게 +저번 +저울 +저절로 +저축 +적극 +적당히 +적성 +적용 +적응 +전개 +전공 +전기 +전달 +전라도 +전망 +전문 +전반 +전부 +전세 +전시 +전용 +전자 +전쟁 +전주 +전철 +전체 +전통 +전혀 +전후 +절대 +절망 +절반 +절약 +절차 +점검 +점수 +점심 +점원 +점점 +점차 +접근 +접시 +접촉 +젓가락 +정거장 +정도 +정류장 +정리 +정말 +정면 +정문 +정반대 +정보 +정부 +정비 +정상 +정성 +정오 +정원 +정장 +정지 +정치 +정확히 +제공 +제과점 +제대로 +제목 +제발 +제법 +제삿날 +제안 +제일 +제작 +제주도 +제출 +제품 +제한 +조각 +조건 +조금 +조깅 +조명 +조미료 +조상 +조선 +조용히 +조절 +조정 +조직 +존댓말 +존재 +졸업 +졸음 +종교 +종로 +종류 +종소리 +종업원 +종종 +종합 +좌석 +죄인 +주관적 +주름 +주말 +주머니 +주먹 +주문 +주민 +주방 +주변 +주식 +주인 +주일 +주장 +주전자 +주택 +준비 +줄거리 +줄기 +줄무늬 +중간 +중계방송 +중국 +중년 +중단 +중독 +중반 +중부 +중세 +중소기업 +중순 +중앙 +중요 +중학교 +즉석 +즉시 +즐거움 +증가 +증거 +증권 +증상 +증세 +지각 +지갑 +지경 +지극히 +지금 +지급 +지능 +지름길 +지리산 +지방 +지붕 +지식 +지역 +지우개 +지원 +지적 +지점 +지진 +지출 +직선 +직업 +직원 +직장 +진급 +진동 +진로 +진료 +진리 +진짜 +진찰 +진출 +진통 +진행 +질문 +질병 +질서 +짐작 +집단 +집안 +집중 +짜증 +찌꺼기 +차남 +차라리 +차량 +차림 +차별 +차선 +차츰 +착각 +찬물 +찬성 +참가 +참기름 +참새 +참석 +참여 +참외 +참조 +찻잔 +창가 +창고 +창구 +창문 +창밖 +창작 +창조 +채널 +채점 +책가방 +책방 +책상 +책임 +챔피언 +처벌 +처음 +천국 +천둥 +천장 +천재 +천천히 +철도 +철저히 +철학 +첫날 +첫째 +청년 +청바지 +청소 +청춘 +체계 +체력 +체온 +체육 +체중 +체험 +초등학생 +초반 +초밥 +초상화 +초순 +초여름 +초원 +초저녁 +초점 +초청 +초콜릿 +촛불 +총각 +총리 +총장 +촬영 +최근 +최상 +최선 +최신 +최악 +최종 +추석 +추억 +추진 +추천 +추측 +축구 +축소 +축제 +축하 +출근 +출발 +출산 +출신 +출연 +출입 +출장 +출판 +충격 +충고 +충돌 +충분히 +충청도 +취업 +취직 +취향 +치약 +친구 +친척 +칠십 +칠월 +칠판 +침대 +침묵 +침실 +칫솔 +칭찬 +카메라 +카운터 +칼국수 +캐릭터 +캠퍼스 +캠페인 +커튼 +컨디션 +컬러 +컴퓨터 +코끼리 +코미디 +콘서트 +콜라 +콤플렉스 +콩나물 +쾌감 +쿠데타 +크림 +큰길 +큰딸 +큰소리 +큰아들 +큰어머니 +큰일 +큰절 +클래식 +클럽 +킬로 +타입 +타자기 +탁구 +탁자 +탄생 +태권도 +태양 +태풍 +택시 +탤런트 +터널 +터미널 +테니스 +테스트 +테이블 +텔레비전 +토론 +토마토 +토요일 +통계 +통과 +통로 +통신 +통역 +통일 +통장 +통제 +통증 +통합 +통화 +퇴근 +퇴원 +퇴직금 +튀김 +트럭 +특급 +특별 +특성 +특수 +특징 +특히 +튼튼히 +티셔츠 +파란색 +파일 +파출소 +판결 +판단 +판매 +판사 +팔십 +팔월 +팝송 +패션 +팩스 +팩시밀리 +팬티 +퍼센트 +페인트 +편견 +편의 +편지 +편히 +평가 +평균 +평생 +평소 +평양 +평일 +평화 +포스터 +포인트 +포장 +포함 +표면 +표정 +표준 +표현 +품목 +품질 +풍경 +풍속 +풍습 +프랑스 +프린터 +플라스틱 +피곤 +피망 +피아노 +필름 +필수 +필요 +필자 +필통 +핑계 +하느님 +하늘 +하드웨어 +하룻밤 +하반기 +하숙집 +하순 +하여튼 +하지만 +하천 +하품 +하필 +학과 +학교 +학급 +학기 +학년 +학력 +학번 +학부모 +학비 +학생 +학술 +학습 +학용품 +학원 +학위 +학자 +학점 +한계 +한글 +한꺼번에 +한낮 +한눈 +한동안 +한때 +한라산 +한마디 +한문 +한번 +한복 +한식 +한여름 +한쪽 +할머니 +할아버지 +할인 +함께 +함부로 +합격 +합리적 +항공 +항구 +항상 +항의 +해결 +해군 +해답 +해당 +해물 +해석 +해설 +해수욕장 +해안 +핵심 +핸드백 +햄버거 +햇볕 +햇살 +행동 +행복 +행사 +행운 +행위 +향기 +향상 +향수 +허락 +허용 +헬기 +현관 +현금 +현대 +현상 +현실 +현장 +현재 +현지 +혈액 +협력 +형부 +형사 +형수 +형식 +형제 +형태 +형편 +혜택 +호기심 +호남 +호랑이 +호박 +호텔 +호흡 +혹시 +홀로 +홈페이지 +홍보 +홍수 +홍차 +화면 +화분 +화살 +화요일 +화장 +화학 +확보 +확인 +확장 +확정 +환갑 +환경 +환영 +환율 +환자 +활기 +활동 +활발히 +활용 +활짝 +회견 +회관 +회복 +회색 +회원 +회장 +회전 +횟수 +횡단보도 +효율적 +후반 +후춧가루 +훈련 +훨씬 +휴식 +휴일 +흉내 +흐름 +흑백 +흑인 +흔적 +흔히 +흥미 +흥분 +희곡 +희망 +희생 +흰색 +힘껏 \ No newline at end of file diff --git a/app/src/main/assets/words/pt-BIP39Words.txt b/app/src/main/assets/words/pt-BIP39Words.txt new file mode 100644 index 000000000..27f23b29c --- /dev/null +++ b/app/src/main/assets/words/pt-BIP39Words.txt @@ -0,0 +1,2048 @@ +abacate +abaixo +abalar +abater +abduzir +abelha +aberto +abismo +abotoar +abranger +abreviar +abrigar +abrupto +absinto +absoluto +absurdo +abutre +acabado +acalmar +acampar +acanhar +acaso +aceitar +acelerar +acenar +acervo +acessar +acetona +achatar +acidez +acima +acionado +acirrar +aclamar +aclive +acolhida +acomodar +acoplar +acordar +acumular +acusador +adaptar +adega +adentro +adepto +adequar +aderente +adesivo +adeus +adiante +aditivo +adjetivo +adjunto +admirar +adorar +adquirir +adubo +adverso +advogado +aeronave +afastar +aferir +afetivo +afinador +afivelar +aflito +afluente +afrontar +agachar +agarrar +agasalho +agenciar +agilizar +agiota +agitado +agora +agradar +agreste +agrupar +aguardar +agulha +ajoelhar +ajudar +ajustar +alameda +alarme +alastrar +alavanca +albergue +albino +alcatra +aldeia +alecrim +alegria +alertar +alface +alfinete +algum +alheio +aliar +alicate +alienar +alinhar +aliviar +almofada +alocar +alpiste +alterar +altitude +alucinar +alugar +aluno +alusivo +alvo +amaciar +amador +amarelo +amassar +ambas +ambiente +ameixa +amenizar +amido +amistoso +amizade +amolador +amontoar +amoroso +amostra +amparar +ampliar +ampola +anagrama +analisar +anarquia +anatomia +andaime +anel +anexo +angular +animar +anjo +anomalia +anotado +ansioso +anterior +anuidade +anunciar +anzol +apagador +apalpar +apanhado +apego +apelido +apertada +apesar +apetite +apito +aplauso +aplicada +apoio +apontar +aposta +aprendiz +aprovar +aquecer +arame +aranha +arara +arcada +ardente +areia +arejar +arenito +aresta +argiloso +argola +arma +arquivo +arraial +arrebate +arriscar +arroba +arrumar +arsenal +arterial +artigo +arvoredo +asfaltar +asilado +aspirar +assador +assinar +assoalho +assunto +astral +atacado +atadura +atalho +atarefar +atear +atender +aterro +ateu +atingir +atirador +ativo +atoleiro +atracar +atrevido +atriz +atual +atum +auditor +aumentar +aura +aurora +autismo +autoria +autuar +avaliar +avante +avaria +avental +avesso +aviador +avisar +avulso +axila +azarar +azedo +azeite +azulejo +babar +babosa +bacalhau +bacharel +bacia +bagagem +baiano +bailar +baioneta +bairro +baixista +bajular +baleia +baliza +balsa +banal +bandeira +banho +banir +banquete +barato +barbado +baronesa +barraca +barulho +baseado +bastante +batata +batedor +batida +batom +batucar +baunilha +beber +beijo +beirada +beisebol +beldade +beleza +belga +beliscar +bendito +bengala +benzer +berimbau +berlinda +berro +besouro +bexiga +bezerro +bico +bicudo +bienal +bifocal +bifurcar +bigorna +bilhete +bimestre +bimotor +biologia +biombo +biosfera +bipolar +birrento +biscoito +bisneto +bispo +bissexto +bitola +bizarro +blindado +bloco +bloquear +boato +bobagem +bocado +bocejo +bochecha +boicotar +bolada +boletim +bolha +bolo +bombeiro +bonde +boneco +bonita +borbulha +borda +boreal +borracha +bovino +boxeador +branco +brasa +braveza +breu +briga +brilho +brincar +broa +brochura +bronzear +broto +bruxo +bucha +budismo +bufar +bule +buraco +busca +busto +buzina +cabana +cabelo +cabide +cabo +cabrito +cacau +cacetada +cachorro +cacique +cadastro +cadeado +cafezal +caiaque +caipira +caixote +cajado +caju +calafrio +calcular +caldeira +calibrar +calmante +calota +camada +cambista +camisa +camomila +campanha +camuflar +canavial +cancelar +caneta +canguru +canhoto +canivete +canoa +cansado +cantar +canudo +capacho +capela +capinar +capotar +capricho +captador +capuz +caracol +carbono +cardeal +careca +carimbar +carneiro +carpete +carreira +cartaz +carvalho +casaco +casca +casebre +castelo +casulo +catarata +cativar +caule +causador +cautelar +cavalo +caverna +cebola +cedilha +cegonha +celebrar +celular +cenoura +censo +centeio +cercar +cerrado +certeiro +cerveja +cetim +cevada +chacota +chaleira +chamado +chapada +charme +chatice +chave +chefe +chegada +cheiro +cheque +chicote +chifre +chinelo +chocalho +chover +chumbo +chutar +chuva +cicatriz +ciclone +cidade +cidreira +ciente +cigana +cimento +cinto +cinza +ciranda +circuito +cirurgia +citar +clareza +clero +clicar +clone +clube +coado +coagir +cobaia +cobertor +cobrar +cocada +coelho +coentro +coeso +cogumelo +coibir +coifa +coiote +colar +coleira +colher +colidir +colmeia +colono +coluna +comando +combinar +comentar +comitiva +comover +complexo +comum +concha +condor +conectar +confuso +congelar +conhecer +conjugar +consumir +contrato +convite +cooperar +copeiro +copiador +copo +coquetel +coragem +cordial +corneta +coronha +corporal +correio +cortejo +coruja +corvo +cosseno +costela +cotonete +couro +couve +covil +cozinha +cratera +cravo +creche +credor +creme +crer +crespo +criada +criminal +crioulo +crise +criticar +crosta +crua +cruzeiro +cubano +cueca +cuidado +cujo +culatra +culminar +culpar +cultura +cumprir +cunhado +cupido +curativo +curral +cursar +curto +cuspir +custear +cutelo +damasco +datar +debater +debitar +deboche +debulhar +decalque +decimal +declive +decote +decretar +dedal +dedicado +deduzir +defesa +defumar +degelo +degrau +degustar +deitado +deixar +delator +delegado +delinear +delonga +demanda +demitir +demolido +dentista +depenado +depilar +depois +depressa +depurar +deriva +derramar +desafio +desbotar +descanso +desenho +desfiado +desgaste +desigual +deslize +desmamar +desova +despesa +destaque +desviar +detalhar +detentor +detonar +detrito +deusa +dever +devido +devotado +dezena +diagrama +dialeto +didata +difuso +digitar +dilatado +diluente +diminuir +dinastia +dinheiro +diocese +direto +discreta +disfarce +disparo +disquete +dissipar +distante +ditador +diurno +diverso +divisor +divulgar +dizer +dobrador +dolorido +domador +dominado +donativo +donzela +dormente +dorsal +dosagem +dourado +doutor +drenagem +drible +drogaria +duelar +duende +dueto +duplo +duquesa +durante +duvidoso +eclodir +ecoar +ecologia +edificar +edital +educado +efeito +efetivar +ejetar +elaborar +eleger +eleitor +elenco +elevador +eliminar +elogiar +embargo +embolado +embrulho +embutido +emenda +emergir +emissor +empatia +empenho +empinado +empolgar +emprego +empurrar +emulador +encaixe +encenado +enchente +encontro +endeusar +endossar +enfaixar +enfeite +enfim +engajado +engenho +englobar +engomado +engraxar +enguia +enjoar +enlatar +enquanto +enraizar +enrolado +enrugar +ensaio +enseada +ensino +ensopado +entanto +enteado +entidade +entortar +entrada +entulho +envergar +enviado +envolver +enxame +enxerto +enxofre +enxuto +epiderme +equipar +ereto +erguido +errata +erva +ervilha +esbanjar +esbelto +escama +escola +escrita +escuta +esfinge +esfolar +esfregar +esfumado +esgrima +esmalte +espanto +espelho +espiga +esponja +espreita +espumar +esquerda +estaca +esteira +esticar +estofado +estrela +estudo +esvaziar +etanol +etiqueta +euforia +europeu +evacuar +evaporar +evasivo +eventual +evidente +evoluir +exagero +exalar +examinar +exato +exausto +excesso +excitar +exclamar +executar +exemplo +exibir +exigente +exonerar +expandir +expelir +expirar +explanar +exposto +expresso +expulsar +externo +extinto +extrato +fabricar +fabuloso +faceta +facial +fada +fadiga +faixa +falar +falta +familiar +fandango +fanfarra +fantoche +fardado +farelo +farinha +farofa +farpa +fartura +fatia +fator +favorita +faxina +fazenda +fechado +feijoada +feirante +felino +feminino +fenda +feno +fera +feriado +ferrugem +ferver +festejar +fetal +feudal +fiapo +fibrose +ficar +ficheiro +figurado +fileira +filho +filme +filtrar +firmeza +fisgada +fissura +fita +fivela +fixador +fixo +flacidez +flamingo +flanela +flechada +flora +flutuar +fluxo +focal +focinho +fofocar +fogo +foguete +foice +folgado +folheto +forjar +formiga +forno +forte +fosco +fossa +fragata +fralda +frango +frasco +fraterno +freira +frente +fretar +frieza +friso +fritura +fronha +frustrar +fruteira +fugir +fulano +fuligem +fundar +fungo +funil +furador +furioso +futebol +gabarito +gabinete +gado +gaiato +gaiola +gaivota +galega +galho +galinha +galocha +ganhar +garagem +garfo +gargalo +garimpo +garoupa +garrafa +gasoduto +gasto +gata +gatilho +gaveta +gazela +gelado +geleia +gelo +gemada +gemer +gemido +generoso +gengiva +genial +genoma +genro +geologia +gerador +germinar +gesso +gestor +ginasta +gincana +gingado +girafa +girino +glacial +glicose +global +glorioso +goela +goiaba +golfe +golpear +gordura +gorjeta +gorro +gostoso +goteira +governar +gracejo +gradual +grafite +gralha +grampo +granada +gratuito +graveto +graxa +grego +grelhar +greve +grilo +grisalho +gritaria +grosso +grotesco +grudado +grunhido +gruta +guache +guarani +guaxinim +guerrear +guiar +guincho +guisado +gula +guloso +guru +habitar +harmonia +haste +haver +hectare +herdar +heresia +hesitar +hiato +hibernar +hidratar +hiena +hino +hipismo +hipnose +hipoteca +hoje +holofote +homem +honesto +honrado +hormonal +hospedar +humorado +iate +ideia +idoso +ignorado +igreja +iguana +ileso +ilha +iludido +iluminar +ilustrar +imagem +imediato +imenso +imersivo +iminente +imitador +imortal +impacto +impedir +implante +impor +imprensa +impune +imunizar +inalador +inapto +inativo +incenso +inchar +incidir +incluir +incolor +indeciso +indireto +indutor +ineficaz +inerente +infantil +infestar +infinito +inflamar +informal +infrator +ingerir +inibido +inicial +inimigo +injetar +inocente +inodoro +inovador +inox +inquieto +inscrito +inseto +insistir +inspetor +instalar +insulto +intacto +integral +intimar +intocado +intriga +invasor +inverno +invicto +invocar +iogurte +iraniano +ironizar +irreal +irritado +isca +isento +isolado +isqueiro +italiano +janeiro +jangada +janta +jararaca +jardim +jarro +jasmim +jato +javali +jazida +jejum +joaninha +joelhada +jogador +joia +jornal +jorrar +jovem +juba +judeu +judoca +juiz +julgador +julho +jurado +jurista +juro +justa +labareda +laboral +lacre +lactante +ladrilho +lagarta +lagoa +laje +lamber +lamentar +laminar +lampejo +lanche +lapidar +lapso +laranja +lareira +largura +lasanha +lastro +lateral +latido +lavanda +lavoura +lavrador +laxante +lazer +lealdade +lebre +legado +legendar +legista +leigo +leiloar +leitura +lembrete +leme +lenhador +lentilha +leoa +lesma +leste +letivo +letreiro +levar +leveza +levitar +liberal +libido +liderar +ligar +ligeiro +limitar +limoeiro +limpador +linda +linear +linhagem +liquidez +listagem +lisura +litoral +livro +lixa +lixeira +locador +locutor +lojista +lombo +lona +longe +lontra +lorde +lotado +loteria +loucura +lousa +louvar +luar +lucidez +lucro +luneta +lustre +lutador +luva +macaco +macete +machado +macio +madeira +madrinha +magnata +magreza +maior +mais +malandro +malha +malote +maluco +mamilo +mamoeiro +mamute +manada +mancha +mandato +manequim +manhoso +manivela +manobrar +mansa +manter +manusear +mapeado +maquinar +marcador +maresia +marfim +margem +marinho +marmita +maroto +marquise +marreco +martelo +marujo +mascote +masmorra +massagem +mastigar +matagal +materno +matinal +matutar +maxilar +medalha +medida +medusa +megafone +meiga +melancia +melhor +membro +memorial +menino +menos +mensagem +mental +merecer +mergulho +mesada +mesclar +mesmo +mesquita +mestre +metade +meteoro +metragem +mexer +mexicano +micro +migalha +migrar +milagre +milenar +milhar +mimado +minerar +minhoca +ministro +minoria +miolo +mirante +mirtilo +misturar +mocidade +moderno +modular +moeda +moer +moinho +moita +moldura +moleza +molho +molinete +molusco +montanha +moqueca +morango +morcego +mordomo +morena +mosaico +mosquete +mostarda +motel +motim +moto +motriz +muda +muito +mulata +mulher +multar +mundial +munido +muralha +murcho +muscular +museu +musical +nacional +nadador +naja +namoro +narina +narrado +nascer +nativa +natureza +navalha +navegar +navio +neblina +nebuloso +negativa +negociar +negrito +nervoso +neta +neural +nevasca +nevoeiro +ninar +ninho +nitidez +nivelar +nobreza +noite +noiva +nomear +nominal +nordeste +nortear +notar +noticiar +noturno +novelo +novilho +novo +nublado +nudez +numeral +nupcial +nutrir +nuvem +obcecado +obedecer +objetivo +obrigado +obscuro +obstetra +obter +obturar +ocidente +ocioso +ocorrer +oculista +ocupado +ofegante +ofensiva +oferenda +oficina +ofuscado +ogiva +olaria +oleoso +olhar +oliveira +ombro +omelete +omisso +omitir +ondulado +oneroso +ontem +opcional +operador +oponente +oportuno +oposto +orar +orbitar +ordem +ordinal +orfanato +orgasmo +orgulho +oriental +origem +oriundo +orla +ortodoxo +orvalho +oscilar +ossada +osso +ostentar +otimismo +ousadia +outono +outubro +ouvido +ovelha +ovular +oxidar +oxigenar +pacato +paciente +pacote +pactuar +padaria +padrinho +pagar +pagode +painel +pairar +paisagem +palavra +palestra +palheta +palito +palmada +palpitar +pancada +panela +panfleto +panqueca +pantanal +papagaio +papelada +papiro +parafina +parcial +pardal +parede +partida +pasmo +passado +pastel +patamar +patente +patinar +patrono +paulada +pausar +peculiar +pedalar +pedestre +pediatra +pedra +pegada +peitoral +peixe +pele +pelicano +penca +pendurar +peneira +penhasco +pensador +pente +perceber +perfeito +pergunta +perito +permitir +perna +perplexo +persiana +pertence +peruca +pescado +pesquisa +pessoa +petiscar +piada +picado +piedade +pigmento +pilastra +pilhado +pilotar +pimenta +pincel +pinguim +pinha +pinote +pintar +pioneiro +pipoca +piquete +piranha +pires +pirueta +piscar +pistola +pitanga +pivete +planta +plaqueta +platina +plebeu +plumagem +pluvial +pneu +poda +poeira +poetisa +polegada +policiar +poluente +polvilho +pomar +pomba +ponderar +pontaria +populoso +porta +possuir +postal +pote +poupar +pouso +povoar +praia +prancha +prato +praxe +prece +predador +prefeito +premiar +prensar +preparar +presilha +pretexto +prevenir +prezar +primata +princesa +prisma +privado +processo +produto +profeta +proibido +projeto +prometer +propagar +prosa +protetor +provador +publicar +pudim +pular +pulmonar +pulseira +punhal +punir +pupilo +pureza +puxador +quadra +quantia +quarto +quase +quebrar +queda +queijo +quente +querido +quimono +quina +quiosque +rabanada +rabisco +rachar +racionar +radial +raiar +rainha +raio +raiva +rajada +ralado +ramal +ranger +ranhura +rapadura +rapel +rapidez +raposa +raquete +raridade +rasante +rascunho +rasgar +raspador +rasteira +rasurar +ratazana +ratoeira +realeza +reanimar +reaver +rebaixar +rebelde +rebolar +recado +recente +recheio +recibo +recordar +recrutar +recuar +rede +redimir +redonda +reduzida +reenvio +refinar +refletir +refogar +refresco +refugiar +regalia +regime +regra +reinado +reitor +rejeitar +relativo +remador +remendo +remorso +renovado +reparo +repelir +repleto +repolho +represa +repudiar +requerer +resenha +resfriar +resgatar +residir +resolver +respeito +ressaca +restante +resumir +retalho +reter +retirar +retomada +retratar +revelar +revisor +revolta +riacho +rica +rigidez +rigoroso +rimar +ringue +risada +risco +risonho +robalo +rochedo +rodada +rodeio +rodovia +roedor +roleta +romano +roncar +rosado +roseira +rosto +rota +roteiro +rotina +rotular +rouco +roupa +roxo +rubro +rugido +rugoso +ruivo +rumo +rupestre +russo +sabor +saciar +sacola +sacudir +sadio +safira +saga +sagrada +saibro +salada +saleiro +salgado +saliva +salpicar +salsicha +saltar +salvador +sambar +samurai +sanar +sanfona +sangue +sanidade +sapato +sarda +sargento +sarjeta +saturar +saudade +saxofone +sazonal +secar +secular +seda +sedento +sediado +sedoso +sedutor +segmento +segredo +segundo +seiva +seleto +selvagem +semanal +semente +senador +senhor +sensual +sentado +separado +sereia +seringa +serra +servo +setembro +setor +sigilo +silhueta +silicone +simetria +simpatia +simular +sinal +sincero +singular +sinopse +sintonia +sirene +siri +situado +soberano +sobra +socorro +sogro +soja +solda +soletrar +solteiro +sombrio +sonata +sondar +sonegar +sonhador +sono +soprano +soquete +sorrir +sorteio +sossego +sotaque +soterrar +sovado +sozinho +suavizar +subida +submerso +subsolo +subtrair +sucata +sucesso +suco +sudeste +sufixo +sugador +sugerir +sujeito +sulfato +sumir +suor +superior +suplicar +suposto +suprimir +surdina +surfista +surpresa +surreal +surtir +suspiro +sustento +tabela +tablete +tabuada +tacho +tagarela +talher +talo +talvez +tamanho +tamborim +tampa +tangente +tanto +tapar +tapioca +tardio +tarefa +tarja +tarraxa +tatuagem +taurino +taxativo +taxista +teatral +tecer +tecido +teclado +tedioso +teia +teimar +telefone +telhado +tempero +tenente +tensor +tentar +termal +terno +terreno +tese +tesoura +testado +teto +textura +texugo +tiara +tigela +tijolo +timbrar +timidez +tingido +tinteiro +tiragem +titular +toalha +tocha +tolerar +tolice +tomada +tomilho +tonel +tontura +topete +tora +torcido +torneio +torque +torrada +torto +tostar +touca +toupeira +toxina +trabalho +tracejar +tradutor +trafegar +trajeto +trama +trancar +trapo +traseiro +tratador +travar +treino +tremer +trepidar +trevo +triagem +tribo +triciclo +tridente +trilogia +trindade +triplo +triturar +triunfal +trocar +trombeta +trova +trunfo +truque +tubular +tucano +tudo +tulipa +tupi +turbo +turma +turquesa +tutelar +tutorial +uivar +umbigo +unha +unidade +uniforme +urologia +urso +urtiga +urubu +usado +usina +usufruir +vacina +vadiar +vagaroso +vaidoso +vala +valente +validade +valores +vantagem +vaqueiro +varanda +vareta +varrer +vascular +vasilha +vassoura +vazar +vazio +veado +vedar +vegetar +veicular +veleiro +velhice +veludo +vencedor +vendaval +venerar +ventre +verbal +verdade +vereador +vergonha +vermelho +verniz +versar +vertente +vespa +vestido +vetorial +viaduto +viagem +viajar +viatura +vibrador +videira +vidraria +viela +viga +vigente +vigiar +vigorar +vilarejo +vinco +vinheta +vinil +violeta +virada +virtude +visitar +visto +vitral +viveiro +vizinho +voador +voar +vogal +volante +voleibol +voltagem +volumoso +vontade +vulto +vuvuzela +xadrez +xarope +xeque +xeretar +xerife +xingar +zangado +zarpar +zebu +zelador +zombar +zoologia +zumbido \ No newline at end of file diff --git a/app/src/main/assets/words/zh-BIP39Words.txt b/app/src/main/assets/words/zh-CN-BIP39Words.txt similarity index 100% rename from app/src/main/assets/words/zh-BIP39Words.txt rename to app/src/main/assets/words/zh-CN-BIP39Words.txt diff --git a/app/src/main/assets/words/zh-TW-BIP39Words.txt b/app/src/main/assets/words/zh-TW-BIP39Words.txt new file mode 100644 index 000000000..65a34144f --- /dev/null +++ b/app/src/main/assets/words/zh-TW-BIP39Words.txt @@ -0,0 +1,2048 @@ +的 +一 +是 +在 +不 +了 +有 +和 +人 +這 +中 +大 +為 +上 +個 +國 +我 +以 +要 +他 +時 +來 +用 +們 +生 +到 +作 +地 +於 +出 +就 +分 +對 +成 +會 +可 +主 +發 +年 +動 +同 +工 +也 +能 +下 +過 +子 +說 +產 +種 +面 +而 +方 +後 +多 +定 +行 +學 +法 +所 +民 +得 +經 +十 +三 +之 +進 +著 +等 +部 +度 +家 +電 +力 +裡 +如 +水 +化 +高 +自 +二 +理 +起 +小 +物 +現 +實 +加 +量 +都 +兩 +體 +制 +機 +當 +使 +點 +從 +業 +本 +去 +把 +性 +好 +應 +開 +它 +合 +還 +因 +由 +其 +些 +然 +前 +外 +天 +政 +四 +日 +那 +社 +義 +事 +平 +形 +相 +全 +表 +間 +樣 +與 +關 +各 +重 +新 +線 +內 +數 +正 +心 +反 +你 +明 +看 +原 +又 +麼 +利 +比 +或 +但 +質 +氣 +第 +向 +道 +命 +此 +變 +條 +只 +沒 +結 +解 +問 +意 +建 +月 +公 +無 +系 +軍 +很 +情 +者 +最 +立 +代 +想 +已 +通 +並 +提 +直 +題 +黨 +程 +展 +五 +果 +料 +象 +員 +革 +位 +入 +常 +文 +總 +次 +品 +式 +活 +設 +及 +管 +特 +件 +長 +求 +老 +頭 +基 +資 +邊 +流 +路 +級 +少 +圖 +山 +統 +接 +知 +較 +將 +組 +見 +計 +別 +她 +手 +角 +期 +根 +論 +運 +農 +指 +幾 +九 +區 +強 +放 +決 +西 +被 +幹 +做 +必 +戰 +先 +回 +則 +任 +取 +據 +處 +隊 +南 +給 +色 +光 +門 +即 +保 +治 +北 +造 +百 +規 +熱 +領 +七 +海 +口 +東 +導 +器 +壓 +志 +世 +金 +增 +爭 +濟 +階 +油 +思 +術 +極 +交 +受 +聯 +什 +認 +六 +共 +權 +收 +證 +改 +清 +美 +再 +採 +轉 +更 +單 +風 +切 +打 +白 +教 +速 +花 +帶 +安 +場 +身 +車 +例 +真 +務 +具 +萬 +每 +目 +至 +達 +走 +積 +示 +議 +聲 +報 +鬥 +完 +類 +八 +離 +華 +名 +確 +才 +科 +張 +信 +馬 +節 +話 +米 +整 +空 +元 +況 +今 +集 +溫 +傳 +土 +許 +步 +群 +廣 +石 +記 +需 +段 +研 +界 +拉 +林 +律 +叫 +且 +究 +觀 +越 +織 +裝 +影 +算 +低 +持 +音 +眾 +書 +布 +复 +容 +兒 +須 +際 +商 +非 +驗 +連 +斷 +深 +難 +近 +礦 +千 +週 +委 +素 +技 +備 +半 +辦 +青 +省 +列 +習 +響 +約 +支 +般 +史 +感 +勞 +便 +團 +往 +酸 +歷 +市 +克 +何 +除 +消 +構 +府 +稱 +太 +準 +精 +值 +號 +率 +族 +維 +劃 +選 +標 +寫 +存 +候 +毛 +親 +快 +效 +斯 +院 +查 +江 +型 +眼 +王 +按 +格 +養 +易 +置 +派 +層 +片 +始 +卻 +專 +狀 +育 +廠 +京 +識 +適 +屬 +圓 +包 +火 +住 +調 +滿 +縣 +局 +照 +參 +紅 +細 +引 +聽 +該 +鐵 +價 +嚴 +首 +底 +液 +官 +德 +隨 +病 +蘇 +失 +爾 +死 +講 +配 +女 +黃 +推 +顯 +談 +罪 +神 +藝 +呢 +席 +含 +企 +望 +密 +批 +營 +項 +防 +舉 +球 +英 +氧 +勢 +告 +李 +台 +落 +木 +幫 +輪 +破 +亞 +師 +圍 +注 +遠 +字 +材 +排 +供 +河 +態 +封 +另 +施 +減 +樹 +溶 +怎 +止 +案 +言 +士 +均 +武 +固 +葉 +魚 +波 +視 +僅 +費 +緊 +愛 +左 +章 +早 +朝 +害 +續 +輕 +服 +試 +食 +充 +兵 +源 +判 +護 +司 +足 +某 +練 +差 +致 +板 +田 +降 +黑 +犯 +負 +擊 +范 +繼 +興 +似 +餘 +堅 +曲 +輸 +修 +故 +城 +夫 +夠 +送 +筆 +船 +佔 +右 +財 +吃 +富 +春 +職 +覺 +漢 +畫 +功 +巴 +跟 +雖 +雜 +飛 +檢 +吸 +助 +昇 +陽 +互 +初 +創 +抗 +考 +投 +壞 +策 +古 +徑 +換 +未 +跑 +留 +鋼 +曾 +端 +責 +站 +簡 +述 +錢 +副 +盡 +帝 +射 +草 +衝 +承 +獨 +令 +限 +阿 +宣 +環 +雙 +請 +超 +微 +讓 +控 +州 +良 +軸 +找 +否 +紀 +益 +依 +優 +頂 +礎 +載 +倒 +房 +突 +坐 +粉 +敵 +略 +客 +袁 +冷 +勝 +絕 +析 +塊 +劑 +測 +絲 +協 +訴 +念 +陳 +仍 +羅 +鹽 +友 +洋 +錯 +苦 +夜 +刑 +移 +頻 +逐 +靠 +混 +母 +短 +皮 +終 +聚 +汽 +村 +雲 +哪 +既 +距 +衛 +停 +烈 +央 +察 +燒 +迅 +境 +若 +印 +洲 +刻 +括 +激 +孔 +搞 +甚 +室 +待 +核 +校 +散 +侵 +吧 +甲 +遊 +久 +菜 +味 +舊 +模 +湖 +貨 +損 +預 +阻 +毫 +普 +穩 +乙 +媽 +植 +息 +擴 +銀 +語 +揮 +酒 +守 +拿 +序 +紙 +醫 +缺 +雨 +嗎 +針 +劉 +啊 +急 +唱 +誤 +訓 +願 +審 +附 +獲 +茶 +鮮 +糧 +斤 +孩 +脫 +硫 +肥 +善 +龍 +演 +父 +漸 +血 +歡 +械 +掌 +歌 +沙 +剛 +攻 +謂 +盾 +討 +晚 +粒 +亂 +燃 +矛 +乎 +殺 +藥 +寧 +魯 +貴 +鐘 +煤 +讀 +班 +伯 +香 +介 +迫 +句 +豐 +培 +握 +蘭 +擔 +弦 +蛋 +沉 +假 +穿 +執 +答 +樂 +誰 +順 +煙 +縮 +徵 +臉 +喜 +松 +腳 +困 +異 +免 +背 +星 +福 +買 +染 +井 +概 +慢 +怕 +磁 +倍 +祖 +皇 +促 +靜 +補 +評 +翻 +肉 +踐 +尼 +衣 +寬 +揚 +棉 +希 +傷 +操 +垂 +秋 +宜 +氫 +套 +督 +振 +架 +亮 +末 +憲 +慶 +編 +牛 +觸 +映 +雷 +銷 +詩 +座 +居 +抓 +裂 +胞 +呼 +娘 +景 +威 +綠 +晶 +厚 +盟 +衡 +雞 +孫 +延 +危 +膠 +屋 +鄉 +臨 +陸 +顧 +掉 +呀 +燈 +歲 +措 +束 +耐 +劇 +玉 +趙 +跳 +哥 +季 +課 +凱 +胡 +額 +款 +紹 +卷 +齊 +偉 +蒸 +殖 +永 +宗 +苗 +川 +爐 +岩 +弱 +零 +楊 +奏 +沿 +露 +桿 +探 +滑 +鎮 +飯 +濃 +航 +懷 +趕 +庫 +奪 +伊 +靈 +稅 +途 +滅 +賽 +歸 +召 +鼓 +播 +盤 +裁 +險 +康 +唯 +錄 +菌 +純 +借 +糖 +蓋 +橫 +符 +私 +努 +堂 +域 +槍 +潤 +幅 +哈 +竟 +熟 +蟲 +澤 +腦 +壤 +碳 +歐 +遍 +側 +寨 +敢 +徹 +慮 +斜 +薄 +庭 +納 +彈 +飼 +伸 +折 +麥 +濕 +暗 +荷 +瓦 +塞 +床 +築 +惡 +戶 +訪 +塔 +奇 +透 +梁 +刀 +旋 +跡 +卡 +氯 +遇 +份 +毒 +泥 +退 +洗 +擺 +灰 +彩 +賣 +耗 +夏 +擇 +忙 +銅 +獻 +硬 +予 +繁 +圈 +雪 +函 +亦 +抽 +篇 +陣 +陰 +丁 +尺 +追 +堆 +雄 +迎 +泛 +爸 +樓 +避 +謀 +噸 +野 +豬 +旗 +累 +偏 +典 +館 +索 +秦 +脂 +潮 +爺 +豆 +忽 +托 +驚 +塑 +遺 +愈 +朱 +替 +纖 +粗 +傾 +尚 +痛 +楚 +謝 +奮 +購 +磨 +君 +池 +旁 +碎 +骨 +監 +捕 +弟 +暴 +割 +貫 +殊 +釋 +詞 +亡 +壁 +頓 +寶 +午 +塵 +聞 +揭 +炮 +殘 +冬 +橋 +婦 +警 +綜 +招 +吳 +付 +浮 +遭 +徐 +您 +搖 +谷 +贊 +箱 +隔 +訂 +男 +吹 +園 +紛 +唐 +敗 +宋 +玻 +巨 +耕 +坦 +榮 +閉 +灣 +鍵 +凡 +駐 +鍋 +救 +恩 +剝 +凝 +鹼 +齒 +截 +煉 +麻 +紡 +禁 +廢 +盛 +版 +緩 +淨 +睛 +昌 +婚 +涉 +筒 +嘴 +插 +岸 +朗 +莊 +街 +藏 +姑 +貿 +腐 +奴 +啦 +慣 +乘 +夥 +恢 +勻 +紗 +扎 +辯 +耳 +彪 +臣 +億 +璃 +抵 +脈 +秀 +薩 +俄 +網 +舞 +店 +噴 +縱 +寸 +汗 +掛 +洪 +賀 +閃 +柬 +爆 +烯 +津 +稻 +牆 +軟 +勇 +像 +滾 +厘 +蒙 +芳 +肯 +坡 +柱 +盪 +腿 +儀 +旅 +尾 +軋 +冰 +貢 +登 +黎 +削 +鑽 +勒 +逃 +障 +氨 +郭 +峰 +幣 +港 +伏 +軌 +畝 +畢 +擦 +莫 +刺 +浪 +秘 +援 +株 +健 +售 +股 +島 +甘 +泡 +睡 +童 +鑄 +湯 +閥 +休 +匯 +舍 +牧 +繞 +炸 +哲 +磷 +績 +朋 +淡 +尖 +啟 +陷 +柴 +呈 +徒 +顏 +淚 +稍 +忘 +泵 +藍 +拖 +洞 +授 +鏡 +辛 +壯 +鋒 +貧 +虛 +彎 +摩 +泰 +幼 +廷 +尊 +窗 +綱 +弄 +隸 +疑 +氏 +宮 +姐 +震 +瑞 +怪 +尤 +琴 +循 +描 +膜 +違 +夾 +腰 +緣 +珠 +窮 +森 +枝 +竹 +溝 +催 +繩 +憶 +邦 +剩 +幸 +漿 +欄 +擁 +牙 +貯 +禮 +濾 +鈉 +紋 +罷 +拍 +咱 +喊 +袖 +埃 +勤 +罰 +焦 +潛 +伍 +墨 +欲 +縫 +姓 +刊 +飽 +仿 +獎 +鋁 +鬼 +麗 +跨 +默 +挖 +鏈 +掃 +喝 +袋 +炭 +污 +幕 +諸 +弧 +勵 +梅 +奶 +潔 +災 +舟 +鑑 +苯 +訟 +抱 +毀 +懂 +寒 +智 +埔 +寄 +屆 +躍 +渡 +挑 +丹 +艱 +貝 +碰 +拔 +爹 +戴 +碼 +夢 +芽 +熔 +赤 +漁 +哭 +敬 +顆 +奔 +鉛 +仲 +虎 +稀 +妹 +乏 +珍 +申 +桌 +遵 +允 +隆 +螺 +倉 +魏 +銳 +曉 +氮 +兼 +隱 +礙 +赫 +撥 +忠 +肅 +缸 +牽 +搶 +博 +巧 +殼 +兄 +杜 +訊 +誠 +碧 +祥 +柯 +頁 +巡 +矩 +悲 +灌 +齡 +倫 +票 +尋 +桂 +鋪 +聖 +恐 +恰 +鄭 +趣 +抬 +荒 +騰 +貼 +柔 +滴 +猛 +闊 +輛 +妻 +填 +撤 +儲 +簽 +鬧 +擾 +紫 +砂 +遞 +戲 +吊 +陶 +伐 +餵 +療 +瓶 +婆 +撫 +臂 +摸 +忍 +蝦 +蠟 +鄰 +胸 +鞏 +擠 +偶 +棄 +槽 +勁 +乳 +鄧 +吉 +仁 +爛 +磚 +租 +烏 +艦 +伴 +瓜 +淺 +丙 +暫 +燥 +橡 +柳 +迷 +暖 +牌 +秧 +膽 +詳 +簧 +踏 +瓷 +譜 +呆 +賓 +糊 +洛 +輝 +憤 +競 +隙 +怒 +粘 +乃 +緒 +肩 +籍 +敏 +塗 +熙 +皆 +偵 +懸 +掘 +享 +糾 +醒 +狂 +鎖 +淀 +恨 +牲 +霸 +爬 +賞 +逆 +玩 +陵 +祝 +秒 +浙 +貌 +役 +彼 +悉 +鴨 +趨 +鳳 +晨 +畜 +輩 +秩 +卵 +署 +梯 +炎 +灘 +棋 +驅 +篩 +峽 +冒 +啥 +壽 +譯 +浸 +泉 +帽 +遲 +矽 +疆 +貸 +漏 +稿 +冠 +嫩 +脅 +芯 +牢 +叛 +蝕 +奧 +鳴 +嶺 +羊 +憑 +串 +塘 +繪 +酵 +融 +盆 +錫 +廟 +籌 +凍 +輔 +攝 +襲 +筋 +拒 +僚 +旱 +鉀 +鳥 +漆 +沈 +眉 +疏 +添 +棒 +穗 +硝 +韓 +逼 +扭 +僑 +涼 +挺 +碗 +栽 +炒 +杯 +患 +餾 +勸 +豪 +遼 +勃 +鴻 +旦 +吏 +拜 +狗 +埋 +輥 +掩 +飲 +搬 +罵 +辭 +勾 +扣 +估 +蔣 +絨 +霧 +丈 +朵 +姆 +擬 +宇 +輯 +陝 +雕 +償 +蓄 +崇 +剪 +倡 +廳 +咬 +駛 +薯 +刷 +斥 +番 +賦 +奉 +佛 +澆 +漫 +曼 +扇 +鈣 +桃 +扶 +仔 +返 +俗 +虧 +腔 +鞋 +棱 +覆 +框 +悄 +叔 +撞 +騙 +勘 +旺 +沸 +孤 +吐 +孟 +渠 +屈 +疾 +妙 +惜 +仰 +狠 +脹 +諧 +拋 +黴 +桑 +崗 +嘛 +衰 +盜 +滲 +臟 +賴 +湧 +甜 +曹 +閱 +肌 +哩 +厲 +烴 +緯 +毅 +昨 +偽 +症 +煮 +嘆 +釘 +搭 +莖 +籠 +酷 +偷 +弓 +錐 +恆 +傑 +坑 +鼻 +翼 +綸 +敘 +獄 +逮 +罐 +絡 +棚 +抑 +膨 +蔬 +寺 +驟 +穆 +冶 +枯 +冊 +屍 +凸 +紳 +坯 +犧 +焰 +轟 +欣 +晉 +瘦 +禦 +錠 +錦 +喪 +旬 +鍛 +壟 +搜 +撲 +邀 +亭 +酯 +邁 +舒 +脆 +酶 +閒 +憂 +酚 +頑 +羽 +漲 +卸 +仗 +陪 +闢 +懲 +杭 +姚 +肚 +捉 +飄 +漂 +昆 +欺 +吾 +郎 +烷 +汁 +呵 +飾 +蕭 +雅 +郵 +遷 +燕 +撒 +姻 +赴 +宴 +煩 +債 +帳 +斑 +鈴 +旨 +醇 +董 +餅 +雛 +姿 +拌 +傅 +腹 +妥 +揉 +賢 +拆 +歪 +葡 +胺 +丟 +浩 +徽 +昂 +墊 +擋 +覽 +貪 +慰 +繳 +汪 +慌 +馮 +諾 +姜 +誼 +兇 +劣 +誣 +耀 +昏 +躺 +盈 +騎 +喬 +溪 +叢 +盧 +抹 +悶 +諮 +刮 +駕 +纜 +悟 +摘 +鉺 +擲 +頗 +幻 +柄 +惠 +慘 +佳 +仇 +臘 +窩 +滌 +劍 +瞧 +堡 +潑 +蔥 +罩 +霍 +撈 +胎 +蒼 +濱 +倆 +捅 +湘 +砍 +霞 +邵 +萄 +瘋 +淮 +遂 +熊 +糞 +烘 +宿 +檔 +戈 +駁 +嫂 +裕 +徙 +箭 +捐 +腸 +撐 +曬 +辨 +殿 +蓮 +攤 +攪 +醬 +屏 +疫 +哀 +蔡 +堵 +沫 +皺 +暢 +疊 +閣 +萊 +敲 +轄 +鉤 +痕 +壩 +巷 +餓 +禍 +丘 +玄 +溜 +曰 +邏 +彭 +嘗 +卿 +妨 +艇 +吞 +韋 +怨 +矮 +歇 \ No newline at end of file diff --git a/app/src/test/java/PaperKeyTests.java b/app/src/test/java/PaperKeyTests.java index 76e989b40..6d789725b 100644 --- a/app/src/test/java/PaperKeyTests.java +++ b/app/src/test/java/PaperKeyTests.java @@ -71,11 +71,16 @@ public void testPaperKeyValidation() { private List getAllWords() { List result = new ArrayList<>(); List names = new ArrayList<>(); + names.add("cs-BIP39Words.txt"); names.add("en-BIP39Words.txt"); names.add("es-BIP39Words.txt"); names.add("fr-BIP39Words.txt"); + names.add("it-BIP39Words.txt"); names.add("ja-BIP39Words.txt"); - names.add("zh-BIP39Words.txt"); + names.add("ko-BIP39Words.txt"); + names.add("pt-BIP39Words.txt"); + names.add("zh-CN-BIP39Words.txt"); + names.add("zh-TW-BIP39Words.txt"); for (String fileName : names) { InputStream in = null; diff --git a/app/src/test/resources/cs-BIP39Words.txt b/app/src/test/resources/cs-BIP39Words.txt new file mode 100644 index 000000000..a41bdd28f --- /dev/null +++ b/app/src/test/resources/cs-BIP39Words.txt @@ -0,0 +1,2048 @@ +abdikace +abeceda +adresa +agrese +akce +aktovka +alej +alkohol +amputace +ananas +andulka +anekdota +anketa +antika +anulovat +archa +arogance +asfalt +asistent +aspirace +astma +astronom +atlas +atletika +atol +autobus +azyl +babka +bachor +bacil +baculka +badatel +bageta +bagr +bahno +bakterie +balada +baletka +balkon +balonek +balvan +balza +bambus +bankomat +barbar +baret +barman +baroko +barva +baterka +batoh +bavlna +bazalka +bazilika +bazuka +bedna +beran +beseda +bestie +beton +bezinka +bezmoc +beztak +bicykl +bidlo +biftek +bikiny +bilance +biograf +biolog +bitva +bizon +blahobyt +blatouch +blecha +bledule +blesk +blikat +blizna +blokovat +bloudit +blud +bobek +bobr +bodlina +bodnout +bohatost +bojkot +bojovat +bokorys +bolest +borec +borovice +bota +boubel +bouchat +bouda +boule +bourat +boxer +bradavka +brambora +branka +bratr +brepta +briketa +brko +brloh +bronz +broskev +brunetka +brusinka +brzda +brzy +bublina +bubnovat +buchta +buditel +budka +budova +bufet +bujarost +bukvice +buldok +bulva +bunda +bunkr +burza +butik +buvol +buzola +bydlet +bylina +bytovka +bzukot +capart +carevna +cedr +cedule +cejch +cejn +cela +celer +celkem +celnice +cenina +cennost +cenovka +centrum +cenzor +cestopis +cetka +chalupa +chapadlo +charita +chata +chechtat +chemie +chichot +chirurg +chlad +chleba +chlubit +chmel +chmura +chobot +chochol +chodba +cholera +chomout +chopit +choroba +chov +chrapot +chrlit +chrt +chrup +chtivost +chudina +chutnat +chvat +chvilka +chvost +chyba +chystat +chytit +cibule +cigareta +cihelna +cihla +cinkot +cirkus +cisterna +citace +citrus +cizinec +cizost +clona +cokoliv +couvat +ctitel +ctnost +cudnost +cuketa +cukr +cupot +cvaknout +cval +cvik +cvrkot +cyklista +daleko +dareba +datel +datum +dcera +debata +dechovka +decibel +deficit +deflace +dekl +dekret +demokrat +deprese +derby +deska +detektiv +dikobraz +diktovat +dioda +diplom +disk +displej +divadlo +divoch +dlaha +dlouho +dluhopis +dnes +dobro +dobytek +docent +dochutit +dodnes +dohled +dohoda +dohra +dojem +dojnice +doklad +dokola +doktor +dokument +dolar +doleva +dolina +doma +dominant +domluvit +domov +donutit +dopad +dopis +doplnit +doposud +doprovod +dopustit +dorazit +dorost +dort +dosah +doslov +dostatek +dosud +dosyta +dotaz +dotek +dotknout +doufat +doutnat +dovozce +dozadu +doznat +dozorce +drahota +drak +dramatik +dravec +draze +drdol +drobnost +drogerie +drozd +drsnost +drtit +drzost +duben +duchovno +dudek +duha +duhovka +dusit +dusno +dutost +dvojice +dvorec +dynamit +ekolog +ekonomie +elektron +elipsa +email +emise +emoce +empatie +epizoda +epocha +epopej +epos +esej +esence +eskorta +eskymo +etiketa +euforie +evoluce +exekuce +exkurze +expedice +exploze +export +extrakt +facka +fajfka +fakulta +fanatik +fantazie +farmacie +favorit +fazole +federace +fejeton +fenka +fialka +figurant +filozof +filtr +finance +finta +fixace +fjord +flanel +flirt +flotila +fond +fosfor +fotbal +fotka +foton +frakce +freska +fronta +fukar +funkce +fyzika +galeje +garant +genetika +geolog +gilotina +glazura +glejt +golem +golfista +gotika +graf +gramofon +granule +grep +gril +grog +groteska +guma +hadice +hadr +hala +halenka +hanba +hanopis +harfa +harpuna +havran +hebkost +hejkal +hejno +hejtman +hektar +helma +hematom +herec +herna +heslo +hezky +historik +hladovka +hlasivky +hlava +hledat +hlen +hlodavec +hloh +hloupost +hltat +hlubina +hluchota +hmat +hmota +hmyz +hnis +hnojivo +hnout +hoblina +hoboj +hoch +hodiny +hodlat +hodnota +hodovat +hojnost +hokej +holinka +holka +holub +homole +honitba +honorace +horal +horda +horizont +horko +horlivec +hormon +hornina +horoskop +horstvo +hospoda +hostina +hotovost +houba +houf +houpat +houska +hovor +hradba +hranice +hravost +hrazda +hrbolek +hrdina +hrdlo +hrdost +hrnek +hrobka +hromada +hrot +hrouda +hrozen +hrstka +hrubost +hryzat +hubenost +hubnout +hudba +hukot +humr +husita +hustota +hvozd +hybnost +hydrant +hygiena +hymna +hysterik +idylka +ihned +ikona +iluze +imunita +infekce +inflace +inkaso +inovace +inspekce +internet +invalida +investor +inzerce +ironie +jablko +jachta +jahoda +jakmile +jakost +jalovec +jantar +jarmark +jaro +jasan +jasno +jatka +javor +jazyk +jedinec +jedle +jednatel +jehlan +jekot +jelen +jelito +jemnost +jenom +jepice +jeseter +jevit +jezdec +jezero +jinak +jindy +jinoch +jiskra +jistota +jitrnice +jizva +jmenovat +jogurt +jurta +kabaret +kabel +kabinet +kachna +kadet +kadidlo +kahan +kajak +kajuta +kakao +kaktus +kalamita +kalhoty +kalibr +kalnost +kamera +kamkoliv +kamna +kanibal +kanoe +kantor +kapalina +kapela +kapitola +kapka +kaple +kapota +kapr +kapusta +kapybara +karamel +karotka +karton +kasa +katalog +katedra +kauce +kauza +kavalec +kazajka +kazeta +kazivost +kdekoliv +kdesi +kedluben +kemp +keramika +kino +klacek +kladivo +klam +klapot +klasika +klaun +klec +klenba +klepat +klesnout +klid +klima +klisna +klobouk +klokan +klopa +kloub +klubovna +klusat +kluzkost +kmen +kmitat +kmotr +kniha +knot +koalice +koberec +kobka +kobliha +kobyla +kocour +kohout +kojenec +kokos +koktejl +kolaps +koleda +kolize +kolo +komando +kometa +komik +komnata +komora +kompas +komunita +konat +koncept +kondice +konec +konfese +kongres +konina +konkurs +kontakt +konzerva +kopanec +kopie +kopnout +koprovka +korbel +korektor +kormidlo +koroptev +korpus +koruna +koryto +korzet +kosatec +kostka +kotel +kotleta +kotoul +koukat +koupelna +kousek +kouzlo +kovboj +koza +kozoroh +krabice +krach +krajina +kralovat +krasopis +kravata +kredit +krejcar +kresba +kreveta +kriket +kritik +krize +krkavec +krmelec +krmivo +krocan +krok +kronika +kropit +kroupa +krovka +krtek +kruhadlo +krupice +krutost +krvinka +krychle +krypta +krystal +kryt +kudlanka +kufr +kujnost +kukla +kulajda +kulich +kulka +kulomet +kultura +kuna +kupodivu +kurt +kurzor +kutil +kvalita +kvasinka +kvestor +kynolog +kyselina +kytara +kytice +kytka +kytovec +kyvadlo +labrador +lachtan +ladnost +laik +lakomec +lamela +lampa +lanovka +lasice +laso +lastura +latinka +lavina +lebka +leckdy +leden +lednice +ledovka +ledvina +legenda +legie +legrace +lehce +lehkost +lehnout +lektvar +lenochod +lentilka +lepenka +lepidlo +letadlo +letec +letmo +letokruh +levhart +levitace +levobok +libra +lichotka +lidojed +lidskost +lihovina +lijavec +lilek +limetka +linie +linka +linoleum +listopad +litina +litovat +lobista +lodivod +logika +logoped +lokalita +loket +lomcovat +lopata +lopuch +lord +losos +lotr +loudal +louh +louka +louskat +lovec +lstivost +lucerna +lucifer +lump +lusk +lustrace +lvice +lyra +lyrika +lysina +madam +madlo +magistr +mahagon +majetek +majitel +majorita +makak +makovice +makrela +malba +malina +malovat +malvice +maminka +mandle +manko +marnost +masakr +maskot +masopust +matice +matrika +maturita +mazanec +mazivo +mazlit +mazurka +mdloba +mechanik +meditace +medovina +melasa +meloun +mentolka +metla +metoda +metr +mezera +migrace +mihnout +mihule +mikina +mikrofon +milenec +milimetr +milost +mimika +mincovna +minibar +minomet +minulost +miska +mistr +mixovat +mladost +mlha +mlhovina +mlok +mlsat +mluvit +mnich +mnohem +mobil +mocnost +modelka +modlitba +mohyla +mokro +molekula +momentka +monarcha +monokl +monstrum +montovat +monzun +mosaz +moskyt +most +motivace +motorka +motyka +moucha +moudrost +mozaika +mozek +mozol +mramor +mravenec +mrkev +mrtvola +mrzet +mrzutost +mstitel +mudrc +muflon +mulat +mumie +munice +muset +mutace +muzeum +muzikant +myslivec +mzda +nabourat +nachytat +nadace +nadbytek +nadhoz +nadobro +nadpis +nahlas +nahnat +nahodile +nahradit +naivita +najednou +najisto +najmout +naklonit +nakonec +nakrmit +nalevo +namazat +namluvit +nanometr +naoko +naopak +naostro +napadat +napevno +naplnit +napnout +naposled +naprosto +narodit +naruby +narychlo +nasadit +nasekat +naslepo +nastat +natolik +navenek +navrch +navzdory +nazvat +nebe +nechat +necky +nedaleko +nedbat +neduh +negace +nehet +nehoda +nejen +nejprve +neklid +nelibost +nemilost +nemoc +neochota +neonka +nepokoj +nerost +nerv +nesmysl +nesoulad +netvor +neuron +nevina +nezvykle +nicota +nijak +nikam +nikdy +nikl +nikterak +nitro +nocleh +nohavice +nominace +nora +norek +nositel +nosnost +nouze +noviny +novota +nozdra +nuda +nudle +nuget +nutit +nutnost +nutrie +nymfa +obal +obarvit +obava +obdiv +obec +obehnat +obejmout +obezita +obhajoba +obilnice +objasnit +objekt +obklopit +oblast +oblek +obliba +obloha +obluda +obnos +obohatit +obojek +obout +obrazec +obrna +obruba +obrys +obsah +obsluha +obstarat +obuv +obvaz +obvinit +obvod +obvykle +obyvatel +obzor +ocas +ocel +ocenit +ochladit +ochota +ochrana +ocitnout +odboj +odbyt +odchod +odcizit +odebrat +odeslat +odevzdat +odezva +odhadce +odhodit +odjet +odjinud +odkaz +odkoupit +odliv +odluka +odmlka +odolnost +odpad +odpis +odplout +odpor +odpustit +odpykat +odrazka +odsoudit +odstup +odsun +odtok +odtud +odvaha +odveta +odvolat +odvracet +odznak +ofina +ofsajd +ohlas +ohnisko +ohrada +ohrozit +ohryzek +okap +okenice +oklika +okno +okouzlit +okovy +okrasa +okres +okrsek +okruh +okupant +okurka +okusit +olejnina +olizovat +omak +omeleta +omezit +omladina +omlouvat +omluva +omyl +onehdy +opakovat +opasek +operace +opice +opilost +opisovat +opora +opozice +opravdu +oproti +orbital +orchestr +orgie +orlice +orloj +ortel +osada +oschnout +osika +osivo +oslava +oslepit +oslnit +oslovit +osnova +osoba +osolit +ospalec +osten +ostraha +ostuda +ostych +osvojit +oteplit +otisk +otop +otrhat +otrlost +otrok +otruby +otvor +ovanout +ovar +oves +ovlivnit +ovoce +oxid +ozdoba +pachatel +pacient +padouch +pahorek +pakt +palanda +palec +palivo +paluba +pamflet +pamlsek +panenka +panika +panna +panovat +panstvo +pantofle +paprika +parketa +parodie +parta +paruka +paryba +paseka +pasivita +pastelka +patent +patrona +pavouk +pazneht +pazourek +pecka +pedagog +pejsek +peklo +peloton +penalta +pendrek +penze +periskop +pero +pestrost +petarda +petice +petrolej +pevnina +pexeso +pianista +piha +pijavice +pikle +piknik +pilina +pilnost +pilulka +pinzeta +pipeta +pisatel +pistole +pitevna +pivnice +pivovar +placenta +plakat +plamen +planeta +plastika +platit +plavidlo +plaz +plech +plemeno +plenta +ples +pletivo +plevel +plivat +plnit +plno +plocha +plodina +plomba +plout +pluk +plyn +pobavit +pobyt +pochod +pocit +poctivec +podat +podcenit +podepsat +podhled +podivit +podklad +podmanit +podnik +podoba +podpora +podraz +podstata +podvod +podzim +poezie +pohanka +pohnutka +pohovor +pohroma +pohyb +pointa +pojistka +pojmout +pokazit +pokles +pokoj +pokrok +pokuta +pokyn +poledne +polibek +polknout +poloha +polynom +pomalu +pominout +pomlka +pomoc +pomsta +pomyslet +ponechat +ponorka +ponurost +popadat +popel +popisek +poplach +poprosit +popsat +popud +poradce +porce +porod +porucha +poryv +posadit +posed +posila +poskok +poslanec +posoudit +pospolu +postava +posudek +posyp +potah +potkan +potlesk +potomek +potrava +potupa +potvora +poukaz +pouto +pouzdro +povaha +povidla +povlak +povoz +povrch +povstat +povyk +povzdech +pozdrav +pozemek +poznatek +pozor +pozvat +pracovat +prahory +praktika +prales +praotec +praporek +prase +pravda +princip +prkno +probudit +procento +prodej +profese +prohra +projekt +prolomit +promile +pronikat +propad +prorok +prosba +proton +proutek +provaz +prskavka +prsten +prudkost +prut +prvek +prvohory +psanec +psovod +pstruh +ptactvo +puberta +puch +pudl +pukavec +puklina +pukrle +pult +pumpa +punc +pupen +pusa +pusinka +pustina +putovat +putyka +pyramida +pysk +pytel +racek +rachot +radiace +radnice +radon +raft +ragby +raketa +rakovina +rameno +rampouch +rande +rarach +rarita +rasovna +rastr +ratolest +razance +razidlo +reagovat +reakce +recept +redaktor +referent +reflex +rejnok +reklama +rekord +rekrut +rektor +reputace +revize +revma +revolver +rezerva +riskovat +riziko +robotika +rodokmen +rohovka +rokle +rokoko +romaneto +ropovod +ropucha +rorejs +rosol +rostlina +rotmistr +rotoped +rotunda +roubenka +roucho +roup +roura +rovina +rovnice +rozbor +rozchod +rozdat +rozeznat +rozhodce +rozinka +rozjezd +rozkaz +rozloha +rozmar +rozpad +rozruch +rozsah +roztok +rozum +rozvod +rubrika +ruchadlo +rukavice +rukopis +ryba +rybolov +rychlost +rydlo +rypadlo +rytina +ryzost +sadista +sahat +sako +samec +samizdat +samota +sanitka +sardinka +sasanka +satelit +sazba +sazenice +sbor +schovat +sebranka +secese +sedadlo +sediment +sedlo +sehnat +sejmout +sekera +sekta +sekunda +sekvoje +semeno +seno +servis +sesadit +seshora +seskok +seslat +sestra +sesuv +sesypat +setba +setina +setkat +setnout +setrvat +sever +seznam +shoda +shrnout +sifon +silnice +sirka +sirotek +sirup +situace +skafandr +skalisko +skanzen +skaut +skeptik +skica +skladba +sklenice +sklo +skluz +skoba +skokan +skoro +skripta +skrz +skupina +skvost +skvrna +slabika +sladidlo +slanina +slast +slavnost +sledovat +slepec +sleva +slezina +slib +slina +sliznice +slon +sloupek +slovo +sluch +sluha +slunce +slupka +slza +smaragd +smetana +smilstvo +smlouva +smog +smrad +smrk +smrtka +smutek +smysl +snad +snaha +snob +sobota +socha +sodovka +sokol +sopka +sotva +souboj +soucit +soudce +souhlas +soulad +soumrak +souprava +soused +soutok +souviset +spalovna +spasitel +spis +splav +spodek +spojenec +spolu +sponzor +spornost +spousta +sprcha +spustit +sranda +sraz +srdce +srna +srnec +srovnat +srpen +srst +srub +stanice +starosta +statika +stavba +stehno +stezka +stodola +stolek +stopa +storno +stoupat +strach +stres +strhnout +strom +struna +studna +stupnice +stvol +styk +subjekt +subtropy +suchar +sudost +sukno +sundat +sunout +surikata +surovina +svah +svalstvo +svetr +svatba +svazek +svisle +svitek +svoboda +svodidlo +svorka +svrab +sykavka +sykot +synek +synovec +sypat +sypkost +syrovost +sysel +sytost +tabletka +tabule +tahoun +tajemno +tajfun +tajga +tajit +tajnost +taktika +tamhle +tampon +tancovat +tanec +tanker +tapeta +tavenina +tazatel +technika +tehdy +tekutina +telefon +temnota +tendence +tenista +tenor +teplota +tepna +teprve +terapie +termoska +textil +ticho +tiskopis +titulek +tkadlec +tkanina +tlapka +tleskat +tlukot +tlupa +tmel +toaleta +topinka +topol +torzo +touha +toulec +tradice +traktor +tramp +trasa +traverza +trefit +trest +trezor +trhavina +trhlina +trochu +trojice +troska +trouba +trpce +trpitel +trpkost +trubec +truchlit +truhlice +trus +trvat +tudy +tuhnout +tuhost +tundra +turista +turnaj +tuzemsko +tvaroh +tvorba +tvrdost +tvrz +tygr +tykev +ubohost +uboze +ubrat +ubrousek +ubrus +ubytovna +ucho +uctivost +udivit +uhradit +ujednat +ujistit +ujmout +ukazatel +uklidnit +uklonit +ukotvit +ukrojit +ulice +ulita +ulovit +umyvadlo +unavit +uniforma +uniknout +upadnout +uplatnit +uplynout +upoutat +upravit +uran +urazit +usednout +usilovat +usmrtit +usnadnit +usnout +usoudit +ustlat +ustrnout +utahovat +utkat +utlumit +utonout +utopenec +utrousit +uvalit +uvolnit +uvozovka +uzdravit +uzel +uzenina +uzlina +uznat +vagon +valcha +valoun +vana +vandal +vanilka +varan +varhany +varovat +vcelku +vchod +vdova +vedro +vegetace +vejce +velbloud +veletrh +velitel +velmoc +velryba +venkov +veranda +verze +veselka +veskrze +vesnice +vespodu +vesta +veterina +veverka +vibrace +vichr +videohra +vidina +vidle +vila +vinice +viset +vitalita +vize +vizitka +vjezd +vklad +vkus +vlajka +vlak +vlasec +vlevo +vlhkost +vliv +vlnovka +vloupat +vnucovat +vnuk +voda +vodivost +vodoznak +vodstvo +vojensky +vojna +vojsko +volant +volba +volit +volno +voskovka +vozidlo +vozovna +vpravo +vrabec +vracet +vrah +vrata +vrba +vrcholek +vrhat +vrstva +vrtule +vsadit +vstoupit +vstup +vtip +vybavit +vybrat +vychovat +vydat +vydra +vyfotit +vyhledat +vyhnout +vyhodit +vyhradit +vyhubit +vyjasnit +vyjet +vyjmout +vyklopit +vykonat +vylekat +vymazat +vymezit +vymizet +vymyslet +vynechat +vynikat +vynutit +vypadat +vyplatit +vypravit +vypustit +vyrazit +vyrovnat +vyrvat +vyslovit +vysoko +vystavit +vysunout +vysypat +vytasit +vytesat +vytratit +vyvinout +vyvolat +vyvrhel +vyzdobit +vyznat +vzadu +vzbudit +vzchopit +vzdor +vzduch +vzdychat +vzestup +vzhledem +vzkaz +vzlykat +vznik +vzorek +vzpoura +vztah +vztek +xylofon +zabrat +zabydlet +zachovat +zadarmo +zadusit +zafoukat +zahltit +zahodit +zahrada +zahynout +zajatec +zajet +zajistit +zaklepat +zakoupit +zalepit +zamezit +zamotat +zamyslet +zanechat +zanikat +zaplatit +zapojit +zapsat +zarazit +zastavit +zasunout +zatajit +zatemnit +zatknout +zaujmout +zavalit +zavelet +zavinit +zavolat +zavrtat +zazvonit +zbavit +zbrusu +zbudovat +zbytek +zdaleka +zdarma +zdatnost +zdivo +zdobit +zdroj +zdvih +zdymadlo +zelenina +zeman +zemina +zeptat +zezadu +zezdola +zhatit +zhltnout +zhluboka +zhotovit +zhruba +zima +zimnice +zjemnit +zklamat +zkoumat +zkratka +zkumavka +zlato +zlehka +zloba +zlom +zlost +zlozvyk +zmapovat +zmar +zmatek +zmije +zmizet +zmocnit +zmodrat +zmrzlina +zmutovat +znak +znalost +znamenat +znovu +zobrazit +zotavit +zoubek +zoufale +zplodit +zpomalit +zprava +zprostit +zprudka +zprvu +zrada +zranit +zrcadlo +zrnitost +zrno +zrovna +zrychlit +zrzavost +zticha +ztratit +zubovina +zubr +zvednout +zvenku +zvesela +zvon +zvrat +zvukovod +zvyk \ No newline at end of file diff --git a/app/src/test/resources/it-BIP39Words.txt b/app/src/test/resources/it-BIP39Words.txt new file mode 100644 index 000000000..e72be893e --- /dev/null +++ b/app/src/test/resources/it-BIP39Words.txt @@ -0,0 +1,2048 @@ +abaco +abbaglio +abbinato +abete +abisso +abolire +abrasivo +abrogato +accadere +accenno +accusato +acetone +achille +acido +acqua +acre +acrilico +acrobata +acuto +adagio +addebito +addome +adeguato +aderire +adipe +adottare +adulare +affabile +affetto +affisso +affranto +aforisma +afoso +africano +agave +agente +agevole +aggancio +agire +agitare +agonismo +agricolo +agrumeto +aguzzo +alabarda +alato +albatro +alberato +albo +albume +alce +alcolico +alettone +alfa +algebra +aliante +alibi +alimento +allagato +allegro +allievo +allodola +allusivo +almeno +alogeno +alpaca +alpestre +altalena +alterno +alticcio +altrove +alunno +alveolo +alzare +amalgama +amanita +amarena +ambito +ambrato +ameba +america +ametista +amico +ammasso +ammenda +ammirare +ammonito +amore +ampio +ampliare +amuleto +anacardo +anagrafe +analista +anarchia +anatra +anca +ancella +ancora +andare +andrea +anello +angelo +angolare +angusto +anima +annegare +annidato +anno +annuncio +anonimo +anticipo +anzi +apatico +apertura +apode +apparire +appetito +appoggio +approdo +appunto +aprile +arabica +arachide +aragosta +araldica +arancio +aratura +arazzo +arbitro +archivio +ardito +arenile +argento +argine +arguto +aria +armonia +arnese +arredato +arringa +arrosto +arsenico +arso +artefice +arzillo +asciutto +ascolto +asepsi +asettico +asfalto +asino +asola +aspirato +aspro +assaggio +asse +assoluto +assurdo +asta +astenuto +astice +astratto +atavico +ateismo +atomico +atono +attesa +attivare +attorno +attrito +attuale +ausilio +austria +autista +autonomo +autunno +avanzato +avere +avvenire +avviso +avvolgere +azione +azoto +azzimo +azzurro +babele +baccano +bacino +baco +badessa +badilata +bagnato +baita +balcone +baldo +balena +ballata +balzano +bambino +bandire +baraonda +barbaro +barca +baritono +barlume +barocco +basilico +basso +batosta +battuto +baule +bava +bavosa +becco +beffa +belgio +belva +benda +benevole +benigno +benzina +bere +berlina +beta +bibita +bici +bidone +bifido +biga +bilancia +bimbo +binocolo +biologo +bipede +bipolare +birbante +birra +biscotto +bisesto +bisnonno +bisonte +bisturi +bizzarro +blando +blatta +bollito +bonifico +bordo +bosco +botanico +bottino +bozzolo +braccio +bradipo +brama +branca +bravura +bretella +brevetto +brezza +briglia +brillante +brindare +broccolo +brodo +bronzina +brullo +bruno +bubbone +buca +budino +buffone +buio +bulbo +buono +burlone +burrasca +bussola +busta +cadetto +caduco +calamaro +calcolo +calesse +calibro +calmo +caloria +cambusa +camerata +camicia +cammino +camola +campale +canapa +candela +cane +canino +canotto +cantina +capace +capello +capitolo +capogiro +cappero +capra +capsula +carapace +carcassa +cardo +carisma +carovana +carretto +cartolina +casaccio +cascata +caserma +caso +cassone +castello +casuale +catasta +catena +catrame +cauto +cavillo +cedibile +cedrata +cefalo +celebre +cellulare +cena +cenone +centesimo +ceramica +cercare +certo +cerume +cervello +cesoia +cespo +ceto +chela +chiaro +chicca +chiedere +chimera +china +chirurgo +chitarra +ciao +ciclismo +cifrare +cigno +cilindro +ciottolo +circa +cirrosi +citrico +cittadino +ciuffo +civetta +civile +classico +clinica +cloro +cocco +codardo +codice +coerente +cognome +collare +colmato +colore +colposo +coltivato +colza +coma +cometa +commando +comodo +computer +comune +conciso +condurre +conferma +congelare +coniuge +connesso +conoscere +consumo +continuo +convegno +coperto +copione +coppia +copricapo +corazza +cordata +coricato +cornice +corolla +corpo +corredo +corsia +cortese +cosmico +costante +cottura +covato +cratere +cravatta +creato +credere +cremoso +crescita +creta +criceto +crinale +crisi +critico +croce +cronaca +crostata +cruciale +crusca +cucire +cuculo +cugino +cullato +cupola +curatore +cursore +curvo +cuscino +custode +dado +daino +dalmata +damerino +daniela +dannoso +danzare +datato +davanti +davvero +debutto +decennio +deciso +declino +decollo +decreto +dedicato +definito +deforme +degno +delegare +delfino +delirio +delta +demenza +denotato +dentro +deposito +derapata +derivare +deroga +descritto +deserto +desiderio +desumere +detersivo +devoto +diametro +dicembre +diedro +difeso +diffuso +digerire +digitale +diluvio +dinamico +dinnanzi +dipinto +diploma +dipolo +diradare +dire +dirotto +dirupo +disagio +discreto +disfare +disgelo +disposto +distanza +disumano +dito +divano +divelto +dividere +divorato +doblone +docente +doganale +dogma +dolce +domato +domenica +dominare +dondolo +dono +dormire +dote +dottore +dovuto +dozzina +drago +druido +dubbio +dubitare +ducale +duna +duomo +duplice +duraturo +ebano +eccesso +ecco +eclissi +economia +edera +edicola +edile +editoria +educare +egemonia +egli +egoismo +egregio +elaborato +elargire +elegante +elencato +eletto +elevare +elfico +elica +elmo +elsa +eluso +emanato +emblema +emesso +emiro +emotivo +emozione +empirico +emulo +endemico +enduro +energia +enfasi +enoteca +entrare +enzima +epatite +epilogo +episodio +epocale +eppure +equatore +erario +erba +erboso +erede +eremita +erigere +ermetico +eroe +erosivo +errante +esagono +esame +esanime +esaudire +esca +esempio +esercito +esibito +esigente +esistere +esito +esofago +esortato +esoso +espanso +espresso +essenza +esso +esteso +estimare +estonia +estroso +esultare +etilico +etnico +etrusco +etto +euclideo +europa +evaso +evidenza +evitato +evoluto +evviva +fabbrica +faccenda +fachiro +falco +famiglia +fanale +fanfara +fango +fantasma +fare +farfalla +farinoso +farmaco +fascia +fastoso +fasullo +faticare +fato +favoloso +febbre +fecola +fede +fegato +felpa +feltro +femmina +fendere +fenomeno +fermento +ferro +fertile +fessura +festivo +fetta +feudo +fiaba +fiducia +fifa +figurato +filo +finanza +finestra +finire +fiore +fiscale +fisico +fiume +flacone +flamenco +flebo +flemma +florido +fluente +fluoro +fobico +focaccia +focoso +foderato +foglio +folata +folclore +folgore +fondente +fonetico +fonia +fontana +forbito +forchetta +foresta +formica +fornaio +foro +fortezza +forzare +fosfato +fosso +fracasso +frana +frassino +fratello +freccetta +frenata +fresco +frigo +frollino +fronde +frugale +frutta +fucilata +fucsia +fuggente +fulmine +fulvo +fumante +fumetto +fumoso +fune +funzione +fuoco +furbo +furgone +furore +fuso +futile +gabbiano +gaffe +galateo +gallina +galoppo +gambero +gamma +garanzia +garbo +garofano +garzone +gasdotto +gasolio +gastrico +gatto +gaudio +gazebo +gazzella +geco +gelatina +gelso +gemello +gemmato +gene +genitore +gennaio +genotipo +gergo +ghepardo +ghiaccio +ghisa +giallo +gilda +ginepro +giocare +gioiello +giorno +giove +girato +girone +gittata +giudizio +giurato +giusto +globulo +glutine +gnomo +gobba +golf +gomito +gommone +gonfio +gonna +governo +gracile +grado +grafico +grammo +grande +grattare +gravoso +grazia +greca +gregge +grifone +grigio +grinza +grotta +gruppo +guadagno +guaio +guanto +guardare +gufo +guidare +ibernato +icona +identico +idillio +idolo +idra +idrico +idrogeno +igiene +ignaro +ignorato +ilare +illeso +illogico +illudere +imballo +imbevuto +imbocco +imbuto +immane +immerso +immolato +impacco +impeto +impiego +importo +impronta +inalare +inarcare +inattivo +incanto +incendio +inchino +incisivo +incluso +incontro +incrocio +incubo +indagine +india +indole +inedito +infatti +infilare +inflitto +ingaggio +ingegno +inglese +ingordo +ingrosso +innesco +inodore +inoltrare +inondato +insano +insetto +insieme +insonnia +insulina +intasato +intero +intonaco +intuito +inumidire +invalido +invece +invito +iperbole +ipnotico +ipotesi +ippica +iride +irlanda +ironico +irrigato +irrorare +isolato +isotopo +isterico +istituto +istrice +italia +iterare +labbro +labirinto +lacca +lacerato +lacrima +lacuna +laddove +lago +lampo +lancetta +lanterna +lardoso +larga +laringe +lastra +latenza +latino +lattuga +lavagna +lavoro +legale +leggero +lembo +lentezza +lenza +leone +lepre +lesivo +lessato +lesto +letterale +leva +levigato +libero +lido +lievito +lilla +limatura +limitare +limpido +lineare +lingua +liquido +lira +lirica +lisca +lite +litigio +livrea +locanda +lode +logica +lombare +londra +longevo +loquace +lorenzo +loto +lotteria +luce +lucidato +lumaca +luminoso +lungo +lupo +luppolo +lusinga +lusso +lutto +macabro +macchina +macero +macinato +madama +magico +maglia +magnete +magro +maiolica +malafede +malgrado +malinteso +malsano +malto +malumore +mana +mancia +mandorla +mangiare +manifesto +mannaro +manovra +mansarda +mantide +manubrio +mappa +maratona +marcire +maretta +marmo +marsupio +maschera +massaia +mastino +materasso +matricola +mattone +maturo +mazurca +meandro +meccanico +mecenate +medesimo +meditare +mega +melassa +melis +melodia +meninge +meno +mensola +mercurio +merenda +merlo +meschino +mese +messere +mestolo +metallo +metodo +mettere +miagolare +mica +micelio +michele +microbo +midollo +miele +migliore +milano +milite +mimosa +minerale +mini +minore +mirino +mirtillo +miscela +missiva +misto +misurare +mitezza +mitigare +mitra +mittente +mnemonico +modello +modifica +modulo +mogano +mogio +mole +molosso +monastero +monco +mondina +monetario +monile +monotono +monsone +montato +monviso +mora +mordere +morsicato +mostro +motivato +motosega +motto +movenza +movimento +mozzo +mucca +mucosa +muffa +mughetto +mugnaio +mulatto +mulinello +multiplo +mummia +munto +muovere +murale +musa +muscolo +musica +mutevole +muto +nababbo +nafta +nanometro +narciso +narice +narrato +nascere +nastrare +naturale +nautica +naviglio +nebulosa +necrosi +negativo +negozio +nemmeno +neofita +neretto +nervo +nessuno +nettuno +neutrale +neve +nevrotico +nicchia +ninfa +nitido +nobile +nocivo +nodo +nome +nomina +nordico +normale +norvegese +nostrano +notare +notizia +notturno +novella +nucleo +nulla +numero +nuovo +nutrire +nuvola +nuziale +oasi +obbedire +obbligo +obelisco +oblio +obolo +obsoleto +occasione +occhio +occidente +occorrere +occultare +ocra +oculato +odierno +odorare +offerta +offrire +offuscato +oggetto +oggi +ognuno +olandese +olfatto +oliato +oliva +ologramma +oltre +omaggio +ombelico +ombra +omega +omissione +ondoso +onere +onice +onnivoro +onorevole +onta +operato +opinione +opposto +oracolo +orafo +ordine +orecchino +orefice +orfano +organico +origine +orizzonte +orma +ormeggio +ornativo +orologio +orrendo +orribile +ortensia +ortica +orzata +orzo +osare +oscurare +osmosi +ospedale +ospite +ossa +ossidare +ostacolo +oste +otite +otre +ottagono +ottimo +ottobre +ovale +ovest +ovino +oviparo +ovocito +ovunque +ovviare +ozio +pacchetto +pace +pacifico +padella +padrone +paese +paga +pagina +palazzina +palesare +pallido +palo +palude +pandoro +pannello +paolo +paonazzo +paprica +parabola +parcella +parere +pargolo +pari +parlato +parola +partire +parvenza +parziale +passivo +pasticca +patacca +patologia +pattume +pavone +peccato +pedalare +pedonale +peggio +peloso +penare +pendice +penisola +pennuto +penombra +pensare +pentola +pepe +pepita +perbene +percorso +perdonato +perforare +pergamena +periodo +permesso +perno +perplesso +persuaso +pertugio +pervaso +pesatore +pesista +peso +pestifero +petalo +pettine +petulante +pezzo +piacere +pianta +piattino +piccino +picozza +piega +pietra +piffero +pigiama +pigolio +pigro +pila +pilifero +pillola +pilota +pimpante +pineta +pinna +pinolo +pioggia +piombo +piramide +piretico +pirite +pirolisi +pitone +pizzico +placebo +planare +plasma +platano +plenario +pochezza +poderoso +podismo +poesia +poggiare +polenta +poligono +pollice +polmonite +polpetta +polso +poltrona +polvere +pomice +pomodoro +ponte +popoloso +porfido +poroso +porpora +porre +portata +posa +positivo +possesso +postulato +potassio +potere +pranzo +prassi +pratica +precluso +predica +prefisso +pregiato +prelievo +premere +prenotare +preparato +presenza +pretesto +prevalso +prima +principe +privato +problema +procura +produrre +profumo +progetto +prolunga +promessa +pronome +proposta +proroga +proteso +prova +prudente +prugna +prurito +psiche +pubblico +pudica +pugilato +pugno +pulce +pulito +pulsante +puntare +pupazzo +pupilla +puro +quadro +qualcosa +quasi +querela +quota +raccolto +raddoppio +radicale +radunato +raffica +ragazzo +ragione +ragno +ramarro +ramingo +ramo +randagio +rantolare +rapato +rapina +rappreso +rasatura +raschiato +rasente +rassegna +rastrello +rata +ravveduto +reale +recepire +recinto +recluta +recondito +recupero +reddito +redimere +regalato +registro +regola +regresso +relazione +remare +remoto +renna +replica +reprimere +reputare +resa +residente +responso +restauro +rete +retina +retorica +rettifica +revocato +riassunto +ribadire +ribelle +ribrezzo +ricarica +ricco +ricevere +riciclato +ricordo +ricreduto +ridicolo +ridurre +rifasare +riflesso +riforma +rifugio +rigare +rigettato +righello +rilassato +rilevato +rimanere +rimbalzo +rimedio +rimorchio +rinascita +rincaro +rinforzo +rinnovo +rinomato +rinsavito +rintocco +rinuncia +rinvenire +riparato +ripetuto +ripieno +riportare +ripresa +ripulire +risata +rischio +riserva +risibile +riso +rispetto +ristoro +risultato +risvolto +ritardo +ritegno +ritmico +ritrovo +riunione +riva +riverso +rivincita +rivolto +rizoma +roba +robotico +robusto +roccia +roco +rodaggio +rodere +roditore +rogito +rollio +romantico +rompere +ronzio +rosolare +rospo +rotante +rotondo +rotula +rovescio +rubizzo +rubrica +ruga +rullino +rumine +rumoroso +ruolo +rupe +russare +rustico +sabato +sabbiare +sabotato +sagoma +salasso +saldatura +salgemma +salivare +salmone +salone +saltare +saluto +salvo +sapere +sapido +saporito +saraceno +sarcasmo +sarto +sassoso +satellite +satira +satollo +saturno +savana +savio +saziato +sbadiglio +sbalzo +sbancato +sbarra +sbattere +sbavare +sbendare +sbirciare +sbloccato +sbocciato +sbrinare +sbruffone +sbuffare +scabroso +scadenza +scala +scambiare +scandalo +scapola +scarso +scatenare +scavato +scelto +scenico +scettro +scheda +schiena +sciarpa +scienza +scindere +scippo +sciroppo +scivolo +sclerare +scodella +scolpito +scomparto +sconforto +scoprire +scorta +scossone +scozzese +scriba +scrollare +scrutinio +scuderia +scultore +scuola +scuro +scusare +sdebitare +sdoganare +seccatura +secondo +sedano +seggiola +segnalato +segregato +seguito +selciato +selettivo +sella +selvaggio +semaforo +sembrare +seme +seminato +sempre +senso +sentire +sepolto +sequenza +serata +serbato +sereno +serio +serpente +serraglio +servire +sestina +setola +settimana +sfacelo +sfaldare +sfamato +sfarzoso +sfaticato +sfera +sfida +sfilato +sfinge +sfocato +sfoderare +sfogo +sfoltire +sforzato +sfratto +sfruttato +sfuggito +sfumare +sfuso +sgabello +sgarbato +sgonfiare +sgorbio +sgrassato +sguardo +sibilo +siccome +sierra +sigla +signore +silenzio +sillaba +simbolo +simpatico +simulato +sinfonia +singolo +sinistro +sino +sintesi +sinusoide +sipario +sisma +sistole +situato +slitta +slogatura +sloveno +smarrito +smemorato +smentito +smeraldo +smilzo +smontare +smottato +smussato +snellire +snervato +snodo +sobbalzo +sobrio +soccorso +sociale +sodale +soffitto +sogno +soldato +solenne +solido +sollazzo +solo +solubile +solvente +somatico +somma +sonda +sonetto +sonnifero +sopire +soppeso +sopra +sorgere +sorpasso +sorriso +sorso +sorteggio +sorvolato +sospiro +sosta +sottile +spada +spalla +spargere +spatola +spavento +spazzola +specie +spedire +spegnere +spelatura +speranza +spessore +spettrale +spezzato +spia +spigoloso +spillato +spinoso +spirale +splendido +sportivo +sposo +spranga +sprecare +spronato +spruzzo +spuntino +squillo +sradicare +srotolato +stabile +stacco +staffa +stagnare +stampato +stantio +starnuto +stasera +statuto +stelo +steppa +sterzo +stiletto +stima +stirpe +stivale +stizzoso +stonato +storico +strappo +stregato +stridulo +strozzare +strutto +stuccare +stufo +stupendo +subentro +succoso +sudore +suggerito +sugo +sultano +suonare +superbo +supporto +surgelato +surrogato +sussurro +sutura +svagare +svedese +sveglio +svelare +svenuto +svezia +sviluppo +svista +svizzera +svolta +svuotare +tabacco +tabulato +tacciare +taciturno +tale +talismano +tampone +tannino +tara +tardivo +targato +tariffa +tarpare +tartaruga +tasto +tattico +taverna +tavolata +tazza +teca +tecnico +telefono +temerario +tempo +temuto +tendone +tenero +tensione +tentacolo +teorema +terme +terrazzo +terzetto +tesi +tesserato +testato +tetro +tettoia +tifare +tigella +timbro +tinto +tipico +tipografo +tiraggio +tiro +titanio +titolo +titubante +tizio +tizzone +toccare +tollerare +tolto +tombola +tomo +tonfo +tonsilla +topazio +topologia +toppa +torba +tornare +torrone +tortora +toscano +tossire +tostatura +totano +trabocco +trachea +trafila +tragedia +tralcio +tramonto +transito +trapano +trarre +trasloco +trattato +trave +treccia +tremolio +trespolo +tributo +tricheco +trifoglio +trillo +trincea +trio +tristezza +triturato +trivella +tromba +trono +troppo +trottola +trovare +truccato +tubatura +tuffato +tulipano +tumulto +tunisia +turbare +turchino +tuta +tutela +ubicato +uccello +uccisore +udire +uditivo +uffa +ufficio +uguale +ulisse +ultimato +umano +umile +umorismo +uncinetto +ungere +ungherese +unicorno +unificato +unisono +unitario +unte +uovo +upupa +uragano +urgenza +urlo +usanza +usato +uscito +usignolo +usuraio +utensile +utilizzo +utopia +vacante +vaccinato +vagabondo +vagliato +valanga +valgo +valico +valletta +valoroso +valutare +valvola +vampata +vangare +vanitoso +vano +vantaggio +vanvera +vapore +varano +varcato +variante +vasca +vedetta +vedova +veduto +vegetale +veicolo +velcro +velina +velluto +veloce +venato +vendemmia +vento +verace +verbale +vergogna +verifica +vero +verruca +verticale +vescica +vessillo +vestale +veterano +vetrina +vetusto +viandante +vibrante +vicenda +vichingo +vicinanza +vidimare +vigilia +vigneto +vigore +vile +villano +vimini +vincitore +viola +vipera +virgola +virologo +virulento +viscoso +visione +vispo +vissuto +visura +vita +vitello +vittima +vivanda +vivido +viziare +voce +voga +volatile +volere +volpe +voragine +vulcano +zampogna +zanna +zappato +zattera +zavorra +zefiro +zelante +zelo +zenzero +zerbino +zibetto +zinco +zircone +zitto +zolla +zotico +zucchero +zufolo +zulu +zuppa \ No newline at end of file diff --git a/app/src/test/resources/ko-BIP39Words.txt b/app/src/test/resources/ko-BIP39Words.txt new file mode 100644 index 000000000..77fadf532 --- /dev/null +++ b/app/src/test/resources/ko-BIP39Words.txt @@ -0,0 +1,2048 @@ +가격 +가끔 +가난 +가능 +가득 +가르침 +가뭄 +가방 +가상 +가슴 +가운데 +가을 +가이드 +가입 +가장 +가정 +가족 +가죽 +각오 +각자 +간격 +간부 +간섭 +간장 +간접 +간판 +갈등 +갈비 +갈색 +갈증 +감각 +감기 +감소 +감수성 +감자 +감정 +갑자기 +강남 +강당 +강도 +강력히 +강변 +강북 +강사 +강수량 +강아지 +강원도 +강의 +강제 +강조 +같이 +개구리 +개나리 +개방 +개별 +개선 +개성 +개인 +객관적 +거실 +거액 +거울 +거짓 +거품 +걱정 +건강 +건물 +건설 +건조 +건축 +걸음 +검사 +검토 +게시판 +게임 +겨울 +견해 +결과 +결국 +결론 +결석 +결승 +결심 +결정 +결혼 +경계 +경고 +경기 +경력 +경복궁 +경비 +경상도 +경영 +경우 +경쟁 +경제 +경주 +경찰 +경치 +경향 +경험 +계곡 +계단 +계란 +계산 +계속 +계약 +계절 +계층 +계획 +고객 +고구려 +고궁 +고급 +고등학생 +고무신 +고민 +고양이 +고장 +고전 +고집 +고춧가루 +고통 +고향 +곡식 +골목 +골짜기 +골프 +공간 +공개 +공격 +공군 +공급 +공기 +공동 +공무원 +공부 +공사 +공식 +공업 +공연 +공원 +공장 +공짜 +공책 +공통 +공포 +공항 +공휴일 +과목 +과일 +과장 +과정 +과학 +관객 +관계 +관광 +관념 +관람 +관련 +관리 +관습 +관심 +관점 +관찰 +광경 +광고 +광장 +광주 +괴로움 +굉장히 +교과서 +교문 +교복 +교실 +교양 +교육 +교장 +교직 +교통 +교환 +교훈 +구경 +구름 +구멍 +구별 +구분 +구석 +구성 +구속 +구역 +구입 +구청 +구체적 +국가 +국기 +국내 +국립 +국물 +국민 +국수 +국어 +국왕 +국적 +국제 +국회 +군대 +군사 +군인 +궁극적 +권리 +권위 +권투 +귀국 +귀신 +규정 +규칙 +균형 +그날 +그냥 +그늘 +그러나 +그룹 +그릇 +그림 +그제서야 +그토록 +극복 +극히 +근거 +근교 +근래 +근로 +근무 +근본 +근원 +근육 +근처 +글씨 +글자 +금강산 +금고 +금년 +금메달 +금액 +금연 +금요일 +금지 +긍정적 +기간 +기관 +기념 +기능 +기독교 +기둥 +기록 +기름 +기법 +기본 +기분 +기쁨 +기숙사 +기술 +기억 +기업 +기온 +기운 +기원 +기적 +기준 +기침 +기혼 +기획 +긴급 +긴장 +길이 +김밥 +김치 +김포공항 +깍두기 +깜빡 +깨달음 +깨소금 +껍질 +꼭대기 +꽃잎 +나들이 +나란히 +나머지 +나물 +나침반 +나흘 +낙엽 +난방 +날개 +날씨 +날짜 +남녀 +남대문 +남매 +남산 +남자 +남편 +남학생 +낭비 +낱말 +내년 +내용 +내일 +냄비 +냄새 +냇물 +냉동 +냉면 +냉방 +냉장고 +넥타이 +넷째 +노동 +노란색 +노력 +노인 +녹음 +녹차 +녹화 +논리 +논문 +논쟁 +놀이 +농구 +농담 +농민 +농부 +농업 +농장 +농촌 +높이 +눈동자 +눈물 +눈썹 +뉴욕 +느낌 +늑대 +능동적 +능력 +다방 +다양성 +다음 +다이어트 +다행 +단계 +단골 +단독 +단맛 +단순 +단어 +단위 +단점 +단체 +단추 +단편 +단풍 +달걀 +달러 +달력 +달리 +닭고기 +담당 +담배 +담요 +담임 +답변 +답장 +당근 +당분간 +당연히 +당장 +대규모 +대낮 +대단히 +대답 +대도시 +대략 +대량 +대륙 +대문 +대부분 +대신 +대응 +대장 +대전 +대접 +대중 +대책 +대출 +대충 +대통령 +대학 +대한민국 +대합실 +대형 +덩어리 +데이트 +도대체 +도덕 +도둑 +도망 +도서관 +도심 +도움 +도입 +도자기 +도저히 +도전 +도중 +도착 +독감 +독립 +독서 +독일 +독창적 +동화책 +뒷모습 +뒷산 +딸아이 +마누라 +마늘 +마당 +마라톤 +마련 +마무리 +마사지 +마약 +마요네즈 +마을 +마음 +마이크 +마중 +마지막 +마찬가지 +마찰 +마흔 +막걸리 +막내 +막상 +만남 +만두 +만세 +만약 +만일 +만점 +만족 +만화 +많이 +말기 +말씀 +말투 +맘대로 +망원경 +매년 +매달 +매력 +매번 +매스컴 +매일 +매장 +맥주 +먹이 +먼저 +먼지 +멀리 +메일 +며느리 +며칠 +면담 +멸치 +명단 +명령 +명예 +명의 +명절 +명칭 +명함 +모금 +모니터 +모델 +모든 +모범 +모습 +모양 +모임 +모조리 +모집 +모퉁이 +목걸이 +목록 +목사 +목소리 +목숨 +목적 +목표 +몰래 +몸매 +몸무게 +몸살 +몸속 +몸짓 +몸통 +몹시 +무관심 +무궁화 +무더위 +무덤 +무릎 +무슨 +무엇 +무역 +무용 +무조건 +무지개 +무척 +문구 +문득 +문법 +문서 +문제 +문학 +문화 +물가 +물건 +물결 +물고기 +물론 +물리학 +물음 +물질 +물체 +미국 +미디어 +미사일 +미술 +미역 +미용실 +미움 +미인 +미팅 +미혼 +민간 +민족 +민주 +믿음 +밀가루 +밀리미터 +밑바닥 +바가지 +바구니 +바나나 +바늘 +바닥 +바닷가 +바람 +바이러스 +바탕 +박물관 +박사 +박수 +반대 +반드시 +반말 +반발 +반성 +반응 +반장 +반죽 +반지 +반찬 +받침 +발가락 +발걸음 +발견 +발달 +발레 +발목 +발바닥 +발생 +발음 +발자국 +발전 +발톱 +발표 +밤하늘 +밥그릇 +밥맛 +밥상 +밥솥 +방금 +방면 +방문 +방바닥 +방법 +방송 +방식 +방안 +방울 +방지 +방학 +방해 +방향 +배경 +배꼽 +배달 +배드민턴 +백두산 +백색 +백성 +백인 +백제 +백화점 +버릇 +버섯 +버튼 +번개 +번역 +번지 +번호 +벌금 +벌레 +벌써 +범위 +범인 +범죄 +법률 +법원 +법적 +법칙 +베이징 +벨트 +변경 +변동 +변명 +변신 +변호사 +변화 +별도 +별명 +별일 +병실 +병아리 +병원 +보관 +보너스 +보라색 +보람 +보름 +보상 +보안 +보자기 +보장 +보전 +보존 +보통 +보편적 +보험 +복도 +복사 +복숭아 +복습 +볶음 +본격적 +본래 +본부 +본사 +본성 +본인 +본질 +볼펜 +봉사 +봉지 +봉투 +부근 +부끄러움 +부담 +부동산 +부문 +부분 +부산 +부상 +부엌 +부인 +부작용 +부장 +부정 +부족 +부지런히 +부친 +부탁 +부품 +부회장 +북부 +북한 +분노 +분량 +분리 +분명 +분석 +분야 +분위기 +분필 +분홍색 +불고기 +불과 +불교 +불꽃 +불만 +불법 +불빛 +불안 +불이익 +불행 +브랜드 +비극 +비난 +비닐 +비둘기 +비디오 +비로소 +비만 +비명 +비밀 +비바람 +비빔밥 +비상 +비용 +비율 +비중 +비타민 +비판 +빌딩 +빗물 +빗방울 +빗줄기 +빛깔 +빨간색 +빨래 +빨리 +사건 +사계절 +사나이 +사냥 +사람 +사랑 +사립 +사모님 +사물 +사방 +사상 +사생활 +사설 +사슴 +사실 +사업 +사용 +사월 +사장 +사전 +사진 +사촌 +사춘기 +사탕 +사투리 +사흘 +산길 +산부인과 +산업 +산책 +살림 +살인 +살짝 +삼계탕 +삼국 +삼십 +삼월 +삼촌 +상관 +상금 +상대 +상류 +상반기 +상상 +상식 +상업 +상인 +상자 +상점 +상처 +상추 +상태 +상표 +상품 +상황 +새벽 +색깔 +색연필 +생각 +생명 +생물 +생방송 +생산 +생선 +생신 +생일 +생활 +서랍 +서른 +서명 +서민 +서비스 +서양 +서울 +서적 +서점 +서쪽 +서클 +석사 +석유 +선거 +선물 +선배 +선생 +선수 +선원 +선장 +선전 +선택 +선풍기 +설거지 +설날 +설렁탕 +설명 +설문 +설사 +설악산 +설치 +설탕 +섭씨 +성공 +성당 +성명 +성별 +성인 +성장 +성적 +성질 +성함 +세금 +세미나 +세상 +세월 +세종대왕 +세탁 +센터 +센티미터 +셋째 +소규모 +소극적 +소금 +소나기 +소년 +소득 +소망 +소문 +소설 +소속 +소아과 +소용 +소원 +소음 +소중히 +소지품 +소질 +소풍 +소형 +속담 +속도 +속옷 +손가락 +손길 +손녀 +손님 +손등 +손목 +손뼉 +손실 +손질 +손톱 +손해 +솔직히 +솜씨 +송아지 +송이 +송편 +쇠고기 +쇼핑 +수건 +수년 +수단 +수돗물 +수동적 +수면 +수명 +수박 +수상 +수석 +수술 +수시로 +수업 +수염 +수영 +수입 +수준 +수집 +수출 +수컷 +수필 +수학 +수험생 +수화기 +숙녀 +숙소 +숙제 +순간 +순서 +순수 +순식간 +순위 +숟가락 +술병 +술집 +숫자 +스님 +스물 +스스로 +스승 +스웨터 +스위치 +스케이트 +스튜디오 +스트레스 +스포츠 +슬쩍 +슬픔 +습관 +습기 +승객 +승리 +승부 +승용차 +승진 +시각 +시간 +시골 +시금치 +시나리오 +시댁 +시리즈 +시멘트 +시민 +시부모 +시선 +시설 +시스템 +시아버지 +시어머니 +시월 +시인 +시일 +시작 +시장 +시절 +시점 +시중 +시즌 +시집 +시청 +시합 +시험 +식구 +식기 +식당 +식량 +식료품 +식물 +식빵 +식사 +식생활 +식초 +식탁 +식품 +신고 +신규 +신념 +신문 +신발 +신비 +신사 +신세 +신용 +신제품 +신청 +신체 +신화 +실감 +실내 +실력 +실례 +실망 +실수 +실습 +실시 +실장 +실정 +실질적 +실천 +실체 +실컷 +실태 +실패 +실험 +실현 +심리 +심부름 +심사 +심장 +심정 +심판 +쌍둥이 +씨름 +씨앗 +아가씨 +아나운서 +아드님 +아들 +아쉬움 +아스팔트 +아시아 +아울러 +아저씨 +아줌마 +아직 +아침 +아파트 +아프리카 +아픔 +아홉 +아흔 +악기 +악몽 +악수 +안개 +안경 +안과 +안내 +안녕 +안동 +안방 +안부 +안주 +알루미늄 +알코올 +암시 +암컷 +압력 +앞날 +앞문 +애인 +애정 +액수 +앨범 +야간 +야단 +야옹 +약간 +약국 +약속 +약수 +약점 +약품 +약혼녀 +양념 +양력 +양말 +양배추 +양주 +양파 +어둠 +어려움 +어른 +어젯밤 +어쨌든 +어쩌다가 +어쩐지 +언니 +언덕 +언론 +언어 +얼굴 +얼른 +얼음 +얼핏 +엄마 +업무 +업종 +업체 +엉덩이 +엉망 +엉터리 +엊그제 +에너지 +에어컨 +엔진 +여건 +여고생 +여관 +여군 +여권 +여대생 +여덟 +여동생 +여든 +여론 +여름 +여섯 +여성 +여왕 +여인 +여전히 +여직원 +여학생 +여행 +역사 +역시 +역할 +연결 +연구 +연극 +연기 +연락 +연설 +연세 +연속 +연습 +연애 +연예인 +연인 +연장 +연주 +연출 +연필 +연합 +연휴 +열기 +열매 +열쇠 +열심히 +열정 +열차 +열흘 +염려 +엽서 +영국 +영남 +영상 +영양 +영역 +영웅 +영원히 +영하 +영향 +영혼 +영화 +옆구리 +옆방 +옆집 +예감 +예금 +예방 +예산 +예상 +예선 +예술 +예습 +예식장 +예약 +예전 +예절 +예정 +예컨대 +옛날 +오늘 +오락 +오랫동안 +오렌지 +오로지 +오른발 +오븐 +오십 +오염 +오월 +오전 +오직 +오징어 +오페라 +오피스텔 +오히려 +옥상 +옥수수 +온갖 +온라인 +온몸 +온종일 +온통 +올가을 +올림픽 +올해 +옷차림 +와이셔츠 +와인 +완성 +완전 +왕비 +왕자 +왜냐하면 +왠지 +외갓집 +외국 +외로움 +외삼촌 +외출 +외침 +외할머니 +왼발 +왼손 +왼쪽 +요금 +요일 +요즘 +요청 +용기 +용서 +용어 +우산 +우선 +우승 +우연히 +우정 +우체국 +우편 +운동 +운명 +운반 +운전 +운행 +울산 +울음 +움직임 +웃어른 +웃음 +워낙 +원고 +원래 +원서 +원숭이 +원인 +원장 +원피스 +월급 +월드컵 +월세 +월요일 +웨이터 +위반 +위법 +위성 +위원 +위험 +위협 +윗사람 +유난히 +유럽 +유명 +유물 +유산 +유적 +유치원 +유학 +유행 +유형 +육군 +육상 +육십 +육체 +은행 +음력 +음료 +음반 +음성 +음식 +음악 +음주 +의견 +의논 +의문 +의복 +의식 +의심 +의외로 +의욕 +의원 +의학 +이것 +이곳 +이념 +이놈 +이달 +이대로 +이동 +이렇게 +이력서 +이론적 +이름 +이민 +이발소 +이별 +이불 +이빨 +이상 +이성 +이슬 +이야기 +이용 +이웃 +이월 +이윽고 +이익 +이전 +이중 +이튿날 +이틀 +이혼 +인간 +인격 +인공 +인구 +인근 +인기 +인도 +인류 +인물 +인생 +인쇄 +인연 +인원 +인재 +인종 +인천 +인체 +인터넷 +인하 +인형 +일곱 +일기 +일단 +일대 +일등 +일반 +일본 +일부 +일상 +일생 +일손 +일요일 +일월 +일정 +일종 +일주일 +일찍 +일체 +일치 +일행 +일회용 +임금 +임무 +입대 +입력 +입맛 +입사 +입술 +입시 +입원 +입장 +입학 +자가용 +자격 +자극 +자동 +자랑 +자부심 +자식 +자신 +자연 +자원 +자율 +자전거 +자정 +자존심 +자판 +작가 +작년 +작성 +작업 +작용 +작은딸 +작품 +잔디 +잔뜩 +잔치 +잘못 +잠깐 +잠수함 +잠시 +잠옷 +잠자리 +잡지 +장관 +장군 +장기간 +장래 +장례 +장르 +장마 +장면 +장모 +장미 +장비 +장사 +장소 +장식 +장애인 +장인 +장점 +장차 +장학금 +재능 +재빨리 +재산 +재생 +재작년 +재정 +재채기 +재판 +재학 +재활용 +저것 +저고리 +저곳 +저녁 +저런 +저렇게 +저번 +저울 +저절로 +저축 +적극 +적당히 +적성 +적용 +적응 +전개 +전공 +전기 +전달 +전라도 +전망 +전문 +전반 +전부 +전세 +전시 +전용 +전자 +전쟁 +전주 +전철 +전체 +전통 +전혀 +전후 +절대 +절망 +절반 +절약 +절차 +점검 +점수 +점심 +점원 +점점 +점차 +접근 +접시 +접촉 +젓가락 +정거장 +정도 +정류장 +정리 +정말 +정면 +정문 +정반대 +정보 +정부 +정비 +정상 +정성 +정오 +정원 +정장 +정지 +정치 +정확히 +제공 +제과점 +제대로 +제목 +제발 +제법 +제삿날 +제안 +제일 +제작 +제주도 +제출 +제품 +제한 +조각 +조건 +조금 +조깅 +조명 +조미료 +조상 +조선 +조용히 +조절 +조정 +조직 +존댓말 +존재 +졸업 +졸음 +종교 +종로 +종류 +종소리 +종업원 +종종 +종합 +좌석 +죄인 +주관적 +주름 +주말 +주머니 +주먹 +주문 +주민 +주방 +주변 +주식 +주인 +주일 +주장 +주전자 +주택 +준비 +줄거리 +줄기 +줄무늬 +중간 +중계방송 +중국 +중년 +중단 +중독 +중반 +중부 +중세 +중소기업 +중순 +중앙 +중요 +중학교 +즉석 +즉시 +즐거움 +증가 +증거 +증권 +증상 +증세 +지각 +지갑 +지경 +지극히 +지금 +지급 +지능 +지름길 +지리산 +지방 +지붕 +지식 +지역 +지우개 +지원 +지적 +지점 +지진 +지출 +직선 +직업 +직원 +직장 +진급 +진동 +진로 +진료 +진리 +진짜 +진찰 +진출 +진통 +진행 +질문 +질병 +질서 +짐작 +집단 +집안 +집중 +짜증 +찌꺼기 +차남 +차라리 +차량 +차림 +차별 +차선 +차츰 +착각 +찬물 +찬성 +참가 +참기름 +참새 +참석 +참여 +참외 +참조 +찻잔 +창가 +창고 +창구 +창문 +창밖 +창작 +창조 +채널 +채점 +책가방 +책방 +책상 +책임 +챔피언 +처벌 +처음 +천국 +천둥 +천장 +천재 +천천히 +철도 +철저히 +철학 +첫날 +첫째 +청년 +청바지 +청소 +청춘 +체계 +체력 +체온 +체육 +체중 +체험 +초등학생 +초반 +초밥 +초상화 +초순 +초여름 +초원 +초저녁 +초점 +초청 +초콜릿 +촛불 +총각 +총리 +총장 +촬영 +최근 +최상 +최선 +최신 +최악 +최종 +추석 +추억 +추진 +추천 +추측 +축구 +축소 +축제 +축하 +출근 +출발 +출산 +출신 +출연 +출입 +출장 +출판 +충격 +충고 +충돌 +충분히 +충청도 +취업 +취직 +취향 +치약 +친구 +친척 +칠십 +칠월 +칠판 +침대 +침묵 +침실 +칫솔 +칭찬 +카메라 +카운터 +칼국수 +캐릭터 +캠퍼스 +캠페인 +커튼 +컨디션 +컬러 +컴퓨터 +코끼리 +코미디 +콘서트 +콜라 +콤플렉스 +콩나물 +쾌감 +쿠데타 +크림 +큰길 +큰딸 +큰소리 +큰아들 +큰어머니 +큰일 +큰절 +클래식 +클럽 +킬로 +타입 +타자기 +탁구 +탁자 +탄생 +태권도 +태양 +태풍 +택시 +탤런트 +터널 +터미널 +테니스 +테스트 +테이블 +텔레비전 +토론 +토마토 +토요일 +통계 +통과 +통로 +통신 +통역 +통일 +통장 +통제 +통증 +통합 +통화 +퇴근 +퇴원 +퇴직금 +튀김 +트럭 +특급 +특별 +특성 +특수 +특징 +특히 +튼튼히 +티셔츠 +파란색 +파일 +파출소 +판결 +판단 +판매 +판사 +팔십 +팔월 +팝송 +패션 +팩스 +팩시밀리 +팬티 +퍼센트 +페인트 +편견 +편의 +편지 +편히 +평가 +평균 +평생 +평소 +평양 +평일 +평화 +포스터 +포인트 +포장 +포함 +표면 +표정 +표준 +표현 +품목 +품질 +풍경 +풍속 +풍습 +프랑스 +프린터 +플라스틱 +피곤 +피망 +피아노 +필름 +필수 +필요 +필자 +필통 +핑계 +하느님 +하늘 +하드웨어 +하룻밤 +하반기 +하숙집 +하순 +하여튼 +하지만 +하천 +하품 +하필 +학과 +학교 +학급 +학기 +학년 +학력 +학번 +학부모 +학비 +학생 +학술 +학습 +학용품 +학원 +학위 +학자 +학점 +한계 +한글 +한꺼번에 +한낮 +한눈 +한동안 +한때 +한라산 +한마디 +한문 +한번 +한복 +한식 +한여름 +한쪽 +할머니 +할아버지 +할인 +함께 +함부로 +합격 +합리적 +항공 +항구 +항상 +항의 +해결 +해군 +해답 +해당 +해물 +해석 +해설 +해수욕장 +해안 +핵심 +핸드백 +햄버거 +햇볕 +햇살 +행동 +행복 +행사 +행운 +행위 +향기 +향상 +향수 +허락 +허용 +헬기 +현관 +현금 +현대 +현상 +현실 +현장 +현재 +현지 +혈액 +협력 +형부 +형사 +형수 +형식 +형제 +형태 +형편 +혜택 +호기심 +호남 +호랑이 +호박 +호텔 +호흡 +혹시 +홀로 +홈페이지 +홍보 +홍수 +홍차 +화면 +화분 +화살 +화요일 +화장 +화학 +확보 +확인 +확장 +확정 +환갑 +환경 +환영 +환율 +환자 +활기 +활동 +활발히 +활용 +활짝 +회견 +회관 +회복 +회색 +회원 +회장 +회전 +횟수 +횡단보도 +효율적 +후반 +후춧가루 +훈련 +훨씬 +휴식 +휴일 +흉내 +흐름 +흑백 +흑인 +흔적 +흔히 +흥미 +흥분 +희곡 +희망 +희생 +흰색 +힘껏 \ No newline at end of file diff --git a/app/src/test/resources/pt-BIP39Words.txt b/app/src/test/resources/pt-BIP39Words.txt new file mode 100644 index 000000000..27f23b29c --- /dev/null +++ b/app/src/test/resources/pt-BIP39Words.txt @@ -0,0 +1,2048 @@ +abacate +abaixo +abalar +abater +abduzir +abelha +aberto +abismo +abotoar +abranger +abreviar +abrigar +abrupto +absinto +absoluto +absurdo +abutre +acabado +acalmar +acampar +acanhar +acaso +aceitar +acelerar +acenar +acervo +acessar +acetona +achatar +acidez +acima +acionado +acirrar +aclamar +aclive +acolhida +acomodar +acoplar +acordar +acumular +acusador +adaptar +adega +adentro +adepto +adequar +aderente +adesivo +adeus +adiante +aditivo +adjetivo +adjunto +admirar +adorar +adquirir +adubo +adverso +advogado +aeronave +afastar +aferir +afetivo +afinador +afivelar +aflito +afluente +afrontar +agachar +agarrar +agasalho +agenciar +agilizar +agiota +agitado +agora +agradar +agreste +agrupar +aguardar +agulha +ajoelhar +ajudar +ajustar +alameda +alarme +alastrar +alavanca +albergue +albino +alcatra +aldeia +alecrim +alegria +alertar +alface +alfinete +algum +alheio +aliar +alicate +alienar +alinhar +aliviar +almofada +alocar +alpiste +alterar +altitude +alucinar +alugar +aluno +alusivo +alvo +amaciar +amador +amarelo +amassar +ambas +ambiente +ameixa +amenizar +amido +amistoso +amizade +amolador +amontoar +amoroso +amostra +amparar +ampliar +ampola +anagrama +analisar +anarquia +anatomia +andaime +anel +anexo +angular +animar +anjo +anomalia +anotado +ansioso +anterior +anuidade +anunciar +anzol +apagador +apalpar +apanhado +apego +apelido +apertada +apesar +apetite +apito +aplauso +aplicada +apoio +apontar +aposta +aprendiz +aprovar +aquecer +arame +aranha +arara +arcada +ardente +areia +arejar +arenito +aresta +argiloso +argola +arma +arquivo +arraial +arrebate +arriscar +arroba +arrumar +arsenal +arterial +artigo +arvoredo +asfaltar +asilado +aspirar +assador +assinar +assoalho +assunto +astral +atacado +atadura +atalho +atarefar +atear +atender +aterro +ateu +atingir +atirador +ativo +atoleiro +atracar +atrevido +atriz +atual +atum +auditor +aumentar +aura +aurora +autismo +autoria +autuar +avaliar +avante +avaria +avental +avesso +aviador +avisar +avulso +axila +azarar +azedo +azeite +azulejo +babar +babosa +bacalhau +bacharel +bacia +bagagem +baiano +bailar +baioneta +bairro +baixista +bajular +baleia +baliza +balsa +banal +bandeira +banho +banir +banquete +barato +barbado +baronesa +barraca +barulho +baseado +bastante +batata +batedor +batida +batom +batucar +baunilha +beber +beijo +beirada +beisebol +beldade +beleza +belga +beliscar +bendito +bengala +benzer +berimbau +berlinda +berro +besouro +bexiga +bezerro +bico +bicudo +bienal +bifocal +bifurcar +bigorna +bilhete +bimestre +bimotor +biologia +biombo +biosfera +bipolar +birrento +biscoito +bisneto +bispo +bissexto +bitola +bizarro +blindado +bloco +bloquear +boato +bobagem +bocado +bocejo +bochecha +boicotar +bolada +boletim +bolha +bolo +bombeiro +bonde +boneco +bonita +borbulha +borda +boreal +borracha +bovino +boxeador +branco +brasa +braveza +breu +briga +brilho +brincar +broa +brochura +bronzear +broto +bruxo +bucha +budismo +bufar +bule +buraco +busca +busto +buzina +cabana +cabelo +cabide +cabo +cabrito +cacau +cacetada +cachorro +cacique +cadastro +cadeado +cafezal +caiaque +caipira +caixote +cajado +caju +calafrio +calcular +caldeira +calibrar +calmante +calota +camada +cambista +camisa +camomila +campanha +camuflar +canavial +cancelar +caneta +canguru +canhoto +canivete +canoa +cansado +cantar +canudo +capacho +capela +capinar +capotar +capricho +captador +capuz +caracol +carbono +cardeal +careca +carimbar +carneiro +carpete +carreira +cartaz +carvalho +casaco +casca +casebre +castelo +casulo +catarata +cativar +caule +causador +cautelar +cavalo +caverna +cebola +cedilha +cegonha +celebrar +celular +cenoura +censo +centeio +cercar +cerrado +certeiro +cerveja +cetim +cevada +chacota +chaleira +chamado +chapada +charme +chatice +chave +chefe +chegada +cheiro +cheque +chicote +chifre +chinelo +chocalho +chover +chumbo +chutar +chuva +cicatriz +ciclone +cidade +cidreira +ciente +cigana +cimento +cinto +cinza +ciranda +circuito +cirurgia +citar +clareza +clero +clicar +clone +clube +coado +coagir +cobaia +cobertor +cobrar +cocada +coelho +coentro +coeso +cogumelo +coibir +coifa +coiote +colar +coleira +colher +colidir +colmeia +colono +coluna +comando +combinar +comentar +comitiva +comover +complexo +comum +concha +condor +conectar +confuso +congelar +conhecer +conjugar +consumir +contrato +convite +cooperar +copeiro +copiador +copo +coquetel +coragem +cordial +corneta +coronha +corporal +correio +cortejo +coruja +corvo +cosseno +costela +cotonete +couro +couve +covil +cozinha +cratera +cravo +creche +credor +creme +crer +crespo +criada +criminal +crioulo +crise +criticar +crosta +crua +cruzeiro +cubano +cueca +cuidado +cujo +culatra +culminar +culpar +cultura +cumprir +cunhado +cupido +curativo +curral +cursar +curto +cuspir +custear +cutelo +damasco +datar +debater +debitar +deboche +debulhar +decalque +decimal +declive +decote +decretar +dedal +dedicado +deduzir +defesa +defumar +degelo +degrau +degustar +deitado +deixar +delator +delegado +delinear +delonga +demanda +demitir +demolido +dentista +depenado +depilar +depois +depressa +depurar +deriva +derramar +desafio +desbotar +descanso +desenho +desfiado +desgaste +desigual +deslize +desmamar +desova +despesa +destaque +desviar +detalhar +detentor +detonar +detrito +deusa +dever +devido +devotado +dezena +diagrama +dialeto +didata +difuso +digitar +dilatado +diluente +diminuir +dinastia +dinheiro +diocese +direto +discreta +disfarce +disparo +disquete +dissipar +distante +ditador +diurno +diverso +divisor +divulgar +dizer +dobrador +dolorido +domador +dominado +donativo +donzela +dormente +dorsal +dosagem +dourado +doutor +drenagem +drible +drogaria +duelar +duende +dueto +duplo +duquesa +durante +duvidoso +eclodir +ecoar +ecologia +edificar +edital +educado +efeito +efetivar +ejetar +elaborar +eleger +eleitor +elenco +elevador +eliminar +elogiar +embargo +embolado +embrulho +embutido +emenda +emergir +emissor +empatia +empenho +empinado +empolgar +emprego +empurrar +emulador +encaixe +encenado +enchente +encontro +endeusar +endossar +enfaixar +enfeite +enfim +engajado +engenho +englobar +engomado +engraxar +enguia +enjoar +enlatar +enquanto +enraizar +enrolado +enrugar +ensaio +enseada +ensino +ensopado +entanto +enteado +entidade +entortar +entrada +entulho +envergar +enviado +envolver +enxame +enxerto +enxofre +enxuto +epiderme +equipar +ereto +erguido +errata +erva +ervilha +esbanjar +esbelto +escama +escola +escrita +escuta +esfinge +esfolar +esfregar +esfumado +esgrima +esmalte +espanto +espelho +espiga +esponja +espreita +espumar +esquerda +estaca +esteira +esticar +estofado +estrela +estudo +esvaziar +etanol +etiqueta +euforia +europeu +evacuar +evaporar +evasivo +eventual +evidente +evoluir +exagero +exalar +examinar +exato +exausto +excesso +excitar +exclamar +executar +exemplo +exibir +exigente +exonerar +expandir +expelir +expirar +explanar +exposto +expresso +expulsar +externo +extinto +extrato +fabricar +fabuloso +faceta +facial +fada +fadiga +faixa +falar +falta +familiar +fandango +fanfarra +fantoche +fardado +farelo +farinha +farofa +farpa +fartura +fatia +fator +favorita +faxina +fazenda +fechado +feijoada +feirante +felino +feminino +fenda +feno +fera +feriado +ferrugem +ferver +festejar +fetal +feudal +fiapo +fibrose +ficar +ficheiro +figurado +fileira +filho +filme +filtrar +firmeza +fisgada +fissura +fita +fivela +fixador +fixo +flacidez +flamingo +flanela +flechada +flora +flutuar +fluxo +focal +focinho +fofocar +fogo +foguete +foice +folgado +folheto +forjar +formiga +forno +forte +fosco +fossa +fragata +fralda +frango +frasco +fraterno +freira +frente +fretar +frieza +friso +fritura +fronha +frustrar +fruteira +fugir +fulano +fuligem +fundar +fungo +funil +furador +furioso +futebol +gabarito +gabinete +gado +gaiato +gaiola +gaivota +galega +galho +galinha +galocha +ganhar +garagem +garfo +gargalo +garimpo +garoupa +garrafa +gasoduto +gasto +gata +gatilho +gaveta +gazela +gelado +geleia +gelo +gemada +gemer +gemido +generoso +gengiva +genial +genoma +genro +geologia +gerador +germinar +gesso +gestor +ginasta +gincana +gingado +girafa +girino +glacial +glicose +global +glorioso +goela +goiaba +golfe +golpear +gordura +gorjeta +gorro +gostoso +goteira +governar +gracejo +gradual +grafite +gralha +grampo +granada +gratuito +graveto +graxa +grego +grelhar +greve +grilo +grisalho +gritaria +grosso +grotesco +grudado +grunhido +gruta +guache +guarani +guaxinim +guerrear +guiar +guincho +guisado +gula +guloso +guru +habitar +harmonia +haste +haver +hectare +herdar +heresia +hesitar +hiato +hibernar +hidratar +hiena +hino +hipismo +hipnose +hipoteca +hoje +holofote +homem +honesto +honrado +hormonal +hospedar +humorado +iate +ideia +idoso +ignorado +igreja +iguana +ileso +ilha +iludido +iluminar +ilustrar +imagem +imediato +imenso +imersivo +iminente +imitador +imortal +impacto +impedir +implante +impor +imprensa +impune +imunizar +inalador +inapto +inativo +incenso +inchar +incidir +incluir +incolor +indeciso +indireto +indutor +ineficaz +inerente +infantil +infestar +infinito +inflamar +informal +infrator +ingerir +inibido +inicial +inimigo +injetar +inocente +inodoro +inovador +inox +inquieto +inscrito +inseto +insistir +inspetor +instalar +insulto +intacto +integral +intimar +intocado +intriga +invasor +inverno +invicto +invocar +iogurte +iraniano +ironizar +irreal +irritado +isca +isento +isolado +isqueiro +italiano +janeiro +jangada +janta +jararaca +jardim +jarro +jasmim +jato +javali +jazida +jejum +joaninha +joelhada +jogador +joia +jornal +jorrar +jovem +juba +judeu +judoca +juiz +julgador +julho +jurado +jurista +juro +justa +labareda +laboral +lacre +lactante +ladrilho +lagarta +lagoa +laje +lamber +lamentar +laminar +lampejo +lanche +lapidar +lapso +laranja +lareira +largura +lasanha +lastro +lateral +latido +lavanda +lavoura +lavrador +laxante +lazer +lealdade +lebre +legado +legendar +legista +leigo +leiloar +leitura +lembrete +leme +lenhador +lentilha +leoa +lesma +leste +letivo +letreiro +levar +leveza +levitar +liberal +libido +liderar +ligar +ligeiro +limitar +limoeiro +limpador +linda +linear +linhagem +liquidez +listagem +lisura +litoral +livro +lixa +lixeira +locador +locutor +lojista +lombo +lona +longe +lontra +lorde +lotado +loteria +loucura +lousa +louvar +luar +lucidez +lucro +luneta +lustre +lutador +luva +macaco +macete +machado +macio +madeira +madrinha +magnata +magreza +maior +mais +malandro +malha +malote +maluco +mamilo +mamoeiro +mamute +manada +mancha +mandato +manequim +manhoso +manivela +manobrar +mansa +manter +manusear +mapeado +maquinar +marcador +maresia +marfim +margem +marinho +marmita +maroto +marquise +marreco +martelo +marujo +mascote +masmorra +massagem +mastigar +matagal +materno +matinal +matutar +maxilar +medalha +medida +medusa +megafone +meiga +melancia +melhor +membro +memorial +menino +menos +mensagem +mental +merecer +mergulho +mesada +mesclar +mesmo +mesquita +mestre +metade +meteoro +metragem +mexer +mexicano +micro +migalha +migrar +milagre +milenar +milhar +mimado +minerar +minhoca +ministro +minoria +miolo +mirante +mirtilo +misturar +mocidade +moderno +modular +moeda +moer +moinho +moita +moldura +moleza +molho +molinete +molusco +montanha +moqueca +morango +morcego +mordomo +morena +mosaico +mosquete +mostarda +motel +motim +moto +motriz +muda +muito +mulata +mulher +multar +mundial +munido +muralha +murcho +muscular +museu +musical +nacional +nadador +naja +namoro +narina +narrado +nascer +nativa +natureza +navalha +navegar +navio +neblina +nebuloso +negativa +negociar +negrito +nervoso +neta +neural +nevasca +nevoeiro +ninar +ninho +nitidez +nivelar +nobreza +noite +noiva +nomear +nominal +nordeste +nortear +notar +noticiar +noturno +novelo +novilho +novo +nublado +nudez +numeral +nupcial +nutrir +nuvem +obcecado +obedecer +objetivo +obrigado +obscuro +obstetra +obter +obturar +ocidente +ocioso +ocorrer +oculista +ocupado +ofegante +ofensiva +oferenda +oficina +ofuscado +ogiva +olaria +oleoso +olhar +oliveira +ombro +omelete +omisso +omitir +ondulado +oneroso +ontem +opcional +operador +oponente +oportuno +oposto +orar +orbitar +ordem +ordinal +orfanato +orgasmo +orgulho +oriental +origem +oriundo +orla +ortodoxo +orvalho +oscilar +ossada +osso +ostentar +otimismo +ousadia +outono +outubro +ouvido +ovelha +ovular +oxidar +oxigenar +pacato +paciente +pacote +pactuar +padaria +padrinho +pagar +pagode +painel +pairar +paisagem +palavra +palestra +palheta +palito +palmada +palpitar +pancada +panela +panfleto +panqueca +pantanal +papagaio +papelada +papiro +parafina +parcial +pardal +parede +partida +pasmo +passado +pastel +patamar +patente +patinar +patrono +paulada +pausar +peculiar +pedalar +pedestre +pediatra +pedra +pegada +peitoral +peixe +pele +pelicano +penca +pendurar +peneira +penhasco +pensador +pente +perceber +perfeito +pergunta +perito +permitir +perna +perplexo +persiana +pertence +peruca +pescado +pesquisa +pessoa +petiscar +piada +picado +piedade +pigmento +pilastra +pilhado +pilotar +pimenta +pincel +pinguim +pinha +pinote +pintar +pioneiro +pipoca +piquete +piranha +pires +pirueta +piscar +pistola +pitanga +pivete +planta +plaqueta +platina +plebeu +plumagem +pluvial +pneu +poda +poeira +poetisa +polegada +policiar +poluente +polvilho +pomar +pomba +ponderar +pontaria +populoso +porta +possuir +postal +pote +poupar +pouso +povoar +praia +prancha +prato +praxe +prece +predador +prefeito +premiar +prensar +preparar +presilha +pretexto +prevenir +prezar +primata +princesa +prisma +privado +processo +produto +profeta +proibido +projeto +prometer +propagar +prosa +protetor +provador +publicar +pudim +pular +pulmonar +pulseira +punhal +punir +pupilo +pureza +puxador +quadra +quantia +quarto +quase +quebrar +queda +queijo +quente +querido +quimono +quina +quiosque +rabanada +rabisco +rachar +racionar +radial +raiar +rainha +raio +raiva +rajada +ralado +ramal +ranger +ranhura +rapadura +rapel +rapidez +raposa +raquete +raridade +rasante +rascunho +rasgar +raspador +rasteira +rasurar +ratazana +ratoeira +realeza +reanimar +reaver +rebaixar +rebelde +rebolar +recado +recente +recheio +recibo +recordar +recrutar +recuar +rede +redimir +redonda +reduzida +reenvio +refinar +refletir +refogar +refresco +refugiar +regalia +regime +regra +reinado +reitor +rejeitar +relativo +remador +remendo +remorso +renovado +reparo +repelir +repleto +repolho +represa +repudiar +requerer +resenha +resfriar +resgatar +residir +resolver +respeito +ressaca +restante +resumir +retalho +reter +retirar +retomada +retratar +revelar +revisor +revolta +riacho +rica +rigidez +rigoroso +rimar +ringue +risada +risco +risonho +robalo +rochedo +rodada +rodeio +rodovia +roedor +roleta +romano +roncar +rosado +roseira +rosto +rota +roteiro +rotina +rotular +rouco +roupa +roxo +rubro +rugido +rugoso +ruivo +rumo +rupestre +russo +sabor +saciar +sacola +sacudir +sadio +safira +saga +sagrada +saibro +salada +saleiro +salgado +saliva +salpicar +salsicha +saltar +salvador +sambar +samurai +sanar +sanfona +sangue +sanidade +sapato +sarda +sargento +sarjeta +saturar +saudade +saxofone +sazonal +secar +secular +seda +sedento +sediado +sedoso +sedutor +segmento +segredo +segundo +seiva +seleto +selvagem +semanal +semente +senador +senhor +sensual +sentado +separado +sereia +seringa +serra +servo +setembro +setor +sigilo +silhueta +silicone +simetria +simpatia +simular +sinal +sincero +singular +sinopse +sintonia +sirene +siri +situado +soberano +sobra +socorro +sogro +soja +solda +soletrar +solteiro +sombrio +sonata +sondar +sonegar +sonhador +sono +soprano +soquete +sorrir +sorteio +sossego +sotaque +soterrar +sovado +sozinho +suavizar +subida +submerso +subsolo +subtrair +sucata +sucesso +suco +sudeste +sufixo +sugador +sugerir +sujeito +sulfato +sumir +suor +superior +suplicar +suposto +suprimir +surdina +surfista +surpresa +surreal +surtir +suspiro +sustento +tabela +tablete +tabuada +tacho +tagarela +talher +talo +talvez +tamanho +tamborim +tampa +tangente +tanto +tapar +tapioca +tardio +tarefa +tarja +tarraxa +tatuagem +taurino +taxativo +taxista +teatral +tecer +tecido +teclado +tedioso +teia +teimar +telefone +telhado +tempero +tenente +tensor +tentar +termal +terno +terreno +tese +tesoura +testado +teto +textura +texugo +tiara +tigela +tijolo +timbrar +timidez +tingido +tinteiro +tiragem +titular +toalha +tocha +tolerar +tolice +tomada +tomilho +tonel +tontura +topete +tora +torcido +torneio +torque +torrada +torto +tostar +touca +toupeira +toxina +trabalho +tracejar +tradutor +trafegar +trajeto +trama +trancar +trapo +traseiro +tratador +travar +treino +tremer +trepidar +trevo +triagem +tribo +triciclo +tridente +trilogia +trindade +triplo +triturar +triunfal +trocar +trombeta +trova +trunfo +truque +tubular +tucano +tudo +tulipa +tupi +turbo +turma +turquesa +tutelar +tutorial +uivar +umbigo +unha +unidade +uniforme +urologia +urso +urtiga +urubu +usado +usina +usufruir +vacina +vadiar +vagaroso +vaidoso +vala +valente +validade +valores +vantagem +vaqueiro +varanda +vareta +varrer +vascular +vasilha +vassoura +vazar +vazio +veado +vedar +vegetar +veicular +veleiro +velhice +veludo +vencedor +vendaval +venerar +ventre +verbal +verdade +vereador +vergonha +vermelho +verniz +versar +vertente +vespa +vestido +vetorial +viaduto +viagem +viajar +viatura +vibrador +videira +vidraria +viela +viga +vigente +vigiar +vigorar +vilarejo +vinco +vinheta +vinil +violeta +virada +virtude +visitar +visto +vitral +viveiro +vizinho +voador +voar +vogal +volante +voleibol +voltagem +volumoso +vontade +vulto +vuvuzela +xadrez +xarope +xeque +xeretar +xerife +xingar +zangado +zarpar +zebu +zelador +zombar +zoologia +zumbido \ No newline at end of file diff --git a/app/src/test/resources/zh-BIP39Words.txt b/app/src/test/resources/zh-CN-BIP39Words.txt similarity index 100% rename from app/src/test/resources/zh-BIP39Words.txt rename to app/src/test/resources/zh-CN-BIP39Words.txt diff --git a/app/src/test/resources/zh-TW-BIP39Words.txt b/app/src/test/resources/zh-TW-BIP39Words.txt new file mode 100644 index 000000000..65a34144f --- /dev/null +++ b/app/src/test/resources/zh-TW-BIP39Words.txt @@ -0,0 +1,2048 @@ +的 +一 +是 +在 +不 +了 +有 +和 +人 +這 +中 +大 +為 +上 +個 +國 +我 +以 +要 +他 +時 +來 +用 +們 +生 +到 +作 +地 +於 +出 +就 +分 +對 +成 +會 +可 +主 +發 +年 +動 +同 +工 +也 +能 +下 +過 +子 +說 +產 +種 +面 +而 +方 +後 +多 +定 +行 +學 +法 +所 +民 +得 +經 +十 +三 +之 +進 +著 +等 +部 +度 +家 +電 +力 +裡 +如 +水 +化 +高 +自 +二 +理 +起 +小 +物 +現 +實 +加 +量 +都 +兩 +體 +制 +機 +當 +使 +點 +從 +業 +本 +去 +把 +性 +好 +應 +開 +它 +合 +還 +因 +由 +其 +些 +然 +前 +外 +天 +政 +四 +日 +那 +社 +義 +事 +平 +形 +相 +全 +表 +間 +樣 +與 +關 +各 +重 +新 +線 +內 +數 +正 +心 +反 +你 +明 +看 +原 +又 +麼 +利 +比 +或 +但 +質 +氣 +第 +向 +道 +命 +此 +變 +條 +只 +沒 +結 +解 +問 +意 +建 +月 +公 +無 +系 +軍 +很 +情 +者 +最 +立 +代 +想 +已 +通 +並 +提 +直 +題 +黨 +程 +展 +五 +果 +料 +象 +員 +革 +位 +入 +常 +文 +總 +次 +品 +式 +活 +設 +及 +管 +特 +件 +長 +求 +老 +頭 +基 +資 +邊 +流 +路 +級 +少 +圖 +山 +統 +接 +知 +較 +將 +組 +見 +計 +別 +她 +手 +角 +期 +根 +論 +運 +農 +指 +幾 +九 +區 +強 +放 +決 +西 +被 +幹 +做 +必 +戰 +先 +回 +則 +任 +取 +據 +處 +隊 +南 +給 +色 +光 +門 +即 +保 +治 +北 +造 +百 +規 +熱 +領 +七 +海 +口 +東 +導 +器 +壓 +志 +世 +金 +增 +爭 +濟 +階 +油 +思 +術 +極 +交 +受 +聯 +什 +認 +六 +共 +權 +收 +證 +改 +清 +美 +再 +採 +轉 +更 +單 +風 +切 +打 +白 +教 +速 +花 +帶 +安 +場 +身 +車 +例 +真 +務 +具 +萬 +每 +目 +至 +達 +走 +積 +示 +議 +聲 +報 +鬥 +完 +類 +八 +離 +華 +名 +確 +才 +科 +張 +信 +馬 +節 +話 +米 +整 +空 +元 +況 +今 +集 +溫 +傳 +土 +許 +步 +群 +廣 +石 +記 +需 +段 +研 +界 +拉 +林 +律 +叫 +且 +究 +觀 +越 +織 +裝 +影 +算 +低 +持 +音 +眾 +書 +布 +复 +容 +兒 +須 +際 +商 +非 +驗 +連 +斷 +深 +難 +近 +礦 +千 +週 +委 +素 +技 +備 +半 +辦 +青 +省 +列 +習 +響 +約 +支 +般 +史 +感 +勞 +便 +團 +往 +酸 +歷 +市 +克 +何 +除 +消 +構 +府 +稱 +太 +準 +精 +值 +號 +率 +族 +維 +劃 +選 +標 +寫 +存 +候 +毛 +親 +快 +效 +斯 +院 +查 +江 +型 +眼 +王 +按 +格 +養 +易 +置 +派 +層 +片 +始 +卻 +專 +狀 +育 +廠 +京 +識 +適 +屬 +圓 +包 +火 +住 +調 +滿 +縣 +局 +照 +參 +紅 +細 +引 +聽 +該 +鐵 +價 +嚴 +首 +底 +液 +官 +德 +隨 +病 +蘇 +失 +爾 +死 +講 +配 +女 +黃 +推 +顯 +談 +罪 +神 +藝 +呢 +席 +含 +企 +望 +密 +批 +營 +項 +防 +舉 +球 +英 +氧 +勢 +告 +李 +台 +落 +木 +幫 +輪 +破 +亞 +師 +圍 +注 +遠 +字 +材 +排 +供 +河 +態 +封 +另 +施 +減 +樹 +溶 +怎 +止 +案 +言 +士 +均 +武 +固 +葉 +魚 +波 +視 +僅 +費 +緊 +愛 +左 +章 +早 +朝 +害 +續 +輕 +服 +試 +食 +充 +兵 +源 +判 +護 +司 +足 +某 +練 +差 +致 +板 +田 +降 +黑 +犯 +負 +擊 +范 +繼 +興 +似 +餘 +堅 +曲 +輸 +修 +故 +城 +夫 +夠 +送 +筆 +船 +佔 +右 +財 +吃 +富 +春 +職 +覺 +漢 +畫 +功 +巴 +跟 +雖 +雜 +飛 +檢 +吸 +助 +昇 +陽 +互 +初 +創 +抗 +考 +投 +壞 +策 +古 +徑 +換 +未 +跑 +留 +鋼 +曾 +端 +責 +站 +簡 +述 +錢 +副 +盡 +帝 +射 +草 +衝 +承 +獨 +令 +限 +阿 +宣 +環 +雙 +請 +超 +微 +讓 +控 +州 +良 +軸 +找 +否 +紀 +益 +依 +優 +頂 +礎 +載 +倒 +房 +突 +坐 +粉 +敵 +略 +客 +袁 +冷 +勝 +絕 +析 +塊 +劑 +測 +絲 +協 +訴 +念 +陳 +仍 +羅 +鹽 +友 +洋 +錯 +苦 +夜 +刑 +移 +頻 +逐 +靠 +混 +母 +短 +皮 +終 +聚 +汽 +村 +雲 +哪 +既 +距 +衛 +停 +烈 +央 +察 +燒 +迅 +境 +若 +印 +洲 +刻 +括 +激 +孔 +搞 +甚 +室 +待 +核 +校 +散 +侵 +吧 +甲 +遊 +久 +菜 +味 +舊 +模 +湖 +貨 +損 +預 +阻 +毫 +普 +穩 +乙 +媽 +植 +息 +擴 +銀 +語 +揮 +酒 +守 +拿 +序 +紙 +醫 +缺 +雨 +嗎 +針 +劉 +啊 +急 +唱 +誤 +訓 +願 +審 +附 +獲 +茶 +鮮 +糧 +斤 +孩 +脫 +硫 +肥 +善 +龍 +演 +父 +漸 +血 +歡 +械 +掌 +歌 +沙 +剛 +攻 +謂 +盾 +討 +晚 +粒 +亂 +燃 +矛 +乎 +殺 +藥 +寧 +魯 +貴 +鐘 +煤 +讀 +班 +伯 +香 +介 +迫 +句 +豐 +培 +握 +蘭 +擔 +弦 +蛋 +沉 +假 +穿 +執 +答 +樂 +誰 +順 +煙 +縮 +徵 +臉 +喜 +松 +腳 +困 +異 +免 +背 +星 +福 +買 +染 +井 +概 +慢 +怕 +磁 +倍 +祖 +皇 +促 +靜 +補 +評 +翻 +肉 +踐 +尼 +衣 +寬 +揚 +棉 +希 +傷 +操 +垂 +秋 +宜 +氫 +套 +督 +振 +架 +亮 +末 +憲 +慶 +編 +牛 +觸 +映 +雷 +銷 +詩 +座 +居 +抓 +裂 +胞 +呼 +娘 +景 +威 +綠 +晶 +厚 +盟 +衡 +雞 +孫 +延 +危 +膠 +屋 +鄉 +臨 +陸 +顧 +掉 +呀 +燈 +歲 +措 +束 +耐 +劇 +玉 +趙 +跳 +哥 +季 +課 +凱 +胡 +額 +款 +紹 +卷 +齊 +偉 +蒸 +殖 +永 +宗 +苗 +川 +爐 +岩 +弱 +零 +楊 +奏 +沿 +露 +桿 +探 +滑 +鎮 +飯 +濃 +航 +懷 +趕 +庫 +奪 +伊 +靈 +稅 +途 +滅 +賽 +歸 +召 +鼓 +播 +盤 +裁 +險 +康 +唯 +錄 +菌 +純 +借 +糖 +蓋 +橫 +符 +私 +努 +堂 +域 +槍 +潤 +幅 +哈 +竟 +熟 +蟲 +澤 +腦 +壤 +碳 +歐 +遍 +側 +寨 +敢 +徹 +慮 +斜 +薄 +庭 +納 +彈 +飼 +伸 +折 +麥 +濕 +暗 +荷 +瓦 +塞 +床 +築 +惡 +戶 +訪 +塔 +奇 +透 +梁 +刀 +旋 +跡 +卡 +氯 +遇 +份 +毒 +泥 +退 +洗 +擺 +灰 +彩 +賣 +耗 +夏 +擇 +忙 +銅 +獻 +硬 +予 +繁 +圈 +雪 +函 +亦 +抽 +篇 +陣 +陰 +丁 +尺 +追 +堆 +雄 +迎 +泛 +爸 +樓 +避 +謀 +噸 +野 +豬 +旗 +累 +偏 +典 +館 +索 +秦 +脂 +潮 +爺 +豆 +忽 +托 +驚 +塑 +遺 +愈 +朱 +替 +纖 +粗 +傾 +尚 +痛 +楚 +謝 +奮 +購 +磨 +君 +池 +旁 +碎 +骨 +監 +捕 +弟 +暴 +割 +貫 +殊 +釋 +詞 +亡 +壁 +頓 +寶 +午 +塵 +聞 +揭 +炮 +殘 +冬 +橋 +婦 +警 +綜 +招 +吳 +付 +浮 +遭 +徐 +您 +搖 +谷 +贊 +箱 +隔 +訂 +男 +吹 +園 +紛 +唐 +敗 +宋 +玻 +巨 +耕 +坦 +榮 +閉 +灣 +鍵 +凡 +駐 +鍋 +救 +恩 +剝 +凝 +鹼 +齒 +截 +煉 +麻 +紡 +禁 +廢 +盛 +版 +緩 +淨 +睛 +昌 +婚 +涉 +筒 +嘴 +插 +岸 +朗 +莊 +街 +藏 +姑 +貿 +腐 +奴 +啦 +慣 +乘 +夥 +恢 +勻 +紗 +扎 +辯 +耳 +彪 +臣 +億 +璃 +抵 +脈 +秀 +薩 +俄 +網 +舞 +店 +噴 +縱 +寸 +汗 +掛 +洪 +賀 +閃 +柬 +爆 +烯 +津 +稻 +牆 +軟 +勇 +像 +滾 +厘 +蒙 +芳 +肯 +坡 +柱 +盪 +腿 +儀 +旅 +尾 +軋 +冰 +貢 +登 +黎 +削 +鑽 +勒 +逃 +障 +氨 +郭 +峰 +幣 +港 +伏 +軌 +畝 +畢 +擦 +莫 +刺 +浪 +秘 +援 +株 +健 +售 +股 +島 +甘 +泡 +睡 +童 +鑄 +湯 +閥 +休 +匯 +舍 +牧 +繞 +炸 +哲 +磷 +績 +朋 +淡 +尖 +啟 +陷 +柴 +呈 +徒 +顏 +淚 +稍 +忘 +泵 +藍 +拖 +洞 +授 +鏡 +辛 +壯 +鋒 +貧 +虛 +彎 +摩 +泰 +幼 +廷 +尊 +窗 +綱 +弄 +隸 +疑 +氏 +宮 +姐 +震 +瑞 +怪 +尤 +琴 +循 +描 +膜 +違 +夾 +腰 +緣 +珠 +窮 +森 +枝 +竹 +溝 +催 +繩 +憶 +邦 +剩 +幸 +漿 +欄 +擁 +牙 +貯 +禮 +濾 +鈉 +紋 +罷 +拍 +咱 +喊 +袖 +埃 +勤 +罰 +焦 +潛 +伍 +墨 +欲 +縫 +姓 +刊 +飽 +仿 +獎 +鋁 +鬼 +麗 +跨 +默 +挖 +鏈 +掃 +喝 +袋 +炭 +污 +幕 +諸 +弧 +勵 +梅 +奶 +潔 +災 +舟 +鑑 +苯 +訟 +抱 +毀 +懂 +寒 +智 +埔 +寄 +屆 +躍 +渡 +挑 +丹 +艱 +貝 +碰 +拔 +爹 +戴 +碼 +夢 +芽 +熔 +赤 +漁 +哭 +敬 +顆 +奔 +鉛 +仲 +虎 +稀 +妹 +乏 +珍 +申 +桌 +遵 +允 +隆 +螺 +倉 +魏 +銳 +曉 +氮 +兼 +隱 +礙 +赫 +撥 +忠 +肅 +缸 +牽 +搶 +博 +巧 +殼 +兄 +杜 +訊 +誠 +碧 +祥 +柯 +頁 +巡 +矩 +悲 +灌 +齡 +倫 +票 +尋 +桂 +鋪 +聖 +恐 +恰 +鄭 +趣 +抬 +荒 +騰 +貼 +柔 +滴 +猛 +闊 +輛 +妻 +填 +撤 +儲 +簽 +鬧 +擾 +紫 +砂 +遞 +戲 +吊 +陶 +伐 +餵 +療 +瓶 +婆 +撫 +臂 +摸 +忍 +蝦 +蠟 +鄰 +胸 +鞏 +擠 +偶 +棄 +槽 +勁 +乳 +鄧 +吉 +仁 +爛 +磚 +租 +烏 +艦 +伴 +瓜 +淺 +丙 +暫 +燥 +橡 +柳 +迷 +暖 +牌 +秧 +膽 +詳 +簧 +踏 +瓷 +譜 +呆 +賓 +糊 +洛 +輝 +憤 +競 +隙 +怒 +粘 +乃 +緒 +肩 +籍 +敏 +塗 +熙 +皆 +偵 +懸 +掘 +享 +糾 +醒 +狂 +鎖 +淀 +恨 +牲 +霸 +爬 +賞 +逆 +玩 +陵 +祝 +秒 +浙 +貌 +役 +彼 +悉 +鴨 +趨 +鳳 +晨 +畜 +輩 +秩 +卵 +署 +梯 +炎 +灘 +棋 +驅 +篩 +峽 +冒 +啥 +壽 +譯 +浸 +泉 +帽 +遲 +矽 +疆 +貸 +漏 +稿 +冠 +嫩 +脅 +芯 +牢 +叛 +蝕 +奧 +鳴 +嶺 +羊 +憑 +串 +塘 +繪 +酵 +融 +盆 +錫 +廟 +籌 +凍 +輔 +攝 +襲 +筋 +拒 +僚 +旱 +鉀 +鳥 +漆 +沈 +眉 +疏 +添 +棒 +穗 +硝 +韓 +逼 +扭 +僑 +涼 +挺 +碗 +栽 +炒 +杯 +患 +餾 +勸 +豪 +遼 +勃 +鴻 +旦 +吏 +拜 +狗 +埋 +輥 +掩 +飲 +搬 +罵 +辭 +勾 +扣 +估 +蔣 +絨 +霧 +丈 +朵 +姆 +擬 +宇 +輯 +陝 +雕 +償 +蓄 +崇 +剪 +倡 +廳 +咬 +駛 +薯 +刷 +斥 +番 +賦 +奉 +佛 +澆 +漫 +曼 +扇 +鈣 +桃 +扶 +仔 +返 +俗 +虧 +腔 +鞋 +棱 +覆 +框 +悄 +叔 +撞 +騙 +勘 +旺 +沸 +孤 +吐 +孟 +渠 +屈 +疾 +妙 +惜 +仰 +狠 +脹 +諧 +拋 +黴 +桑 +崗 +嘛 +衰 +盜 +滲 +臟 +賴 +湧 +甜 +曹 +閱 +肌 +哩 +厲 +烴 +緯 +毅 +昨 +偽 +症 +煮 +嘆 +釘 +搭 +莖 +籠 +酷 +偷 +弓 +錐 +恆 +傑 +坑 +鼻 +翼 +綸 +敘 +獄 +逮 +罐 +絡 +棚 +抑 +膨 +蔬 +寺 +驟 +穆 +冶 +枯 +冊 +屍 +凸 +紳 +坯 +犧 +焰 +轟 +欣 +晉 +瘦 +禦 +錠 +錦 +喪 +旬 +鍛 +壟 +搜 +撲 +邀 +亭 +酯 +邁 +舒 +脆 +酶 +閒 +憂 +酚 +頑 +羽 +漲 +卸 +仗 +陪 +闢 +懲 +杭 +姚 +肚 +捉 +飄 +漂 +昆 +欺 +吾 +郎 +烷 +汁 +呵 +飾 +蕭 +雅 +郵 +遷 +燕 +撒 +姻 +赴 +宴 +煩 +債 +帳 +斑 +鈴 +旨 +醇 +董 +餅 +雛 +姿 +拌 +傅 +腹 +妥 +揉 +賢 +拆 +歪 +葡 +胺 +丟 +浩 +徽 +昂 +墊 +擋 +覽 +貪 +慰 +繳 +汪 +慌 +馮 +諾 +姜 +誼 +兇 +劣 +誣 +耀 +昏 +躺 +盈 +騎 +喬 +溪 +叢 +盧 +抹 +悶 +諮 +刮 +駕 +纜 +悟 +摘 +鉺 +擲 +頗 +幻 +柄 +惠 +慘 +佳 +仇 +臘 +窩 +滌 +劍 +瞧 +堡 +潑 +蔥 +罩 +霍 +撈 +胎 +蒼 +濱 +倆 +捅 +湘 +砍 +霞 +邵 +萄 +瘋 +淮 +遂 +熊 +糞 +烘 +宿 +檔 +戈 +駁 +嫂 +裕 +徙 +箭 +捐 +腸 +撐 +曬 +辨 +殿 +蓮 +攤 +攪 +醬 +屏 +疫 +哀 +蔡 +堵 +沫 +皺 +暢 +疊 +閣 +萊 +敲 +轄 +鉤 +痕 +壩 +巷 +餓 +禍 +丘 +玄 +溜 +曰 +邏 +彭 +嘗 +卿 +妨 +艇 +吞 +韋 +怨 +矮 +歇 \ No newline at end of file From 2c5570d5616c9062a800527be9bd5fdd16770ae2 Mon Sep 17 00:00:00 2001 From: Ben Abraham Date: Tue, 6 Apr 2021 23:02:31 -0400 Subject: [PATCH 04/10] Updated all code to use the new wordlists. - Added class for managing BIP39 wordlists, with helper functions for various use-cases. - Removed now-unused class Bip39Reader - Replaced all usages of Bip39Reader with Bip39Wordlist --- .../activities/InputWordsActivity.java | 3 +- .../activities/PaperKeyProveActivity.java | 14 +- .../tools/security/SmartValidator.java | 43 ++-- .../ravenwallet/tools/util/Bip39Reader.java | 102 ---------- .../ravenwallet/tools/util/Bip39Wordlist.java | 183 ++++++++++++++++++ .../com/ravenwallet/wallet/WalletsMaster.java | 73 ++++--- app/src/test/java/PaperKeyTests.java | 15 +- 7 files changed, 248 insertions(+), 185 deletions(-) delete mode 100644 app/src/main/java/com/ravenwallet/tools/util/Bip39Reader.java create mode 100644 app/src/main/java/com/ravenwallet/tools/util/Bip39Wordlist.java diff --git a/app/src/main/java/com/ravenwallet/presenter/activities/InputWordsActivity.java b/app/src/main/java/com/ravenwallet/presenter/activities/InputWordsActivity.java index 40b53edde..b42c7d571 100644 --- a/app/src/main/java/com/ravenwallet/presenter/activities/InputWordsActivity.java +++ b/app/src/main/java/com/ravenwallet/presenter/activities/InputWordsActivity.java @@ -378,7 +378,8 @@ public void onFocusChange(View v, boolean hasFocus) { private void validateWord(EditText view) { String word = view.getText().toString(); - boolean valid = SmartValidator.isWordValid(this, word); + //TODO: Validate against a known loaded wordlist instead of all lists every time? + boolean valid = SmartValidator.isPhraseWordValid(this, word); view.setTextColor(getColor(valid ? R.color.light_gray : R.color.red_text)); if (!valid) SpringAnimator.failShakeAnimation(this, view); diff --git a/app/src/main/java/com/ravenwallet/presenter/activities/PaperKeyProveActivity.java b/app/src/main/java/com/ravenwallet/presenter/activities/PaperKeyProveActivity.java index 581331f5d..d2c8808a1 100644 --- a/app/src/main/java/com/ravenwallet/presenter/activities/PaperKeyProveActivity.java +++ b/app/src/main/java/com/ravenwallet/presenter/activities/PaperKeyProveActivity.java @@ -33,7 +33,7 @@ import com.ravenwallet.tools.manager.BRReportsManager; import com.ravenwallet.tools.manager.BRSharedPrefs; import com.ravenwallet.tools.security.SmartValidator; -import com.ravenwallet.tools.util.Bip39Reader; +import com.ravenwallet.tools.util.Bip39Wordlist; import com.ravenwallet.tools.util.Utils; import java.util.Locale; @@ -226,11 +226,13 @@ private void randomWordsSetUp(String[] words) { private boolean isWordCorrect(boolean first) { if (first) { - String edit = Bip39Reader.cleanWord(wordEditFirst.getText().toString()); - return SmartValidator.isWordValid(PaperKeyProveActivity.this, edit) && edit.equalsIgnoreCase(sparseArrayWords.get(sparseArrayWords.keyAt(0))); + String firstWordClean = Bip39Wordlist.cleanWord(wordEditFirst.getText().toString()); + return SmartValidator.isPhraseWordValid(PaperKeyProveActivity.this, firstWordClean) && + firstWordClean.equalsIgnoreCase(sparseArrayWords.get(sparseArrayWords.keyAt(0))); } else { - String edit = Bip39Reader.cleanWord(wordEditSecond.getText().toString()); - return SmartValidator.isWordValid(PaperKeyProveActivity.this, edit) && edit.equalsIgnoreCase(sparseArrayWords.get(sparseArrayWords.keyAt(1))); + String secondWordClean = Bip39Wordlist.cleanWord(wordEditSecond.getText().toString()); + return SmartValidator.isPhraseWordValid(PaperKeyProveActivity.this, secondWordClean) && + secondWordClean.equalsIgnoreCase(sparseArrayWords.get(sparseArrayWords.keyAt(1))); } } @@ -248,7 +250,7 @@ private boolean isWordCorrect(boolean first) { private void validateWord(EditText view) { String word = view.getText().toString(); - boolean valid = SmartValidator.isWordValid(this, word); + boolean valid = SmartValidator.isPhraseWordValid(this, word); view.setTextColor(getColor(valid ? R.color.light_gray : R.color.red_text)); // if (!valid) // SpringAnimator.failShakeAnimation(this, view); diff --git a/app/src/main/java/com/ravenwallet/tools/security/SmartValidator.java b/app/src/main/java/com/ravenwallet/tools/security/SmartValidator.java index 2bcd9241c..66daaa46d 100644 --- a/app/src/main/java/com/ravenwallet/tools/security/SmartValidator.java +++ b/app/src/main/java/com/ravenwallet/tools/security/SmartValidator.java @@ -7,7 +7,7 @@ import com.ravenwallet.core.BRCoreMasterPubKey; import com.ravenwallet.tools.manager.BRReportsManager; import com.ravenwallet.tools.manager.BRSharedPrefs; -import com.ravenwallet.tools.util.Bip39Reader; +import com.ravenwallet.tools.util.Bip39Wordlist; import java.text.Normalizer; import java.util.Arrays; @@ -43,31 +43,21 @@ public class SmartValidator { private static final String TAG = SmartValidator.class.getName(); private static List list; - public static boolean isPaperKeyValid(Context ctx, String paperKey) { - String languageCode = Locale.getDefault().getLanguage(); - if (!isValid(ctx, paperKey, languageCode)) { - //try all langs - for (String lang : Bip39Reader.LANGS) { - if (isValid(ctx, paperKey, lang)) { - return true; - } - } - } else { - return true; - } - - return false; + public static boolean isPhraseWordValid(Context ctx, String phraseWord) { + return Bip39Wordlist.isValidWord(ctx, phraseWord); + } + public static boolean isPaperKeyValid(Context ctx, String paperKey) { + return isPaperKeyValid(ctx, paperKey, Locale.getDefault().getLanguage()); } - private static boolean isValid(Context ctx, String paperKey, String lang) { - List list = Bip39Reader.bip39List(ctx, lang); - String[] words = list.toArray(new String[list.size()]); - if (words.length % Bip39Reader.WORD_LIST_SIZE != 0) { - Log.e(TAG, "isPaperKeyValid: " + "The list size should divide by " + Bip39Reader.WORD_LIST_SIZE); - BRReportsManager.reportBug(new IllegalArgumentException("words.length is not dividable by " + Bip39Reader.WORD_LIST_SIZE), true); + private static boolean isPaperKeyValid(Context ctx, String paperKey, String lang) { + Bip39Wordlist wordList = Bip39Wordlist.getWordlistForLanguage(lang); + if(wordList == null) { + Log.e(TAG, "No wordlist found for language: '" + lang + "'"); + BRReportsManager.reportBug(new IllegalArgumentException("No wordlist found for language: '" + lang + "'"), true); } - return BRCoreMasterPubKey.validateRecoveryPhrase(words, paperKey); + return wordList.checkPhrase(ctx, paperKey); } public static boolean isPaperKeyCorrect(String insertedPhrase, Context activity) { @@ -100,13 +90,4 @@ public static boolean checkFirstAddress(Activity app, byte[] mpk) { public static String cleanPaperKey(Context activity, String phraseToCheck) { return Normalizer.normalize(phraseToCheck.replace(" ", " ").replace("\n", " ").trim().replaceAll(" +", " "), Normalizer.Form.NFKD); } - - public static boolean isWordValid(Context ctx, String word) { - Log.e(TAG, "isWordValid: word:" + word + ":" + word.length()); - if (list == null) list = Bip39Reader.bip39List(ctx, null); - String cleanWord = Bip39Reader.cleanWord(word); - Log.e(TAG, "isWordValid: cleanWord:" + cleanWord + ":" + cleanWord.length()); - return list.contains(cleanWord); - - } } diff --git a/app/src/main/java/com/ravenwallet/tools/util/Bip39Reader.java b/app/src/main/java/com/ravenwallet/tools/util/Bip39Reader.java deleted file mode 100644 index 4213b7ccb..000000000 --- a/app/src/main/java/com/ravenwallet/tools/util/Bip39Reader.java +++ /dev/null @@ -1,102 +0,0 @@ -package com.ravenwallet.tools.util; - -import android.content.Context; -import android.content.res.AssetManager; - -import com.ravenwallet.tools.manager.BRReportsManager; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.text.Normalizer; -import java.util.ArrayList; -import java.util.List; - -/** - * RavenWallet - *

- * Created by Mihail Gutan on 9/28/15. - * Copyright (c) 2016 breadwallet LLC - *

- * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - *

- * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - *

- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -public class Bip39Reader { - - private static final String TAG = Bip39Reader.class.getName(); - public static final int WORD_LIST_SIZE = 2048; - public static String[] LANGS = {"en", "es", "fr", "ja", "zh"}; - - //if lang is null then all the lists - public static List bip39List(Context context, String lang) { - - String[] langs = null; - if (lang == null) - langs = LANGS; //return all the words for all langs - else { - boolean exists = false; - for (String s : LANGS) if (s.equalsIgnoreCase(lang)) exists = true; - if (exists) - langs = new String[]{lang};//if lang is one of the language we support for paper key creation, then use it - else - langs = new String[]{"en"};// if not than return 'en' - } - - List result = new ArrayList<>(); - - for (String l : langs) { - String fileName = "words/" + l + "-BIP39Words.txt"; - List wordList = new ArrayList<>(); - BufferedReader reader = null; - try { - AssetManager assetManager = context.getResources().getAssets(); - InputStream inputStream = assetManager.open(fileName); - reader = new BufferedReader(new InputStreamReader(inputStream)); - String line; - - while ((line = reader.readLine()) != null) { - wordList.add(cleanWord(line)); - } - } catch (Exception ex) { - ex.printStackTrace(); - - } finally { - try { - if (reader != null) - reader.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - if (wordList.size() % WORD_LIST_SIZE != 0) { - BRReportsManager.reportBug(new IllegalArgumentException("The list size should divide by " + WORD_LIST_SIZE), true); - } - result.addAll(wordList); - - } - return result; - } - - public static String cleanWord(String word) { - String w = Normalizer.normalize(word.trim().replace(" ", "") - .replace(" ", ""), Normalizer.Form.NFKD); - return w; - } -} diff --git a/app/src/main/java/com/ravenwallet/tools/util/Bip39Wordlist.java b/app/src/main/java/com/ravenwallet/tools/util/Bip39Wordlist.java new file mode 100644 index 000000000..9ec6592be --- /dev/null +++ b/app/src/main/java/com/ravenwallet/tools/util/Bip39Wordlist.java @@ -0,0 +1,183 @@ +package com.ravenwallet.tools.util; + +import android.content.Context; +import android.content.res.AssetManager; + +import com.ravenwallet.core.BRCoreKey; +import com.ravenwallet.core.BRCoreMasterPubKey; +import com.ravenwallet.tools.manager.BRReportsManager; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.security.SecureRandom; +import java.text.Normalizer; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +public class Bip39Wordlist { + private static final String TAG = Bip39Wordlist.class.getName(); + + public static final int WORD_LIST_SIZE = 2048; + + String languageCode; + String languageName; + String[] loadedWords; + + public static Bip39Wordlist[] LANGS = { + new Bip39Wordlist("cs","Czech"), + new Bip39Wordlist("en","English"), + new Bip39Wordlist("es","Spanish"), + new Bip39Wordlist("fr","French"), + new Bip39Wordlist("it","Italian"), + new Bip39Wordlist("ja","Japanese"), + new Bip39Wordlist("ko","Korean"), + new Bip39Wordlist("pt","Portuguese"), + new Bip39Wordlist("zh-CN","Chinese (Simplified)"), + new Bip39Wordlist("zh-TW","Chinese (Traditional)") + }; + public static Bip39Wordlist DEFAULT_WORDLIST = LANGS[1]; //en + + public static Bip39Wordlist getWordlistForLocale() { + return getWordlistForLocale(Locale.getDefault()); + } + public static Bip39Wordlist getWordlistForLocale(Locale locale) { + String languageCode = locale != null ? locale.getLanguage() : null; + if (languageCode == null) return DEFAULT_WORDLIST; + return getWordlistForLanguage(languageCode); + } + public static Bip39Wordlist getWordlistForLanguage(String languageCode) { + for(Bip39Wordlist lang : LANGS) { + if (lang.languageCode.equals(languageCode)) + return lang; + } + return getWordlistForLocale(); + } + public static boolean isValidWord(Context app, String checkWord) { + String cleanWord = cleanWord(checkWord); + for(Bip39Wordlist list : LANGS) + if(list.hasWord(app, cleanWord)) + return true; + return false; + } + public static String cleanWord(String word) { + String w = Normalizer.normalize(word.trim().replace(" ", "") + .replace(" ", ""), Normalizer.Form.NFKD); + return w; + } + + + + + public Bip39Wordlist(String languageCode, String languageName) { + this.languageCode = languageCode; + this.languageName = languageName; + } + + public boolean hasWord(Context app, String checkWord) { + loadWords(app); + for(String word : loadedWords) { + if (word.equals(checkWord)) + return true; + } + return false; + } + public void loadWords(Context app) { + if(loadedWords != null) return; + + loadedWords = new String[WORD_LIST_SIZE]; + String fileName = "words/" + this.languageCode + "-BIP39Words.txt"; + BufferedReader reader = null; + int lineIndex = 0; + try { + AssetManager assetManager = app.getResources().getAssets(); + InputStream inputStream = assetManager.open(fileName); + reader = new BufferedReader(new InputStreamReader(inputStream)); + String line; + while ((line = reader.readLine()) != null) { + if(lineIndex < WORD_LIST_SIZE) + loadedWords[lineIndex] = cleanWord(line); + lineIndex++; + } + } catch (Exception ex) { + ex.printStackTrace(); + } finally { + try { + if (reader != null) + reader.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + if(lineIndex != WORD_LIST_SIZE) { + BRReportsManager.reportBug(new IllegalArgumentException("Wordlis '" + fileName + "' has unexpected size."), true); + } + } + + public boolean checkPhrase(Context app, String phrase) { + loadWords(app); + return BRCoreMasterPubKey.validateRecoveryPhrase(loadedWords, phrase); + } + + public byte[] generatePaperKeyBytes(Context app, byte[] seed) { + loadWords(app); + byte[] paperKeyBytes = BRCoreMasterPubKey.generatePaperKey(seed, loadedWords); + if (paperKeyBytes == null || paperKeyBytes.length == 0) { + BRReportsManager.reportBug(new NullPointerException("failed to encodeSeed"), true); + return null; + } + return paperKeyBytes; + } + + public String paperKeyString(byte[] paperKeyBytes) { + return new String(paperKeyBytes); + } + + public byte[] generateRandomSeed() { + final byte[] randomSeed = new SecureRandom().generateSeed(16); + if (randomSeed.length != 16) + throw new NullPointerException("failed to create the seed, seed length is not 128: " + randomSeed.length); + return randomSeed; + } + + public String[] splitPharse(byte[] paperKeyBytes) { + return splitPharse(paperKeyString(paperKeyBytes)); + } + + public String[] splitPharse(String phrase) { + String[] parts = phrase.split(" "); + if (parts.length != 12) { + BRReportsManager.reportBug(new NullPointerException("phrase does not have 12 words:" + parts.length + ", lang: " + languageCode), true); + return null; + } + return parts; + } + + public byte[] getSeedFromPhrase(byte[] paperKeyBytes) { + byte[] seed = BRCoreKey.getSeedFromPhrase(paperKeyBytes); + if (seed == null || seed.length == 0) + throw new RuntimeException("seed is null"); + return seed; + } + + public byte[] getPrivateKeyForAPI(byte[] seed) { + byte[] authKey = BRCoreKey.getAuthPrivKeyForAPI(seed); + if (authKey == null || authKey.length == 0) { + BRReportsManager.reportBug(new IllegalArgumentException("authKey is invalid"), true); + } + return authKey; + } + + public BRCoreMasterPubKey getMasterPubKey(byte[] paperKeyBytes, boolean isPaperKey) { + BRCoreMasterPubKey pubKey = new BRCoreMasterPubKey(paperKeyBytes, true); + if(pubKey == null) { + BRReportsManager.reportBug(new NullPointerException("Did not recieve a valid master public key object."), true); + return null; + } + return pubKey; + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/ravenwallet/wallet/WalletsMaster.java b/app/src/main/java/com/ravenwallet/wallet/WalletsMaster.java index 9e9b77cb0..c27ec95aa 100644 --- a/app/src/main/java/com/ravenwallet/wallet/WalletsMaster.java +++ b/app/src/main/java/com/ravenwallet/wallet/WalletsMaster.java @@ -22,13 +22,12 @@ import com.ravenwallet.tools.security.BRKeyStore; import com.ravenwallet.tools.threads.executor.BRExecutor; import com.ravenwallet.tools.util.BRConstants; -import com.ravenwallet.tools.util.Bip39Reader; +import com.ravenwallet.tools.util.Bip39Wordlist; import com.ravenwallet.tools.util.TrustedNode; import com.ravenwallet.tools.util.Utils; import com.ravenwallet.wallet.abstracts.BaseWalletManager; import java.math.BigDecimal; -import java.security.SecureRandom; import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -79,30 +78,16 @@ public BigDecimal getAggregatedFiatBalance(Context app) { } public synchronized boolean generateRandomSeed(final Context ctx) { - SecureRandom sr = new SecureRandom(); - final String[] words; - List list; - String languageCode = Locale.getDefault().getLanguage(); - if (languageCode == null) languageCode = "en"; - list = Bip39Reader.bip39List(ctx, languageCode); - words = list.toArray(new String[list.size()]); - final byte[] randomSeed = sr.generateSeed(16); - if (words.length != 2048) { - BRReportsManager.reportBug(new IllegalArgumentException("the list is wrong, size: " + words.length), true); - return false; - } - if (randomSeed.length != 16) - throw new NullPointerException("failed to create the seed, seed length is not 128: " + randomSeed.length); - byte[] paperKeyBytes = BRCoreMasterPubKey.generatePaperKey(randomSeed, words); - if (paperKeyBytes == null || paperKeyBytes.length == 0) { - BRReportsManager.reportBug(new NullPointerException("failed to encodeSeed"), true); - return false; - } - String[] splitPhrase = new String(paperKeyBytes).split(" "); - if (splitPhrase.length != 12) { - BRReportsManager.reportBug(new NullPointerException("phrase does not have 12 words:" + splitPhrase.length + ", lang: " + languageCode), true); - return false; - } + Bip39Wordlist bipWords = Bip39Wordlist.getWordlistForLocale(); + + //Generate a random seed to use + byte[] randomSeed = bipWords.generateRandomSeed(); + //Generate a byte-array String of the paper key created + byte[] paperKeyBytes = bipWords.generatePaperKeyBytes(ctx, randomSeed); + //Split that byte[] into an array of each word + String[] splitPhrase = bipWords.splitPharse(paperKeyBytes); + + //Attempt write paper key boolean success = false; try { success = BRKeyStore.putPhrase(paperKeyBytes, ctx, BRConstants.PUT_PHRASE_NEW_WALLET_REQUEST_CODE); @@ -110,21 +95,31 @@ public synchronized boolean generateRandomSeed(final Context ctx) { return false; } if (!success) return false; - byte[] phrase; + //Attempt re-read and verify + byte[] verifyPaperKeyBytes; try { - phrase = BRKeyStore.getPhrase(ctx, 0); + verifyPaperKeyBytes = BRKeyStore.getPhrase(ctx, 0); } catch (UserNotAuthenticatedException e) { - throw new RuntimeException("Failed to retrieve the phrase even though at this point the system auth was asked for sure."); - } - if (Utils.isNullOrEmpty(phrase)) throw new NullPointerException("phrase is null!!"); - if (phrase.length == 0) throw new RuntimeException("phrase is empty"); - byte[] seed = BRCoreKey.getSeedFromPhrase(phrase); - if (seed == null || seed.length == 0) throw new RuntimeException("seed is null"); - byte[] authKey = BRCoreKey.getAuthPrivKeyForAPI(seed); - if (authKey == null || authKey.length == 0) { - BRReportsManager.reportBug(new IllegalArgumentException("authKey is invalid"), true); + throw new RuntimeException("Failed to retrieve the verifyPaperKeyBytes even though at this point the system auth was asked for sure."); } -// BRKeyStore.putAuthKey(authKey, ctx); + + if (Utils.isNullOrEmpty(verifyPaperKeyBytes)) + throw new NullPointerException("verifyPaperKeyBytes is null!! - Unable to retrieve verifyPaperKeyBytes from BRKeyStore"); + if (verifyPaperKeyBytes.length == 0) + throw new RuntimeException("verifyPaperKeyBytes is empty"); + + //Re-extract the seed from the newly created phrase for checking + byte[] verifyPaperKeySeed = bipWords.getSeedFromPhrase(verifyPaperKeyBytes); + + //Create an api private key, this function will internally verify the results, and will raise if invalid + byte[] privateKeyBytes = bipWords.getPrivateKeyForAPI(randomSeed); + + if(paperKeyBytes.length != verifyPaperKeyBytes.length) + throw new RuntimeException("paperKeyBytes and verifyPaperKeyBytes do not mach in length."); + for(int i=0;i getAllWords() { names.add("zh-CN-BIP39Words.txt"); names.add("zh-TW-BIP39Words.txt"); + /* for (String fileName : names) { InputStream in = null; try { @@ -99,12 +100,14 @@ private List getAllWords() { } } } + */ List cleanList = new ArrayList<>(); - for (String s : result) { - String cleanWord = Bip39Reader.cleanWord(s); - cleanList.add(cleanWord); - } - assertThat(cleanList.size(), is(10240)); + //for (String s : result) { + //String cleanWord = Bip39Reader.cleanWord(s); + //cleanList.add(cleanWord); + //} + //assertThat(cleanList.size(), is(10240)); + return cleanList; } From fca8509dd6b1abe9c43c884c47cd8b7a47fea3b2 Mon Sep 17 00:00:00 2001 From: Ben Abraham Date: Wed, 7 Apr 2021 01:51:31 -0400 Subject: [PATCH 05/10] Moved test wordlists so they can be accessed by the new system. Added tests around the new wordlist class, as well as expanding to include all language now. --- .../ravenwallet/tools/util/Bip39Wordlist.java | 90 ++++++--- .../com/ravenwallet/wallet/WalletsMaster.java | 7 +- app/src/test/java/PaperKeyTests.java | 183 +++++++++++------- .../tools/util/words}/cs-BIP39Words.txt | 0 .../tools/util/words}/en-BIP39Words.txt | 0 .../tools/util/words}/es-BIP39Words.txt | 0 .../tools/util/words}/fr-BIP39Words.txt | 0 .../tools/util/words}/it-BIP39Words.txt | 0 .../tools/util/words}/ja-BIP39Words.txt | 0 .../tools/util/words}/ko-BIP39Words.txt | 0 .../tools/util/words}/pt-BIP39Words.txt | 0 .../tools/util/words}/zh-CN-BIP39Words.txt | 0 .../tools/util/words}/zh-TW-BIP39Words.txt | 0 13 files changed, 185 insertions(+), 95 deletions(-) rename app/src/test/resources/{ => com/ravenwallet/tools/util/words}/cs-BIP39Words.txt (100%) rename app/src/test/resources/{ => com/ravenwallet/tools/util/words}/en-BIP39Words.txt (100%) rename app/src/test/resources/{ => com/ravenwallet/tools/util/words}/es-BIP39Words.txt (100%) rename app/src/test/resources/{ => com/ravenwallet/tools/util/words}/fr-BIP39Words.txt (100%) rename app/src/test/resources/{ => com/ravenwallet/tools/util/words}/it-BIP39Words.txt (100%) rename app/src/test/resources/{ => com/ravenwallet/tools/util/words}/ja-BIP39Words.txt (100%) rename app/src/test/resources/{ => com/ravenwallet/tools/util/words}/ko-BIP39Words.txt (100%) rename app/src/test/resources/{ => com/ravenwallet/tools/util/words}/pt-BIP39Words.txt (100%) rename app/src/test/resources/{ => com/ravenwallet/tools/util/words}/zh-CN-BIP39Words.txt (100%) rename app/src/test/resources/{ => com/ravenwallet/tools/util/words}/zh-TW-BIP39Words.txt (100%) diff --git a/app/src/main/java/com/ravenwallet/tools/util/Bip39Wordlist.java b/app/src/main/java/com/ravenwallet/tools/util/Bip39Wordlist.java index 9ec6592be..688c68ae9 100644 --- a/app/src/main/java/com/ravenwallet/tools/util/Bip39Wordlist.java +++ b/app/src/main/java/com/ravenwallet/tools/util/Bip39Wordlist.java @@ -8,9 +8,11 @@ import com.ravenwallet.tools.manager.BRReportsManager; import java.io.BufferedReader; +import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; import java.security.SecureRandom; import java.text.Normalizer; import java.util.ArrayList; @@ -21,10 +23,11 @@ public class Bip39Wordlist { private static final String TAG = Bip39Wordlist.class.getName(); public static final int WORD_LIST_SIZE = 2048; + public static final int PHRASE_SZE = 12; String languageCode; String languageName; - String[] loadedWords; + final String[] loadedWords = new String[WORD_LIST_SIZE]; public static Bip39Wordlist[] LANGS = { new Bip39Wordlist("cs","Czech"), @@ -55,6 +58,15 @@ public static Bip39Wordlist getWordlistForLanguage(String languageCode) { } return getWordlistForLocale(); } + public static Bip39Wordlist identifyWordlist(Context app, byte[] paperKeyBytes) { + return identifyWordlist(app, paperKeyString(paperKeyBytes)); + } + public static Bip39Wordlist identifyWordlist(Context app, String phrase) { + for(Bip39Wordlist list : LANGS) + if (list.checkPhrase(app, phrase)) + return list; + return null; + } public static boolean isValidWord(Context app, String checkWord) { String cleanWord = cleanWord(checkWord); for(Bip39Wordlist list : LANGS) @@ -68,6 +80,21 @@ public static String cleanWord(String word) { return w; } + public static String paperKeyString(byte[] paperKeyBytes) { + return new String(paperKeyBytes); + } + + public static String[] splitPharse(byte[] paperKeyBytes) { + return splitPharse(paperKeyString(paperKeyBytes)); + } + + public static String[] splitPharse(String phrase) { + return phrase + //Turn any non-breaking spaces into normal ones + .replaceAll("[ \\t\\xA0\\u1680\\u180e\\u2000-\\u200a\\u202f\\u205f\\u3000]+", " ") + .split("[\\s]+"); + } + @@ -76,31 +103,46 @@ public Bip39Wordlist(String languageCode, String languageName) { this.languageName = languageName; } + public String getLanguageCode() { return languageCode; } + public String getLanguageName() { return languageName; } + public String[] getWords() { return loadedWords; } + public boolean hasWord(Context app, String checkWord) { loadWords(app); + if(checkWord == null) return false; for(String word : loadedWords) { - if (word.equals(checkWord)) + if (checkWord.equals(word)) return true; } return false; } + public void loadWords() { + loadWords(null); + } public void loadWords(Context app) { - if(loadedWords != null) return; + if(loadedWords[0] != null) return; - loadedWords = new String[WORD_LIST_SIZE]; String fileName = "words/" + this.languageCode + "-BIP39Words.txt"; BufferedReader reader = null; int lineIndex = 0; try { - AssetManager assetManager = app.getResources().getAssets(); - InputStream inputStream = assetManager.open(fileName); - reader = new BufferedReader(new InputStreamReader(inputStream)); + InputStream inputStream; + if (app == null) { //Null when passed in for tests + inputStream = getClass().getResourceAsStream(fileName); + } else { + AssetManager assetManager = app.getResources().getAssets(); + inputStream = assetManager.open(fileName); + } + reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); String line; while ((line = reader.readLine()) != null) { - if(lineIndex < WORD_LIST_SIZE) + if (lineIndex < WORD_LIST_SIZE) loadedWords[lineIndex] = cleanWord(line); lineIndex++; } + } catch (FileNotFoundException fnfex) { + BRReportsManager.reportBug(new IllegalArgumentException("Wordlist '" + fileName + "' does not exist."), true); + fnfex.printStackTrace(); } catch (Exception ex) { ex.printStackTrace(); } finally { @@ -113,17 +155,26 @@ public void loadWords(Context app) { } if(lineIndex != WORD_LIST_SIZE) { - BRReportsManager.reportBug(new IllegalArgumentException("Wordlis '" + fileName + "' has unexpected size."), true); + BRReportsManager.reportBug(new IllegalArgumentException("Wordlist '" + fileName + "' has unexpected size. Expected " + WORD_LIST_SIZE + " Got: " + lineIndex), true); + throw new RuntimeException("Invalid wordlist"); } } public boolean checkPhrase(Context app, String phrase) { loadWords(app); - return BRCoreMasterPubKey.validateRecoveryPhrase(loadedWords, phrase); + //This currently fails with UnsatisfiedLinkError, something with the JNI class. Implementing manually + //return BRCoreMasterPubKey.validateRecoveryPhrase(loadedWords, phrase); + String[] parts = splitPharse(phrase); + for(String part : parts) { + if (!this.hasWord(app, cleanWord(part))) + return false; + } + return true; } - public byte[] generatePaperKeyBytes(Context app, byte[] seed) { + public synchronized byte[] generatePaperKeyBytes(Context app, final byte[] seed) { loadWords(app); + System.out.println("Seed: " + (seed == null ? 0 : seed.length)); byte[] paperKeyBytes = BRCoreMasterPubKey.generatePaperKey(seed, loadedWords); if (paperKeyBytes == null || paperKeyBytes.length == 0) { BRReportsManager.reportBug(new NullPointerException("failed to encodeSeed"), true); @@ -132,10 +183,6 @@ public byte[] generatePaperKeyBytes(Context app, byte[] seed) { return paperKeyBytes; } - public String paperKeyString(byte[] paperKeyBytes) { - return new String(paperKeyBytes); - } - public byte[] generateRandomSeed() { final byte[] randomSeed = new SecureRandom().generateSeed(16); if (randomSeed.length != 16) @@ -143,19 +190,6 @@ public byte[] generateRandomSeed() { return randomSeed; } - public String[] splitPharse(byte[] paperKeyBytes) { - return splitPharse(paperKeyString(paperKeyBytes)); - } - - public String[] splitPharse(String phrase) { - String[] parts = phrase.split(" "); - if (parts.length != 12) { - BRReportsManager.reportBug(new NullPointerException("phrase does not have 12 words:" + parts.length + ", lang: " + languageCode), true); - return null; - } - return parts; - } - public byte[] getSeedFromPhrase(byte[] paperKeyBytes) { byte[] seed = BRCoreKey.getSeedFromPhrase(paperKeyBytes); if (seed == null || seed.length == 0) diff --git a/app/src/main/java/com/ravenwallet/wallet/WalletsMaster.java b/app/src/main/java/com/ravenwallet/wallet/WalletsMaster.java index c27ec95aa..3035cfa09 100644 --- a/app/src/main/java/com/ravenwallet/wallet/WalletsMaster.java +++ b/app/src/main/java/com/ravenwallet/wallet/WalletsMaster.java @@ -81,11 +81,14 @@ public synchronized boolean generateRandomSeed(final Context ctx) { Bip39Wordlist bipWords = Bip39Wordlist.getWordlistForLocale(); //Generate a random seed to use - byte[] randomSeed = bipWords.generateRandomSeed(); + final byte[] randomSeed = bipWords.generateRandomSeed(); //Generate a byte-array String of the paper key created byte[] paperKeyBytes = bipWords.generatePaperKeyBytes(ctx, randomSeed); //Split that byte[] into an array of each word String[] splitPhrase = bipWords.splitPharse(paperKeyBytes); + if (splitPhrase.length != Bip39Wordlist.PHRASE_SZE) { + BRReportsManager.reportBug(new NullPointerException("phrase does not have 12 words:" + splitPhrase.length + ", lang: " + bipWords.getLanguageCode()), true); + } //Attempt write paper key boolean success = false; @@ -109,7 +112,7 @@ public synchronized boolean generateRandomSeed(final Context ctx) { throw new RuntimeException("verifyPaperKeyBytes is empty"); //Re-extract the seed from the newly created phrase for checking - byte[] verifyPaperKeySeed = bipWords.getSeedFromPhrase(verifyPaperKeyBytes); + byte[] verifyRandomSeed = bipWords.getSeedFromPhrase(verifyPaperKeyBytes); //Create an api private key, this function will internally verify the results, and will raise if invalid byte[] privateKeyBytes = bipWords.getPrivateKeyForAPI(randomSeed); diff --git a/app/src/test/java/PaperKeyTests.java b/app/src/test/java/PaperKeyTests.java index 422e2d84a..7e5e8f26f 100644 --- a/app/src/test/java/PaperKeyTests.java +++ b/app/src/test/java/PaperKeyTests.java @@ -1,8 +1,18 @@ +import android.content.Context; +import android.security.keystore.UserNotAuthenticatedException; +import android.text.format.DateUtils; import android.util.Log; +import com.ravenwallet.tools.manager.BRReportsManager; +import com.ravenwallet.tools.security.BRKeyStore; +import com.ravenwallet.tools.util.BRConstants; import com.ravenwallet.tools.util.Bip39Wordlist; +import com.ravenwallet.tools.util.Utils; +import com.ravenwallet.wallet.WalletsMaster; import org.apache.commons.io.IOUtils; +import org.junit.Assert; +import org.junit.Before; import org.junit.Test; import java.io.IOException; @@ -11,8 +21,11 @@ import java.util.Arrays; import java.util.List; +import androidx.test.platform.app.InstrumentationRegistry; + import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; /** @@ -42,78 +55,118 @@ public class PaperKeyTests { private static final String TAG = PaperKeyTests.class.getName(); - public static final String PAPER_KEY_JAP = "こせき ぎじにってい けっこん せつぞく うんどう ふこう にっすう こせい きさま なまみ たきび はかい";//japanese - public static final String PAPER_KEY_ENG = "stick sword keen afraid smile sting huge relax nominee arena area gift ";//english - public static final String PAPER_KEY_FRE = "vocation triage capsule marchand onduler tibia illicite entier fureur minorer amateur lubie";//french - public static final String PAPER_KEY_SPA = "zorro turismo mezcla nicho morir chico blanco pájaro alba esencia roer repetir";//spanish - public static final String PAPER_KEY_CHI = "怨 贪 旁 扎 吹 音 决 廷 十 助 畜 怒";//chinese - - -// @Test -// public void testWordsValid() { -// -// List list = getAllWords(); -// assertThat(list.size(), is(10240)); -// -// assertThat(isValid(PAPER_KEY_JAP, list), is(true)); -// assertThat(isValid(PAPER_KEY_ENG, list), is(true)); -// assertThat(isValid(PAPER_KEY_FRE, list), is(true)); -// assertThat(isValid(PAPER_KEY_SPA, list), is(true)); -// assertThat(isValid(PAPER_KEY_CHI, list), is(true)); -// } + public static final String PAPER_KEY_CS = "vklad herec srub narodit rastr zasunout pianista javor vklad patrona panstvo fosfor";//czech + public static final String PAPER_KEY_EN = "stick sword keen afraid smile sting huge relax nominee arena area gift ";//english + public static final String PAPER_KEY_ES = "zorro turismo mezcla nicho morir chico blanco pájaro alba esencia roer repetir";//spanish + public static final String PAPER_KEY_FR = "vocation triage capsule marchand onduler tibia illicite entier fureur minorer amateur lubie";//french + public static final String PAPER_KEY_IT = "terme cornice seggiola lorenzo rappreso vano ovest dono terme orribile ordine circa";//italian + public static final String PAPER_KEY_JA = "こせき ぎじにってい けっこん せつぞく うんどう ふこう にっすう こせい きさま なまみ たきび はかい";//japanese + public static final String PAPER_KEY_KO = "특징 대형 즐거움 순위 입장 행복 오랫동안 무더위 특징 옆구리 엽서 단위";//korean + public static final String PAPER_KEY_PT = "surreal cartaz ralado girino oportuno usina madrinha corporal surreal longe liquidez cadeado";//portuguese + public static final String PAPER_KEY_ZH_CN = "怨 贪 旁 扎 吹 音 决 廷 十 助 畜 怒";//chinese (simplified) + public static final String PAPER_KEY_ZH_TW = "棚 深 偵 衡 埃 摘 齒 黃 棚 紛 遭 況";//chinese (traditional) + + @Before + public void setup() { + } @Test - public void testPaperKeyValidation() { - List list = getAllWords(); - assertThat(list.size(), is(10240)); + public void testWordlistsValidSizes() { + for(Bip39Wordlist wordlist : Bip39Wordlist.LANGS) { + //This will raise an exception if the wordlist is invalid + wordlist.loadWords(null); + assertEquals("Wordlist is expected size", wordlist.getWords().length, Bip39Wordlist.WORD_LIST_SIZE); + } } - private List getAllWords() { - List result = new ArrayList<>(); - List names = new ArrayList<>(); - names.add("cs-BIP39Words.txt"); - names.add("en-BIP39Words.txt"); - names.add("es-BIP39Words.txt"); - names.add("fr-BIP39Words.txt"); - names.add("it-BIP39Words.txt"); - names.add("ja-BIP39Words.txt"); - names.add("ko-BIP39Words.txt"); - names.add("pt-BIP39Words.txt"); - names.add("zh-CN-BIP39Words.txt"); - names.add("zh-TW-BIP39Words.txt"); + void testPaperKey(String paperKeyName, String testPhrase, String expectedLanguage) { + Bip39Wordlist testWordList = Bip39Wordlist.identifyWordlist(null, testPhrase); - /* - for (String fileName : names) { - InputStream in = null; - try { - in = getClass().getResourceAsStream(fileName); - String str = IOUtils.toString(in); - String lines[] = str.split("\\r?\\n"); - result.addAll(Arrays.asList(lines)); - } catch (IOException e) { - Log.e(TAG, "getAllWords: " + fileName + ", ", e); - } finally { - if (in != null) try { - in.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - */ - List cleanList = new ArrayList<>(); - //for (String s : result) { - //String cleanWord = Bip39Reader.cleanWord(s); - //cleanList.add(cleanWord); - //} - //assertThat(cleanList.size(), is(10240)); - - return cleanList; + Assert.assertEquals(paperKeyName + " Phrase length", Bip39Wordlist.PHRASE_SZE, Bip39Wordlist.splitPharse(testPhrase).length); + Assert.assertNotNull(paperKeyName + " Phrase detected", testWordList); + Assert.assertEquals(paperKeyName + " Phrase language autodetected", expectedLanguage, testWordList.getLanguageCode()); + } + + @Test + public void testCzechPaperKey() { + testPaperKey("Czech", PAPER_KEY_CS, "cs"); + } + + @Test + public void testEnglishPaperKey() { + testPaperKey("English", PAPER_KEY_EN, "en"); + } + + @Test + public void testSpanishPaperKey() { + testPaperKey("Spanish", PAPER_KEY_ES, "es"); + } + + @Test + public void testFrenchPaperKey() { + testPaperKey("French", PAPER_KEY_FR, "fr"); + } + + @Test + public void testItalianPaperKey() { + testPaperKey("Italian", PAPER_KEY_IT, "it"); + } + + @Test + public void testJapanesePaperKey() { + testPaperKey("Japanese", PAPER_KEY_JA, "ja"); + } + + @Test + public void testKoreanPaperKey() { + testPaperKey("Korean", PAPER_KEY_KO, "ko"); + } + + @Test + public void testPortuguesePaperKey() { + testPaperKey("Portuguese", PAPER_KEY_PT, "pt"); } - /*private boolean isValid(String phrase, List words) { + @Test + public void testChineseSimplifiedPaperKey() { + testPaperKey("Chinese (Simplified)", PAPER_KEY_ZH_CN, "zh-CN"); + } - return WalletsMaster.getInstance().validateRecoveryPhrase((String[]) words.toArray(), phrase); - }*/ + @Test + public void testChineseTraditionalPaperKey() { + testPaperKey("Chinese (Traditional)", PAPER_KEY_ZH_TW, "zh-TW"); + } + + @Test + public void testPaperKeyGenerate() { + //TODO: For some reason when testing, generatePaperKeyBytes (which calls JNI generatePaperKey) crashes with UnsatisfiedLinkError. + //Have not been able to track it down yet, but it works correctly when running the application normally + + /* + ////Main structure copied from WalletsMaster.java + Bip39Wordlist bipWords = Bip39Wordlist.DEFAULT_WORDLIST; + + //Generate a random seed to use + final byte[] randomSeed = bipWords.generateRandomSeed(); + //Generate a byte-array String of the paper key created + byte[] paperKeyBytes = bipWords.generatePaperKeyBytes(null, randomSeed); + //Split that byte[] into an array of each word + String[] splitPhrase = bipWords.splitPharse(paperKeyBytes); + + Assert.assertEquals("Correct seed size", 16, randomSeed.length); + Assert.assertEquals("Correct phrase size", Bip39Wordlist.PHRASE_SZE, splitPhrase.length); + Assert.assertNotNull("Valid phrase", Bip39Wordlist.identifyWordlist(null, paperKeyBytes)); + + //Re-extract the seed from the newly created phrase for checking + byte[] verifyRandomSeed = bipWords.getSeedFromPhrase(paperKeyBytes); + + //Create an api private key, this function will internally verify the results, and will raise if invalid + byte[] privateKeyBytes = bipWords.getPrivateKeyForAPI(randomSeed); + + Assert.assertEquals("Paper key seed matches length", randomSeed.length, verifyRandomSeed.length); + for(int i=0;i Date: Thu, 8 Apr 2021 22:32:15 -0400 Subject: [PATCH 06/10] Added helper function `decodePaperKey` to BRCoreMasterPubKey, for reversing the seed value from a given phrase. --- .../com_ravencoin_core_BRCoreMasterPubKey.c | 40 +++++++++++++++++++ .../com_ravencoin_core_BRCoreMasterPubKey.h | 8 ++++ 2 files changed, 48 insertions(+) diff --git a/app/src/main/jni/com_ravencoin_core_BRCoreMasterPubKey.c b/app/src/main/jni/com_ravencoin_core_BRCoreMasterPubKey.c index 596b37ac5..34067a1ba 100644 --- a/app/src/main/jni/com_ravencoin_core_BRCoreMasterPubKey.c +++ b/app/src/main/jni/com_ravencoin_core_BRCoreMasterPubKey.c @@ -268,3 +268,43 @@ Java_com_ravenwallet_core_BRCoreMasterPubKey_generatePaperKey return bytePhrase; } + +/* + * Class: com_ravencoin_core_BRCoreMasterPubKey + * Method: generatePaperKey + * Signature: ([B[Ljava/lang/String;)[B + */ +JNIEXPORT jbyteArray JNICALL +Java_com_ravenwallet_core_BRCoreMasterPubKey_decodePaperKey + (JNIEnv *env, jclass thisClass, jstring jPhrase, jobjectArray stringArray) { + int wordsCount = (*env)->GetArrayLength(env, stringArray); + char *wordList[wordsCount]; + + for (int i = 0; i < wordsCount; i++) { + jstring string = (jstring) (*env)->GetObjectArrayElement(env, stringArray, i); + const char *rawString = (*env)->GetStringUTFChars(env, string, 0); + + wordList[i] = malloc(strlen(rawString) + 1); + strcpy(wordList[i], rawString); + (*env)->ReleaseStringUTFChars(env, string, rawString); + (*env)->DeleteLocalRef(env, string); + } + + const char *phraseString = (*env)->GetStringUTFChars(env, jPhrase, NULL); + int result = BRBIP39PhraseIsValid((const char **) wordList, phraseString); + + UInt128 entropy = UINT128_ZERO; + BRBIP39Decode(entropy.u8, sizeof(entropy), wordList, phraseString); + + (*env)->ReleaseStringUTFChars(env, jPhrase, phraseString); + + if(result == JNI_FALSE) { + return NULL; + } + + + jbyteArray bytePhrase = (*env)->NewByteArray(env, sizeof(entropy)); + (*env)->SetByteArrayRegion(env, bytePhrase, 0, sizeof(entropy), entropy.u8); + + return bytePhrase; +} diff --git a/app/src/main/jni/com_ravencoin_core_BRCoreMasterPubKey.h b/app/src/main/jni/com_ravencoin_core_BRCoreMasterPubKey.h index 7cfd79fb0..32368e631 100644 --- a/app/src/main/jni/com_ravencoin_core_BRCoreMasterPubKey.h +++ b/app/src/main/jni/com_ravencoin_core_BRCoreMasterPubKey.h @@ -71,6 +71,14 @@ JNIEXPORT jboolean JNICALL Java_com_ravenwallet_core_BRCoreMasterPubKey_validate JNIEXPORT jbyteArray JNICALL Java_com_ravenwallet_core_BRCoreMasterPubKey_generatePaperKey (JNIEnv *, jclass, jbyteArray, jobjectArray); +/* + * Class: com_ravencoin_core_BRCoreMasterPubKey + * Method: decodePaperKey + * Signature: (Ljava/lang/String;[Ljava/lang/String;)[B + */ +JNIEXPORT jbyteArray JNICALL Java_com_ravenwallet_core_BRCoreMasterPubKey_decodePaperKey + (JNIEnv *env, jclass thisClass, jstring jPhrase, jobjectArray stringArray); + #ifdef __cplusplus } #endif From 2673cf2b6d81f7d8676e37f788599d9d9fbef71e Mon Sep 17 00:00:00 2001 From: Ben Abraham Date: Thu, 8 Apr 2021 22:35:48 -0400 Subject: [PATCH 07/10] Added UI elements for selecting the paper key phrase language, prior to writing down of your paper key. Generate displayed paper key in selected language, in the background the phrase is always stored as English. Renamed `BRCoreKey.getSeedFromPhrase` to `BRCoreKey.getDerivedPhraseKey` to match underlying JNI names. --- .../activities/PaperKeyActivity.java | 5 + .../activities/intro/WriteDownActivity.java | 102 +++++++++++++++++- .../ravenwallet/tools/security/PostAuth.java | 14 ++- .../ravenwallet/tools/util/Bip39Wordlist.java | 21 ++-- .../com/ravenwallet/wallet/WalletsMaster.java | 4 +- .../main/jni/com_ravencoin_core_BRCoreKey.c | 4 +- .../main/jni/com_ravencoin_core_BRCoreKey.h | 4 +- .../root/com/ravenwallet/core/BRCoreKey.java | 2 +- .../ravenwallet/core/BRCoreMasterPubKey.java | 9 ++ .../main/res/layout/activity_write_down.xml | 24 +++++ app/src/main/res/values/strings.xml | 2 + 11 files changed, 177 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/ravenwallet/presenter/activities/PaperKeyActivity.java b/app/src/main/java/com/ravenwallet/presenter/activities/PaperKeyActivity.java index 7d3ddf0aa..7b2e1d746 100644 --- a/app/src/main/java/com/ravenwallet/presenter/activities/PaperKeyActivity.java +++ b/app/src/main/java/com/ravenwallet/presenter/activities/PaperKeyActivity.java @@ -22,6 +22,7 @@ import com.ravenwallet.tools.animation.BRDialog; import com.ravenwallet.tools.manager.BRReportsManager; import com.ravenwallet.tools.security.PostAuth; +import com.ravenwallet.tools.util.Bip39Wordlist; import com.ravenwallet.tools.util.Utils; import java.util.Locale; @@ -96,7 +97,11 @@ public void onClick(View v) { } }); + String cleanPhrase = getIntent().getExtras() == null ? null : getIntent().getStringExtra("phrase"); + String phraseLanguage = getIntent().getExtras() == null ? null : getIntent().getStringExtra("phraseLanguage"); + phraseLanguage = phraseLanguage == null ? Bip39Wordlist.DEFAULT_WORDLIST.getLanguageCode() : phraseLanguage; + wordMap = new SparseArray<>(); if (Utils.isNullOrEmpty(cleanPhrase)) { diff --git a/app/src/main/java/com/ravenwallet/presenter/activities/intro/WriteDownActivity.java b/app/src/main/java/com/ravenwallet/presenter/activities/intro/WriteDownActivity.java index a861c1595..12aa5d7cb 100644 --- a/app/src/main/java/com/ravenwallet/presenter/activities/intro/WriteDownActivity.java +++ b/app/src/main/java/com/ravenwallet/presenter/activities/intro/WriteDownActivity.java @@ -2,33 +2,61 @@ import android.annotation.TargetApi; import android.app.Activity; +import android.content.Context; import android.content.Intent; import android.graphics.drawable.Drawable; import android.os.Build; import android.os.Bundle; import android.util.Log; +import android.view.LayoutInflater; import android.view.View; +import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.ListView; +import android.widget.TextView; import com.ravenwallet.R; import com.ravenwallet.presenter.activities.HomeActivity; import com.ravenwallet.presenter.activities.util.BRActivity; +import com.ravenwallet.presenter.entities.BRSettingsItem; +import com.ravenwallet.presenter.entities.IPFSGateway; import com.ravenwallet.presenter.interfaces.BRAuthCompletion; import com.ravenwallet.tools.animation.BRAnimator; +import com.ravenwallet.tools.manager.BRSharedPrefs; +import com.ravenwallet.tools.manager.FontManager; import com.ravenwallet.tools.security.AuthManager; import com.ravenwallet.tools.security.PostAuth; import com.ravenwallet.tools.util.BRConstants; +import com.ravenwallet.tools.util.Bip39Wordlist; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import androidx.annotation.LayoutRes; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import static com.ravenwallet.R.layout.settings_list_item; +import static com.ravenwallet.R.layout.settings_list_section; public class WriteDownActivity extends BRActivity { private static final String TAG = WriteDownActivity.class.getName(); private Button writeButton; private ImageButton close; + private ListView languageList; public static boolean appVisible = false; private static WriteDownActivity app; + private MnemonicLanguageListAdapter languageOptions; + private Bip39Wordlist selectedLanguage; + public static WriteDownActivity getApp() { return app; } @@ -38,6 +66,8 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_write_down); + selectedLanguage = Bip39Wordlist.getWordlistForLocale(); + writeButton = findViewById(R.id.button_write_down); close = findViewById(R.id.close_button); close.setOnClickListener(new View.OnClickListener() { @@ -54,6 +84,18 @@ public void onClick(View v) { BRAnimator.showSupportFragment(app, BRConstants.paperKey); } }); + languageList = findViewById(R.id.language_list); + languageOptions = new MnemonicLanguageListAdapter(this, R.layout.gateway_list_item); + languageList.setAdapter(languageOptions); + languageList.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView adapterView, View view, int i, long l) { + Bip39Wordlist newLanguage = languageOptions.getItem(i); + languageOptions.setSelectedLanguage(newLanguage); + languageOptions.notifyDataSetChanged(); + } + }); + writeButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -61,7 +103,7 @@ public void onClick(View v) { AuthManager.getInstance().authPrompt(WriteDownActivity.this, null, getString(R.string.VerifyPin_continueBody), true, false, new BRAuthCompletion() { @Override public void onComplete() { - PostAuth.getInstance().onPhraseCheckAuth(WriteDownActivity.this, false); + PostAuth.getInstance().onPhraseCheckAuth(WriteDownActivity.this, false, languageOptions.selectedLanguage.getLanguageCode()); } @Override @@ -122,4 +164,62 @@ private void close() { if (!isDestroyed()) finish(); } + + + public class MnemonicLanguageListAdapter extends ArrayAdapter { + + private Context mContext; + int layoutResourceId; + + Bip39Wordlist selectedLanguage; + + public MnemonicLanguageListAdapter(@NonNull Context context, @LayoutRes int resource) { + super(context, resource); + this.selectedLanguage = Bip39Wordlist.getWordlistForLocale(); + this.mContext = context; + this.layoutResourceId = resource; + this.addAll(Bip39Wordlist.LANGS); + } + + public Bip39Wordlist getSelectedLanguage() { + return selectedLanguage; + } + + public void setSelectedLanguage(Bip39Wordlist selectedLanguage) { + this.selectedLanguage = selectedLanguage; + } + + @NonNull + @Override + public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { + Bip39Wordlist wordlist = getItem(position); + + if (convertView == null) { + LayoutInflater inflater = ((Activity) mContext).getLayoutInflater(); + convertView = inflater.inflate(layoutResourceId, parent, false); + } + TextView textViewItem = convertView.findViewById(R.id.gateway_item_name); + FontManager.overrideFonts(textViewItem); + textViewItem.setText(String.format("%s [%s]", wordlist.getLanguageName(), wordlist.getLanguageCode())); + ImageView checkMark = convertView.findViewById(R.id.gateway_checkmark); + + if (wordlist.getLanguageCode().equals(selectedLanguage.getLanguageCode())) { + checkMark.setVisibility(View.VISIBLE); + } else { + checkMark.setVisibility(View.GONE); + } + + return convertView; + } + + @Override + public int getCount() { + return super.getCount(); + } + + @Override + public int getItemViewType(int position) { + return super.getItemViewType(position); + } + } } diff --git a/app/src/main/java/com/ravenwallet/tools/security/PostAuth.java b/app/src/main/java/com/ravenwallet/tools/security/PostAuth.java index bc42c3775..dc697beda 100644 --- a/app/src/main/java/com/ravenwallet/tools/security/PostAuth.java +++ b/app/src/main/java/com/ravenwallet/tools/security/PostAuth.java @@ -24,6 +24,7 @@ import com.ravenwallet.tools.sqlite.CurrencyDataSource; import com.ravenwallet.tools.threads.executor.BRExecutor; import com.ravenwallet.tools.util.BRConstants; +import com.ravenwallet.tools.util.Bip39Wordlist; import com.ravenwallet.tools.util.Utils; import com.ravenwallet.wallet.WalletsMaster; import com.ravenwallet.wallet.abstracts.BaseWalletManager; @@ -73,6 +74,10 @@ public void onCreateWalletAuth(Activity app, boolean authAsked) { } public void onPhraseCheckAuth(Activity app, boolean authAsked) { + onPhraseCheckAuth(app, authAsked, Bip39Wordlist.DEFAULT_WORDLIST.getLanguageCode()); + } + + public void onPhraseCheckAuth(Activity app, boolean authAsked, String phraseLanguage) { String cleanPhrase; try { byte[] raw = BRKeyStore.getPhrase(app, BRConstants.SHOW_PHRASE_REQUEST_CODE); @@ -81,6 +86,12 @@ public void onPhraseCheckAuth(Activity app, boolean authAsked) { return; } cleanPhrase = new String(raw); + //TODO: Need to handle this better, by storing the phrase as direct seed bytes (encoded if needed) and not english text phrase + if(!phraseLanguage.equals(Bip39Wordlist.DEFAULT_WORDLIST.getLanguageCode())) { + byte[] phraseSeed = Bip39Wordlist.DEFAULT_WORDLIST.decodePaperKeyPhrase(app, cleanPhrase); + byte[] translatedPhrase = Bip39Wordlist.getWordlistForLanguage(phraseLanguage).generatePaperKeyBytes(app, phraseSeed); + cleanPhrase = new String(translatedPhrase); + } } catch (UserNotAuthenticatedException e) { if (authAsked) { Log.e(TAG, "onPhraseCheckAuth: WARNING!!!! LOOP"); @@ -90,6 +101,7 @@ public void onPhraseCheckAuth(Activity app, boolean authAsked) { } Intent intent = new Intent(app, PaperKeyActivity.class); intent.putExtra("phrase", cleanPhrase); + intent.putExtra("phraseLanguage", phraseLanguage); app.startActivity(intent); app.overridePendingTransition(R.anim.enter_from_bottom, R.anim.empty_300); } @@ -140,7 +152,7 @@ public void onRecoverWalletAuth(Activity app, boolean authAsked) { } else { if (phraseForKeyStore.length() != 0) { BRSharedPrefs.putPhraseWroteDown(app, true); - byte[] seed = BRCoreKey.getSeedFromPhrase(phraseForKeyStore.getBytes()); + byte[] phraseKey = BRCoreKey.getDerivedPhraseKey(phraseForKeyStore.getBytes()); // byte[] authKey = BRCoreKey.getAuthPrivKeyForAPI(seed); // BRKeyStore.putAuthKey(authKey, app); BRCoreMasterPubKey mpk = new BRCoreMasterPubKey(phraseForKeyStore.getBytes(), true); diff --git a/app/src/main/java/com/ravenwallet/tools/util/Bip39Wordlist.java b/app/src/main/java/com/ravenwallet/tools/util/Bip39Wordlist.java index 688c68ae9..c8072b00c 100644 --- a/app/src/main/java/com/ravenwallet/tools/util/Bip39Wordlist.java +++ b/app/src/main/java/com/ravenwallet/tools/util/Bip39Wordlist.java @@ -15,8 +15,6 @@ import java.nio.charset.StandardCharsets; import java.security.SecureRandom; import java.text.Normalizer; -import java.util.ArrayList; -import java.util.List; import java.util.Locale; public class Bip39Wordlist { @@ -52,11 +50,12 @@ public static Bip39Wordlist getWordlistForLocale(Locale locale) { return getWordlistForLanguage(languageCode); } public static Bip39Wordlist getWordlistForLanguage(String languageCode) { + if(languageCode == null) return null; for(Bip39Wordlist lang : LANGS) { if (lang.languageCode.equals(languageCode)) return lang; } - return getWordlistForLocale(); + return null; } public static Bip39Wordlist identifyWordlist(Context app, byte[] paperKeyBytes) { return identifyWordlist(app, paperKeyString(paperKeyBytes)); @@ -105,7 +104,10 @@ public Bip39Wordlist(String languageCode, String languageName) { public String getLanguageCode() { return languageCode; } public String getLanguageName() { return languageName; } - public String[] getWords() { return loadedWords; } + public String[] getWords(Context app) { + loadWords(app); + return loadedWords; + } public boolean hasWord(Context app, String checkWord) { loadWords(app); @@ -190,8 +192,15 @@ public byte[] generateRandomSeed() { return randomSeed; } - public byte[] getSeedFromPhrase(byte[] paperKeyBytes) { - byte[] seed = BRCoreKey.getSeedFromPhrase(paperKeyBytes); + public byte[] getDerivedPhraseKey(byte[] paperKeyBytes) { + byte[] seed = BRCoreKey.getDerivedPhraseKey(paperKeyBytes); + if (seed == null || seed.length == 0) + throw new RuntimeException("seed is null"); + return seed; + } + + public byte[] decodePaperKeyPhrase(Context app, String phrase) { + byte[] seed = BRCoreMasterPubKey.decodePaperKey(phrase, getWords(app)); if (seed == null || seed.length == 0) throw new RuntimeException("seed is null"); return seed; diff --git a/app/src/main/java/com/ravenwallet/wallet/WalletsMaster.java b/app/src/main/java/com/ravenwallet/wallet/WalletsMaster.java index 3035cfa09..33adc7e34 100644 --- a/app/src/main/java/com/ravenwallet/wallet/WalletsMaster.java +++ b/app/src/main/java/com/ravenwallet/wallet/WalletsMaster.java @@ -111,8 +111,10 @@ public synchronized boolean generateRandomSeed(final Context ctx) { if (verifyPaperKeyBytes.length == 0) throw new RuntimeException("verifyPaperKeyBytes is empty"); + //Not-sure what these two are used for...They were generated and unused in the old code + //Re-extract the seed from the newly created phrase for checking - byte[] verifyRandomSeed = bipWords.getSeedFromPhrase(verifyPaperKeyBytes); + byte[] derivedPhraseKey = bipWords.getDerivedPhraseKey(verifyPaperKeyBytes); //Create an api private key, this function will internally verify the results, and will raise if invalid byte[] privateKeyBytes = bipWords.getPrivateKeyForAPI(randomSeed); diff --git a/app/src/main/jni/com_ravencoin_core_BRCoreKey.c b/app/src/main/jni/com_ravencoin_core_BRCoreKey.c index 05cca1677..e46b65fd3 100644 --- a/app/src/main/jni/com_ravencoin_core_BRCoreKey.c +++ b/app/src/main/jni/com_ravencoin_core_BRCoreKey.c @@ -125,11 +125,11 @@ Java_com_ravenwallet_core_BRCoreKey_getBase58EncodedPublicKey /* * Class: com_ravencoin_core_BRCoreKey - * Method: getSeedFromPhrase + * Method: getDerivedPhraseKey * Signature: ([B)[B */ JNIEXPORT jbyteArray JNICALL -Java_com_ravenwallet_core_BRCoreKey_getSeedFromPhrase +Java_com_ravenwallet_core_BRCoreKey_getDerivedPhraseKey (JNIEnv *env, jclass thisClass, jbyteArray phrase) { jbyte *bytePhrase = (*env)->GetByteArrayElements(env, phrase, 0); diff --git a/app/src/main/jni/com_ravencoin_core_BRCoreKey.h b/app/src/main/jni/com_ravencoin_core_BRCoreKey.h index d928a48b6..87c2ea70f 100644 --- a/app/src/main/jni/com_ravencoin_core_BRCoreKey.h +++ b/app/src/main/jni/com_ravencoin_core_BRCoreKey.h @@ -41,10 +41,10 @@ JNIEXPORT jstring JNICALL Java_com_ravenwallet_core_BRCoreKey_getPrivKey /* * Class: com_ravencoin_core_BRCoreKey - * Method: getSeedFromPhrase + * Method: getDerivedPhraseKey * Signature: ([B)[B */ -JNIEXPORT jbyteArray JNICALL Java_com_ravenwallet_core_BRCoreKey_getSeedFromPhrase +JNIEXPORT jbyteArray JNICALL Java_com_ravenwallet_core_BRCoreKey_getDerivedPhraseKey (JNIEnv *, jclass, jbyteArray); /* diff --git a/app/src/main/jni/root/com/ravenwallet/core/BRCoreKey.java b/app/src/main/jni/root/com/ravenwallet/core/BRCoreKey.java index f02c35efc..1c5b36935 100644 --- a/app/src/main/jni/root/com/ravenwallet/core/BRCoreKey.java +++ b/app/src/main/jni/root/com/ravenwallet/core/BRCoreKey.java @@ -109,7 +109,7 @@ public BRCoreKey () { // // // - public static native byte[] getSeedFromPhrase (byte[] phrase); + public static native byte[] getDerivedPhraseKey(byte[] phrase); public static native byte[] getAuthPrivKeyForAPI (byte[] seed); diff --git a/app/src/main/jni/root/com/ravenwallet/core/BRCoreMasterPubKey.java b/app/src/main/jni/root/com/ravenwallet/core/BRCoreMasterPubKey.java index 4601e993b..980d852b3 100644 --- a/app/src/main/jni/root/com/ravenwallet/core/BRCoreMasterPubKey.java +++ b/app/src/main/jni/root/com/ravenwallet/core/BRCoreMasterPubKey.java @@ -109,4 +109,13 @@ private BRCoreMasterPubKey (long jniReferenceAddress) { * @return */ public static native byte[] generatePaperKey (byte[] seed, String[] words); + + /** + * Generate seed from a 'paper key' and an array of words[2048]. + * + * @param phrase The phrase to decode + * @param words Valid words. + * @return + */ + public static native byte[] decodePaperKey (String phrase, String[] words); } diff --git a/app/src/main/res/layout/activity_write_down.xml b/app/src/main/res/layout/activity_write_down.xml index 5f2d1ee5e..b11ffae4f 100644 --- a/app/src/main/res/layout/activity_write_down.xml +++ b/app/src/main/res/layout/activity_write_down.xml @@ -62,6 +62,7 @@ + + + + + Your paper key is the only way to restore your Ravencoin Wallet if your phone is lost, stolen, broken, or upgraded.\n\nWe will show you a list of words to write down on a piece of paper and keep safe. + + Paper Key Language Write Down Paper Key From 94e17527b6059be1e2950beff5bfb5c1c9916d13 Mon Sep 17 00:00:00 2001 From: Ben Abraham Date: Sat, 10 Apr 2021 14:27:38 -0400 Subject: [PATCH 08/10] Removed UI elements for manual BIP39 language selection. Phrase language selection is entirely based on system language at the time of phrase creation. After the phrase has been created, it is always interpreted as text going forward, so all existing references should continue to work with no issues. Added helper function for validating whole phrase. Added helper function for getting current locale in a version-aware manner. --- .../activities/PaperKeyActivity.java | 6 +- .../activities/intro/WriteDownActivity.java | 77 +------------------ .../ravenwallet/tools/security/PostAuth.java | 11 --- .../ravenwallet/tools/util/Bip39Wordlist.java | 11 ++- .../com/ravenwallet/tools/util/Utils.java | 9 +++ .../com/ravenwallet/wallet/WalletsMaster.java | 2 +- .../com_ravencoin_core_BRCoreMasterPubKey.c | 8 +- .../main/res/layout/activity_write_down.xml | 23 ------ app/src/test/java/PaperKeyTests.java | 2 +- 9 files changed, 26 insertions(+), 123 deletions(-) diff --git a/app/src/main/java/com/ravenwallet/presenter/activities/PaperKeyActivity.java b/app/src/main/java/com/ravenwallet/presenter/activities/PaperKeyActivity.java index 7b2e1d746..cffd13ce8 100644 --- a/app/src/main/java/com/ravenwallet/presenter/activities/PaperKeyActivity.java +++ b/app/src/main/java/com/ravenwallet/presenter/activities/PaperKeyActivity.java @@ -99,8 +99,10 @@ public void onClick(View v) { }); String cleanPhrase = getIntent().getExtras() == null ? null : getIntent().getStringExtra("phrase"); - String phraseLanguage = getIntent().getExtras() == null ? null : getIntent().getStringExtra("phraseLanguage"); - phraseLanguage = phraseLanguage == null ? Bip39Wordlist.DEFAULT_WORDLIST.getLanguageCode() : phraseLanguage; + + if(!Bip39Wordlist.isValidPhrase(PaperKeyActivity.this, cleanPhrase)) { + BRReportsManager.reportBug(new IllegalArgumentException("Paper key phrase is invalid"), true); + } wordMap = new SparseArray<>(); diff --git a/app/src/main/java/com/ravenwallet/presenter/activities/intro/WriteDownActivity.java b/app/src/main/java/com/ravenwallet/presenter/activities/intro/WriteDownActivity.java index 12aa5d7cb..b78e526bf 100644 --- a/app/src/main/java/com/ravenwallet/presenter/activities/intro/WriteDownActivity.java +++ b/app/src/main/java/com/ravenwallet/presenter/activities/intro/WriteDownActivity.java @@ -50,13 +50,9 @@ public class WriteDownActivity extends BRActivity { private static final String TAG = WriteDownActivity.class.getName(); private Button writeButton; private ImageButton close; - private ListView languageList; public static boolean appVisible = false; private static WriteDownActivity app; - private MnemonicLanguageListAdapter languageOptions; - private Bip39Wordlist selectedLanguage; - public static WriteDownActivity getApp() { return app; } @@ -66,8 +62,6 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_write_down); - selectedLanguage = Bip39Wordlist.getWordlistForLocale(); - writeButton = findViewById(R.id.button_write_down); close = findViewById(R.id.close_button); close.setOnClickListener(new View.OnClickListener() { @@ -84,17 +78,6 @@ public void onClick(View v) { BRAnimator.showSupportFragment(app, BRConstants.paperKey); } }); - languageList = findViewById(R.id.language_list); - languageOptions = new MnemonicLanguageListAdapter(this, R.layout.gateway_list_item); - languageList.setAdapter(languageOptions); - languageList.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView adapterView, View view, int i, long l) { - Bip39Wordlist newLanguage = languageOptions.getItem(i); - languageOptions.setSelectedLanguage(newLanguage); - languageOptions.notifyDataSetChanged(); - } - }); writeButton.setOnClickListener(new View.OnClickListener() { @Override @@ -103,7 +86,7 @@ public void onClick(View v) { AuthManager.getInstance().authPrompt(WriteDownActivity.this, null, getString(R.string.VerifyPin_continueBody), true, false, new BRAuthCompletion() { @Override public void onComplete() { - PostAuth.getInstance().onPhraseCheckAuth(WriteDownActivity.this, false, languageOptions.selectedLanguage.getLanguageCode()); + PostAuth.getInstance().onPhraseCheckAuth(WriteDownActivity.this, false); } @Override @@ -164,62 +147,4 @@ private void close() { if (!isDestroyed()) finish(); } - - - public class MnemonicLanguageListAdapter extends ArrayAdapter { - - private Context mContext; - int layoutResourceId; - - Bip39Wordlist selectedLanguage; - - public MnemonicLanguageListAdapter(@NonNull Context context, @LayoutRes int resource) { - super(context, resource); - this.selectedLanguage = Bip39Wordlist.getWordlistForLocale(); - this.mContext = context; - this.layoutResourceId = resource; - this.addAll(Bip39Wordlist.LANGS); - } - - public Bip39Wordlist getSelectedLanguage() { - return selectedLanguage; - } - - public void setSelectedLanguage(Bip39Wordlist selectedLanguage) { - this.selectedLanguage = selectedLanguage; - } - - @NonNull - @Override - public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { - Bip39Wordlist wordlist = getItem(position); - - if (convertView == null) { - LayoutInflater inflater = ((Activity) mContext).getLayoutInflater(); - convertView = inflater.inflate(layoutResourceId, parent, false); - } - TextView textViewItem = convertView.findViewById(R.id.gateway_item_name); - FontManager.overrideFonts(textViewItem); - textViewItem.setText(String.format("%s [%s]", wordlist.getLanguageName(), wordlist.getLanguageCode())); - ImageView checkMark = convertView.findViewById(R.id.gateway_checkmark); - - if (wordlist.getLanguageCode().equals(selectedLanguage.getLanguageCode())) { - checkMark.setVisibility(View.VISIBLE); - } else { - checkMark.setVisibility(View.GONE); - } - - return convertView; - } - - @Override - public int getCount() { - return super.getCount(); - } - - @Override - public int getItemViewType(int position) { - return super.getItemViewType(position); - } - } } diff --git a/app/src/main/java/com/ravenwallet/tools/security/PostAuth.java b/app/src/main/java/com/ravenwallet/tools/security/PostAuth.java index dc697beda..91864f1e4 100644 --- a/app/src/main/java/com/ravenwallet/tools/security/PostAuth.java +++ b/app/src/main/java/com/ravenwallet/tools/security/PostAuth.java @@ -74,10 +74,6 @@ public void onCreateWalletAuth(Activity app, boolean authAsked) { } public void onPhraseCheckAuth(Activity app, boolean authAsked) { - onPhraseCheckAuth(app, authAsked, Bip39Wordlist.DEFAULT_WORDLIST.getLanguageCode()); - } - - public void onPhraseCheckAuth(Activity app, boolean authAsked, String phraseLanguage) { String cleanPhrase; try { byte[] raw = BRKeyStore.getPhrase(app, BRConstants.SHOW_PHRASE_REQUEST_CODE); @@ -86,12 +82,6 @@ public void onPhraseCheckAuth(Activity app, boolean authAsked, String phraseLang return; } cleanPhrase = new String(raw); - //TODO: Need to handle this better, by storing the phrase as direct seed bytes (encoded if needed) and not english text phrase - if(!phraseLanguage.equals(Bip39Wordlist.DEFAULT_WORDLIST.getLanguageCode())) { - byte[] phraseSeed = Bip39Wordlist.DEFAULT_WORDLIST.decodePaperKeyPhrase(app, cleanPhrase); - byte[] translatedPhrase = Bip39Wordlist.getWordlistForLanguage(phraseLanguage).generatePaperKeyBytes(app, phraseSeed); - cleanPhrase = new String(translatedPhrase); - } } catch (UserNotAuthenticatedException e) { if (authAsked) { Log.e(TAG, "onPhraseCheckAuth: WARNING!!!! LOOP"); @@ -101,7 +91,6 @@ public void onPhraseCheckAuth(Activity app, boolean authAsked, String phraseLang } Intent intent = new Intent(app, PaperKeyActivity.class); intent.putExtra("phrase", cleanPhrase); - intent.putExtra("phraseLanguage", phraseLanguage); app.startActivity(intent); app.overridePendingTransition(R.anim.enter_from_bottom, R.anim.empty_300); } diff --git a/app/src/main/java/com/ravenwallet/tools/util/Bip39Wordlist.java b/app/src/main/java/com/ravenwallet/tools/util/Bip39Wordlist.java index c8072b00c..57418edae 100644 --- a/app/src/main/java/com/ravenwallet/tools/util/Bip39Wordlist.java +++ b/app/src/main/java/com/ravenwallet/tools/util/Bip39Wordlist.java @@ -41,10 +41,10 @@ public class Bip39Wordlist { }; public static Bip39Wordlist DEFAULT_WORDLIST = LANGS[1]; //en - public static Bip39Wordlist getWordlistForLocale() { - return getWordlistForLocale(Locale.getDefault()); + public static Bip39Wordlist getWordlistForCurrentLocale() { + return getWordlistForCurrentLocale(Utils.getCurrentLocale()); } - public static Bip39Wordlist getWordlistForLocale(Locale locale) { + public static Bip39Wordlist getWordlistForCurrentLocale(Locale locale) { String languageCode = locale != null ? locale.getLanguage() : null; if (languageCode == null) return DEFAULT_WORDLIST; return getWordlistForLanguage(languageCode); @@ -55,7 +55,7 @@ public static Bip39Wordlist getWordlistForLanguage(String languageCode) { if (lang.languageCode.equals(languageCode)) return lang; } - return null; + return DEFAULT_WORDLIST; } public static Bip39Wordlist identifyWordlist(Context app, byte[] paperKeyBytes) { return identifyWordlist(app, paperKeyString(paperKeyBytes)); @@ -66,6 +66,9 @@ public static Bip39Wordlist identifyWordlist(Context app, String phrase) { return list; return null; } + public static boolean isValidPhrase(Context app, String phrase) { + return identifyWordlist(app, phrase) != null; + } public static boolean isValidWord(Context app, String checkWord) { String cleanWord = cleanWord(checkWord); for(Bip39Wordlist list : LANGS) diff --git a/app/src/main/java/com/ravenwallet/tools/util/Utils.java b/app/src/main/java/com/ravenwallet/tools/util/Utils.java index 015b5c133..910bcbf8b 100644 --- a/app/src/main/java/com/ravenwallet/tools/util/Utils.java +++ b/app/src/main/java/com/ravenwallet/tools/util/Utils.java @@ -8,6 +8,7 @@ import android.content.pm.PackageManager; import android.hardware.fingerprint.FingerprintManager; import android.os.Build; +import android.os.LocaleList; import android.provider.Settings; import androidx.annotation.Nullable; import androidx.core.app.ActivityCompat; @@ -230,4 +231,12 @@ public static String getIpfsUrlFromHash(Context app, String hash) { //TODO: Hash Validation? return String.format(BRConstants.IPFS_URL_FORMAT, BRSharedPrefs.getPreferredIPFSGateway(app), hash); } + + public static Locale getCurrentLocale() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){ + return LocaleList.getDefault().get(0); + } else{ + return Locale.getDefault(); + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/ravenwallet/wallet/WalletsMaster.java b/app/src/main/java/com/ravenwallet/wallet/WalletsMaster.java index 33adc7e34..ae8813bd4 100644 --- a/app/src/main/java/com/ravenwallet/wallet/WalletsMaster.java +++ b/app/src/main/java/com/ravenwallet/wallet/WalletsMaster.java @@ -78,7 +78,7 @@ public BigDecimal getAggregatedFiatBalance(Context app) { } public synchronized boolean generateRandomSeed(final Context ctx) { - Bip39Wordlist bipWords = Bip39Wordlist.getWordlistForLocale(); + Bip39Wordlist bipWords = Bip39Wordlist.getWordlistForCurrentLocale(); //Generate a random seed to use final byte[] randomSeed = bipWords.generateRandomSeed(); diff --git a/app/src/main/jni/com_ravencoin_core_BRCoreMasterPubKey.c b/app/src/main/jni/com_ravencoin_core_BRCoreMasterPubKey.c index 34067a1ba..65e13b0c2 100644 --- a/app/src/main/jni/com_ravencoin_core_BRCoreMasterPubKey.c +++ b/app/src/main/jni/com_ravencoin_core_BRCoreMasterPubKey.c @@ -278,15 +278,13 @@ JNIEXPORT jbyteArray JNICALL Java_com_ravenwallet_core_BRCoreMasterPubKey_decodePaperKey (JNIEnv *env, jclass thisClass, jstring jPhrase, jobjectArray stringArray) { int wordsCount = (*env)->GetArrayLength(env, stringArray); - char *wordList[wordsCount]; + const char **wordList = (const char **) calloc (wordsCount, sizeof (char*)); for (int i = 0; i < wordsCount; i++) { jstring string = (jstring) (*env)->GetObjectArrayElement(env, stringArray, i); const char *rawString = (*env)->GetStringUTFChars(env, string, 0); - wordList[i] = malloc(strlen(rawString) + 1); - strcpy(wordList[i], rawString); - (*env)->ReleaseStringUTFChars(env, string, rawString); + wordList[i] = rawString; (*env)->DeleteLocalRef(env, string); } @@ -304,7 +302,7 @@ Java_com_ravenwallet_core_BRCoreMasterPubKey_decodePaperKey jbyteArray bytePhrase = (*env)->NewByteArray(env, sizeof(entropy)); - (*env)->SetByteArrayRegion(env, bytePhrase, 0, sizeof(entropy), entropy.u8); + (*env)->SetByteArrayRegion(env, bytePhrase, 0, sizeof(entropy), (jbyte *) entropy.u8); return bytePhrase; } diff --git a/app/src/main/res/layout/activity_write_down.xml b/app/src/main/res/layout/activity_write_down.xml index b11ffae4f..b3bd6e5ed 100644 --- a/app/src/main/res/layout/activity_write_down.xml +++ b/app/src/main/res/layout/activity_write_down.xml @@ -74,29 +74,6 @@ android:textColor="@color/almost_black" android:textSize="18sp"/> - - - - - Date: Sat, 10 Apr 2021 14:28:06 -0400 Subject: [PATCH 09/10] Fix function definition in PaperKeyTests. --- app/src/test/java/PaperKeyTests.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/test/java/PaperKeyTests.java b/app/src/test/java/PaperKeyTests.java index a3bd5ca89..a28737c3c 100644 --- a/app/src/test/java/PaperKeyTests.java +++ b/app/src/test/java/PaperKeyTests.java @@ -75,7 +75,7 @@ public void testWordlistsValidSizes() { for(Bip39Wordlist wordlist : Bip39Wordlist.LANGS) { //This will raise an exception if the wordlist is invalid wordlist.loadWords(null); - assertEquals("Wordlist is expected size", wordlist.getWords().length, Bip39Wordlist.WORD_LIST_SIZE); + assertEquals("Wordlist is expected size", wordlist.getWords(null).length, Bip39Wordlist.WORD_LIST_SIZE); } } From 08ab733bbc0223f0287dd94f67d3049019736543 Mon Sep 17 00:00:00 2001 From: Ben Abraham Date: Sat, 10 Apr 2021 16:21:05 -0400 Subject: [PATCH 10/10] Support for properly picking the highest available wordlist based on ordering of selected locales. Also fixed chinese languages not being selected properly. --- .../ravenwallet/tools/util/Bip39Wordlist.java | 34 +++++++++++++++---- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/ravenwallet/tools/util/Bip39Wordlist.java b/app/src/main/java/com/ravenwallet/tools/util/Bip39Wordlist.java index 57418edae..ca0feb9a5 100644 --- a/app/src/main/java/com/ravenwallet/tools/util/Bip39Wordlist.java +++ b/app/src/main/java/com/ravenwallet/tools/util/Bip39Wordlist.java @@ -2,6 +2,8 @@ import android.content.Context; import android.content.res.AssetManager; +import android.os.Build; +import android.os.LocaleList; import com.ravenwallet.core.BRCoreKey; import com.ravenwallet.core.BRCoreMasterPubKey; @@ -36,24 +38,42 @@ public class Bip39Wordlist { new Bip39Wordlist("ja","Japanese"), new Bip39Wordlist("ko","Korean"), new Bip39Wordlist("pt","Portuguese"), - new Bip39Wordlist("zh-CN","Chinese (Simplified)"), - new Bip39Wordlist("zh-TW","Chinese (Traditional)") + new Bip39Wordlist("zh-.*?CN","Chinese (Simplified)"), + new Bip39Wordlist("zh-.*?TW","Chinese (Traditional)") }; public static Bip39Wordlist DEFAULT_WORDLIST = LANGS[1]; //en public static Bip39Wordlist getWordlistForCurrentLocale() { - return getWordlistForCurrentLocale(Utils.getCurrentLocale()); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){ + LocaleList localeList = LocaleList.getDefault(); + //Search each selected locale, in order, to find the first available wordlist + for(int i = 0; i < localeList.size(); i++) { + Locale testLocale = localeList.get(i); + Bip39Wordlist testWordlist = getWordlistForLocale(testLocale); + if(testWordlist != DEFAULT_WORDLIST || testLocale.getLanguage().equals(DEFAULT_WORDLIST.languageCode)) + return testWordlist; + } + return DEFAULT_WORDLIST; //Fallback + } else{ + return getWordlistForLocale(Utils.getCurrentLocale()); + } } - public static Bip39Wordlist getWordlistForCurrentLocale(Locale locale) { - String languageCode = locale != null ? locale.getLanguage() : null; - if (languageCode == null) return DEFAULT_WORDLIST; - return getWordlistForLanguage(languageCode); + public static Bip39Wordlist getWordlistForLocale(Locale locale) { + if(locale == null) return DEFAULT_WORDLIST; + return getWordlistForLanguage(locale.getLanguage(), locale.toLanguageTag()); } public static Bip39Wordlist getWordlistForLanguage(String languageCode) { + return getWordlistForLanguage(languageCode, null); + } + public static Bip39Wordlist getWordlistForLanguage(String languageCode, String languageTag) { if(languageCode == null) return null; for(Bip39Wordlist lang : LANGS) { if (lang.languageCode.equals(languageCode)) return lang; + + //NOTE: when looking by language tag, we use .matches() to allow the use of regex + if(!Utils.isNullOrEmpty(languageTag) && languageTag.matches(lang.languageCode)) + return lang; } return DEFAULT_WORDLIST; }