Show
Ignore:
Timestamp:
02/01/08 14:31:02 (11 months ago)
Author:
ludovic.rousseau
Message:

Add support for the Austrian A-Trust ACOS card

Thanks to Franz Brandl for the patch
http://www.opensc-project.org/pipermail/opensc-devel/2008-February/010675.html

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/libopensc/card-atrust-acos.c

    r3085 r3318  
    2929/*****************************************************************************/ 
    3030 
     31#define ACOS_EMV_A03            "A-TRUST ACOS" 
     32#define ACOS_EMV_A05            "A-TRUST ACOS A05" 
     33 
    3134static const char *atrust_acos_atrs[] = { 
    3235  "3B:BF:11:00:81:31:fe:45:45:50:41", 
    3336  "3B:BF:11:00:81:31:fe:45:4d:43:41", 
     37  "3B:BF:13:00:81:31:fe:45:45:50:41", 
     38  "3B:BF:13:00:81:31:fe:45:4d:43:41", 
     39  NULL 
     40}; 
     41 
     42// sequence and number has to match atr table ! 
     43static const char *atrust_acos_names[] = { 
     44  ACOS_EMV_A03, 
     45  ACOS_EMV_A03, 
     46  ACOS_EMV_A05, 
     47  ACOS_EMV_A05, 
    3448  NULL 
    3549}; 
     
    7387                if (memcmp(card->atr, defatr, len) != 0) 
    7488                        continue; 
     89 
    7590                match = 1; 
     91                card->name = atrust_acos_names[i]; 
     92 
    7693                break; 
    7794    } 
     
    90107                return SC_ERROR_OUT_OF_MEMORY; 
    91108 
    92         card->name = "A-TRUST ACOS"; 
    93109        card->cla  = 0x00; 
    94110        card->drv_data = (void *)ex_data; 
     
    103119                | SC_ALGORITHM_RSA_HASH_MD5_SHA1; 
    104120 
    105         _sc_card_add_rsa_alg(card,1536, flags, 0x10001); 
     121        if (!strcmp(card->name, ACOS_EMV_A05)) 
     122                flags |= SC_ALGORITHM_RSA_HASH_SHA256; 
     123 
     124        _sc_card_add_rsa_alg(card, 1536, flags, 0x10001); 
    106125 
    107126        /* we need read_binary&friends with max 128 bytes per read */ 
     
    508527} 
    509528 
    510  
    511529/** atrust_acos_set_security_env 
    512530 * sets the security enviroment 
     
    726744                r = sc_transmit_apdu(card, &apdu); 
    727745                SC_TEST_RET(card->ctx, r, "APDU transmit failed"); 
     746                if (apdu.sw1 != 0x90 || apdu.sw2 != 0x00) 
     747                        SC_FUNC_RETURN(card->ctx, 4, sc_check_sw(card, apdu.sw1, apdu.sw2)); 
    728748                { 
    729749                        size_t len = apdu.resplen > outlen ? outlen : apdu.resplen;