1#!/usr/bin/env python 2 3from __future__ import print_function 4 5import argparse 6 7from pycoin.encoding.b58 import a2b_base58, b2a_base58, a2b_hashed_base58, b2a_hashed_base58 8from pycoin.encoding.hexbytes import b2h, h2b 9 10 11def create_parser(): 12 parser = argparse.ArgumentParser(description='Convert b58 to hex or back') 13 parser.add_argument('-b', help='force b58 input (rather than best guess)', action="store_true") 14 parser.add_argument('input', nargs="+", help='hex or base58') 15 return parser 16 17 18def parse_arg(arg, force_b58): 19 is_hex_input = False 20 blob = None 21 if not force_b58: 22 try: 23 blob = h2b(arg) 24 is_hex_input = True 25 except Exception: 26 pass 27 if blob is None: 28 try: 29 blob = a2b_base58(arg) 30 except KeyError: 31 pass 32 if blob is None: 33 raise argparse.ArgumentTypeError("can't parse %s" % arg) 34 return blob, is_hex_input 35 36 37def b58(args, parser): 38 for arg in args.input: 39 blob, is_hex_input = parse_arg(arg, args.b) 40 41 if is_hex_input: 42 print(b2h(blob)) 43 print(b2a_base58(blob)) 44 print(b2a_hashed_base58(blob)) 45 else: 46 print(b2h(blob)) 47 print(b2a_base58(blob)) 48 try: 49 blob = a2b_hashed_base58(arg) 50 print("valid hashed b58") 51 print("contents: ", b2h(blob)) 52 except Exception: 53 print("not hashed b58") 54 55 56def main(): 57 parser = create_parser() 58 args = parser.parse_args() 59 b58(args, parser) 60 61 62if __name__ == '__main__': 63 main() 64