;i .dZddlZddlmZddlZddZdS)zUtility functions.N) OptionParserreturnctdd}|ddddd |d d d dd |ddddd|ddddd|tj\}}|jrnt d|jd|jdtjt|jd5}| }dddn #1swxYwYnTt d|jztjtj d}t|tksJt|tjj||j}tj|j|j}||j}|jrqt d|jd|jdtjt|jd 5}||ddddS#1swxYwYdSt d!|jztjtj|ddS)"z=Reads a private key and outputs the corresponding public key.zusage: %prog [options]zReads a private key and outputs the corresponding public key. Both private and public keys use the format described in PKCS#1 v1.5)usage descriptionz-iz--input infilenamestringz1Input filename. Reads from stdin if not specified)desttypehelpz-oz--output outfilenamez2Output filename. Writes to stdout of not specifiedz--informinformz!key format of input - default PEM)PEMDERr)r r choicesdefaultz --outformoutformz"key format of output - default PEMzReading private key from z in z format)filerbNz+Reading private key from stdin in %s formatasciizWriting public key to wbz)Writing public key to stdout in %s format)r add_option parse_argssysargvrprintrstderropenreadstdinencoder bytesrsakey PrivateKey load_pkcs1 PublicKeyne save_pkcs1rr writestdoutdecode) parserclicli_argsinfilein_datapriv_keypub_keyout_dataoutfiles r>sU !!!!!!J3J3J3J3J3J3r=