NB! This project is outdated and unmaintained, please refer to the OpenSC WindowsInstaller instead!

source: trunk/putty-0.58-smartcard.diff @ 100

Revision 100, 199.2 KB checked in by alonbl, 4 years ago (diff)

Make putty patch use free pkcs11.h header

  • config.c

    diff -urNp putty-0.58.org/config.c putty-0.58+smartcard/config.c
    old new void setup_config_box(struct controlbox  
    16851685                          I(offsetof(Config,ssh2_des_cbc))); 
    16861686        } 
    16871687 
     1688        ctrl_settitle(b, "Connection/SSH/Commands", 
     1689              "Workarounds for SSH server bugs"); 
     1690        s = ctrl_getset(b, "Connection/SSH/Commands", "main", 
     1691            "Local programs to start that use tunnels."); 
     1692 
     1693        ctrl_editbox(s, "Local command", NO_SHORTCUT, 75, 
     1694             HELPCTX(ssh_tunnels_localcmd), 
     1695             dlg_stdeditbox_handler, I(offsetof(Config,local_cmd)), 
     1696             I(sizeof(((Config *)0)->local_cmd))); 
     1697        ctrl_checkbox(s, "Close putty on local command",NO_SHORTCUT, 
     1698              HELPCTX(ssh_tunnels_localcmd), 
     1699              dlg_stdcheckbox_handler, 
     1700              I(offsetof(Config,local_cmd_close))); 
     1701 
     1702 
    16881703        /* 
    16891704         * The Connection/SSH/Kex panel. (Owing to repeat key 
    16901705         * exchange, this is all meaningful in mid-session _if_ 
    void setup_config_box(struct controlbox  
    17361751                          'i', HELPCTX(ssh_auth_ki), 
    17371752                          dlg_stdcheckbox_handler, 
    17381753                          I(offsetof(Config,try_ki_auth))); 
    1739  
     1754            ctrl_checkbox(s, "Attempt \"PKCS#11 smartcard\" auth (SSH2)", 
     1755                      'p', HELPCTX(ssh_auth_pkcs11), 
     1756                      dlg_stdcheckbox_handler, 
     1757                      I(offsetof(Config,try_pkcs11_auth))); 
    17401758            s = ctrl_getset(b, "Connection/SSH/Auth", "params", 
    17411759                            "Authentication parameters"); 
    17421760            ctrl_checkbox(s, "Allow agent forwarding", 'f', 
    void setup_config_box(struct controlbox  
    17461764                          HELPCTX(ssh_auth_changeuser), 
    17471765                          dlg_stdcheckbox_handler, 
    17481766                          I(offsetof(Config,change_username))); 
    1749             ctrl_filesel(s, "Private key file for authentication:", 'k', 
     1767/*          ctrl_filesel(s, "Private key file for authentication:", 'k', 
    17501768                         FILTER_KEY_FILES, FALSE, "Select private key file", 
    17511769                         HELPCTX(ssh_auth_privkey), 
    17521770                         dlg_stdfilesel_handler, I(offsetof(Config, keyfile))); 
     1771*/ 
     1772 
     1773        ctrl_filesel(s, "PKCS#11 library for authentication:", NO_SHORTCUT, 
     1774                     NULL , FALSE, "Select PKCS#11 library file", 
     1775                     HELPCTX(ssh_auth_pkcs11_libfile), 
     1776                     dlg_stdfilesel_handler, I(offsetof(Config, pkcs11_libfile))); 
     1777        ctrl_editbox(s, "Token label:", 't', 50, 
     1778                     HELPCTX(ssh_auth_pkcs11_token_label), 
     1779                     dlg_stdeditbox_handler, I(offsetof(Config,pkcs11_token_label)), 
     1780                     I(sizeof(((Config *)0)->pkcs11_token_label))); 
     1781 
    17531782        } 
    17541783 
    17551784        if (!midsession) { 
  • libpkcs11.c

    diff -urNp putty-0.58.org/libpkcs11.c putty-0.58+smartcard/libpkcs11.c
    old new  
     1/* 
     2 * Convenience pkcs11 library that can be linked into an application, 
     3 * and will bind to a specific pkcs11 module. 
     4 * 
     5 * Copyright (C) 2002  Olaf Kirch <okir@lst.de> 
     6 */ 
     7 
     8#include "ppkcs11.h" 
     9#include <stdlib.h> 
     10#include <stdio.h> 
     11#include <string.h> 
     12#ifdef __APPLE__ 
     13#include <Carbon/Carbon.h> 
     14#endif 
     15 
     16#ifndef _WIN32 
     17#ifdef _WINDOWS 
     18#define _WIN32 
     19#endif 
     20#endif 
     21 
     22#define MAGIC                   0xd00bed00 
     23 
     24struct sc_pkcs11_module { 
     25        unsigned int            _magic; 
     26#if defined(linux) || defined(_WIN32) 
     27        void *                  _dl_handle; 
     28#endif 
     29#ifdef __APPLE__ 
     30        struct mach_header      *_dl_handle; 
     31        CFBundleRef             bundleRef;   
     32#endif 
     33}; 
     34 
     35static int      sys_dlopen(sc_pkcs11_module_t *, const char *); 
     36static int      sys_dlclose(sc_pkcs11_module_t *); 
     37static void *   sys_dlsym(sc_pkcs11_module_t *, const char *); 
     38 
     39/* 
     40 * Load a module - this will load the shared object, call 
     41 * C_Initialize, and get the list of function pointers 
     42 */ 
     43sc_pkcs11_module_t * 
     44C_LoadModule(const char *mspec, CK_FUNCTION_LIST_PTR_PTR funcs) 
     45{ 
     46        sc_pkcs11_module_t *mod; 
     47        CK_RV (*c_get_function_list)(CK_FUNCTION_LIST_PTR_PTR); 
     48        int rv; 
     49 
     50        mod = (sc_pkcs11_module_t *) calloc(1, sizeof(*mod)); 
     51        mod->_magic = MAGIC; 
     52    rv=sys_dlopen(mod,mspec); 
     53        if (rv < 0) { 
     54  //      fprintf(stderr, "failed to sys_dlopen - returned %i", rv) 
     55                goto failed;  
     56    } 
     57 
     58        /* Get the list of function pointers */ 
     59        c_get_function_list = (CK_RV (*)(CK_FUNCTION_LIST_PTR_PTR)) 
     60                                sys_dlsym(mod, "C_GetFunctionList"); 
     61        if (!c_get_function_list) { 
     62    //    fprintf(stderr, "failed to get function list"); 
     63                goto failed; 
     64    } 
     65        rv = c_get_function_list(funcs); 
     66        if (rv == CKR_OK) 
     67                return mod; 
     68 
     69failed: C_UnloadModule(mod); 
     70        return NULL; 
     71} 
     72 
     73/* 
     74 * Unload a pkcs11 module. 
     75 * The calling application is responsible for cleaning up 
     76 * and calling C_Finalize 
     77 */ 
     78CK_RV 
     79C_UnloadModule(sc_pkcs11_module_t *mod) 
     80{ 
     81        if (!mod || mod->_magic != MAGIC) 
     82                return CKR_ARGUMENTS_BAD; 
     83 
     84        if (sys_dlclose(mod) < 0) 
     85                return CKR_FUNCTION_FAILED; 
     86 
     87        memset(mod, 0, sizeof(*mod)); 
     88        free(mod); 
     89        return CKR_OK; 
     90} 
     91 
     92#ifdef linux 
     93#include <dlfcn.h> 
     94 
     95/* 
     96 * Module loader for platforms that have dlopen 
     97 * 
     98 * This is intentionally primitive; we may want a more 
     99 * elaborate loader in libopensc one day 
     100 */ 
     101int 
     102sys_dlopen(struct sc_pkcs11_module *mod, const char *name) 
     103{ 
     104        const char      **dir, *ldlist[64]; 
     105        char            pathbuf[4096], *ldenv; 
     106        unsigned int    n = 0; 
     107 
     108        if ((ldenv = getenv("LD_LIBRARY_PATH"))  
     109         && (ldenv = strdup(ldenv))) { 
     110                ldlist[n] = strtok(ldenv, ":"); 
     111                while (ldlist[n] != NULL && ++n < 63) 
     112                        ldlist[n] = strtok(NULL, ":"); 
     113        } 
     114        ldlist[n] = NULL; 
     115 
     116        if (name == NULL) 
     117                name = "opensc-pkcs11.so"; 
     118 
     119        for (dir = ldlist; *dir; dir++) { 
     120                snprintf(pathbuf, sizeof(pathbuf), "%s/%s", *dir, name); 
     121                mod->_dl_handle = dlopen(pathbuf, RTLD_NOW); 
     122                if (mod->_dl_handle != NULL) 
     123                        break; 
     124        } 
     125 
     126        if (mod->_dl_handle == NULL) 
     127                mod->_dl_handle = dlopen(name, RTLD_NOW); 
     128 
     129        if (ldenv) 
     130                free(ldenv); 
     131 
     132        return (mod->_dl_handle? 0 : -1); 
     133} 
     134 
     135int 
     136sys_dlclose(struct sc_pkcs11_module *mod) 
     137{ 
     138        if (mod->_dl_handle) 
     139                dlclose(mod->_dl_handle); 
     140        mod->_dl_handle = NULL; 
     141        return 0; 
     142} 
     143 
     144 
     145void * 
     146sys_dlsym(sc_pkcs11_module_t *mod, const char *name) 
     147{ 
     148        if (!mod->_dl_handle) 
     149                return NULL; 
     150        return dlsym(mod->_dl_handle, name); 
     151} 
     152 
     153#endif 
     154 
     155#ifdef _WIN32 
     156#include <windows.h> 
     157 
     158/* 
     159 * Module loader for the Windows platform. 
     160 */ 
     161int 
     162sys_dlopen(struct sc_pkcs11_module *mod, const char *name) 
     163{ 
     164        if (name == NULL) 
     165                name = "opensc-pkcs11"; 
     166 
     167        mod->_dl_handle = LoadLibrary(name); 
     168 
     169        return (mod->_dl_handle? 0 : GetLastError()); 
     170} 
     171 
     172int 
     173sys_dlclose(struct sc_pkcs11_module *mod) 
     174{ 
     175        if (mod->_dl_handle) { 
     176                if (FreeLibrary(mod->_dl_handle)) { 
     177                        mod->_dl_handle = NULL; 
     178                        return 0; 
     179                } 
     180                else 
     181                        return -1; 
     182        } 
     183 
     184        return 0; 
     185} 
     186 
     187void * 
     188sys_dlsym(sc_pkcs11_module_t *mod, const char *name) 
     189{ 
     190        if (!mod->_dl_handle) 
     191                return NULL; 
     192        return GetProcAddress(mod->_dl_handle, name); 
     193} 
     194 
     195#endif 
     196 
     197#ifdef __APPLE__ 
     198#include <mach-o/dyld.h> 
     199 
     200/* 
     201 * Module loader for MacOSX 10 
     202 */ 
     203int 
     204sys_dlopen(struct sc_pkcs11_module *mod, const char *name) 
     205{ 
     206        int name_len; 
     207 
     208        if (name == NULL) 
     209                name = "libopensc-pkcs11.dylib"; 
     210 
     211        name_len = strlen(name); 
     212        if (name_len > 7 && strcmp(name +  name_len - 7, ".bundle") != 0) { 
     213                mod->_dl_handle = NSAddImage(name, 
     214                        NSADDIMAGE_OPTION_WITH_SEARCHING); 
     215        mod->bundleRef = NULL; 
     216        } 
     217        else { 
     218                CFStringRef text = CFStringCreateWithFormat( 
     219                        NULL, NULL, CFSTR("%s"), name); 
     220                CFURLRef urlRef = CFURLCreateWithFileSystemPath( 
     221                        kCFAllocatorDefault, text, kCFURLPOSIXPathStyle, 1); 
     222                mod->bundleRef = CFBundleCreate(kCFAllocatorDefault, urlRef); 
     223                CFRelease(urlRef); 
     224                CFRelease(text); 
     225                mod->_dl_handle = NULL; 
     226        } 
     227 
     228        return (mod->_dl_handle == NULL && mod->bundleRef == NULL ? -1 : 0); 
     229} 
     230 
     231int 
     232sys_dlclose(struct sc_pkcs11_module *mod) 
     233{ 
     234        if (mod->bundleRef != NULL) { 
     235                CFBundleUnloadExecutable(mod->bundleRef); 
     236                CFRelease(mod->bundleRef); 
     237        } 
     238 
     239        return CKR_OK; 
     240} 
     241 
     242void * 
     243sys_dlsym(sc_pkcs11_module_t *mod, const char *name) 
     244{ 
     245        NSSymbol symbol = NULL; 
     246         
     247        if (mod->_dl_handle != NULL) { 
     248                char u_name[4096]; 
     249 
     250                if (strlen(name) > 4094) 
     251                        return NULL; 
     252                sprintf(u_name, "_%s", name); 
     253                symbol = NSLookupSymbolInImage(mod->_dl_handle, u_name, 
     254                        NSLOOKUPSYMBOLINIMAGE_OPTION_BIND_NOW); 
     255                if (symbol==NULL) 
     256                        return NULL; 
     257                return NSAddressOfSymbol(symbol); 
     258        } 
     259        else { 
     260                CFStringRef text = CFStringCreateWithFormat( 
     261                        NULL, NULL, CFSTR("%s"), name); 
     262                symbol = CFBundleGetFunctionPointerForName( 
     263                        mod->bundleRef, text); 
     264                CFRelease(text); 
     265                return symbol; 
     266        } 
     267} 
     268#endif 
  • local_cmd.c

    diff -urNp putty-0.58.org/local_cmd.c putty-0.58+smartcard/local_cmd.c
    old new  
     1#include <windows.h> 
     2 
     3 
     4void do_close(void * ssh); 
     5 
     6static unsigned long __stdcall WaitToClose(void * params); 
     7 
     8struct CloseParam { 
     9    PROCESS_INFORMATION* pi; 
     10    void * ssh; 
     11} ; 
     12 
     13 
     14int run_local_cmd(char* cmd, int close, void* ssh) { 
     15 STARTUPINFO si; PROCESS_INFORMATION *pi; 
     16 DWORD threadid; 
     17 
     18 pi=malloc(sizeof(PROCESS_INFORMATION)); 
     19 
     20 memset(&si, 0, sizeof(si)); 
     21 si.cb=sizeof(si); 
     22 memset(pi, 0,sizeof(pi)); 
     23 
     24 
     25 if(!CreateProcess(  
     26        NULL, 
     27        cmd, 
     28        NULL, 
     29        NULL, 
     30        FALSE, 
     31        0, 
     32        NULL, 
     33        NULL, 
     34        &si, 
     35        pi 
     36    ) ) { 
     37            //fprintf(stderr, "failed"); 
     38        } 
     39 
     40 
     41 if(close) { 
     42    struct CloseParam * params; 
     43    params=malloc(sizeof( struct CloseParam)); 
     44    params->ssh=ssh; 
     45    params->pi=pi; 
     46    CreateThread(NULL, 0, WaitToClose, params, 0, &threadid ); 
     47 } else { 
     48    free(pi); 
     49  } 
     50 
     51 return close; 
     52 
     53} 
     54 
     55static unsigned long __stdcall WaitToClose(void * params) { 
     56     
     57    struct CloseParam * toclose= (struct CloseParam *) params; 
     58    WaitForSingleObject(toclose->pi->hProcess, INFINITE); 
     59    do_close(toclose->ssh); 
     60    CloseHandle(toclose->pi->hProcess); 
     61    CloseHandle(toclose->pi->hThread); 
     62    free(toclose->pi); 
     63    free(toclose); 
     64    exit(0); 
     65    return 0; 
     66} 
     67 
     68 
     69 
  • mac/Makefile.mpw

    diff -urNp putty-0.58.org/mac/Makefile.mpw putty-0.58+smartcard/mac/Makefile.mpw
    old new all Ä PuTTY PuTTYgen PuTTYtel 
    158158PuTTY Ä PuTTY.68k PuTTY.ppc PuTTY.carbon 
    159159 
    160160PuTTY.68k Ä be_all.68k.o config.68k.o cproxy.68k.o dialog.68k.o ¶ 
    161                 fromucs.68k.o ldisc.68k.o ldiscucs.68k.o localenc.68k.o ¶ 
    162                 logging.68k.o mac.68k.o macabout.68k.o macctrls.68k.o ¶ 
    163                 macdlg.68k.o macenc.68k.o macevlog.68k.o macmisc.68k.o ¶ 
    164                 macnet.68k.o macnoise.68k.o macstore.68k.o macterm.68k.o ¶ 
    165                 macucs.68k.o mimeenc.68k.o minibidi.68k.o misc.68k.o ¶ 
    166                 mtcpnet.68k.o otnet.68k.o pinger.68k.o portfwd.68k.o ¶ 
    167                 pproxy.68k.o proxy.68k.o raw.68k.o rlogin.68k.o sbcs.68k.o ¶ 
    168                 sbcsdat.68k.o settings.68k.o slookup.68k.o ssh.68k.o ¶ 
    169                 sshaes.68k.o sshblowf.68k.o sshbn.68k.o sshcrc.68k.o ¶ 
    170                 sshcrcda.68k.o sshdes.68k.o sshdh.68k.o sshdss.68k.o ¶ 
    171                 sshmd5.68k.o sshpubk.68k.o sshrand.68k.o sshrsa.68k.o ¶ 
     161                fromucs.68k.o ldisc.68k.o ldiscucs.68k.o libpkcs11.68k.o ¶ 
     162                local_cmd.68k.o localenc.68k.o logging.68k.o mac.68k.o ¶ 
     163                macabout.68k.o macctrls.68k.o macdlg.68k.o macenc.68k.o ¶ 
     164                macevlog.68k.o macmisc.68k.o macnet.68k.o macnoise.68k.o ¶ 
     165                macstore.68k.o macterm.68k.o macucs.68k.o mimeenc.68k.o ¶ 
     166                minibidi.68k.o misc.68k.o mtcpnet.68k.o otnet.68k.o ¶ 
     167                pinger.68k.o portfwd.68k.o pproxy.68k.o proxy.68k.o ¶ 
     168                raw.68k.o rlogin.68k.o sbcs.68k.o sbcsdat.68k.o ¶ 
     169                settings.68k.o slookup.68k.o ssh.68k.o sshaes.68k.o ¶ 
     170                sshblowf.68k.o sshbn.68k.o sshcrc.68k.o sshcrcda.68k.o ¶ 
     171                sshdes.68k.o sshdh.68k.o sshdss.68k.o sshmd5.68k.o ¶ 
     172                sshpubk.68k.o sshrand.68k.o sshrsa.68k.o sshscard.68k.o ¶ 
    172173                sshsh512.68k.o sshsha.68k.o sshzlib.68k.o stricmp.68k.o ¶ 
    173174                telnet.68k.o terminal.68k.o testback.68k.o timing.68k.o ¶ 
    174175                toucs.68k.o tree234.68k.o utf8.68k.o version.68k.o ¶ 
    PuTTY.68k Ä be_all.68k.o config.68k.o cp 
    177178        Duplicate -y mac_res.rsrc {Targ} 
    178179        {Link_68K} -o {Targ} -fragname PuTTY {LinkOptions_68K} be_all.68k.o ¶ 
    179180                config.68k.o cproxy.68k.o dialog.68k.o fromucs.68k.o ¶ 
    180                 ldisc.68k.o ldiscucs.68k.o localenc.68k.o logging.68k.o ¶ 
    181                 mac.68k.o macabout.68k.o macctrls.68k.o macdlg.68k.o ¶ 
    182                 macenc.68k.o macevlog.68k.o macmisc.68k.o macnet.68k.o ¶ 
    183                 macnoise.68k.o macstore.68k.o macterm.68k.o macucs.68k.o ¶ 
    184                 mimeenc.68k.o minibidi.68k.o misc.68k.o mtcpnet.68k.o ¶ 
    185                 otnet.68k.o pinger.68k.o portfwd.68k.o pproxy.68k.o ¶ 
    186                 proxy.68k.o raw.68k.o rlogin.68k.o sbcs.68k.o sbcsdat.68k.o ¶ 
    187                 settings.68k.o slookup.68k.o ssh.68k.o sshaes.68k.o ¶ 
    188                 sshblowf.68k.o sshbn.68k.o sshcrc.68k.o sshcrcda.68k.o ¶ 
    189                 sshdes.68k.o sshdh.68k.o sshdss.68k.o sshmd5.68k.o ¶ 
    190                 sshpubk.68k.o sshrand.68k.o sshrsa.68k.o sshsh512.68k.o ¶ 
     181                ldisc.68k.o ldiscucs.68k.o libpkcs11.68k.o local_cmd.68k.o ¶ 
     182                localenc.68k.o logging.68k.o mac.68k.o macabout.68k.o ¶ 
     183                macctrls.68k.o macdlg.68k.o macenc.68k.o macevlog.68k.o ¶ 
     184                macmisc.68k.o macnet.68k.o macnoise.68k.o macstore.68k.o ¶ 
     185                macterm.68k.o macucs.68k.o mimeenc.68k.o minibidi.68k.o ¶ 
     186                misc.68k.o mtcpnet.68k.o otnet.68k.o pinger.68k.o ¶ 
     187                portfwd.68k.o pproxy.68k.o proxy.68k.o raw.68k.o ¶ 
     188                rlogin.68k.o sbcs.68k.o sbcsdat.68k.o settings.68k.o ¶ 
     189                slookup.68k.o ssh.68k.o sshaes.68k.o sshblowf.68k.o ¶ 
     190                sshbn.68k.o sshcrc.68k.o sshcrcda.68k.o sshdes.68k.o ¶ 
     191                sshdh.68k.o sshdss.68k.o sshmd5.68k.o sshpubk.68k.o ¶ 
     192                sshrand.68k.o sshrsa.68k.o sshscard.68k.o sshsh512.68k.o ¶ 
    191193                sshsha.68k.o sshzlib.68k.o stricmp.68k.o telnet.68k.o ¶ 
    192194                terminal.68k.o testback.68k.o timing.68k.o toucs.68k.o ¶ 
    193195                tree234.68k.o utf8.68k.o version.68k.o vsnprint.68k.o ¶ 
    PuTTY.68k Ä be_all.68k.o config.68k.o cp 
    197199 
    198200PuTTY.cfm68k Ä be_all.cfm68k.o config.cfm68k.o cproxy.cfm68k.o ¶ 
    199201                dialog.cfm68k.o fromucs.cfm68k.o ldisc.cfm68k.o ¶ 
    200                 ldiscucs.cfm68k.o localenc.cfm68k.o logging.cfm68k.o ¶ 
    201                 mac.cfm68k.o macabout.cfm68k.o macctrls.cfm68k.o ¶ 
    202                 macdlg.cfm68k.o macenc.cfm68k.o macevlog.cfm68k.o ¶ 
    203                 macmisc.cfm68k.o macnet.cfm68k.o macnoise.cfm68k.o ¶ 
    204                 macstore.cfm68k.o macterm.cfm68k.o macucs.cfm68k.o ¶ 
    205                 mimeenc.cfm68k.o minibidi.cfm68k.o misc.cfm68k.o ¶ 
    206                 mtcpnet.cfm68k.o otnet.cfm68k.o pinger.cfm68k.o ¶ 
    207                 portfwd.cfm68k.o pproxy.cfm68k.o proxy.cfm68k.o raw.cfm68k.o ¶ 
    208                 rlogin.cfm68k.o sbcs.cfm68k.o sbcsdat.cfm68k.o ¶ 
    209                 settings.cfm68k.o slookup.cfm68k.o ssh.cfm68k.o ¶ 
    210                 sshaes.cfm68k.o sshblowf.cfm68k.o sshbn.cfm68k.o ¶ 
    211                 sshcrc.cfm68k.o sshcrcda.cfm68k.o sshdes.cfm68k.o ¶ 
    212                 sshdh.cfm68k.o sshdss.cfm68k.o sshmd5.cfm68k.o ¶ 
    213                 sshpubk.cfm68k.o sshrand.cfm68k.o sshrsa.cfm68k.o ¶ 
     202                ldiscucs.cfm68k.o libpkcs11.cfm68k.o local_cmd.cfm68k.o ¶ 
     203                localenc.cfm68k.o logging.cfm68k.o mac.cfm68k.o ¶ 
     204                macabout.cfm68k.o macctrls.cfm68k.o macdlg.cfm68k.o ¶ 
     205                macenc.cfm68k.o macevlog.cfm68k.o macmisc.cfm68k.o ¶ 
     206                macnet.cfm68k.o macnoise.cfm68k.o macstore.cfm68k.o ¶ 
     207                macterm.cfm68k.o macucs.cfm68k.o mimeenc.cfm68k.o ¶ 
     208                minibidi.cfm68k.o misc.cfm68k.o mtcpnet.cfm68k.o ¶ 
     209                otnet.cfm68k.o pinger.cfm68k.o portfwd.cfm68k.o ¶ 
     210                pproxy.cfm68k.o proxy.cfm68k.o raw.cfm68k.o rlogin.cfm68k.o ¶ 
     211                sbcs.cfm68k.o sbcsdat.cfm68k.o settings.cfm68k.o ¶ 
     212                slookup.cfm68k.o ssh.cfm68k.o sshaes.cfm68k.o ¶ 
     213                sshblowf.cfm68k.o sshbn.cfm68k.o sshcrc.cfm68k.o ¶ 
     214                sshcrcda.cfm68k.o sshdes.cfm68k.o sshdh.cfm68k.o ¶ 
     215                sshdss.cfm68k.o sshmd5.cfm68k.o sshpubk.cfm68k.o ¶ 
     216                sshrand.cfm68k.o sshrsa.cfm68k.o sshscard.cfm68k.o ¶ 
    214217                sshsh512.cfm68k.o sshsha.cfm68k.o sshzlib.cfm68k.o ¶ 
    215218                stricmp.cfm68k.o telnet.cfm68k.o terminal.cfm68k.o ¶ 
    216219                testback.cfm68k.o timing.cfm68k.o toucs.cfm68k.o ¶ 
    PuTTY.cfm68k Ä be_all.cfm68k.o config.cf 
    221224        {Link_CFM68K} -o {Targ} -fragname PuTTY {LinkOptions_CFM68K} ¶ 
    222225                be_all.cfm68k.o config.cfm68k.o cproxy.cfm68k.o ¶ 
    223226                dialog.cfm68k.o fromucs.cfm68k.o ldisc.cfm68k.o ¶ 
    224                 ldiscucs.cfm68k.o localenc.cfm68k.o logging.cfm68k.o ¶ 
    225                 mac.cfm68k.o macabout.cfm68k.o macctrls.cfm68k.o ¶ 
    226                 macdlg.cfm68k.o macenc.cfm68k.o macevlog.cfm68k.o ¶ 
    227                 macmisc.cfm68k.o macnet.cfm68k.o macnoise.cfm68k.o ¶ 
    228                 macstore.cfm68k.o macterm.cfm68k.o macucs.cfm68k.o ¶ 
    229                 mimeenc.cfm68k.o minibidi.cfm68k.o misc.cfm68k.o ¶ 
    230                 mtcpnet.cfm68k.o otnet.cfm68k.o pinger.cfm68k.o ¶ 
    231                 portfwd.cfm68k.o pproxy.cfm68k.o proxy.cfm68k.o raw.cfm68k.o ¶ 
    232                 rlogin.cfm68k.o sbcs.cfm68k.o sbcsdat.cfm68k.o ¶ 
    233                 settings.cfm68k.o slookup.cfm68k.o ssh.cfm68k.o ¶ 
    234                 sshaes.cfm68k.o sshblowf.cfm68k.o sshbn.cfm68k.o ¶ 
    235                 sshcrc.cfm68k.o sshcrcda.cfm68k.o sshdes.cfm68k.o ¶ 
    236                 sshdh.cfm68k.o sshdss.cfm68k.o sshmd5.cfm68k.o ¶ 
    237                 sshpubk.cfm68k.o sshrand.cfm68k.o sshrsa.cfm68k.o ¶ 
     227                ldiscucs.cfm68k.o libpkcs11.cfm68k.o local_cmd.cfm68k.o ¶ 
     228                localenc.cfm68k.o logging.cfm68k.o mac.cfm68k.o ¶ 
     229                macabout.cfm68k.o macctrls.cfm68k.o macdlg.cfm68k.o ¶ 
     230                macenc.cfm68k.o macevlog.cfm68k.o macmisc.cfm68k.o ¶ 
     231                macnet.cfm68k.o macnoise.cfm68k.o macstore.cfm68k.o ¶ 
     232                macterm.cfm68k.o macucs.cfm68k.o mimeenc.cfm68k.o ¶ 
     233                minibidi.cfm68k.o misc.cfm68k.o mtcpnet.cfm68k.o ¶ 
     234                otnet.cfm68k.o pinger.cfm68k.o portfwd.cfm68k.o ¶ 
     235                pproxy.cfm68k.o proxy.cfm68k.o raw.cfm68k.o rlogin.cfm68k.o ¶ 
     236                sbcs.cfm68k.o sbcsdat.cfm68k.o settings.cfm68k.o ¶ 
     237                slookup.cfm68k.o ssh.cfm68k.o sshaes.cfm68k.o ¶ 
     238                sshblowf.cfm68k.o sshbn.cfm68k.o sshcrc.cfm68k.o ¶ 
     239                sshcrcda.cfm68k.o sshdes.cfm68k.o sshdh.cfm68k.o ¶ 
     240                sshdss.cfm68k.o sshmd5.cfm68k.o sshpubk.cfm68k.o ¶ 
     241                sshrand.cfm68k.o sshrsa.cfm68k.o sshscard.cfm68k.o ¶ 
    238242                sshsh512.cfm68k.o sshsha.cfm68k.o sshzlib.cfm68k.o ¶ 
    239243                stricmp.cfm68k.o telnet.cfm68k.o terminal.cfm68k.o ¶ 
    240244                testback.cfm68k.o timing.cfm68k.o toucs.cfm68k.o ¶ 
    PuTTY.cfm68k Ä be_all.cfm68k.o config.cf 
    244248        SetFile -a BMi {Targ} 
    245249 
    246250PuTTY.ppc Ä be_all.ppc.o config.ppc.o cproxy.ppc.o dialog.ppc.o ¶ 
    247                 fromucs.ppc.o ldisc.ppc.o ldiscucs.ppc.o localenc.ppc.o ¶ 
    248                 logging.ppc.o mac.ppc.o macabout.ppc.o macctrls.ppc.o ¶ 
    249                 macdlg.ppc.o macenc.ppc.o macevlog.ppc.o macmisc.ppc.o ¶ 
    250                 macnet.ppc.o macnoise.ppc.o macstore.ppc.o macterm.ppc.o ¶ 
    251                 macucs.ppc.o mimeenc.ppc.o minibidi.ppc.o misc.ppc.o ¶ 
    252                 mtcpnet.ppc.o otnet.ppc.o pinger.ppc.o portfwd.ppc.o ¶ 
    253                 pproxy.ppc.o proxy.ppc.o raw.ppc.o rlogin.ppc.o sbcs.ppc.o ¶ 
    254                 sbcsdat.ppc.o settings.ppc.o slookup.ppc.o ssh.ppc.o ¶ 
    255                 sshaes.ppc.o sshblowf.ppc.o sshbn.ppc.o sshcrc.ppc.o ¶ 
    256                 sshcrcda.ppc.o sshdes.ppc.o sshdh.ppc.o sshdss.ppc.o ¶ 
    257                 sshmd5.ppc.o sshpubk.ppc.o sshrand.ppc.o sshrsa.ppc.o ¶ 
     251                fromucs.ppc.o ldisc.ppc.o ldiscucs.ppc.o libpkcs11.ppc.o ¶ 
     252                local_cmd.ppc.o localenc.ppc.o logging.ppc.o mac.ppc.o ¶ 
     253                macabout.ppc.o macctrls.ppc.o macdlg.ppc.o macenc.ppc.o ¶ 
     254                macevlog.ppc.o macmisc.ppc.o macnet.ppc.o macnoise.ppc.o ¶ 
     255                macstore.ppc.o macterm.ppc.o macucs.ppc.o mimeenc.ppc.o ¶ 
     256                minibidi.ppc.o misc.ppc.o mtcpnet.ppc.o otnet.ppc.o ¶ 
     257                pinger.ppc.o portfwd.ppc.o pproxy.ppc.o proxy.ppc.o ¶ 
     258                raw.ppc.o rlogin.ppc.o sbcs.ppc.o sbcsdat.ppc.o ¶ 
     259                settings.ppc.o slookup.ppc.o ssh.ppc.o sshaes.ppc.o ¶ 
     260                sshblowf.ppc.o sshbn.ppc.o sshcrc.ppc.o sshcrcda.ppc.o ¶ 
     261                sshdes.ppc.o sshdh.ppc.o sshdss.ppc.o sshmd5.ppc.o ¶ 
     262                sshpubk.ppc.o sshrand.ppc.o sshrsa.ppc.o sshscard.ppc.o ¶ 
    258263                sshsh512.ppc.o sshsha.ppc.o sshzlib.ppc.o stricmp.ppc.o ¶ 
    259264                telnet.ppc.o terminal.ppc.o testback.ppc.o timing.ppc.o ¶ 
    260265                toucs.ppc.o tree234.ppc.o utf8.ppc.o version.ppc.o ¶ 
    PuTTY.ppc Ä be_all.ppc.o config.ppc.o cp 
    263268        Duplicate -y mac_res.rsrc {Targ} 
    264269        {Link_PPC} -o {Targ} -fragname PuTTY {LinkOptions_PPC} be_all.ppc.o ¶ 
    265270                config.ppc.o cproxy.ppc.o dialog.ppc.o fromucs.ppc.o ¶ 
    266                 ldisc.ppc.o ldiscucs.ppc.o localenc.ppc.o logging.ppc.o ¶ 
    267                 mac.ppc.o macabout.ppc.o macctrls.ppc.o macdlg.ppc.o ¶ 
    268                 macenc.ppc.o macevlog.ppc.o macmisc.ppc.o macnet.ppc.o ¶ 
    269                 macnoise.ppc.o macstore.ppc.o macterm.ppc.o macucs.ppc.o ¶ 
    270                 mimeenc.ppc.o minibidi.ppc.o misc.ppc.o mtcpnet.ppc.o ¶ 
    271                 otnet.ppc.o pinger.ppc.o portfwd.ppc.o pproxy.ppc.o ¶ 
    272                 proxy.ppc.o raw.ppc.o rlogin.ppc.o sbcs.ppc.o sbcsdat.ppc.o ¶ 
    273                 settings.ppc.o slookup.ppc.o ssh.ppc.o sshaes.ppc.o ¶ 
    274                 sshblowf.ppc.o sshbn.ppc.o sshcrc.ppc.o sshcrcda.ppc.o ¶ 
    275                 sshdes.ppc.o sshdh.ppc.o sshdss.ppc.o sshmd5.ppc.o ¶ 
    276                 sshpubk.ppc.o sshrand.ppc.o sshrsa.ppc.o sshsh512.ppc.o ¶ 
     271                ldisc.ppc.o ldiscucs.ppc.o libpkcs11.ppc.o local_cmd.ppc.o ¶ 
     272                localenc.ppc.o logging.ppc.o mac.ppc.o macabout.ppc.o ¶ 
     273                macctrls.ppc.o macdlg.ppc.o macenc.ppc.o macevlog.ppc.o ¶ 
     274                macmisc.ppc.o macnet.ppc.o macnoise.ppc.o macstore.ppc.o ¶ 
     275                macterm.ppc.o macucs.ppc.o mimeenc.ppc.o minibidi.ppc.o ¶ 
     276                misc.ppc.o mtcpnet.ppc.o otnet.ppc.o pinger.ppc.o ¶ 
     277                portfwd.ppc.o pproxy.ppc.o proxy.ppc.o raw.ppc.o ¶ 
     278                rlogin.ppc.o sbcs.ppc.o sbcsdat.ppc.o settings.ppc.o ¶ 
     279                slookup.ppc.o ssh.ppc.o sshaes.ppc.o sshblowf.ppc.o ¶ 
     280                sshbn.ppc.o sshcrc.ppc.o sshcrcda.ppc.o sshdes.ppc.o ¶ 
     281                sshdh.ppc.o sshdss.ppc.o sshmd5.ppc.o sshpubk.ppc.o ¶ 
     282                sshrand.ppc.o sshrsa.ppc.o sshscard.ppc.o sshsh512.ppc.o ¶ 
    277283                sshsha.ppc.o sshzlib.ppc.o stricmp.ppc.o telnet.ppc.o ¶ 
    278284                terminal.ppc.o testback.ppc.o timing.ppc.o toucs.ppc.o ¶ 
    279285                tree234.ppc.o utf8.ppc.o version.ppc.o vsnprint.ppc.o ¶ 
    PuTTY.ppc Ä be_all.ppc.o config.ppc.o cp 
    283289 
    284290PuTTY.carbon Ä be_all.carbon.o config.carbon.o cproxy.carbon.o ¶ 
    285291                dialog.carbon.o fromucs.carbon.o ldisc.carbon.o ¶ 
    286                 ldiscucs.carbon.o localenc.carbon.o logging.carbon.o ¶ 
    287                 mac.carbon.o macabout.carbon.o macctrls.carbon.o ¶ 
    288                 macdlg.carbon.o macenc.carbon.o macevlog.carbon.o ¶ 
    289                 macmisc.carbon.o macnet.carbon.o macnoise.carbon.o ¶ 
    290                 macstore.carbon.o macterm.carbon.o macucs.carbon.o ¶ 
    291                 mimeenc.carbon.o minibidi.carbon.o misc.carbon.o ¶ 
    292                 mtcpnet.carbon.o otnet.carbon.o pinger.carbon.o ¶ 
    293                 portfwd.carbon.o pproxy.carbon.o proxy.carbon.o raw.carbon.o ¶ 
    294                 rlogin.carbon.o sbcs.carbon.o sbcsdat.carbon.o ¶ 
    295                 settings.carbon.o slookup.carbon.o ssh.carbon.o ¶ 
    296                 sshaes.carbon.o sshblowf.carbon.o sshbn.carbon.o ¶ 
    297                 sshcrc.carbon.o sshcrcda.carbon.o sshdes.carbon.o ¶ 
    298                 sshdh.carbon.o sshdss.carbon.o sshmd5.carbon.o ¶ 
    299                 sshpubk.carbon.o sshrand.carbon.o sshrsa.carbon.o ¶ 
     292                ldiscucs.carbon.o libpkcs11.carbon.o local_cmd.carbon.o ¶ 
     293                localenc.carbon.o logging.carbon.o mac.carbon.o ¶ 
     294                macabout.carbon.o macctrls.carbon.o macdlg.carbon.o ¶ 
     295                macenc.carbon.o macevlog.carbon.o macmisc.carbon.o ¶ 
     296                macnet.carbon.o macnoise.carbon.o macstore.carbon.o ¶ 
     297                macterm.carbon.o macucs.carbon.o mimeenc.carbon.o ¶ 
     298                minibidi.carbon.o misc.carbon.o mtcpnet.carbon.o ¶ 
     299                otnet.carbon.o pinger.carbon.o portfwd.carbon.o ¶ 
     300                pproxy.carbon.o proxy.carbon.o raw.carbon.o rlogin.carbon.o ¶ 
     301                sbcs.carbon.o sbcsdat.carbon.o settings.carbon.o ¶ 
     302                slookup.carbon.o ssh.carbon.o sshaes.carbon.o ¶ 
     303                sshblowf.carbon.o sshbn.carbon.o sshcrc.carbon.o ¶ 
     304                sshcrcda.carbon.o sshdes.carbon.o sshdh.carbon.o ¶ 
     305                sshdss.carbon.o sshmd5.carbon.o sshpubk.carbon.o ¶ 
     306                sshrand.carbon.o sshrsa.carbon.o sshscard.carbon.o ¶ 
    300307                sshsh512.carbon.o sshsha.carbon.o sshzlib.carbon.o ¶ 
    301308                stricmp.carbon.o telnet.carbon.o terminal.carbon.o ¶ 
    302309                testback.carbon.o timing.carbon.o toucs.carbon.o ¶ 
    PuTTY.carbon Ä be_all.carbon.o config.ca 
    307314        {Link_Carbon} -o {Targ} -fragname PuTTY {LinkOptions_Carbon} ¶ 
    308315                be_all.carbon.o config.carbon.o cproxy.carbon.o ¶ 
    309316                dialog.carbon.o fromucs.carbon.o ldisc.carbon.o ¶ 
    310                 ldiscucs.carbon.o localenc.carbon.o logging.carbon.o ¶ 
    311                 mac.carbon.o macabout.carbon.o macctrls.carbon.o ¶ 
    312                 macdlg.carbon.o macenc.carbon.o macevlog.carbon.o ¶ 
    313                 macmisc.carbon.o macnet.carbon.o macnoise.carbon.o ¶ 
    314                 macstore.carbon.o macterm.carbon.o macucs.carbon.o ¶ 
    315                 mimeenc.carbon.o minibidi.carbon.o misc.carbon.o ¶ 
    316                 mtcpnet.carbon.o otnet.carbon.o pinger.carbon.o ¶ 
    317                 portfwd.carbon.o pproxy.carbon.o proxy.carbon.o raw.carbon.o ¶ 
    318                 rlogin.carbon.o sbcs.carbon.o sbcsdat.carbon.o ¶ 
    319                 settings.carbon.o slookup.carbon.o ssh.carbon.o ¶ 
    320                 sshaes.carbon.o sshblowf.carbon.o sshbn.carbon.o ¶ 
    321                 sshcrc.carbon.o sshcrcda.carbon.o sshdes.carbon.o ¶ 
    322                 sshdh.carbon.o sshdss.carbon.o sshmd5.carbon.o ¶ 
    323                 sshpubk.carbon.o sshrand.carbon.o sshrsa.carbon.o ¶ 
     317                ldiscucs.carbon.o libpkcs11.carbon.o local_cmd.carbon.o ¶ 
     318                localenc.carbon.o logging.carbon.o mac.carbon.o ¶ 
     319                macabout.carbon.o macctrls.carbon.o macdlg.carbon.o ¶ 
     320                macenc.carbon.o macevlog.carbon.o macmisc.carbon.o ¶ 
     321                macnet.carbon.o macnoise.carbon.o macstore.carbon.o ¶ 
     322                macterm.carbon.o macucs.carbon.o mimeenc.carbon.o ¶ 
     323                minibidi.carbon.o misc.carbon.o mtcpnet.carbon.o ¶ 
     324                otnet.carbon.o pinger.carbon.o portfwd.carbon.o ¶ 
     325                pproxy.carbon.o proxy.carbon.o raw.carbon.o rlogin.carbon.o ¶ 
     326                sbcs.carbon.o sbcsdat.carbon.o settings.carbon.o ¶ 
     327                slookup.carbon.o ssh.carbon.o sshaes.carbon.o ¶ 
     328                sshblowf.carbon.o sshbn.carbon.o sshcrc.carbon.o ¶ 
     329                sshcrcda.carbon.o sshdes.carbon.o sshdh.carbon.o ¶ 
     330                sshdss.carbon.o sshmd5.carbon.o sshpubk.carbon.o ¶ 
     331                sshrand.carbon.o sshrsa.carbon.o sshscard.carbon.o ¶ 
    324332                sshsh512.carbon.o sshsha.carbon.o sshzlib.carbon.o ¶ 
    325333                stricmp.carbon.o telnet.carbon.o terminal.carbon.o ¶ 
    326334                testback.carbon.o timing.carbon.o toucs.carbon.o ¶ 
    ldiscucs.68k.o Ä ::ldiscucs.c ::putty.h  
    657665                ::windows:winhelp.h ::charset:charset.h 
    658666        {C_68K} ::ldiscucs.c -o {Targ} {COptions_68K} 
    659667 
     668libpkcs11.68k.o Ä ::libpkcs11.c ::pkcs11.h ::ppkcs11.h 
     669        {C_68K} ::libpkcs11.c -o {Targ} {COptions_68K} 
     670 
     671local_cmd.68k.o Ä ::local_cmd.c 
     672        {C_68K} ::local_cmd.c -o {Targ} {COptions_68K} 
     673 
    660674localenc.68k.o Ä ::charset:localenc.c ::charset:charset.h ¶ 
    661675                ::charset:internal.h 
    662676        {C_68K} ::charset:localenc.c -o {Targ} {COptions_68K} 
    slookup.68k.o Ä ::charset:slookup.c ::ch 
    902916                ::charset:enum.c ::charset:sbcsdat.c ::charset:utf8.c 
    903917        {C_68K} ::charset:slookup.c -o {Targ} {COptions_68K} 
    904918 
    905 ssh.68k.o Ä ::ssh.c ::putty.h ::tree234.h ::ssh.h ::puttyps.h ::network.h ¶ 
    906                 ::misc.h ::puttymem.h ::int64.h ::windows:winstuff.h ¶ 
     919ssh.68k.o Ä ::ssh.c ::putty.h ::tree234.h ::ssh.h ::pkcs11.h ::ppkcs11.h ::sshscard.h ¶ 
     920                ::puttyps.h ::network.h ::misc.h ::puttymem.h ::int64.h ¶ 
     921                ::windows:winstuff.h ¶ 
    907922                ::mac:macstuff.h ::macosx:osx.h ::unix:unix.h ¶ 
    908923                ::windows:winhelp.h ::charset:charset.h 
    909924        {C_68K} ::ssh.c -o {Targ} {COptions_68K} 
    sshrsag.68k.o Ä ::sshrsag.c ::ssh.h ::pu 
    970985                ::misc.h 
    971986        {C_68K} ::sshrsag.c -o {Targ} {COptions_68K} 
    972987 
     988sshscard.68k.o Ä ::sshscard.c ::ssh.h ::sshrsa.h ::pkcs11.h ::ppkcs11.h ::sshscard.h ¶ 
     989                ::putty.h ::puttymem.h ::network.h ::int64.h ::misc.h ¶ 
     990                ::puttyps.h ¶ 
     991                ::windows:winstuff.h ::mac:macstuff.h ::macosx:osx.h ¶ 
     992                ::unix:unix.h ::tree234.h ::windows:winhelp.h ¶ 
     993                ::charset:charset.h 
     994        {C_68K} ::sshscard.c -o {Targ} {COptions_68K} 
     995 
    973996sshsh512.68k.o Ä ::sshsh512.c ::ssh.h ::puttymem.h ::network.h ::int64.h ¶ 
    974997                ::misc.h 
    975998        {C_68K} ::sshsh512.c -o {Targ} {COptions_68K} 
    winpgen.68k.o Ä ::windows:winpgen.c ::pu 
    12241247        {C_68K} ::windows:winpgen.c -o {Targ} {COptions_68K} 
    12251248 
    12261249winpgnt.68k.o Ä ::windows:winpgnt.c ::putty.h ::ssh.h ::misc.h ::tree234.h ¶ 
    1227                 ::puttyps.h ::network.h ::puttymem.h ::int64.h ¶ 
     1250                ::sshscard.h ::puttyps.h ::network.h ::puttymem.h ::int64.h ¶ 
    12281251                ::windows:winstuff.h ::mac:macstuff.h ::macosx:osx.h ¶ 
    12291252                ::unix:unix.h ::windows:winhelp.h ::charset:charset.h 
    12301253        {C_68K} ::windows:winpgnt.c -o {Targ} {COptions_68K} 
    ldiscucs.cfm68k.o Ä ::ldiscucs.c ::putty 
    13891412                ::charset:charset.h 
    13901413        {C_CFM68K} ::ldiscucs.c -o {Targ} {COptions_CFM68K} 
    13911414 
     1415libpkcs11.cfm68k.o Ä ::libpkcs11.c ::pkcs11.h ::ppkcs11.h 
     1416        {C_CFM68K} ::libpkcs11.c -o {Targ} {COptions_CFM68K} 
     1417 
     1418local_cmd.cfm68k.o Ä ::local_cmd.c 
     1419        {C_CFM68K} ::local_cmd.c -o {Targ} {COptions_CFM68K} 
     1420 
    13921421localenc.cfm68k.o Ä ::charset:localenc.c ::charset:charset.h ¶ 
    13931422                ::charset:internal.h 
    13941423        {C_CFM68K} ::charset:localenc.c -o {Targ} {COptions_CFM68K} 
    slookup.cfm68k.o Ä ::charset:slookup.c : 
    16391668                ::charset:utf8.c 
    16401669        {C_CFM68K} ::charset:slookup.c -o {Targ} {COptions_CFM68K} 
    16411670 
    1642 ssh.cfm68k.o Ä ::ssh.c ::putty.h ::tree234.h ::ssh.h ::puttyps.h ::network.h ¶ 
    1643                 ::misc.h ::puttymem.h ::int64.h ::windows:winstuff.h ¶ 
     1671ssh.cfm68k.o Ä ::ssh.c ::putty.h ::tree234.h ::ssh.h ::pkcs11.h ::ppkcs11.h ::sshscard.h ¶ 
     1672                ::puttyps.h ::network.h ::misc.h ::puttymem.h ::int64.h ¶ 
     1673                ::windows:winstuff.h ¶ 
    16441674                ::mac:macstuff.h ::macosx:osx.h ::unix:unix.h ¶ 
    16451675                ::windows:winhelp.h ::charset:charset.h 
    16461676        {C_CFM68K} ::ssh.c -o {Targ} {COptions_CFM68K} 
    sshrsag.cfm68k.o Ä ::sshrsag.c ::ssh.h : 
    17091739                ::misc.h 
    17101740        {C_CFM68K} ::sshrsag.c -o {Targ} {COptions_CFM68K} 
    17111741 
     1742sshscard.cfm68k.o Ä ::sshscard.c ::ssh.h ::sshrsa.h ::pkcs11.h ::ppkcs11.h ::sshscard.h ¶ 
     1743                ::putty.h ::puttymem.h ::network.h ::int64.h ::misc.h ¶ 
     1744                ::puttyps.h ¶ 
     1745                ::windows:winstuff.h ::mac:macstuff.h ::macosx:osx.h ¶ 
     1746                ::unix:unix.h ::tree234.h ::windows:winhelp.h ¶ 
     1747                ::charset:charset.h 
     1748        {C_CFM68K} ::sshscard.c -o {Targ} {COptions_CFM68K} 
     1749 
    17121750sshsh512.cfm68k.o Ä ::sshsh512.c ::ssh.h ::puttymem.h ::network.h ::int64.h ¶ 
    17131751                ::misc.h 
    17141752        {C_CFM68K} ::sshsh512.c -o {Targ} {COptions_CFM68K} 
    winpgen.cfm68k.o Ä ::windows:winpgen.c : 
    19632001        {C_CFM68K} ::windows:winpgen.c -o {Targ} {COptions_CFM68K} 
    19642002 
    19652003winpgnt.cfm68k.o Ä ::windows:winpgnt.c ::putty.h ::ssh.h ::misc.h ¶ 
    1966                 ::tree234.h ::puttyps.h ::network.h ::puttymem.h ::int64.h ¶ 
    1967                 ::windows:winstuff.h ::mac:macstuff.h ::macosx:osx.h ¶ 
    1968                 ::unix:unix.h ::windows:winhelp.h ::charset:charset.h 
     2004                ::tree234.h ::sshscard.h ::puttyps.h ::network.h ¶ 
     2005                ::puttymem.h ::int64.h ::windows:winstuff.h ::mac:macstuff.h ¶ 
     2006                ::macosx:osx.h ::unix:unix.h ::windows:winhelp.h ¶ 
     2007                ::charset:charset.h 
    19692008        {C_CFM68K} ::windows:winpgnt.c -o {Targ} {COptions_CFM68K} 
    19702009 
    19712010winpgntc.cfm68k.o Ä ::windows:winpgntc.c ::putty.h ::puttyps.h ::network.h ¶ 
    ldiscucs.ppc.o Ä ::ldiscucs.c ::putty.h  
    21622201        setfile -t XCOF {Targ} 
    21632202        {C_PPC} ::ldiscucs.c -o {Targ} {COptions_PPC} 
    21642203 
     2204libpkcs11.ppc.o Ä ::libpkcs11.c ::pkcs11.h ::ppkcs11.h 
     2205        echo -n > {Targ} 
     2206        setfile -t XCOF {Targ} 
     2207        {C_PPC} ::libpkcs11.c -o {Targ} {COptions_PPC} 
     2208 
     2209local_cmd.ppc.o Ä ::local_cmd.c 
     2210        echo -n > {Targ} 
     2211        setfile -t XCOF {Targ} 
     2212        {C_PPC} ::local_cmd.c -o {Targ} {COptions_PPC} 
     2213 
    21652214localenc.ppc.o Ä ::charset:localenc.c ::charset:charset.h ¶ 
    21662215                ::charset:internal.h 
    21672216        echo -n > {Targ} 
    slookup.ppc.o Ä ::charset:slookup.c ::ch 
    24912540        setfile -t XCOF {Targ} 
    24922541        {C_PPC} ::charset:slookup.c -o {Targ} {COptions_PPC} 
    24932542 
    2494 ssh.ppc.o Ä ::ssh.c ::putty.h ::tree234.h ::ssh.h ::puttyps.h ::network.h ¶ 
    2495                 ::misc.h ::puttymem.h ::int64.h ::windows:winstuff.h ¶ 
     2543ssh.ppc.o Ä ::ssh.c ::putty.h ::tree234.h ::ssh.h ::pkcs11.h ::ppkcs11.h ::sshscard.h ¶ 
     2544                ::puttyps.h ::network.h ::misc.h ::puttymem.h ::int64.h ¶ 
     2545                ::windows:winstuff.h ¶ 
    24962546                ::mac:macstuff.h ::macosx:osx.h ::unix:unix.h ¶ 
    24972547                ::windows:winhelp.h ::charset:charset.h 
    24982548        echo -n > {Targ} 
    sshrsag.ppc.o Ä ::sshrsag.c ::ssh.h ::pu 
    25912641        setfile -t XCOF {Targ} 
    25922642        {C_PPC} ::sshrsag.c -o {Targ} {COptions_PPC} 
    25932643 
     2644sshscard.ppc.o Ä ::sshscard.c ::ssh.h ::sshrsa.h ::pkcs11.h ::ppkcs11.h ::sshscard.h ¶ 
     2645                ::putty.h ::puttymem.h ::network.h ::int64.h ::misc.h ¶ 
     2646                ::puttyps.h ¶ 
     2647                ::windows:winstuff.h ::mac:macstuff.h ::macosx:osx.h ¶ 
     2648                ::unix:unix.h ::tree234.h ::windows:winhelp.h ¶ 
     2649                ::charset:charset.h 
     2650        echo -n > {Targ} 
     2651        setfile -t XCOF {Targ} 
     2652        {C_PPC} ::sshscard.c -o {Targ} {COptions_PPC} 
     2653 
    25942654sshsh512.ppc.o Ä ::sshsh512.c ::ssh.h ::puttymem.h ::network.h ::int64.h ¶ 
    25952655                ::misc.h 
    25962656        echo -n > {Targ} 
    winpgen.ppc.o Ä ::windows:winpgen.c ::pu 
    29352995        {C_PPC} ::windows:winpgen.c -o {Targ} {COptions_PPC} 
    29362996 
    29372997winpgnt.ppc.o Ä ::windows:winpgnt.c ::putty.h ::ssh.h ::misc.h ::tree234.h ¶ 
    2938                 ::puttyps.h ::network.h ::puttymem.h ::int64.h ¶ 
     2998                ::sshscard.h ::puttyps.h ::network.h ::puttymem.h ::int64.h ¶ 
    29392999                ::windows:winstuff.h ::mac:macstuff.h ::macosx:osx.h ¶ 
    29403000                ::unix:unix.h ::windows:winhelp.h ::charset:charset.h 
    29413001        echo -n > {Targ} 
    ldiscucs.carbon.o Ä ::ldiscucs.c ::putty 
    31603220        setfile -t XCOF {Targ} 
    31613221        {C_Carbon} ::ldiscucs.c -o {Targ} {COptions_Carbon} 
    31623222 
     3223libpkcs11.carbon.o Ä ::libpkcs11.c ::pkcs11.h ::ppkcs11.h 
     3224        echo -n > {Targ} 
     3225        setfile -t XCOF {Targ} 
     3226        {C_Carbon} ::libpkcs11.c -o {Targ} {COptions_Carbon} 
     3227 
     3228local_cmd.carbon.o Ä ::local_cmd.c 
     3229        echo -n > {Targ} 
     3230        setfile -t XCOF {Targ} 
     3231        {C_Carbon} ::local_cmd.c -o {Targ} {COptions_Carbon} 
     3232 
    31633233localenc.carbon.o Ä ::charset:localenc.c ::charset:charset.h ¶ 
    31643234                ::charset:internal.h 
    31653235        echo -n > {Targ} 
    slookup.carbon.o Ä ::charset:slookup.c : 
    34943564        setfile -t XCOF {Targ} 
    34953565        {C_Carbon} ::charset:slookup.c -o {Targ} {COptions_Carbon} 
    34963566 
    3497 ssh.carbon.o Ä ::ssh.c ::putty.h ::tree234.h ::ssh.h ::puttyps.h ::network.h ¶ 
    3498                 ::misc.h ::puttymem.h ::int64.h ::windows:winstuff.h ¶ 
     3567ssh.carbon.o Ä ::ssh.c ::putty.h ::tree234.h ::ssh.h ::pkcs11.h ::ppkcs11.h ::sshscard.h ¶ 
     3568                ::puttyps.h ::network.h ::misc.h ::puttymem.h ::int64.h ¶ 
     3569                ::windows:winstuff.h ¶ 
    34993570                ::mac:macstuff.h ::macosx:osx.h ::unix:unix.h ¶ 
    35003571                ::windows:winhelp.h ::charset:charset.h 
    35013572        echo -n > {Targ} 
    sshrsag.carbon.o Ä ::sshrsag.c ::ssh.h : 
    35963667        setfile -t XCOF {Targ} 
    35973668        {C_Carbon} ::sshrsag.c -o {Targ} {COptions_Carbon} 
    35983669 
     3670sshscard.carbon.o Ä ::sshscard.c ::ssh.h ::sshrsa.h ::pkcs11.h ::ppkcs11.h ::sshscard.h ¶ 
     3671                ::putty.h ::puttymem.h ::network.h ::int64.h ::misc.h ¶ 
     3672                ::puttyps.h ¶ 
     3673                ::windows:winstuff.h ::mac:macstuff.h ::macosx:osx.h ¶ 
     3674                ::unix:unix.h ::tree234.h ::windows:winhelp.h ¶ 
     3675                ::charset:charset.h 
     3676        echo -n > {Targ} 
     3677        setfile -t XCOF {Targ} 
     3678        {C_Carbon} ::sshscard.c -o {Targ} {COptions_Carbon} 
     3679 
    35993680sshsh512.carbon.o Ä ::sshsh512.c ::ssh.h ::puttymem.h ::network.h ::int64.h ¶ 
    36003681                ::misc.h 
    36013682        echo -n > {Targ} 
    winpgen.carbon.o Ä ::windows:winpgen.c : 
    39404021        {C_Carbon} ::windows:winpgen.c -o {Targ} {COptions_Carbon} 
    39414022 
    39424023winpgnt.carbon.o Ä ::windows:winpgnt.c ::putty.h ::ssh.h ::misc.h ¶ 
    3943                 ::tree234.h ::puttyps.h ::network.h ::puttymem.h ::int64.h ¶ 
    3944                 ::windows:winstuff.h ::mac:macstuff.h ::macosx:osx.h ¶ 
    3945                 ::unix:unix.h ::windows:winhelp.h ::charset:charset.h 
     4024                ::tree234.h ::sshscard.h ::puttyps.h ::network.h ¶ 
     4025                ::puttymem.h ::int64.h ::windows:winstuff.h ::mac:macstuff.h ¶ 
     4026                ::macosx:osx.h ::unix:unix.h ::windows:winhelp.h ¶ 
     4027                ::charset:charset.h 
    39464028        echo -n > {Targ} 
    39474029        setfile -t XCOF {Targ} 
    39484030        {C_Carbon} ::windows:winpgnt.c -o {Targ} {COptions_Carbon} 
  • macosx/Makefile

    diff -urNp putty-0.58.org/macosx/Makefile putty-0.58+smartcard/macosx/Makefile
    old new PuTTY: PuTTY.app/Contents/MacOS/PuTTY \ 
    104104                PuTTY.app/Contents/Info.plist $(PuTTY_extra) 
    105105 
    106106PuTTY.app/Contents/MacOS/PuTTY: PuTTY.app/Contents/MacOS be_all.o config.o \ 
    107                 cproxy.o dialog.o fromucs.o ldisc.o ldiscucs.o localenc.o \ 
    108                 logging.o macenc.o mimeenc.o minibidi.o misc.o osxctrls.o \ 
    109                 osxdlg.o osxmain.o osxsel.o osxwin.o pinger.o portfwd.o \ 
    110                 proxy.o raw.o rlogin.o sbcs.o sbcsdat.o settings.o slookup.o \ 
    111                 ssh.o sshaes.o sshblowf.o sshbn.o sshcrc.o sshcrcda.o \ 
    112                 sshdes.o sshdh.o sshdss.o sshmd5.o sshpubk.o sshrand.o \ 
    113                 sshrsa.o sshsh512.o sshsha.o sshzlib.o telnet.o terminal.o \ 
    114                 testback.o time.o timing.o toucs.o tree234.o utf8.o ux_x11.o \ 
    115                 uxagentc.o uxcfg.o uxmisc.o uxnet.o uxnoise.o uxprint.o \ 
    116                 uxproxy.o uxpty.o uxsel.o uxsignal.o uxstore.o uxucs.o \ 
    117                 version.o wcwidth.o wildcard.o x11fwd.o xenc.o 
    118         $(CC) $(MLDFLAGS) -o $@ be_all.o config.o cproxy.o dialog.o \ 
    119                 fromucs.o ldisc.o ldiscucs.o localenc.o logging.o macenc.o \ 
    120                 mimeenc.o minibidi.o misc.o osxctrls.o osxdlg.o osxmain.o \ 
    121                 osxsel.o osxwin.o pinger.o portfwd.o proxy.o raw.o rlogin.o \ 
    122                 sbcs.o sbcsdat.o settings.o slookup.o ssh.o sshaes.o \ 
    123                 sshblowf.o sshbn.o sshcrc.o sshcrcda.o sshdes.o sshdh.o \ 
    124                 sshdss.o sshmd5.o sshpubk.o sshrand.o sshrsa.o sshsh512.o \ 
     107                cproxy.o dialog.o fromucs.o ldisc.o ldiscucs.o libpkcs11.o \ 
     108                local_cmd.o localenc.o logging.o macenc.o mimeenc.o \ 
     109                minibidi.o misc.o osxctrls.o osxdlg.o osxmain.o osxsel.o \ 
     110                osxwin.o pinger.o portfwd.o proxy.o raw.o rlogin.o sbcs.o \ 
     111                sbcsdat.o settings.o slookup.o ssh.o sshaes.o sshblowf.o \ 
     112                sshbn.o sshcrc.o sshcrcda.o sshdes.o sshdh.o sshdss.o \ 
     113                sshmd5.o sshpubk.o sshrand.o sshrsa.o sshscard.o sshsh512.o \ 
    125114                sshsha.o sshzlib.o telnet.o terminal.o testback.o time.o \ 
    126115                timing.o toucs.o tree234.o utf8.o ux_x11.o uxagentc.o \ 
    127116                uxcfg.o uxmisc.o uxnet.o uxnoise.o uxprint.o uxproxy.o \ 
    128117                uxpty.o uxsel.o uxsignal.o uxstore.o uxucs.o version.o \ 
    129                 wcwidth.o wildcard.o x11fwd.o xenc.o  
     118                wcwidth.o wildcard.o x11fwd.o xenc.o 
     119        $(CC) $(MLDFLAGS) -o $@ be_all.o config.o cproxy.o dialog.o \ 
     120                fromucs.o ldisc.o ldiscucs.o libpkcs11.o local_cmd.o \ 
     121                localenc.o logging.o macenc.o mimeenc.o minibidi.o misc.o \ 
     122                osxctrls.o osxdlg.o osxmain.o osxsel.o osxwin.o pinger.o \ 
     123                portfwd.o proxy.o raw.o rlogin.o sbcs.o sbcsdat.o settings.o \ 
     124                slookup.o ssh.o sshaes.o sshblowf.o sshbn.o sshcrc.o \ 
     125                sshcrcda.o sshdes.o sshdh.o sshdss.o sshmd5.o sshpubk.o \ 
     126                sshrand.o sshrsa.o sshscard.o sshsh512.o sshsha.o sshzlib.o \ 
     127                telnet.o terminal.o testback.o time.o timing.o toucs.o \ 
     128                tree234.o utf8.o ux_x11.o uxagentc.o uxcfg.o uxmisc.o \ 
     129                uxnet.o uxnoise.o uxprint.o uxproxy.o uxpty.o uxsel.o \ 
     130                uxsignal.o uxstore.o uxucs.o version.o wcwidth.o wildcard.o \ 
     131                x11fwd.o xenc.o  
    130132 
    131 plink: be_all.o cmdline.o cproxy.o ldisc.o logging.o misc.o pinger.o \ 
    132                 portfwd.o proxy.o raw.o rlogin.o settings.o ssh.o sshaes.o \ 
    133                 sshblowf.o sshbn.o sshcrc.o sshcrcda.o sshdes.o sshdh.o \ 
    134                 sshdss.o sshmd5.o sshpubk.o sshrand.o sshrsa.o sshsh512.o \ 
     133plink: be_all.o cmdline.o cproxy.o ldisc.o libpkcs11.o local_cmd.o logging.o \ 
     134                misc.o pinger.o portfwd.o proxy.o raw.o rlogin.o settings.o \ 
     135                ssh.o sshaes.o sshblowf.o sshbn.o sshcrc.o sshcrcda.o \ 
     136                sshdes.o sshdh.o sshdss.o sshmd5.o sshpubk.o sshrand.o \ 
     137                sshrsa.o sshscard.o sshsh512.o sshsha.o sshzlib.o telnet.o \ 
     138                time.o timing.o tree234.o ux_x11.o uxagentc.o uxcons.o \ 
     139                uxmisc.o uxnet.o uxnoise.o uxplink.o uxproxy.o uxsel.o \ 
     140                uxsignal.o uxstore.o version.o wildcard.o x11fwd.o 
     141        $(CC) $(ULDFLAGS) -o $@ be_all.o cmdline.o cproxy.o ldisc.o \ 
     142                libpkcs11.o local_cmd.o logging.o misc.o pinger.o portfwd.o \ 
     143                proxy.o raw.o rlogin.o settings.o ssh.o sshaes.o sshblowf.o \ 
     144                sshbn.o sshcrc.o sshcrcda.o sshdes.o sshdh.o sshdss.o \ 
     145                sshmd5.o sshpubk.o sshrand.o sshrsa.o sshscard.o sshsh512.o \ 
    135146                sshsha.o sshzlib.o telnet.o time.o timing.o tree234.o \ 
    136147                ux_x11.o uxagentc.o uxcons.o uxmisc.o uxnet.o uxnoise.o \ 
    137148                uxplink.o uxproxy.o uxsel.o uxsignal.o uxstore.o version.o \ 
    138                 wildcard.o x11fwd.o 
    139         $(CC) $(ULDFLAGS) -o $@ be_all.o cmdline.o cproxy.o ldisc.o \ 
    140                 logging.o misc.o pinger.o portfwd.o proxy.o raw.o rlogin.o \ 
    141                 settings.o ssh.o sshaes.o sshblowf.o sshbn.o sshcrc.o \ 
    142                 sshcrcda.o sshdes.o sshdh.o sshdss.o sshmd5.o sshpubk.o \ 
    143                 sshrand.o sshrsa.o sshsh512.o sshsha.o sshzlib.o telnet.o \ 
    144                 time.o timing.o tree234.o ux_x11.o uxagentc.o uxcons.o \ 
    145                 uxmisc.o uxnet.o uxnoise.o uxplink.o uxproxy.o uxsel.o \ 
    146                 uxsignal.o uxstore.o version.o wildcard.o x11fwd.o  
     149                wildcard.o x11fwd.o  
    147150 
    148 pscp: be_none.o cmdline.o cproxy.o int64.o logging.o misc.o pinger.o \ 
    149                 portfwd.o proxy.o pscp.o settings.o sftp.o ssh.o sshaes.o \ 
    150                 sshblowf.o sshbn.o sshcrc.o sshcrcda.o sshdes.o sshdh.o \ 
    151                 sshdss.o sshmd5.o sshpubk.o sshrand.o sshrsa.o sshsh512.o \ 
    152                 sshsha.o sshzlib.o time.o timing.o tree234.o uxagentc.o \ 
    153                 uxcons.o uxmisc.o uxnet.o uxnoise.o uxproxy.o uxsel.o \ 
    154                 uxsftp.o uxstore.o version.o wildcard.o x11fwd.o 
    155         $(CC) $(ULDFLAGS) -o $@ be_none.o cmdline.o cproxy.o int64.o \ 
    156                 logging.o misc.o pinger.o portfwd.o proxy.o pscp.o \ 
    157                 settings.o sftp.o ssh.o sshaes.o sshblowf.o sshbn.o sshcrc.o \ 
    158                 sshcrcda.o sshdes.o sshdh.o sshdss.o sshmd5.o sshpubk.o \ 
    159                 sshrand.o sshrsa.o sshsh512.o sshsha.o sshzlib.o time.o \ 
     151pscp: be_none.o cmdline.o cproxy.o int64.o libpkcs11.o local_cmd.o logging.o \ 
     152                misc.o pinger.o portfwd.o proxy.o pscp.o settings.o sftp.o \ 
     153                ssh.o sshaes.o sshblowf.o sshbn.o sshcrc.o sshcrcda.o \ 
     154                sshdes.o sshdh.o sshdss.o sshmd5.o sshpubk.o sshrand.o \ 
     155                sshrsa.o sshscard.o sshsh512.o sshsha.o sshzlib.o time.o \ 
    160156                timing.o tree234.o uxagentc.o uxcons.o uxmisc.o uxnet.o \ 
    161157                uxnoise.o uxproxy.o uxsel.o uxsftp.o uxstore.o version.o \ 
    162                 wildcard.o x11fwd.o  
    163  
    164 psftp: be_none.o cmdline.o cproxy.o int64.o logging.o misc.o pinger.o \ 
    165                 portfwd.o proxy.o psftp.o settings.o sftp.o ssh.o sshaes.o \ 
    166                 sshblowf.o sshbn.o sshcrc.o sshcrcda.o sshdes.o sshdh.o \ 
    167                 sshdss.o sshmd5.o sshpubk.o sshrand.o sshrsa.o sshsh512.o \ 
     158                wildcard.o x11fwd.o 
     159        $(CC) $(ULDFLAGS) -o $@ be_none.o cmdline.o cproxy.o int64.o \ 
     160                libpkcs11.o local_cmd.o logging.o misc.o pinger.o portfwd.o \ 
     161                proxy.o pscp.o settings.o sftp.o ssh.o sshaes.o sshblowf.o \ 
     162                sshbn.o sshcrc.o sshcrcda.o sshdes.o sshdh.o sshdss.o \ 
     163                sshmd5.o sshpubk.o sshrand.o sshrsa.o sshscard.o sshsh512.o \ 
    168164                sshsha.o sshzlib.o time.o timing.o tree234.o uxagentc.o \ 
    169165                uxcons.o uxmisc.o uxnet.o uxnoise.o uxproxy.o uxsel.o \ 
    170                 uxsftp.o uxstore.o version.o wildcard.o x11fwd.o 
    171         $(CC) $(ULDFLAGS) -o $@ be_none.o cmdline.o cproxy.o int64.o \ 
     166                uxsftp.o uxstore.o version.o wildcard.o x11fwd.o  
     167 
     168psftp: be_none.o cmdline.o cproxy.o int64.o libpkcs11.o local_cmd.o \ 
    172169                logging.o misc.o pinger.o portfwd.o proxy.o psftp.o \ 
    173170                settings.o sftp.o ssh.o sshaes.o sshblowf.o sshbn.o sshcrc.o \ 
    174171                sshcrcda.o sshdes.o sshdh.o sshdss.o sshmd5.o sshpubk.o \ 
    175                 sshrand.o sshrsa.o sshsh512.o sshsha.o sshzlib.o time.o \ 
    176                 timing.o tree234.o uxagentc.o uxcons.o uxmisc.o uxnet.o \ 
    177                 uxnoise.o uxproxy.o uxsel.o uxsftp.o uxstore.o version.o \ 
    178                 wildcard.o x11fwd.o  
     172                sshrand.o sshrsa.o sshscard.o sshsh512.o sshsha.o sshzlib.o \ 
     173                time.o timing.o tree234.o uxagentc.o uxcons.o uxmisc.o \ 
     174                uxnet.o uxnoise.o uxproxy.o uxsel.o uxsftp.o uxstore.o \ 
     175                version.o wildcard.o x11fwd.o 
     176        $(CC) $(ULDFLAGS) -o $@ be_none.o cmdline.o cproxy.o int64.o \ 
     177                libpkcs11.o local_cmd.o logging.o misc.o pinger.o portfwd.o \ 
     178                proxy.o psftp.o settings.o sftp.o ssh.o sshaes.o sshblowf.o \ 
     179                sshbn.o sshcrc.o sshcrcda.o sshdes.o sshdh.o sshdss.o \ 
     180                sshmd5.o sshpubk.o sshrand.o sshrsa.o sshscard.o sshsh512.o \ 
     181                sshsha.o sshzlib.o time.o timing.o tree234.o uxagentc.o \ 
     182                uxcons.o uxmisc.o uxnet.o uxnoise.o uxproxy.o uxsel.o \ 
     183                uxsftp.o uxstore.o version.o wildcard.o x11fwd.o  
    179184 
    180185puttygen: cmdgen.o import.o misc.o notiming.o sshaes.o sshbn.o sshdes.o \ 
    181186                sshdss.o sshdssg.o sshmd5.o sshprime.o sshpubk.o sshrand.o \ 
    ldiscucs.o: ../ldiscucs.c ../putty.h ../ 
    269274                ../mac/macstuff.h ../macosx/osx.h ../unix/unix.h \ 
    270275                ../puttymem.h ../windows/winhelp.h ../charset/charset.h 
    271276        $(CC) $(COMPAT) $(FWHACK) $(XFLAGS) $(CFLAGS) -c $< 
     277libpkcs11.o: ../libpkcs11.c ../pkcs11.h ../ppkcs11.h 
     278        $(CC) $(COMPAT) $(FWHACK) $(XFLAGS) $(CFLAGS) -c $< 
     279local_cmd.o: ../local_cmd.c 
     280        $(CC) $(COMPAT) $(FWHACK) $(XFLAGS) $(CFLAGS) -c $< 
    272281localenc.o: ../charset/localenc.c ../charset/charset.h ../charset/internal.h 
    273282        $(CC) $(COMPAT) $(FWHACK) $(XFLAGS) $(CFLAGS) -c $< 
    274283logging.o: ../logging.c ../putty.h ../puttyps.h ../network.h ../misc.h \ 
    sizetip.o: ../windows/sizetip.c ../putty 
    476485slookup.o: ../charset/slookup.c ../charset/charset.h ../charset/internal.h \ 
    477486                ../charset/enum.c ../charset/sbcsdat.c ../charset/utf8.c 
    478487        $(CC) $(COMPAT) $(FWHACK) $(XFLAGS) $(CFLAGS) -c $< 
    479 ssh.o: ../ssh.c ../putty.h ../tree234.h ../ssh.h ../puttyps.h ../network.h \ 
    480                 ../misc.h ../puttymem.h ../int64.h ../windows/winstuff.h \ 
     488ssh.o: ../ssh.c ../putty.h ../tree234.h ../ssh.h ../pkcs11.h ../ppkcs11.h ../sshscard.h \ 
     489                ../puttyps.h ../network.h ../misc.h ../puttymem.h ../int64.h \ 
     490                ../windows/winstuff.h \ 
    481491                ../mac/macstuff.h ../macosx/osx.h ../unix/unix.h \ 
    482492                ../windows/winhelp.h ../charset/charset.h 
    483493        $(CC) $(COMPAT) $(FWHACK) $(XFLAGS) $(CFLAGS) -c $< 
    sshrsa.o: ../sshrsa.c ../ssh.h ../misc.h 
    528538sshrsag.o: ../sshrsag.c ../ssh.h ../puttymem.h ../network.h ../int64.h \ 
    529539                ../misc.h 
    530540        $(CC) $(COMPAT) $(FWHACK) $(XFLAGS) $(CFLAGS) -c $< 
     541sshscard.o: ../sshscard.c ../ssh.h ../sshrsa.h ../pkcs11.h ../ppkcs11.h ../sshscard.h \ 
     542                ../putty.h ../puttymem.h ../network.h ../int64.h ../misc.h \ 
     543                ../puttyps.h \ 
     544                ../windows/winstuff.h ../mac/macstuff.h ../macosx/osx.h \ 
     545                ../unix/unix.h ../tree234.h ../windows/winhelp.h \ 
     546                ../charset/charset.h 
     547        $(CC) $(COMPAT) $(FWHACK) $(XFLAGS) $(CFLAGS) -c $< 
    531548sshsh512.o: ../sshsh512.c ../ssh.h ../puttymem.h ../network.h ../int64.h \ 
    532549                ../misc.h 
    533550        $(CC) $(COMPAT) $(FWHACK) $(XFLAGS) $(CFLAGS) -c $< 
    winpgen.o: ../windows/winpgen.c ../putty 
    741758                ../charset/charset.h 
    742759        $(CC) $(COMPAT) $(FWHACK) $(XFLAGS) $(CFLAGS) -c $< 
    743760winpgnt.o: ../windows/winpgnt.c ../putty.h ../ssh.h ../misc.h ../tree234.h \ 
    744                 ../puttyps.h ../network.h ../puttymem.h ../int64.h \ 
    745                 ../windows/winstuff.h ../mac/macstuff.h ../macosx/osx.h \ 
    746                 ../unix/unix.h ../windows/winhelp.h ../charset/charset.h 
     761                ../sshscard.h ../puttyps.h ../network.h ../puttymem.h \ 
     762                ../int64.h ../windows/winstuff.h ../mac/macstuff.h \ 
     763                ../macosx/osx.h ../unix/unix.h ../windows/winhelp.h \ 
     764                ../charset/charset.h 
    747765        $(CC) $(COMPAT) $(FWHACK) $(XFLAGS) $(CFLAGS) -c $< 
    748766winpgntc.o: ../windows/winpgntc.c ../putty.h ../puttyps.h ../network.h \ 
    749767                ../misc.h ../windows/winstuff.h ../mac/macstuff.h \ 
  • pkcs11.h

    diff -urNp putty-0.58.org/pkcs11.h putty-0.58+smartcard/pkcs11.h
    old new  
     1/* pkcs11.h 
     2   Copyright 2006, 2007 g10 Code GmbH 
     3   Copyright 2006 Andreas Jellinghaus 
     4 
     5   This file is free software; as a special exception the author gives 
     6   unlimited permission to copy and/or distribute it, with or without 
     7   modifications, as long as this notice is preserved. 
     8 
     9   This file is distributed in the hope that it will be useful, but 
     10   WITHOUT ANY WARRANTY, to the extent permitted by law; without even 
     11   the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
     12   PURPOSE.  */ 
     13 
     14/* Please submit changes back to the Scute project at 
     15   http://www.scute.org/ (or send them to marcus@g10code.com), so that 
     16   they can be picked up by other projects from there as well.  */ 
     17 
     18/* This file is a modified implementation of the PKCS #11 standard by 
     19   RSA Security Inc.  It is mostly a drop-in replacement, with the 
     20   following change: 
     21 
     22   This header file does not require any macro definitions by the user 
     23   (like CK_DEFINE_FUNCTION etc).  In fact, it defines those macros 
     24   for you (if useful, some are missing, let me know if you need 
     25   more). 
     26 
     27   There is an additional API available that does comply better to the 
     28   GNU coding standard.  It can be switched on by defining 
     29   CRYPTOKI_GNU before including this header file.  For this, the 
     30   following changes are made to the specification: 
     31 
     32   All structure types are changed to a "struct ck_foo" where CK_FOO 
     33   is the type name in PKCS #11. 
     34 
     35   All non-structure types are changed to ck_foo_t where CK_FOO is the 
     36   lowercase version of the type name in PKCS #11.  The basic types 
     37   (CK_ULONG et al.) are removed without substitute. 
     38 
     39   All members of structures are modified in the following way: Type 
     40   indication prefixes are removed, and underscore characters are 
     41   inserted before words.  Then the result is lowercased. 
     42 
     43   Note that function names are still in the original case, as they 
     44   need for ABI compatibility. 
     45 
     46   CK_FALSE, CK_TRUE and NULL_PTR are removed without substitute.  Use 
     47   <stdbool.h>. 
     48 
     49   If CRYPTOKI_COMPAT is defined before including this header file, 
     50   then none of the API changes above take place, and the API is the 
     51   one defined by the PKCS #11 standard.  */ 
     52 
     53#ifndef PKCS11_H 
     54#define PKCS11_H 1 
     55 
     56#if defined(__cplusplus) 
     57extern "C" { 
     58#endif 
     59 
     60 
     61/* The version of cryptoki we implement.  The revision is changed with 
     62   each modification of this file.  If you do not use the "official" 
     63   version of this file, please consider deleting the revision macro 
     64   (you may use a macro with a different name to keep track of your 
     65   versions).  */ 
     66#define CRYPTOKI_VERSION_MAJOR          2 
     67#define CRYPTOKI_VERSION_MINOR          20 
     68#define CRYPTOKI_VERSION_REVISION       6 
     69 
     70 
     71/* Compatibility interface is default, unless CRYPTOKI_GNU is 
     72   given.  */ 
     73#ifndef CRYPTOKI_GNU 
     74#ifndef CRYPTOKI_COMPAT 
     75#define CRYPTOKI_COMPAT 1 
     76#endif 
     77#endif 
     78 
     79/* System dependencies.  */ 
     80 
     81#if defined(_WIN32) || defined(CRYPTOKI_FORCE_WIN32) 
     82 
     83/* There is a matching pop below.  */ 
     84#pragma pack(push, cryptoki, 1) 
     85 
     86#ifdef CRYPTOKI_EXPORTS 
     87#define CK_SPEC __declspec(dllexport) 
     88#else 
     89#define CK_SPEC __declspec(dllimport) 
     90#endif 
     91 
     92#else 
     93 
     94#define CK_SPEC 
     95 
     96#endif 
     97 
     98 
     99#ifdef CRYPTOKI_COMPAT 
     100  /* If we are in compatibility mode, switch all exposed names to the 
     101     PKCS #11 variant.  There are corresponding #undefs below.  */ 
     102 
     103#define ck_flags_t CK_FLAGS 
     104#define ck_version _CK_VERSION 
     105 
     106#define ck_info _CK_INFO 
     107#define cryptoki_version cryptokiVersion 
     108#define manufacturer_id manufacturerID 
     109#define library_description libraryDescription 
     110#define library_version libraryVersion 
     111 
     112#define ck_notification_t CK_NOTIFICATION 
     113#define ck_slot_id_t CK_SLOT_ID 
     114 
     115#define ck_slot_info _CK_SLOT_INFO 
     116#define slot_description slotDescription 
     117#define hardware_version hardwareVersion 
     118#define firmware_version firmwareVersion 
     119 
     120#define ck_token_info _CK_TOKEN_INFO 
     121#define serial_number serialNumber 
     122#define max_session_count ulMaxSessionCount 
     123#define session_count ulSessionCount 
     124#define max_rw_session_count ulMaxRwSessionCount 
     125#define rw_session_count ulRwSessionCount 
     126#define max_pin_len ulMaxPinLen 
     127#define min_pin_len ulMinPinLen 
     128#define total_public_memory ulTotalPublicMemory 
     129#define free_public_memory ulFreePublicMemory 
     130#define total_private_memory ulTotalPrivateMemory 
     131#define free_private_memory ulFreePrivateMemory 
     132#define utc_time utcTime 
     133 
     134#define ck_session_handle_t CK_SESSION_HANDLE 
     135#define ck_user_type_t CK_USER_TYPE 
     136#define ck_state_t CK_STATE 
     137 
     138#define ck_session_info _CK_SESSION_INFO 
     139#define slot_id slotID 
     140#define device_error ulDeviceError 
     141 
     142#define ck_object_handle_t CK_OBJECT_HANDLE 
     143#define ck_object_class_t CK_OBJECT_CLASS 
     144#define ck_hw_feature_type_t CK_HW_FEATURE_TYPE 
     145#define ck_key_type_t CK_KEY_TYPE 
     146#define ck_certificate_type_t CK_CERTIFICATE_TYPE 
     147#define ck_attribute_type_t CK_ATTRIBUTE_TYPE 
     148 
     149#define ck_attribute _CK_ATTRIBUTE 
     150#define value pValue 
     151#define value_len ulValueLen 
     152 
     153#define ck_date _CK_DATE 
     154 
     155#define ck_mechanism_type_t CK_MECHANISM_TYPE 
     156 
     157#define ck_mechanism _CK_MECHANISM 
     158#define parameter pParameter 
     159#define parameter_len ulParameterLen 
     160 
     161#define ck_mechanism_info _CK_MECHANISM_INFO 
     162#define min_key_size ulMinKeySize 
     163#define max_key_size ulMaxKeySize 
     164 
     165#define ck_rv_t CK_RV 
     166#define ck_notify_t CK_NOTIFY 
     167 
     168#define ck_function_list _CK_FUNCTION_LIST 
     169 
     170#define ck_createmutex_t CK_CREATEMUTEX 
     171#define ck_destroymutex_t CK_DESTROYMUTEX 
     172#define ck_lockmutex_t CK_LOCKMUTEX 
     173#define ck_unlockmutex_t CK_UNLOCKMUTEX 
     174 
     175#define ck_c_initialize_args _CK_C_INITIALIZE_ARGS 
     176#define create_mutex CreateMutex 
     177#define destroy_mutex DestroyMutex 
     178#define lock_mutex LockMutex 
     179#define unlock_mutex UnlockMutex 
     180#define reserved pReserved 
     181 
     182#endif  /* CRYPTOKI_COMPAT */ 
     183 
     184 
     185 
     186typedef unsigned long ck_flags_t; 
     187 
     188struct ck_version 
     189{ 
     190  unsigned char major; 
     191  unsigned char minor; 
     192}; 
     193 
     194 
     195struct ck_info 
     196{ 
     197  struct ck_version cryptoki_version; 
     198  unsigned char manufacturer_id[32]; 
     199  ck_flags_t flags; 
     200  unsigned char library_description[32]; 
     201  struct ck_version library_version; 
     202}; 
     203 
     204 
     205typedef unsigned long ck_notification_t; 
     206 
     207#define CKN_SURRENDER   (0) 
     208 
     209 
     210typedef unsigned long ck_slot_id_t; 
     211 
     212 
     213struct ck_slot_info 
     214{ 
     215  unsigned char slot_description[64]; 
     216  unsigned char manufacturer_id[32]; 
     217  ck_flags_t flags; 
     218  struct ck_version hardware_version; 
     219  struct ck_version firmware_version; 
     220}; 
     221 
     222 
     223#define CKF_TOKEN_PRESENT       (1 << 0) 
     224#define CKF_REMOVABLE_DEVICE    (1 << 1) 
     225#define CKF_HW_SLOT             (1 << 2) 
     226#define CKF_ARRAY_ATTRIBUTE     (1 << 30) 
     227 
     228 
     229struct ck_token_info 
     230{ 
     231  unsigned char label[32]; 
     232  unsigned char manufacturer_id[32]; 
     233  unsigned char model[16]; 
     234  unsigned char serial_number[16]; 
     235  ck_flags_t flags; 
     236  unsigned long max_session_count; 
     237  unsigned long session_count; 
     238  unsigned long max_rw_session_count; 
     239  unsigned long rw_session_count; 
     240  unsigned long max_pin_len; 
     241  unsigned long min_pin_len; 
     242  unsigned long total_public_memory; 
     243  unsigned long free_public_memory; 
     244  unsigned long total_private_memory; 
     245  unsigned long free_private_memory; 
     246  struct ck_version hardware_version; 
     247  struct ck_version firmware_version; 
     248  unsigned char utc_time[16]; 
     249}; 
     250 
     251 
     252#define CKF_RNG                                 (1 << 0) 
     253#define CKF_WRITE_PROTECTED                     (1 << 1) 
     254#define CKF_LOGIN_REQUIRED                      (1 << 2) 
     255#define CKF_USER_PIN_INITIALIZED                (1 << 3) 
     256#define CKF_RESTORE_KEY_NOT_NEEDED              (1 << 5) 
     257#define CKF_CLOCK_ON_TOKEN                      (1 << 6) 
     258#define CKF_PROTECTED_AUTHENTICATION_PATH       (1 << 8) 
     259#define CKF_DUAL_CRYPTO_OPERATIONS              (1 << 9) 
     260#define CKF_TOKEN_INITIALIZED                   (1 << 10) 
     261#define CKF_SECONDARY_AUTHENTICATION            (1 << 11) 
     262#define CKF_USER_PIN_COUNT_LOW                  (1 << 16) 
     263#define CKF_USER_PIN_FINAL_TRY                  (1 << 17) 
     264#define CKF_USER_PIN_LOCKED                     (1 << 18) 
     265#define CKF_USER_PIN_TO_BE_CHANGED              (1 << 19) 
     266#define CKF_SO_PIN_COUNT_LOW                    (1 << 20) 
     267#define CKF_SO_PIN_FINAL_TRY                    (1 << 21) 
     268#define CKF_SO_PIN_LOCKED                       (1 << 22) 
     269#define CKF_SO_PIN_TO_BE_CHANGED                (1 << 23) 
     270 
     271#define CK_UNAVAILABLE_INFORMATION      ((unsigned long) -1) 
     272#define CK_EFFECTIVELY_INFINITE         (0) 
     273 
     274 
     275typedef unsigned long ck_session_handle_t; 
     276 
     277#define CK_INVALID_HANDLE       (0) 
     278 
     279 
     280typedef unsigned long ck_user_type_t; 
     281 
     282#define CKU_SO                  (0) 
     283#define CKU_USER                (1) 
     284#define CKU_CONTEXT_SPECIFIC    (2) 
     285 
     286 
     287typedef unsigned long ck_state_t; 
     288 
     289#define CKS_RO_PUBLIC_SESSION   (0) 
     290#define CKS_RO_USER_FUNCTIONS   (1) 
     291#define CKS_RW_PUBLIC_SESSION   (2) 
     292#define CKS_RW_USER_FUNCTIONS   (3) 
     293#define CKS_RW_SO_FUNCTIONS     (4) 
     294 
     295 
     296struct ck_session_info 
     297{ 
     298  ck_slot_id_t slot_id; 
     299  ck_state_t state; 
     300  ck_flags_t flags; 
     301  unsigned long device_error; 
     302}; 
     303 
     304#define CKF_RW_SESSION          (1 << 1) 
     305#define CKF_SERIAL_SESSION      (1 << 2) 
     306 
     307 
     308typedef unsigned long ck_object_handle_t; 
     309 
     310 
     311typedef unsigned long ck_object_class_t; 
     312 
     313#define CKO_DATA                (0) 
     314#define CKO_CERTIFICATE         (1) 
     315#define CKO_PUBLIC_KEY          (2) 
     316#define CKO_PRIVATE_KEY         (3) 
     317#define CKO_SECRET_KEY          (4) 
     318#define CKO_HW_FEATURE          (5) 
     319#define CKO_DOMAIN_PARAMETERS   (6) 
     320#define CKO_MECHANISM           (7) 
     321#define CKO_VENDOR_DEFINED      ((unsigned long) (1 << 31)) 
     322 
     323 
     324typedef unsigned long ck_hw_feature_type_t; 
     325 
     326#define CKH_MONOTONIC_COUNTER   (1) 
     327#define CKH_CLOCK               (2) 
     328#define CKH_USER_INTERFACE      (3) 
     329#define CKH_VENDOR_DEFINED      ((unsigned long) (1 << 31)) 
     330 
     331 
     332typedef unsigned long ck_key_type_t; 
     333 
     334#define CKK_RSA                 (0) 
     335#define CKK_DSA                 (1) 
     336#define CKK_DH                  (2) 
     337#define CKK_ECDSA               (3) 
     338#define CKK_EC                  (3) 
     339#define CKK_X9_42_DH            (4) 
     340#define CKK_KEA                 (5) 
     341#define CKK_GENERIC_SECRET      (0x10) 
     342#define CKK_RC2                 (0x11) 
     343#define CKK_RC4                 (0x12) 
     344#define CKK_DES                 (0x13) 
     345#define CKK_DES2                (0x14) 
     346#define CKK_DES3                (0x15) 
     347#define CKK_CAST                (0x16) 
     348#define CKK_CAST3               (0x17) 
     349#define CKK_CAST128             (0x18) 
     350#define CKK_RC5                 (0x19) 
     351#define CKK_IDEA                (0x1a) 
     352#define CKK_SKIPJACK            (0x1b) 
     353#define CKK_BATON               (0x1c) 
     354#define CKK_JUNIPER             (0x1d) 
     355#define CKK_CDMF                (0x1e) 
     356#define CKK_AES                 (0x1f) 
     357#define CKK_BLOWFISH            (0x20) 
     358#define CKK_TWOFISH             (0x21) 
     359#define CKK_VENDOR_DEFINED      ((unsigned long) (1 << 31)) 
     360 
     361 
     362typedef unsigned long ck_certificate_type_t; 
     363 
     364#define CKC_X_509               (0) 
     365#define CKC_X_509_ATTR_CERT     (1) 
     366#define CKC_WTLS                (2) 
     367#define CKC_VENDOR_DEFINED      ((unsigned long) (1 << 31)) 
     368 
     369 
     370typedef unsigned long ck_attribute_type_t; 
     371 
     372#define CKA_CLASS                       (0) 
     373#define CKA_TOKEN                       (1) 
     374#define CKA_PRIVATE                     (2) 
     375#define CKA_LABEL                       (3) 
     376#define CKA_APPLICATION                 (0x10) 
     377#define CKA_VALUE                       (0x11) 
     378#define CKA_OBJECT_ID                   (0x12) 
     379#define CKA_CERTIFICATE_TYPE            (0x80) 
     380#define CKA_ISSUER                      (0x81) 
     381#define CKA_SERIAL_NUMBER               (0x82) 
     382#define CKA_AC_ISSUER                   (0x83) 
     383#define CKA_OWNER                       (0x84) 
     384#define CKA_ATTR_TYPES                  (0x85) 
     385#define CKA_TRUSTED                     (0x86) 
     386#define CKA_CERTIFICATE_CATEGORY        (0x87) 
     387#define CKA_JAVA_MIDP_SECURITY_DOMAIN   (0x88) 
     388#define CKA_URL                         (0x89) 
     389#define CKA_HASH_OF_SUBJECT_PUBLIC_KEY  (0x8a) 
     390#define CKA_HASH_OF_ISSUER_PUBLIC_KEY   (0x8b) 
     391#define CKA_CHECK_VALUE                 (0x90) 
     392#define CKA_KEY_TYPE                    (0x100) 
     393#define CKA_SUBJECT                     (0x101) 
     394#define CKA_ID                          (0x102) 
     395#define CKA_SENSITIVE                   (0x103) 
     396#define CKA_ENCRYPT                     (0x104) 
     397#define CKA_DECRYPT                     (0x105) 
     398#define CKA_WRAP                        (0x106) 
     399#define CKA_UNWRAP                      (0x107) 
     400#define CKA_SIGN                        (0x108) 
     401#define CKA_SIGN_RECOVER                (0x109) 
     402#define CKA_VERIFY                      (0x10a) 
     403#define CKA_VERIFY_RECOVER              (0x10b) 
     404#define CKA_DERIVE                      (0x10c) 
     405#define CKA_START_DATE                  (0x110) 
     406#define CKA_END_DATE                    (0x111) 
     407#define CKA_MODULUS                     (0x120) 
     408#define CKA_MODULUS_BITS                (0x121) 
     409#define CKA_PUBLIC_EXPONENT             (0x122) 
     410#define CKA_PRIVATE_EXPONENT            (0x123) 
     411#define CKA_PRIME_1                     (0x124) 
     412#define CKA_PRIME_2                     (0x125) 
     413#define CKA_EXPONENT_1                  (0x126) 
     414#define CKA_EXPONENT_2                  (0x127) 
     415#define CKA_COEFFICIENT                 (0x128) 
     416#define CKA_PRIME                       (0x130) 
     417#define CKA_SUBPRIME                    (0x131) 
     418#define CKA_BASE                        (0x132) 
     419#define CKA_PRIME_BITS                  (0x133) 
     420#define CKA_SUB_PRIME_BITS              (0x134) 
     421#define CKA_VALUE_BITS                  (0x160) 
     422#define CKA_VALUE_LEN                   (0x161) 
     423#define CKA_EXTRACTABLE                 (0x162) 
     424#define CKA_LOCAL                       (0x163) 
     425#define CKA_NEVER_EXTRACTABLE           (0x164) 
     426#define CKA_ALWAYS_SENSITIVE            (0x165) 
     427#define CKA_KEY_GEN_MECHANISM           (0x166) 
     428#define CKA_MODIFIABLE                  (0x170) 
     429#define CKA_ECDSA_PARAMS                (0x180) 
     430#define CKA_EC_PARAMS                   (0x180) 
     431#define CKA_EC_POINT                    (0x181) 
     432#define CKA_SECONDARY_AUTH              (0x200) 
     433#define CKA_AUTH_PIN_FLAGS              (0x201) 
     434#define CKA_ALWAYS_AUTHENTICATE         (0x202) 
     435#define CKA_WRAP_WITH_TRUSTED           (0x210) 
     436#define CKA_HW_FEATURE_TYPE             (0x300) 
     437#define CKA_RESET_ON_INIT               (0x301) 
     438#define CKA_HAS_RESET                   (0x302) 
     439#define CKA_PIXEL_X                     (0x400) 
     440#define CKA_PIXEL_Y                     (0x401) 
     441#define CKA_RESOLUTION                  (0x402) 
     442#define CKA_CHAR_ROWS                   (0x403) 
     443#define CKA_CHAR_COLUMNS                (0x404) 
     444#define CKA_COLOR                       (0x405) 
     445#define CKA_BITS_PER_PIXEL              (0x406) 
     446#define CKA_CHAR_SETS                   (0x480) 
     447#define CKA_ENCODING_METHODS            (0x481) 
     448#define CKA_MIME_TYPES                  (0x482) 
     449#define CKA_MECHANISM_TYPE              (0x500) 
     450#define CKA_REQUIRED_CMS_ATTRIBUTES     (0x501) 
     451#define CKA_DEFAULT_CMS_ATTRIBUTES      (0x502) 
     452#define CKA_SUPPORTED_CMS_ATTRIBUTES    (0x503) 
     453#define CKA_WRAP_TEMPLATE               (CKF_ARRAY_ATTRIBUTE | 0x211) 
     454#define CKA_UNWRAP_TEMPLATE             (CKF_ARRAY_ATTRIBUTE | 0x212) 
     455#define CKA_ALLOWED_MECHANISMS          (CKF_ARRAY_ATTRIBUTE | 0x600) 
     456#define CKA_VENDOR_DEFINED              ((unsigned long) (1 << 31)) 
     457 
     458 
     459struct ck_attribute 
     460{ 
     461  ck_attribute_type_t type; 
     462  void *value; 
     463  unsigned long value_len; 
     464}; 
     465 
     466 
     467struct ck_date 
     468{ 
     469  unsigned char year[4]; 
     470  unsigned char month[2]; 
     471  unsigned char day[2]; 
     472}; 
     473 
     474 
     475typedef unsigned long ck_mechanism_type_t; 
     476 
     477#define CKM_RSA_PKCS_KEY_PAIR_GEN       (0) 
     478#define CKM_RSA_PKCS                    (1) 
     479#define CKM_RSA_9796                    (2) 
     480#define CKM_RSA_X_509                   (3) 
     481#define CKM_MD2_RSA_PKCS                (4) 
     482#define CKM_MD5_RSA_PKCS                (5) 
     483#define CKM_SHA1_RSA_PKCS               (6) 
     484#define CKM_RIPEMD128_RSA_PKCS          (7) 
     485#define CKM_RIPEMD160_RSA_PKCS          (8) 
     486#define CKM_RSA_PKCS_OAEP               (9) 
     487#define CKM_RSA_X9_31_KEY_PAIR_GEN      (0xa) 
     488#define CKM_RSA_X9_31                   (0xb) 
     489#define CKM_SHA1_RSA_X9_31              (0xc) 
     490#define CKM_RSA_PKCS_PSS                (0xd) 
     491#define CKM_SHA1_RSA_PKCS_PSS           (0xe) 
     492#define CKM_DSA_KEY_PAIR_GEN            (0x10) 
     493#define CKM_DSA                         (0x11) 
     494#define CKM_DSA_SHA1                    (0x12) 
     495#define CKM_DH_PKCS_KEY_PAIR_GEN        (0x20) 
     496#define CKM_DH_PKCS_DERIVE              (0x21) 
     497#define CKM_X9_42_DH_KEY_PAIR_GEN       (0x30) 
     498#define CKM_X9_42_DH_DERIVE             (0x31) 
     499#define CKM_X9_42_DH_HYBRID_DERIVE      (0x32) 
     500#define CKM_X9_42_MQV_DERIVE            (0x33) 
     501#define CKM_SHA256_RSA_PKCS             (0x40) 
     502#define CKM_SHA384_RSA_PKCS             (0x41) 
     503#define CKM_SHA512_RSA_PKCS             (0x42) 
     504#define CKM_SHA256_RSA_PKCS_PSS         (0x43) 
     505#define CKM_SHA384_RSA_PKCS_PSS         (0x44) 
     506#define CKM_SHA512_RSA_PKCS_PSS         (0x45) 
     507#define CKM_RC2_KEY_GEN                 (0x100) 
     508#define CKM_RC2_ECB                     (0x101) 
     509#define CKM_RC2_CBC                     (0x102) 
     510#define CKM_RC2_MAC                     (0x103) 
     511#define CKM_RC2_MAC_GENERAL             (0x104) 
     512#define CKM_RC2_CBC_PAD                 (0x105) 
     513#define CKM_RC4_KEY_GEN                 (0x110) 
     514#define CKM_RC4                         (0x111) 
     515#define CKM_DES_KEY_GEN                 (0x120) 
     516#define CKM_DES_ECB                     (0x121) 
     517#define CKM_DES_CBC                     (0x122) 
     518#define CKM_DES_MAC                     (0x123) 
     519#define CKM_DES_MAC_GENERAL             (0x124) 
     520#define CKM_DES_CBC_PAD                 (0x125) 
     521#define CKM_DES2_KEY_GEN                (0x130) 
     522#define CKM_DES3_KEY_GEN                (0x131) 
     523#define CKM_DES3_ECB                    (0x132) 
     524#define CKM_DES3_CBC                    (0x133) 
     525#define CKM_DES3_MAC                    (0x134) 
     526#define CKM_DES3_MAC_GENERAL            (0x135) 
     527#define CKM_DES3_CBC_PAD                (0x136) 
     528#define CKM_CDMF_KEY_GEN                (0x140) 
     529#define CKM_CDMF_ECB                    (0x141) 
     530#define CKM_CDMF_CBC                    (0x142) 
     531#define CKM_CDMF_MAC                    (0x143) 
     532#define CKM_CDMF_MAC_GENERAL            (0x144) 
     533#define CKM_CDMF_CBC_PAD                (0x145) 
     534#define CKM_MD2                         (0x200) 
     535#define CKM_MD2_HMAC                    (0x201) 
     536#define CKM_MD2_HMAC_GENERAL            (0x202) 
     537#define CKM_MD5                         (0x210) 
     538#define CKM_MD5_HMAC                    (0x211) 
     539#define CKM_MD5_HMAC_GENERAL            (0x212) 
     540#define CKM_SHA_1                       (0x220) 
     541#define CKM_SHA_1_HMAC                  (0x221) 
     542#define CKM_SHA_1_HMAC_GENERAL          (0x222) 
     543#define CKM_RIPEMD128                   (0x230) 
     544#define CKM_RIPEMD128_HMAC              (0x231) 
     545#define CKM_RIPEMD128_HMAC_GENERAL      (0x232) 
     546#define CKM_RIPEMD160                   (0x240) 
     547#define CKM_RIPEMD160_HMAC              (0x241) 
     548#define CKM_RIPEMD160_HMAC_GENERAL      (0x242) 
     549#define CKM_SHA256                      (0x250) 
     550#define CKM_SHA256_HMAC                 (0x251) 
     551#define CKM_SHA256_HMAC_GENERAL         (0x252) 
     552#define CKM_SHA384                      (0x260) 
     553#define CKM_SHA384_HMAC                 (0x261) 
     554#define CKM_SHA384_HMAC_GENERAL         (0x262) 
     555#define CKM_SHA512                      (0x270) 
     556#define CKM_SHA512_HMAC                 (0x271) 
     557#define CKM_SHA512_HMAC_GENERAL         (0x272) 
     558#define CKM_CAST_KEY_GEN                (0x300) 
     559#define CKM_CAST_ECB                    (0x301) 
     560#define CKM_CAST_CBC                    (0x302) 
     561#define CKM_CAST_MAC                    (0x303) 
     562#define CKM_CAST_MAC_GENERAL            (0x304) 
     563#define CKM_CAST_CBC_PAD                (0x305) 
     564#define CKM_CAST3_KEY_GEN               (0x310) 
     565#define CKM_CAST3_ECB                   (0x311) 
     566#define CKM_CAST3_CBC                   (0x312) 
     567#define CKM_CAST3_MAC                   (0x313) 
     568#define CKM_CAST3_MAC_GENERAL           (0x314) 
     569#define CKM_CAST3_CBC_PAD               (0x315) 
     570#define CKM_CAST5_KEY_GEN               (0x320) 
     571#define CKM_CAST128_KEY_GEN             (0x320) 
     572#define CKM_CAST5_ECB                   (0x321) 
     573#define CKM_CAST128_ECB                 (0x321) 
     574#define CKM_CAST5_CBC                   (0x322) 
     575#define CKM_CAST128_CBC                 (0x322) 
     576#define CKM_CAST5_MAC                   (0x323) 
     577#define CKM_CAST128_MAC                 (0x323) 
     578#define CKM_CAST5_MAC_GENERAL           (0x324) 
     579#define CKM_CAST128_MAC_GENERAL         (0x324) 
     580#define CKM_CAST5_CBC_PAD               (0x325) 
     581#define CKM_CAST128_CBC_PAD             (0x325) 
     582#define CKM_RC5_KEY_GEN                 (0x330) 
     583#define CKM_RC5_ECB                     (0x331) 
     584#define CKM_RC5_CBC                     (0x332) 
     585#define CKM_RC5_MAC                     (0x333) 
     586#define CKM_RC5_MAC_GENERAL             (0x334) 
     587#define CKM_RC5_CBC_PAD                 (0x335) 
     588#define CKM_IDEA_KEY_GEN                (0x340) 
     589#define CKM_IDEA_ECB                    (0x341) 
     590#define CKM_IDEA_CBC                    (0x342) 
     591#define CKM_IDEA_MAC                    (0x343) 
     592#define CKM_IDEA_MAC_GENERAL            (0x344) 
     593#define CKM_IDEA_CBC_PAD                (0x345) 
     594#define CKM_GENERIC_SECRET_KEY_GEN      (0x350) 
     595#define CKM_CONCATENATE_BASE_AND_KEY    (0x360) 
     596#define CKM_CONCATENATE_BASE_AND_DATA   (0x362) 
     597#define CKM_CONCATENATE_DATA_AND_BASE   (0x363) 
     598#define CKM_XOR_BASE_AND_DATA           (0x364) 
     599#define CKM_EXTRACT_KEY_FROM_KEY        (0x365) 
     600#define CKM_SSL3_PRE_MASTER_KEY_GEN     (0x370) 
     601#define CKM_SSL3_MASTER_KEY_DERIVE      (0x371) 
     602#define CKM_SSL3_KEY_AND_MAC_DERIVE     (0x372) 
     603#define CKM_SSL3_MASTER_KEY_DERIVE_DH   (0x373) 
     604#define CKM_TLS_PRE_MASTER_KEY_GEN      (0x374) 
     605#define CKM_TLS_MASTER_KEY_DERIVE       (0x375) 
     606#define CKM_TLS_KEY_AND_MAC_DERIVE      (0x376) 
     607#define CKM_TLS_MASTER_KEY_DERIVE_DH    (0x377) 
     608#define CKM_SSL3_MD5_MAC                (0x380) 
     609#define CKM_SSL3_SHA1_MAC               (0x381) 
     610#define CKM_MD5_KEY_DERIVATION          (0x390) 
     611#define CKM_MD2_KEY_DERIVATION          (0x391) 
     612#define CKM_SHA1_KEY_DERIVATION         (0x392) 
     613#define CKM_PBE_MD2_DES_CBC             (0x3a0) 
     614#define CKM_PBE_MD5_DES_CBC             (0x3a1) 
     615#define CKM_PBE_MD5_CAST_CBC            (0x3a2) 
     616#define CKM_PBE_MD5_CAST3_CBC           (0x3a3) 
     617#define CKM_PBE_MD5_CAST5_CBC           (0x3a4) 
     618#define CKM_PBE_MD5_CAST128_CBC         (0x3a4) 
     619#define CKM_PBE_SHA1_CAST5_CBC          (0x3a5) 
     620#define CKM_PBE_SHA1_CAST128_CBC        (0x3a5) 
     621#define CKM_PBE_SHA1_RC4_128            (0x3a6) 
     622#define CKM_PBE_SHA1_RC4_40             (0x3a7) 
     623#define CKM_PBE_SHA1_DES3_EDE_CBC       (0x3a8) 
     624#define CKM_PBE_SHA1_DES2_EDE_CBC       (0x3a9) 
     625#define CKM_PBE_SHA1_RC2_128_CBC        (0x3aa) 
     626#define CKM_PBE_SHA1_RC2_40_CBC         (0x3ab) 
     627#define CKM_PKCS5_PBKD2                 (0x3b0) 
     628#define CKM_PBA_SHA1_WITH_SHA1_HMAC     (0x3c0) 
     629#define CKM_KEY_WRAP_LYNKS              (0x400) 
     630#define CKM_KEY_WRAP_SET_OAEP           (0x401) 
     631#define CKM_SKIPJACK_KEY_GEN            (0x1000) 
     632#define CKM_SKIPJACK_ECB64              (0x1001) 
     633#define CKM_SKIPJACK_CBC64              (0x1002) 
     634#define CKM_SKIPJACK_OFB64              (0x1003) 
     635#define CKM_SKIPJACK_CFB64              (0x1004) 
     636#define CKM_SKIPJACK_CFB32              (0x1005) 
     637#define CKM_SKIPJACK_CFB16              (0x1006) 
     638#define CKM_SKIPJACK_CFB8               (0x1007) 
     639#define CKM_SKIPJACK_WRAP               (0x1008) 
     640#define CKM_SKIPJACK_PRIVATE_WRAP       (0x1009) 
     641#define CKM_SKIPJACK_RELAYX             (0x100a) 
     642#define CKM_KEA_KEY_PAIR_GEN            (0x1010) 
     643#define CKM_KEA_KEY_DERIVE              (0x1011) 
     644#define CKM_FORTEZZA_TIMESTAMP          (0x1020) 
     645#define CKM_BATON_KEY_GEN               (0x1030) 
     646#define CKM_BATON_ECB128                (0x1031) 
     647#define CKM_BATON_ECB96                 (0x1032) 
     648#define CKM_BATON_CBC128                (0x1033) 
     649#define CKM_BATON_COUNTER               (0x1034) 
     650#define CKM_BATON_SHUFFLE               (0x1035) 
     651#define CKM_BATON_WRAP                  (0x1036) 
     652#define CKM_ECDSA_KEY_PAIR_GEN          (0x1040) 
     653#define CKM_EC_KEY_PAIR_GEN             (0x1040) 
     654#define CKM_ECDSA                       (0x1041) 
     655#define CKM_ECDSA_SHA1                  (0x1042) 
     656#define CKM_ECDH1_DERIVE                (0x1050) 
     657#define CKM_ECDH1_COFACTOR_DERIVE       (0x1051) 
     658#define CKM_ECMQV_DERIVE                (0x1052) 
     659#define CKM_JUNIPER_KEY_GEN             (0x1060) 
     660#define CKM_JUNIPER_ECB128              (0x1061) 
     661#define CKM_JUNIPER_CBC128              (0x1062) 
     662#define CKM_JUNIPER_COUNTER             (0x1063) 
     663#define CKM_JUNIPER_SHUFFLE             (0x1064) 
     664#define CKM_JUNIPER_WRAP                (0x1065) 
     665#define CKM_FASTHASH                    (0x1070) 
     666#define CKM_AES_KEY_GEN                 (0x1080) 
     667#define CKM_AES_ECB                     (0x1081) 
     668#define CKM_AES_CBC                     (0x1082) 
     669#define CKM_AES_MAC                     (0x1083) 
     670#define CKM_AES_MAC_GENERAL             (0x1084) 
     671#define CKM_AES_CBC_PAD                 (0x1085) 
     672#define CKM_DSA_PARAMETER_GEN           (0x2000) 
     673#define CKM_DH_PKCS_PARAMETER_GEN       (0x2001) 
     674#define CKM_X9_42_DH_PARAMETER_GEN      (0x2002) 
     675#define CKM_VENDOR_DEFINED              ((unsigned long) (1 << 31)) 
     676 
     677 
     678struct ck_mechanism 
     679{ 
     680  ck_mechanism_type_t mechanism; 
     681  void *parameter; 
     682  unsigned long parameter_len; 
     683}; 
     684 
     685 
     686struct ck_mechanism_info 
     687{ 
     688  unsigned long min_key_size; 
     689  unsigned long max_key_size; 
     690  ck_flags_t flags; 
     691}; 
     692 
     693#define CKF_HW                  (1 << 0) 
     694#define CKF_ENCRYPT             (1 << 8) 
     695#define CKF_DECRYPT             (1 << 9) 
     696#define CKF_DIGEST              (1 << 10) 
     697#define CKF_SIGN                (1 << 11) 
     698#define CKF_SIGN_RECOVER        (1 << 12) 
     699#define CKF_VERIFY              (1 << 13) 
     700#define CKF_VERIFY_RECOVER      (1 << 14) 
     701#define CKF_GENERATE            (1 << 15) 
     702#define CKF_GENERATE_KEY_PAIR   (1 << 16) 
     703#define CKF_WRAP                (1 << 17) 
     704#define CKF_UNWRAP              (1 << 18) 
     705#define CKF_DERIVE              (1 << 19) 
     706#define CKF_EXTENSION           ((unsigned long) (1 << 31)) 
     707 
     708 
     709/* Flags for C_WaitForSlotEvent.  */ 
     710#define CKF_DONT_BLOCK                          (1) 
     711 
     712 
     713typedef unsigned long ck_rv_t; 
     714 
     715 
     716typedef ck_rv_t (*ck_notify_t) (ck_session_handle_t session, 
     717                                ck_notification_t event, void *application); 
     718 
     719/* Forward reference.  */ 
     720struct ck_function_list; 
     721 
     722#define _CK_DECLARE_FUNCTION(name, args)        \ 
     723typedef ck_rv_t (*CK_ ## name) args;            \ 
     724ck_rv_t CK_SPEC name args 
     725 
     726_CK_DECLARE_FUNCTION (C_Initialize, (void *init_args)); 
     727_CK_DECLARE_FUNCTION (C_Finalize, (void *reserved)); 
     728_CK_DECLARE_FUNCTION (C_GetInfo, (struct ck_info *info)); 
     729_CK_DECLARE_FUNCTION (C_GetFunctionList, 
     730                      (struct ck_function_list **function_list)); 
     731 
     732_CK_DECLARE_FUNCTION (C_GetSlotList, 
     733                      (unsigned char token_present, ck_slot_id_t *slot_list, 
     734                       unsigned long *count)); 
     735_CK_DECLARE_FUNCTION (C_GetSlotInfo, 
     736                      (ck_slot_id_t slot_id, struct ck_slot_info *info)); 
     737_CK_DECLARE_FUNCTION (C_GetTokenInfo, 
     738                      (ck_slot_id_t slot_id, struct ck_token_info *info)); 
     739_CK_DECLARE_FUNCTION (C_WaitForSlotEvent, 
     740                      (ck_flags_t flags, ck_slot_id_t *slot, void *reserved)); 
     741_CK_DECLARE_FUNCTION (C_GetMechanismList, 
     742                      (ck_slot_id_t slot_id, 
     743                       ck_mechanism_type_t *mechanism_list, 
     744                       unsigned long *count)); 
     745_CK_DECLARE_FUNCTION (C_GetMechanismInfo, 
     746                      (ck_slot_id_t slot_id, ck_mechanism_type_t type, 
     747                       struct ck_mechanism_info *info)); 
     748_CK_DECLARE_FUNCTION (C_InitToken, 
     749                      (ck_slot_id_t slot_id, unsigned char *pin, 
     750                       unsigned long pin_len, unsigned char *label)); 
     751_CK_DECLARE_FUNCTION (C_InitPIN, 
     752                      (ck_session_handle_t session, unsigned char *pin, 
     753                       unsigned long pin_len)); 
     754_CK_DECLARE_FUNCTION (C_SetPIN, 
     755                      (ck_session_handle_t session, unsigned char *old_pin, 
     756                       unsigned long old_len, unsigned char *new_pin, 
     757                       unsigned long new_len)); 
     758 
     759_CK_DECLARE_FUNCTION (C_OpenSession, 
     760                      (ck_slot_id_t slot_id, ck_flags_t flags, 
     761                       void *application, ck_notify_t notify, 
     762                       ck_session_handle_t *session)); 
     763_CK_DECLARE_FUNCTION (C_CloseSession, (ck_session_handle_t session)); 
     764_CK_DECLARE_FUNCTION (C_CloseAllSessions, (ck_slot_id_t slot_id)); 
     765_CK_DECLARE_FUNCTION (C_GetSessionInfo, 
     766                      (ck_session_handle_t session, 
     767                       struct ck_session_info *info)); 
     768_CK_DECLARE_FUNCTION (C_GetOperationState, 
     769                      (ck_session_handle_t session, 
     770                       unsigned char *operation_state, 
     771                       unsigned long *operation_state_len)); 
     772_CK_DECLARE_FUNCTION (C_SetOperationState, 
     773                      (ck_session_handle_t session, 
     774                       unsigned char *operation_state, 
     775                       unsigned long operation_state_len, 
     776                       ck_object_handle_t encryption_key, 
     777                       ck_object_handle_t authentiation_key)); 
     778_CK_DECLARE_FUNCTION (C_Login, 
     779                      (ck_session_handle_t session, ck_user_type_t user_type, 
     780                       unsigned char *pin, unsigned long pin_len)); 
     781_CK_DECLARE_FUNCTION (C_Logout, (ck_session_handle_t session)); 
     782 
     783_CK_DECLARE_FUNCTION (C_CreateObject, 
     784                      (ck_session_handle_t session, 
     785                       struct ck_attribute *templ, 
     786                       unsigned long count, ck_object_handle_t *object)); 
     787_CK_DECLARE_FUNCTION (C_CopyObject, 
     788                      (ck_session_handle_t session, ck_object_handle_t object, 
     789                       struct ck_attribute *templ, unsigned long count, 
     790                       ck_object_handle_t *new_object)); 
     791_CK_DECLARE_FUNCTION (C_DestroyObject, 
     792                      (ck_session_handle_t session, 
     793                       ck_object_handle_t object)); 
     794_CK_DECLARE_FUNCTION (C_GetObjectSize, 
     795                      (ck_session_handle_t session, 
     796                       ck_object_handle_t object, 
     797                       unsigned long *size)); 
     798_CK_DECLARE_FUNCTION (C_GetAttributeValue, 
     799                      (ck_session_handle_t session, 
     800                       ck_object_handle_t object, 
     801                       struct ck_attribute *templ, 
     802                       unsigned long count)); 
     803_CK_DECLARE_FUNCTION (C_SetAttributeValue, 
     804                      (ck_session_handle_t session, 
     805                       ck_object_handle_t object, 
     806                       struct ck_attribute *templ, 
     807                       unsigned long count)); 
     808_CK_DECLARE_FUNCTION (C_FindObjectsInit, 
     809                      (ck_session_handle_t session, 
     810                       struct ck_attribute *templ, 
     811                       unsigned long count)); 
     812_CK_DECLARE_FUNCTION (C_FindObjects, 
     813                      (ck_session_handle_t session, 
     814                       ck_object_handle_t *object, 
     815                       unsigned long max_object_count, 
     816                       unsigned long *object_count)); 
     817_CK_DECLARE_FUNCTION (C_FindObjectsFinal, 
     818                      (ck_session_handle_t session)); 
     819 
     820_CK_DECLARE_FUNCTION (C_EncryptInit, 
     821                      (ck_session_handle_t session, 
     822                       struct ck_mechanism *mechanism, 
     823                       ck_object_handle_t key)); 
     824_CK_DECLARE_FUNCTION (C_Encrypt, 
     825                      (ck_session_handle_t session, 
     826                       unsigned char *data, unsigned long data_len, 
     827                       unsigned char *encrypted_data, 
     828                       unsigned long *encrypted_data_len)); 
     829_CK_DECLARE_FUNCTION (C_EncryptUpdate, 
     830                      (ck_session_handle_t session, 
     831                       unsigned char *part, unsigned long part_len, 
     832                       unsigned char *encrypted_part, 
     833                       unsigned long *encrypted_part_len)); 
     834_CK_DECLARE_FUNCTION (C_EncryptFinal, 
     835                      (ck_session_handle_t session, 
     836                       unsigned char *last_encrypted_part, 
     837                       unsigned long *last_encrypted_part_len)); 
     838 
     839_CK_DECLARE_FUNCTION (C_DecryptInit, 
     840                      (ck_session_handle_t session, 
     841                       struct ck_mechanism *mechanism, 
     842                       ck_object_handle_t key)); 
     843_CK_DECLARE_FUNCTION (C_Decrypt, 
     844                      (ck_session_handle_t session, 
     845                       unsigned char *encrypted_data, 
     846                       unsigned long encrypted_data_len, 
     847                       unsigned char *data, unsigned long *data_len)); 
     848_CK_DECLARE_FUNCTION (C_DecryptUpdate, 
     849                      (ck_session_handle_t session, 
     850                       unsigned char *encrypted_part, 
     851                       unsigned long encrypted_part_len, 
     852                       unsigned char *part, unsigned long *part_len)); 
     853_CK_DECLARE_FUNCTION (C_DecryptFinal, 
     854                      (ck_session_handle_t session, 
     855                       unsigned char *last_part, 
     856                       unsigned long *last_part_len)); 
     857 
     858_CK_DECLARE_FUNCTION (C_DigestInit, 
     859                      (ck_session_handle_t session, 
     860                       struct ck_mechanism *mechanism)); 
     861_CK_DECLARE_FUNCTION (C_Digest, 
     862                      (ck_session_handle_t session, 
     863                       unsigned char *data, unsigned long data_len, 
     864                       unsigned char *digest, 
     865                       unsigned long *digest_len)); 
     866_CK_DECLARE_FUNCTION (C_DigestUpdate, 
     867                      (ck_session_handle_t session, 
     868                       unsigned char *part, unsigned long part_len)); 
     869_CK_DECLARE_FUNCTION (C_DigestKey, 
     870                      (ck_session_handle_t session, ck_object_handle_t key)); 
     871_CK_DECLARE_FUNCTION (C_DigestFinal, 
     872                      (ck_session_handle_t session, 
     873                       unsigned char *digest, 
     874                       unsigned long *digest_len)); 
     875 
     876_CK_DECLARE_FUNCTION (C_SignInit, 
     877                      (ck_session_handle_t session, 
     878                       struct ck_mechanism *mechanism, 
     879                       ck_object_handle_t key)); 
     880_CK_DECLARE_FUNCTION (C_Sign, 
     881                      (ck_session_handle_t session, 
     882                       unsigned char *data, unsigned long data_len, 
     883                       unsigned char *signature, 
     884                       unsigned long *signature_len)); 
     885_CK_DECLARE_FUNCTION (C_SignUpdate, 
     886                      (ck_session_handle_t session, 
     887                       unsigned char *part, unsigned long part_len)); 
     888_CK_DECLARE_FUNCTION (C_SignFinal, 
     889                      (ck_session_handle_t session, 
     890                       unsigned char *signature, 
     891                       unsigned long *signature_len)); 
     892_CK_DECLARE_FUNCTION (C_SignRecoverInit, 
     893                      (ck_session_handle_t session, 
     894                       struct ck_mechanism *mechanism, 
     895                       ck_object_handle_t key)); 
     896_CK_DECLARE_FUNCTION (C_SignRecover, 
     897                      (ck_session_handle_t session, 
     898                       unsigned char *data, unsigned long data_len, 
     899                       unsigned char *signature, 
     900                       unsigned long *signature_len)); 
     901 
     902_CK_DECLARE_FUNCTION (C_VerifyInit, 
     903                      (ck_session_handle_t session, 
     904                       struct ck_mechanism *mechanism, 
     905                       ck_object_handle_t key)); 
     906_CK_DECLARE_FUNCTION (C_Verify, 
     907                      (ck_session_handle_t session, 
     908                       unsigned char *data, unsigned long data_len, 
     909                       unsigned char *signature, 
     910                       unsigned long signature_len)); 
     911_CK_DECLARE_FUNCTION (C_VerifyUpdate, 
     912                      (ck_session_handle_t session, 
     913                       unsigned char *part, unsigned long part_len)); 
     914_CK_DECLARE_FUNCTION (C_VerifyFinal, 
     915                      (ck_session_handle_t session, 
     916                       unsigned char *signature, 
     917                       unsigned long signature_len)); 
     918_CK_DECLARE_FUNCTION (C_VerifyRecoverInit, 
     919                      (ck_session_handle_t session, 
     920                       struct ck_mechanism *mechanism, 
     921                       ck_object_handle_t key)); 
     922_CK_DECLARE_FUNCTION (C_VerifyRecover, 
     923                      (ck_session_handle_t session, 
     924                       unsigned char *signature, 
     925                       unsigned long signature_len, 
     926                       unsigned char *data, 
     927                       unsigned long *data_len)); 
     928 
     929_CK_DECLARE_FUNCTION (C_DigestEncryptUpdate, 
     930                      (ck_session_handle_t session, 
     931                       unsigned char *part, unsigned long part_len, 
     932                       unsigned char *encrypted_part, 
     933                       unsigned long *encrypted_part_len)); 
     934_CK_DECLARE_FUNCTION (C_DecryptDigestUpdate, 
     935                      (ck_session_handle_t session, 
     936                       unsigned char *encrypted_part, 
     937                       unsigned long encrypted_part_len, 
     938                       unsigned char *part, 
     939                       unsigned long *part_len)); 
     940_CK_DECLARE_FUNCTION (C_SignEncryptUpdate, 
     941                      (ck_session_handle_t session, 
     942                       unsigned char *part, unsigned long part_len, 
     943                       unsigned char *encrypted_part, 
     944                       unsigned long *encrypted_part_len)); 
     945_CK_DECLARE_FUNCTION (C_DecryptVerifyUpdate, 
     946                      (ck_session_handle_t session, 
     947                       unsigned char *encrypted_part, 
     948                       unsigned long encrypted_part_len, 
     949                       unsigned char *part, 
     950                       unsigned long *part_len)); 
     951 
     952_CK_DECLARE_FUNCTION (C_GenerateKey, 
     953                      (ck_session_handle_t session, 
     954                       struct ck_mechanism *mechanism, 
     955                       struct ck_attribute *templ, 
     956                       unsigned long count, 
     957                       ck_object_handle_t *key)); 
     958_CK_DECLARE_FUNCTION (C_GenerateKeyPair, 
     959                      (ck_session_handle_t session, 
     960                       struct ck_mechanism *mechanism, 
     961                       struct ck_attribute *public_key_template, 
     962                       unsigned long public_key_attribute_count, 
     963                       struct ck_attribute *private_key_template, 
     964                       unsigned long private_key_attribute_count, 
     965                       ck_object_handle_t *public_key, 
     966                       ck_object_handle_t *private_key)); 
     967_CK_DECLARE_FUNCTION (C_WrapKey, 
     968                      (ck_session_handle_t session, 
     969                       struct ck_mechanism *mechanism, 
     970                       ck_object_handle_t wrapping_key, 
     971                       ck_object_handle_t key, 
     972                       unsigned char *wrapped_key, 
     973                       unsigned long *wrapped_key_len)); 
     974_CK_DECLARE_FUNCTION (C_UnwrapKey, 
     975                      (ck_session_handle_t session, 
     976                       struct ck_mechanism *mechanism, 
     977                       ck_object_handle_t unwrapping_key, 
     978                       unsigned char *wrapped_key, 
     979                       unsigned long wrapped_key_len, 
     980                       struct ck_attribute *templ, 
     981                       unsigned long attribute_count, 
     982                       ck_object_handle_t *key)); 
     983_CK_DECLARE_FUNCTION (C_DeriveKey, 
     984                      (ck_session_handle_t session, 
     985                       struct ck_mechanism *mechanism, 
     986                       ck_object_handle_t base_key, 
     987                       struct ck_attribute *templ, 
     988                       unsigned long attribute_count, 
     989                       ck_object_handle_t *key)); 
     990 
     991_CK_DECLARE_FUNCTION (C_SeedRandom, 
     992                      (ck_session_handle_t session, unsigned char *seed, 
     993                       unsigned long seed_len)); 
     994_CK_DECLARE_FUNCTION (C_GenerateRandom, 
     995                      (ck_session_handle_t session, 
     996                       unsigned char *random_data, 
     997                       unsigned long random_len)); 
     998 
     999_CK_DECLARE_FUNCTION (C_GetFunctionStatus, (ck_session_handle_t session)); 
     1000_CK_DECLARE_FUNCTION (C_CancelFunction, (ck_session_handle_t session)); 
     1001 
     1002 
     1003struct ck_function_list 
     1004{ 
     1005  struct ck_version version; 
     1006  CK_C_Initialize C_Initialize; 
     1007  CK_C_Finalize C_Finalize; 
     1008  CK_C_GetInfo C_GetInfo; 
     1009  CK_C_GetFunctionList C_GetFunctionList; 
     1010  CK_C_GetSlotList C_GetSlotList; 
     1011  CK_C_GetSlotInfo C_GetSlotInfo; 
     1012  CK_C_GetTokenInfo C_GetTokenInfo; 
     1013  CK_C_GetMechanismList C_GetMechanismList; 
     1014  CK_C_GetMechanismInfo C_GetMechanismInfo; 
     1015  CK_C_InitToken C_InitToken; 
     1016  CK_C_InitPIN C_InitPIN; 
     1017  CK_C_SetPIN C_SetPIN; 
     1018  CK_C_OpenSession C_OpenSession; 
     1019  CK_C_CloseSession C_CloseSession; 
     1020  CK_C_CloseAllSessions C_CloseAllSessions; 
     1021  CK_C_GetSessionInfo C_GetSessionInfo; 
     1022  CK_C_GetOperationState C_GetOperationState; 
     1023  CK_C_SetOperationState C_SetOperationState; 
     1024  CK_C_Login C_Login; 
     1025  CK_C_Logout C_Logout; 
     1026  CK_C_CreateObject C_CreateObject; 
     1027  CK_C_CopyObject C_CopyObject; 
     1028  CK_C_DestroyObject C_DestroyObject; 
     1029  CK_C_GetObjectSize C_GetObjectSize; 
     1030  CK_C_GetAttributeValue C_GetAttributeValue; 
     1031  CK_C_SetAttributeValue C_SetAttributeValue; 
     1032  CK_C_FindObjectsInit C_FindObjectsInit; 
     1033  CK_C_FindObjects C_FindObjects; 
     1034  CK_C_FindObjectsFinal C_FindObjectsFinal; 
     1035  CK_C_EncryptInit C_EncryptInit; 
     1036  CK_C_Encrypt C_Encrypt; 
     1037  CK_C_EncryptUpdate C_EncryptUpdate; 
     1038  CK_C_EncryptFinal C_EncryptFinal; 
     1039  CK_C_DecryptInit C_DecryptInit; 
     1040  CK_C_Decrypt C_Decrypt; 
     1041  CK_C_DecryptUpdate C_DecryptUpdate; 
     1042  CK_C_DecryptFinal C_DecryptFinal; 
     1043  CK_C_DigestInit C_DigestInit; 
     1044  CK_C_Digest C_Digest; 
     1045  CK_C_DigestUpdate C_DigestUpdate; 
     1046  CK_C_DigestKey C_DigestKey; 
     1047  CK_C_DigestFinal C_DigestFinal; 
     1048  CK_C_SignInit C_SignInit; 
     1049  CK_C_Sign C_Sign; 
     1050  CK_C_SignUpdate C_SignUpdate; 
     1051  CK_C_SignFinal C_SignFinal; 
     1052  CK_C_SignRecoverInit C_SignRecoverInit; 
     1053  CK_C_SignRecover C_SignRecover; 
     1054  CK_C_VerifyInit C_VerifyInit; 
     1055  CK_C_Verify C_Verify; 
     1056  CK_C_VerifyUpdate C_VerifyUpdate; 
     1057  CK_C_VerifyFinal C_VerifyFinal; 
     1058  CK_C_VerifyRecoverInit C_VerifyRecoverInit; 
     1059  CK_C_VerifyRecover C_VerifyRecover; 
     1060  CK_C_DigestEncryptUpdate C_DigestEncryptUpdate; 
     1061  CK_C_DecryptDigestUpdate C_DecryptDigestUpdate; 
     1062  CK_C_SignEncryptUpdate C_SignEncryptUpdate; 
     1063  CK_C_DecryptVerifyUpdate C_DecryptVerifyUpdate; 
     1064  CK_C_GenerateKey C_GenerateKey; 
     1065  CK_C_GenerateKeyPair C_GenerateKeyPair; 
     1066  CK_C_WrapKey C_WrapKey; 
     1067  CK_C_UnwrapKey C_UnwrapKey; 
     1068  CK_C_DeriveKey C_DeriveKey; 
     1069  CK_C_SeedRandom C_SeedRandom; 
     1070  CK_C_GenerateRandom C_GenerateRandom; 
     1071  CK_C_GetFunctionStatus C_GetFunctionStatus; 
     1072  CK_C_CancelFunction C_CancelFunction; 
     1073  CK_C_WaitForSlotEvent C_WaitForSlotEvent; 
     1074}; 
     1075 
     1076 
     1077typedef ck_rv_t (*ck_createmutex_t) (void **mutex); 
     1078typedef ck_rv_t (*ck_destroymutex_t) (void *mutex); 
     1079typedef ck_rv_t (*ck_lockmutex_t) (void *mutex); 
     1080typedef ck_rv_t (*ck_unlockmutex_t) (void *mutex); 
     1081 
     1082 
     1083struct ck_c_initialize_args 
     1084{ 
     1085  ck_createmutex_t create_mutex; 
     1086  ck_destroymutex_t destroy_mutex; 
     1087  ck_lockmutex_t lock_mutex; 
     1088  ck_unlockmutex_t unlock_mutex; 
     1089  ck_flags_t flags; 
     1090  void *reserved; 
     1091}; 
     1092 
     1093 
     1094#define CKF_LIBRARY_CANT_CREATE_OS_THREADS      (1 << 0) 
     1095#define CKF_OS_LOCKING_OK                       (1 << 1) 
     1096 
     1097#define CKR_OK                                  (0) 
     1098#define CKR_CANCEL                              (1) 
     1099#define CKR_HOST_MEMORY                         (2) 
     1100#define CKR_SLOT_ID_INVALID                     (3) 
     1101#define CKR_GENERAL_ERROR                       (5) 
     1102#define CKR_FUNCTION_FAILED                     (6) 
     1103#define CKR_ARGUMENTS_BAD                       (7) 
     1104#define CKR_NO_EVENT                            (8) 
     1105#define CKR_NEED_TO_CREATE_THREADS              (9) 
     1106#define CKR_CANT_LOCK                           (0xa) 
     1107#define CKR_ATTRIBUTE_READ_ONLY                 (0x10) 
     1108#define CKR_ATTRIBUTE_SENSITIVE                 (0x11) 
     1109#define CKR_ATTRIBUTE_TYPE_INVALID              (0x12) 
     1110#define CKR_ATTRIBUTE_VALUE_INVALID             (0x13) 
     1111#define CKR_DATA_INVALID                        (0x20) 
     1112#define CKR_DATA_LEN_RANGE                      (0x21) 
     1113#define CKR_DEVICE_ERROR                        (0x30) 
     1114#define CKR_DEVICE_MEMORY                       (0x31) 
     1115#define CKR_DEVICE_REMOVED                      (0x32) 
     1116#define CKR_ENCRYPTED_DATA_INVALID              (0x40) 
     1117#define CKR_ENCRYPTED_DATA_LEN_RANGE            (0x41) 
     1118#define CKR_FUNCTION_CANCELED                   (0x50) 
     1119#define CKR_FUNCTION_NOT_PARALLEL               (0x51) 
     1120#define CKR_FUNCTION_NOT_SUPPORTED              (0x54) 
     1121#define CKR_KEY_HANDLE_INVALID                  (0x60) 
     1122#define CKR_KEY_SIZE_RANGE                      (0x62) 
     1123#define CKR_KEY_TYPE_INCONSISTENT               (0x63) 
     1124#define CKR_KEY_NOT_NEEDED                      (0x64) 
     1125#define CKR_KEY_CHANGED                         (0x65) 
     1126#define CKR_KEY_NEEDED                          (0x66) 
     1127#define CKR_KEY_INDIGESTIBLE                    (0x67) 
     1128#define CKR_KEY_FUNCTION_NOT_PERMITTED          (0x68) 
     1129#define CKR_KEY_NOT_WRAPPABLE                   (0x69) 
     1130#define CKR_KEY_UNEXTRACTABLE                   (0x6a) 
     1131#define CKR_MECHANISM_INVALID                   (0x70) 
     1132#define CKR_MECHANISM_PARAM_INVALID             (0x71) 
     1133#define CKR_OBJECT_HANDLE_INVALID               (0x82) 
     1134#define CKR_OPERATION_ACTIVE                    (0x90) 
     1135#define CKR_OPERATION_NOT_INITIALIZED           (0x91) 
     1136#define CKR_PIN_INCORRECT                       (0xa0) 
     1137#define CKR_PIN_INVALID                         (0xa1) 
     1138#define CKR_PIN_LEN_RANGE                       (0xa2) 
     1139#define CKR_PIN_EXPIRED                         (0xa3) 
     1140#define CKR_PIN_LOCKED                          (0xa4) 
     1141#define CKR_SESSION_CLOSED                      (0xb0) 
     1142#define CKR_SESSION_COUNT                       (0xb1) 
     1143#define CKR_SESSION_HANDLE_INVALID              (0xb3) 
     1144#define CKR_SESSION_PARALLEL_NOT_SUPPORTED      (0xb4) 
     1145#define CKR_SESSION_READ_ONLY                   (0xb5) 
     1146#define CKR_SESSION_EXISTS                      (0xb6) 
     1147#define CKR_SESSION_READ_ONLY_EXISTS            (0xb7) 
     1148#define CKR_SESSION_READ_WRITE_SO_EXISTS        (0xb8) 
     1149#define CKR_SIGNATURE_INVALID                   (0xc0) 
     1150#define CKR_SIGNATURE_LEN_RANGE                 (0xc1) 
     1151#define CKR_TEMPLATE_INCOMPLETE                 (0xd0) 
     1152#define CKR_TEMPLATE_INCONSISTENT               (0xd1) 
     1153#define CKR_TOKEN_NOT_PRESENT                   (0xe0) 
     1154#define CKR_TOKEN_NOT_RECOGNIZED                (0xe1) 
     1155#define CKR_TOKEN_WRITE_PROTECTED               (0xe2) 
     1156#define CKR_UNWRAPPING_KEY_HANDLE_INVALID       (0xf0) 
     1157#define CKR_UNWRAPPING_KEY_SIZE_RANGE           (0xf1) 
     1158#define CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT    (0xf2) 
     1159#define CKR_USER_ALREADY_LOGGED_IN              (0x100) 
     1160#define CKR_USER_NOT_LOGGED_IN                  (0x101) 
     1161#define CKR_USER_PIN_NOT_INITIALIZED            (0x102) 
     1162#define CKR_USER_TYPE_INVALID                   (0x103) 
     1163#define CKR_USER_ANOTHER_ALREADY_LOGGED_IN      (0x104) 
     1164#define CKR_USER_TOO_MANY_TYPES                 (0x105) 
     1165#define CKR_WRAPPED_KEY_INVALID                 (0x110) 
     1166#define CKR_WRAPPED_KEY_LEN_RANGE               (0x112) 
     1167#define CKR_WRAPPING_KEY_HANDLE_INVALID         (0x113) 
     1168#define CKR_WRAPPING_KEY_SIZE_RANGE             (0x114) 
     1169#define CKR_WRAPPING_KEY_TYPE_INCONSISTENT      (0x115) 
     1170#define CKR_RANDOM_SEED_NOT_SUPPORTED           (0x120) 
     1171#define CKR_RANDOM_NO_RNG                       (0x121) 
     1172#define CKR_DOMAIN_PARAMS_INVALID               (0x130) 
     1173#define CKR_BUFFER_TOO_SMALL                    (0x150) 
     1174#define CKR_SAVED_STATE_INVALID                 (0x160) 
     1175#define CKR_INFORMATION_SENSITIVE               (0x170) 
     1176#define CKR_STATE_UNSAVEABLE                    (0x180) 
     1177#define CKR_CRYPTOKI_NOT_INITIALIZED            (0x190) 
     1178#define CKR_CRYPTOKI_ALREADY_INITIALIZED        (0x191) 
     1179#define CKR_MUTEX_BAD                           (0x1a0) 
     1180#define CKR_MUTEX_NOT_LOCKED                    (0x1a1) 
     1181#define CKR_FUNCTION_REJECTED                   (0x200) 
     1182#define CKR_VENDOR_DEFINED                      ((unsigned long) (1 << 31)) 
     1183 
     1184 
     1185 
     1186/* Compatibility layer.  */ 
     1187 
     1188#ifdef CRYPTOKI_COMPAT 
     1189 
     1190#undef CK_DEFINE_FUNCTION 
     1191#define CK_DEFINE_FUNCTION(retval, name) retval CK_SPEC name 
     1192 
     1193/* For NULL.  */ 
     1194#include <stddef.h> 
     1195 
     1196typedef unsigned char CK_BYTE; 
     1197typedef unsigned char CK_CHAR; 
     1198typedef unsigned char CK_UTF8CHAR; 
     1199typedef unsigned char CK_BBOOL; 
     1200typedef unsigned long int CK_ULONG; 
     1201typedef long int CK_LONG; 
     1202typedef CK_BYTE *CK_BYTE_PTR; 
     1203typedef CK_CHAR *CK_CHAR_PTR; 
     1204typedef CK_UTF8CHAR *CK_UTF8CHAR_PTR; 
     1205typedef CK_ULONG *CK_ULONG_PTR; 
     1206typedef void *CK_VOID_PTR; 
     1207typedef void **CK_VOID_PTR_PTR; 
     1208#define CK_FALSE 0 
     1209#define CK_TRUE 1 
     1210#ifndef CK_DISABLE_TRUE_FALSE 
     1211#ifndef FALSE 
     1212#define FALSE 0 
     1213#endif 
     1214#ifndef TRUE 
     1215#define TRUE 1 
     1216#endif 
     1217#endif 
     1218 
     1219typedef struct ck_version CK_VERSION; 
     1220typedef struct ck_version *CK_VERSION_PTR; 
     1221 
     1222typedef struct ck_info CK_INFO; 
     1223typedef struct ck_info *CK_INFO_PTR; 
     1224 
     1225typedef ck_slot_id_t *CK_SLOT_ID_PTR; 
     1226 
     1227typedef struct ck_slot_info CK_SLOT_INFO; 
     1228typedef struct ck_slot_info *CK_SLOT_INFO_PTR; 
     1229 
     1230typedef struct ck_token_info CK_TOKEN_INFO; 
     1231typedef struct ck_token_info *CK_TOKEN_INFO_PTR; 
     1232 
     1233typedef ck_session_handle_t *CK_SESSION_HANDLE_PTR; 
     1234 
     1235typedef struct ck_session_info CK_SESSION_INFO; 
     1236typedef struct ck_session_info *CK_SESSION_INFO_PTR; 
     1237 
     1238typedef ck_object_handle_t *CK_OBJECT_HANDLE_PTR; 
     1239 
     1240typedef ck_object_class_t *CK_OBJECT_CLASS_PTR; 
     1241 
     1242typedef struct ck_attribute CK_ATTRIBUTE; 
     1243typedef struct ck_attribute *CK_ATTRIBUTE_PTR; 
     1244 
     1245typedef struct ck_date CK_DATE; 
     1246typedef struct ck_date *CK_DATE_PTR; 
     1247 
     1248typedef ck_mechanism_type_t *CK_MECHANISM_TYPE_PTR; 
     1249 
     1250typedef struct ck_mechanism CK_MECHANISM; 
     1251typedef struct ck_mechanism *CK_MECHANISM_PTR; 
     1252 
     1253typedef struct ck_mechanism_info CK_MECHANISM_INFO; 
     1254typedef struct ck_mechanism_info *CK_MECHANISM_INFO_PTR; 
     1255 
     1256typedef struct ck_function_list CK_FUNCTION_LIST; 
     1257typedef struct ck_function_list *CK_FUNCTION_LIST_PTR; 
     1258typedef struct ck_function_list **CK_FUNCTION_LIST_PTR_PTR; 
     1259 
     1260typedef struct ck_c_initialize_args CK_C_INITIALIZE_ARGS; 
     1261typedef struct ck_c_initialize_args *CK_C_INITIALIZE_ARGS_PTR; 
     1262 
     1263#define NULL_PTR NULL 
     1264 
     1265/* Delete the helper macros defined at the top of the file.  */ 
     1266#undef ck_flags_t 
     1267#undef ck_version 
     1268 
     1269#undef ck_info 
     1270#undef cryptoki_version 
     1271#undef manufacturer_id 
     1272#undef library_description 
     1273#undef library_version 
     1274 
     1275#undef ck_notification_t 
     1276#undef ck_slot_id_t 
     1277 
     1278#undef ck_slot_info 
     1279#undef slot_description 
     1280#undef hardware_version 
     1281#undef firmware_version 
     1282 
     1283#undef ck_token_info 
     1284#undef serial_number 
     1285#undef max_session_count 
     1286#undef session_count 
     1287#undef max_rw_session_count 
     1288#undef rw_session_count 
     1289#undef max_pin_len 
     1290#undef min_pin_len 
     1291#undef total_public_memory 
     1292#undef free_public_memory 
     1293#undef total_private_memory 
     1294#undef free_private_memory 
     1295#undef utc_time 
     1296 
     1297#undef ck_session_handle_t 
     1298#undef ck_user_type_t 
     1299#undef ck_state_t 
     1300 
     1301#undef ck_session_info 
     1302#undef slot_id 
     1303#undef device_error 
     1304 
     1305#undef ck_object_handle_t 
     1306#undef ck_object_class_t 
     1307#undef ck_hw_feature_type_t 
     1308#undef ck_key_type_t 
     1309#undef ck_certificate_type_t 
     1310#undef ck_attribute_type_t 
     1311 
     1312#undef ck_attribute 
     1313#undef value 
     1314#undef value_len 
     1315 
     1316#undef ck_date 
     1317 
     1318#undef ck_mechanism_type_t 
     1319 
     1320#undef ck_mechanism 
     1321#undef parameter 
     1322#undef parameter_len 
     1323 
     1324#undef ck_mechanism_info 
     1325#undef min_key_size 
     1326#undef max_key_size 
     1327 
     1328#undef ck_rv_t 
     1329#undef ck_notify_t 
     1330 
     1331#undef ck_function_list 
     1332 
     1333#undef ck_createmutex_t 
     1334#undef ck_destroymutex_t 
     1335#undef ck_lockmutex_t 
     1336#undef ck_unlockmutex_t 
     1337 
     1338#undef ck_c_initialize_args 
     1339#undef create_mutex 
     1340#undef destroy_mutex 
     1341#undef lock_mutex 
     1342#undef unlock_mutex 
     1343#undef reserved 
     1344 
     1345#endif  /* CRYPTOKI_COMPAT */ 
     1346 
     1347 
     1348/* System dependencies.  */ 
     1349#if defined(_WIN32) || defined(CRYPTOKI_FORCE_WIN32) 
     1350#pragma pack(pop, cryptoki) 
     1351#endif 
     1352 
     1353#if defined(__cplusplus) 
     1354} 
     1355#endif 
     1356 
     1357#endif  /* PKCS11_H */ 
  • ppkcs11.h

    diff -urNp putty-0.58.org/ppkcs11.h putty-0.58+smartcard/ppkcs11.h
    old new  
     1#ifndef __PPKCS11_H 
     2#define __PPKCS11_H 
     3 
     4#include "pkcs11.h" 
     5 
     6#ifdef __cplusplus 
     7extern "C" { 
     8#endif 
     9 
     10typedef struct sc_pkcs11_module sc_pkcs11_module_t; 
     11 
     12extern sc_pkcs11_module_t *C_LoadModule(const char *name, 
     13                                CK_FUNCTION_LIST_PTR_PTR); 
     14extern CK_RV C_UnloadModule(sc_pkcs11_module_t *); 
     15 
     16#ifdef __cplusplus 
     17} 
     18#endif 
     19 
     20#endif 
  • putty.h

    diff -urNp putty-0.58.org/putty.h putty-0.58+smartcard/putty.h
    old new struct config_tag { 
    431431    int ssh2_des_cbc;                  /* "des-cbc" unrecommended SSH-2 cipher */ 
    432432    int try_tis_auth; 
    433433    int try_ki_auth; 
     434    int try_pkcs11_auth; 
     435    Filename pkcs11_libfile; 
     436    char pkcs11_token_label[50]; 
    434437    int ssh_subsys;                    /* run a subsystem rather than a command */ 
    435438    int ssh_subsys2;                   /* fallback to go with remote_cmd2 */ 
    436439    int ssh_no_shell;                  /* avoid running a shell */ 
    struct config_tag { 
    532535    int x11_forward; 
    533536    char x11_display[128]; 
    534537    int x11_auth; 
     538    /* local command */ 
     539    char local_cmd[512]; 
     540    int local_cmd_close; /* close connection after local command terminates */ 
    535541    /* port forwarding */ 
    536542    int lport_acceptall; /* accept conns from hosts other than localhost */ 
    537543    int rport_acceptall; /* same for remote forwarded ports (SSH-2 only) */ 
  • putty-0.

    diff -urNp putty-0.58.org/Recipe putty-0.58+smartcard/Recipe
    old new NONSSH = telnet raw rlogin ldisc pinge 
    205205# SSH back end (putty, plink, pscp, psftp). 
    206206SSH      = ssh sshcrc sshdes sshmd5 sshrsa sshrand sshsha sshblowf 
    207207         + sshdh sshcrcda sshpubk sshzlib sshdss x11fwd portfwd 
    208          + sshaes sshsh512 sshbn wildcard pinger 
     208         + sshaes sshsh512 sshbn wildcard pinger libpkcs11 sshscard local_cmd 
    209209WINSSH   = SSH winnoise winpgntc 
    210210UXSSH    = SSH uxnoise uxagentc 
    211211MACSSH   = SSH macnoise 
    psftp : [C] psftp winsftp wincons WIN 
    252252 
    253253pageant  : [G] winpgnt sshrsa sshpubk sshdes sshbn sshmd5 version tree234 
    254254         + misc sshaes sshsha winpgntc sshdss sshsh512 winutils winmisc 
    255          + pageant.res LIBS 
     255         + pageant.res libpkcs11 sshscard LIBS 
    256256 
    257257puttygen : [G] winpgen sshrsag sshdssg sshprime sshdes sshbn sshmd5 version 
    258258         + sshrand winnoise sshsha winstore misc winctrls sshrsa sshdss winmisc 
  • settings.c

    diff -urNp putty-0.58.org/settings.c putty-0.58+smartcard/settings.c
    old new void save_open_settings(void *sesskey, i 
    243243    write_setting_s(sesskey, "RekeyBytes", cfg->ssh_rekey_data); 
    244244    write_setting_i(sesskey, "AuthTIS", cfg->try_tis_auth); 
    245245    write_setting_i(sesskey, "AuthKI", cfg->try_ki_auth); 
     246    write_setting_i(sesskey, "AuthPKCS11", cfg->try_pkcs11_auth); 
    246247    write_setting_i(sesskey, "SshNoShell", cfg->ssh_no_shell); 
    247248    write_setting_i(sesskey, "SshProt", cfg->sshprot); 
    248249    write_setting_i(sesskey, "SSH2DES", cfg->ssh2_des_cbc); 
    249250    write_setting_filename(sesskey, "PublicKeyFile", cfg->keyfile); 
     251    write_setting_filename(sesskey, "PKCS11LibFile", cfg->pkcs11_libfile); 
     252    write_setting_s(sesskey, "PKCS11TokenLabel", cfg->pkcs11_token_label); 
    250253    write_setting_s(sesskey, "RemoteCommand", cfg->remote_cmd); 
     254    write_setting_s(sesskey, "LocalCommand", cfg->local_cmd); 
     255    write_setting_i(sesskey, "LocalCommandClose", cfg->local_cmd_close); 
    251256    write_setting_i(sesskey, "RFCEnviron", cfg->rfc_environ); 
    252257    write_setting_i(sesskey, "PassiveTelnet", cfg->passive_telnet); 
    253258    write_setting_i(sesskey, "BackspaceIsDelete", cfg->bksp_is_delete); 
    void load_open_settings(void *sesskey, i 
    538543    gppi(sesskey, "SSH2DES", 0, &cfg->ssh2_des_cbc); 
    539544    gppi(sesskey, "AuthTIS", 0, &cfg->try_tis_auth); 
    540545    gppi(sesskey, "AuthKI", 1, &cfg->try_ki_auth); 
     546    gppi(sesskey, "AuthPKCS11", 0, &cfg->try_pkcs11_auth); 
    541547    gppi(sesskey, "SshNoShell", 0, &cfg->ssh_no_shell); 
    542548    gppfile(sesskey, "PublicKeyFile", &cfg->keyfile); 
     549    gppfile(sesskey, "PKCS11LibFile", &cfg->pkcs11_libfile); 
     550    gpps(sesskey, "PKCS11TokenLabel", "", cfg->pkcs11_token_label, 
     551         sizeof(cfg->pkcs11_token_label)); 
    543552    gpps(sesskey, "RemoteCommand", "", cfg->remote_cmd, 
    544553         sizeof(cfg->remote_cmd)); 
     554    gpps(sesskey, "LocalCommand", "", cfg->local_cmd, 
     555         sizeof(cfg->local_cmd)); 
     556    gppi(sesskey, "LocalCommandClose", 0, &cfg->local_cmd_close); 
    545557    gppi(sesskey, "RFCEnviron", 0, &cfg->rfc_environ); 
    546558    gppi(sesskey, "PassiveTelnet", 0, &cfg->passive_telnet); 
    547559    gppi(sesskey, "BackspaceIsDelete", 1, &cfg->bksp_is_delete); 
  • smartcard.ppk

    diff -urNp putty-0.58.org/smartcard.ppk putty-0.58+smartcard/smartcard.ppk
    old new  
     1PuTTY-User-Smartcard-Key-File- 
     2Testing 
  • putty-0.

    diff -urNp putty-0.58.org/ssh.c putty-0.58+smartcard/ssh.c
    old new  
    66#include "putty.h" 
    77#include "tree234.h" 
    88#include "ssh.h" 
     9#include "ppkcs11.h" 
     10#include "sshscard.h" 
     11 
     12 
     13 
    914 
    1015#ifndef FALSE 
    1116#define FALSE 0 
    enum { 
    316321#define crWaitUntil(c)  do { crReturn(0); } while (!(c)) 
    317322#define crWaitUntilV(c) do { crReturnV; } while (!(c)) 
    318323 
    319 typedef struct ssh_tag *Ssh; 
    320324struct Packet; 
    321325 
    322326static struct Packet *ssh2_pkt_init(int pkt_type); 
    static void ssh2_add_channel_data(struct 
    565569static void ssh_throttle_all(Ssh ssh, int enable, int bufsize); 
    566570static void ssh2_set_window(struct ssh_channel *c, unsigned newwin); 
    567571static int ssh_sendbuffer(void *handle); 
    568 static int ssh_do_close(Ssh ssh, int notify_exit); 
    569 static unsigned long ssh_pkt_getuint32(struct Packet *pkt); 
     572int ssh_do_close(Ssh ssh, int notify_exit); 
     573unsigned long ssh_pkt_getuint32(struct Packet *pkt); 
    570574static int ssh2_pkt_getbool(struct Packet *pkt); 
    571575static void ssh_pkt_getstring(struct Packet *pkt, char **p, int *length); 
    572576static void ssh2_timer(void *ctx, long now); 
    struct ssh_tag { 
    772776    char *deferred_rekey_reason;    /* points to STATIC string; don't free */ 
    773777}; 
    774778 
     779/*  need these? 
     780CK_MECHANISM_TYPE opt_mechanism = NO_MECHANISM; 
     781*/ 
     782 
     783 
     784int loaded_pkcs11=FALSE; 
     785int run_local_cmd(char* cmd, int close, Ssh ssh) ; 
     786 
     787#ifdef linux 
     788#define logevent(s) fprintf(stderr, s); 
     789#else 
    775790#define logevent(s) logevent(ssh->frontend, s) 
     791#endif 
     792 
    776793 
    777794/* logevent, only printf-formatted. */ 
    778795static void logeventf(Ssh ssh, const char *fmt, ...) 
    static void sha_mpint(SHA_State * s, Big 
    19031920/* 
    19041921 * Packet decode functions for both SSH-1 and SSH-2. 
    19051922 */ 
    1906 static unsigned long ssh_pkt_getuint32(struct Packet *pkt) 
     1923unsigned long ssh_pkt_getuint32(struct Packet *pkt) 
    19071924{ 
    19081925    unsigned long value; 
    19091926    if (pkt->length - pkt->savedpos < 4) 
    static void ssh_gotdata(Ssh ssh, unsigne 
    24382455    crFinishV; 
    24392456} 
    24402457 
    2441 static int ssh_do_close(Ssh ssh, int notify_exit) 
     2458void do_close(void * ssh) { 
     2459 //    logevent("closing"); 
     2460     ssh_do_close( (Ssh) ssh, FALSE); 
     2461} 
     2462  
     2463  
     2464int ssh_do_close(Ssh ssh, int notify_exit) 
    24422465{ 
    24432466    int ret = 0; 
    24442467    struct ssh_channel *c; 
    static void do_ssh2_authconn(Ssh ssh, un 
    62746297{ 
    62756298    struct do_ssh2_authconn_state { 
    62766299        enum { 
    6277             AUTH_INVALID, AUTH_PUBLICKEY_AGENT, AUTH_PUBLICKEY_FILE, 
     6300            AUTH_INVALID, AUTH_PUBLICKEY_AGENT, AUTH_PUBLICKEY_FILE, AUTH_PUBLICKEY_PKCS11, 
    62786301                AUTH_PASSWORD, 
    62796302                AUTH_KEYBOARD_INTERACTIVE 
    62806303        } method; 
    static void do_ssh2_authconn(Ssh ssh, un 
    62876310                AUTH_TYPE_KEYBOARD_INTERACTIVE, 
    62886311                AUTH_TYPE_KEYBOARD_INTERACTIVE_QUIET 
    62896312        } type; 
    6290         int gotit, need_pw, can_pubkey, can_passwd, can_keyb_inter; 
    6291         int tried_pubkey_config, tried_agent; 
     6313        int gotit, need_pw, can_pubkey, can_passwd, can_keyb_inter, can_pkcs11; 
     6314        int tried_pubkey_config, tried_agent, tried_pkcs11; 
     6315        int trying_keyfile; 
    62926316        int kbd_inter_running, kbd_inter_refused; 
    62936317        int we_are_in; 
    62946318        int num_prompts, curr_prompt, echo; 
    static void do_ssh2_authconn(Ssh ssh, un 
    64216445        s->tried_agent = FALSE; 
    64226446        s->kbd_inter_running = FALSE; 
    64236447        s->kbd_inter_refused = FALSE; 
     6448        s->tried_pkcs11 = FALSE; 
    64246449        /* Load the pub half of ssh->cfg.keyfile so we notice if it's in Pageant */ 
    64256450        if (!filename_is_null(ssh->cfg.keyfile)) { 
    64266451            int keytype; 
    static void do_ssh2_authconn(Ssh ssh, un 
    64446469                s->publickey_blob = NULL; 
    64456470            } 
    64466471        } else 
    6447             s->publickey_blob = NULL; 
     6472            s->publickey_blob=NULL; 
     6473         
    64486474 
    6449         while (1) { 
     6475    if (!loaded_pkcs11 && !ssh->cfg.try_pkcs11_auth) { 
     6476            logevent("pkcs11 library not requested"); 
     6477    } 
     6478    if (!loaded_pkcs11 && ssh->cfg.try_pkcs11_auth && !filename_is_null(ssh->cfg.pkcs11_libfile))  { 
     6479        if( (s->can_pkcs11=init_pkcs11_library((void *) ssh, (char *) &ssh->cfg.pkcs11_libfile)) ) { 
     6480                 loaded_pkcs11=1; 
     6481        } else { 
     6482                 logevent("failed to load pkcs11 library"); 
     6483        } 
     6484    }  
     6485     
     6486    while (1) { 
    64506487            /* 
    64516488             * Wait for the result of the last authentication request. 
    64526489             */ 
    static void do_ssh2_authconn(Ssh ssh, un 
    65596596 
    65606597                s->can_pubkey = 
    65616598                    in_commasep_string("publickey", methods, methlen); 
     6599                s->can_pkcs11= ssh->cfg.try_pkcs11_auth && s->can_pubkey; 
    65626600                s->can_passwd = 
    65636601                    in_commasep_string("password", methods, methlen); 
    65646602                s->can_keyb_inter = ssh->cfg.try_ki_auth && 
    static void do_ssh2_authconn(Ssh ssh, un 
    67436781                sfree(s->response); 
    67446782            } 
    67456783 
    6746             if (!s->method && s->can_pubkey && s->publickey_blob 
    6747                 && !s->tried_pubkey_config) { 
     6784            if (!s->method && ( 
     6785             (s->can_pubkey && s->publickey_blob && !s->tried_pubkey_config)  
     6786             || (loaded_pkcs11 && s->can_pkcs11 && !s->tried_pkcs11))) { 
    67486787                unsigned char *pub_blob; 
    67496788                char *algorithm, *comment; 
    67506789                int pub_blob_len; 
    67516790 
    6752                 s->tried_pubkey_config = TRUE; 
    67536791 
    67546792                ssh->pkt_ctx &= ~SSH2_PKTCTX_AUTH_MASK; 
    67556793                ssh->pkt_ctx |= SSH2_PKTCTX_PUBLICKEY; 
    static void do_ssh2_authconn(Ssh ssh, un 
    67606798                 * First, offer the public blob to see if the server is 
    67616799                 * willing to accept it. 
    67626800                 */ 
     6801         if(s->can_pubkey && s->publickey_blob && !s->tried_pubkey_config) { 
     6802             s->tried_pubkey_config = TRUE; 
     6803             s->trying_keyfile=TRUE; 
    67636804                pub_blob = 
    67646805                    (unsigned char *)ssh2_userkey_loadpub(&ssh->cfg.keyfile, 
    67656806                                                          &algorithm, 
    67666807                                                          &pub_blob_len, 
    67676808                                                          NULL); 
     6809         } else { 
     6810             s->tried_pkcs11 =TRUE; 
     6811             s->trying_keyfile=FALSE; 
     6812             pub_blob = 
     6813                 (unsigned char *)ssh2_userkey_loadpkcs11pub(&ssh->cfg.pkcs11_token_label, 
     6814                               &algorithm, 
     6815                               &pub_blob_len); 
     6816             comment=&ssh->cfg.pkcs11_token_label; 
     6817  
     6818         } 
     6819 
    67686820                if (pub_blob) { 
     6821             logevent("got pub blob"); 
    67696822                    s->pktout = ssh2_pkt_init(SSH2_MSG_USERAUTH_REQUEST); 
    67706823                    ssh2_pkt_addstring(s->pktout, s->username); 
    67716824                    ssh2_pkt_addstring(s->pktout, "ssh-connection");    /* service requested */ 
    static void do_ssh2_authconn(Ssh ssh, un 
    67906843                     * Actually attempt a serious authentication using 
    67916844                     * the key. 
    67926845                     */ 
    6793                     if (ssh2_userkey_encrypted(&ssh->cfg.keyfile, &comment)) { 
    6794                         sprintf(s->pwprompt, 
     6846                    logeventf(ssh, "keyfile? %i" , s->trying_keyfile); 
     6847  
     6848                    s->method = AUTH_PUBLICKEY_FILE; 
     6849                    if (s->trying_keyfile==FALSE) { 
     6850                        sprintf(s->pwprompt, 
     6851                                "Passphrase for smartcard:"); 
     6852                        s->need_pw = TRUE; 
     6853                        s->method = AUTH_PUBLICKEY_PKCS11; 
     6854                    } else { 
     6855                        if (ssh2_userkey_encrypted(&ssh->cfg.keyfile, &comment)) { 
     6856                            sprintf(s->pwprompt, 
    67956857                                "Passphrase for key \"%.100s\": ", 
    67966858                                comment); 
    6797                         s->need_pw = TRUE; 
    6798                     } else { 
    6799                         s->need_pw = FALSE; 
    6800                     } 
     6859                            s->need_pw = TRUE; 
     6860                        } else { 
     6861                            s->need_pw = FALSE; 
     6862                        } 
     6863                    } 
     6864                    logeventf(ssh, "keyfile? %i need pw? %i", s->trying_keyfile, s->need_pw); 
    68016865                    if (flags & FLAG_VERBOSE) { 
    68026866                        c_write_str(ssh, "Authenticating with public key \""); 
    6803                         c_write_str(ssh, comment); 
     6867                        if(s->trying_keyfile==TRUE && comment) c_write_str(ssh, comment); 
    68046868                        c_write_str(ssh, "\"\r\n"); 
    68056869                    } 
    6806                     s->method = AUTH_PUBLICKEY_FILE; 
    68076870                } 
    68086871            } 
    68096872 
    static void do_ssh2_authconn(Ssh ssh, un 
    69477010                } 
    69487011            } 
    69497012 
    6950             if (s->method == AUTH_PUBLICKEY_FILE) { 
     7013            if (s->method == AUTH_PUBLICKEY_FILE || s->method == AUTH_PUBLICKEY_PKCS11) { 
    69517014                /* 
    69527015                 * We have our passphrase. Now try the actual authentication. 
    69537016                 */ 
    69547017                struct ssh2_userkey *key; 
    69557018                const char *error = NULL; 
    6956  
    6957                 key = ssh2_load_userkey(&ssh->cfg.keyfile, s->password, 
    6958                                         &error); 
     7019                logevent("loading key"); 
     7020                if (s->method == AUTH_PUBLICKEY_FILE) {  
     7021                        key = ssh2_load_userkey(&ssh->cfg.keyfile, s->password,&error); 
     7022                } else { 
     7023                 /* need key identifier - label) */ 
     7024                        key = ssh2_load_pkcs11key(&ssh->cfg.pkcs11_token_label, s->password); 
     7025                        logevent("loaded pkcs11 key"); 
     7026                } 
    69597027                if (key == SSH2_WRONG_PASSPHRASE || key == NULL) { 
    69607028                    if (key == SSH2_WRONG_PASSPHRASE) { 
    69617029                        c_write_str(ssh, "Wrong passphrase\r\n"); 
    6962                         s->tried_pubkey_config = FALSE; 
     7030                         if(s->method == AUTH_PUBLICKEY_FILE) { 
     7031                                s->tried_pubkey_config = FALSE; 
     7032                         } else { 
     7033                                /* never gets here */ 
     7034                                s->tried_pkcs11=FALSE; 
     7035                         }  
    69637036                    } else { 
    69647037                        c_write_str(ssh, "Unable to load private key ("); 
    6965                         c_write_str(ssh, error); 
     7038                        if(error) c_write_str(ssh, error); 
    69667039                        c_write_str(ssh, ")\r\n"); 
    6967                         s->tried_pubkey_config = TRUE; 
     7040                        if(s->method ==AUTH_PUBLICKEY_FILE ) { 
     7041                                s->tried_pubkey_config = TRUE; 
     7042                        } else { 
     7043                                s->tried_pkcs11 = TRUE; 
     7044                        } 
    69687045                    } 
    69697046                    /* Send a spurious AUTH_NONE to return to the top. */ 
    69707047                    s->pktout = ssh2_pkt_init(SSH2_MSG_USERAUTH_REQUEST); 
    static void do_ssh2_authconn(Ssh ssh, un 
    70157092                           s->pktout->length - 5); 
    70167093                    p += s->pktout->length - 5; 
    70177094                    assert(p == sigdata_len); 
     7095 
     7096                        if((!key) || (!key->alg) || (!key->alg->sign) || (!key->data) ) {logevent("Bad key");exit(-1);} 
     7097                        else {logevent("Signing"); } 
     7098 
    70187099                    sigblob = key->alg->sign(key->data, (char *)sigdata, 
    70197100                                             sigdata_len, &sigblob_len); 
     7101 
     7102 
     7103                    /* check return of sigblob */ 
     7104                        if(!sigblob) { 
     7105                                logevent("Signing failed"); exit(1); 
     7106                        } 
     7107 
    70207108                    ssh2_add_sigblob(ssh, s->pktout, pkblob, pkblob_len, 
    70217109                                     sigblob, sigblob_len); 
    70227110                    sfree(pkblob); 
    70237111                    sfree(sigblob); 
    70247112                    sfree(sigdata); 
    70257113 
     7114                        logevent("Sending signature"); 
    70267115                    ssh2_pkt_send(ssh, s->pktout); 
    70277116                    s->type = AUTH_TYPE_PUBLICKEY; 
    70287117                    key->alg->freekey(key->data); 
    static void do_ssh2_authconn(Ssh ssh, un 
    72337322    } 
    72347323 
    72357324    /* 
     7325     * Run local command and, if requested wait for it to end and close 
     7326     */ 
     7327    if( strlen(ssh->cfg.local_cmd)>0) { 
     7328        run_local_cmd(ssh->cfg.local_cmd, ssh->cfg.local_cmd_close, ssh); 
     7329    }; 
     7330     
     7331 
     7332    /* 
    72367333     * Now allocate a pty for the session. 
    72377334     */ 
    72387335    if (ssh->mainchan && !ssh->cfg.nopty) { 
  • putty-0.

    diff -urNp putty-0.58.org/ssh.h putty-0.58+smartcard/ssh.h
    old new struct ssh_channel; 
    1111extern void sshfwd_close(struct ssh_channel *c); 
    1212extern int sshfwd_write(struct ssh_channel *c, char *, int); 
    1313extern void sshfwd_unthrottle(struct ssh_channel *c, int bufsize); 
     14typedef struct ssh_tag *Ssh; 
     15extern int ssh_do_close(Ssh ssh, int notify_exit); 
     16 
     17 
    1418 
    1519/* 
    1620 * Useful thing. 
    enum { 
    378382    SSH_KEYTYPE_UNOPENABLE, 
    379383    SSH_KEYTYPE_UNKNOWN, 
    380384    SSH_KEYTYPE_SSH1, SSH_KEYTYPE_SSH2, 
    381     SSH_KEYTYPE_OPENSSH, SSH_KEYTYPE_SSHCOM 
     385    SSH_KEYTYPE_OPENSSH, SSH_KEYTYPE_SSHCOM, 
     386    SSH_KEYTYPE_SMARTCARD 
    382387}; 
    383388int key_type(const Filename *filename); 
    384389char *key_type_to_str(int type); 
  • sshpubk.c

    diff -urNp putty-0.58.org/sshpubk.c putty-0.58+smartcard/sshpubk.c
    old new int key_type(const Filename *filename) 
    11821182    const char putty2_sig[] = "PuTTY-User-Key-File-"; 
    11831183    const char sshcom_sig[] = "---- BEGIN SSH2 ENCRYPTED PRIVAT"; 
    11841184    const char openssh_sig[] = "-----BEGIN "; 
     1185    const char putty_scard_sig[] = "PuTTY-User-Smartcard-Key-File-"; 
    11851186    int i; 
    11861187 
    11871188    fp = f_open(*filename, "r"); 
    int key_type(const Filename *filename) 
    11991200        return SSH_KEYTYPE_SSH2; 
    12001201    if (!memcmp(buf, openssh_sig, sizeof(openssh_sig)-1)) 
    12011202        return SSH_KEYTYPE_OPENSSH; 
     1203    if (!memcmp(buf, putty_scard_sig, sizeof(putty_scard_sig)-1)) 
     1204        return SSH_KEYTYPE_SMARTCARD; 
    12021205    if (!memcmp(buf, sshcom_sig, sizeof(sshcom_sig)-1)) 
    12031206        return SSH_KEYTYPE_SSHCOM; 
    12041207    return SSH_KEYTYPE_UNKNOWN;        /* unrecognised or EOF */ 
  • sshrsa.h

    diff -urNp putty-0.58.org/sshrsa.h putty-0.58+smartcard/sshrsa.h
    old new  
     1 
     2#define GET_32BIT(cp) \ 
     3    (((unsigned long)(unsigned char)(cp)[0] << 24) | \ 
     4    ((unsigned long)(unsigned char)(cp)[1] << 16) | \ 
     5    ((unsigned long)(unsigned char)(cp)[2] << 8) | \ 
     6    ((unsigned long)(unsigned char)(cp)[3])) 
     7 
     8#define PUT_32BIT(cp, value) { \ 
     9    (cp)[0] = (unsigned char)((value) >> 24); \ 
     10    (cp)[1] = (unsigned char)((value) >> 16); \ 
     11    (cp)[2] = (unsigned char)((value) >> 8); \ 
     12    (cp)[3] = (unsigned char)(value); } 
     13 
     14 
  • sshscard.c

    diff -urNp putty-0.58.org/sshscard.c putty-0.58+smartcard/sshscard.c
    old new  
     1#include "ssh.h" 
     2#include "sshrsa.h" 
     3#include "ppkcs11.h" 
     4#include "sshscard.h" 
     5#include "putty.h" 
     6 
     7const struct ssh_signkey ssh_pkcs11_rsa; 
     8 
     9typedef struct { 
     10    CK_SESSION_HANDLE session ;    
     11    CK_FUNCTION_LIST_PTR funcs ; 
     12    CK_SLOT_ID slot; 
     13    CK_OBJECT_HANDLE pubkey ;  
     14    CK_OBJECT_HANDLE privkey  ; 
     15} ssh2_pkcs11_key_t; 
     16 
     17struct sc_pkcs11_module * pkcs11_module =NULL; 
     18CK_SESSION_HANDLE pkcs11_session = CK_INVALID_HANDLE; 
     19CK_FUNCTION_LIST_PTR pkcs11_funcs=NULL; 
     20CK_SLOT_ID pkcs11_slot; 
     21 
     22void * frontend; 
     23 
     24/* logevent, only printf-formatted. */ 
     25 
     26#define logevent(s) logevent(frontend,s); 
     27static void logeventf(const char *fmt, ...) 
     28{ 
     29    va_list ap; 
     30    char *buf; 
     31 
     32    va_start(ap, fmt); 
     33    buf = dupvprintf(fmt, ap); 
     34    va_end(ap); 
     35    logevent(buf); 
     36    sfree(buf); 
     37} 
     38 
     39#define CHECK_CKR_BREAK(msg) \ 
     40        if(r!=CKR_OK) {\ 
     41                logeventf(msg,r);\ 
     42                break ; } 
     43 
     44                //logeventf(ssh, msg, r); 
     45 
     46#define CHECK_CKR_NULL(msg) \ 
     47        if(r!=CKR_OK) {\ 
     48                logeventf(msg,r);\ 
     49                return NULL ; } 
     50 
     51#define CHECK_CKR_ZERO(msg)\ 
     52        if(r!=CKR_OK) {\ 
     53                logeventf(msg,r);\ 
     54                return 0 ; } 
     55 
     56int find_pkcs11_key(ssh2_pkcs11_key_t * keydata, int private) { 
     57        CK_RV r; 
     58        CK_ATTRIBUTE keyattr; 
     59        CK_ULONG count; 
     60 
     61        CK_OBJECT_HANDLE key = CK_INVALID_HANDLE; 
     62        CK_OBJECT_CLASS class=CKO_PUBLIC_KEY; 
     63        if(private) class=CKO_PRIVATE_KEY; 
     64 
     65        keyattr.type=CKA_CLASS; 
     66        keyattr.pValue=&class; 
     67        keyattr.ulValueLen = sizeof (class); 
     68        if(keydata->funcs->C_FindObjectsInit(keydata->session, &keyattr, 1)!=CKR_OK) { 
     69                fprintf(stderr,"Failed to initialize pkcs11 key finder."); 
     70                return 0; 
     71        } 
     72        if( (r=keydata->funcs->C_FindObjects(keydata->session, &key, 1, &count)) !=CKR_OK || count==0 ) { 
     73                fprintf(stderr, "no pkcs11 key found r: %ld , count: %ld", r, count); 
     74                keydata->funcs->C_FindObjectsFinal(keydata->session); 
     75                return 0; 
     76        } 
     77        keydata->funcs->C_FindObjectsFinal(keydata->session); 
     78        if(private) {keydata->privkey=key;} else {keydata->pubkey=key;} 
     79        fprintf(stderr,"Found %s key", private ? "private" : "public" ); 
     80        return 1; 
     81 
     82} 
     83 
     84static unsigned long getmodulusbits(ssh2_pkcs11_key_t * key) { 
     85 
     86    CK_RV r; 
     87    CK_ATTRIBUTE template; 
     88    CK_ULONG ulCount=1; 
     89    CK_ULONG bits; 
     90 
     91    template.type=CKA_MODULUS_BITS; 
     92    template.pValue=NULL; 
     93    template.ulValueLen=0; 
     94 
     95    r=key->funcs->C_GetAttributeValue(key->session,key->privkey, &template, ulCount); 
     96 
     97    template.type=CKA_MODULUS_BITS; 
     98    template.pValue=&bits; 
     99 
     100    r=key->funcs->C_GetAttributeValue(key->session,key->privkey, &template, ulCount); 
     101 
     102 
     103    if(r !=CKR_OK) { 
     104        return 0; 
     105    } 
     106    return bits; 
     107} 
     108 
     109struct ssh2_userkey *ssh2_load_pkcs11key_fromfile(char* filename, char *passphrase, const char **errorstr) { 
     110    char * keylabel=NULL; 
     111    /* again, need to get keylabel from file */ 
     112    return ssh2_load_pkcs11key(keylabel,passphrase); 
     113} 
     114 
     115struct ssh2_userkey *ssh2_load_pkcs11key(char* label, char *passphrase) 
     116{ 
     117    CK_RV r; 
     118    ssh2_pkcs11_key_t * keydata; 
     119    struct ssh2_userkey *ret; 
     120    int passlen= passphrase ? strlen(passphrase) : 0; 
     121 
     122    ret = NULL;                /* return NULL for most errors */ 
     123 
     124    if (!passphrase)  
     125            goto error;  
     126 
     127    if ((r=pkcs11_funcs->C_Login(pkcs11_session, CKU_USER,  
     128            (CK_UTF8CHAR *) passphrase, passlen)) != CKR_OK) { 
     129            fprintf(stderr, "Failed to login to pkcs11 card - %ld", r); 
     130            return NULL; 
     131    } 
     132 
     133    keydata=snew(ssh2_pkcs11_key_t); 
     134    if(keydata==NULL) { 
     135            return NULL; 
     136    } 
     137    keydata->funcs=pkcs11_funcs; 
     138    keydata->session=pkcs11_session; 
     139    keydata->slot=pkcs11_slot; 
     140    keydata->pubkey=CK_INVALID_HANDLE; 
     141    keydata->privkey=CK_INVALID_HANDLE; 
     142 
     143    if (find_pkcs11_key(keydata,1)==0) { 
     144            return NULL; 
     145    } 
     146 
     147 
     148    ret = snew(struct ssh2_userkey); 
     149    ret->alg=&ssh_pkcs11_rsa; 
     150    ret->data=(void *) keydata; 
     151    ret->comment="PKCS11 library"; 
     152 
     153    /* 
     154     * Create and return the key. 
     155     */ 
     156 
     157 
     158    if (!ret->data) { 
     159    sfree(ret->comment); 
     160    sfree(ret); 
     161    ret = NULL; 
     162    } 
     163    return ret; 
     164 
     165    /* 
     166     * Error processing. 
     167     */ 
     168  error: 
     169    if (keydata) 
     170    sfree(keydata); 
     171    return ret; 
     172} 
     173 
     174static unsigned char *rsa2_pkcs11_public_blob(void * keydata, int *len) 
     175{ 
     176    CK_RV r; 
     177    CK_ATTRIBUTE template[]= { 
     178                {CKA_PUBLIC_EXPONENT, NULL, 0}, 
     179                {CKA_MODULUS, NULL, 0} 
     180    }; 
     181    CK_BYTE* modulus; 
     182    CK_BYTE* exponent; 
     183    Bignum bn_mod, bn_exp; 
     184    CK_ULONG ulCount=2; 
     185 
     186    struct RSAKey rsakey;  
     187 
     188    ssh2_pkcs11_key_t* key=(ssh2_pkcs11_key_t *) keydata; 
     189 
     190   /* need to get exponent and modulus */ 
     191 
     192    if(key->pubkey==CK_INVALID_HANDLE && ((r=find_pkcs11_key(key, 0))!=1 )) { 
     193            fprintf(stderr,"Failed to find public key - %ld ",r ); 
     194            return NULL; 
     195    } 
     196 
     197    r=key->funcs->C_GetAttributeValue(key->session, key->pubkey, template, ulCount); 
     198    if(r!=CKR_OK) { 
     199                fprintf(stderr, "failed to get attribute size - %ld", r); 
     200                return 0; 
     201    } 
     202    exponent=snewn(template[0].ulValueLen, CK_BYTE); 
     203    template[0].pValue=exponent; 
     204    modulus=snewn(template[1].ulValueLen, CK_BYTE); 
     205    template[1].pValue=modulus; 
     206 
     207    r=key->funcs->C_GetAttributeValue(key->session,key->pubkey, template, ulCount); 
     208    if(r !=CKR_OK) { 
     209        fprintf(stderr, "failed to get public key values - %ld ", r ); 
     210        return NULL; 
     211    } 
     212 
     213    fprintf(stderr, "got exponent %i and modulus %i", *exponent, *modulus); 
     214 
     215    rsakey.exponent=bignum_from_bytes(template[0].pValue, template[0].ulValueLen); 
     216    rsakey.modulus=bignum_from_bytes(template[1].pValue, template[1].ulValueLen); 
     217         
     218    sfree(exponent); sfree(modulus); 
     219    return ssh_rsa.public_blob(&rsakey, len); 
     220} 
     221 
     222unsigned char * ssh2_userkey_loadpkcs11pub_fromfile(char* keyfile, char** algorithm, int *pub_blob_len, const char **errorstr, void (*diewithme) (char*, ...) ) 
     223{ 
     224    char * keylabel=NULL; 
     225    char * pkcs11_library_file=NULL; 
     226 
     227    /* keylabel= */ 
     228    /* set library name and keylabel from file in order to get specific key */ 
     229    /* otherwise, initialize pkcs11 session based on info in keyfile */ 
     230    /* note - not implemented - use defaults and first key */ 
     231     
     232    init_pkcs11_library(frontend,pkcs11_library_file); 
     233    /* session is currently static - only one smartcard key can be loaded */ 
     234 
     235    return ssh2_userkey_loadpkcs11pub( keylabel, algorithm, pub_blob_len); 
     236} 
     237 
     238unsigned char * ssh2_userkey_loadpkcs11pub(char* keylabel,  
     239                              char** algorithm, 
     240                              int *pub_blob_len) 
     241{ 
     242  
     243  ssh2_pkcs11_key_t key; 
     244  key.session=pkcs11_session; 
     245  key.funcs=pkcs11_funcs; 
     246  key.slot=0; 
     247  key.pubkey=CK_INVALID_HANDLE; 
     248  key.privkey= CK_INVALID_HANDLE; 
     249  *algorithm="ssh-rsa"; 
     250  /* will need to get key first, to use label */ 
     251 
     252  return rsa2_pkcs11_public_blob(&key, pub_blob_len); 
     253 
     254} 
     255 
     256 
     257 
     258static unsigned char *rsa2_pkcs11_sign(void *keydata, char *data, int datalen, 
     259                int *psiglen) 
     260{ 
     261    ssh2_pkcs11_key_t *key=(ssh2_pkcs11_key_t *) keydata; 
     262    CK_RV r; 
     263    CK_MECHANISM mech = {CKM_SHA1_RSA_PKCS, NULL, 0} ; 
     264    CK_ULONG mech_count; 
     265    CK_ULONG siglen; 
     266    unsigned char *sig, *bytes; 
     267    int i, j, nbytes; 
     268 
     269    if( (!key) || (!key->funcs) || (!key->session) || (!key->privkey) ) { exit(-1);} 
     270    r=key->funcs->C_SignInit(key->session, &mech, key->privkey);  
     271    if (r!=CKR_OK) { 
     272                fprintf(stderr, "failed to init signing mechanism - %ld", r); 
     273                return NULL; 
     274    }  
     275 
     276    r=key->funcs->C_Sign(key->session, data, datalen, NULL, &siglen); 
     277    if (r!=CKR_OK) { 
     278                fprintf(stderr, "failed to get signature length"); 
     279                return NULL; 
     280    }  
     281    sig=snewn(siglen, unsigned char); 
     282 
     283    r=key->funcs->C_Sign(key->session, data, datalen, sig, &siglen); 
     284    if (r!=CKR_OK) { 
     285                fprintf(stderr, "failed to get signature  - %ld ", r); 
     286                return NULL; 
     287    } 
     288    fprintf(stderr, "signed! returning %ld bytes", siglen); 
     289 
     290    nbytes = siglen; 
     291    bytes = snewn(4 + 7 + 4 + nbytes, unsigned char); 
     292    PUT_32BIT(bytes, 7); 
     293    memcpy(bytes + 4, "ssh-rsa", 7); 
     294    PUT_32BIT(bytes + 4 + 7, nbytes); 
     295    for (i = 0; i < nbytes; i++) 
     296    bytes[4 + 7 + 4 + i] = sig[i]; // bignum_byte(out, nbytes - 1 - i); 
     297 
     298    *psiglen = 4 + 7 + 4 + nbytes; 
     299    return bytes; 
     300} 
     301 
     302static void rsa2_pkcs11_freekey(void * keydata) { 
     303  ssh2_pkcs11_key_t * key=(ssh2_pkcs11_key_t *) keydata; 
     304  sfree(key); 
     305} 
     306 
     307const struct ssh_signkey ssh_pkcs11_rsa = { 
     308    NULL, 
     309    rsa2_pkcs11_freekey, 
     310    NULL, 
     311    rsa2_pkcs11_public_blob, 
     312    NULL, 
     313    NULL, 
     314    NULL, 
     315    NULL, 
     316    NULL, 
     317    NULL, 
     318    NULL, 
     319    rsa2_pkcs11_sign, 
     320    "ssh-rsa", 
     321    "rsa2" 
     322}; 
     323 
     324 
     325/* 
     326const struct ssh_signkey ssh_scard_rsa = { 
     327    rsa2_newkey, 
     328    rsa2_freekey, 
     329    rsa2_fmtkey, 
     330    rsa2_public_blob, 
     331    rsa2_private_blob, 
     332    rsa2_createkey, 
     333    rsa2_openssh_createkey, 
     334    rsa2_openssh_fmtkey, 
     335    rsa2_fingerprint, 
     336    rsa2_verifysig, 
     337    rsa2_sign, 
     338    "ssh-rsa", 
     339    "rsa2" 
     340}; 
     341*/ 
     342 
     343int 
     344init_pkcs11_library(void * ssh_frontend, char* pkcs11_library_name) { 
     345        CK_RV r; 
     346        CK_ULONG slot_cnt = 0; 
     347        CK_SLOT_ID_PTR slot_list=NULL; 
     348 
     349 
     350        frontend=ssh_frontend; 
     351 
     352        if (pkcs11_library_name==NULL) { 
     353#ifdef linux 
     354        pkcs11_library_name="/tmp/opensc/src/pkcs11/.libs/opensc-pkcs11.so"; 
     355#endif 
     356#ifdef _WIN 
     357        pkcs11_library_name="opensc-pkcs11"; 
     358#endif 
     359        } 
     360        logevent("attempting pkcs11..."); 
     361        /* load module */ 
     362        pkcs11_module=C_LoadModule(pkcs11_library_name,&pkcs11_funcs); 
     363//      pkcs11_module=malloc(sizeof(struct sc_pkcs11_module)); 
     364//      load_pkcs11_module(pkcs11_library_name, ssh); 
     365        if(pkcs11_module==NULL) { 
     366            logevent("Failed to load pkcs11 module"); 
     367            return 0; 
     368        }  
     369 
     370        r=pkcs11_funcs->C_Initialize(NULL);  
     371        CHECK_CKR_ZERO("Failed to initialize pkcs11 library - %ld") 
     372 
     373        r=pkcs11_funcs->C_GetSlotList(FALSE, slot_list, &slot_cnt); 
     374        CHECK_CKR_ZERO("Failed to get slot count - returned - %ld") 
     375 
     376        slot_list=snewn(slot_cnt, CK_SLOT_ID); 
     377        r=pkcs11_funcs->C_GetSlotList(FALSE, slot_list, &slot_cnt); 
     378        CHECK_CKR_ZERO("Failed to get pkcs11 slot list - %ld") 
     379 
     380        pkcs11_slot=slot_list[0]; 
     381        r=pkcs11_funcs->C_OpenSession(pkcs11_slot, CKF_SERIAL_SESSION, 
     382                NULL, NULL, &pkcs11_session); 
     383        CHECK_CKR_ZERO("Failed to get pkcs11 session - %ld") 
     384 
     385        return TRUE; 
     386} 
     387 
  • sshscard.h

    diff -urNp putty-0.58.org/sshscard.h putty-0.58+smartcard/sshscard.h
    old new  
     1 
     2#ifndef SSHSCARD_H 
     3#define SSHSCARD_H 
     4 
     5 
     6int init_pkcs11_library(void * frontend, char* pkcs11_library_name); 
     7 
     8struct ssh2_userkey *ssh2_load_pkcs11key(char* keylabel, char *passphrase); 
     9         
     10unsigned char * ssh2_userkey_loadpkcs11pub( char* keylabel, char** algorithm, 
     11                              int *pub_blob_len); 
     12 
     13 
     14#endif 
     15 
  • unix/Makefile.gtk

    diff -urNp putty-0.58.org/unix/Makefile.gtk putty-0.58+smartcard/unix/Makefile.gtk
    old new man1dir=$(mandir)/man1 
    101101 
    102102all: plink pscp psftp pterm putty puttygen puttytel 
    103103 
    104 plink: be_all.o cmdline.o cproxy.o ldisc.o logging.o misc.o pinger.o \ 
    105                 portfwd.o proxy.o raw.o rlogin.o settings.o ssh.o sshaes.o \ 
    106                 sshblowf.o sshbn.o sshcrc.o sshcrcda.o sshdes.o sshdh.o \ 
    107                 sshdss.o sshmd5.o sshpubk.o sshrand.o sshrsa.o sshsh512.o \ 
     104plink: be_all.o cmdline.o cproxy.o ldisc.o libpkcs11.o local_cmd.o logging.o \ 
     105                misc.o pinger.o portfwd.o proxy.o raw.o rlogin.o settings.o \ 
     106                ssh.o sshaes.o sshblowf.o sshbn.o sshcrc.o sshcrcda.o \ 
     107                sshdes.o sshdh.o sshdss.o sshmd5.o sshpubk.o sshrand.o \ 
     108                sshrsa.o sshscard.o sshsh512.o sshsha.o sshzlib.o telnet.o \ 
     109                time.o timing.o tree234.o ux_x11.o uxagentc.o uxcons.o \ 
     110                uxmisc.o uxnet.o uxnoise.o uxplink.o uxproxy.o uxsel.o \ 
     111                uxsignal.o uxstore.o version.o wildcard.o x11fwd.o 
     112        $(CC) $(ULDFLAGS) -o $@ be_all.o cmdline.o cproxy.o ldisc.o \ 
     113                libpkcs11.o local_cmd.o logging.o misc.o pinger.o portfwd.o \ 
     114                proxy.o raw.o rlogin.o settings.o ssh.o sshaes.o sshblowf.o \ 
     115                sshbn.o sshcrc.o sshcrcda.o sshdes.o sshdh.o sshdss.o \ 
     116                sshmd5.o sshpubk.o sshrand.o sshrsa.o sshscard.o sshsh512.o \ 
    108117                sshsha.o sshzlib.o telnet.o time.o timing.o tree234.o \ 
    109118                ux_x11.o uxagentc.o uxcons.o uxmisc.o uxnet.o uxnoise.o \ 
    110119                uxplink.o uxproxy.o uxsel.o uxsignal.o uxstore.o version.o \ 
    111                 wildcard.o x11fwd.o 
    112         $(CC) $(ULDFLAGS) -o $@ be_all.o cmdline.o cproxy.o ldisc.o \ 
    113                 logging.o misc.o pinger.o portfwd.o proxy.o raw.o rlogin.o \ 
    114                 settings.o ssh.o sshaes.o sshblowf.o sshbn.o sshcrc.o \ 
    115                 sshcrcda.o sshdes.o sshdh.o sshdss.o sshmd5.o sshpubk.o \ 
    116                 sshrand.o sshrsa.o sshsh512.o sshsha.o sshzlib.o telnet.o \ 
    117                 time.o timing.o tree234.o ux_x11.o uxagentc.o uxcons.o \ 
    118                 uxmisc.o uxnet.o uxnoise.o uxplink.o uxproxy.o uxsel.o \ 
    119                 uxsignal.o uxstore.o version.o wildcard.o x11fwd.o  
     120                wildcard.o x11fwd.o  
    120121 
    121 pscp: be_none.o cmdline.o cproxy.o int64.o logging.o misc.o pinger.o \ 
    122                 portfwd.o proxy.o pscp.o settings.o sftp.o ssh.o sshaes.o \ 
    123                 sshblowf.o sshbn.o sshcrc.o sshcrcda.o sshdes.o sshdh.o \ 
    124                 sshdss.o sshmd5.o sshpubk.o sshrand.o sshrsa.o sshsh512.o \ 
    125                 sshsha.o sshzlib.o time.o timing.o tree234.o uxagentc.o \ 
    126                 uxcons.o uxmisc.o uxnet.o uxnoise.o uxproxy.o uxsel.o \ 
    127                 uxsftp.o uxstore.o version.o wildcard.o x11fwd.o 
    128         $(CC) $(ULDFLAGS) -o $@ be_none.o cmdline.o cproxy.o int64.o \ 
    129                 logging.o misc.o pinger.o portfwd.o proxy.o pscp.o \ 
    130                 settings.o sftp.o ssh.o sshaes.o sshblowf.o sshbn.o sshcrc.o \ 
    131                 sshcrcda.o sshdes.o sshdh.o sshdss.o sshmd5.o sshpubk.o \ 
    132                 sshrand.o sshrsa.o sshsh512.o sshsha.o sshzlib.o time.o \ 
     122pscp: be_none.o cmdline.o cproxy.o int64.o libpkcs11.o local_cmd.o logging.o \ 
     123                misc.o pinger.o portfwd.o proxy.o pscp.o settings.o sftp.o \ 
     124                ssh.o sshaes.o sshblowf.o sshbn.o sshcrc.o sshcrcda.o \ 
     125                sshdes.o sshdh.o sshdss.o sshmd5.o sshpubk.o sshrand.o \ 
     126                sshrsa.o sshscard.o sshsh512.o sshsha.o sshzlib.o time.o \ 
    133127                timing.o tree234.o uxagentc.o uxcons.o uxmisc.o uxnet.o \ 
    134128                uxnoise.o uxproxy.o uxsel.o uxsftp.o uxstore.o version.o \ 
    135                 wildcard.o x11fwd.o  
    136  
    137 psftp: be_none.o cmdline.o cproxy.o int64.o logging.o misc.o pinger.o \ 
    138                 portfwd.o proxy.o psftp.o settings.o sftp.o ssh.o sshaes.o \ 
    139                 sshblowf.o sshbn.o sshcrc.o sshcrcda.o sshdes.o sshdh.o \ 
    140                 sshdss.o sshmd5.o sshpubk.o sshrand.o sshrsa.o sshsh512.o \ 
     129                wildcard.o x11fwd.o 
     130        $(CC) $(ULDFLAGS) -o $@ be_none.o cmdline.o cproxy.o int64.o \ 
     131                libpkcs11.o local_cmd.o logging.o misc.o pinger.o portfwd.o \ 
     132                proxy.o pscp.o settings.o sftp.o ssh.o sshaes.o sshblowf.o \ 
     133                sshbn.o sshcrc.o sshcrcda.o sshdes.o sshdh.o sshdss.o \ 
     134                sshmd5.o sshpubk.o sshrand.o sshrsa.o sshscard.o sshsh512.o \ 
    141135                sshsha.o sshzlib.o time.o timing.o tree234.o uxagentc.o \ 
    142136                uxcons.o uxmisc.o uxnet.o uxnoise.o uxproxy.o uxsel.o \ 
    143                 uxsftp.o uxstore.o version.o wildcard.o x11fwd.o 
    144         $(CC) $(ULDFLAGS) -o $@ be_none.o cmdline.o cproxy.o int64.o \ 
     137                uxsftp.o uxstore.o version.o wildcard.o x11fwd.o  
     138 
     139psftp: be_none.o cmdline.o cproxy.o int64.o libpkcs11.o local_cmd.o \ 
    145140                logging.o misc.o pinger.o portfwd.o proxy.o psftp.o \ 
    146141                settings.o sftp.o ssh.o sshaes.o sshblowf.o sshbn.o sshcrc.o \ 
    147142                sshcrcda.o sshdes.o sshdh.o sshdss.o sshmd5.o sshpubk.o \ 
    148                 sshrand.o sshrsa.o sshsh512.o sshsha.o sshzlib.o time.o \ 
    149                 timing.o tree234.o uxagentc.o uxcons.o uxmisc.o uxnet.o \ 
    150                 uxnoise.o uxproxy.o uxsel.o uxsftp.o uxstore.o version.o \ 
    151                 wildcard.o x11fwd.o  
     143                sshrand.o sshrsa.o sshscard.o sshsh512.o sshsha.o sshzlib.o \ 
     144                time.o timing.o tree234.o uxagentc.o uxcons.o uxmisc.o \ 
     145                uxnet.o uxnoise.o uxproxy.o uxsel.o uxsftp.o uxstore.o \ 
     146                version.o wildcard.o x11fwd.o 
     147        $(CC) $(ULDFLAGS) -o $@ be_none.o cmdline.o cproxy.o int64.o \ 
     148                libpkcs11.o local_cmd.o logging.o misc.o pinger.o portfwd.o \ 
     149                proxy.o psftp.o settings.o sftp.o ssh.o sshaes.o sshblowf.o \ 
     150                sshbn.o sshcrc.o sshcrcda.o sshdes.o sshdh.o sshdss.o \ 
     151                sshmd5.o sshpubk.o sshrand.o sshrsa.o sshscard.o sshsh512.o \ 
     152                sshsha.o sshzlib.o time.o timing.o tree234.o uxagentc.o \ 
     153                uxcons.o uxmisc.o uxnet.o uxnoise.o uxproxy.o uxsel.o \ 
     154                uxsftp.o uxstore.o version.o wildcard.o x11fwd.o  
    152155 
    153156pterm: be_none.o cmdline.o config.o dialog.o fromucs.o gtkcfg.o gtkcols.o \ 
    154157                gtkdlg.o gtkpanel.o gtkwin.o ldisc.o ldiscucs.o localenc.o \ 
    pterm: be_none.o cmdline.o config.o dial 
    168171 
    169172putty: be_all.o cmdline.o config.o cproxy.o dialog.o fromucs.o gtkcfg.o \ 
    170173                gtkcols.o gtkdlg.o gtkpanel.o gtkwin.o ldisc.o ldiscucs.o \ 
    171                 localenc.o logging.o macenc.o mimeenc.o minibidi.o misc.o \ 
    172                 pinger.o portfwd.o proxy.o raw.o rlogin.o sbcs.o sbcsdat.o \ 
    173                 settings.o slookup.o ssh.o sshaes.o sshblowf.o sshbn.o \ 
    174                 sshcrc.o sshcrcda.o sshdes.o sshdh.o sshdss.o sshmd5.o \ 
    175                 sshpubk.o sshrand.o sshrsa.o sshsh512.o sshsha.o sshzlib.o \ 
    176                 telnet.o terminal.o time.o timing.o toucs.o tree234.o utf8.o \ 
    177                 ux_x11.o uxagentc.o uxcfg.o uxmisc.o uxnet.o uxnoise.o \ 
    178                 uxprint.o uxproxy.o uxputty.o uxsel.o uxsignal.o uxstore.o \ 
    179                 uxucs.o version.o wcwidth.o wildcard.o x11fwd.o xenc.o \ 
    180                 xkeysym.o 
    181         $(CC) $(XLDFLAGS) -o $@ be_all.o cmdline.o config.o cproxy.o \ 
    182                 dialog.o fromucs.o gtkcfg.o gtkcols.o gtkdlg.o gtkpanel.o \ 
    183                 gtkwin.o ldisc.o ldiscucs.o localenc.o logging.o macenc.o \ 
     174                libpkcs11.o local_cmd.o localenc.o logging.o macenc.o \ 
    184175                mimeenc.o minibidi.o misc.o pinger.o portfwd.o proxy.o raw.o \ 
    185176                rlogin.o sbcs.o sbcsdat.o settings.o slookup.o ssh.o \ 
    186177                sshaes.o sshblowf.o sshbn.o sshcrc.o sshcrcda.o sshdes.o \ 
    187178                sshdh.o sshdss.o sshmd5.o sshpubk.o sshrand.o sshrsa.o \ 
    188                 sshsh512.o sshsha.o sshzlib.o telnet.o terminal.o time.o \ 
    189                 timing.o toucs.o tree234.o utf8.o ux_x11.o uxagentc.o \ 
     179                sshscard.o sshsh512.o sshsha.o sshzlib.o telnet.o terminal.o \ 
     180                time.o timing.o toucs.o tree234.o utf8.o ux_x11.o uxagentc.o \ 
    190181                uxcfg.o uxmisc.o uxnet.o uxnoise.o uxprint.o uxproxy.o \ 
    191182                uxputty.o uxsel.o uxsignal.o uxstore.o uxucs.o version.o \ 
    192                 wcwidth.o wildcard.o x11fwd.o xenc.o xkeysym.o  
     183                wcwidth.o wildcard.o x11fwd.o xenc.o xkeysym.o 
     184        $(CC) $(XLDFLAGS) -o $@ be_all.o cmdline.o config.o cproxy.o \ 
     185                dialog.o fromucs.o gtkcfg.o gtkcols.o gtkdlg.o gtkpanel.o \ 
     186                gtkwin.o ldisc.o ldiscucs.o libpkcs11.o local_cmd.o \ 
     187                localenc.o logging.o macenc.o mimeenc.o minibidi.o misc.o \ 
     188                pinger.o portfwd.o proxy.o raw.o rlogin.o sbcs.o sbcsdat.o \ 
     189                settings.o slookup.o ssh.o sshaes.o sshblowf.o sshbn.o \ 
     190                sshcrc.o sshcrcda.o sshdes.o sshdh.o sshdss.o sshmd5.o \ 
     191                sshpubk.o sshrand.o sshrsa.o sshscard.o sshsh512.o sshsha.o \ 
     192                sshzlib.o telnet.o terminal.o time.o timing.o toucs.o \ 
     193                tree234.o utf8.o ux_x11.o uxagentc.o uxcfg.o uxmisc.o \ 
     194                uxnet.o uxnoise.o uxprint.o uxproxy.o uxputty.o uxsel.o \ 
     195                uxsignal.o uxstore.o uxucs.o version.o wcwidth.o wildcard.o \ 
     196                x11fwd.o xenc.o xkeysym.o  
    193197 
    194198puttygen: cmdgen.o import.o misc.o notiming.o sshaes.o sshbn.o sshdes.o \ 
    195199                sshdss.o sshdssg.o sshmd5.o sshprime.o sshpubk.o sshrand.o \ 
    ldiscucs.o: ../ldiscucs.c ../putty.h ../ 
    300304                ../mac/macstuff.h ../macosx/osx.h ../unix/unix.h \ 
    301305                ../puttymem.h ../windows/winhelp.h ../charset/charset.h 
    302306        $(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) -c ../ldiscucs.c 
     307libpkcs11.o: ../libpkcs11.c ../pkcs11.h ../ppkcs11.h  
     308        $(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) -c ../libpkcs11.c 
     309local_cmd.o: ../local_cmd.c 
     310        $(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) -c ../local_cmd.c 
    303311localenc.o: ../charset/localenc.c ../charset/charset.h ../charset/internal.h 
    304312        $(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) -c ../charset/localenc.c 
    305313logging.o: ../logging.c ../putty.h ../puttyps.h ../network.h ../misc.h \ 
    sizetip.o: ../windows/sizetip.c ../putty 
    507515slookup.o: ../charset/slookup.c ../charset/charset.h ../charset/internal.h \ 
    508516                ../charset/enum.c ../charset/sbcsdat.c ../charset/utf8.c 
    509517        $(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) -c ../charset/slookup.c 
    510 ssh.o: ../ssh.c ../putty.h ../tree234.h ../ssh.h ../puttyps.h ../network.h \ 
    511                 ../misc.h ../puttymem.h ../int64.h ../windows/winstuff.h \ 
     518ssh.o: ../ssh.c ../putty.h ../tree234.h ../ssh.h ../pkcs11.h ../ppkcs11.h ../sshscard.h \ 
     519                ../puttyps.h ../network.h ../misc.h ../puttymem.h ../int64.h \ 
     520                ../windows/winstuff.h \ 
    512521                ../mac/macstuff.h ../macosx/osx.h ../unix/unix.h \ 
    513522                ../windows/winhelp.h ../charset/charset.h 
    514523        $(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) -c ../ssh.c 
    sshrsa.o: ../sshrsa.c ../ssh.h ../misc.h 
    559568sshrsag.o: ../sshrsag.c ../ssh.h ../puttymem.h ../network.h ../int64.h \ 
    560569                ../misc.h 
    561570        $(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) -c ../sshrsag.c 
     571sshscard.o: ../sshscard.c ../ssh.h ../sshrsa.h ../pkcs11.h ../ppkcs11.h ../sshscard.h \ 
     572                ../putty.h ../puttymem.h ../network.h ../int64.h ../misc.h \ 
     573                ../puttyps.h \ 
     574                ../windows/winstuff.h ../mac/macstuff.h ../macosx/osx.h \ 
     575                ../unix/unix.h ../tree234.h ../windows/winhelp.h \ 
     576                ../charset/charset.h 
     577        $(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) -c ../sshscard.c 
    562578sshsh512.o: ../sshsh512.c ../ssh.h ../puttymem.h ../network.h ../int64.h \ 
    563579                ../misc.h 
    564580        $(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) -c ../sshsh512.c 
    winpgen.o: ../windows/winpgen.c ../putty 
    770786                ../charset/charset.h 
    771787        $(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) -c ../windows/winpgen.c 
    772788winpgnt.o: ../windows/winpgnt.c ../putty.h ../ssh.h ../misc.h ../tree234.h \ 
    773                 ../puttyps.h ../network.h ../puttymem.h ../int64.h \ 
    774                 ../windows/winstuff.h ../mac/macstuff.h ../macosx/osx.h \ 
    775                 ../unix/unix.h ../windows/winhelp.h ../charset/charset.h 
     789                ../sshscard.h ../puttyps.h ../network.h ../puttymem.h \ 
     790                ../int64.h ../windows/winstuff.h ../mac/macstuff.h \ 
     791                ../macosx/osx.h ../unix/unix.h ../windows/winhelp.h \ 
     792                ../charset/charset.h 
    776793        $(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) -c ../windows/winpgnt.c 
    777794winpgntc.o: ../windows/winpgntc.c ../putty.h ../puttyps.h ../network.h \ 
    778795                ../misc.h ../windows/winstuff.h ../mac/macstuff.h \ 
  • windows/Makefile.bor

    diff -urNp putty-0.58.org/windows/Makefile.bor putty-0.58+smartcard/windows/Makefile.bor
    old new BCB = $(MAKEDIR)\.. 
    102102all: pageant.exe plink.exe pscp.exe psftp.exe putty.exe puttygen.exe \ 
    103103                puttytel.exe 
    104104 
    105 pageant.exe: misc.obj pageant.res sshaes.obj sshbn.obj sshdes.obj sshdss.obj \ 
    106                 sshmd5.obj sshpubk.obj sshrsa.obj sshsh512.obj sshsha.obj \ 
    107                 tree234.obj version.obj winmisc.obj winpgnt.obj winpgntc.obj \ 
    108                 winutils.obj pageant.rsp 
     105pageant.exe: libpkcs11.obj misc.obj pageant.res sshaes.obj sshbn.obj \ 
     106                sshdes.obj sshdss.obj sshmd5.obj sshpubk.obj sshrsa.obj \ 
     107                sshscard.obj sshsh512.obj sshsha.obj tree234.obj version.obj \ 
     108                winmisc.obj winpgnt.obj winpgntc.obj winutils.obj \ 
     109                pageant.rsp 
    109110        ilink32 -aa -Gn -L$(BCB)\lib @pageant.rsp 
    110111 
    111 plink.exe: be_all.obj cmdline.obj cproxy.obj ldisc.obj logging.obj misc.obj \ 
    112                 pinger.obj plink.res portfwd.obj pproxy.obj proxy.obj \ 
    113                 raw.obj rlogin.obj settings.obj ssh.obj sshaes.obj \ 
    114                 sshblowf.obj sshbn.obj sshcrc.obj sshcrcda.obj sshdes.obj \ 
    115                 sshdh.obj sshdss.obj sshmd5.obj sshpubk.obj sshrand.obj \ 
    116                 sshrsa.obj sshsh512.obj sshsha.obj sshzlib.obj telnet.obj \ 
    117                 timing.obj tree234.obj version.obj wildcard.obj wincons.obj \ 
    118                 windefs.obj winmisc.obj winnet.obj winnoise.obj winpgntc.obj \ 
     112plink.exe: be_all.obj cmdline.obj cproxy.obj ldisc.obj libpkcs11.obj \ 
     113                local_cmd.obj logging.obj misc.obj pinger.obj plink.res \ 
     114                portfwd.obj pproxy.obj proxy.obj raw.obj rlogin.obj \ 
     115                settings.obj ssh.obj sshaes.obj sshblowf.obj sshbn.obj \ 
     116                sshcrc.obj sshcrcda.obj sshdes.obj sshdh.obj sshdss.obj \ 
     117                sshmd5.obj sshpubk.obj sshrand.obj sshrsa.obj sshscard.obj \ 
     118                sshsh512.obj sshsha.obj sshzlib.obj telnet.obj timing.obj \ 
     119                tree234.obj version.obj wildcard.obj wincons.obj windefs.obj \ 
     120                winmisc.obj winnet.obj winnoise.obj winpgntc.obj \ 
    119121                winplink.obj winstore.obj wintime.obj x11fwd.obj plink.rsp 
    120122        ilink32 -ap -Gn -L$(BCB)\lib @plink.rsp 
    121123 
    122 pscp.exe: be_none.obj cmdline.obj cproxy.obj int64.obj logging.obj misc.obj \ 
    123                 pinger.obj portfwd.obj pproxy.obj proxy.obj pscp.obj \ 
    124                 pscp.res settings.obj sftp.obj ssh.obj sshaes.obj \ 
    125                 sshblowf.obj sshbn.obj sshcrc.obj sshcrcda.obj sshdes.obj \ 
    126                 sshdh.obj sshdss.obj sshmd5.obj sshpubk.obj sshrand.obj \ 
    127                 sshrsa.obj sshsh512.obj sshsha.obj sshzlib.obj timing.obj \ 
    128                 tree234.obj version.obj wildcard.obj wincons.obj windefs.obj \ 
    129                 winmisc.obj winnet.obj winnoise.obj winpgntc.obj winsftp.obj \ 
    130                 winstore.obj wintime.obj x11fwd.obj pscp.rsp 
     124pscp.exe: be_none.obj cmdline.obj cproxy.obj int64.obj libpkcs11.obj \ 
     125                local_cmd.obj logging.obj misc.obj pinger.obj portfwd.obj \ 
     126                pproxy.obj proxy.obj pscp.obj pscp.res settings.obj sftp.obj \ 
     127                ssh.obj sshaes.obj sshblowf.obj sshbn.obj sshcrc.obj \ 
     128                sshcrcda.obj sshdes.obj sshdh.obj sshdss.obj sshmd5.obj \ 
     129                sshpubk.obj sshrand.obj sshrsa.obj sshscard.obj sshsh512.obj \ 
     130                sshsha.obj sshzlib.obj timing.obj tree234.obj version.obj \ 
     131                wildcard.obj wincons.obj windefs.obj winmisc.obj winnet.obj \ 
     132                winnoise.obj winpgntc.obj winsftp.obj winstore.obj \ 
     133                wintime.obj x11fwd.obj pscp.rsp 
    131134        ilink32 -ap -Gn -L$(BCB)\lib @pscp.rsp 
    132135 
    133 psftp.exe: be_none.obj cmdline.obj cproxy.obj int64.obj logging.obj misc.obj \ 
    134                 pinger.obj portfwd.obj pproxy.obj proxy.obj pscp.res \ 
    135                 psftp.obj settings.obj sftp.obj ssh.obj sshaes.obj \ 
    136                 sshblowf.obj sshbn.obj sshcrc.obj sshcrcda.obj sshdes.obj \ 
    137                 sshdh.obj sshdss.obj sshmd5.obj sshpubk.obj sshrand.obj \ 
    138                 sshrsa.obj sshsh512.obj sshsha.obj sshzlib.obj timing.obj \ 
    139                 tree234.obj version.obj wildcard.obj wincons.obj windefs.obj \ 
    140                 winmisc.obj winnet.obj winnoise.obj winpgntc.obj winsftp.obj \ 
     136psftp.exe: be_none.obj cmdline.obj cproxy.obj int64.obj libpkcs11.obj \ 
     137                local_cmd.obj logging.obj misc.obj pinger.obj portfwd.obj \ 
     138                pproxy.obj proxy.obj pscp.res psftp.obj settings.obj \ 
     139                sftp.obj ssh.obj sshaes.obj sshblowf.obj sshbn.obj \ 
     140                sshcrc.obj sshcrcda.obj sshdes.obj sshdh.obj sshdss.obj \ 
     141                sshmd5.obj sshpubk.obj sshrand.obj sshrsa.obj sshscard.obj \ 
     142                sshsh512.obj sshsha.obj sshzlib.obj timing.obj tree234.obj \ 
     143                version.obj wildcard.obj wincons.obj windefs.obj winmisc.obj \ 
     144                winnet.obj winnoise.obj winpgntc.obj winsftp.obj \ 
    141145                winstore.obj wintime.obj x11fwd.obj psftp.rsp 
    142146        ilink32 -ap -Gn -L$(BCB)\lib @psftp.rsp 
    143147 
    144148putty.exe: be_all.obj cmdline.obj config.obj cproxy.obj dialog.obj ldisc.obj \ 
    145                 ldiscucs.obj logging.obj minibidi.obj misc.obj pinger.obj \ 
    146                 portfwd.obj pproxy.obj proxy.obj raw.obj rlogin.obj \ 
    147                 settings.obj sizetip.obj ssh.obj sshaes.obj sshblowf.obj \ 
    148                 sshbn.obj sshcrc.obj sshcrcda.obj sshdes.obj sshdh.obj \ 
    149                 sshdss.obj sshmd5.obj sshpubk.obj sshrand.obj sshrsa.obj \ 
    150                 sshsh512.obj sshsha.obj sshzlib.obj telnet.obj terminal.obj \ 
    151                 timing.obj tree234.obj version.obj wcwidth.obj wildcard.obj \ 
    152                 win_res.res wincfg.obj winctrls.obj windefs.obj windlg.obj \ 
    153                 window.obj winmisc.obj winnet.obj winnoise.obj winpgntc.obj \ 
     149                ldiscucs.obj libpkcs11.obj local_cmd.obj logging.obj \ 
     150                minibidi.obj misc.obj pinger.obj portfwd.obj pproxy.obj \ 
     151                proxy.obj raw.obj rlogin.obj settings.obj sizetip.obj \ 
     152                ssh.obj sshaes.obj sshblowf.obj sshbn.obj sshcrc.obj \ 
     153                sshcrcda.obj sshdes.obj sshdh.obj sshdss.obj sshmd5.obj \ 
     154                sshpubk.obj sshrand.obj sshrsa.obj sshscard.obj sshsh512.obj \ 
     155                sshsha.obj sshzlib.obj telnet.obj terminal.obj timing.obj \ 
     156                tree234.obj version.obj wcwidth.obj wildcard.obj win_res.res \ 
     157                wincfg.obj winctrls.obj windefs.obj windlg.obj window.obj \ 
     158                winmisc.obj winnet.obj winnoise.obj winpgntc.obj \ 
    154159                winprint.obj winstore.obj wintime.obj winucs.obj \ 
    155160                winutils.obj x11fwd.obj putty.rsp 
    156161        ilink32 -aa -Gn -L$(BCB)\lib @putty.rsp 
    puttytel.exe: be_nossh.obj cmdline.obj c 
    175180 
    176181pageant.rsp: $(MAKEFILE) 
    177182        echo c0w32 + > pageant.rsp 
    178         echo misc.obj sshaes.obj sshbn.obj sshdes.obj + >> pageant.rsp 
    179         echo sshdss.obj sshmd5.obj sshpubk.obj sshrsa.obj + >> pageant.rsp 
    180         echo sshsh512.obj sshsha.obj tree234.obj version.obj + >> pageant.rsp 
    181         echo winmisc.obj winpgnt.obj winpgntc.obj winutils.obj >> pageant.rsp 
     183        echo libpkcs11.obj misc.obj sshaes.obj sshbn.obj + >> pageant.rsp 
     184        echo sshdes.obj sshdss.obj sshmd5.obj sshpubk.obj + >> pageant.rsp 
     185        echo sshrsa.obj sshscard.obj sshsh512.obj sshsha.obj + >> pageant.rsp 
     186        echo tree234.obj version.obj winmisc.obj winpgnt.obj + >> pageant.rsp 
     187        echo winpgntc.obj winutils.obj >> pageant.rsp 
    182188        echo pageant.exe >> pageant.rsp 
    183189        echo nul,cw32 import32, >> pageant.rsp 
    184190        echo pageant.res >> pageant.rsp 
    pageant.rsp: $(MAKEFILE) 
    186192plink.rsp: $(MAKEFILE) 
    187193        echo c0x32 + > plink.rsp 
    188194        echo be_all.obj cmdline.obj cproxy.obj ldisc.obj + >> plink.rsp 
    189         echo logging.obj misc.obj pinger.obj portfwd.obj + >> plink.rsp 
    190         echo pproxy.obj proxy.obj raw.obj rlogin.obj + >> plink.rsp 
    191         echo settings.obj ssh.obj sshaes.obj sshblowf.obj + >> plink.rsp 
    192         echo sshbn.obj sshcrc.obj sshcrcda.obj sshdes.obj + >> plink.rsp 
    193         echo sshdh.obj sshdss.obj sshmd5.obj sshpubk.obj + >> plink.rsp 
    194         echo sshrand.obj sshrsa.obj sshsh512.obj sshsha.obj + >> plink.rsp 
    195         echo sshzlib.obj telnet.obj timing.obj tree234.obj + >> plink.rsp 
    196         echo version.obj wildcard.obj wincons.obj windefs.obj + >> plink.rsp 
    197         echo winmisc.obj winnet.obj winnoise.obj winpgntc.obj + >> plink.rsp 
    198         echo winplink.obj winstore.obj wintime.obj x11fwd.obj >> plink.rsp 
     195        echo libpkcs11.obj local_cmd.obj logging.obj misc.obj + >> plink.rsp 
     196        echo pinger.obj portfwd.obj pproxy.obj proxy.obj + >> plink.rsp 
     197        echo raw.obj rlogin.obj settings.obj ssh.obj + >> plink.rsp 
     198        echo sshaes.obj sshblowf.obj sshbn.obj sshcrc.obj + >> plink.rsp 
     199        echo sshcrcda.obj sshdes.obj sshdh.obj sshdss.obj + >> plink.rsp 
     200        echo sshmd5.obj sshpubk.obj sshrand.obj sshrsa.obj + >> plink.rsp 
     201        echo sshscard.obj sshsh512.obj sshsha.obj sshzlib.obj + >> plink.rsp 
     202        echo telnet.obj timing.obj tree234.obj version.obj + >> plink.rsp 
     203        echo wildcard.obj wincons.obj windefs.obj winmisc.obj + >> plink.rsp 
     204        echo winnet.obj winnoise.obj winpgntc.obj winplink.obj + >> plink.rsp 
     205        echo winstore.obj wintime.obj x11fwd.obj >> plink.rsp 
    199206        echo plink.exe >> plink.rsp 
    200207        echo nul,cw32 import32, >> plink.rsp 
    201208        echo plink.res >> plink.rsp 
    plink.rsp: $(MAKEFILE) 
    203210pscp.rsp: $(MAKEFILE) 
    204211        echo c0x32 + > pscp.rsp 
    205212        echo be_none.obj cmdline.obj cproxy.obj int64.obj + >> pscp.rsp 
    206         echo logging.obj misc.obj pinger.obj portfwd.obj + >> pscp.rsp 
    207         echo pproxy.obj proxy.obj pscp.obj settings.obj + >> pscp.rsp 
    208         echo sftp.obj ssh.obj sshaes.obj sshblowf.obj + >> pscp.rsp 
    209         echo sshbn.obj sshcrc.obj sshcrcda.obj sshdes.obj + >> pscp.rsp 
    210         echo sshdh.obj sshdss.obj sshmd5.obj sshpubk.obj + >> pscp.rsp 
    211         echo sshrand.obj sshrsa.obj sshsh512.obj sshsha.obj + >> pscp.rsp 
    212         echo sshzlib.obj timing.obj tree234.obj version.obj + >> pscp.rsp 
    213         echo wildcard.obj wincons.obj windefs.obj winmisc.obj + >> pscp.rsp 
    214         echo winnet.obj winnoise.obj winpgntc.obj winsftp.obj + >> pscp.rsp 
    215         echo winstore.obj wintime.obj x11fwd.obj >> pscp.rsp 
     213        echo libpkcs11.obj local_cmd.obj logging.obj misc.obj + >> pscp.rsp 
     214        echo pinger.obj portfwd.obj pproxy.obj proxy.obj + >> pscp.rsp 
     215        echo pscp.obj settings.obj sftp.obj ssh.obj sshaes.obj + >> pscp.rsp 
     216        echo sshblowf.obj sshbn.obj sshcrc.obj sshcrcda.obj + >> pscp.rsp 
     217        echo sshdes.obj sshdh.obj sshdss.obj sshmd5.obj + >> pscp.rsp 
     218        echo sshpubk.obj sshrand.obj sshrsa.obj sshscard.obj + >> pscp.rsp 
     219        echo sshsh512.obj sshsha.obj sshzlib.obj timing.obj + >> pscp.rsp 
     220        echo tree234.obj version.obj wildcard.obj wincons.obj + >> pscp.rsp 
     221        echo windefs.obj winmisc.obj winnet.obj winnoise.obj + >> pscp.rsp 
     222        echo winpgntc.obj winsftp.obj winstore.obj wintime.obj + >> pscp.rsp 
     223        echo x11fwd.obj >> pscp.rsp 
    216224        echo pscp.exe >> pscp.rsp 
    217225        echo nul,cw32 import32, >> pscp.rsp 
    218226        echo pscp.res >> pscp.rsp 
    pscp.rsp: $(MAKEFILE) 
    220228psftp.rsp: $(MAKEFILE) 
    221229        echo c0x32 + > psftp.rsp 
    222230        echo be_none.obj cmdline.obj cproxy.obj int64.obj + >> psftp.rsp 
    223         echo logging.obj misc.obj pinger.obj portfwd.obj + >> psftp.rsp 
    224         echo pproxy.obj proxy.obj psftp.obj settings.obj + >> psftp.rsp 
    225         echo sftp.obj ssh.obj sshaes.obj sshblowf.obj + >> psftp.rsp 
    226         echo sshbn.obj sshcrc.obj sshcrcda.obj sshdes.obj + >> psftp.rsp 
    227         echo sshdh.obj sshdss.obj sshmd5.obj sshpubk.obj + >> psftp.rsp 
    228         echo sshrand.obj sshrsa.obj sshsh512.obj sshsha.obj + >> psftp.rsp 
    229         echo sshzlib.obj timing.obj tree234.obj version.obj + >> psftp.rsp 
    230         echo wildcard.obj wincons.obj windefs.obj winmisc.obj + >> psftp.rsp 
    231         echo winnet.obj winnoise.obj winpgntc.obj winsftp.obj + >> psftp.rsp 
     231        echo libpkcs11.obj local_cmd.obj logging.obj misc.obj + >> psftp.rsp 
     232        echo pinger.obj portfwd.obj pproxy.obj proxy.obj + >> psftp.rsp 
     233        echo psftp.obj settings.obj sftp.obj ssh.obj + >> psftp.rsp 
     234        echo sshaes.obj sshblowf.obj sshbn.obj sshcrc.obj + >> psftp.rsp 
     235        echo sshcrcda.obj sshdes.obj sshdh.obj sshdss.obj + >> psftp.rsp 
     236        echo sshmd5.obj sshpubk.obj sshrand.obj sshrsa.obj + >> psftp.rsp 
     237        echo sshscard.obj sshsh512.obj sshsha.obj sshzlib.obj + >> psftp.rsp 
     238        echo timing.obj tree234.obj version.obj wildcard.obj + >> psftp.rsp 
     239        echo wincons.obj windefs.obj winmisc.obj winnet.obj + >> psftp.rsp 
     240        echo winnoise.obj winpgntc.obj winsftp.obj + >> psftp.rsp 
    232241        echo winstore.obj wintime.obj x11fwd.obj >> psftp.rsp 
    233242        echo psftp.exe >> psftp.rsp 
    234243        echo nul,cw32 import32, >> psftp.rsp 
    psftp.rsp: $(MAKEFILE) 
    237246putty.rsp: $(MAKEFILE) 
    238247        echo c0w32 + > putty.rsp 
    239248        echo be_all.obj cmdline.obj config.obj cproxy.obj + >> putty.rsp 
    240         echo dialog.obj ldisc.obj ldiscucs.obj logging.obj + >> putty.rsp 
    241         echo minibidi.obj misc.obj pinger.obj portfwd.obj + >> putty.rsp 
    242         echo pproxy.obj proxy.obj raw.obj rlogin.obj + >> putty.rsp 
    243         echo settings.obj sizetip.obj ssh.obj sshaes.obj + >> putty.rsp 
    244         echo sshblowf.obj sshbn.obj sshcrc.obj sshcrcda.obj + >> putty.rsp 
    245         echo sshdes.obj sshdh.obj sshdss.obj sshmd5.obj + >> putty.rsp 
    246         echo sshpubk.obj sshrand.obj sshrsa.obj sshsh512.obj + >> putty.rsp 
    247         echo sshsha.obj sshzlib.obj telnet.obj terminal.obj + >> putty.rsp 
    248         echo timing.obj tree234.obj version.obj wcwidth.obj + >> putty.rsp 
    249         echo wildcard.obj wincfg.obj winctrls.obj windefs.obj + >> putty.rsp 
    250         echo windlg.obj window.obj winmisc.obj winnet.obj + >> putty.rsp 
    251         echo winnoise.obj winpgntc.obj winprint.obj + >> putty.rsp 
    252         echo winstore.obj wintime.obj winucs.obj winutils.obj + >> putty.rsp 
    253         echo x11fwd.obj >> putty.rsp 
     249        echo dialog.obj ldisc.obj ldiscucs.obj libpkcs11.obj + >> putty.rsp 
     250        echo local_cmd.obj logging.obj minibidi.obj misc.obj + >> putty.rsp 
     251        echo pinger.obj portfwd.obj pproxy.obj proxy.obj + >> putty.rsp 
     252        echo raw.obj rlogin.obj settings.obj sizetip.obj + >> putty.rsp 
     253        echo ssh.obj sshaes.obj sshblowf.obj sshbn.obj + >> putty.rsp 
     254        echo sshcrc.obj sshcrcda.obj sshdes.obj sshdh.obj + >> putty.rsp 
     255        echo sshdss.obj sshmd5.obj sshpubk.obj sshrand.obj + >> putty.rsp 
     256        echo sshrsa.obj sshscard.obj sshsh512.obj sshsha.obj + >> putty.rsp 
     257        echo sshzlib.obj telnet.obj terminal.obj timing.obj + >> putty.rsp 
     258        echo tree234.obj version.obj wcwidth.obj wildcard.obj + >> putty.rsp 
     259        echo wincfg.obj winctrls.obj windefs.obj windlg.obj + >> putty.rsp 
     260        echo window.obj winmisc.obj winnet.obj winnoise.obj + >> putty.rsp 
     261        echo winpgntc.obj winprint.obj winstore.obj + >> putty.rsp 
     262        echo wintime.obj winucs.obj winutils.obj x11fwd.obj >> putty.rsp 
    254263        echo putty.exe >> putty.rsp 
    255264        echo nul,cw32 import32, >> putty.rsp 
    256265        echo win_res.res >> putty.rsp 
    ldiscucs.obj: ..\ldiscucs.c ..\putty.h . 
    347356                ..\network.h ..\misc.h ..\tree234.h ..\windows\winstuff.h \ 
    348357                ..\mac\macstuff.h ..\macosx\osx.h ..\unix\unix.h \ 
    349358                ..\puttymem.h ..\windows\winhelp.h ..\charset\charset.h 
     359libpkcs11.obj: ..\libpkcs11.c ..\pkcs11.h ..\ppkcs11.h 
     360local_cmd.obj: ..\local_cmd.c 
    350361localenc.obj: ..\charset\localenc.c ..\charset\charset.h \ 
    351362                ..\charset\internal.h 
    352363logging.obj: ..\logging.c ..\putty.h ..\puttyps.h ..\network.h ..\misc.h \ 
    sizetip.obj: ..\windows\sizetip.c ..\put 
    524535                ..\windows\winhelp.h ..\charset\charset.h 
    525536slookup.obj: ..\charset\slookup.c ..\charset\charset.h ..\charset\internal.h \ 
    526537                ..\charset\enum.c ..\charset\sbcsdat.c ..\charset\utf8.c 
    527 ssh.obj: ..\ssh.c ..\putty.h ..\tree234.h ..\ssh.h ..\puttyps.h ..\network.h \ 
    528                 ..\misc.h ..\puttymem.h ..\int64.h ..\windows\winstuff.h \ 
     538ssh.obj: ..\ssh.c ..\putty.h ..\tree234.h ..\ssh.h ..\pkcs11.h ..\ppkcs11.h ..\sshscard.h \ 
     539                ..\puttyps.h ..\network.h ..\misc.h ..\puttymem.h ..\int64.h \ 
     540                ..\windows\winstuff.h \ 
    529541                ..\mac\macstuff.h ..\macosx\osx.h ..\unix\unix.h \ 
    530542                ..\windows\winhelp.h ..\charset\charset.h 
    531543sshaes.obj: ..\sshaes.c ..\ssh.h ..\puttymem.h ..\network.h ..\int64.h \ 
    sshrsa.obj: ..\sshrsa.c ..\ssh.h ..\misc 
    562574                ..\int64.h 
    563575sshrsag.obj: ..\sshrsag.c ..\ssh.h ..\puttymem.h ..\network.h ..\int64.h \ 
    564576                ..\misc.h 
     577sshscard.obj: ..\sshscard.c ..\ssh.h ..\sshrsa.h ..\pkcs11.h ..\ppkcs11.h ..\sshscard.h \ 
     578                ..\putty.h ..\puttymem.h ..\network.h ..\int64.h ..\misc.h \ 
     579                ..\puttyps.h \ 
     580                ..\windows\winstuff.h ..\mac\macstuff.h ..\macosx\osx.h \ 
     581                ..\unix\unix.h ..\tree234.h ..\windows\winhelp.h \ 
     582                ..\charset\charset.h 
    565583sshsh512.obj: ..\sshsh512.c ..\ssh.h ..\puttymem.h ..\network.h ..\int64.h \ 
    566584                ..\misc.h 
    567585sshsha.obj: ..\sshsha.c ..\ssh.h ..\puttymem.h ..\network.h ..\int64.h \ 
    winpgen.obj: ..\windows\winpgen.c ..\put 
    732750                ..\unix\unix.h ..\tree234.h ..\windows\winhelp.h \ 
    733751                ..\charset\charset.h 
    734752winpgnt.obj: ..\windows\winpgnt.c ..\putty.h ..\ssh.h ..\misc.h ..\tree234.h \ 
    735                 ..\puttyps.h ..\network.h ..\puttymem.h ..\int64.h \ 
    736                 ..\windows\winstuff.h ..\mac\macstuff.h ..\macosx\osx.h \ 
    737                 ..\unix\unix.h ..\windows\winhelp.h ..\charset\charset.h 
     753                ..\sshscard.h ..\puttyps.h ..\network.h ..\puttymem.h \ 
     754                ..\int64.h ..\windows\winstuff.h ..\mac\macstuff.h \ 
     755                ..\macosx\osx.h ..\unix\unix.h ..\windows\winhelp.h \ 
     756                ..\charset\charset.h 
    738757winpgntc.obj: ..\windows\winpgntc.c ..\putty.h ..\puttyps.h ..\network.h \ 
    739758                ..\misc.h ..\windows\winstuff.h ..\mac\macstuff.h \ 
    740759                ..\macosx\osx.h ..\unix\unix.h ..\puttymem.h ..\tree234.h \ 
  • windows/Makefile.cyg

    diff -urNp putty-0.58.org/windows/Makefile.cyg putty-0.58+smartcard/windows/Makefile.cyg
    old new RC = $(TOOLPATH)windres 
    9191 
    9292CFLAGS = -mno-cygwin -Wall -O2 -D_WINDOWS -DDEBUG -DWIN32S_COMPAT \ 
    9393                -D_NO_OLDNAMES -DNO_MULTIMON -I.././ -I../charset/ \ 
     94                -DCRYPTOKI_FORCE_WIN32 \ 
    9495                -I../windows/ -I../unix/ -I../mac/ -I../macosx/ 
    9596LDFLAGS = -mno-cygwin -s 
    9697RCFLAGS = $(RCINC) --define WIN32=1 --define _WIN32=1 --define WINVER=0x0400 
    RCFLAGS = $(RCINC) --define WIN32=1 --de 
    101102all: pageant.exe plink.exe pscp.exe psftp.exe putty.exe puttygen.exe \ 
    102103                puttytel.exe 
    103104 
    104 pageant.exe: misc.o pageant.res.o sshaes.o sshbn.o sshdes.o sshdss.o \ 
    105                 sshmd5.o sshpubk.o sshrsa.o sshsh512.o sshsha.o tree234.o \ 
    106                 version.o winmisc.o winpgnt.o winpgntc.o winutils.o 
    107         $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,pageant.map misc.o \ 
    108                 pageant.res.o sshaes.o sshbn.o sshdes.o sshdss.o sshmd5.o \ 
    109                 sshpubk.o sshrsa.o sshsh512.o sshsha.o tree234.o version.o \ 
    110                 winmisc.o winpgnt.o winpgntc.o winutils.o -ladvapi32 \ 
     105pageant.exe: libpkcs11.o misc.o pageant.res.o sshaes.o sshbn.o sshdes.o \ 
     106                sshdss.o sshmd5.o sshpubk.o sshrsa.o sshscard.o sshsh512.o \ 
     107                sshsha.o tree234.o version.o winmisc.o winpgnt.o winpgntc.o \ 
     108                winutils.o 
     109        $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,pageant.map libpkcs11.o \ 
     110                misc.o pageant.res.o sshaes.o sshbn.o sshdes.o sshdss.o \ 
     111                sshmd5.o sshpubk.o sshrsa.o sshscard.o sshsh512.o sshsha.o \ 
     112                tree234.o version.o winmisc.o winpgnt.o winpgntc.o \ 
     113                winutils.o -ladvapi32 -lcomctl32 -lcomdlg32 -lgdi32 -limm32 \ 
     114                -lshell32 -luser32 -lwinmm -lwinspool 
     115 
     116plink.exe: be_all.o cmdline.o cproxy.o ldisc.o libpkcs11.o local_cmd.o \ 
     117                logging.o misc.o pinger.o plink.res.o portfwd.o pproxy.o \ 
     118                proxy.o raw.o rlogin.o settings.o ssh.o sshaes.o sshblowf.o \ 
     119                sshbn.o sshcrc.o sshcrcda.o sshdes.o sshdh.o sshdss.o \ 
     120                sshmd5.o sshpubk.o sshrand.o sshrsa.o sshscard.o sshsh512.o \ 
     121                sshsha.o sshzlib.o telnet.o timing.o tree234.o version.o \ 
     122                wildcard.o wincons.o windefs.o winmisc.o winnet.o winnoise.o \ 
     123                winpgntc.o winplink.o winstore.o wintime.o x11fwd.o 
     124        $(CC) $(LDFLAGS) -o $@ -Wl,-Map,plink.map be_all.o cmdline.o \ 
     125                cproxy.o ldisc.o libpkcs11.o local_cmd.o logging.o misc.o \ 
     126                pinger.o plink.res.o portfwd.o pproxy.o proxy.o raw.o \ 
     127                rlogin.o settings.o ssh.o sshaes.o sshblowf.o sshbn.o \ 
     128                sshcrc.o sshcrcda.o sshdes.o sshdh.o sshdss.o sshmd5.o \ 
     129                sshpubk.o sshrand.o sshrsa.o sshscard.o sshsh512.o sshsha.o \ 
     130                sshzlib.o telnet.o timing.o tree234.o version.o wildcard.o \ 
     131                wincons.o windefs.o winmisc.o winnet.o winnoise.o winpgntc.o \ 
     132                winplink.o winstore.o wintime.o x11fwd.o -ladvapi32 \ 
    111133                -lcomctl32 -lcomdlg32 -lgdi32 -limm32 -lshell32 -luser32 \ 
    112134                -lwinmm -lwinspool 
    113135 
    114 plink.exe: be_all.o cmdline.o cproxy.o ldisc.o logging.o misc.o pinger.o \ 
    115                 plink.res.o portfwd.o pproxy.o proxy.o raw.o rlogin.o \ 
    116                 settings.o ssh.o sshaes.o sshblowf.o sshbn.o sshcrc.o \ 
     136pscp.exe: be_none.o cmdline.o cproxy.o int64.o libpkcs11.o local_cmd.o \ 
     137                logging.o misc.o pinger.o portfwd.o pproxy.o proxy.o pscp.o \ 
     138                pscp.res.o settings.o sftp.o ssh.o sshaes.o sshblowf.o \ 
     139                sshbn.o sshcrc.o sshcrcda.o sshdes.o sshdh.o sshdss.o \ 
     140                sshmd5.o sshpubk.o sshrand.o sshrsa.o sshscard.o sshsh512.o \ 
     141                sshsha.o sshzlib.o timing.o tree234.o version.o wildcard.o \ 
     142                wincons.o windefs.o winmisc.o winnet.o winnoise.o winpgntc.o \ 
     143                winsftp.o winstore.o wintime.o x11fwd.o 
     144        $(CC) $(LDFLAGS) -o $@ -Wl,-Map,pscp.map be_none.o cmdline.o \ 
     145                cproxy.o int64.o libpkcs11.o local_cmd.o logging.o misc.o \ 
     146                pinger.o portfwd.o pproxy.o proxy.o pscp.o pscp.res.o \ 
     147                settings.o sftp.o ssh.o sshaes.o sshblowf.o sshbn.o sshcrc.o \ 
    117148                sshcrcda.o sshdes.o sshdh.o sshdss.o sshmd5.o sshpubk.o \ 
    118                 sshrand.o sshrsa.o sshsh512.o sshsha.o sshzlib.o telnet.o \ 
     149                sshrand.o sshrsa.o sshscard.o sshsh512.o sshsha.o sshzlib.o \ 
    119150                timing.o tree234.o version.o wildcard.o wincons.o windefs.o \ 
    120                 winmisc.o winnet.o winnoise.o winpgntc.o winplink.o \ 
    121                 winstore.o wintime.o x11fwd.o 
    122         $(CC) $(LDFLAGS) -o $@ -Wl,-Map,plink.map be_all.o cmdline.o \ 
    123                 cproxy.o ldisc.o logging.o misc.o pinger.o plink.res.o \ 
    124                 portfwd.o pproxy.o proxy.o raw.o rlogin.o settings.o ssh.o \ 
    125                 sshaes.o sshblowf.o sshbn.o sshcrc.o sshcrcda.o sshdes.o \ 
    126                 sshdh.o sshdss.o sshmd5.o sshpubk.o sshrand.o sshrsa.o \ 
    127                 sshsh512.o sshsha.o sshzlib.o telnet.o timing.o tree234.o \ 
    128                 version.o wildcard.o wincons.o windefs.o winmisc.o winnet.o \ 
    129                 winnoise.o winpgntc.o winplink.o winstore.o wintime.o \ 
    130                 x11fwd.o -ladvapi32 -lcomctl32 -lcomdlg32 -lgdi32 -limm32 \ 
    131                 -lshell32 -luser32 -lwinmm -lwinspool 
     151                winmisc.o winnet.o winnoise.o winpgntc.o winsftp.o \ 
     152                winstore.o wintime.o x11fwd.o -ladvapi32 -lcomctl32 \ 
     153                -lcomdlg32 -lgdi32 -limm32 -lshell32 -luser32 -lwinmm \ 
     154                -lwinspool 
    132155 
    133 pscp.exe: be_none.o cmdline.o cproxy.o int64.o logging.o misc.o pinger.o \ 
    134                 portfwd.o pproxy.o proxy.o pscp.o pscp.res.o settings.o \ 
    135                 sftp.o ssh.o sshaes.o sshblowf.o sshbn.o sshcrc.o sshcrcda.o \ 
    136                 sshdes.o sshdh.o sshdss.o sshmd5.o sshpubk.o sshrand.o \ 
    137                 sshrsa.o sshsh512.o sshsha.o sshzlib.o timing.o tree234.o \ 
    138                 version.o wildcard.o wincons.o windefs.o winmisc.o winnet.o \ 
    139                 winnoise.o winpgntc.o winsftp.o winstore.o wintime.o \ 
    140                 x11fwd.o 
    141         $(CC) $(LDFLAGS) -o $@ -Wl,-Map,pscp.map be_none.o cmdline.o \ 
    142                 cproxy.o int64.o logging.o misc.o pinger.o portfwd.o \ 
    143                 pproxy.o proxy.o pscp.o pscp.res.o settings.o sftp.o ssh.o \ 
    144                 sshaes.o sshblowf.o sshbn.o sshcrc.o sshcrcda.o sshdes.o \ 
    145                 sshdh.o sshdss.o sshmd5.o sshpubk.o sshrand.o sshrsa.o \ 
     156psftp.exe: be_none.o cmdline.o cproxy.o int64.o libpkcs11.o local_cmd.o \ 
     157                logging.o misc.o pinger.o portfwd.o pproxy.o proxy.o \ 
     158                pscp.res.o psftp.o settings.o sftp.o ssh.o sshaes.o \ 
     159                sshblowf.o sshbn.o sshcrc.o sshcrcda.o sshdes.o sshdh.o \ 
     160                sshdss.o sshmd5.o sshpubk.o sshrand.o sshrsa.o sshscard.o \ 
    146161                sshsh512.o sshsha.o sshzlib.o timing.o tree234.o version.o \ 
    147162                wildcard.o wincons.o windefs.o winmisc.o winnet.o winnoise.o \ 
    148                 winpgntc.o winsftp.o winstore.o wintime.o x11fwd.o \ 
    149                 -ladvapi32 -lcomctl32 -lcomdlg32 -lgdi32 -limm32 -lshell32 \ 
    150                 -luser32 -lwinmm -lwinspool 
    151  
    152 psftp.exe: be_none.o cmdline.o cproxy.o int64.o logging.o misc.o pinger.o \ 
    153                 portfwd.o pproxy.o proxy.o pscp.res.o psftp.o settings.o \ 
    154                 sftp.o ssh.o sshaes.o sshblowf.o sshbn.o sshcrc.o sshcrcda.o \ 
    155                 sshdes.o sshdh.o sshdss.o sshmd5.o sshpubk.o sshrand.o \ 
    156                 sshrsa.o sshsh512.o sshsha.o sshzlib.o timing.o tree234.o \ 
    157                 version.o wildcard.o wincons.o windefs.o winmisc.o winnet.o \ 
    158                 winnoise.o winpgntc.o winsftp.o winstore.o wintime.o \ 
    159                 x11fwd.o 
     163                winpgntc.o winsftp.o winstore.o wintime.o x11fwd.o 
    160164        $(CC) $(LDFLAGS) -o $@ -Wl,-Map,psftp.map be_none.o cmdline.o \ 
    161                 cproxy.o int64.o logging.o misc.o pinger.o portfwd.o \ 
    162                 pproxy.o proxy.o pscp.res.o psftp.o settings.o sftp.o ssh.o \ 
    163                 sshaes.o sshblowf.o sshbn.o sshcrc.o sshcrcda.o sshdes.o \ 
    164                 sshdh.o sshdss.o sshmd5.o sshpubk.o sshrand.o sshrsa.o \ 
    165                 sshsh512.o sshsha.o sshzlib.o timing.o tree234.o version.o \ 
    166                 wildcard.o wincons.o windefs.o winmisc.o winnet.o winnoise.o \ 
    167                 winpgntc.o winsftp.o winstore.o wintime.o x11fwd.o \ 
    168                 -ladvapi32 -lcomctl32 -lcomdlg32 -lgdi32 -limm32 -lshell32 \ 
    169                 -luser32 -lwinmm -lwinspool 
     165                cproxy.o int64.o libpkcs11.o local_cmd.o logging.o misc.o \ 
     166                pinger.o portfwd.o pproxy.o proxy.o pscp.res.o psftp.o \ 
     167                settings.o sftp.o ssh.o sshaes.o sshblowf.o sshbn.o sshcrc.o \ 
     168                sshcrcda.o sshdes.o sshdh.o sshdss.o sshmd5.o sshpubk.o \ 
     169                sshrand.o sshrsa.o sshscard.o sshsh512.o sshsha.o sshzlib.o \ 
     170                timing.o tree234.o version.o wildcard.o wincons.o windefs.o \ 
     171                winmisc.o winnet.o winnoise.o winpgntc.o winsftp.o \ 
     172                winstore.o wintime.o x11fwd.o -ladvapi32 -lcomctl32 \ 
     173                -lcomdlg32 -lgdi32 -limm32 -lshell32 -luser32 -lwinmm \ 
     174                -lwinspool 
    170175 
    171176putty.exe: be_all.o cmdline.o config.o cproxy.o dialog.o ldisc.o ldiscucs.o \ 
    172                 logging.o minibidi.o misc.o pinger.o portfwd.o pproxy.o \ 
    173                 proxy.o raw.o rlogin.o settings.o sizetip.o ssh.o sshaes.o \ 
    174                 sshblowf.o sshbn.o sshcrc.o sshcrcda.o sshdes.o sshdh.o \ 
    175                 sshdss.o sshmd5.o sshpubk.o sshrand.o sshrsa.o sshsh512.o \ 
    176                 sshsha.o sshzlib.o telnet.o terminal.o timing.o tree234.o \ 
    177                 version.o wcwidth.o wildcard.o win_res.res.o wincfg.o \ 
    178                 winctrls.o windefs.o windlg.o window.o winmisc.o winnet.o \ 
    179                 winnoise.o winpgntc.o winprint.o winstore.o wintime.o \ 
    180                 winucs.o winutils.o x11fwd.o 
     177                libpkcs11.o local_cmd.o logging.o minibidi.o misc.o pinger.o \ 
     178                portfwd.o pproxy.o proxy.o raw.o rlogin.o settings.o \ 
     179                sizetip.o ssh.o sshaes.o sshblowf.o sshbn.o sshcrc.o \ 
     180                sshcrcda.o sshdes.o sshdh.o sshdss.o sshmd5.o sshpubk.o \ 
     181                sshrand.o sshrsa.o sshscard.o sshsh512.o sshsha.o sshzlib.o \ 
     182                telnet.o terminal.o timing.o tree234.o version.o wcwidth.o \ 
     183                wildcard.o win_res.res.o wincfg.o winctrls.o windefs.o \ 
     184                windlg.o window.o winmisc.o winnet.o winnoise.o winpgntc.o \ 
     185                winprint.o winstore.o wintime.o winucs.o winutils.o x11fwd.o 
    181186        $(CC) -mwindows $(LDFLAGS) -o $@ -Wl,-Map,putty.map be_all.o \ 
    182187                cmdline.o config.o cproxy.o dialog.o ldisc.o ldiscucs.o \ 
    183                 logging.o minibidi.o misc.o pinger.o portfwd.o pproxy.o \ 
    184                 proxy.o raw.o rlogin.o settings.o sizetip.o ssh.o sshaes.o \ 
    185                 sshblowf.o sshbn.o sshcrc.o sshcrcda.o sshdes.o sshdh.o \ 
    186                 sshdss.o sshmd5.o sshpubk.o sshrand.o sshrsa.o sshsh512.o \ 
    187                 sshsha.o sshzlib.o telnet.o terminal.o timing.o tree234.o \ 
    188                 version.o wcwidth.o wildcard.o win_res.res.o wincfg.o \ 
    189                 winctrls.o windefs.o windlg.o window.o winmisc.o winnet.o \ 
    190                 winnoise.o winpgntc.o winprint.o winstore.o wintime.o \ 
    191                 winucs.o winutils.o x11fwd.o -ladvapi32 -lcomctl32 \ 
    192                 -lcomdlg32 -lgdi32 -limm32 -lshell32 -luser32 -lwinmm \ 
    193                 -lwinspool 
     188                libpkcs11.o local_cmd.o logging.o minibidi.o misc.o pinger.o \ 
     189                portfwd.o pproxy.o proxy.o raw.o rlogin.o settings.o \ 
     190                sizetip.o ssh.o sshaes.o sshblowf.o sshbn.o sshcrc.o \ 
     191                sshcrcda.o sshdes.o sshdh.o sshdss.o sshmd5.o sshpubk.o \ 
     192                sshrand.o sshrsa.o sshscard.o sshsh512.o sshsha.o sshzlib.o \ 
     193                telnet.o terminal.o timing.o tree234.o version.o wcwidth.o \ 
     194                wildcard.o win_res.res.o wincfg.o winctrls.o windefs.o \ 
     195                windlg.o window.o winmisc.o winnet.o winnoise.o winpgntc.o \ 
     196                winprint.o winstore.o wintime.o winucs.o winutils.o x11fwd.o \ 
     197                -ladvapi32 -lcomctl32 -lcomdlg32 -lgdi32 -limm32 -lshell32 \ 
     198                -luser32 -lwinmm -lwinspool 
    194199 
    195200puttygen.exe: import.o misc.o notiming.o puttygen.res.o sshaes.o sshbn.o \ 
    196201                sshdes.o sshdss.o sshdssg.o sshmd5.o sshprime.o sshpubk.o \ 
    ldiscucs.o: ../ldiscucs.c ../putty.h ../ 
    322327                ../puttymem.h ../windows/winhelp.h ../charset/charset.h 
    323328        $(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) -c ../ldiscucs.c 
    324329 
     330libpkcs11.o: ../libpkcs11.c ../pkcs11.h ../ppkcs11.h 
     331        $(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) -c ../libpkcs11.c 
     332 
     333local_cmd.o: ../local_cmd.c 
     334        $(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) -c ../local_cmd.c 
     335 
    325336localenc.o: ../charset/localenc.c ../charset/charset.h ../charset/internal.h 
    326337        $(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) -c ../charset/localenc.c 
    327338 
    slookup.o: ../charset/slookup.c ../chars 
    592603                ../charset/enum.c ../charset/sbcsdat.c ../charset/utf8.c 
    593604        $(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) -c ../charset/slookup.c 
    594605 
    595 ssh.o: ../ssh.c ../putty.h ../tree234.h ../ssh.h ../puttyps.h ../network.h \ 
    596                 ../misc.h ../puttymem.h ../int64.h ../windows/winstuff.h \ 
     606ssh.o: ../ssh.c ../putty.h ../tree234.h ../ssh.h ../pkcs11.h ../ppkcs11.h ../sshscard.h \ 
     607                ../puttyps.h ../network.h ../misc.h ../puttymem.h ../int64.h \ 
     608                ../windows/winstuff.h \ 
    597609                ../mac/macstuff.h ../macosx/osx.h ../unix/unix.h \ 
    598610                ../windows/winhelp.h ../charset/charset.h 
    599611        $(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) -c ../ssh.c 
    sshrsag.o: ../sshrsag.c ../ssh.h ../putt 
    660672                ../misc.h 
    661673        $(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) -c ../sshrsag.c 
    662674 
     675sshscard.o: ../sshscard.c ../ssh.h ../sshrsa.h ../pkcs11.h ../ppkcs11.h ../sshscard.h \ 
     676                ../putty.h ../puttymem.h ../network.h ../int64.h ../misc.h \ 
     677                ../puttyps.h \ 
     678                ../windows/winstuff.h ../mac/macstuff.h ../macosx/osx.h \ 
     679                ../unix/unix.h ../tree234.h ../windows/winhelp.h \ 
     680                ../charset/charset.h 
     681        $(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) -c ../sshscard.c 
     682 
    663683sshsh512.o: ../sshsh512.c ../ssh.h ../puttymem.h ../network.h ../int64.h \ 
    664684                ../misc.h 
    665685        $(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) -c ../sshsh512.c 
    winpgen.o: ../windows/winpgen.c ../putty 
    920940        $(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) -c ../windows/winpgen.c 
    921941 
    922942winpgnt.o: ../windows/winpgnt.c ../putty.h ../ssh.h ../misc.h ../tree234.h \ 
    923                 ../puttyps.h ../network.h ../puttymem.h ../int64.h \ 
    924                 ../windows/winstuff.h ../mac/macstuff.h ../macosx/osx.h \ 
    925                 ../unix/unix.h ../windows/winhelp.h ../charset/charset.h 
     943                ../sshscard.h ../puttyps.h ../network.h ../puttymem.h \ 
     944                ../int64.h ../windows/winstuff.h ../mac/macstuff.h \ 
     945                ../macosx/osx.h ../unix/unix.h ../windows/winhelp.h \ 
     946                ../charset/charset.h 
    926947        $(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) -c ../windows/winpgnt.c 
    927948 
    928949winpgntc.o: ../windows/winpgntc.c ../putty.h ../puttyps.h ../network.h \ 
  • windows/Makefile.lcc

    diff -urNp putty-0.58.org/windows/Makefile.lcc putty-0.58+smartcard/windows/Makefile.lcc
    old new CFLAGS = -D_WINDOWS -I..\./ -I..\charset 
    9191all: pageant.exe plink.exe pscp.exe psftp.exe putty.exe puttygen.exe \ 
    9292                puttytel.exe 
    9393 
    94 pageant.exe: misc.obj pageant.res sshaes.obj sshbn.obj sshdes.obj sshdss.obj \ 
    95                 sshmd5.obj sshpubk.obj sshrsa.obj sshsh512.obj sshsha.obj \ 
    96                 tree234.obj version.obj winmisc.obj winpgnt.obj winpgntc.obj \ 
    97                 winutils.obj 
    98         lcclnk -subsystem  windows -o pageant.exe misc.obj pageant.res sshaes.obj \ 
    99                 sshbn.obj sshdes.obj sshdss.obj sshmd5.obj sshpubk.obj \ 
    100                 sshrsa.obj sshsh512.obj sshsha.obj tree234.obj version.obj \ 
    101                 winmisc.obj winpgnt.obj winpgntc.obj winutils.obj \ 
    102                 shell32.lib wsock32.lib ws2_32.lib winspool.lib winmm.lib \ 
    103                 imm32.lib 
     94pageant.exe: libpkcs11.obj misc.obj pageant.res sshaes.obj sshbn.obj \ 
     95                sshdes.obj sshdss.obj sshmd5.obj sshpubk.obj sshrsa.obj \ 
     96                sshscard.obj sshsh512.obj sshsha.obj tree234.obj version.obj \ 
     97                winmisc.obj winpgnt.obj winpgntc.obj winutils.obj 
     98        lcclnk -subsystem  windows -o pageant.exe libpkcs11.obj misc.obj \ 
     99                pageant.res sshaes.obj sshbn.obj sshdes.obj sshdss.obj \ 
     100                sshmd5.obj sshpubk.obj sshrsa.obj sshscard.obj sshsh512.obj \ 
     101                sshsha.obj tree234.obj version.obj winmisc.obj winpgnt.obj \ 
     102                winpgntc.obj winutils.obj shell32.lib wsock32.lib ws2_32.lib \ 
     103                winspool.lib winmm.lib imm32.lib 
    104104 
    105 plink.exe: be_all.obj cmdline.obj cproxy.obj ldisc.obj logging.obj misc.obj \ 
    106                 pinger.obj plink.res portfwd.obj pproxy.obj proxy.obj \ 
    107                 raw.obj rlogin.obj settings.obj ssh.obj sshaes.obj \ 
    108                 sshblowf.obj sshbn.obj sshcrc.obj sshcrcda.obj sshdes.obj \ 
    109                 sshdh.obj sshdss.obj sshmd5.obj sshpubk.obj sshrand.obj \ 
    110                 sshrsa.obj sshsh512.obj sshsha.obj sshzlib.obj telnet.obj \ 
    111                 timing.obj tree234.obj version.obj wildcard.obj wincons.obj \ 
    112                 windefs.obj winmisc.obj winnet.obj winnoise.obj winpgntc.obj \ 
     105plink.exe: be_all.obj cmdline.obj cproxy.obj ldisc.obj libpkcs11.obj \ 
     106                local_cmd.obj logging.obj misc.obj pinger.obj plink.res \ 
     107                portfwd.obj pproxy.obj proxy.obj raw.obj rlogin.obj \ 
     108                settings.obj ssh.obj sshaes.obj sshblowf.obj sshbn.obj \ 
     109                sshcrc.obj sshcrcda.obj sshdes.obj sshdh.obj sshdss.obj \ 
     110                sshmd5.obj sshpubk.obj sshrand.obj sshrsa.obj sshscard.obj \ 
     111                sshsh512.obj sshsha.obj sshzlib.obj telnet.obj timing.obj \ 
     112                tree234.obj version.obj wildcard.obj wincons.obj windefs.obj \ 
     113                winmisc.obj winnet.obj winnoise.obj winpgntc.obj \ 
    113114                winplink.obj winstore.obj wintime.obj x11fwd.obj 
    114115        lcclnk  -o plink.exe be_all.obj cmdline.obj cproxy.obj ldisc.obj \ 
    115                 logging.obj misc.obj pinger.obj plink.res portfwd.obj \ 
    116                 pproxy.obj proxy.obj raw.obj rlogin.obj settings.obj ssh.obj \ 
    117                 sshaes.obj sshblowf.obj sshbn.obj sshcrc.obj sshcrcda.obj \ 
    118                 sshdes.obj sshdh.obj sshdss.obj sshmd5.obj sshpubk.obj \ 
    119                 sshrand.obj sshrsa.obj sshsh512.obj sshsha.obj sshzlib.obj \ 
    120                 telnet.obj timing.obj tree234.obj version.obj wildcard.obj \ 
    121                 wincons.obj windefs.obj winmisc.obj winnet.obj winnoise.obj \ 
    122                 winpgntc.obj winplink.obj winstore.obj wintime.obj \ 
    123                 x11fwd.obj shell32.lib wsock32.lib ws2_32.lib winspool.lib \ 
    124                 winmm.lib imm32.lib 
    125  
    126 pscp.exe: be_none.obj cmdline.obj cproxy.obj int64.obj logging.obj misc.obj \ 
    127                 pinger.obj portfwd.obj pproxy.obj proxy.obj pscp.obj \ 
    128                 pscp.res settings.obj sftp.obj ssh.obj sshaes.obj \ 
    129                 sshblowf.obj sshbn.obj sshcrc.obj sshcrcda.obj sshdes.obj \ 
    130                 sshdh.obj sshdss.obj sshmd5.obj sshpubk.obj sshrand.obj \ 
    131                 sshrsa.obj sshsh512.obj sshsha.obj sshzlib.obj timing.obj \ 
    132                 tree234.obj version.obj wildcard.obj wincons.obj windefs.obj \ 
    133                 winmisc.obj winnet.obj winnoise.obj winpgntc.obj winsftp.obj \ 
    134                 winstore.obj wintime.obj x11fwd.obj 
    135         lcclnk  -o pscp.exe be_none.obj cmdline.obj cproxy.obj int64.obj \ 
    136                 logging.obj misc.obj pinger.obj portfwd.obj pproxy.obj \ 
    137                 proxy.obj pscp.obj pscp.res settings.obj sftp.obj ssh.obj \ 
    138                 sshaes.obj sshblowf.obj sshbn.obj sshcrc.obj sshcrcda.obj \ 
    139                 sshdes.obj sshdh.obj sshdss.obj sshmd5.obj sshpubk.obj \ 
    140                 sshrand.obj sshrsa.obj sshsh512.obj sshsha.obj sshzlib.obj \ 
     116                libpkcs11.obj local_cmd.obj logging.obj misc.obj pinger.obj \ 
     117                plink.res portfwd.obj pproxy.obj proxy.obj raw.obj \ 
     118                rlogin.obj settings.obj ssh.obj sshaes.obj sshblowf.obj \ 
     119                sshbn.obj sshcrc.obj sshcrcda.obj sshdes.obj sshdh.obj \ 
     120                sshdss.obj sshmd5.obj sshpubk.obj sshrand.obj sshrsa.obj \ 
     121                sshscard.obj sshsh512.obj sshsha.obj sshzlib.obj telnet.obj \ 
    141122                timing.obj tree234.obj version.obj wildcard.obj wincons.obj \ 
    142123                windefs.obj winmisc.obj winnet.obj winnoise.obj winpgntc.obj \ 
    143                 winsftp.obj winstore.obj wintime.obj x11fwd.obj shell32.lib \ 
     124                winplink.obj winstore.obj wintime.obj x11fwd.obj shell32.lib \ 
    144125                wsock32.lib ws2_32.lib winspool.lib winmm.lib imm32.lib 
    145126 
    146 psftp.exe: be_none.obj cmdline.obj cproxy.obj int64.obj logging.obj misc.obj \ 
    147                 pinger.obj portfwd.obj pproxy.obj proxy.obj pscp.res \ 
    148                 psftp.obj settings.obj sftp.obj ssh.obj sshaes.obj \ 
    149                 sshblowf.obj sshbn.obj sshcrc.obj sshcrcda.obj sshdes.obj \ 
    150                 sshdh.obj sshdss.obj sshmd5.obj sshpubk.obj sshrand.obj \ 
    151                 sshrsa.obj sshsh512.obj sshsha.obj sshzlib.obj timing.obj \ 
     127pscp.exe: be_none.obj cmdline.obj cproxy.obj int64.obj libpkcs11.obj \ 
     128                local_cmd.obj logging.obj misc.obj pinger.obj portfwd.obj \ 
     129                pproxy.obj proxy.obj pscp.obj pscp.res settings.obj sftp.obj \ 
     130                ssh.obj sshaes.obj sshblowf.obj sshbn.obj sshcrc.obj \ 
     131                sshcrcda.obj sshdes.obj sshdh.obj sshdss.obj sshmd5.obj \ 
     132                sshpubk.obj sshrand.obj sshrsa.obj sshscard.obj sshsh512.obj \ 
     133                sshsha.obj sshzlib.obj timing.obj tree234.obj version.obj \ 
     134                wildcard.obj wincons.obj windefs.obj winmisc.obj winnet.obj \ 
     135                winnoise.obj winpgntc.obj winsftp.obj winstore.obj \ 
     136                wintime.obj x11fwd.obj 
     137        lcclnk  -o pscp.exe be_none.obj cmdline.obj cproxy.obj int64.obj \ 
     138                libpkcs11.obj local_cmd.obj logging.obj misc.obj pinger.obj \ 
     139                portfwd.obj pproxy.obj proxy.obj pscp.obj pscp.res \ 
     140                settings.obj sftp.obj ssh.obj sshaes.obj sshblowf.obj \ 
     141                sshbn.obj sshcrc.obj sshcrcda.obj sshdes.obj sshdh.obj \ 
     142                sshdss.obj sshmd5.obj sshpubk.obj sshrand.obj sshrsa.obj \ 
     143                sshscard.obj sshsh512.obj sshsha.obj sshzlib.obj timing.obj \ 
    152144                tree234.obj version.obj wildcard.obj wincons.obj windefs.obj \ 
    153145                winmisc.obj winnet.obj winnoise.obj winpgntc.obj winsftp.obj \ 
     146                winstore.obj wintime.obj x11fwd.obj shell32.lib wsock32.lib \ 
     147                ws2_32.lib winspool.lib winmm.lib imm32.lib 
     148 
     149psftp.exe: be_none.obj cmdline.obj cproxy.obj int64.obj libpkcs11.obj \ 
     150                local_cmd.obj logging.obj misc.obj pinger.obj portfwd.obj \ 
     151                pproxy.obj proxy.obj pscp.res psftp.obj settings.obj \ 
     152                sftp.obj ssh.obj sshaes.obj sshblowf.obj sshbn.obj \ 
     153                sshcrc.obj sshcrcda.obj sshdes.obj sshdh.obj sshdss.obj \ 
     154                sshmd5.obj sshpubk.obj sshrand.obj sshrsa.obj sshscard.obj \ 
     155                sshsh512.obj sshsha.obj sshzlib.obj timing.obj tree234.obj \ 
     156                version.obj wildcard.obj wincons.obj windefs.obj winmisc.obj \ 
     157                winnet.obj winnoise.obj winpgntc.obj winsftp.obj \ 
    154158                winstore.obj wintime.obj x11fwd.obj 
    155159        lcclnk  -o psftp.exe be_none.obj cmdline.obj cproxy.obj int64.obj \ 
    156                 logging.obj misc.obj pinger.obj portfwd.obj pproxy.obj \ 
    157                 proxy.obj pscp.res psftp.obj settings.obj sftp.obj ssh.obj \ 
    158                 sshaes.obj sshblowf.obj sshbn.obj sshcrc.obj sshcrcda.obj \ 
    159                 sshdes.obj sshdh.obj sshdss.obj sshmd5.obj sshpubk.obj \ 
    160                 sshrand.obj sshrsa.obj sshsh512.obj sshsha.obj sshzlib.obj \ 
    161                 timing.obj tree234.obj version.obj wildcard.obj wincons.obj \ 
    162                 windefs.obj winmisc.obj winnet.obj winnoise.obj winpgntc.obj \ 
    163                 winsftp.obj winstore.obj wintime.obj x11fwd.obj shell32.lib \ 
    164                 wsock32.lib ws2_32.lib winspool.lib winmm.lib imm32.lib 
    165  
    166 putty.exe: be_all.obj cmdline.obj config.obj cproxy.obj dialog.obj ldisc.obj \ 
    167                 ldiscucs.obj logging.obj minibidi.obj misc.obj pinger.obj \ 
    168                 portfwd.obj pproxy.obj proxy.obj raw.obj rlogin.obj \ 
    169                 settings.obj sizetip.obj ssh.obj sshaes.obj sshblowf.obj \ 
     160                libpkcs11.obj local_cmd.obj logging.obj misc.obj pinger.obj \ 
     161                portfwd.obj pproxy.obj proxy.obj pscp.res psftp.obj \ 
     162                settings.obj sftp.obj ssh.obj sshaes.obj sshblowf.obj \ 
    170163                sshbn.obj sshcrc.obj sshcrcda.obj sshdes.obj sshdh.obj \ 
    171164                sshdss.obj sshmd5.obj sshpubk.obj sshrand.obj sshrsa.obj \ 
    172                 sshsh512.obj sshsha.obj sshzlib.obj telnet.obj terminal.obj \ 
    173                 timing.obj tree234.obj version.obj wcwidth.obj wildcard.obj \ 
    174                 win_res.res wincfg.obj winctrls.obj windefs.obj windlg.obj \ 
    175                 window.obj winmisc.obj winnet.obj winnoise.obj winpgntc.obj \ 
    176                 winprint.obj winstore.obj wintime.obj winucs.obj \ 
    177                 winutils.obj x11fwd.obj 
    178         lcclnk -subsystem  windows -o putty.exe be_all.obj cmdline.obj config.obj \ 
    179                 cproxy.obj dialog.obj ldisc.obj ldiscucs.obj logging.obj \ 
     165                sshscard.obj sshsh512.obj sshsha.obj sshzlib.obj timing.obj \ 
     166                tree234.obj version.obj wildcard.obj wincons.obj windefs.obj \ 
     167                winmisc.obj winnet.obj winnoise.obj winpgntc.obj winsftp.obj \ 
     168                winstore.obj wintime.obj x11fwd.obj shell32.lib wsock32.lib \ 
     169                ws2_32.lib winspool.lib winmm.lib imm32.lib 
     170 
     171putty.exe: be_all.obj cmdline.obj config.obj cproxy.obj dialog.obj ldisc.obj \ 
     172                ldiscucs.obj libpkcs11.obj local_cmd.obj logging.obj \ 
    180173                minibidi.obj misc.obj pinger.obj portfwd.obj pproxy.obj \ 
    181174                proxy.obj raw.obj rlogin.obj settings.obj sizetip.obj \ 
    182175                ssh.obj sshaes.obj sshblowf.obj sshbn.obj sshcrc.obj \ 
    183176                sshcrcda.obj sshdes.obj sshdh.obj sshdss.obj sshmd5.obj \ 
    184                 sshpubk.obj sshrand.obj sshrsa.obj sshsh512.obj sshsha.obj \ 
    185                 sshzlib.obj telnet.obj terminal.obj timing.obj tree234.obj \ 
    186                 version.obj wcwidth.obj wildcard.obj win_res.res wincfg.obj \ 
    187                 winctrls.obj windefs.obj windlg.obj window.obj winmisc.obj \ 
    188                 winnet.obj winnoise.obj winpgntc.obj winprint.obj \ 
    189                 winstore.obj wintime.obj winucs.obj winutils.obj x11fwd.obj \ 
    190                 shell32.lib wsock32.lib ws2_32.lib winspool.lib winmm.lib \ 
    191                 imm32.lib 
     177                sshpubk.obj sshrand.obj sshrsa.obj sshscard.obj sshsh512.obj \ 
     178                sshsha.obj sshzlib.obj telnet.obj terminal.obj timing.obj \ 
     179                tree234.obj version.obj wcwidth.obj wildcard.obj win_res.res \ 
     180                wincfg.obj winctrls.obj windefs.obj windlg.obj window.obj \ 
     181                winmisc.obj winnet.obj winnoise.obj winpgntc.obj \ 
     182                winprint.obj winstore.obj wintime.obj winucs.obj \ 
     183                winutils.obj x11fwd.obj 
     184        lcclnk -subsystem  windows -o putty.exe be_all.obj cmdline.obj config.obj \ 
     185                cproxy.obj dialog.obj ldisc.obj ldiscucs.obj libpkcs11.obj \ 
     186                local_cmd.obj logging.obj minibidi.obj misc.obj pinger.obj \ 
     187                portfwd.obj pproxy.obj proxy.obj raw.obj rlogin.obj \ 
     188                settings.obj sizetip.obj ssh.obj sshaes.obj sshblowf.obj \ 
     189                sshbn.obj sshcrc.obj sshcrcda.obj sshdes.obj sshdh.obj \ 
     190                sshdss.obj sshmd5.obj sshpubk.obj sshrand.obj sshrsa.obj \ 
     191                sshscard.obj sshsh512.obj sshsha.obj sshzlib.obj telnet.obj \ 
     192                terminal.obj timing.obj tree234.obj version.obj wcwidth.obj \ 
     193                wildcard.obj win_res.res wincfg.obj winctrls.obj windefs.obj \ 
     194                windlg.obj window.obj winmisc.obj winnet.obj winnoise.obj \ 
     195                winpgntc.obj winprint.obj winstore.obj wintime.obj \ 
     196                winucs.obj winutils.obj x11fwd.obj shell32.lib wsock32.lib \ 
     197                ws2_32.lib winspool.lib winmm.lib imm32.lib 
    192198 
    193199puttygen.exe: import.obj misc.obj notiming.obj puttygen.res sshaes.obj \ 
    194200                sshbn.obj sshdes.obj sshdss.obj sshdssg.obj sshmd5.obj \ 
    ldiscucs.obj: ..\ldiscucs.c ..\putty.h . 
    305311                ..\mac\macstuff.h ..\macosx\osx.h ..\unix\unix.h \ 
    306312                ..\puttymem.h ..\windows\winhelp.h ..\charset\charset.h 
    307313        lcc -O -p6 $(COMPAT) $(XFLAGS) $(CFLAGS) ..\ldiscucs.c 
     314libpkcs11.obj: ..\libpkcs11.c ..\pkcs11.h ..\ppkcs11.h 
     315        lcc -O -p6 $(COMPAT) $(XFLAGS) $(CFLAGS) ..\libpkcs11.c 
     316local_cmd.obj: ..\local_cmd.c 
     317        lcc -O -p6 $(COMPAT) $(XFLAGS) $(CFLAGS) ..\local_cmd.c 
    308318localenc.obj: ..\charset\localenc.c ..\charset\charset.h \ 
    309319                ..\charset\internal.h 
    310320        lcc -O -p6 $(COMPAT) $(XFLAGS) $(CFLAGS) ..\charset\localenc.c 
    sizetip.obj: ..\windows\sizetip.c ..\put 
    530540slookup.obj: ..\charset\slookup.c ..\charset\charset.h ..\charset\internal.h \ 
    531541                ..\charset\enum.c ..\charset\sbcsdat.c ..\charset\utf8.c 
    532542        lcc -O -p6 $(COMPAT) $(XFLAGS) $(CFLAGS) ..\charset\slookup.c 
    533 ssh.obj: ..\ssh.c ..\putty.h ..\tree234.h ..\ssh.h ..\puttyps.h ..\network.h \ 
    534                 ..\misc.h ..\puttymem.h ..\int64.h ..\windows\winstuff.h \ 
     543ssh.obj: ..\ssh.c ..\putty.h ..\tree234.h ..\ssh.h ..\pkcs11.h ..\ppkcs11.h ..\sshscard.h \ 
     544                ..\puttyps.h ..\network.h ..\misc.h ..\puttymem.h ..\int64.h \ 
     545                ..\windows\winstuff.h \ 
    535546                ..\mac\macstuff.h ..\macosx\osx.h ..\unix\unix.h \ 
    536547                ..\windows\winhelp.h ..\charset\charset.h 
    537548        lcc -O -p6 $(COMPAT) $(XFLAGS) $(CFLAGS) ..\ssh.c 
    sshrsa.obj: ..\sshrsa.c ..\ssh.h ..\misc 
    584595sshrsag.obj: ..\sshrsag.c ..\ssh.h ..\puttymem.h ..\network.h ..\int64.h \ 
    585596                ..\misc.h 
    586597        lcc -O -p6 $(COMPAT) $(XFLAGS) $(CFLAGS) ..\sshrsag.c 
     598sshscard.obj: ..\sshscard.c ..\ssh.h ..\sshrsa.h ..\pkcs11.h ..\ppkcs11.h ..\sshscard.h \ 
     599                ..\putty.h ..\puttymem.h ..\network.h ..\int64.h ..\misc.h \ 
     600                ..\puttyps.h \ 
     601                ..\windows\winstuff.h ..\mac\macstuff.h ..\macosx\osx.h \ 
     602                ..\unix\unix.h ..\tree234.h ..\windows\winhelp.h \ 
     603                ..\charset\charset.h 
     604        lcc -O -p6 $(COMPAT) $(XFLAGS) $(CFLAGS) ..\sshscard.c 
    587605sshsh512.obj: ..\sshsh512.c ..\ssh.h ..\puttymem.h ..\network.h ..\int64.h \ 
    588606                ..\misc.h 
    589607        lcc -O -p6 $(COMPAT) $(XFLAGS) $(CFLAGS) ..\sshsh512.c 
    winpgen.obj: ..\windows\winpgen.c ..\put 
    799817                ..\charset\charset.h 
    800818        lcc -O -p6 $(COMPAT) $(XFLAGS) $(CFLAGS) ..\windows\winpgen.c 
    801819winpgnt.obj: ..\windows\winpgnt.c ..\putty.h ..\ssh.h ..\misc.h ..\tree234.h \ 
    802                 ..\puttyps.h ..\network.h ..\puttymem.h ..\int64.h \ 
    803                 ..\windows\winstuff.h ..\mac\macstuff.h ..\macosx\osx.h \ 
    804                 ..\unix\unix.h ..\windows\winhelp.h ..\charset\charset.h 
     820                ..\sshscard.h ..\puttyps.h ..\network.h ..\puttymem.h \ 
     821                ..\int64.h ..\windows\winstuff.h ..\mac\macstuff.h \ 
     822                ..\macosx\osx.h ..\unix\unix.h ..\windows\winhelp.h \ 
     823                ..\charset\charset.h 
    805824        lcc -O -p6 $(COMPAT) $(XFLAGS) $(CFLAGS) ..\windows\winpgnt.c 
    806825winpgntc.obj: ..\windows\winpgntc.c ..\putty.h ..\puttyps.h ..\network.h \ 
    807826                ..\misc.h ..\windows\winstuff.h ..\mac\macstuff.h \ 
  • windows/Makefile.vc

    diff -urNp putty-0.58.org/windows/Makefile.vc putty-0.58+smartcard/windows/Makefile.vc
    old new LFLAGS = /incremental:no /fixed 
    9191all: pageant.exe plink.exe pscp.exe psftp.exe putty.exe puttygen.exe \ 
    9292                puttytel.exe 
    9393 
    94 pageant.exe: misc.obj pageant.res sshaes.obj sshbn.obj sshdes.obj sshdss.obj \ 
    95                 sshmd5.obj sshpubk.obj sshrsa.obj sshsh512.obj sshsha.obj \ 
    96                 tree234.obj version.obj winmisc.obj winpgnt.obj winpgntc.obj \ 
    97                 winutils.obj pageant.rsp 
     94pageant.exe: libpkcs11.obj misc.obj pageant.res sshaes.obj sshbn.obj \ 
     95                sshdes.obj sshdss.obj sshmd5.obj sshpubk.obj sshrsa.obj \ 
     96                sshscard.obj sshsh512.obj sshsha.obj tree234.obj version.obj \ 
     97                winmisc.obj winpgnt.obj winpgntc.obj winutils.obj \ 
     98                pageant.rsp 
    9899        link $(LFLAGS) -out:pageant.exe -map:pageant.map @pageant.rsp 
    99100 
    100 plink.exe: be_all.obj cmdline.obj cproxy.obj ldisc.obj logging.obj misc.obj \ 
    101                 pinger.obj plink.res portfwd.obj pproxy.obj proxy.obj \ 
    102                 raw.obj rlogin.obj settings.obj ssh.obj sshaes.obj \ 
    103                 sshblowf.obj sshbn.obj sshcrc.obj sshcrcda.obj sshdes.obj \ 
    104                 sshdh.obj sshdss.obj sshmd5.obj sshpubk.obj sshrand.obj \ 
    105                 sshrsa.obj sshsh512.obj sshsha.obj sshzlib.obj telnet.obj \ 
    106                 timing.obj tree234.obj version.obj wildcard.obj wincons.obj \ 
    107                 windefs.obj winmisc.obj winnet.obj winnoise.obj winpgntc.obj \ 
     101plink.exe: be_all.obj cmdline.obj cproxy.obj ldisc.obj libpkcs11.obj \ 
     102                local_cmd.obj logging.obj misc.obj pinger.obj plink.res \ 
     103                portfwd.obj pproxy.obj proxy.obj raw.obj rlogin.obj \ 
     104                settings.obj ssh.obj sshaes.obj sshblowf.obj sshbn.obj \ 
     105                sshcrc.obj sshcrcda.obj sshdes.obj sshdh.obj sshdss.obj \ 
     106                sshmd5.obj sshpubk.obj sshrand.obj sshrsa.obj sshscard.obj \ 
     107                sshsh512.obj sshsha.obj sshzlib.obj telnet.obj timing.obj \ 
     108                tree234.obj version.obj wildcard.obj wincons.obj windefs.obj \ 
     109                winmisc.obj winnet.obj winnoise.obj winpgntc.obj \ 
    108110                winplink.obj winstore.obj wintime.obj x11fwd.obj plink.rsp 
    109111        link $(LFLAGS) -out:plink.exe -map:plink.map @plink.rsp 
    110112 
    111 pscp.exe: be_none.obj cmdline.obj cproxy.obj int64.obj logging.obj misc.obj \ 
    112                 pinger.obj portfwd.obj pproxy.obj proxy.obj pscp.obj \ 
    113                 pscp.res settings.obj sftp.obj ssh.obj sshaes.obj \ 
    114                 sshblowf.obj sshbn.obj sshcrc.obj sshcrcda.obj sshdes.obj \ 
    115                 sshdh.obj sshdss.obj sshmd5.obj sshpubk.obj sshrand.obj \ 
    116                 sshrsa.obj sshsh512.obj sshsha.obj sshzlib.obj timing.obj \ 
    117                 tree234.obj version.obj wildcard.obj wincons.obj windefs.obj \ 
    118                 winmisc.obj winnet.obj winnoise.obj winpgntc.obj winsftp.obj \ 
    119                 winstore.obj wintime.obj x11fwd.obj pscp.rsp 
     113pscp.exe: be_none.obj cmdline.obj cproxy.obj int64.obj libpkcs11.obj \ 
     114                local_cmd.obj logging.obj misc.obj pinger.obj portfwd.obj \ 
     115                pproxy.obj proxy.obj pscp.obj pscp.res settings.obj sftp.obj \ 
     116                ssh.obj sshaes.obj sshblowf.obj sshbn.obj sshcrc.obj \ 
     117                sshcrcda.obj sshdes.obj sshdh.obj sshdss.obj sshmd5.obj \ 
     118                sshpubk.obj sshrand.obj sshrsa.obj sshscard.obj sshsh512.obj \ 
     119                sshsha.obj sshzlib.obj timing.obj tree234.obj version.obj \ 
     120                wildcard.obj wincons.obj windefs.obj winmisc.obj winnet.obj \ 
     121                winnoise.obj winpgntc.obj winsftp.obj winstore.obj \ 
     122                wintime.obj x11fwd.obj pscp.rsp 
    120123        link $(LFLAGS) -out:pscp.exe -map:pscp.map @pscp.rsp 
    121124 
    122 psftp.exe: be_none.obj cmdline.obj cproxy.obj int64.obj logging.obj misc.obj \ 
    123                 pinger.obj portfwd.obj pproxy.obj proxy.obj pscp.res \ 
    124                 psftp.obj settings.obj sftp.obj ssh.obj sshaes.obj \ 
    125                 sshblowf.obj sshbn.obj sshcrc.obj sshcrcda.obj sshdes.obj \ 
    126                 sshdh.obj sshdss.obj sshmd5.obj sshpubk.obj sshrand.obj \ 
    127                 sshrsa.obj sshsh512.obj sshsha.obj sshzlib.obj timing.obj \ 
    128                 tree234.obj version.obj wildcard.obj wincons.obj windefs.obj \ 
    129                 winmisc.obj winnet.obj winnoise.obj winpgntc.obj winsftp.obj \ 
     125psftp.exe: be_none.obj cmdline.obj cproxy.obj int64.obj libpkcs11.obj \ 
     126                local_cmd.obj logging.obj misc.obj pinger.obj portfwd.obj \ 
     127                pproxy.obj proxy.obj pscp.res psftp.obj settings.obj \ 
     128                sftp.obj ssh.obj sshaes.obj sshblowf.obj sshbn.obj \ 
     129                sshcrc.obj sshcrcda.obj sshdes.obj sshdh.obj sshdss.obj \ 
     130                sshmd5.obj sshpubk.obj sshrand.obj sshrsa.obj sshscard.obj \ 
     131                sshsh512.obj sshsha.obj sshzlib.obj timing.obj tree234.obj \ 
     132                version.obj wildcard.obj wincons.obj windefs.obj winmisc.obj \ 
     133                winnet.obj winnoise.obj winpgntc.obj winsftp.obj \ 
    130134                winstore.obj wintime.obj x11fwd.obj psftp.rsp 
    131135        link $(LFLAGS) -out:psftp.exe -map:psftp.map @psftp.rsp 
    132136 
    133137putty.exe: be_all.obj cmdline.obj config.obj cproxy.obj dialog.obj ldisc.obj \ 
    134                 ldiscucs.obj logging.obj minibidi.obj misc.obj pinger.obj \ 
    135                 portfwd.obj pproxy.obj proxy.obj raw.obj rlogin.obj \ 
    136                 settings.obj sizetip.obj ssh.obj sshaes.obj sshblowf.obj \ 
    137                 sshbn.obj sshcrc.obj sshcrcda.obj sshdes.obj sshdh.obj \ 
    138                 sshdss.obj sshmd5.obj sshpubk.obj sshrand.obj sshrsa.obj \ 
    139                 sshsh512.obj sshsha.obj sshzlib.obj telnet.obj terminal.obj \ 
    140                 timing.obj tree234.obj version.obj wcwidth.obj wildcard.obj \ 
    141                 win_res.res wincfg.obj winctrls.obj windefs.obj windlg.obj \ 
    142                 window.obj winmisc.obj winnet.obj winnoise.obj winpgntc.obj \ 
     138                ldiscucs.obj libpkcs11.obj local_cmd.obj logging.obj \ 
     139                minibidi.obj misc.obj pinger.obj portfwd.obj pproxy.obj \ 
     140                proxy.obj raw.obj rlogin.obj settings.obj sizetip.obj \ 
     141                ssh.obj sshaes.obj sshblowf.obj sshbn.obj sshcrc.obj \ 
     142                sshcrcda.obj sshdes.obj sshdh.obj sshdss.obj sshmd5.obj \ 
     143                sshpubk.obj sshrand.obj sshrsa.obj sshscard.obj sshsh512.obj \ 
     144                sshsha.obj sshzlib.obj telnet.obj terminal.obj timing.obj \ 
     145                tree234.obj version.obj wcwidth.obj wildcard.obj win_res.res \ 
     146                wincfg.obj winctrls.obj windefs.obj windlg.obj window.obj \ 
     147                winmisc.obj winnet.obj winnoise.obj winpgntc.obj \ 
    143148                winprint.obj winstore.obj wintime.obj winucs.obj \ 
    144149                winutils.obj x11fwd.obj putty.rsp 
    145150        link $(LFLAGS) -out:putty.exe -map:putty.map @putty.rsp 
    puttytel.exe: be_nossh.obj cmdline.obj c 
    165170pageant.rsp: $(MAKEFILE) 
    166171        echo /nologo /subsystem:windows > pageant.rsp 
    167172        echo advapi32.lib comctl32.lib comdlg32.lib gdi32.lib >> pageant.rsp 
    168         echo imm32.lib misc.obj pageant.res shell32.lib >> pageant.rsp 
    169         echo sshaes.obj sshbn.obj sshdes.obj sshdss.obj >> pageant.rsp 
    170         echo sshmd5.obj sshpubk.obj sshrsa.obj sshsh512.obj >> pageant.rsp 
    171         echo sshsha.obj tree234.obj user32.lib version.obj >> pageant.rsp 
    172         echo winmisc.obj winmm.lib winpgnt.obj winpgntc.obj >> pageant.rsp 
    173         echo winspool.lib winutils.obj >> pageant.rsp 
     173        echo imm32.lib libpkcs11.obj misc.obj pageant.res >> pageant.rsp 
     174        echo shell32.lib sshaes.obj sshbn.obj sshdes.obj >> pageant.rsp 
     175        echo sshdss.obj sshmd5.obj sshpubk.obj sshrsa.obj >> pageant.rsp 
     176        echo sshscard.obj sshsh512.obj sshsha.obj tree234.obj >> pageant.rsp 
     177        echo user32.lib version.obj winmisc.obj winmm.lib >> pageant.rsp 
     178        echo winpgnt.obj winpgntc.obj winspool.lib >> pageant.rsp 
     179        echo winutils.obj >> pageant.rsp 
    174180 
    175181plink.rsp: $(MAKEFILE) 
    176182        echo /nologo /subsystem:console > plink.rsp 
    177183        echo advapi32.lib be_all.obj cmdline.obj comctl32.lib >> plink.rsp 
    178184        echo comdlg32.lib cproxy.obj gdi32.lib imm32.lib >> plink.rsp 
    179         echo ldisc.obj logging.obj misc.obj pinger.obj >> plink.rsp 
    180         echo plink.res portfwd.obj pproxy.obj proxy.obj >> plink.rsp 
    181         echo raw.obj rlogin.obj settings.obj shell32.lib >> plink.rsp 
    182         echo ssh.obj sshaes.obj sshblowf.obj sshbn.obj >> plink.rsp 
    183         echo sshcrc.obj sshcrcda.obj sshdes.obj sshdh.obj >> plink.rsp 
    184         echo sshdss.obj sshmd5.obj sshpubk.obj sshrand.obj >> plink.rsp 
    185         echo sshrsa.obj sshsh512.obj sshsha.obj sshzlib.obj >> plink.rsp 
    186         echo telnet.obj timing.obj tree234.obj user32.lib >> plink.rsp 
    187         echo version.obj wildcard.obj wincons.obj windefs.obj >> plink.rsp 
    188         echo winmisc.obj winmm.lib winnet.obj winnoise.obj >> plink.rsp 
    189         echo winpgntc.obj winplink.obj winspool.lib >> plink.rsp 
    190         echo winstore.obj wintime.obj x11fwd.obj >> plink.rsp 
     185        echo ldisc.obj libpkcs11.obj local_cmd.obj logging.obj >> plink.rsp 
     186        echo misc.obj pinger.obj plink.res portfwd.obj >> plink.rsp 
     187        echo pproxy.obj proxy.obj raw.obj rlogin.obj >> plink.rsp 
     188        echo settings.obj shell32.lib ssh.obj sshaes.obj >> plink.rsp 
     189        echo sshblowf.obj sshbn.obj sshcrc.obj sshcrcda.obj >> plink.rsp 
     190        echo sshdes.obj sshdh.obj sshdss.obj sshmd5.obj >> plink.rsp 
     191        echo sshpubk.obj sshrand.obj sshrsa.obj sshscard.obj >> plink.rsp 
     192        echo sshsh512.obj sshsha.obj sshzlib.obj telnet.obj >> plink.rsp 
     193        echo timing.obj tree234.obj user32.lib version.obj >> plink.rsp 
     194        echo wildcard.obj wincons.obj windefs.obj winmisc.obj >> plink.rsp 
     195        echo winmm.lib winnet.obj winnoise.obj winpgntc.obj >> plink.rsp 
     196        echo winplink.obj winspool.lib winstore.obj >> plink.rsp 
     197        echo wintime.obj x11fwd.obj >> plink.rsp 
    191198 
    192199pscp.rsp: $(MAKEFILE) 
    193200        echo /nologo /subsystem:console > pscp.rsp 
    194201        echo advapi32.lib be_none.obj cmdline.obj comctl32.lib >> pscp.rsp 
    195202        echo comdlg32.lib cproxy.obj gdi32.lib imm32.lib >> pscp.rsp 
    196         echo int64.obj logging.obj misc.obj pinger.obj >> pscp.rsp 
    197         echo portfwd.obj pproxy.obj proxy.obj pscp.obj >> pscp.rsp 
    198         echo pscp.res settings.obj sftp.obj shell32.lib >> pscp.rsp 
    199         echo ssh.obj sshaes.obj sshblowf.obj sshbn.obj >> pscp.rsp 
    200         echo sshcrc.obj sshcrcda.obj sshdes.obj sshdh.obj >> pscp.rsp 
    201         echo sshdss.obj sshmd5.obj sshpubk.obj sshrand.obj >> pscp.rsp 
    202         echo sshrsa.obj sshsh512.obj sshsha.obj sshzlib.obj >> pscp.rsp 
    203         echo timing.obj tree234.obj user32.lib version.obj >> pscp.rsp 
    204         echo wildcard.obj wincons.obj windefs.obj winmisc.obj >> pscp.rsp 
    205         echo winmm.lib winnet.obj winnoise.obj winpgntc.obj >> pscp.rsp 
    206         echo winsftp.obj winspool.lib winstore.obj wintime.obj >> pscp.rsp 
    207         echo x11fwd.obj >> pscp.rsp 
     203        echo int64.obj libpkcs11.obj local_cmd.obj logging.obj >> pscp.rsp 
     204        echo misc.obj pinger.obj portfwd.obj pproxy.obj >> pscp.rsp 
     205        echo proxy.obj pscp.obj pscp.res settings.obj sftp.obj >> pscp.rsp 
     206        echo shell32.lib ssh.obj sshaes.obj sshblowf.obj >> pscp.rsp 
     207        echo sshbn.obj sshcrc.obj sshcrcda.obj sshdes.obj >> pscp.rsp 
     208        echo sshdh.obj sshdss.obj sshmd5.obj sshpubk.obj >> pscp.rsp 
     209        echo sshrand.obj sshrsa.obj sshscard.obj sshsh512.obj >> pscp.rsp 
     210        echo sshsha.obj sshzlib.obj timing.obj tree234.obj >> pscp.rsp 
     211        echo user32.lib version.obj wildcard.obj wincons.obj >> pscp.rsp 
     212        echo windefs.obj winmisc.obj winmm.lib winnet.obj >> pscp.rsp 
     213        echo winnoise.obj winpgntc.obj winsftp.obj >> pscp.rsp 
     214        echo winspool.lib winstore.obj wintime.obj x11fwd.obj >> pscp.rsp 
    208215 
    209216psftp.rsp: $(MAKEFILE) 
    210217        echo /nologo /subsystem:console > psftp.rsp 
    211218        echo advapi32.lib be_none.obj cmdline.obj comctl32.lib >> psftp.rsp 
    212219        echo comdlg32.lib cproxy.obj gdi32.lib imm32.lib >> psftp.rsp 
    213         echo int64.obj logging.obj misc.obj pinger.obj >> psftp.rsp 
    214         echo portfwd.obj pproxy.obj proxy.obj pscp.res >> psftp.rsp 
    215         echo psftp.obj settings.obj sftp.obj shell32.lib >> psftp.rsp 
    216         echo ssh.obj sshaes.obj sshblowf.obj sshbn.obj >> psftp.rsp 
    217         echo sshcrc.obj sshcrcda.obj sshdes.obj sshdh.obj >> psftp.rsp 
    218         echo sshdss.obj sshmd5.obj sshpubk.obj sshrand.obj >> psftp.rsp 
    219         echo sshrsa.obj sshsh512.obj sshsha.obj sshzlib.obj >> psftp.rsp 
    220         echo timing.obj tree234.obj user32.lib version.obj >> psftp.rsp 
    221         echo wildcard.obj wincons.obj windefs.obj winmisc.obj >> psftp.rsp 
    222         echo winmm.lib winnet.obj winnoise.obj winpgntc.obj >> psftp.rsp 
    223         echo winsftp.obj winspool.lib winstore.obj wintime.obj >> psftp.rsp 
    224         echo x11fwd.obj >> psftp.rsp 
     220        echo int64.obj libpkcs11.obj local_cmd.obj logging.obj >> psftp.rsp 
     221        echo misc.obj pinger.obj portfwd.obj pproxy.obj >> psftp.rsp 
     222        echo proxy.obj pscp.res psftp.obj settings.obj >> psftp.rsp 
     223        echo sftp.obj shell32.lib ssh.obj sshaes.obj >> psftp.rsp 
     224        echo sshblowf.obj sshbn.obj sshcrc.obj sshcrcda.obj >> psftp.rsp 
     225        echo sshdes.obj sshdh.obj sshdss.obj sshmd5.obj >> psftp.rsp 
     226        echo sshpubk.obj sshrand.obj sshrsa.obj sshscard.obj >> psftp.rsp 
     227        echo sshsh512.obj sshsha.obj sshzlib.obj timing.obj >> psftp.rsp 
     228        echo tree234.obj user32.lib version.obj wildcard.obj >> psftp.rsp 
     229        echo wincons.obj windefs.obj winmisc.obj winmm.lib >> psftp.rsp 
     230        echo winnet.obj winnoise.obj winpgntc.obj winsftp.obj >> psftp.rsp 
     231        echo winspool.lib winstore.obj wintime.obj x11fwd.obj >> psftp.rsp 
    225232 
    226233putty.rsp: $(MAKEFILE) 
    227234        echo /nologo /subsystem:windows > putty.rsp 
    228235        echo advapi32.lib be_all.obj cmdline.obj comctl32.lib >> putty.rsp 
    229236        echo comdlg32.lib config.obj cproxy.obj dialog.obj >> putty.rsp 
    230237        echo gdi32.lib imm32.lib ldisc.obj ldiscucs.obj >> putty.rsp 
    231         echo logging.obj minibidi.obj misc.obj pinger.obj >> putty.rsp 
    232         echo portfwd.obj pproxy.obj proxy.obj raw.obj >> putty.rsp 
    233         echo rlogin.obj settings.obj shell32.lib sizetip.obj >> putty.rsp 
    234         echo ssh.obj sshaes.obj sshblowf.obj sshbn.obj >> putty.rsp 
    235         echo sshcrc.obj sshcrcda.obj sshdes.obj sshdh.obj >> putty.rsp 
    236         echo sshdss.obj sshmd5.obj sshpubk.obj sshrand.obj >> putty.rsp 
    237         echo sshrsa.obj sshsh512.obj sshsha.obj sshzlib.obj >> putty.rsp 
     238        echo libpkcs11.obj local_cmd.obj logging.obj >> putty.rsp 
     239        echo minibidi.obj misc.obj pinger.obj portfwd.obj >> putty.rsp 
     240        echo pproxy.obj proxy.obj raw.obj rlogin.obj >> putty.rsp 
     241        echo settings.obj shell32.lib sizetip.obj ssh.obj >> putty.rsp 
     242        echo sshaes.obj sshblowf.obj sshbn.obj sshcrc.obj >> putty.rsp 
     243        echo sshcrcda.obj sshdes.obj sshdh.obj sshdss.obj >> putty.rsp 
     244        echo sshmd5.obj sshpubk.obj sshrand.obj sshrsa.obj >> putty.rsp 
     245        echo sshscard.obj sshsh512.obj sshsha.obj sshzlib.obj >> putty.rsp 
    238246        echo telnet.obj terminal.obj timing.obj tree234.obj >> putty.rsp 
    239247        echo user32.lib version.obj wcwidth.obj wildcard.obj >> putty.rsp 
    240248        echo win_res.res wincfg.obj winctrls.obj windefs.obj >> putty.rsp 
    ldiscucs.obj: ..\ldiscucs.c ..\putty.h . 
    370378                ..\puttymem.h ..\windows\winhelp.h ..\charset\charset.h 
    371379        cl $(COMPAT) $(XFLAGS) $(CFLAGS) /c ..\ldiscucs.c 
    372380 
     381libpkcs11.obj: ..\libpkcs11.c ..\pkcs11.h ..\ppkcs11.h 
     382        cl $(COMPAT) $(XFLAGS) $(CFLAGS) /c ..\libpkcs11.c 
     383 
     384local_cmd.obj: ..\local_cmd.c 
     385        cl $(COMPAT) $(XFLAGS) $(CFLAGS) /c ..\local_cmd.c 
     386 
    373387localenc.obj: ..\charset\localenc.c ..\charset\charset.h \ 
    374388                ..\charset\internal.h 
    375389        cl $(COMPAT) $(XFLAGS) $(CFLAGS) /c ..\charset\localenc.c 
    slookup.obj: ..\charset\slookup.c ..\cha 
    643657                ..\charset\enum.c ..\charset\sbcsdat.c ..\charset\utf8.c 
    644658        cl $(COMPAT) $(XFLAGS) $(CFLAGS) /c ..\charset\slookup.c 
    645659 
    646 ssh.obj: ..\ssh.c ..\putty.h ..\tree234.h ..\ssh.h ..\puttyps.h ..\network.h \ 
    647                 ..\misc.h ..\puttymem.h ..\int64.h ..\windows\winstuff.h \ 
     660ssh.obj: ..\ssh.c ..\putty.h ..\tree234.h ..\ssh.h ..\pkcs11.h ..\ppkcs11.h \ 
     661                ..\puttyps.h ..\network.h ..\misc.h ..\puttymem.h ..\int64.h \ 
     662                ..\windows\winstuff.h \ 
    648663                ..\mac\macstuff.h ..\macosx\osx.h ..\unix\unix.h \ 
    649664                ..\windows\winhelp.h ..\charset\charset.h 
    650665        cl $(COMPAT) $(XFLAGS) $(CFLAGS) /c ..\ssh.c 
    sshrsag.obj: ..\sshrsag.c ..\ssh.h ..\pu 
    713728                ..\misc.h 
    714729        cl $(COMPAT) $(XFLAGS) $(CFLAGS) /c ..\sshrsag.c 
    715730 
     731sshscard.obj: ..\sshscard.c ..\ssh.h ..\sshrsa.h ..\pkcs11.h ..\ppkcs11.h ..\sshscard.h \ 
     732                ..\putty.h ..\puttymem.h ..\network.h ..\int64.h ..\misc.h \ 
     733                ..\puttyps.h \ 
     734                ..\windows\winstuff.h ..\mac\macstuff.h ..\macosx\osx.h \ 
     735                ..\unix\unix.h ..\tree234.h ..\windows\winhelp.h \ 
     736                ..\charset\charset.h 
     737        cl $(COMPAT) $(XFLAGS) $(CFLAGS) /c ..\sshscard.c 
     738 
    716739sshsh512.obj: ..\sshsh512.c ..\ssh.h ..\puttymem.h ..\network.h ..\int64.h \ 
    717740                ..\misc.h 
    718741        cl $(COMPAT) $(XFLAGS) $(CFLAGS) /c ..\sshsh512.c 
    winpgen.obj: ..\windows\winpgen.c ..\put 
    973996        cl $(COMPAT) $(XFLAGS) $(CFLAGS) /c ..\windows\winpgen.c 
    974997 
    975998winpgnt.obj: ..\windows\winpgnt.c ..\putty.h ..\ssh.h ..\misc.h ..\tree234.h \ 
    976                 ..\puttyps.h ..\network.h ..\puttymem.h ..\int64.h \ 
    977                 ..\windows\winstuff.h ..\mac\macstuff.h ..\macosx\osx.h \ 
    978                 ..\unix\unix.h ..\windows\winhelp.h ..\charset\charset.h 
     999                ..\sshscard.h ..\puttyps.h ..\network.h ..\puttymem.h \ 
     1000                ..\int64.h ..\windows\winstuff.h ..\mac\macstuff.h \ 
     1001                ..\macosx\osx.h ..\unix\unix.h ..\windows\winhelp.h \ 
     1002                ..\charset\charset.h 
    9791003        cl $(COMPAT) $(XFLAGS) $(CFLAGS) /c ..\windows\winpgnt.c 
    9801004 
    9811005winpgntc.obj: ..\windows\winpgntc.c ..\putty.h ..\puttyps.h ..\network.h \ 
  • windows/MSVC/pageant/pageant.dsp

    diff -urNp putty-0.58.org/windows/MSVC/pageant/pageant.dsp putty-0.58+smartcard/windows/MSVC/pageant/pageant.dsp
    old new LINK32=link.exe 
    9494# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" 
    9595# Begin Source File 
    9696 
     97SOURCE=..\..\..\libpkcs11.c 
     98# End Source File 
     99# Begin Source File 
     100 
    97101SOURCE=..\..\..\misc.c 
    98102# End Source File 
    99103# Begin Source File 
    SOURCE=..\..\..\sshrsa.c 
    126130# End Source File 
    127131# Begin Source File 
    128132 
     133SOURCE=..\..\..\sshscard.c 
     134# End Source File 
     135# Begin Source File 
     136 
    129137SOURCE=..\..\..\sshsh512.c 
    130138# End Source File 
    131139# Begin Source File 
    SOURCE=..\..\..\network.h 
    186194# End Source File 
    187195# Begin Source File 
    188196 
     197SOURCE=..\..\..\pkcs11.h 
     198# End Source File 
     199# Begin Source File 
     200 
     201SOURCE=..\..\..\ppkcs11.h 
     202# End Source File 
     203# Begin Source File 
     204 
    189205SOURCE=..\..\..\putty.h 
    190206# End Source File 
    191207# Begin Source File 
    SOURCE=..\..\..\ssh.h 
    202218# End Source File 
    203219# Begin Source File 
    204220 
     221SOURCE=..\..\..\sshrsa.h 
     222# End Source File 
     223# Begin Source File 
     224 
     225SOURCE=..\..\..\sshscard.h 
     226# End Source File 
     227# Begin Source File 
     228 
    205229SOURCE=..\..\..\tree234.h 
    206230# End Source File 
    207231# Begin Source File 
  • windows/MSVC/plink/plink.dsp

    diff -urNp putty-0.58.org/windows/MSVC/plink/plink.dsp putty-0.58+smartcard/windows/MSVC/plink/plink.dsp
    old new SOURCE=..\..\..\ldisc.c 
    110110# End Source File 
    111111# Begin Source File 
    112112 
     113SOURCE=..\..\..\libpkcs11.c 
     114# End Source File 
     115# Begin Source File 
     116 
     117SOURCE=..\..\..\local_cmd.c 
     118# End Source File 
     119# Begin Source File 
     120 
    113121SOURCE=..\..\..\logging.c 
    114122# End Source File 
    115123# Begin Source File 
    SOURCE=..\..\..\sshrsa.c 
    207215# End Source File 
    208216# Begin Source File 
    209217 
     218SOURCE=..\..\..\sshscard.c 
     219# End Source File 
     220# Begin Source File 
     221 
    210222SOURCE=..\..\..\sshsh512.c 
    211223# End Source File 
    212224# Begin Source File 
    SOURCE=..\..\..\network.h 
    311323# End Source File 
    312324# Begin Source File 
    313325 
     326SOURCE=..\..\..\pkcs11.h 
     327# End Source File 
     328# Begin Source File 
     329 
     330SOURCE=..\..\..\ppkcs11.h 
     331# End Source File 
     332# Begin Source File 
     333 
    314334SOURCE=..\..\..\proxy.h 
    315335# End Source File 
    316336# Begin Source File 
    SOURCE=..\..\..\ssh.h 
    331351# End Source File 
    332352# Begin Source File 
    333353 
     354SOURCE=..\..\..\sshrsa.h 
     355# End Source File 
     356# Begin Source File 
     357 
     358SOURCE=..\..\..\sshscard.h 
     359# End Source File 
     360# Begin Source File 
     361 
    334362SOURCE=..\..\..\storage.h 
    335363# End Source File 
    336364# Begin Source File 
  • windows/MSVC/pscp/pscp.dsp

    diff -urNp putty-0.58.org/windows/MSVC/pscp/pscp.dsp putty-0.58+smartcard/windows/MSVC/pscp/pscp.dsp
    old new SOURCE=..\..\..\int64.c 
    110110# End Source File 
    111111# Begin Source File 
    112112 
     113SOURCE=..\..\..\libpkcs11.c 
     114# End Source File 
     115# Begin Source File 
     116 
     117SOURCE=..\..\..\local_cmd.c 
     118# End Source File 
     119# Begin Source File 
     120 
    113121SOURCE=..\..\..\logging.c 
    114122# End Source File 
    115123# Begin Source File 
    SOURCE=..\..\..\sshrsa.c 
    207215# End Source File 
    208216# Begin Source File 
    209217 
     218SOURCE=..\..\..\sshscard.c 
     219# End Source File 
     220# Begin Source File 
     221 
    210222SOURCE=..\..\..\sshsh512.c 
    211223# End Source File 
    212224# Begin Source File 
    SOURCE=..\..\..\network.h 
    303315# End Source File 
    304316# Begin Source File 
    305317 
     318SOURCE=..\..\..\pkcs11.h 
     319# End Source File 
     320# Begin Source File 
     321 
     322SOURCE=..\..\..\ppkcs11.h 
     323# End Source File 
     324# Begin Source File 
     325 
    306326SOURCE=..\..\..\proxy.h 
    307327# End Source File 
    308328# Begin Source File 
    SOURCE=..\..\..\ssh.h 
    331351# End Source File 
    332352# Begin Source File 
    333353 
     354SOURCE=..\..\..\sshrsa.h 
     355# End Source File 
     356# Begin Source File 
     357 
     358SOURCE=..\..\..\sshscard.h 
     359# End Source File 
     360# Begin Source File 
     361 
    334362SOURCE=..\..\..\storage.h 
    335363# End Source File 
    336364# Begin Source File 
  • windows/MSVC/psftp/psftp.dsp

    diff -urNp putty-0.58.org/windows/MSVC/psftp/psftp.dsp putty-0.58+smartcard/windows/MSVC/psftp/psftp.dsp
    old new SOURCE=..\..\..\int64.c 
    110110# End Source File 
    111111# Begin Source File 
    112112 
     113SOURCE=..\..\..\libpkcs11.c 
     114# End Source File 
     115# Begin Source File 
     116 
     117SOURCE=..\..\..\local_cmd.c 
     118# End Source File 
     119# Begin Source File 
     120 
    113121SOURCE=..\..\..\logging.c 
    114122# End Source File 
    115123# Begin Source File 
    SOURCE=..\..\..\sshrsa.c 
    207215# End Source File 
    208216# Begin Source File 
    209217 
     218SOURCE=..\..\..\sshscard.c 
     219# End Source File 
     220# Begin Source File 
     221 
    210222SOURCE=..\..\..\sshsh512.c 
    211223# End Source File 
    212224# Begin Source File 
    SOURCE=..\..\..\network.h 
    303315# End Source File 
    304316# Begin Source File 
    305317 
     318SOURCE=..\..\..\pkcs11.h 
     319# End Source File 
     320# Begin Source File 
     321 
     322SOURCE=..\..\..\ppkcs11.h 
     323# End Source File 
     324# Begin Source File 
     325 
    306326SOURCE=..\..\..\proxy.h 
    307327# End Source File 
    308328# Begin Source File 
    SOURCE=..\..\..\ssh.h 
    331351# End Source File 
    332352# Begin Source File 
    333353 
     354SOURCE=..\..\..\sshrsa.h 
     355# End Source File 
     356# Begin Source File 
     357 
     358SOURCE=..\..\..\sshscard.h 
     359# End Source File 
     360# Begin Source File 
     361 
    334362SOURCE=..\..\..\storage.h 
    335363# End Source File 
    336364# Begin Source File 
  • windows/MSVC/putty/putty.dsp

    diff -urNp putty-0.58.org/windows/MSVC/putty/putty.dsp putty-0.58+smartcard/windows/MSVC/putty/putty.dsp
    old new SOURCE=..\..\..\ldiscucs.c 
    122122# End Source File 
    123123# Begin Source File 
    124124 
     125SOURCE=..\..\..\libpkcs11.c 
     126# End Source File 
     127# Begin Source File 
     128 
     129SOURCE=..\..\..\local_cmd.c 
     130# End Source File 
     131# Begin Source File 
     132 
    125133SOURCE=..\..\..\logging.c 
    126134# End Source File 
    127135# Begin Source File 
    SOURCE=..\..\..\sshrsa.c 
    223231# End Source File 
    224232# Begin Source File 
    225233 
     234SOURCE=..\..\..\sshscard.c 
     235# End Source File 
     236# Begin Source File 
     237 
    226238SOURCE=..\..\..\sshsh512.c 
    227239# End Source File 
    228240# Begin Source File 
    SOURCE=..\..\..\network.h 
    363375# End Source File 
    364376# Begin Source File 
    365377 
     378SOURCE=..\..\..\pkcs11.h 
     379# End Source File 
     380# Begin Source File 
     381 
     382SOURCE=..\..\..\ppkcs11.h 
     383# End Source File 
     384# Begin Source File 
     385 
    366386SOURCE=..\..\..\proxy.h 
    367387# End Source File 
    368388# Begin Source File 
    SOURCE=..\..\..\ssh.h 
    383403# End Source File 
    384404# Begin Source File 
    385405 
     406SOURCE=..\..\..\sshrsa.h 
     407# End Source File 
     408# Begin Source File 
     409 
     410SOURCE=..\..\..\sshscard.h 
     411# End Source File 
     412# Begin Source File 
     413 
    386414SOURCE=..\..\..\storage.h 
    387415# End Source File 
    388416# Begin Source File 
  • windows/winhelp.h

    diff -urNp putty-0.58.org/windows/winhelp.h putty-0.58+smartcard/windows/winhelp.h
    old new  
    9999#define WINHELP_CTX_ssh_auth_changeuser "ssh.auth.changeuser" 
    100100#define WINHELP_CTX_ssh_auth_tis "ssh.auth.tis" 
    101101#define WINHELP_CTX_ssh_auth_ki "ssh.auth.ki" 
     102#define WINHELP_CTX_ssh_auth_pkcs11 "ssh.auth.pkcs11" 
     103#define WINHELP_CTX_ssh_auth_pkcs11_libfile "ssh.auth.pkcs11.libfile" 
     104#define WINHELP_CTX_ssh_auth_pkcs11_token_label "ssh.auth.pkcs11.token.label" 
    102105#define WINHELP_CTX_selection_buttons "selection.buttons" 
    103106#define WINHELP_CTX_selection_shiftdrag "selection.shiftdrag" 
    104107#define WINHELP_CTX_selection_rect "selection.rect" 
     
    115118#define WINHELP_CTX_translation_cjk_ambig_wide "translation.cjkambigwide" 
    116119#define WINHELP_CTX_translation_cyrillic "translation.cyrillic" 
    117120#define WINHELP_CTX_translation_linedraw "translation.linedraw" 
     121#define WINHELP_CTX_ssh_tunnels_localcmd "ssh.tunnels.localcmd" 
    118122#define WINHELP_CTX_ssh_tunnels_x11 "ssh.tunnels.x11" 
    119123#define WINHELP_CTX_ssh_tunnels_x11auth "ssh.tunnels.x11auth" 
    120124#define WINHELP_CTX_ssh_tunnels_portfwd "ssh.tunnels.portfwd" 
  • windows/winpgnt.c

    diff -urNp putty-0.58.org/windows/winpgnt.c putty-0.58+smartcard/windows/winpgnt.c
    old new  
    1515#include "misc.h" 
    1616#include "tree234.h" 
    1717 
     18#include "sshscard.h" 
     19 
    1820#include <shellapi.h> 
    1921 
    2022#ifndef NO_SECURITY 
    static filereq *keypath = NULL; 
    6769#define PUTTY_DEFAULT     "Default%20Settings" 
    6870static int initial_menuitems_count; 
    6971 
     72char* smartcard_comment="Smartcard"; 
    7073/* 
    7174 * Print a modal (Really Bad) message box and perform a fatal exit. 
    7275 */ 
     76 
     77void logevent( void * frontend, const char * string) { 
     78        fprintf(stderr, string); 
     79} 
     80 
     81 
    7382void modalfatalbox(char *fmt, ...) 
    7483{ 
    7584    va_list ap; 
    static void add_keyfile(Filename filenam 
    409418    int original_pass; 
    410419         
    411420    type = key_type(&filename); 
    412     if (type != SSH_KEYTYPE_SSH1 && type != SSH_KEYTYPE_SSH2) { 
     421    if (type != SSH_KEYTYPE_SSH1 && type != SSH_KEYTYPE_SSH2  && type != SSH_KEYTYPE_SMARTCARD) { 
    413422        char *msg = dupprintf("Couldn't load this key (%s)", 
    414423                              key_type_to_str(type)); 
    415424        message_box(msg, APPNAME, MB_OK | MB_ICONERROR, 
    static void add_keyfile(Filename filenam 
    438447            keylist = get_keylist1(&keylistlen); 
    439448        } else { 
    440449            unsigned char *blob2; 
    441             blob = ssh2_userkey_loadpub(&filename, NULL, &bloblen, &error); 
     450            if (type == SSH_KEYTYPE_SMARTCARD) { 
     451                char* algorithm; 
     452                blob = ssh2_userkey_loadpkcs11pub_fromfile(&filename, &algorithm, &bloblen, &error, &modalfatalbox); 
     453            } else { 
     454                blob = ssh2_userkey_loadpub(&filename, NULL, &bloblen, &error); 
     455            } 
    442456            if (!blob) { 
    443457                char *msg = dupprintf("Couldn't load private key (%s)", error); 
    444458                message_box(msg, APPNAME, MB_OK | MB_ICONERROR, 
    static void add_keyfile(Filename filenam 
    526540    error = NULL; 
    527541    if (type == SSH_KEYTYPE_SSH1) 
    528542        needs_pass = rsakey_encrypted(&filename, &comment); 
    529     else 
     543    if (type == SSH_KEYTYPE_SMARTCARD)  { 
     544        needs_pass = 1; 
     545        comment=malloc(10); 
     546        strncpy(comment,"smartcard",10); 
     547    } else 
    530548        needs_pass = ssh2_userkey_encrypted(&filename, &comment); 
    531549    attempts = 0; 
    532550    if (type == SSH_KEYTYPE_SSH1) 
    static void add_keyfile(Filename filenam 
    535553    pps.comment = comment; 
    536554    original_pass = 0; 
    537555    do { 
    538         if (needs_pass) { 
     556        if (needs_pass ) { 
    539557            /* try all the remembered passphrases first */ 
    540558            char *pp = index234(passphrases, attempts); 
    541             if(pp) { 
     559            if(pp && type != SSH_KEYTYPE_SMARTCARD) { 
    542560                strcpy(passphrase, pp); 
    543561            } else { 
    544562                int dlgret; 
    static void add_keyfile(Filename filenam 
    559577        if (type == SSH_KEYTYPE_SSH1) 
    560578            ret = loadrsakey(&filename, rkey, passphrase, &error); 
    561579        else { 
    562             skey = ssh2_load_userkey(&filename, passphrase, &error); 
     580            if (type == SSH_KEYTYPE_SMARTCARD)  
     581                skey = ssh2_load_pkcs11key_fromfile(&filename, passphrase, NULL); 
     582            else 
     583                skey = ssh2_load_userkey(&filename, passphrase, &error); 
    563584            if (skey == SSH2_WRONG_PASSPHRASE) 
    564585                ret = -1; 
    565586            else if (!skey) 
    static void add_keyfile(Filename filenam 
    638659        } else { 
    639660            if (add234(rsakeys, rkey) != rkey) 
    640661                sfree(rkey);           /* already present, don't waste RAM */ 
    641         } 
     662        }  
    642663    } else { 
    643664        if (already_running) { 
    644665            unsigned char *request, *response; 
    645666            void *vresponse; 
    646667            int reqlen, alglen, clen, keybloblen, resplen, ret; 
     668 
     669            if (type == SSH_KEYTYPE_SMARTCARD) { 
     670                /* big problem here.  Can't hand key data upstream */ 
     671                modalfatalbox("Can't send smartcard key to running pageant"); 
     672            } 
     673 
     674 
    647675            alglen = strlen(skey->alg->name); 
    648676            clen = strlen(skey->comment); 
    649677 
    static void add_keyfile(Filename filenam 
    686714            if (add234(ssh2keys, skey) != skey) { 
    687715                skey->alg->freekey(skey->data); 
    688716                sfree(skey);           /* already present, don't waste RAM */ 
     717                /* need to check library status for releasing smartcard key - KLS */ 
    689718            } 
    690719        } 
    691720    } 
    static void answer_msg(void *msg) 
    10091038            if (msgend < p+datalen) 
    10101039                goto failure; 
    10111040            data = p; 
     1041            //modalfatalbox("about to look for key"); 
     1042//MessageBox(NULL, "Asked to sign", APPNAME, 
     1043//                 MB_OK | MB_ICONERROR); 
     1044 
    10121045            key = find234(ssh2keys, &b, cmpkeys_ssh2_asymm); 
    1013             if (!key) 
     1046            if ((!key) || (!key->alg) || (!key->alg->sign) || (!key->data) ) 
    10141047                goto failure; 
     1048         
    10151049            signature = key->alg->sign(key->data, data, datalen, &siglen); 
    10161050            len = 5 + 4 + siglen; 
    10171051            PUT_32BIT(ret, len - 4); 
    static void answer_msg(void *msg) 
    12851319        /* 
    12861320         * Unrecognised message. Return SSH_AGENT_FAILURE. 
    12871321         */ 
     1322        modalfatalbox("failed to respond"); 
    12881323        PUT_32BIT(ret, 1); 
    12891324        ret[4] = SSH_AGENT_FAILURE; 
    12901325        break; 
    int WINAPI WinMain(HINSTANCE inst, HINST 
    20952130                command = ""; 
    20962131            break; 
    20972132        } else { 
     2133            fprintf(stderr, "processing key files\n"); 
    20982134            add_keyfile(filename_from_str(argv[i])); 
    20992135            added_keys = TRUE; 
    21002136        } 
Note: See TracBrowser for help on using the repository browser.