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