simplyfied netkey-tool

fixes conversion from 'long' to 'u8', possible loss of data
This commit is contained in:
Frank Morgner 2016-06-05 02:24:17 +02:00
parent b9cefa6825
commit 9066d8f999

View File

@ -52,7 +52,7 @@ static struct {
const char *label;
int p1, p2;
int tries;
int len;
size_t len;
u8 value[32];
} pinlist[]={
{"3F005000", "pin", "global PIN", 1,-1, 0, 0,
@ -404,25 +404,16 @@ static int pin_string2int(char *s) {
return -1;
}
static void set_pin(u8 *data, int *pinlen, char *pin)
static void set_pin(u8 *data, size_t *pinlen, char *pin)
{
int hex, i, j=0, len;
char *p;
int hex;
size_t i, len;
len=strlen(pin);
hex=(len>=5 && len%3==2);
if(hex){
len=(len+1)/3;
hex=(len<=32);
}
for(i=0;hex && i<len;++i){
if(i>0 && pin[3*i-1]!=':') hex=0;
else j=strtol(pin+3*i,&p,16);
if(hex && (j<0 || j>255 || (p-pin)!=3*i+2)) hex=0;
}
if(hex){
for(i=0;hex && i<len;++i) data[i]=strtol(pin+3*i,&p,16);
*pinlen=len;
*pinlen = sizeof (pinlist[0].value);
sc_hex_to_bin(pin, data, pinlen);
} else {
len=strlen(pin); if(len>32) len=32;
for(i=0;i<len;++i) data[i]=((u8*)pin)[i];
@ -452,8 +443,8 @@ int main(
int do_help=0, do_unblock=0, do_change=0, do_nullpin=0, do_readcert=0, do_writecert=0;
u8 newpin[32];
char *certfile=NULL, *p;
int r, oerr=0, reader=0, debug=0, newlen=0, pin_nr=-1, cert_nr=-1;
size_t i;
int r, oerr=0, reader=0, debug=0, pin_nr=-1, cert_nr=-1;
size_t i, newlen=0;
while((r=getopt_long(argc,argv,"hvr:p:u:0:1:",options,NULL))!=EOF) switch(r){
case 'h': ++do_help; break;