Добавлено корректное выделение хеша открытого ключа из подписи

Теперь программа должна работать с прошивками, подписанными любым ключом.
master
forth32 7 years ago
parent 3d5295bfcf
commit d3a9622cde

@ -1 +1 @@
243
251

@ -72,6 +72,9 @@ uint32_t signlen; // длина подписи
int32_t serach_sign();
// Хеш открытого ключа для ^signver
char signver_hash[100]="778A8D175E602B7B779D9E05C330B5279B0661BF2EED99A20445B366D63DD697";
//****************************************************
//* Получение описания типа прошивки по коду
//****************************************************
@ -211,7 +214,7 @@ if (gflag == 0) {
}
printf("\n Режим цифровой подписи: %s (%i байт)",fw_description(signtype),signlen);
sprintf(signver,"^SIGNVER=%i,0,778A8D175E602B7B779D9E05C330B5279B0661BF2EED99A20445B366D63DD697,%i",signtype,signlen);
sprintf(signver,"^SIGNVER=%i,0,%s,%i",signtype,signver_hash,signlen);
res=atcmd(signver,replybuf);
if ( (res<sizeof(SVrsp)) || (memcmp(replybuf,SVrsp,sizeof(SVrsp)) != 0) ) {
printf("\n ! Ошибка проверки цифровой сигнатуры - %02x\n",replybuf[2]);
@ -224,7 +227,7 @@ if ( (res<sizeof(SVrsp)) || (memcmp(replybuf,SVrsp,sizeof(SVrsp)) != 0) ) {
//***************************************************
int32_t serach_sign() {
int i;
int i,j;
uint32_t pt;
uint32_t signsize;
@ -233,6 +236,11 @@ for (i=0;i<2;i++) {
if (pt == 0xffaaaffa) {
// подпись найдена
signsize=*((uint32_t*)&ptable[i].pimage[ptable[i].hd.psize-12]);
// выделяем хеш открытого ключа
for(j=0;j<32;j++) {
sprintf(signver_hash+2*j,"%02x",ptable[i].pimage[ptable[i].hd.psize-signsize+6+j]);
}
printf("\n Хеш открытого ключа: %s",signver_hash);
return signsize;
}
}

Loading…
Cancel
Save