def fetch_pkg(info, dst_dir=None, session=None): ''' fetch a package given by `info` and store it into `dst_dir` ''' if dst_dir is None: dst_dir = config.pkgs_dirs[0] session = session or CondaSession() fn = '%(name)s-%(version)s-%(build)s.tar.bz2' % info url = info['channel'] + fn log.debug("url=%r" % url) path = join(dst_dir, fn) download(url, path, session=session, md5=info['md5'], urlstxt=True) if info.get('sig'): from conda.signature import verify, SignatureError fn2 = fn + '.sig' url = (info['channel'] if info['sig'] == '.' else info['sig'].rstrip('/') + '/') + fn2 log.debug("signature url=%r" % url) download(url, join(dst_dir, fn2), session=session) try: if verify(path): return except SignatureError as e: sys.exit(str(e)) sys.exit("Error: Signature for '%s' is invalid." % (basename(path)))
def fetch_pkg(info, dst_dir=None, session=None): ''' fetch a package given by `info` and store it into `dst_dir` ''' session = session or CondaSession() fn = info['fn'] url = info.get('url') if url is None: url = info['channel'] + '/' + fn log.debug("url=%r" % url) if dst_dir is None: dst_dir = dirname(find_new_location(fn[:-8])[0]) path = join(dst_dir, fn) download(url, path, session=session, md5=info['md5'], urlstxt=True) if info.get('sig'): from conda.signature import verify, SignatureError fn2 = fn + '.sig' url = (info['channel'] if info['sig'] == '.' else info['sig'].rstrip('/')) + '/' + fn2 log.debug("signature url=%r" % url) download(url, join(dst_dir, fn2), session=session) try: if verify(path): return except SignatureError as e: sys.exit(str(e)) sys.exit("Error: Signature for '%s' is invalid." % (basename(path)))
def main(): from conda.cli.conda_argparse import ArgumentParser p = ArgumentParser( description="""\ Tool for signing conda packages. Signatures will be written alongside the files as FILE.sig.""") p.add_argument('files', help="Files to sign.", nargs='*', metavar="FILE",) p.add_argument('-k', '--keygen', action="store", help="Generate a public-private " "key pair ~/.conda/keys/<NAME>(.pub).", metavar="NAME") p.add_argument('--size', action="store", help="Size of generated RSA public-private key pair in bits " "(defaults to 2048).", metavar="BITS") p.add_argument('-v', '--verify', action="store_true", help="Verify FILE(s).") args = p.parse_args() if args.keygen: if args.files: p.error('no arguments expected for --keygen') try: keygen(args.keygen, int(2048 if args.size is None else args.size)) except ValueError as e: sys.exit('Error: %s' % e) return if args.size is not None: p.error('--size option is only allowed with --keygen option') if args.verify: for path in args.files: try: disp = 'VALID' if verify(path) else 'INVALID' except SignatureError as e: disp = 'ERROR: %s' % e print('%-40s %s' % (path, disp)) return key_name = get_default_keyname() if key_name is None: sys.exit("Error: no private key found in %s" % KEYS_DIR) print("Using private key '%s' for signing." % key_name) key = RSA.importKey(open(join(KEYS_DIR, key_name)).read()) for path in args.files: print('signing: %s' % path) with open('%s.sig' % path, 'w') as fo: fo.write('%s ' % key_name) fo.write(sign(path, key)) fo.write('\n')
def fetch_pkg(info, dst_dir=None, session=None): ''' fetch a package given by `info` and store it into `dst_dir` ''' session = session or CondaSession() fn = info['fn'] url = info.get('url') if url is None: url = info['channel'] + '/' + fn log.debug("url=%r" % url) if dst_dir is None: dst_dir = find_new_location(fn[:-8])[0] path = join(dst_dir, fn) download(url, path, session=session, md5=info['md5'], urlstxt=True) if info.get('sig'): from conda.signature import verify, SignatureError fn2 = fn + '.sig' url = (info['channel'] if info['sig'] == '.' else info['sig'].rstrip('/')) + '/' + fn2 log.debug("signature url=%r" % url) download(url, join(dst_dir, fn2), session=session) try: if verify(path): return except SignatureError as e: sys.exit(str(e)) sys.exit("Error: Signature for '%s' is invalid." % (basename(path)))
def fetch_pkg(info, dst_dir=None, session=None): """ fetch a package given by `info` and store it into `dst_dir` """ if dst_dir is None: dst_dir = config.pkgs_dirs[0] session = session or CondaSession() fn = "%(name)s-%(version)s-%(build)s.tar.bz2" % info url = info["channel"] + fn log.debug("url=%r" % url) path = join(dst_dir, fn) download(url, path, session=session, md5=info["md5"], urlstxt=True) if info.get("sig"): from conda.signature import verify, SignatureError fn2 = fn + ".sig" url = (info["channel"] if info["sig"] == "." else info["sig"].rstrip("/") + "/") + fn2 log.debug("signature url=%r" % url) download(url, join(dst_dir, fn2), session=session) try: if verify(path): return except SignatureError as e: sys.exit(str(e)) sys.exit("Error: Signature for '%s' is invalid." % (basename(path)))
def main(): from optparse import OptionParser p = OptionParser( usage="usage: %prog [option] [FILE ...]", description="tool for signing conda packages") p.add_option('-k', '--keygen', action="store", help="generate a public-private " "key pair ~/.conda/keys/<NAME>(.pub)", metavar="NAME") p.add_option('-v', '--verify', action="store_true", help="verify FILE(s)") opts, args = p.parse_args() if opts.keygen: if args: p.error('no arguments expected for --keygen') keygen(opts.keygen) return if opts.verify: for path in args: try: disp = 'VALID' if verify(path) else 'INVALID' except SignatureError as e: disp = 'ERROR: %s' % e print('%-40s %s' % (path, disp)) return key_name = get_default_keyname() if key_name is None: sys.exit("Error: no private key found in %s" % KEYS_DIR) print("Using private key '%s' for signing." % key_name) key = RSA.importKey(open(join(KEYS_DIR, key_name)).read()) for path in args: print('signing: %s' % path) with open('%s.sig' % path, 'w') as fo: fo.write('%s ' % key_name) fo.write(sign(path, key)) fo.write('\n')
def main(): from conda.cli.conda_argparse import ArgumentParser p = ArgumentParser(description="""\ Tool for signing conda packages. Signatures will be written alongside the files as FILE.sig.""") p.add_argument( 'files', help="Files to sign.", nargs='*', metavar="FILE", ) p.add_argument('-k', '--keygen', action="store", help="Generate a public-private " "key pair ~/.conda/keys/<NAME>(.pub).", metavar="NAME") p.add_argument( '--size', action="store", help="Size of generated RSA public-private key pair in bits " "(defaults to 2048).", metavar="BITS") p.add_argument('-v', '--verify', action="store_true", help="Verify FILE(s).") args = p.parse_args() if args.keygen: if args.files: p.error('no arguments expected for --keygen') try: keygen(args.keygen, int(2048 if args.size is None else args.size)) except ValueError as e: sys.exit('Error: %s' % e) return if args.size is not None: p.error('--size option is only allowed with --keygen option') if args.verify: for path in args.files: try: disp = 'VALID' if verify(path) else 'INVALID' except SignatureError as e: disp = 'ERROR: %s' % e print('%-40s %s' % (path, disp)) return key_name = get_default_keyname() if key_name is None: sys.exit("Error: no private key found in %s" % KEYS_DIR) print("Using private key '%s' for signing." % key_name) key = RSA.importKey(open(join(KEYS_DIR, key_name)).read()) for path in args.files: print('signing: %s' % path) with open('%s.sig' % path, 'w') as fo: fo.write('%s ' % key_name) fo.write(sign(path, key)) fo.write('\n')