blob: 555b420292f2dccf9e22fec8e3d945bc0840f256 [file] [log] [blame]
#
# Copyright 2019,2020 NXP
# SPDX-License-Identifier: Apache-2.0
#
#
"""License text"""
import sys
import click
import func_timeout
from sss.getkey import Get
import sss.sss_api as apis
from .cli import get, pass_context, session_open, session_close, \
log_traceback, TIME_OUT
@get.group()
@pass_context
def ecc(cli_ctx):
""" Get ECC Keys"""
cli_ctx.vlog("Get RSA Keys")
@get.group()
@pass_context
def rsa(cli_ctx):
""" Get RSA Keys """
cli_ctx.vlog("Get ECC Keys")
@get.command('aes', short_help='Get AES Keys')
@click.argument('keyid', type=str, metavar='keyid')
@click.argument('filename', type=click.STRING, metavar='filename')
@click.option('--format', default='', help="Output file format. TEXT can be \"DER\" or \"PEM\"")
@pass_context
def aes(cli_ctx, keyid, filename, format): # pylint: disable=redefined-builtin
""" Get AES Keys \n
keyid = 32bit Key ID. Should be in hex format. Example: 20E8A001 \n
filename = File name to store key. Data can be in PEM or DER format
based on file extension. By default filename with extension .pem in PEM format
and others in DER format.
"""
keyid = int(keyid, 16)
try:
session_open(cli_ctx)
cli_ctx.log("Getting Symmetric Key from KeyID = 0x%08X" % keyid)
get_object = Get(cli_ctx.session)
status = func_timeout.func_timeout(TIME_OUT, get_object.get_key, (keyid, filename, format))
except func_timeout.FunctionTimedOut as timeout_exc:
log_traceback(cli_ctx, timeout_exc.getMsg())
status = apis.kStatus_SSS_Fail
except Exception as exc: # pylint: disable=broad-except
log_traceback(cli_ctx, exc)
status = apis.kStatus_SSS_Fail
session_status = session_close(cli_ctx)
if status == apis.kStatus_SSS_Success and session_status == apis.kStatus_SSS_Success:
cli_ctx.log("Retrieved AES Key from KeyID = 0x%08X" % keyid)
ret_value = 0
else:
cli_ctx.log("ERROR! Could not retrieve AES Key from KeyID 0x%08X " % (keyid,))
ret_value = 1
sys.exit(ret_value)
@get.command('cert', short_help='Get Certificate')
@click.argument('keyid', type=str, metavar='keyid')
@click.argument('filename', type=click.STRING, metavar='filename')
@click.option('--format', default='', help="Output file format. TEXT can be \"DER\" or \"PEM\"")
@pass_context
def cert(cli_ctx, keyid, filename, format): # pylint: disable=redefined-builtin
""" Get Certificate \n
keyid = 32bit Key ID. Should be in hex format. Example: 401286E6 \n
filename = File name to store certificate. Data can be in PEM or DER format
based on file extension. By default filename with extension .pem and .cer in PEM format
and others in DER format.
"""
try:
keyid = int(keyid, 16)
cli_ctx.log("Getting Certificate from KeyID = 0x%08X" % keyid)
session_open(cli_ctx)
get_object = Get(cli_ctx.session)
status = func_timeout.func_timeout(TIME_OUT, get_object.get_key, (keyid, filename, format))
except func_timeout.FunctionTimedOut as timeout_exc:
log_traceback(cli_ctx, timeout_exc.getMsg())
status = apis.kStatus_SSS_Fail
except Exception as exc: # pylint: disable=broad-except
log_traceback(cli_ctx, exc)
status = apis.kStatus_SSS_Fail
session_status = session_close(cli_ctx)
if status == apis.kStatus_SSS_Success and session_status == apis.kStatus_SSS_Success:
cli_ctx.log("Retrieved Certificate from KeyID = 0x%08X" % keyid)
ret_value = 0
else:
cli_ctx.log("ERROR! Could not retrieve Certificate from KeyID 0x%08X " % (keyid,))
ret_value = 1
sys.exit(ret_value)
@ecc.command('pub', short_help='Get ECC Pub')
@click.argument('keyid', type=str, metavar='keyid')
@click.argument('filename', type=click.STRING, metavar='filename')
@click.option('--format', default='', help="Output file format. TEXT can be \"DER\" or \"PEM\"")
@pass_context
def pub(cli_ctx, keyid, filename, format): # pylint: disable=function-redefined, redefined-builtin
"""Get ECC Pub \n
keyid = 32bit Key ID. Should be in hex format. Example: 20E8A001 \n
filename = File name to store key. Data can be in PEM or DER format
based on file extension. By default filename with extension .pem in PEM format
and others in DER format.
"""
try:
keyid = int(keyid, 16)
cli_ctx.log("Getting ECC Public Key from KeyID = 0x%08X" % keyid)
session_open(cli_ctx)
get_object = Get(cli_ctx.session)
status = func_timeout.func_timeout(TIME_OUT, get_object.get_key, (keyid, filename, format))
except func_timeout.FunctionTimedOut as timeout_exc:
log_traceback(cli_ctx, timeout_exc.getMsg())
status = apis.kStatus_SSS_Fail
except Exception as exc: # pylint: disable=broad-except
log_traceback(cli_ctx, exc)
status = apis.kStatus_SSS_Fail
session_status = session_close(cli_ctx)
if status == apis.kStatus_SSS_Success and session_status == apis.kStatus_SSS_Success:
cli_ctx.log("Retrieved ECC Public Key from KeyID = 0x%08X" % keyid)
ret_value = 0
else:
cli_ctx.log("ERROR! Could not retrieve ECC Public Key from KeyID 0x%08X " % (keyid,))
ret_value = 1
sys.exit(ret_value)
@ecc.command('pair', short_help='Get ECC pair')
@click.argument('keyid', type=str, metavar='keyid')
@click.argument('filename', type=click.STRING, metavar='filename')
@click.option('--format', default='', help="Output file format. TEXT can be \"DER\" or \"PEM\"")
@pass_context
def pair(cli_ctx, keyid, filename, format): # pylint: disable=function-redefined, redefined-builtin
"""Get ECC Pair \n
keyid = 32bit Key ID. Should be in hex format. Example: 20E8A001 \n
filename = File name to store key. Data can be in PEM or DER format
based on file extension. By default filename with extension .pem in PEM format
and others in DER format.
"""
try:
keyid = int(keyid, 16)
cli_ctx.log("Getting ECC Public Key from KeyID = 0x%08X" % keyid)
session_open(cli_ctx)
get_object = Get(cli_ctx.session)
status = func_timeout.func_timeout(TIME_OUT, get_object.get_key, (keyid, filename, format))
except func_timeout.FunctionTimedOut as timeout_exc:
log_traceback(cli_ctx, timeout_exc.getMsg())
status = apis.kStatus_SSS_Fail
except Exception as exc: # pylint: disable=broad-except
log_traceback(cli_ctx, exc)
status = apis.kStatus_SSS_Fail
session_status = session_close(cli_ctx)
if status == apis.kStatus_SSS_Success and session_status == apis.kStatus_SSS_Success:
cli_ctx.log("Retrieved ECC Public Key from KeyID = 0x%08X" % keyid)
ret_value = 0
else:
cli_ctx.log("ERROR! Could not retrieve ECC Public Key from KeyID 0x%08X " % (keyid,))
ret_value = 1
sys.exit(ret_value)
@rsa.command('pub', short_help='Get RSA Pub')
@click.argument('keyid', type=str, metavar='keyid')
@click.argument('filename', type=click.STRING, metavar='filename')
@click.option('--format', default='', help="Output file format. TEXT can be \"DER\" or \"PEM\"")
@pass_context
def pub(cli_ctx, keyid, filename, format): # pylint: disable=function-redefined, redefined-builtin
"""Get RSA Pub \n
keyid = 32bit Key ID. Should be in hex format. Example: 20E8A001 \n
filename = File name to store key. Data can be in PEM or DER format
based on file extension. By default filename with extension .pem in PEM format
and others in DER format.
"""
try:
keyid = int(keyid, 16)
cli_ctx.log("Getting RSA Public Key from KeyID = 0x%08X" % keyid)
session_open(cli_ctx)
get_object = Get(cli_ctx.session)
status = func_timeout.func_timeout(TIME_OUT, get_object.get_key, (keyid, filename, format))
except func_timeout.FunctionTimedOut as timeout_exc:
log_traceback(cli_ctx, timeout_exc.getMsg())
status = apis.kStatus_SSS_Fail
except Exception as exc: # pylint: disable=broad-except
log_traceback(cli_ctx, exc)
status = apis.kStatus_SSS_Fail
session_status = session_close(cli_ctx)
if status == apis.kStatus_SSS_Success and session_status == apis.kStatus_SSS_Success:
cli_ctx.log("Retrieved RSA Public Key from KeyID = 0x%08X" % keyid)
ret_value = 0
else:
cli_ctx.log("ERROR! Could not retrieve RSA Public Key from KeyID 0x%08X " % (keyid,))
ret_value = 1
sys.exit(ret_value)
@rsa.command('pair', short_help='Get RSA Pair')
@click.argument('keyid', type=str, metavar='keyid')
@click.argument('filename', type=click.STRING, metavar='filename')
@click.option('--format', default='', help="Output file format. TEXT can be \"DER\" or \"PEM\"")
@pass_context
def pair(cli_ctx, keyid, filename, format): # pylint: disable=function-redefined, redefined-builtin
"""Get RSA Pair \n
keyid = 32bit Key ID. Should be in hex format. Example: 20E8A001 \n
filename = File name to store key. Data can be in PEM or DER format
based on file extension. By default filename with extension .pem in PEM format
and others in DER format.
"""
try:
keyid = int(keyid, 16)
cli_ctx.log("Getting RSA Public Key from KeyID = 0x%08X" % keyid)
session_open(cli_ctx)
get_object = Get(cli_ctx.session)
status = func_timeout.func_timeout(TIME_OUT, get_object.get_key, (keyid, filename, format))
except func_timeout.FunctionTimedOut as timeout_exc:
log_traceback(cli_ctx, timeout_exc.getMsg())
status = apis.kStatus_SSS_Fail
except Exception as exc: # pylint: disable=broad-except
log_traceback(cli_ctx, exc)
status = apis.kStatus_SSS_Fail
session_status = session_close(cli_ctx)
if status == apis.kStatus_SSS_Success and session_status == apis.kStatus_SSS_Success:
cli_ctx.log("Retrieved RSA Public Key from KeyID = 0x%08X" % keyid)
ret_value = 0
else:
cli_ctx.log("ERROR! Could not retrieve RSA Public Key from KeyID 0x%08X " % (keyid,))
ret_value = 1
sys.exit(ret_value)