summaryrefslogtreecommitdiff
path: root/usb-i2c-sl018/update-keys.c
diff options
context:
space:
mode:
Diffstat (limited to 'usb-i2c-sl018/update-keys.c')
-rw-r--r--usb-i2c-sl018/update-keys.c25
1 files changed, 18 insertions, 7 deletions
diff --git a/usb-i2c-sl018/update-keys.c b/usb-i2c-sl018/update-keys.c
index b730c6e..d4dfd06 100644
--- a/usb-i2c-sl018/update-keys.c
+++ b/usb-i2c-sl018/update-keys.c
@@ -37,15 +37,17 @@ uint8_t generate_csum(keyslot_t data)
return sum2<<4 | sum1;
}
-void send_key(keyslot_t key, FILE* dev)
+int send_key(keyslot_t key, FILE* dev)
{
fwrite(key, sizeof(keyslot_t), 1, dev);
fflush(dev);
char tmp;
while(fread(&tmp, 1, 1, dev)) {
fwrite(&tmp, 1, 1, stdout);
- if(tmp == '.') break;
+ if(tmp == 0) return 1;
+ if(tmp == '.') return 0;
}
+ return 0;
}
int main(int argc, char* argv[])
@@ -107,7 +109,10 @@ int main(int argc, char* argv[])
key[j] = 0;
}
key[sizeof(keyslot_t)-1] = generate_csum(key);
- send_key(key, dev);
+ if(send_key(key, dev)) {
+ fprintf(stderr, "send_key failed at keyslot %d\n", key_num);
+ return 1;
+ }
key_num++;
if(key_num > EEPROM_SIZE/sizeof(keyslot_t)) {
@@ -115,13 +120,19 @@ int main(int argc, char* argv[])
break;
}
}
- printf("read %d keys from STDIN\n", key_num);
+ printf("\nread %d keys from STDIN - filling rest of keystore with invalid keys\n", key_num);
int i;
for(i=0; i<=sizeof(keyslot_t)-1; ++i) key[i] = 0xFF;
- for(i=key_num; i < EEPROM_SIZE/sizeof(keyslot_t); ++i)
- send_key(key, dev);
- printf("write finished\n");
+ for(i=key_num; i < EEPROM_SIZE/sizeof(keyslot_t); ++i) {
+ if(send_key(key, dev)) {
+ fprintf(stderr, "send_key failed at keyslot %d\n", key_num);
+ return 1;
+ }
+ key_num++;
+ }
+
+ printf("\nwrite of %d keys finished\n", key_num);
return 0;
}