forked from STI/Astroport.ONE
51 lines
1.2 KiB
Python
51 lines
1.2 KiB
Python
|
import argparse
|
||
|
import sys
|
||
|
from typing import Callable, Dict, Tuple
|
||
|
|
||
|
from base58 import b58decode, b58decode_check, b58encode, b58encode_check
|
||
|
|
||
|
_fmap = {
|
||
|
(False, False): b58encode,
|
||
|
(False, True): b58encode_check,
|
||
|
(True, False): b58decode,
|
||
|
(True, True): b58decode_check
|
||
|
} # type: Dict[Tuple[bool, bool], Callable[[bytes], bytes]]
|
||
|
|
||
|
|
||
|
def main() -> None:
|
||
|
'''Base58 encode or decode FILE, or standard input, to standard output.'''
|
||
|
|
||
|
stdout = sys.stdout.buffer
|
||
|
|
||
|
parser = argparse.ArgumentParser(description=main.__doc__)
|
||
|
parser.add_argument(
|
||
|
'file',
|
||
|
metavar='FILE',
|
||
|
nargs='?',
|
||
|
type=argparse.FileType('r'),
|
||
|
default='-')
|
||
|
parser.add_argument(
|
||
|
'-d', '--decode',
|
||
|
action='store_true',
|
||
|
help='decode data')
|
||
|
parser.add_argument(
|
||
|
'-c', '--check',
|
||
|
action='store_true',
|
||
|
help='append a checksum before encoding')
|
||
|
|
||
|
args = parser.parse_args()
|
||
|
fun = _fmap[(args.decode, args.check)]
|
||
|
|
||
|
data = args.file.buffer.read()
|
||
|
|
||
|
try:
|
||
|
result = fun(data)
|
||
|
except Exception as e:
|
||
|
sys.exit(e)
|
||
|
|
||
|
stdout.write(result)
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
main()
|