Commit graph

245 commits

Author SHA1 Message Date
MMGen
df0385160b
XMR (Monero) key/address generation support and wallet generating utility
- Monero key-address files include spendkey, viewkey and wallet password
- Wallet password is first 16 bytes of SHA256x2(spendkey)
- Generate Monero wallets either by hand with:
    1) `monero-wallet-cli --generate-from-spend-key walletfile`, using the keyaddrfile data,
  or automatically, using:
    2) `mmgen-tool keyaddrlist2monerowallet keyaddrfile`
  The utility will generate a wallet for each key/address pair in the keyaddrfile and encrypt
  it using the password.  The password is supplied via stdin.

- Other feature: 32-byte hexadecimal password generation with `mmgen-passgen --hex`
2017-12-28 16:03:28 +03:00
MMGen
279e8872ef
Improve coin selection logic, allow coin disabling 2017-12-25 09:48:59 +03:00
MMGen
91ac2effb3
Key/address generation support for 144 altcoins
Support for these coins is EXPERIMENTAL, use at your own risk

    EXAMPLE: generate 10 Dogecoin key/address pairs with your default wallet:

        `mmgen-keygen --coin=doge 1-10`

    Keys for different coins are distinct, so users needn't worry about key reuse.

    Supported alts: 2give,42,611,ac,acoin,alf,anc,apex,arco,arg,aur,b2x,bcf,bch,blk,bmc,bqc,bsty,btcd,btq,bucks,cann,cash,cat,cbx,ccn,cdn,chc,clam,con,cpc,crps,csh,dash,dcr,dfc,dgb,dgc,doge,doged,dope,dvc,efl,emc,emd,enrg,esp,etc,eth,fai,fc2,fibre,fjc,flo,flt,fst,ftc,gcr,good,grc,gun,ham,html5,hyp,icash,infx,inpay,ipc,jbs,judge,lana,lat,ldoge,lmc,ltc,mars,mcar,mec,mint,mobi,mona,moon,mrs,mue,mxt,myr,myriad,mzc,neos,neva,nka,nlg,nmc,nto,nvc,ok,omc,omni,onion,onx,part,pink,pivx,pkb,pnd,pot,ppc,ptc,pxc,qrk,rain,rbt,rby,rdd,ric,sdc,sib,smly,song,spr,start,sys,taj,tit,tpc,trc,ttc,tx,uno,via,vpn,vtc,wash,wdc,wisc,wkc,wsx,xcn,xgb,xmg,xpm,xpoke,xred,xst,xvc,zec,zet,zlq,zoom,zrc

	Test the new functionality with `scripts/test-release.sh -Pn master alts`

B2X support disabled pending further testing
2017-12-24 15:26:23 +03:00
MMGen
4876ee47ed
View key support for Zcash z-addresses
- view keys are included in key-address lists
- tests updated to test the new functionality

- mmgen-tool: `compressed` and `segwit` args replaced by --type option
2017-12-18 20:19:01 +03:00
MMGen
1cc64e1eb9
Zcash z-address generation with custom sha256 implementation
- Tests have been updated, test with `scripts/test-release.sh -Pn master alts`
2017-12-16 12:48:47 +03:00
MMGen
bafea57134
Key/address generation for Ethereum, Eth Classic, DASH, and Zcash
- supported commands:
  - mmgen-addrgen
  - mmgen-keygen (decrypt encrypted key-addr files with `mmgen-tool decrypt`)
  - mmgen-tool addrfile_chksum, keyaddrfile_chksum

- ETH and ETC keys are distinct, so users needn't worry about key reuse
- Only Zcash-t addresses supported for now (but z-addresses coming soon)

- Test the new functionality with `scripts/test-release.sh -Pn master alts`
2017-12-16 09:31:00 +03:00
MMGen
71058479a1
crypto.py: code tidy-ups 2017-12-16 09:29:51 +03:00
MMGen
e1fb918588
mmgen-split: code cleanups 2017-12-16 09:17:55 +03:00
philemon
420d0e9699
B2X support, locktime-based coin splitting utility
- full support for B2X fork
- `mmgen-split` coin splitting utility for replayable forks
- `mmgen-regtest fork` command for testing forking scenarios
- `regtest_split` command added to `test/test.py` test suite
- timelock support for `txcreate` and `txdo`
- nlocktime and nsequence checks after signing and before sending
2017-11-13 22:50:35 +03:00
philemon
207632cb40
txcreate(tx) -> tx.create() (delete txcreate.py) 2017-11-13 22:42:50 +03:00
philemon
e836601324
mmgen-autosign: gen_key: create /dev/shm/autosign if not present 2017-10-31 10:47:09 +03:00
philemon
333278ce35
new conversion utility: scripts/tx-btc2bch.py
- Beginning with v0.9.5, BCH and BTC transaction files differ.
  This utility converts old BCH transaction files to the new format.
