# Copyright 2018,2020 NXP
#
# SPDX-License-Identifier: Apache-2.0
#

"""
Convert files that we get from OEF to header files

"""

import glob
import os
import sys
import time

LOCAL_TIME = time.localtime()
DATETIME_STR = time.strftime("%Y:%m:%d", LOCAL_TIME) + "_" + time.strftime("%H:%M", LOCAL_TIME)

AUTO_GEN_INFO = """This file is auto generated (%s) using:
             <simw-top>/scripts/parse_oef_keys.py""" % (DATETIME_STR,)

USAGE_INFO = """Usage info:
             python parse_oef_keys.py <directory_path> <header> <footer> <macro_prefix> <output_filename>

             directory_path  => Keys folder path.
             header          => header for the c file. Optional argument.
             footer          => footer for the c file. Optional argument.
             macro_prefix    => Prefix of the macro. Optional argument. default: SSS_AUTH_SE050_OEF.
             output_filename => Output file name for c and python file. Optional argument.
                                default: ex_sss_tp_scp03_keys.h, tp_scp03_keys.py"""

DEFAULT_MACRO_PREFIX = "SSS_AUTH_SE050_OEF"

LICENSE_TEXT = """ Copyright 2019,2020 NXP

 This software is owned or controlled by NXP and may only be used
 strictly in accordance with the applicable license terms.  By expressly
 accepting such terms or by downloading, installing, activating and/or
 otherwise using the software, you are agreeing that you have read, and
 that you agree to comply with and are bound by, such license terms.  If
 you do not agree to be bound by the applicable license terms, then you
 may not retain, install, activate or otherwise use the software."""

CLANG_OFF = """/* ************************************************************************** */
/* Includes                                                                   */
/* ************************************************************************** */

/* ************************************************************************** */
/* Defines                                                                    */
/* ************************************************************************** */

/* clang-format off */"""

CLANG_ON = """/* clang-format on */

/* ************************************************************************** */
/* Structures and Typedefs                                                    */
/* ************************************************************************** */

/* ************************************************************************** */
/* Global Variables                                                           */
/* ************************************************************************** */

/* ************************************************************************** */
/* Functions                                                                  */
/* ************************************************************************** */"""

DEFAULT_OUTPUT_FILE_NAME = "tp_scp03_keys"


def read_data(filename):
    """
    Read key value from the file
    :param filename: file name to read key
    :return: Key value
    """
    f = open(filename, 'r')
    file_data = f.read()
    key_data = ""
    for i in range(0, len(file_data), 2):
        if i == 0:
            key_data += "0x"
        else:
            key_data += ", 0x"
        key_data += file_data[i:i + 2]
    f.close()
    return key_data


def write_data_to_c(key_data_dict, output_file):
    """
    Write ``output_file`` with keys.
    :param key_data_dict: Key values
    :param output_file: Destination c file to write key value
    :return: None
    """

    if len(sys.argv) >= 5:

        if os.path.isfile(sys.argv[2]):
            header_file = open(sys.argv[2], 'r')
            header_data = header_file.read()
            header_file.close()
        else:
            header_data = sys.argv[2]

        if os.path.isfile(sys.argv[3]):
            footer_file = open(sys.argv[3], 'r')
            footer_data = footer_file.read()
            footer_file.close()
        else:
            footer_data = sys.argv[3]
        macro = sys.argv[4]
    else:
        macro = DEFAULT_MACRO_PREFIX
        timestamp_str = time.strftime("_%Y%m%d_", LOCAL_TIME) + \
                        time.strftime("%H%M_", LOCAL_TIME)
        header_data = "#ifndef %s\n#define %s\n" % (macro + timestamp_str,
                                                    macro + timestamp_str,)
        footer_data = "#endif /* %s  */" % (macro + timestamp_str,)

    usage_info = AUTO_GEN_INFO.replace("\n", "\n * ")
    usage_info += "\n *\n * "
    usage_info += USAGE_INFO.replace("\n", "\n * ")
    license_info = "/*" + LICENSE_TEXT.replace("\n", "\n *") + "\n */"
    data_to_write = license_info + "\n\n\n/* " + usage_info + "\n */\n\n\n" \
                    + header_data + "\n" + CLANG_OFF + "\n\n"

    for key_data in key_data_dict:
        data_to_write += "#define " + macro + "_" + str(
            key_data) + " " * 5 + "\\\n" + " " * 4 + "{" + " " * 59 + "\\\n" + " " * 8
        key_data_len = len(key_data_dict[key_data])
        data_to_write += key_data_dict[key_data][
            0:int(key_data_len / 2)] + " " * 9 + "\\\n" + " " * 8
        data_to_write += key_data_dict[key_data][(int(key_data_len / 2) + 1):] + " " * 8
        data_to_write += "  \\\n    }\n\n"

    data_to_write += CLANG_ON + "\n\n" + footer_data

    out_file = open(output_file, 'w')
    out_file.write(data_to_write)
    out_file.close()


