MBED_TLS возвращает ошибку 0xFFFFBC80 - PullRequest
0 голосов
/ 08 октября 2018

Используя библиотеку mbded_tls, я получаю код ошибки, возвращенный с устройства 0xFFFFBC80.Я предполагаю, что начальные F не имеют значения, но я не могу найти какой-либо код ошибки BC80 (или его обратное, 4380) в документации.Я могу видеть, что есть упоминание о суммировании кодов высокого и низкого уровня в документах, но это не легко точно определить.Ошибка почти наверняка связана с проверкой файла подписи, подписанного закрытым ключом и проверяемого устройством с помощью открытого ключа, но без более подробной информации я не могу определить, где моя ошибка.

С уважением,

1 Ответ

0 голосов
/ 08 октября 2018
0xFFFFBC80

С mbed_tls / error.h :

 * Currently we try to keep all error codes within the negative space of 16
 * bits signed integers to support all platforms (-0x0001 - -0x7FFF). In
 * addition we'd like to give two layers of information on the error if
 * possible.
 *
 * For that purpose the error codes are segmented in the following manner:
 *
 * 16 bit error code bit-segmentation
 *
 * 1 bit  - Unused (sign bit)
 * 3 bits - High level module ID
 * 5 bits - Module-dependent error code
 * 7 bits - Low level module errors

0xFFFFBC80 равно -0x4380, а это 0100 0011 1000 0000 в двоичном виде

Тодает нам:

 - 1 bit unused - 0
 - 3 bits high level module id - 0b100
 - 5 bits module dependent error code - 0b00111
 - 7 bits low level module errors  - 0b0000000

Теперь мы можем остановиться на поиске и интерпретации отдельных битов и чтении источников mbed_tls ... или просто умничать и делать grep -r 4380 на источниках mbed_tls, что приведет к строке в rsa.h :

 #define MBEDTLS_ERR_RSA_VERIFY_FAILED                     -0x4380  /**< The PKCS#1 verification failed. */

Итак, проверка PKCS # 1 не удалась в вашем коде.

Но, на самом деле, зачем делать это вручную?Вы можете просто использовать функцию mbedtls_strerror :

char buf[1024];
mbedtls_strerror(0xFFFFBC80, buf, sizeof(buf));
printf("result: %s\n", buf);
...