2017-10-31 08:57:05 +03:00
philemon
e42aeb94ba
Version 0.9.5 v0.9.5 2017-10-30 12:18:44 +03:00
philemon
41460cb2fd
Documentation updates 2017-10-29 18:29:19 +03:00
philemon
8fb3efd99c
mmgen-autosign: encrypt signing wallet with session key on removable device 2017-10-29 15:06:16 +03:00
philemon
35d1091159
Basic altcoin framework, full Litecoin support
- LTC: tested on mainnet, full test suite support
- simultaneous autosigning for all supported coins (BTC,BCH,LTC)
2017-10-28 00:11:00 +03:00
philemon
2435f60b03
mmgen-autosign: --coin support, validate that secret is well-formed 2017-10-16 19:20:34 +03:00
philemon
a4c6c45a13
mmgen-autosign: batch offline transaction auto-signing
- once set up, requires no monitor or keyboard input; just insert USB stick,
  wait for signing to complete and remove
- LED status signaling on Raspberry Pi and Orange Pi
2017-10-16 00:55:03 +03:00
philemon
b4d75b09f2
Version 0.9.4a - security release v0.9.4a
TX hexdata switch attack protection:

  - Protect against an exotic but theoretically possible attack where a
    malicious, compromised or malfunctioning coin daemon could alter hex
    transaction data.  An integrity check is performed during both signing and
    sending.  Needless to say, a user should always view a transaction and
    double-check its outputs before broadcasting.
2017-10-10 23:43:27 +03:00
philemon
6a06b54ffe
Version 0.9.4 v0.9.4 2017-10-04 11:05:33 +03:00
philemon
d3f0f26668
bitcoin.py -> protocol.py: CoinProtocol classes and methods
scripts/test-release.sh: BCH tests added
2017-10-03 22:26:24 +03:00
philemon
da0636c636
Version 0.9.3 v0.9.3
New features:

- Bob and Alice regtest mode for testing MMGen in a mock two-user environment.
  Documented in the wiki, tests added to test suite

- Compressed P2PKH address support (address type 'C')

- BCH (Bitcoin Cash) support

- Segwit (address type 'S') support deployed after Segwit activation on mainnet

- and, of course, numerous bugfixes and small improvements
2017-10-01 11:04:05 +03:00
philemon
089b182733
New and revised documentation in wiki:
new:       MMGen Quick Start with Regtest Mode (tutorial)
  additions: Getting Started with MMGen    - compressed addresses
  additions: Recovering Keys Without MMGen - mnemonic-to-hex instructions
2017-09-30 14:45:11 +03:00
philemon
12ea12e4e2
mmgen-regtest: final implementation; additional test suite tests 2017-09-26 15:41:11 +03:00
philemon
49e1acfb74
mmgen-regtest: improvements + additional tests in test suite 2017-09-25 14:27:39 +03:00
philemon
50f55b9790
mmgen-regtest: test suite support, mswin bugfixes
tx.view(): refactor, bugfixes
new script: test-release.sh
2017-09-19 22:14:00 +03:00
philemon
974b19495c
mmgen-regtest: MS Windows support 2017-09-16 20:33:14 +03:00
philemon
99295adf20
mmgen-regtest: --empty option, improved debugging output
mmgen-tool: move help data to main_tool.py
2017-09-16 13:55:23 +03:00
philemon
e2120977c0
new file: mmgen/regtest.py 2017-08-15 05:17:18 +03:00
philemon
b23b497d77
obj.py rewrite+test suite, Bob and Alice regtest mode, compressed addresses
- basic data types in obj.py rewritten
- new test suite 'test/objtest.py' for testing basic data types
- new compressed address type with the 'C' identifier

