def activate_card(reader):
    try:
        blocksec2go.select_app(reader)
        print('Found the specified reader and a Blockchain Security 2Go card!')
    except Exception as details:
        print('ERROR: ' + str(details))
        raise SystemExit
Example #2
0
def activate_card(reader):
    try:
        blocksec2go.select_app(reader)
        print('Found reader and Security 2Go card!')
    except Exception as details:
        print('ERROR: %s' % str(details))
        raise SystemExit
def _unlock_pin(args):
    reader = open_pyscard(args.reader)
    select_app(reader)
    unlock_pin(reader, args.puk)

    if args.machine_readable:
        json.dump({'status': 'success'}, fp=sys.stdout)
    else:
        print('OK - unlocked')
Example #4
0
def _generate_keypair(args):
    reader = open_pyscard(args.reader)
    select_app(reader)
    key_id = generate_keypair(reader)

    if args.machine_readable:
        json.dump({'status': 'success', 'key_id': key_id}, fp=sys.stdout)
    else:
        print('Key ID: {}'.format(key_id))
def _set_pin(args):
    reader = open_pyscard(args.reader)
    select_app(reader)
    puk = set_pin(reader, args.pin)

    if args.machine_readable:
        json.dump({'status': 'success', 'puk': puk.hex()}, fp=sys.stdout)
    else:
        print('PUK to unlock card (hex): ' + puk.hex())
Example #6
0
def _encrypted_keyimport(args):
    reader = open_pyscard(args.reader)
    select_app(reader)
    if args.pin is not None:
        verify_pin(reader, args.pin)
    encrypted_keyimport(reader, args.seed)

    if args.machine_readable:
        json.dump({'status': 'success'}, fp=sys.stdout)
    else:
        print('OK - import succeeded')
Example #7
0
def _unlock_pin(args):
    reader = open_pyscard(args.reader)
    select_app(reader)
    status = unlock_pin(reader, args.puk)
    if (True == status):
        if args.machine_readable:
            json.dump({'status': 'success'}, fp=sys.stdout)
        else:
            print('OK - unlocked')
    elif (0 != status):
        print('ERROR - ' + str(status) + ' tries left')
    else:
        print('ERROR - Locked')
def _get_key_info(args):
    reader = open_pyscard(args.reader)
    select_app(reader)
    (global_counter, counter, key) = get_key_info(reader, args.key_id)

    if args.machine_readable:
        json.dump({
            'status': 'success',
            'key_id': args.key_id,
            'global_counter': global_counter,
            'counter': counter,
            'key': key.hex()}, fp=sys.stdout)
    else:
        print('Remaining signatures with card: {}'.format(global_counter))
        print('Remaining signatures with key {}: {}'.format(args.key_id, counter))
        print('Public key (hex, encoded according to SEC1): ' + key.hex())
    def _init(self):
        while self.reader is None:
            try:
                self.reader = open_pyscard()
            except Exception as details:
                self.logger.debug(details)
                if "No reader found" != str(
                        details) and "No card on reader" != str(details):
                    self.logger.error(details)
                    raise Exception(f"Reader error: {details}")
                self.logger.info(
                    'Reader or card not found. Retrying in 1 second...')
                time.sleep(1)

        blocksec2go.select_app(self.reader)
        self.pub_key = self._get_pub_key()
        self.logger.info('Initialized security2go')
Example #10
0
 def init(self, key_id=1, retrying=False):
     self.key_id = key_id
     while self.reader == None:
         try:
             self.reader = blocksec2go.find_reader(READER_ID)
         except Exception as details:
             logger.debug(details)
             if "No reader found" != str(
                     details) and "No card on reader" != str(details):
                 logger.error(details)
                 raise Exception(f"Reader error: {details}")
             if retrying:
                 return None
             time.sleep(1)
     try:
         blocksec2go.select_app(self.reader)
     except Exception as details:
         logger.error(details)
         raise SystemExit
Example #11
0
    def _init(self):
        retries_left = self._connect_retry_count

        while not self._reader and retries_left >= 0:
            try:
                self._reader = open_pyscard()
            except RuntimeError as details:
                self._logger.debug(details)

                self._logger.info(
                    f'Reader or card not found. {retries_left} retries left.')
                retries_left = retries_left - 1
                time.sleep(1)

        if not self._reader:
            self._logger.error('Exceeded connection retry count')
            raise CardNotAvailable

        blocksec2go.select_app(self._reader)
        self._pub_key = self._get_pub_key()
        self._logger.debug(f'Using public key {self._pub_key.hex()}')
        self._logger.info(f'Initialized for address {self.get_address()}')
