tcos_decipher: Reformat to improve readability

This commit is contained in:
Jakub Jelen 2020-06-04 10:17:19 +02:00 committed by Frank Morgner
parent 53395f4075
commit 1819ca33d6

View File

@ -611,40 +611,43 @@ static int tcos_decipher(sc_card_t *card, const u8 * crgram, size_t crgram_len,
return SC_ERROR_INVALID_ARGUMENTS; return SC_ERROR_INVALID_ARGUMENTS;
} }
ctx = card->ctx; ctx = card->ctx;
tcos3=(card->type==SC_CARD_TYPE_TCOS_V3); tcos3 = (card->type == SC_CARD_TYPE_TCOS_V3);
data=(tcos_data *)card->drv_data; data = (tcos_data *)card->drv_data;
LOG_FUNC_CALLED(ctx); LOG_FUNC_CALLED(ctx);
sc_log(ctx, sc_log(ctx,
"TCOS3:%d PKCS1:%d\n",tcos3, "TCOS3:%d PKCS1:%d\n", tcos3,
!!(data->pad_flags & SC_ALGORITHM_RSA_PAD_PKCS1)); !!(data->pad_flags & SC_ALGORITHM_RSA_PAD_PKCS1));
sc_format_apdu(card, &apdu, crgram_len>255 ? SC_APDU_CASE_4_EXT : SC_APDU_CASE_4_SHORT, 0x2A, 0x80, 0x86); sc_format_apdu(card, &apdu, crgram_len > 255 ? SC_APDU_CASE_4_EXT : SC_APDU_CASE_4_SHORT, 0x2A, 0x80, 0x86);
apdu.resp = rbuf; apdu.resp = rbuf;
apdu.resplen = sizeof(rbuf); apdu.resplen = sizeof(rbuf);
apdu.le = crgram_len; apdu.le = crgram_len;
apdu.data = sbuf; apdu.data = sbuf;
apdu.lc = apdu.datalen = crgram_len+1; apdu.lc = apdu.datalen = crgram_len + 1;
sbuf[0] = tcos3 ? 0x00 : ((data->pad_flags & SC_ALGORITHM_RSA_PAD_PKCS1) ? 0x81 : 0x02); sbuf[0] = tcos3 ? 0x00 : ((data->pad_flags & SC_ALGORITHM_RSA_PAD_PKCS1) ? 0x81 : 0x02);
if (sizeof sbuf - 1 < crgram_len) if (sizeof sbuf - 1 < crgram_len)
return SC_ERROR_INVALID_ARGUMENTS; return SC_ERROR_INVALID_ARGUMENTS;
memcpy(sbuf+1, crgram, crgram_len); memcpy(sbuf + 1, crgram, crgram_len);
r = sc_transmit_apdu(card, &apdu); r = sc_transmit_apdu(card, &apdu);
LOG_TEST_RET(card->ctx, r, "APDU transmit failed"); LOG_TEST_RET(ctx, r, "APDU transmit failed");
if (apdu.sw1==0x90 && apdu.sw2==0x00) { if (apdu.sw1 == 0x90 && apdu.sw2 == 0x00) {
size_t len= (apdu.resplen>outlen) ? outlen : apdu.resplen; size_t len = (apdu.resplen>outlen) ? outlen : apdu.resplen;
unsigned int offset=0; unsigned int offset = 0;
if(tcos3 && (data->pad_flags & SC_ALGORITHM_RSA_PAD_PKCS1) && apdu.resp[0]==0 && apdu.resp[1]==2) {
offset=2; while(offset<len && apdu.resp[offset]!=0) ++offset; if (tcos3 && (data->pad_flags & SC_ALGORITHM_RSA_PAD_PKCS1) && apdu.resp[0] == 0 && apdu.resp[1] == 2) {
offset=(offset<len-1) ? offset+1 : 0; offset = 2;
while (offset < len && apdu.resp[offset] != 0)
++offset;
offset = (offset < len - 1) ? offset + 1 : 0;
} }
memcpy(out, apdu.resp+offset, len-offset); memcpy(out, apdu.resp + offset, len-offset);
SC_FUNC_RETURN(card->ctx, SC_LOG_DEBUG_VERBOSE, len-offset); SC_FUNC_RETURN(ctx, SC_LOG_DEBUG_VERBOSE, len - offset);
} }
SC_FUNC_RETURN(card->ctx, SC_LOG_DEBUG_VERBOSE, sc_check_sw(card, apdu.sw1, apdu.sw2)); SC_FUNC_RETURN(ctx, SC_LOG_DEBUG_VERBOSE, sc_check_sw(card, apdu.sw1, apdu.sw2));
} }