aboutsummaryrefslogblamecommitdiff
path: root/ethy.py
blob: 761f267847f07222adb0e0b96cd24edb428257ec (plain) (tree)























                                                                                
                                                                       













                                                                                 




               

                                       

                                            



                                       
                            

                
 



                                       

                                                             
 
              

                                     
 
               






                                                             
 



                                                            
 





                                                     
 
























































                                                                      


                                                               

                                                             
                                  


                                                                               
                                  



                                  


                                                                        


                                                               

                                                             
                                  


                                                                               
                                  



                                  
 


                                       


                                                      
                                        


                                                                       
 
 
                                 









                         




                                                        
                     


                                                                           
                                             
                                                                









                                             
                             



                                 

                                                       
 






                                                                                                      
                                                                                                  
                                                                                                            
                                                                                                       
                                                                                                                
                                                                                                     
                                                                                                        


                              

















                                            
                                  

                                                     


                                                          

                   
                         

                                                             











                                                             
                                             
             

                                                
















                                               



                                                          

                                                                           

                             
                                                
         
                                                    

                          

                     


                                                                           

                                                                      


                                                                   
                                                 
                                                                    
                                     
                                                            
             
                                                                       

                              


                                     


                                                               




                                      
                                                       
#! /bin/env python3
# MIT License
#
# Copyright (c) 2018 Ted Yin <tederminant@gmail.com>
#
# 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.
#
#
# This little script offers decryption and verification of the existing
# Ethereum wallets, as well as generation of a new wallet. You can use any
# utf-8 string as the password, which could provide with better security
# against the brute-force attack.

# Use at your own risk.
#
# Example:
# python ./ethy.py --verify-key # unlock the wallet and verify whether the
#                               # encrypted private key matches the address
# python ./ethy.py --show-key # reveal the private key (secp256k1)
#
# python ./ethy.py --gen > mywallet.json         # generate a regular wallet (1s)
# python ./ethy.py --gen --light > mywallet.json # generate a wallet (fast)

import os
import sys
import json
import argparse
import hashlib
from uuid import uuid4
from getpass import getpass as _getpass
from collections import Counter as Histogram
from math import log
from Crypto.Cipher import AES
from Crypto.Util import Counter
from sha3 import keccak_256
from ecdsa import SigningKey, SECP256k1
from base58 import b58encode

err = sys.stderr


def entropy(data):
    n = len(data)
    return sum([-p * log(p, 2) for p