diff options
Diffstat (limited to 'utils/hwstub/tools/hwstub_shell.cpp')
-rw-r--r-- | utils/hwstub/tools/hwstub_shell.cpp | 86 |
1 files changed, 32 insertions, 54 deletions
diff --git a/utils/hwstub/tools/hwstub_shell.cpp b/utils/hwstub/tools/hwstub_shell.cpp index 58147319e0..69e580f88e 100644 --- a/utils/hwstub/tools/hwstub_shell.cpp +++ b/utils/hwstub/tools/hwstub_shell.cpp | |||
@@ -41,6 +41,7 @@ struct hwstub_device_t g_hwdev; | |||
41 | struct usb_resp_info_version_t g_hwdev_ver; | 41 | struct usb_resp_info_version_t g_hwdev_ver; |
42 | struct usb_resp_info_layout_t g_hwdev_layout; | 42 | struct usb_resp_info_layout_t g_hwdev_layout; |
43 | struct usb_resp_info_features_t g_hwdev_features; | 43 | struct usb_resp_info_features_t g_hwdev_features; |
44 | struct usb_resp_info_target_t g_hwdev_target; | ||
44 | struct usb_resp_info_stmp_t g_hwdev_stmp; | 45 | struct usb_resp_info_stmp_t g_hwdev_stmp; |
45 | lua_State *g_lua; | 46 | lua_State *g_lua; |
46 | 47 | ||
@@ -253,12 +254,22 @@ bool my_lua_import_hwstub() | |||
253 | lua_setfield(g_lua, -2, "ocram"); | 254 | lua_setfield(g_lua, -2, "ocram"); |
254 | lua_setfield(g_lua, -2, "layout"); | 255 | lua_setfield(g_lua, -2, "layout"); |
255 | 256 | ||
256 | lua_newtable(g_lua); // stmp | 257 | lua_newtable(g_lua); // target |
257 | lua_pushinteger(g_lua, g_hwdev_stmp.chipid); | 258 | lua_pushstring(g_lua, g_hwdev_target.name); |
258 | lua_setfield(g_lua, -2, "chipid"); | 259 | lua_setfield(g_lua, -2, "name"); |
259 | lua_pushinteger(g_lua, g_hwdev_stmp.rev); | 260 | lua_pushinteger(g_lua, g_hwdev_target.id); |
260 | lua_setfield(g_lua, -2, "rev"); | 261 | lua_setfield(g_lua, -2, "id"); |
261 | lua_setfield(g_lua, -2, "stmp"); | 262 | lua_setfield(g_lua, -2, "target"); |
263 | |||
264 | if(g_hwdev_target.id == HWSTUB_TARGET_STMP) | ||
265 | { | ||
266 | lua_newtable(g_lua); // stmp | ||
267 | lua_pushinteger(g_lua, g_hwdev_stmp.chipid); | ||
268 | lua_setfield(g_lua, -2, "chipid"); | ||
269 | lua_pushinteger(g_lua, g_hwdev_stmp.rev); | ||
270 | lua_setfield(g_lua, -2, "rev"); | ||
271 | lua_setfield(g_lua, -2, "stmp"); | ||
272 | } | ||
262 | 273 | ||
263 | lua_newtable(g_lua); // features | 274 | lua_newtable(g_lua); // features |
264 | lua_pushboolean(g_lua, !!(g_hwdev_features.feature_mask & HWSTUB_FEATURE_LOG)); | 275 | lua_pushboolean(g_lua, !!(g_hwdev_features.feature_mask & HWSTUB_FEATURE_LOG)); |
@@ -269,8 +280,6 @@ bool my_lua_import_hwstub() | |||
269 | lua_setfield(g_lua, -2, "call"); | 280 | lua_setfield(g_lua, -2, "call"); |
270 | lua_pushboolean(g_lua, !!(g_hwdev_features.feature_mask & HWSTUB_FEATURE_JUMP)); | 281 | lua_pushboolean(g_lua, !!(g_hwdev_features.feature_mask & HWSTUB_FEATURE_JUMP)); |
271 | lua_setfield(g_lua, -2, "jump"); | 282 | lua_setfield(g_lua, -2, "jump"); |
272 | lua_pushboolean(g_lua, !!(g_hwdev_features.feature_mask & HWSTUB_FEATURE_AES_OTP)); | ||
273 | lua_setfield(g_lua, -2, "aes_otp"); | ||
274 | lua_setfield(g_lua, -2, "features"); | 283 | lua_setfield(g_lua, -2, "features"); |
275 | 284 | ||
276 | lua_pushlightuserdata(g_lua, (void *)&hw_read8); | 285 | lua_pushlightuserdata(g_lua, (void *)&hw_read8); |
@@ -751,14 +760,25 @@ int main(int argc, char **argv) | |||
751 | goto Lerr; | 760 | goto Lerr; |
752 | } | 761 | } |
753 | 762 | ||
754 | // get STMP specific information | 763 | // get target |
755 | ret = hwstub_get_info(&g_hwdev, HWSTUB_INFO_STMP, &g_hwdev_stmp, sizeof(g_hwdev_stmp)); | 764 | ret = hwstub_get_info(&g_hwdev, HWSTUB_INFO_TARGET, &g_hwdev_target, sizeof(g_hwdev_target)); |
756 | if(ret != sizeof(g_hwdev_stmp)) | 765 | if(ret != sizeof(g_hwdev_target)) |
757 | { | 766 | { |
758 | printf("Cannot get stmp: %d\n", ret); | 767 | printf("Cannot get target: %d\n", ret); |
759 | goto Lerr; | 768 | goto Lerr; |
760 | } | 769 | } |
761 | 770 | ||
771 | // get STMP specific information | ||
772 | if(g_hwdev_target.id == HWSTUB_TARGET_STMP) | ||
773 | { | ||
774 | ret = hwstub_get_info(&g_hwdev, HWSTUB_INFO_STMP, &g_hwdev_stmp, sizeof(g_hwdev_stmp)); | ||
775 | if(ret != sizeof(g_hwdev_stmp)) | ||
776 | { | ||
777 | printf("Cannot get stmp: %d\n", ret); | ||
778 | goto Lerr; | ||
779 | } | ||
780 | } | ||
781 | |||
762 | // dump ROM | 782 | // dump ROM |
763 | if(!g_quiet) | 783 | if(!g_quiet) |
764 | { | 784 | { |
@@ -776,48 +796,6 @@ int main(int argc, char **argv) | |||
776 | fclose(f); | 796 | fclose(f); |
777 | } | 797 | } |
778 | 798 | ||
779 | // test DCP | ||
780 | #if 0 | ||
781 | if(!g_quiet) | ||
782 | { | ||
783 | struct | ||
784 | { | ||
785 | uint8_t iv[16]; | ||
786 | uint8_t data[16]; | ||
787 | } __attribute__((packed)) dcp_test; | ||
788 | |||
789 | for(int i = 0; i < 16; i++) | ||
790 | dcp_test.iv[i] = rand(); | ||
791 | for(int i = 0; i < 16; i++) | ||
792 | dcp_test.data[i] = rand(); | ||
793 | printf("DCP\n"); | ||
794 | printf(" IN\n"); | ||
795 | printf(" IV:"); | ||
796 | for(int i = 0; i < 16; i++) | ||
797 | printf(" %02x", dcp_test.iv[i]); | ||
798 | printf("\n"); | ||
799 | printf(" IV:"); | ||
800 | for(int i = 0; i < 16; i++) | ||
801 | printf(" %02x", dcp_test.data[i]); | ||
802 | printf("\n"); | ||
803 | |||
804 | if(!hwstub_aes_otp(&g_hwdev, &dcp_test, sizeof(dcp_test), HWSTUB_AES_OTP_ENCRYPT)) | ||
805 | { | ||
806 | printf(" OUT\n"); | ||
807 | printf(" IV:"); | ||
808 | for(int i = 0; i < 16; i++) | ||
809 | printf(" %02x", dcp_test.iv[i]); | ||
810 | printf("\n"); | ||
811 | printf(" IV:"); | ||
812 | for(int i = 0; i < 16; i++) | ||
813 | printf(" %02x", dcp_test.data[i]); | ||
814 | printf("\n"); | ||
815 | } | ||
816 | else | ||
817 | printf("DCP error!\n"); | ||
818 | } | ||
819 | #endif | ||
820 | |||
821 | /** Init lua */ | 799 | /** Init lua */ |
822 | 800 | ||
823 | // create lua state | 801 | // create lua state |