def write_data_to_python(key_data_dict, output_file_name):
    """
    Append keys to the output file
    :param key_data_dict: Key values
    :param output_file_name: Destination python file to write key value
    :return: None
    """

    if len(sys.argv) >= 3:
        macro = sys.argv[2]
    else:
        macro = DEFAULT_MACRO_PREFIX

    license_info = "#" + LICENSE_TEXT.replace("\n", "\n#") + "\n#\n\n\n"
    data_to_write = license_info
    python_usage_info = "# " + AUTO_GEN_INFO.replace("\n", "\n# ")
    python_usage_info += "\n#\n# "
    python_usage_info += USAGE_INFO.replace("\n", "\n# ")
    data_to_write += python_usage_info + "\n\n\n"

    for key_data in key_data_dict:
        data_to_write += macro + "_" + str(key_data) + " = (\n    "
        key_data_len = len(key_data_dict[key_data])
        data_to_write += key_data_dict[key_data][0:int(key_data_len / 2)] + "\n    "
        data_to_write += key_data_dict[key_data][(int(key_data_len / 2) + 1):]
        data_to_write += ",\n    )\n\n"

    out_file = open(output_file_name, 'w')
    out_file.write(data_to_write)
    out_file.close()


def main():  # pylint: disable=too-many-locals
    """
    Parse keys from input directory and write in C and python files.
    :return: None
    """
    keys_dir = sys.argv[1]
    enc_keys_file_list = list()
    mac_keys_file_list = list()
    dec_keys_file_list = list()
    key_file_list = glob.glob(keys_dir + os.sep + "*.key")
    for key_file in key_file_list:
        if "_AuthKey_" in key_file:
            enc_keys_file_list.append(key_file)
        elif "_MacKey_" in key_file:
            mac_keys_file_list.append(key_file)
        elif "_EncKey_" in key_file:
            dec_keys_file_list.append(key_file)

    key_data = {}
    for enc_file in enc_keys_file_list:
        match_key = enc_file.split("_AuthKey_", 2)[1].split("_NXP", 2)[0]
        key_data[match_key + "_KEY_ENC"] = read_data(enc_file)
        for mac_file in [x for x in mac_keys_file_list if match_key in x]:
            key_data[match_key + "_KEY_MAC"] = read_data(mac_file)
        for dec_file in [x for x in dec_keys_file_list if match_key in x]:
            key_data[match_key + "_KEY_DEK"] = read_data(dec_file)

    c_output_dir = os.path.join(os.path.abspath(os.path.dirname(__file__)), "..",
                                "sss", "ex", "inc")
    python_output_dir = os.path.join(os.path.abspath(os.path.dirname(__file__)),
                                     "..", "pycli", "src", "sss")

    if len(sys.argv) >= 6:
        output_file_name = sys.argv[5]
        if output_file_name[-2:] == ".h":
            c_output_file = output_file_name
            python_output_file = output_file_name[:-2] + ".py"
        elif output_file_name[-3:] == ".py":
            c_output_file = output_file_name[:-3] + ".h"
            python_output_file = output_file_name
        else:
            c_output_file = output_file_name + ".h"
            python_output_file = output_file_name + ".py"
    else:
        c_output_file = "ex_sss_" + DEFAULT_OUTPUT_FILE_NAME + ".h"
        python_output_file = DEFAULT_OUTPUT_FILE_NAME + ".py"

    write_data_to_c(key_data, c_output_dir + os.sep + c_output_file)
    write_data_to_python(key_data, python_output_dir + os.sep + python_output_file)


def usage():
    """
    Display usage information
    :return: None
    """
    print(USAGE_INFO)


if __name__ == "__main__":
    if len(sys.argv) >= 2:
        main()
    else:
        usage()
