⬡ CRYPTOCALC

CryptoCalc README

Version 0.5.10
Downloads:16,792
Cryptocurrencies:23
Languages:18
Unit Tests:694
E2E Tests:2
CryptoCalc Demo

1. Purpose

CryptoCalc is a Cryptocurrency wallet generator provided as a standalone non custodial desktop application. These wallets can be Non Deterministic (Simple Wallet) or Hierarchical Deterministic (BIP32). Even though there are already similar tools online, the purpose is to provide these features locally on your computer (non custodial) in order to reduce the risk of your Private Key / WIF or Secret phrase information being stolen.

NB: Since its first release CryptoCalc has been downloaded 16792 times on npm.

You can support this project by testing and reporting bugs (or asking for enhancements) with Issues, provide localization files (see 5.1.19).

Cryptocalc is developed by Aladas, a non profit organization whose primary goal is to protect Wild bees.

2. Features

2.0. Recently added features

2.1. Support of HD / Bip32 (multiple wallets)

Added support of Bip84 purpose in the Bip32 derivation path (HD Wallet). Notice that it is usable only with Bitcoin and Litecoin.

2.2. Selection of Entropy size (between 128 and 256 bits)

2.3. Dynamic conversion between Entropy and Secret phrase

2.4. File/Save/Open.. commands

These commands allow edition of Wallet informations after saving (these informations are saved as a .wits, a JSON format file).

2.5. Salted Entropy source

Entropy value is indeed computed by combining the Salt (currently a dynamically generated UUID) with the value provided by the Entropy source.

2.6. Security Layers

2.7. Multiple Entropy sources

100 d6 dices, Mouse moves, Images and Fortune cookies.

2.8. QR code generation

For Wallet address, Private Key (also WIF if applicable) and Mnemonics. There is also an xtras folder with the SVG versions of these QR codes as well as more experimental QR code formats (rectangular Micro QR code and Ultracode which has colored modules).

2.9. Customizable options

Options includes Blockchain, Wallet mode (eg: Simple / HD / SWORD) and Entropy size.

2.10. Wallets Database

A SQLite Database is populated by importing .wits files (Wallet informations in a JSON format file). Then the SQLite Database can be explored with DBeaver.

2.11. Visual feedback of the Passphrase Strength (Bip32/Bip38)

2.12. List of Word indexes

The crucial data in the Secret phrase is indeed the list of Word indexes (indexes in the BIP39 wordlist), is explicitly displayed so if the language is changed these word indexes are the same.

2.13. Internet connection status

Because of the Cold wallet / Non custodial purpose of Cryptocalc, it is not recommended to generate cryptocurrency wallets while being online. The status is displayed on the right of the main horizontal toolbar, it's a red "connected" icon when online and a green "disconnected" icon when offline (the highly recommended way to use Cryptocalc).

2.14. Localization

Translations of GUI labels in the user's language (only English and French files provided currently but the localization feature allows translations in other languages as well, they are in JSON format eg. gui-msg-en.json).

2.15. Dynamic links

2.16. Dedicated Tools

2.17. Standalone installer

It is published on SourceForge. Once downloaded the installer will install Cryptocalc as a .exe local standalone desktop application (see 3.1.1) with all its prerequisites. This allows users to install Cryptocalc without installing NodeJS, git and npm and using command line instructions (described in 3.2).

2.18. Tested on Windows and Linux

2.19. Cryptocurrencies: 23 supported Cryptocurrencies

BTC (Bitcoin), ETH (Ethereum), XRP (Ripple), BNB (Binance Smart Chain), SOL (Solana), DOGE (Dogecoin), TRX (TRON), ADA (Cardano), XLM (Stellar), SUI (Sui), BCH (Bitcoin Cash), AVAX (Avalanche), TON (Toncoin), LTC (Litecoin), ETC (Ethereum Classic), POL (Polygon), VET (VeChain), BSV (Bitcoin SV), DASH (Dash), RVN (Ravencoin), ZEN (Horizen), LUNA (Terra) and FIRO (Firo).

2.20. Languages: 18 supported languages

Notice that English has around 1.5 billion speakers, Mandarin has around 1.1 billion speakers while the India triad (Hindi, Bengali and Gujarati) has around 1 billion speakers.

2.21. Developed with Javascript and ElectronJS

CryptoCalc is written in Javascript (both client side and server side) and is built on top of ElectronJS. ElectronJS is used in many modern and popular Desktop applications (e.g. Visual Studio Code, Discord, WhatsApp, Notion, Obsidian, etc.).

3. Setup

3.1. Fast and Furious (advised for end users)

3.2. Wizard's Lair (more advised for custom local setup and/or geeks or software developers)

3.2.a. On Windows Operating system

3.2.b. On Linux Operating system

4. Release notes

5. User's Guide

You can launch CryptoCalc either by first installing it with the CryptoCalc Standalone installer (see 3.1) or by using the Wizard's Lair path (see 3.2): install NodeJs, git then install the CryptoCalc project and launch it with a double click on _run_Cryptocalc_W.bat (W means Windows) or _run_Cryptocalc_X.sh (X means Linux).

5.1. Features

5.1.1. Cryptocalc Standalone installer

5.1.2. Generate Entropy from Entropy Source