- Bob and Alice regtest mode for testing MMGen in a mock two-user environment
  * All MMGen commands are available in this mode.
  * Set up with 'mmgen-regtest setup'. Bob and Alice's wallets are funded with
    500 BTC each.  Use the --mixed switch to import mixed address types in
    Bob and Alice's tracking wallets.
  * Transact as Bob by adding --bob switch to MMGen commands
  * Transact as Alice by adding --alice switch to MMGen commands
  * After sending a transaction, mine a block to confirm it with
    'mmgen-regtest generate'
    The bitcoin daemon is stopped and restarted automatically when switching
    between users.
2017-08-14 13:04:25 +03:00
philemon
33673cbb1b
reimplement base58 routines, move from bitcoin module to class baseconv 2017-08-08 16:46:39 +03:00
philemon
2cfa35e8a1
typo in txview 2017-08-08 15:51:05 +03:00
philemon
aae5f122b4
immutable attr improvements 2017-08-08 11:31:57 +03:00
philemon
52fdf29b67
new classes: KeyGenerator,AddrGenerator,PrivKey; read-only attrs rewrite
- OO rewrite of key/addr generation interface (KeyGenerator,AddrGenerator)
- New data objects: PrivKey,PubKey,WifKey
- rewrite of read-only attr implementation for addr/tx/tw list entries
  (MMGenImmutableAttr,MMGenListItemAttr descriptors)
- txsign: build key list of addrlist objects rather than addr,key tuples
2017-08-07 22:02:24 +03:00
philemon
004536af63
Defer printing of help screens until global vars are initialized 2017-08-05 18:15:41 +03:00
philemon
2873897f68
Replace --aug1hf with --coin=bch, display 'BCH' for BCH amounts
* Deprecate the --aug1hf option
* Use --coin=bch option to select BCH chain; works with all MMGen commands
* All BCH amounts now correctly display with 'BCH' instead of 'BTC'
* use non-standard RPC ports (8442,18442) for BCH mainnet/testnet to allow
  dual-node operation.  Use 'mmlive-node-start' and '-stop' scripts
  (home.mmgen/bin/mmlive-node-{start,stop} in the MMGenLive repo)
  to start daemons with correct RPC ports; the --coin option automatically
  configures the correct ports for all MMGen scripts.

