Exemplo n.º 1
0
def main():
    parser = get_arg_parser()
    options, args = parser.parse_args()
    key = ElGamalKey()  # create an empty key
    
    if options.keyname:  # generate keypair
        if options.encrypt is not None:
            print 'Cannot generate key and encrypt/decrypt at the same time. Aborting...'
        else:
            try:
                key.generate_for_nist(options.size)
                key.to_file('%s.pub' % options.keyname, 'public')
                key.to_file('%s.priv' % options.keyname, 'private')
            except ValueError:
                print 'Can only use NIST curves. See help for sizes. Aborting...'

    elif options.encrypt is not None:
        # helper (DRY)
        def _helper(op_type):
            action = {
                'encrypt': (encrypt, 'public'),
                'decrypt': (decrypt, 'private')
            }[op_type]

            # need a key
            if not options.key:
                print 'No %s key provided. Aborting...' % action[1]
            else:
                try:
                    key.from_file(options.key, action[1])
                    if options.filein and os.path.exists(options.filein):  # need an input file
                        action[0](key, options.filein, options.fileout)
                    else:
                        print 'No input file or file does not exist. Aborting...'
                except:  # bad key
                    print 'Wrong key format. Expecting %s key. Abort...' % action[1]
      
        if options.encrypt:  # encrypt
            _helper('encrypt')
        else:  # decrypt
            _helper('decrypt')
    
    else:
        parser.print_help()