imei verify C code

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SUCCESS 0
#define FAIL    -1


int DIAG_imeiValueVerify(char* imei)
{
if(15 != strlen(imei))
{
printf("The imei value you set illegal\n");
printf("set imei fail\n");
return FAIL;
}
else
{
char* ptr = imei;
int idx = 0;
int iTmp = 0;
int sum = 0;


for(idx = 0; idx < strlen(imei)-1; idx++)
{
if(('0' > *(ptr+idx)) || *(ptr+idx)>'9' )
{
printf("The imei value you set illegal\nset imei fail\n");
return FAIL;
}
if(idx%2)
{
iTmp = (*(ptr+idx)-'0')*2;
sum += (iTmp)%10 + (iTmp/10)%10;
}
else
{
sum += (*(ptr+idx)-'0');
}
}


if(0 == sum%10)
{
iTmp = 0;
}
else
{
iTmp = 10 - sum%10;
}
printf("The verify num is %d\n" , iTmp);
if((*(ptr+idx)-'0') != iTmp)
{
printf("The imei value you set illegal\n");
printf("set imei fail\n");
return FAIL;
}
}
return SUCCESS;
}
int main( int argc , char** argv)
{
if(argc < 2)
{
printf("please set the imei parameter\n");
return -1;
}
if(DIAG_imeiValueVerify(argv[1]))
{
printf("verify failed\n");
return -1;
}
printf("verify success\n");
return 0;
}
void fb_cmd_oem(const char *arg, void *data, uint64_t sz) { char subcmd[64]; char s[34]; int i, j; int key_code; bool butt_check = false; int ret = -1; #ifdef CONFIG_FASTBOOT_SECURITY_DOWNLOAD unsigned char permission[64] = {0}; unsigned char *cmd_p = NULL; unsigned char *data_buf = ImageInfo.base_address; #endif const char *delim = " "; debugf("arg#%s#, data: %p, sz: 0x%llx\n", arg, data, sz); #ifdef CONFIG_FASTBOOT_SECURITY_DOWNLOAD if (!strncmp(arg + 1, "repair", strlen("repair"))) { fb_cmd_oem_repair(arg + 1, data, sz); return; } cmd_p = (const char*)arg + 12; #endif memset(subcmd, 0, sizeof(subcmd)); memset(s, 0, sizeof(s)); memset(product_sn_token, 0, sizeof(product_sn_token)); strncpy(subcmd, strtok(arg, delim), sizeof(subcmd)-1); if (strlen(subcmd)) { debugf("subcmd +%s+\n", subcmd); } else { debugf("subcmd is null.\n"); fastboot_fail("subcmd is null."); return; } #ifdef CONFIG_FASTBOOT_AUTHORIZE if(!strcmp(subcmd, "auth_begin")) { ret = fb_cmd_oem_auth_begin(); if (ret) fastboot_fail("auth_begin fail"); return; } else if (!strcmp(subcmd, "auth_verify")) { dprintf(INFO,"%s\n", arg + 13); ret = fb_cmd_oem_auth_verify(arg+13, sz); if(ret == 0) fastboot_okay(""); else fastboot_fail("auth_verify fail"); return; } #endif #ifdef CONFIG_FASTBOOT_SECURITY_DOWNLOAD if(!strcmp(subcmd, "auth_start")) { ret = rsa_encrypt_data(encrypt_data); if(ret == 0) fastboot_okay(""); else fastboot_fail("rsa encrypt failed"); return; }else if (!strcmp(subcmd, "permission")){ strncpy(product_sn_token, get_product_sn(), PRODUCT_SN_TOKEN_MAX_SIZE-1); if(!strcmp(cmd_p, "flash")){ dprintf(INFO,"the cmd is flash\n"); ret = rsa_decrypt_data("flash", data_buf, product_sn_token); if(ret == 0) fastboot_fail("flash decrypt failed"); else fastboot_okay(""); }else if(!strcmp(cmd_p, "simlock")){ dprintf(INFO,"the cmd is simlock\n"); ret = rsa_decrypt_data("simlock", data_buf, product_sn_token); if(ret == 0) fastboot_fail("simlock decrypt failed"); else fastboot_okay(""); }else if(!strcmp(cmd_p, "repair")){ dprintf(INFO,"the cmd is repair\n"); ret = rsa_decrypt_data("repair", data_buf, product_sn_token); if(ret == 0) fastboot_fail("repair decrypt failed"); else fastboot_okay(""); } open_permission = open_permission | ret; return; }else if (!strcmp(subcmd, "getpermissions")){ dprintf(INFO,"the cmd is getpermissions\n"); if(open_permission == 0x0) { fastboot_response_info("permissions=None"); fastboot_okay(""); } if(open_permission == 0x1) { fastboot_response_info("permissions=flash"); fastboot_okay(""); } if(open_permission == 0x2) { fastboot_response_info("permissions=simlock"); fastboot_okay(""); } if(open_permission == 0x3) { fastboot_response_info("permissions=flash|simlock"); fastboot_okay(""); } if(open_permission == 0x4) { fastboot_response_info("permissions=repair"); fastboot_okay(""); } if(open_permission == 0x5) { fastboot_response_info("permissions=flash|repair"); fastboot_okay(""); } if(open_permission == 0x6) { fastboot_response_info("permissions=simlock|repair"); fastboot_okay(""); } if(open_permission == 0x7) { fastboot_response_info("permissions=flash|simlock|repair"); fastboot_okay(""); } return; } else #endif if (!strcmp(subcmd, "pull")) { char *param = strtok(NULL, delim); if (param && strlen(param)) { dprintf(INFO,"param %s\n", param); if (!strncmp(param, "0x", 2)) { if (fb_cmd_oem_upload_ddr(param)) { fastboot_fail("upload range fail."); } } else if (!strncmp(param, "log_buffer", sizeof("log_buffer"))) { if (fb_cmd_oem_upload_log_buffer()) { fastboot_fail("upload lk_log fail."); } } else if (!strncmp(param, "lk_memory", sizeof("lk_memory"))) { if (fb_cmd_oem_upload_lk_memory()) { fastboot_fail("upload lk_memory fail."); } } else { if (fb_cmd_oem_upload_flash(param)) { fastboot_fail("upload partition fail."); } } } else fastboot_fail("unknown format."); return; } else if (!strcmp(subcmd, "get_identifier_token")) { strncpy(product_sn_token, get_product_sn(), PRODUCT_SN_TOKEN_MAX_SIZE-1); debugf("Identifier token: %s.\n", product_sn_token); fastboot_response_data("SN" ,"Identifier token:\n"); for (j = 0; j < 4; j++){ for (i = 0; i < 16; i++){ if (product_sn_token[16*j+i] == '\0') { strcat(s,"\n"); break; } if (i < 15) { sprintf(s+i*2, "%02x", product_sn_token[16*j+i]); } else { sprintf(s+i*2, "%02x\n", product_sn_token[16*j+i]); } } fastboot_response_data("SN", s); if (product_sn_token[16*j+i] == '\0') { break; } } fastboot_okay(""); } else if (!strcmp(subcmd, "startup_core")) { char *core = strtok(NULL, delim); if (core && strlen(core)) fb_cmd_startup_corex(core); else fastboot_fail("unknown format."); return; } else if (!strncmp(subcmd, "fb_write_protect_test", strlen(subcmd))) { debugf("oem SECBOOT:execute fb_write_protect_test!\n"); char *partition_name = strtok(NULL, delim); char *len = strtok(NULL, delim); char *action = strtok(NULL, delim); char *write_pattern = NULL; if (partition_name && strlen(partition_name) && len && strlen(len) && action && strlen(action)) { if(!strcmp(action, "write")) { write_pattern = strtok(NULL, delim); if(write_pattern && strlen(write_pattern)) fb_write_protect_test(partition_name, len, action, write_pattern); else fastboot_fail("write unknown format."); return; } fb_write_protect_test(partition_name, len, action, write_pattern); } else fastboot_fail("unknown format."); return; } else if (!strncmp(subcmd, "ddr_memtest", strlen(subcmd))) { debugf("oem SECBOOT:execute ddr_memtest!\n"); char *test_addr = strtok(NULL, delim); char *test_len = strtok(NULL, delim); char *test_times = strtok(NULL, delim); if (test_addr && strlen(test_addr) && test_len && strlen(test_len)) { if (test_times && strlen(test_times)) fb_cmd_ddr_memtest(test_addr, test_len, test_times); else fb_cmd_ddr_memtest(test_addr, test_len, "1"); } else fastboot_fail("unknown format."); return; } else if (!strncmp(subcmd, "ddr_set", strlen(subcmd))) { debugf("oem SECBOOT:execute ddr_set!\n"); char *para1 = strtok(NULL, delim); char *para2 = strtok(NULL, delim); if (para1 && strlen(para1) && para2 && strlen(para2)) fb_cmd_ddr_set_config(para1, para2); else if(para1 && (!strncmp(para1, "erase_all", strlen(para1)))) fb_cmd_ddr_set_config(para1, NULL); else if (para1 && (!strncmp(para1, "get_configs", strlen(para1)))) fb_cmd_ddr_set_config(para1, NULL); else fastboot_fail("unknown format."); return; } else if (!strncmp(subcmd, "setwatchdog", strlen("setwatchdog"))) { debugf("oem SECBOOT:execute setwatchdog!\n"); char *wdt_status = strtok(NULL, delim); if (wdt_status && strlen(wdt_status)){ fb_cmd_set_wdt_status(wdt_status); } else fastboot_fail("unknown format."); return; } else if (!strncmp(subcmd, "dvfs_set", strlen("dvfs_set"))) { debugf("oem SECBOOT:execute dvfs_set!\n"); char *para1 = strtok(NULL, delim); char *para2 = strtok(NULL, delim); char *para3 = strtok(NULL, delim); if (para1 && strlen(para1) && para2 && strlen(para2)) fb_cmd_dvfs_set_config(para1, para2, para3); else fastboot_fail("unknown format."); } else if (!strncmp(subcmd, "highrefresh", strlen("highrefresh"))) { debugf("oem SECBOOT:execute highrefresh 120hz set!\n"); char *status = strtok(NULL, delim); if (status && strlen(status)) fb_cmd_highrefresh_120hz_config(status); else fastboot_fail("unknown format."); return; } else if(!strncmp(subcmd, "usb2spuart", strlen("usb2spuart"))) { /* usb switch sp uart function */ debugf("oem SECBOOT:execute usb2spuart!\n"); char *para1 = strtok(NULL, delim); if (para1 && strlen(para1) ){ /* success cmd */ fb_cmd_usb2spuart_set_config(para1); fastboot_okay("Info:fb_cmd_usb2spuart_set_config is ok! "); } else { fastboot_fail("unknown format."); } }else if (!strcmp(subcmd, "unlock")) { if (get_lock_status() == VBOOT_STATUS_UNLOCK) { debugf("bootloader has been unlocked\n"); fastboot_fail("Bootloader can not been unlocked repeatly."); return; } strncpy(product_sn_token, get_product_sn(), PRODUCT_SN_TOKEN_MAX_SIZE-1); debugf("Identifier token: %s.\n", product_sn_token); #ifdef CONFIG_FASTBOOT_SECURITY_DOWNLOAD if (-1 != fb_verify_unlockkey(product_sn_signature, product_sn_token)) { debugf("execute <fastboot oem unlock> command fail.\n"); fastboot_fail("Unlock bootloader fail."); return; } #else if (verify_product_sn_signature(product_sn_signature, sizeof(product_sn_signature))) { debugf("execute <fastboot oem unlock> command fail.\n"); fastboot_fail("Unlock bootloader fail."); return; } #endif lcd_printf("Warning: Unlock device may erase user data.\n"); lcd_printf("Press volume down button to confirm that.\n"); lcd_printf("Press verify_product_sn_signatureolume up button to cancel.\n"); while(!butt_check) { /* continue canheck till button pressed */ key_code = wait_for_keypress(); if (key_code == KEY_VOLUMEDOWN) { butt_check = true; } else if (key_code == KEY_VOLUMEUP) { lcd_printf("Info:user cancelled!\n"); fastboot_okay("Info:user cancel unlock bootloader! "); return; } } lcd_printf("Begin to erase user data...\n"); if (0 != common_raw_erase("userdata", 0, 0)) { debugf("erase userdata failed\n"); fastboot_fail("Erase userdata fail."); return; } if (set_lock_status(VBOOT_STATUS_UNLOCK, product_sn_signature)) { debugf("set_lock_status failed\n"); fastboot_fail("Unlock bootloader fail."); return; } debugf("execute <fastboot oem unlock> successfully.\n"); lcd_printf("Incfo:Unlock bootloader success!\n"); fastboot_okay("Info:Unlock bootloader success! "); } else if(!strcmp(subcmd, "lock")){ #ifdef CONFIG_FASTBOOT_SECURITY_DOWNLOAD if (get_lock_status() == VBOOT_STATUS_LOCK) { fastboot_fail("Bootloader can not been locked repeatly."); return; } if (set_lock_status(VBOOT_STATUS_LOCK, NULL)) { debugf("execute <fastboot_response_snt flashing lock_bootloader> command fail.\n"); fastboot_fail("Lock butt_checkootloader fail."); return; } debugf("execute <fastboot flashing lock_bootloader> command successfully.\n"); lcd_printf("Info:Lock bootloader success!\n"); fastboot_okay("Lock bootloader successfully!"); #endif } else if(!strcmp(subcmd, "getsecurityversion")) { debugf("execute getsecurityversion!\n"); const char securityversion[] = "1";//Customer-defined, defaults to 1 fastboot_response_info(securityversion); fastboot_okay(""); } else if(!strcmp(subcmd, "getversions")) { debugf("execute getversions!\n"); char temp[128]; char model[64] = "model="; char sub_model[64] = "sub_model="; char sw_vr[64] = "software version="; char sw_model[64] = "SW model="; char build_number[64] = "build number="; char hw_vr[64] = "hardware version="; char rf_id[64] = "RF band id="; char temp_config[7][32]; memset(temp_config, 0, sizeof(temp_config)); if (0 != common_raw_read("miscdata", (uint64_t)sizeof(temp), (uint64_t)ALL_VERSION_OFFSET, temp)) { errorf("<miscdata> read error\n"); fastboot_fail("read miscdata fail!"); return; } char *token = strtok(temp, ";"); i = 0; while (token != NULL) { debugf("%s\n", token); strlcpy(temp_config[i], token, sizeof(temp_config[0])); token = strtok(NULL, ";"); i++; } debugf("get parameter: %d\n", i); /* 0 (bootloader) model=$(ro.product.model) */ sprintf(model + strlen(model), "%s", temp_config[MODLE]); fastboot_response_info(model); /* 1 (bootloader) sub_model=none */ sprintf(sub_model + strlen(sub_model), "%s", temp_config[SUB_MD]); fastboot_response_info(sub_model); /* 2 (bootloader) software version=$(ro.build.display.id) */ sprintf(sw_vr + strlen(sw_vr), "%s", temp_config[SW_VR]); fastboot_response_info(sw_vr); /* 3 (bootloader) SW model=$(ro.product.model.num) */ sprintf(sw_model + strlen(sw_model), "%s", temp_config[SW_MD]); fastboot_response_info(sw_model); /* 4 (bootloader) build number=A01 or B01 */ sprintf(build_number + strlen(build_number), "%s", temp_config[BD_NU]); fastboot_response_info(build_number); /* 5 (bootloader) hardware version=$(Defined by ODM) */ sprintf(hw_vr + strlen(hw_vr), "%s", temp_config[HW_VR]); fastboot_response_info(hw_vr); /* 6 (bootloader) RF band id=$(Defined by ODM) */ sprintf(rf_id + strlen(rf_id), "%s", temp_config[RF_ID]); fastboot_response_info(rf_id); fastboot_okay(""); #ifdef CONFIG_FASTBOOT_FLASH } else if (!strncmp(subcmd, "backupnv", strlen("backupnv"))) { debugf("oem SECBOOT:execute backupnv!\n"); s_backupnv_flag = 1; fastboot_okay(""); #endif #if defined FASTBOOT_GET_IMEI_SUPPORT && defined CONFIG_FASTBOOT_FLASH } else if (!strncmp(subcmd, "imei", strlen("imei"))) { debugf("oem SECBOOT:execute imei!\n"); fb_cmd_oem_get_imei(); fastboot_okay(""); #endif } else { fastboot_fail("unknown cmd."); } } 详细说明,补充架构
最新发布
08-05
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值