* mmgen-txsend: new --status option checks confirmation/mempool status of TXs
2017-08-04 14:13:03 +03:00
philemon
057fe22f0c
test/test.py: refactor, remove interactive mode 2017-08-03 08:56:40 +03:00
philemon
5c507d7b0b
txcreate fix for Bitcoin ABC aug1hf 2017-08-01 13:34:29 +03:00
philemon
576d8036c7
Support for the Aug 1 2017 UAHF ("Bitcoin Cash", "Bitcoin ABC")
Brief instructions for Linux (Windows users may adapt to fit):

    Make a copy of your Bitcoin data directory, including the blockchain and
    your tracking wallet (the blockchain must have been synced last BEFORE
    12:20 UTC Aug. 1).  This can be done as follows:

        $ mkdir ~/.bitcoin-abc
        $ rsync -av ~/.bitcoin/* ~/.bitcoin-abc

    If you messed up and synced your blockchain AFTER the HF, then do the
    following, after which you'll have to sync the ABC chain from scratch:

        $ mkdir ~/.bitcoin-abc
        $ cp ~/.bitcoin/{bitcoin.conf,*wallet*.dat} ~/.bitcoin-abc

    Download the Bitcoin ABC binary, but DON'T let it install automatically.
    Or alternatively, clone the source from Github and compile it yourself:

        Binary: https://download.bitcoinabc.org/0.14.6
        Source: git clone https://github.com/Bitcoin-ABC/bitcoin-abc

    Install the Bitcoin ABC daemon BY HAND into your exec path as 'bitcoind-abc':

        $ sudo cp bitcoind /usr/local/bin/bitcoind-abc

    Start the daemon and let it sync the ABC chain:

        $ bitcoind-abc -datadir=$HOME/.bitcoin-abc -daemon

    Don't forget to always start the ABC daemon with the -datadir argument.
    Otherwise you could trash your Core blockchain!

    Once the HF has activated, you sign or create-sign-send transactions on the
    ABC chain by invoking 'mmgen-txsign' or 'mmgen-txdo' with the --aug1hf
    switch.

    All other commands, including 'mmgen-txcreate' and 'mmgen-txsend', are
    invoked as usual, with no additional command-line switches.  Your address
    balances and unspent outputs will display correctly for whatever chain
    you're on at the moment.

    To switch back to the Core chain, just stop the ABC daemon and restart the
    Core daemon (WITHOUT the -datadir argument).

    After the Aug. 1 HF, Core transactions and ABC transactions will be
    incompatible, as they use an incompatible sighash type.  This prevents
    transactions from being broadcast (and hence replayed) on the wrong chain.
    So if you use the --aug1hf switch on the Core chain, or forget to use it on
    the ABC chain, nothing bad will happen; your sign or send operation will
    just fail with an error message.

    The main danger is forgetting which daemon is running at the moment and
    therefore which chain you're on.  This can be checked on Linux with the
    command `pgrep -a bitcoind` or on Windows by examining the task manager.

    In case you were wondering, all the --aug1hf switch does is perform a few
    sanity checks and call signrawtransaction with 'ALL|FORKID' as the
    'sighashtype' argument.  There's nothing more to it than that!
2017-07-31 20:10:17 +03:00
philemon
b04650e22f
Version 0.9.2 v0.9.2 2017-07-31 17:33:51 +03:00
philemon
b753ddee5a
Version 0.9.2rc1 v0.9.2rc1
- update Getting Started guide for Segwit and regtest
2017-07-29 15:53:04 +03:00
philemon
3b0257358b
Support for Segwit (P2SH-P2WPKH) addresses:
- Generate Segwit addresses by invoking 'mmgen-addrgen' with the
  '--type segwit' option
- Import Segwit addresses into the tracking wallet as usual
- Segwit and legacy MMGen addresses are distinguished by 'S' and 'L'
  identifiers in the tracking wallet and command line

Transaction example:

  mmgen-txcreate F00BAA12:L:21,1.23 F00BAA12:S:1

(spend 1.23 BTC to legacy address 21 of your default wallet (with Seed ID
F00BAA12) and send the change to Segwit address 1)

Segwit and legacy addresses for a given seed are generated from different
sub-seeds so are cryptographically unrelated to each other.

Since MMGen's legacy P2PKH addresses are uncompressed, use of the new Segwit
addresses significantly reduces transaction size.

Until Segwit activation on mainnet, users can try out the new functionality on
testnet or in regtest mode.
2017-07-27 22:55:52 +03:00
philemon
919bd62a79 deleted: "test/ref/98831F3A-\321\204\321\203\320\261\320\260\321\200@crypto.org-base58-20[1,4,9-11,1100].pws" 2017-07-07 16:34:32 +03:00
philemon
fde885f55b
mmgen-passgen: generate passwords from your MMGen seed
- frees you from having to back up or remember passwords
   - generate passwords in either base32 or base58 format
   - user-configurable password length
   - password generation is keyed to an ID string, allowing you to generate
     separate sets of passwords for each online account

   EXAMPLE:
     mmgen-passgen yourname@nowhere.com 1-10
     (generates ten passwords for your email account using your default wallet)

   For more examples and detailed usage information, type 'mmgen-passgen --help'

   This is the new implementation using hmac.  It supersedes commit 85cf5b3

Mnemonic entry mode:
   - Word-by-word mnemonic entry at the prompt
   - Each word is checked individually, user is re-prompted in case of error
   - Activated automatically if stdin is a terminal
2017-07-07 16:28:07 +03:00
philemon
85cf5b3cbb
The original implementation of mmgen-passgen, using sha256x10(seed+id_str)
Superseded by the current implementation using sha256x10(hmac(seed,id_str,hashlib.sha256))
2017-07-07 16:09:28 +03:00
philemon
0ab39e4a22
Update copyright dates 2017-05-31 18:16:08 +03:00
philemon
0cb6e8c1d1
Orange Pi build fix (secp256k1 mod: no libgmp) 2017-05-31 18:14:06 +03:00
philemon
1d277d9612
Version 0.9.1 v0.9.1 2017-05-28 10:56:03 +03:00
philemon
192ce1ecdb
Version 0.9.1rc2 v0.9.1rc2 2017-05-27 14:05:27 +03:00
philemon
ccfa4b5738
test.py: test exit values of scripts
test.py is pexpect-based, testing the output rather than return values of
scripts.  However, a script may crash even after producing the expected output,
so test for return values too.
2017-05-24 21:07:16 +03:00