summaryrefslogtreecommitdiff
path: root/esp8266/modesp.c
diff options
context:
space:
mode:
authorPaul Sokolovsky <pfalcon@users.sourceforge.net>2016-08-04 00:29:19 +0300
committerPaul Sokolovsky <pfalcon@users.sourceforge.net>2016-08-04 00:29:19 +0300
commite33d2383d1ed4805583e6562b2f47e018457e854 (patch)
tree2a9807551752c0557b34746519413a009c90089c /esp8266/modesp.c
parentbf47b71b787657eca1d489f92517aa60c9a38008 (diff)
esp8266/modesp: Add check_fw() function to check integrity of the firmware.
Requires firmware generated by the latest makeimg.py (which stores size and md5 of the firmware together with the firmware itself).
Diffstat (limited to 'esp8266/modesp.c')
-rw-r--r--esp8266/modesp.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/esp8266/modesp.c b/esp8266/modesp.c
index 1b787011c..39cc514af 100644
--- a/esp8266/modesp.c
+++ b/esp8266/modesp.c
@@ -633,6 +633,24 @@ STATIC mp_obj_t esp_flash_size(void) {
}
STATIC MP_DEFINE_CONST_FUN_OBJ_0(esp_flash_size_obj, esp_flash_size);
+STATIC mp_obj_t esp_check_fw(void) {
+ MD5_CTX ctx;
+ uint32_t *sz_p = (uint32_t*)0x40208ffc;
+ printf("size: %d\n", *sz_p);
+ MD5Init(&ctx);
+ MD5Update(&ctx, (char*)0x40200004, *sz_p - 4);
+ unsigned char digest[16];
+ MD5Final(digest, &ctx);
+ printf("md5: ");
+ for (int i = 0; i < 16; i++) {
+ printf("%02x", digest[i]);
+ }
+ printf("\n");
+ return mp_obj_new_bool(memcmp(digest, (void*)(0x40200000 + *sz_p), sizeof(digest)) == 0);
+}
+STATIC MP_DEFINE_CONST_FUN_OBJ_0(esp_check_fw_obj, esp_check_fw);
+
+
STATIC mp_obj_t esp_neopixel_write_(mp_obj_t pin, mp_obj_t buf, mp_obj_t is800k) {
mp_buffer_info_t bufinfo;
mp_get_buffer_raise(buf, &bufinfo, MP_BUFFER_READ);
@@ -703,6 +721,7 @@ STATIC const mp_map_elem_t esp_module_globals_table[] = {
{ MP_OBJ_NEW_QSTR(MP_QSTR_dht_readinto), (mp_obj_t)&dht_readinto_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_freemem), (mp_obj_t)&esp_freemem_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_meminfo), (mp_obj_t)&esp_meminfo_obj },
+ { MP_OBJ_NEW_QSTR(MP_QSTR_check_fw), (mp_obj_t)&esp_check_fw_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_info), (mp_obj_t)&pyb_info_obj }, // TODO delete/rename/move elsewhere
{ MP_OBJ_NEW_QSTR(MP_QSTR_malloc), (mp_obj_t)&esp_malloc_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_free), (mp_obj_t)&esp_free_obj },