Rewritten keypair_gen response (more friendly).
Signed-off-by: Pol Henarejos <pol.henarejos@cttc.es>
This commit is contained in:
@@ -1077,29 +1077,22 @@ static int cmd_keypair_gen() {
|
|||||||
return SW_EXEC_ERROR();
|
return SW_EXEC_ERROR();
|
||||||
}
|
}
|
||||||
|
|
||||||
res_APDU[0] = 0x67;
|
res_APDU[res_APDU_size++] = 0x67;
|
||||||
int outer_len = strlen(cvc.outer_car)+2+2+1+4;
|
int outer_len = 2+strlen(cvc.outer_car)+3+4;
|
||||||
int bytes_length = 0;
|
int bytes_length = format_tlv_len(cvclen+outer_len, res_APDU+res_APDU_size);
|
||||||
if (cvclen+outer_len < 128)
|
res_APDU_size += bytes_length;
|
||||||
res_APDU[1] = cvclen+outer_len;
|
memcpy(res_APDU+res_APDU_size, cvcbin, cvclen);
|
||||||
else if (cvclen+outer_len < 256) {
|
res_APDU_size += cvclen;
|
||||||
res_APDU[1] = 0x81;
|
res_APDU[res_APDU_size++] = 0x42;
|
||||||
res_APDU[2] = cvclen+outer_len;
|
res_APDU[res_APDU_size++] = strlen(cvc.outer_car);
|
||||||
bytes_length = 1;
|
memcpy(res_APDU+res_APDU_size, cvc.outer_car, strlen(cvc.outer_car));
|
||||||
}
|
res_APDU_size += strlen(cvc.outer_car);
|
||||||
else {
|
memcpy(res_APDU+res_APDU_size, "\x5F\x37\x04",3);
|
||||||
res_APDU[1] = 0x82;
|
res_APDU_size += 3;
|
||||||
res_APDU[2] = (cvclen+outer_len) >> 8;
|
memset(res_APDU+res_APDU_size, 0, 4);
|
||||||
res_APDU[3] = (cvclen+outer_len) & 0xff;
|
res_APDU_size += 4;
|
||||||
bytes_length = 2;
|
|
||||||
}
|
|
||||||
memcpy(res_APDU+bytes_length+2, cvcbin, cvclen);
|
|
||||||
res_APDU[bytes_length+2+cvclen] = 0x42;
|
|
||||||
res_APDU[bytes_length+2+cvclen+1] = strlen(cvc.outer_car);
|
|
||||||
memcpy(res_APDU+bytes_length+2+cvclen+2, cvc.outer_car, strlen(cvc.outer_car));
|
|
||||||
memcpy(res_APDU+bytes_length+2+cvclen+2+strlen(cvc.outer_car), "\x5F\x37\x04",3);
|
|
||||||
free(cvcbin);
|
free(cvcbin);
|
||||||
res_APDU_size = cvclen+bytes_length+2+outer_len;
|
//res_APDU_size = cvclen+bytes_length+1+outer_len;
|
||||||
apdu.expected_res_size = res_APDU_size;
|
apdu.expected_res_size = res_APDU_size;
|
||||||
|
|
||||||
//sc_asn1_print_tags(res_APDU, res_APDU_size);
|
//sc_asn1_print_tags(res_APDU, res_APDU_size);
|
||||||
|
|||||||
Reference in New Issue
Block a user