@aladas-org/cryptocalc
Version:
Crypto Calculator
310 lines (302 loc) • 23.7 kB
Markdown
## Cryptocalc 0.3.17

1. Purpose
_Cryptocalc_ is a standalone desktop application which generates _Crypto wallets_
with either the _Non Deterministic_ (_Simple Wallet_) or _Hierarchical Deterministic_ (`BIP32`) paradigm.
Even though there is already a similar tools online, the purpose is to use these features
locally on your computer in order to reduce the risk of your _Private Key_ / _WIF_
or _seed phrase_ informations being stolen.
_Supported Blockchains_: _Bitcoins_ (`BTC`), _Ethereum_ (`ETH`), _Solana_ (`SOL`),
_Ripple_ (`XRP`), _DogeCoin_ (`DOGE`), _Cardano_ (`ADA`), _TRON_ (`TRON`),
_Avalanche_ (`AVX`), _Bitcoin Cash_ (`BCH`), _LiteCoin_ (`LTC`), _Dash_ (`DASH`) and _Firo_ (`FIRO`)
_Supported Languages_: _English_ (`EN`), _French_ (`FR`), _Spanish_ (`ES`), _Italian_ (`IT`),
_Czech_ (`CS`), _Portuguese_ (`PT`), _Deutsch_ (`DE`), _Esperanto_ (`EO`), _Russian_ (`RU`),
_Simplified Chinese_ (`SC`), _Traditional Chinese_ (`TC`), _Japanese_ (`JP`), _Korean_ (`KO`)
NB: _Cryptocalc_ uses [ElectronJS](https://www.electronjs.org/) as well as many modern and popular
[Desktop applications](https://en.wikipedia.org/wiki/List_of_software_using_Electron)
2. Setup
+ 2.1. _Fast and Furious_ (advised for end users)
+ 2.1.1. Download [Cryptocalc installer](https://sourceforge.net/projects/aladas-cryptocalc/files/latest/download)
from _SourceForge_ (NB: the installer was generated with
[electron packager](https://www.npmjs.com/package/@electron/packager) and
[Inno Setup](https://jrsoftware.org/isinfo.php).
Notice that the installer is not signed so _Windows Defender Smartscreen_
will require that you validate yourself the application source.
If you don't trust the installer, you can either:
+ 2.1.1.a. Rebuild yourself the _Installer_ by downloading `Inno Setup` and following the _Howto_
provided in the `_inno_setup` subfolder (`Howto build cryptocalc_setup.txt`)
+ 2.1.1.b. Else you can proceed to _Wizard's Lair_ setup instead (see 2.2)
+ 2.1.2. Default setup folder is `C:\Users\$CURRENT_USER\AppData\Local\Programs\Cryptocalc`
+ 2.1.3. Default subfolder where _Wallet informations_ are saved:
* `$DEFAULT_SETUP_FOLDER\resources\app\_output`
+ 2.2. _Wizard's Lair_ (advised for custom local setup and/or software developers)
+ 2.2.1. Prerequisites
* Install [NodeJS](https://nodejs.org/en/)
* Install [Git](https://git-scm.com/)
+ 2.2.2. Open a _command line interpreter_
* Use Windows Menu _Start_ then input `cmd`
* Change _current disk_ to where you plan to install (eg. if its `D` then type `D:`)
* Change _current directory_ to where you to install (eg. `md tools` then `cd tools`)
+ 2.2.3. Import _Cryptocalc_ from _github_
* Open the [Cryptocalc repository](https://github.com/ALADAS-org/Cryptocalc)
* Use the [<> Code v] green button
* Copy the displayed [.git URL](https://github.com/ALADAS-org/Cryptocalc.git)
* In the _command line interpreter_, type `git clone ` followed by the `.git` URL\
e.g. `git clone https://github.com/ALADAS-org/Cryptocalc.git`
* Type `cd Cryptocalc`
* Type `npm install`
3. Release notes
+ 3.1. Features in `0.3.17`
* Added support of _Russian_ language.
+ 3.2. Features in `0.3.16`
* Changed license to 'BSD-3-Clause' and added support of _Esperanto_ language.
+ 3.3. Features in `0.3.15`
* Added feature 'Internet Connection status' (see 4.1.9) for securing _Offline wallet creation_
+ 3.4. Features in `0.3.14`
* Bug fixes on Ripple (XRP) HD Wallet:
+ Bug 1. [Apply] button displayed when password input manually
+ Bug 2. WIF and Private Key displayed for Ripple (XRP) HD Wallet
+ Bug 3. WIF and Private Key in 'wallet_info.txt'
+ 3.5. Features in `0.3.11`
* Added support of _Simplified Chinese_ and _Traditional Chinese_ for the `Seed phrase`
+ 3.6. Features in `0.3.8`
* Added support of _Korean_ for the `Seed phrase`
+ 3.7. Features in `0.3.7`
* Added support of _Japanese_ for the `Seed phrase` (taking into account the _Ideographic Space_
as a separator between words instead of the _Normal Space_).
* Code enhancement: in `renderer_gui.js` and `electron_main.js`. The _Singleton_ design pattern
now uses `Symbol()` for the value of the static field `#key`.
+ 3.8. Features in `0.3.4`
* Added _password feature_ for `HD Wallet` (see 4.1.5)
* `Seed` tab renamed to `Entropy`
* Bug fix: crash when saving `SWORD Wallet`
* Update of [`Cryptocalc installer`](https://sourceforge.net/projects/aladas-cryptocalc/) on [`SourceForge`](https://sourceforge.net/)
+ 3.9. Features in `0.3.3`
* Added `SWORD Wallet` in _Wallet Types_. `SWORD` is an acronym which means
`Simple Wallet Over Randomized Deterministic`, it's an hybrid between `Simple Wallet` and `HD Wallet`
because it hides the `Derivation Path` logic (which contains `Account` and `Address Index`), thus you
don't need to care or understand the principles of _Hierarchical Deterministic_ wallets, but it allows
to generate all the cryptocurrencies provided by `HD Wallet`.
* Bug fix: when changing 'Entropy Size' to 224 bits, Cryptocalc was blocked
while trying to split the `seed phrase` in 2 parts for the traces.
4. _Cryptocalc_ User Guide
You can launch _Cryptocalc_ either by using the _Cryptocalc Standalone installer_ (see 2.1)
or by downloading the `npm package` (see 2.2) then double clicking on `_run.bat`.
+ 4.1. Features
* 4.1.1. _Cryptocalc Standalone installer_
+ 4.1.1.a: Download [Cryptocalc installer](https://sourceforge.net/projects/aladas-cryptocalc/files/latest/download)
+ 4.1.1.b. Default subfolder where _Wallet informations_ are saved:
`$DEFAULT_SETUP_FOLDER\resources\app\_output`: Node that this folder
won't be deleted automatically if you uninstall _Cryptocalc_
* 4.1.2. Generate _Entropy_ from _Entropy Source_
Use [Generate] button to draw a random image (cf. 4.1.3)
which then will be used as the _Entropy_ (with the _Salt_) to generate a new _seed phrase_ (between 12 and
24 words) which is derived to get the _Private Key_ from which the _Wallet Address_ is obtained
(NB: _Private Key_ and _Wallet Address_ are in the _Wallet_ Tab).
There is also a conversion to the _Shortened seed phrase_: as only the 4 first characters of each _mnemonic_
are useful (cf. `BIP39` specification) then in the _Shortened seed phrase_ each _mnemonic_ is represented
only by its 4 first characters (with the first character in Uppercase as a mean to separate _mnemonics_).
NB: As some _mnemonics_ are only 3 characters long, the abbreviation will of course only be whole _mnemonic_.
Here is an example below:
_seed phrase_
rent expand super sea summer pull catalog mobile proud solve oven goose
_Shortened Seedphrase_
RentExpaSupeSeaSummPullCataMobiProuSolvOvenGoos
NB: Please notice that the _Shortened seed phrase_ is not meant to be used
to import a wallet in a _Wallet Manager_, it's only a trick to _compress_ the _seed phrase_ and make it easier
to store on a device with limited memory like a `NTAG213 NFC` (see 4.2.3).
* 4.1.3. _Entropy Source_ : `Image` or `Fortunes`
_Entropy Source_ may be switched between `Image` (Default source)
and `Fortunes` (drawn from a compilation of 12803 _Fortune Cookies_).
Please notice that a text is not considered as random enough
for an _Entropy Source_ thus `Image` is now the default _Entropy Source_
(Notice that an image is much better in terms of randomness than a text).
* 4.1.3.a: You can _Drag'n'Drop_ images (`png`, `jpg` or `svg`) from you local folders.
* 4.1.3.b: Image samples are provided in `www/js/img` folder.
* 4.1.3.c: When using [Generate], _Cryptocurrency logos_ are drawn
from the `www/js/img/CryptoCurrency` folder and the first image
is always our logo (`Zilver_64px.svg`).
* 4.1.4. Choose _Wallet_Mode_: _Simple Wallet_, _HD Wallet_ or _SWORD Wallet_ (choice is in the `Wallet` tab)
* 4.1.4.a. _Simple Wallet_
This is the default _Wallet Mode_. In this mode, each wallet is separated.
and there is no need to understand the principles of the _HD Wallet Wallet Tree_
and the purpose of the `Derivation Path` used by _HD Wallets_. So a it's a good fit to
_Give it a Try_ and start creating your _Cryptocurrency Wallets_ with minimum knowledge.
On the other hand it's less secure than _HD Wallets_ and it becomes clumsy if you need to manage
multiple wallets (for example to secure your assets by splitting them among many wallets).
* 4.1.4.b. _HD Wallet_
This _Wallet Mode_ allows to create / manage a whole hierarchy of Wallets (_HD_ is the acronym for
_Hierarchical Deterministic_) of wallets in the same _BIP32 tree_
this hierarchy is generated from the _Entropy_ (and optionnaly a _password_, not yet supported).
The `BIP32` HD wallet tree_ is fully by the _Entropy_ or _seed phrase_.
The _Entropy_ is isomorphic with the _Mnemonics Sequence_ which may be called either a _seed phrase_, _Mnemonics_
or even _SRP_ (_Secret Recovery Passphrase_).
You can generate new wallets (_Address_ + _Private Key_ / _WIF_)
by Pasting a previous _Entropy_ or _seed phrase_ (within the `Entropy` wallet tab).
This will hide the _Entropy Source_ and _Salt_ fields which are meaningless in
this situation. You can then change either the _Account_ or _Address Index_
fields in the _Wallet_ tab page. This will show a new [Refresh] button
to recompute the wallet once you gave finished editing these fields
(you can input a decimal value between 0 and 9999).
Pushing the [Refresh] button (or hitting either [ Return ] or [ Enter ] keys)
will recompute the wallet accordingly.
* 4.1.4.c. _SWORD Wallet_
`SWORD` is an acronym which means `Simple Wallet Over Randomized Deterministic`,
it's an hybrid between `Simple Wallet` and `HD Wallet` because it hides the `Derivation Path` logic
(which contains `Account` and `Address Index`), thus you don't need to care or understand the principles
of _Hierarchical Deterministic_ wallets, but it allows to generate all the cryptocurrencies provided by `HD Wallet`.
* 4.1.4.d. Please notice that for `Cardano` HD wallets, the `Account` and `Address Index` parameters are not taken
into account by the _Wallet Managers_ which I have tested (namely `Guarda` and `Yoroi`) because they ask for
the `Mnemonics` (`Seed phrase` in _Cryptocalc_). This is why in by _Cryptocalc_, these parameters are _hard-coded_
to Zero (for `Cardano` HD wallets only).
* 4.1.4.e. You can check generated _HD Wallets_ with _Ian Coleman BIP39_ homepage
It's [URL](https://iancoleman.io/bip39/) is provided as an item in the `Help menu` (Help / Resources / Ian Coleman BIP39)
* 4.1.5. _Password feature_ (_HD Wallet_ only)
With a _password_ (also called _Passphrase_) a completely different _HD hierarchy_ is generated.
You can either input or generate (with the [Generate] button represented by a `Refresh` icon, like in the main toolbar).
**Important Notice**: Once a password is provided, you must use the [Apply] button to recompute the _HD hierarchy_,
this is the reason why _Save_ is disabled (in the main toolbar and in the 'File' menu) until you click on the [Apply] button.
* 4.1.6. _Salted Entropy_
_Entropy_ is generated from _Entropy Source_ (either _Image_ or _Fortune Cookie_ ATM) and adding
a _Salt_ (`UUID`) to ensure that the _Entropy_ will be different at each Generation even if the _Entropy Source_
is the same. Thus the _Entropy_ will be unique at each press of [Generate] button.
* 4.1.7. Choose _Entropy Size_
The _Entropy Size_ is between 128 to 256 bits (32 to 64 hexadecimal digits). This is equivalent to a _Seedphrase size_
between 12 and 24 words. Changing _Entropy Size_ impacts the _Seedphrase size_ and conversely.
* 4.1.8. _Wallet Address_
_Wallet Address_ is displayed in the `Wallet` tab page. There's also an [Explorer...] button which allows to check
the generated address in the appropriate _Blockchain Explorer_.
* 4.1.9. _Internet Connection Status_
This is to secure _Offline wallet creation_ (_non custodial_). An icon at the right of the _Main Toolbar_ shows
if the Internet is connected (`Wifi ON` red icon) or not connected (`Wifi OFF` green icon)
* 4.1.10. `Save` _Wallet Informations_
With `File/Save` (or the _Save_ icon in the main toolbar), you can save the _Wallet Informations_ in a timestamped
subfolder (eg. `2024_10_07_21h-4m-4s-3_BTC_EN`) under `_output` folder.
This subfolder contains `wallet_info.txt` and a `wallet.json` with the informations displayed in _Entropy_ and _Wallet_ tab pages.
* 4.1.10.a. When you save the current generated wallet a Popup dialog confirms the saving and allows to show where it is saved.
* 4.1.10.b. The _Wallet Informations_ subfolder contains _QR Codes_ (`png` images) for `Address`, `Private Key`, `Seedphrase`,
`Entropy` and `WIF` (if applicable).
Notice that there is a `xtras` subfolder where these _QR codes_ are provided
in the `svg` format. There is also a _Rectangular Micro QR code_ (`rMQR`) of the
`Entropy` (_Rectangular Micro QR Code_, `R15x59` or `R15x77` version depending on
`Entropy size`) and an experimental `Ultracode` color QR code of the `Entropy`.
* 4.1.10.c: How to retrieve a _Wallet Address_ from the _Rectangular Micro QR Code_
* 4.1.10.c.I: Notice that most Android _QR Code reader_ apps will
not be compatible with _Rectangular Micro QR Code_ but it works with
[`QRQR`](https://play.google.com/store/apps/details?id=com.arara.q&hl=en)
an Android _QR Code reader_ published by _Arara_ on the _Google Play Store_.
* 4.1.10.c.II: Then convert the _Entropy_ to the matching _seed phrase_
by doing a copy/paste in the `Entropy` field of _Cryptocalc_.
**Caution**: Take care to set _Cryptocalc_ with the same `Entropy Size` and
`Derivation path` (if applicable, don't forget to use the [Refresh] button)
than those used when the wallet was created (these informations
are provided either in the `wallet_info.txt` or in `wallet_info.wits`).
* 4.1.11. `Open` _Wallet Informations_ of a previously saved wallet
* 4.1.11.a. _Wallet informations_ are saved both as a `.txt` but also as a `.wits` file (`JSON` format).
* 4.1.11.b. A `.wits` file can be opened either with `File.Open...` menu item or 'Open...' icon
in the toolbar. It can be also be opened in `Cryptocalc.exe` by double clicking on the `.wits`
(_File extension to Application_ feature): this will launch `Cryptocalc.exe` (cf. 2.1 for installing
`Cryptocalc.exe` with the _Cryptocalc Standalone installer_) /
* 4.1.11.c. Once opened, a wallet can't be saved on itself (it is to prevent accidental overwrite of the original wallet),
but you can use `File.Save As...` which will save the wallet with a different timestamp than the original one.
* 4.1.11.d. Notice that for a _HD Wallet_ you can change the `Account` and/or the `Address Index` (dont forget to push
the [Refresh] button). Now you can save the new wallet with `File.Save As...` and if you didn't change the `Entropy`
then this new wallet will belong to the same `Bip32 HD Wallet Tree` (see 5.2) than the original one.
* 4.1.12. Import a wallet in `Guarda`
An item in the menu (Help / Resources / Guarda) eases importing a wallet in a
_Wallet Manager_ application by opening [`Guarda`](https://guarda.com/).
* 4.1.13. Select _Seedphrase Language_
You can select the _Wordlist Language_ (eg. _English_, _French_, _Deutsh_, etc...).
Please notice that only _English_ is accepted for most _Wallet Manager_ applications.
Changing _Wordlist Language_ is indeed a mean to add a scramble step in order
to make it harder to steal your _Secret Recovery Passphrase_ because
it should be translated to _English_ to be used with a _Wallet Manager_.
NB: the translation between languages is native in _Cryptocalc_
because the reference is the _Word Indexes_ (see 4.1.10) not the words.
* 4.1.14. Display of _Word Indexes_
The _Word Indexes_ are between 0 and 2047, it is the index of each of the
_Seed phrase_ words in the `BIP39` dictionary (see also 6.1.1).
You can choose to display these indexes in _Decimal_ or _Binary_
(in _Binary_ you can check that the computed _Checksum bits_ are added at the end
of the converted _Entropy_ to determine the index of the last word).
* 4.1.15. Display of the _BIP32 Derivation Path_
The _BIP32 Derivation Path_ is displayed in the _Wallet_ tab page.
You can edit the _Account_ or _Address Index_ fields to generate new wallets
which belong to the same `BIP32` hierarchy that is determined by the
_seed phrase_ (also called the _Secret Recovery Passphrase_).
* 4.1.16. Change/Reset of _Options_ (`Tools/Options`)
Currently it allows to set default values for `Default Blockchain`, `Wallet Mode` and `Entropy Size`.
These values are defined in `www/config/options.json` file.
It is also possible to reset _Options_ to _Default Options_
(defined in `www/config/defaults/options.json`)
* 4.1.17. Support of _Localization_
In _Cryptocalc_, the _Localization_ (`l10n`) feature is the translation of
_GUI Labels_ to adapt to the _locale_ (eg. `en`).
A _locale_ name can be composed of a base language, country (territory) of use,
and optionnally a codeset (eg. `de_CH.UTF-8`).
The _locale_ is provided as part of your machine's environment.
_Cryptocalc_ only uses the 2 letter language part (eg. `en`).
Localization is enabled by a _JSon_ file in the `www/js/L10n` folder
(eg. `gui-msg-en.json`) .
Currently only `en` and `fr` are provided.
+ 4.2. Use cases
* 4.2.1. Generate a new _Wallet_ and import it in a _Wallet manager_
With a _Wallet Manager_ like [`Guarda`](https://https://guarda.com/) you can import
a wallet generated by _Cryptocalc_:
* 4.2.1.a. Choose _Wallet Mode_: _Simple Wallet_ or _HD Wallet_
* 4.2.1.b. Choose a coin: `BTC`,`ETH`,`XRP`,`ADA`,`DOGE`,`LTC`,`SOL`,`AVX`,`TRON`,`BCH`,`DASH`,`Firo`
* 4.2.1.c. Enter _Private Key_ (NB: or _WIF_ for `BTC` wallets)
* 4.2.3. Store _Shortened Seedphrase_ in a _NFC SmartRing_
The entry level _SmartRings_ (price range: 7..15$) contains a `NTAG213 NFC` with
144 bytes useable capacity. This is enough to store the _Shortened Seedphrase_,
with a 24 words _Shortened Seedphrase_
the maximum required capacity is 96 bytes/characters (24*4, cf. 4.1.1)
or even less (as some mnemonics have only three characters).
* 4.2.4. Store _Master password_
This is similar to the previous case, but the _Shortened Seedphrase_
can be used as a _Master password_ for a _Password Manager_ or for tools like
[_PGP Tool_](https://pgptool.github.io) which provide encryption/decryption
of your documents.
5. Appendix
+ 5.1. `BIP39`: a _Dictionary_ of 2048 words
`BIP39` (`BIP` is the acronym of _Bitcoin Improvement Proposal_) is a specification regarding:
* 5.1.1. A _Dictionary_ of 2048 words
The _Dictionary_ contains 2048 _English_ words each with a their unique 4 starting characters
(or 3 if the word is 3 characters long). This dictionary exists also in other languages
(e.g. _French_, _Deutsh_, _Spanish_, Italian_, _Portuguese_, etc...) but _Wallet Managers_
(e.g. _Guarda_, _Metamask_, _Atomic Wallet_, etc...) and _Hardware Wallets_
(eg. _Ledger_, _Trezor_, _Tangem_, etc...) will most probably accept only _English_ words.
* 5.1.2. Conversion of _seed phrase_ from and to _Entropy_
The _seed phrase_ is obtained by drawing words (also called or _menemonics_) from the dictionary.
Drawing a word is indeed choosing an index between 0 and 2047. This index can be represented
by 11 bits in _Binary_ (because 2^11 = 2048).
* Conversion from _Entropy_ to _seed phrase_
The _Entropy_ is represented in _Binary_ and divided in 11 bits segements but the entropy
is a multiple of 8 bits (128, 160, 192, 224, 256) there are "missing bits" for choosing
the last word. These "missing bits" are provided by computing the _Entropy Checksum_.
e.g. For an _Entropy Size_ of 128 bits (converted to a 12 words _seed phrase_),
132 bits are needed (11 * 12), so the _Entropy Checksum_ provides the missing 4 bits.
* Conversion from _seed phrase_ to _Entropy_
For each word its index is retrieved from the _Dictionary_, its value is represented
as a 11 bits segment and a number of bits corresponding to tne _Entropy Checksum_
are removed at the end of the concatenation of 11 bits segments.
e.g. For a _seed phrase_ of 12 words (converted to a 128 bits _Entropy_),
132 bits are obtained from the _Word Indexes_ (11 * 12), and because the _Entropy Checksum_
is 4 bits long then the 4 bits at the end are removed.
* Reference
[BIP39 — Mnemonic Generation with detailed explanation](https://medium.com/@sundar.sat84/bip39-mnemonic-generation-with-detailed-explanation-84abde9da4c1)
+ 5.2. `BIP32`: Hierarchic Deterministic wallets
`BIP32` specifies how to generate wallets with are all derived from the same _Entropy_
or _seed phrase_ (also called the _Secret Recovery Passphrase_).
A _seed phrase_ of only 12 words is enough is most _Wallet Managers_ but it is much more secure to use a 24 words
_seed phrase_ if possible (e.g. _Ledger_ hardware wallet manager).
Example: meaning of each part for `m/44'/60'/0'/0/0`:
* Start at the master key (m)
* Follow the `BIP44` specification (44′)
* Derive the key for _Ethereum_ (for which _Coin type_ is 60) (60′)
* Access the first account (0′)
* Choose the external chain, used for public addresses (0)
* And finally, generate the first address in this sequence (0)
* Reference
+ [Understanding Derivation Paths in Cryptocurrency: Easy-To-Follow Guide](https://getcoinplate.com/blog/derivation-paths-guide/#:~:text=A%20derivation%20path%20is%20simply,a%20particular%20branch%20(address))
+ [Hierarchical key generation](https://alexey-shepelev.medium.com/hierarchical-key-generation-fc27560f786)