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;
}