Bitcoin Forum

Bitcoin => Project Development => Topic started by: nomorecoin on October 15, 2013, 11:48:54 PM



Title: PyBrainwallet - Python Brainwallet Generator - Now with BIP38 and Diceware!
Post by: nomorecoin on October 15, 2013, 11:48:54 PM
Python GUI brainwallet generator, now with BIP38 non-ec-multiply encrypt/decrypt, Diceware, and support for compressed keys

https://i.imgur.com/w4grc3g.png

Use text or file(s) to create your keypair
Generate and display note, updated with each change
Note includes QR code with blockchain.info url for easier verification of funds
Encrypt private key for more secure printing
Option to display compressed version of keys
Option to hash seed a user-set number of rounds (multihash)
Use dice to create truly random passphrases. PRNG option uses PyCrypto. Dice are better.
Save note to file - example (https://i.imgur.com/NaIdnJ0h.png)

Performance tested on Atom netbook, ~7 seconds to encrypt/decrypt and update displayed note. Stock-clock Raspberry Pi takes ~30 seconds. Much faster on other systems.

README (https://github.com/nomorecoin/PyBrainwallet/blob/master/README.md)
https://github.com/nomorecoin/PyBrainwallet
Previous version orphaned, moved to Windows branch (https://github.com/nomorecoin/PyBrainwallet/tree/windows)
Windows binary (https://github.com/nomorecoin/PyBrainwallet/blob/windows/PyBrainwallet.exe?raw=true) (outdated)
License is WTFPL, so do what the fuck you want. Let me know if you do something cool.

Known issues:
Absolute layout is guaranteed to break on some systems.
Unable to provide binary for now - scrypt module issues.
Test cases are incomplete, new features manually tested.
Performance is highly CPU-dependent, slow systems will continue to be slow.
Might break in other exciting and fascinating ways, or in very stupid ways. Verify wallets before use.

Planned Features:
Layout, sizers instead of absolute
Diceware word lookup and optional passphrase generation added
Allow use of multiple keyfiles as seed added
Create and decrypt BIP0038-compliant notes added
Hardened hash mode User-set number of hash rounds added
Compressed key option added

I am in no way responsible for lost or stolen coins, no matter what.


Title: Re: PyBrainwallet - Python Brainwallet Generator
Post by: yakov on October 17, 2013, 09:12:41 PM
I quite like it.
BIP0038 involves AES256 encryption and scrypt, which is really slow in python. Usually people import large libraries written in C++.
Then again, the speed issue shouldn't be a problem for bitcoin key encryption since you only do it once, and the kind of AES256 used is only simple and doesn't need the initialisation vector stuff or block chaining. It could be coded.


Title: Re: PyBrainwallet - Python Brainwallet Generator
Post by: malevolent on October 17, 2013, 09:27:08 PM
You could also add support for compressed public keys (derived from the same private key but the bitcoin address is different).


Title: Re: PyBrainwallet - Python Brainwallet Generator
Post by: malevolent on October 18, 2013, 12:24:38 PM
You could also add support for compressed public keys (derived from the same private key but the bitcoin address is different).
Definitely something to consider. Is there much interest in, or use of, compressed pubkeys?

The only reason why someone would not use them is if they had an old client that doesn't support compressed public keys. I think Bitcoin-Qt uses them by default since v. 0.6. (1.5 years)
They create less blockchain bloat because they are almost half the size of compressed pubkeys (33 bytes instead of 65).


Title: Re: PyBrainwallet - Python Brainwallet Generator
Post by: brand_new on October 29, 2013, 10:14:57 AM
Hey man, I'd like to try my hands at this. I don't have any original ideas to add yet though. Is there anything I can do to help? Any bug fixes?


Title: Re: PyBrainwallet - Python Brainwallet Generator
Post by: btcven on October 29, 2013, 01:47:16 PM
A Bitcoin address is not a public key, but a hash of it.


Title: Re: PyBrainwallet - Python Brainwallet Generator - Now with BIP38!
Post by: nomorecoin on November 24, 2013, 08:30:31 PM
Bump, major update, now includes BIP38 (non-ec) encryption and decryption! Updated OP.


Title: Re: PyBrainwallet - Python Brainwallet Generator - Now with BIP38!
Post by: dserrano5 on November 24, 2013, 10:52:44 PM
Looks good! Is a command line interface on the roadmap? Clicking around is for wimps :P.


Title: Re: PyBrainwallet - Python Brainwallet Generator - Now with BIP38!
Post by: nomorecoin on November 24, 2013, 11:18:18 PM
Looks good! Is a command line interface on the roadmap? Clicking around is for wimps :P.
Probably, though not a very high priority for now.


Title: Re: PyBrainwallet - Python Brainwallet Generator - Now with BIP38!
Post by: nomorecoin on November 26, 2013, 06:44:43 AM
Tested on Rasberry Pi, with decent results. ~12 seconds to create note, and encrypt/decrypt takes ~30 seconds.

Updated PIL import to allow use of pillow, because PIL threw an error (decoder ZIP not available).


Title: Re: PyBrainwallet - Python Brainwallet Generator - Now with BIP38!
Post by: kfruit on December 01, 2013, 05:35:24 AM
Was looking for a way to create paper wallets with BIP 38 on raspberry for a while! It's just not possible using javascript based methods like bitaddress.org (takes forever). I'll definitely try this out ASAP, thanks!


Title: Re: PyBrainwallet - Python Brainwallet Generator - Now with BIP38!
Post by: nomorecoin on December 05, 2013, 11:50:55 PM
Added Diceware support. Enter your manual rolls (comma separated), or use PRNG (PyCrypto) to generate passphrases. Diceware is available in the Options menu.

The scrypt module does build on Windows, from PyPi source, with MinGW. Unfortunately, I'm still unable to build binaries.