fix: only add keys once when checking for reuse

This commit is contained in:
Daniel Seiller 2019-10-31 01:54:04 +01:00
parent ec3ca1cad1
commit 03e9c670d5
No known key found for this signature in database
GPG Key ID: 33F8E0721588E15E

View File

@ -362,21 +362,39 @@ int main(int argc, char *const argv[])
bool did_hardnested=false; bool did_hardnested=false;
check_keys: check_keys:
if (did_hardnested) { if (did_hardnested) {
use_default_key=false;
printf("\nChecking for key reuse...\n"); printf("\nChecking for key reuse...\n");
int i=0;
defKeys_len=0; defKeys_len=0;
free(defKeys); free(defKeys);
defKeys=malloc(0); defKeys=malloc(0);
for (int i=0;i<t.num_sectors;++i) { for (int i=0;i<t.num_sectors;++i) {
if (t.sectors[i].foundKeyA) { if (t.sectors[i].foundKeyA) {
defKeys=realloc(defKeys,defKeys_len+6); bool seen=false;
memcpy(defKeys+defKeys_len,t.sectors[i].KeyA,6); for (int k=0;k<defKeys_len;k+=6) {
defKeys_len+=6; if (memcmp(defKeys+k,t.sectors[i].KeyA,6)==0) {
seen=true;
break;
}
}
if (!seen) {
defKeys=realloc(defKeys,defKeys_len+6);
memcpy(defKeys+defKeys_len,t.sectors[i].KeyA,6);
defKeys_len+=6;
}
} }
if (t.sectors[i].foundKeyB) { if (t.sectors[i].foundKeyB) {
defKeys=realloc(defKeys,defKeys_len+6); bool seen=false;
memcpy(defKeys+defKeys_len,t.sectors[i].KeyB,6); for (int k=0;k<defKeys_len;k+=6) {
defKeys_len+=6; if (memcmp(defKeys+k,t.sectors[i].KeyB,6)==0) {
seen=true;
break;
}
}
if (!seen) {
defKeys=realloc(defKeys,defKeys_len+6);
memcpy(defKeys+defKeys_len,t.sectors[i].KeyB,6);
defKeys_len+=6;
}
} }
} }
} }