Example #12
0
def _get_card_info(args):
    reader = args.reader
    (pin_active, card_id, version) = select_app(reader)

    if args.machine_readable:
        json.dump(
            {
                'status': 'success',
                'pin_active': pin_active,
                'card_id': card_id.hex(),
                'version': version
            },
            fp=sys.stdout)
    else:
        print('PIN is: ' + ('ENABLED' if pin_active else 'disabled'))
        print('Card ID (hex): ' + card_id.hex())
        print('Version: ' + version)
def main(argv=None):
    if argv == None:
        argv = sys.argv
    prog = sys.argv[0]
    args = sys.argv[1:]

    parser = argparse.ArgumentParser(
        prog=prog,
        description=
        'Command line interface for Infineon\'s Blockchain Security 2Go starter kit'
    )
    subparsers = parser.add_subparsers(help='subcommands')
    parser.add_argument('--reader', help='name of the reader to use')
    parser.add_argument('--security_level', help='SCP03 security level')
    parser.add_argument('--key_path', help='relative path to file with keys')
    parser.add_argument('--machine-readable',
                        help='json output',
                        action='store_true')
    parser.add_argument(
        '--loglevel',
        help='log level',
        default='info',
        choices=['debug', 'info', 'warning', 'error', 'critical', 'nolog'],
    )

    from blocksec2go.cli import (generate_signature, generate_keypair,
                                 get_key_info, list_readers, get_card_info,
                                 encrypted_keyimport, set_pin, change_pin,
                                 unlock_pin, disable_pin, open_secure_channel,
                                 get_status, enable_protected_mode,
                                 add_key_label, get_key_label)
    generate_signature.add_subcommand(subparsers)
    generate_keypair.add_subcommand(subparsers)
    get_key_info.add_subcommand(subparsers)
    list_readers.add_subcommand(subparsers)
    get_card_info.add_subcommand(subparsers)
    encrypted_keyimport.add_subcommand(subparsers)
    set_pin.add_subcommand(subparsers)
    change_pin.add_subcommand(subparsers)
    unlock_pin.add_subcommand(subparsers)
    disable_pin.add_subcommand(subparsers)
    open_secure_channel.add_subcommand(subparsers)
    get_status.add_subcommand(subparsers)
    enable_protected_mode.add_subcommand(subparsers)
    add_key_label.add_subcommand(subparsers)
    get_key_label.add_subcommand(subparsers)

    args = parser.parse_args(args)
    if hasattr(args, 'func'):
        if args.loglevel != 'nolog':
            logging.basicConfig(level=args.loglevel.upper())
        try:
            args.reader = open_pyscard(args.reader)
            select_app(args.reader)
            if (args.security_level is not None):
                open_secure_channel._open_secure_channel(args)
                print("Channel opened...")
            args.func(args)
            return 0
        except CardError as e:
            if args.machine_readable:
                json.dump({
                    'status': 'CardError',
                    'error': e.response.sw
                },
                          fp=sys.stdout)
            else:
                print(str(e))
            return -1
        except Exception as e:
            if args.machine_readable:
                json.dump({'status': 'error', 'error': str(e)}, fp=sys.stdout)
                return -1
            else:
                raise e
    else:
        parser.print_help()
        return 0
import blocksec2go

if ('__main__' == __name__):
    reader = None
    reader_name = 'Identiv uTrust 3700 F'
    while (reader == None):
        try:
            reader = blocksec2go.find_reader(reader_name)
            print('Found the specified reader and a card!', end='\r')
        except Exception as details:
            if ('No reader found' == str(details)):
                print('No card reader found!     ', end='\r')
            elif ('No card on reader' == str(details)):
                print('Found reader, but no card!', end='\r')
            else:
                print('ERROR:', details)
                raise SystemExit
    try:
        pin_active, card_id, version = blocksec2go.select_app(reader)
        print('Found the specified reader and a Blockchain Security 2Go card!')
    except Exception as details:
        print('ERROR:', details)
        raise SystemExit
    print('Is PIN enabled?', pin_active)
    print('Card ID (hex):', card_id.hex())
    print('Version: ' + version)