Forum Home
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular

    \[BOUNTY CLAIMED\] Python conversion code for broken private keys

    Feathercoin Discussion
    4
    15
    2065
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • H
      hank last edited by

      known_input is just a private key string. I removed the test private keys from the code there haphazardly so I could post it. You can probably remove anything that isn’t dealing with the arguments parsed with argparse - it was just test code.

      1 Reply Last reply Reply Quote 0
      • K
        Kevlar Spammer last edited by

        If I remove the offending piece of code, I get this:

        [code]
        Traceback (most recent call last):
        File “C:\Users\savotr\Downloads\convert.py”, line 80, in
        print("Input: ", hex(decoded))
        TypeError: ‘float’ object cannot be interpreted as an integer
        [/code]

        Edit: looks like math changed in Python 2-3. So I’m downgrading to 2, will let you know what I find.

        1 Reply Last reply Reply Quote 0
        • K
          Kevlar Spammer last edited by

          Your example was a little too complex for me to completely understand so I implemented my own version using the wiki page you linked to.

          [code]
          import hashlib
          import argparse

          parser = argparse.ArgumentParser()
          parser.add_argument(‘key’)
          parser.add_argument(‘–tocustom’, nargs=1, help=“Custom version. Use 2 hex chars. Not compatible with other options”)
          parser.add_argument(‘–toltc’, action=“store_true”, help=“Convert input to LTC private key”)
          parser.add_argument(‘–toftc’, action=“store_true”, help=“Convert input to FTC private key”)
          parser.add_argument(‘–tobtc’, action=“store_true”, help=“Convert input to BTC private key”)
          args = parser.parse_args()

          if args.toltc:
          args.version = “B0”
          elif args.toftc:
          args.version = “8E”
          elif args.tobtc:
          args.version = “80”
          elif args.tocustom:
          args.version = args.tocustom[0]

          __b58chars = ‘123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz’
          __b58base = len(__b58chars)

          def b58encode(v):
          long_value = int(v.encode(“hex_codec”), 16)
          result = ‘’
          while long_value >= __b58base:
          div, mod = divmod(long_value, __b58base)
          result = __b58chars[mod] + result
          long_value = div
          result = __b58chars[long_value] + result
          # Bitcoin does a little leading-zero-compression:
          # leading 0-bytes in the input become leading-1s
          nPad = 0
          for c in v:
          if c == ‘\0’: nPad += 1
          else: break
          return (__b58chars[0]*nPad) + result

          def b58decode(v):
          long_value = 0L
          for (i, c) in enumerate(v[::-1]):
          long_value += __b58chars.find© * (__b58base**i)
          result = ‘’
          while long_value >= 256:
          div, mod = divmod(long_value, 256)
          result = chr(mod) + result
          long_value = div
          result = chr(long_value) + result
          nPad = 0
          for c in v:
          if c == __b58chars[0]: nPad += 1
          else: break
          result = chr(0)*nPad + result
          return result

          def numtowif(numpriv):
          step1 = args.version+numpriv
          step2 = hashlib.sha256(step1).hexdigest()
          step3 = hashlib.sha256(step2).hexdigest()
          step4 = step1 + step3[:8]
          step5 = b58encode(step4)
          return step5

          def wiftonum(wifpriv):
          step1 = b58decode(wifpriv)
          step2 = step1[:-8]
          step3 = step2[2:]
          return step3

          print(numtowif(wiftonum(args.key)))
          [/code]

          And that should do the trick.

          I’ve got some example outputs:
          [code]
          ----> FTC to FTC (input and output should match)
          >convert.py --toftc 4MGS1y8YUYERWHgVDKfqv3NsvaBGVqGYEUiBAUmz9WA7hLJghzy9rB8FpQiF7XqEc3tLe6ZPyP4r14AYpVFqV
          4MGS1y8YUYERWHgVDKfqv3NsvaBGVqGYEUiBAUmz9WA7hLJghzy9rB8FpQiF7XqEc3tLe6ZPyP4r14AYpVFqV

          ----> FTC TO LTC (convert FTC WIF to LTC WIF)
          >convert.py --toltc 4MGS1y8YUYERWHgVDKfqv3NsvaBGVqGYEUiBAUmz9WA7hLJghzy9rB8FpQiF7XqEc3tLe6ZPyP4r14AYpVFqV
          4wWNH7k7JfcWwZRPKgo5n9LeHm32tHuhiMgDEHTxMrXQn3fWoirhyoaRYrYmsEt5AJYNj4rnVcVcyih3WwjnP

          ----> LTC TO FTC (using the prior output from LTC, convert back to FTC, output should match first example)
          >convert.py --toftc 4wWNH7k7JfcWwZRPKgo5n9LeHm32tHuhiMgDEHTxMrXQn3fWoirhyoaRYrYmsEt5AJYNj4rnVcVcyih3WwjnP
          4MGS1y8YUYERWHgVDKfqv3NsvaBGVqGYEUiBAUmz9WA7hLJghzy9rB8FpQiF7XqEc3tLe6ZPyP4r14AYpVFqV
          [/code]

          And here’s a github pull request with the diff for you, so you can just merge it in yourself without having to copy-pasta the code from here: https://github.com/hank/life/pull/1

          My FTC address is: 6eXWJdPKMRpMG2b8Hv6bvEpXp5taThXBsS

          1 Reply Last reply Reply Quote 0
          • H
            hank last edited by

            I’ll check this out when I get home - thanks!

            1 Reply Last reply Reply Quote 0
            • H
              hank last edited by

              So, here I created a test address with no coins on it with the official client:
              [code]
              dumpprivkey 6rnc5LW1zi1QDH2fRzZLCXPu2wEDX6mGkp
              N8FF4eWtqD9ob6E2fNhKGKYgGfwVGje13nn1uLK8xuD5rvv2kZY1
              [/code]

              Here’s the result:

              [code]hank$ python convert.py --tobtc N8FF4eWtqD9ob6E2fNhKGKYgGfwVGje13nn1uLK8xuD5rvv2kZY1
              9K5tGttcjM981HU9fdASvek4Wce6234LhUDcmirK6c7t44CWJhcL
              hank$ python convert.py --toftc 9K5tGttcjM981HU9fdASvek4Wce6234LhUDcmirK6c7t44CWJhcL
              9Knhubm3QF5Km7hMUfLUugUemr326gr35ze72qzkvW3vsvjhLDVt[/code]

              [code]
              importprivkey 9KnbfzhQxPz1CnDhRDPYqGsMto8YD9sJzeypfdnC6WWjR5iMdNc2
              {“code”:-5,“message”:“Invalid private key”}
              [/code]

              I also tried one of your FTC address outputs:

              [code]
              importprivkey 4MGS1y8YUYERWHgVDKfqv3NsvaBGVqGYEUiBAUmz9WA7hLJghzy9rB8FpQiF7XqEc3tLe6ZPyP4r14AYpVFqV
              {“code”:-5,“message”:“Invalid private key”}
              [/code]

              1 Reply Last reply Reply Quote 0
              • K
                Kevlar Spammer last edited by

                [quote name=“hank” post=“31001” timestamp=“1381556248”]
                So, here I created a test address with no coins on it with the official client:
                [code]
                dumpprivkey 6rnc5LW1zi1QDH2fRzZLCXPu2wEDX6mGkp
                N8FF4eWtqD9ob6E2fNhKGKYgGfwVGje13nn1uLK8xuD5rvv2kZY1
                [/code]

                Here’s the result:

                [code]hank$ python convert.py --tobtc N8FF4eWtqD9ob6E2fNhKGKYgGfwVGje13nn1uLK8xuD5rvv2kZY1
                9K5tGttcjM981HU9fdASvek4Wce6234LhUDcmirK6c7t44CWJhcL
                hank$ python convert.py --toftc 9K5tGttcjM981HU9fdASvek4Wce6234LhUDcmirK6c7t44CWJhcL
                9Knhubm3QF5Km7hMUfLUugUemr326gr35ze72qzkvW3vsvjhLDVt[/code]

                [code]
                importprivkey 9KnbfzhQxPz1CnDhRDPYqGsMto8YD9sJzeypfdnC6WWjR5iMdNc2
                {“code”:-5,“message”:“Invalid private key”}
                [/code]

                I also tried one of your FTC address outputs:

                [code]
                importprivkey 4MGS1y8YUYERWHgVDKfqv3NsvaBGVqGYEUiBAUmz9WA7hLJghzy9rB8FpQiF7XqEc3tLe6ZPyP4r14AYpVFqV
                {“code”:-5,“message”:“Invalid private key”}
                [/code]
                [/quote]

                Hmm… that’s strange. Let me look into that.

                1 Reply Last reply Reply Quote 0
                • H
                  hank last edited by

                  Fixed.

                  https://github.com/hank/life/blob/master/code/python/cryptcoin_addr_convert/convert.py

                  [code]hank$ python convert.py --tobtc N8FF4eWtqD9ob6E2fNhKGKYgGfwVGje13nn1uLK8xuD5rvv2kZY1
                  Converting N8FF4eWtqD9ob6E2fNhKGKYgGfwVGje13nn1uLK8xuD5rvv2kZY1
                  L48R4PUJP4Kswr3GvKAp7tDrnb8Masqpmc4C4yTp6Cf7vJ36t2t9
                  hank$ python convert.py --toftc N8FF4eWtqD9ob6E2fNhKGKYgGfwVGje13nn1uLK8xuD5rvv2kZY1
                  Converting N8FF4eWtqD9ob6E2fNhKGKYgGfwVGje13nn1uLK8xuD5rvv2kZY1
                  N8FF4eWtqD9ob6E2fNhKGKYgGfwVGje13nn1uLK8xuD5rvv2kZY1[/code]

                  There were a couple things wrong. One was you had to encode the versions as ints and prepend them in binary instead of ascii. You were cutting too much off the end and the front (probably due to powershell insanity), which was a pretty easy fix. Try out verbose mode to see the full details.

                  As far as I can tell, this code works, so I think you’re still entitled to a bounty. I did have to fix it, so I don’t think the full 250 is fair - how does 150FTC sound?

                  1 Reply Last reply Reply Quote 0
                  • K
                    Kevlar Spammer last edited by

                    Heh, I found the problem just now and was coming here to post the fix, but you had already found it.

                    I’ll take what I can get. Hope I helped ya… :)

                    1 Reply Last reply Reply Quote 0
                    • H
                      hank last edited by

                      You did help a lot - I’ll send the funds shortly.

                      1 Reply Last reply Reply Quote 0
                      • C
                        chrisj Regular Member last edited by

                        [quote name=“hank” post=“31051” timestamp=“1381605534”]
                        You did help a lot - I’ll send the funds shortly.
                        [/quote]

                        Sweet!

                        1 Reply Last reply Reply Quote 0
                        • H
                          hank last edited by

                          I’m trying to sync my wallet right now and I’m having some problems. Shouldn’t be too much longer though…

                          1 Reply Last reply Reply Quote 0
                          • H
                            hank last edited by

                            [b]Sent[/b]

                            [url=http://ftc.cryptocoinexplorer.com/tx/a225d549fff9f3a7617292ccef5aea5f3710fd5ae8d23f291154c4b90b21695c]http://ftc.cryptocoinexplorer.com/tx/a225d549fff9f3a7617292ccef5aea5f3710fd5ae8d23f291154c4b90b21695c[/url]

                            1 Reply Last reply Reply Quote 0
                            • Bushstar
                              Bushstar last edited by

                              Great works guys :)

                              Donate: 6hf9DF8H67ZEoW9KmPJez6BHh4XPNQSCZz

                              1 Reply Last reply Reply Quote 0
                              • First post
                                Last post