Use [Generate] button to draw a random image (cf. 5.1.3) which then will be used as the Entropy (with the Salt) to generate a new Secret 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 secret phrase: as only the 4 first characters of each mnemonic are meaningful (cf. BIP39 specification) then in the Shortened secret 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:

Secret phrase
      rent expand super sea summer pull catalog mobile proud solve oven goose
Shortened secret phrase
      RentExpaSupeSeaSummPullCataMobiProuSolvOvenGoos
NB: Please notice that the Shortened Secret phrase is not meant to be used to import a wallet in a Wallet Manager, it's only a trick to compress the Secret phrase and make it easier to store on a device with limited memory like a NTAG213 NFC (see 5.2.3).

5.1.3. Entropy Source : D6 Dices, Mouse moves, Image or Fortunes

5.1.4. Choose Wallet Mode: Simple Wallet, HD Wallet or SWORD Wallet (choice is in the Wallet tab page)

5.1.5. 'BIP38' Encryption of the Private Key

5.1.6. Bip39 Passphrase feature (HD Wallet only)

The Bip39 passphrase is like an optional password. If you decide to define it, then it will generate a completely different Bip32 hierarchy (HD Wallet). The ergonomy has been fixed so now to input a Bip39 passphrase you must use the [Edit] button (a 'Pen' shape) and use the [Apply] button in order to recompute the Bip32 Hierarchy (which is parameterized by the Bip39 passphrase).

Note 1: Notice that you can still use the [Generate] button (a 'Circular arrow' icon) to generate the Bip39 passphrase and the [Clear] button (a 'Cross' shape) but they are now in the Bip39 passphrase Input Dialog Box.

Note 2: You can check that the computed Wallet address and Private Key (or WIF) are correct by using Ian Coleman Bip39, just take care to provide Entropy then provide the BIP39 Passphrase (optional) (as well as Account and Address Index if different from 0) then don't forget to check Use hardened addresses.

5.1.7. Passphrase Strength (Bip39/Bip38)

This is a visual feedback of the Passphrase Strength (Bip39/Bip38). The measure of the passphrase's strength is a score (an integer between 0 and 4) computed with the help of zxcvbn library. This score is displayed as a colored line (whose length is proportional to the score) as well as an adjective (i.e: Weak, Moderate, Strong, etc..).

NB: It is strongly advised to use the [Random] button (a circular arrow icon) because it would probably be much less predictable (and thus more secure) than a Passphrase that you provide because (even unconsciously) there is a higher probability that it will be predictable (even with Tricks like Acronyms, Abbreviations and even usage of L33+5p34|<).

5.1.8. Salted Entropy

Entropy is generated from Entropy Source then a Salt (a generated UUID currently, this is 128 bits of Entropy) is added to provide the Salted Entropy. This is a way to make sure the Entropy is unique at each Generation even if the Entropy Source value is the same (e.g. reusing the same Image or Fortune cookie). Thus the Entropy value will be unique at each press of [Generate] button.

5.1.9. Choose Entropy Size

The Entropy Size is between 128 to 256 bits (32 to 64 hexadecimal digits). This is equivalent to the size of the Secret phrase (between 12 and 24 words). Changing Entropy Size impacts the size of the Secret phrase and conversely.

5.1.10. 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.

5.1.11. 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).

5.1.12. 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.

5.1.13. Open Wallet Informations of a previously saved wallet

5.1.14. Import a wallet in Guarda

An item in the menu (Help / Resources / Guarda) eases importing a wallet in a Wallet Manager application.

5.1.15. Select Secret phrase Language

You can select the Wordlist Language (eg. English, French, Deutsch, etc...). Please notice that only English is accepted for most Wallet Manager applications. Changing Wordlist Language is indeed a mean to add an "obfuscation/information hiding" 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: it is important to highlight that indeed the crucial information is the list of Word Indexes. That's why translation between languages is easy in CryptoCalc because the reference is the Word Indexes (see 6.1.14) not the words.

5.1.16. Display of Word Indexes

The Word Indexes are between 0 and 2047, it is the index of each of the Secret phrase words in the BIP39 wordlist (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).

5.1.17. 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 Secret phrase (also called the Secret Recovery Passphrase).

5.1.18. Secret phrase Translator

5.1.19. Wallets Database

A SQLite Database is populated by importing .wits files (Wallet informations in a JSON format file). Then the SQLite Database can be explored with DBeaver.

5.1.20. Dynamic Links

5.1.21. 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).

5.1.22. Localization

Localization (l10n) feature is the translation of GUI Labels to adapt to the user's language, it's called the locale (eg. en). A locale name can be composed of a base language, country (territory) of use and optionally 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). Notice that currently only en and fr are provided.

5.2. Security Issues

5.3. Unit Tests

5.4. Use cases

6. Appendix

6.1. BIP39: a Dictionary of 2048 words

BIP39 (BIP is the acronym for Bitcoin Improvement Proposal) is a specification regarding:

6.2. BIP32: Hierarchic Deterministic wallets

BIP32 specifies how to generate wallets which are all derived from the same Entropy or Secret phrase (also called the Secret Recovery Passphrase). A Secret phrase of only 12 words is enough in most Wallet Managers but it is much more secure to use a 24 words Secret phrase if possible (e.g. Ledger hardware wallet manager).

Example: meaning of each part for m/44'/60'/0'/0/0' (a Hardened Derivation Path):

6.3. References