blob: 080421d1d718745c67c4c84dc950fbf5d127cd7c [file] [log] [blame]
#
# Copyright 2018-2020 NXP
# SPDX-License-Identifier: Apache-2.0
#
#
"""License text"""
import sys
import func_timeout
from sss.read_id_list import ReadIDList
from sss.se05x import Se05x
import sss.sss_api as apis
from .cli import se05x, pass_context, session_open, session_close, \
log_traceback, TIME_OUT
@se05x.command('reset', short_help='Reset SE05X')
@pass_context
def reset(cli_ctx):
"""
Resets the SE05X Secure Module to the initial state.
This command uses ``Se05x_API_DeleteAll_Iterative`` API of the SE05X
MW to iterately delete objects provisioned inside the SE. Because of this,
some objects are purposefully skipped from deletion.
It does not use the low level SE05X API ``Se05x_API_DeleteAll``
For more information, see documentation/implementation of the
``Se05x_API_DeleteAll_Iterative`` API.
"""
try:
session_open(cli_ctx)
se05x_obj = Se05x(cli_ctx.session)
func_timeout.func_timeout(TIME_OUT, se05x_obj.debug_reset, None)
status = apis.kStatus_SSS_Success
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:
ret_value = 0
else:
ret_value = 1
sys.exit(ret_value)
@se05x.command('uid', short_help='Get SE05X Unique ID (18 bytes)')
@pass_context
def uid(cli_ctx):
""" Get 18 bytes Unique ID from the SE05X Secure Module."""
try:
session_open(cli_ctx)
se05x_obj = Se05x(cli_ctx.session)
unique_id = func_timeout.func_timeout(TIME_OUT, se05x_obj.get_unique_id, None)
cli_ctx.log("Unique ID: %s" % (unique_id,))
status = apis.kStatus_SSS_Success
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:
ret_value = 0
else:
ret_value = 1
sys.exit(ret_value)
@se05x.command('certuid', short_help='Get SE05X Cert Unique ID (10 bytes)')
@pass_context
def certuid(cli_ctx):
""" Get 10 bytes Cert Unique ID from the SE05X Secure Module.
The cert uid is a subset of the Secure Module Unique Identifier"""
try:
session_open(cli_ctx)
se05x_obj = Se05x(cli_ctx.session)
cert_uid = func_timeout.func_timeout(TIME_OUT, se05x_obj.get_cert_unique_id, None)
cli_ctx.log("Cert UID: %s" % (cert_uid,))
status = apis.kStatus_SSS_Success
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:
ret_value = 0
else:
ret_value = 1
sys.exit(ret_value)
@se05x.command('readidlist', short_help='Read contents of SE050')
@pass_context
def readidlist(cli_ctx):
""" Read contents of SE050"""
try:
session_open(cli_ctx)
read_id_list_obj = ReadIDList(cli_ctx.session)
func_timeout.func_timeout(TIME_OUT, read_id_list_obj.do_read_id_list, None)
status = apis.kStatus_SSS_Success
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:
ret_value = 0
else:
ret_value = 1
sys.exit(ret_value)