Show
Ignore:
Timestamp:
04/18/08 14:08:23 (9 months ago)
Author:
alonbl
Message:

ruToken fixups

http://www.opensc-project.org/pipermail/opensc-devel/2008-April/011057.html

By Aktiv Co. Aleksey Samsonov

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/libopensc/pkcs15-rutoken.c

    r3444 r3478  
    11/* 
    2  * PKCS15 emulation layer for ruToken 
     2 * PKCS15 emulation layer for Rutoken 
    33 * 
    44 * Copyright (C) 2007  Pavel Mironchik <rutoken@rutoken.ru> 
     
    2929#include <stdarg.h> 
    3030#include <opensc/opensc.h> 
    31 #include "cardctl.h" 
    3231#include <opensc/log.h> 
    3332#include <opensc/pkcs15.h> 
    34  
    35 #define RUT_LABEL    "ruToken card" 
     33#include "cardctl.h" 
    3634 
    3735#define PrKDF_path      "3F00FF000001" 
     
    3937#define CDF_path        "3F00FF000003" 
    4038#define DODF_path       "3F00FF000004" 
    41 #define AODF_path       "3F00FF00A0DF" 
     39#define AODF_path       "3F00FF000000" 
    4240 
    4341static const struct 
     
    8381                        free(pin_info); 
    8482                        free(pin_obj); 
    85                 return SC_ERROR_OUT_OF_MEMORY; 
    86         } 
     83                        return SC_ERROR_OUT_OF_MEMORY; 
     84                } 
    8785                pin_info->auth_id.len      = 1; 
    8886                pin_info->auth_id.value[0] = (u8)pinlist[i].reference; 
     
    9896 
    9997                strncpy(pin_obj->label, pinlist[i].label, SC_PKCS15_MAX_LABEL_SIZE - 1); 
    100                 pin_obj->flags            = SC_PKCS15_CO_FLAG_PRIVATE; 
    101                  
     98                pin_obj->flags = SC_PKCS15_CO_FLAG_PRIVATE; 
    10299                sc_pkcs15emu_add_pin_obj(p15card, pin_obj, pin_info); 
    103100                free(pin_obj); 
     
    120117        char               serial[30] = {0}; 
    121118        u8                 info[8]; 
    122          
     119 
    123120        /*  get the card serial number   */ 
    124121        if (sc_card_ctl(card, SC_CARDCTL_GET_SERIALNR, &serialnr) < 0)  
     
    129126        sc_bin_to_hex(serialnr.value, serialnr.len , serial, sizeof(serial), 0); 
    130127        set_string(&p15card->serial_number, serial); 
    131          
    132128        /*  get ruToken information  */ 
    133129        if (sc_card_ctl(card, SC_CARDCTL_RUTOKEN_GET_INFO, info) < 0)  
     
    136132                return SC_ERROR_WRONG_CARD; 
    137133        } 
    138         set_string(&p15card->label, RUT_LABEL); 
     134        set_string(&p15card->label, card->name); 
    139135        p15card->version = (info[1] >> 4)*10 + (info[1] & 0x0f); 
    140136        sc_bin_to_hex(info + 3, 3 , serial, sizeof(serial), 0); 
    141137        set_string(&p15card->manufacturer_id, serial); 
    142          
    143138        return SC_SUCCESS; 
    144139} 
    145          
     140 
    146141static int sc_pkcs15_rutoken_init_func(sc_pkcs15_card_t *p15card) 
    147142{ 
     
    153148        int r; 
    154149        unsigned int added_pin = 0; 
    155          
     150 
    156151        if (!p15card || !p15card->card || !p15card->card->ctx 
    157152                        || !p15card->card->ops 
     
    159154        ) 
    160155                return SC_ERROR_INVALID_ARGUMENTS; 
    161          
    162156        card = p15card->card; 
    163157        ctx = card->ctx; 
    164          
    165158        r = set_card_info(p15card); 
    166159        if (r != SC_SUCCESS) 
    167                 { 
     160        { 
    168161                sc_error(ctx, "Unable to set card info: %s\n", sc_strerror(r)); 
    169162                r = SC_SUCCESS; 
    170                 } 
     163        } 
    171164 
    172165        for (i = 0; i < sizeof(arr_profile_df)/sizeof(arr_profile_df[0]); ++i) 
    173                 { 
     166        { 
    174167                df = NULL; 
    175168                sc_format_path(arr_profile_df[i].path, &path); 
     
    182175                        r = sc_pkcs15_add_df(p15card, arr_profile_df[i].type, &path, df); 
    183176                if (df) 
    184                 sc_file_free(df); 
     177                        sc_file_free(df); 
    185178 
    186179                if (r != SC_SUCCESS) break; 
     
    200193} 
    201194 
    202 int sc_pkcs15emu_rutoken_init_ex(sc_pkcs15_card_t *p15card, 
    203                                                                  sc_pkcs15emu_opt_t *opts) 
     195int sc_pkcs15emu_rutoken_init_ex(sc_pkcs15_card_t *p15card,  
     196                sc_pkcs15emu_opt_t *opts) 
    204197{ 
    205198        struct sc_card *card = p15card->card; 
    206          
     199 
    207200        SC_FUNC_CALLED(card->ctx, 1); 
    208          
    209201        /* check if we have the correct card OS */ 
    210         if (strcmp(card->name, "rutoken card")) 
     202        if (strcmp(card->name, "Rutoken card")) 
    211203                return SC_ERROR_WRONG_CARD; 
    212          
    213204        sc_debug(card->ctx, "%s found", card->name); 
    214205        return sc_pkcs15_rutoken_init_func(p15card); 
    215206} 
     207