Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # Copyright (c) 2011, Ukigo
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- # HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- usage = """ Usage : ./pbwhatkey your_passphrase your_salt number_of_iterations
- Example : ./pbwhatkey +WindFall-Money*. Candy+] 777777 """
- from pbkdf2 import PBKDF2
- import os, sys, hashlib
- from hashlib import sha256
- import pywallet as pyw
- #from optparse import OptionParser
- b58_digits = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
- def base58_encode (n):
- l = []
- while n > 0:
- n, r = divmod (n, 58)
- l.insert (0, (b58_digits[r]))
- return ''.join (l)
- def base58_decode (s):
- n = 0
- for ch in s:
- n *= 58
- digit = b58_digits.index (ch)
- n += digit
- return n
- def dhash (s):
- return sha256(sha256(s).digest()).digest()
- def convert_privkey_to_base58 (s):
- checksum = dhash ('\x80' + s)[:4]
- return base58_encode (
- int ('0x80' + (s + checksum).encode ('hex_codec'), 16)
- )
- def main():
- try:
- if sys.argv[1] in ("help", "-h", "-help","--help"):
- print " "
- print usage
- exit(0)
- if int(sys.argv[3]) < 60001:
- print " "
- print "Number of iterations must be > 60000 ( better use > 1'000'000 )"
- exit(0)
- except IndexError:
- print " "
- print usage
- exit(0)
- print " "
- print " Please wait. Generating keypair ..."
- salt = hashlib.sha512(sys.argv[2]).hexdigest()
- print " "
- print "Password was : ", sys.argv[1]
- topsec = PBKDF2(sys.argv[1], salt, int(sys.argv[3])).hexread(16)
- print " ................................"
- print "Secret (hex) : ", topsec
- print " "
- #pyw.PrivKeyToSecret(privkey)
- secret = pyw.str_to_long(topsec)
- eckey = pyw.EC_KEY(secret)
- pub = pyw.GetPubKey(eckey)
- priv = pyw.GetPrivKey(eckey)
- priv_base58 = pyw.SecretToASecret(pyw.PrivKeyToSecret(priv))
- # sec_ver = pyw.GetSecret(eckey)
- # print sec_ver
- print "Private key for import : ", priv_base58
- # print "Revert : ", pyw.ASecretToSecret(priv_base58).encode("hex_codec")
- print " "
- print "Bitcoin address : "+pyw.public_key_to_bc_address(pub)
- print " "
- exit(0)
- if __name__ == '__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement