static void enable_secure_command()

in AZ3166/src/cores/arduino/cli/console_cli.cpp [271:332]


static void enable_secure_command(int argc, char **argv)
{
    int ret = -2;
    if (argc > 1 && argv[1] != NULL && strlen(argv[1]) == 1)
    {
        if (argc == 2 && (argv[1][0] == '1' || argv[1][0] == '3'))
        {
            EEPROMInterface eeprom;
            ret = eeprom.enableHostSecureChannel(argv[1][0] - '0');
        }
        else if (argc == 3 && argv[2] != NULL && strlen(argv[2]) == 64)
        {
            int i = 0, val;
            uint8_t key[32];
            char ch;
            memset(key, 0, sizeof(key));
            for (i = 0; i < 64; ++i)
            {
                ch = argv[2][i];
                if (ch <= 'f' && ch >= 'a')
                {
                    val = ch - 'a' + 10;
                }
                else if (ch <= '9' && ch >= '0')
                {
                    val = ch - '0';
                }
                else
                {
                    break;
                }
                key[i / 2] += (i % 2 == 0) ? (val << 4) : val;
            }
            if (i == 64)
            {
                EEPROMInterface eeprom;
                ret = eeprom.enableHostSecureChannel(2, key);
            }
        }
    }

    if (ret == 0)
    {
        Serial.printf("INFO: Enable secure channel successfully.\r\n");
    }
    else if (ret == -1)
    {
        Serial.printf("INFO: Enable secure channel failed.\r\n");
    }
    else if (ret == 1)
    {
        Serial.printf("INFO: Secure channel has already been enabled.\r\n");
    }
    else // enableHostSecureChannel() never run. Input argv does not accepted.
    {
        Serial.printf("Usage: enable_secure <secure level> <provided key>. 64-characters key is only needed for level 2. More detail:\r\n\
        1.\"enable_secure 1\" to enable secure channel with pre set key.\r\n\
        2.\"enable_secure 2 ([a-f]|[0-9]){64}\" to enable secure channel with provided key. (not implemented)\r\n\
        3.\"enable_secure 3\" to enable secure channel with random key. (not implemented)\r\n");
    }
    return;
}