NB! This project is outdated and unmaintained, please refer to the OpenSC WindowsInstaller instead!
| r24 | r30 | |
|---|---|---|
| 1 | Smart card bundle 0.5-pre1 | |
| 2 | * use GnuWin32 libtool (re-zipped version) | |
| 3 | * openssl 0.9.7g | |
| 4 | * opensc 0.10.0-pre3b (-pre3 plus patch for taiwanese eid) | |
| 5 | * libp11 0.1.3 (0.1.2 plus patches to compile on windows) | |
| 6 | ||
| 1 | 7 | Smart card bundle 20050720 |
| 2 | 8 | * set version to 20050720 |
| r19 | r30 | |
|---|---|---|
| 97 | 97 | including but not limited to the implied warranty of merchantability, fitness |
| 98 | 98 | for a particular purpose, and noninfringement. |
| 99 | ||
| 100 | 6.) This software contains libtool libltdl3: | |
| 101 | ||
| 102 | Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. | |
| 103 | Originally by Thomas Tanner <tanner@ffii.org> | |
| 104 | ||
| 105 | This library is free software; you can redistribute it and/or | |
| 106 | modify it under the terms of the GNU Lesser General Public | |
| 107 | License as published by the Free Software Foundation; either | |
| 108 | version 2 of the License, or (at your option) any later version. | |
| 109 | ||
| 110 | As a special exception to the GNU Lesser General Public License, | |
| 111 | if you distribute this file as part of a program or library that | |
| 112 | is built using GNU libtool, you may include it under the same | |
| 113 | distribution terms that you use for the rest of that program. | |
| 114 | ||
| 115 | This library is distributed in the hope that it will be useful, | |
| 116 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 117 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 118 | Lesser General Public License for more details. | |
| 119 | ||
| 99 | 120 | |
| 100 | 121 | ================= OPENSSL LICENSE TEXT ================= |
| r24 | r30 | |
|---|---|---|
| 2 | 2 | ======================= |
| 3 | 3 | |
| 4 | scb- |
|
| 5 | Smart card bundle |
|
| 6 | with OpenSSL 0.9. |
|
| 4 | scb-0.5-pre1b.exe | |
| 5 | Smart card bundle 0.5-pre1b | |
| 6 | with OpenSSL 0.9.7g, OpenSC 0.10.0-pre1b | |
| 7 | 7 | and Putty 0.58 (plus patches) |
| 8 | 8 | |
| 9 | opensc- |
|
| 10 | O |
|
| 11 | http://www.opensc.org/files/ |
|
| 9 | opensc-0.10.0-pre1b.tar.gz | |
| 10 | OpenSC prerelease 0.10.0-pre1 patched for taiwanese eid | |
| 11 | http://www.opensc.org/files/ | |
| 12 | 12 | |
| 13 | openssl-0.9. |
|
| 14 | Original version of OpenSSL 0.9. |
|
| 13 | openssl-0.9.7g.tar.gz | |
| 14 | Original version of OpenSSL 0.9.7g. | |
| 15 | 15 | http://www.openssl.org/source/ |
| 16 | 16 | |
| … | … | |
| 22 | 22 | Putty 0.58 (for unix) plus smartcard patches, plus fixes, |
| 23 | 23 | compiles fine on Windows. No pageant support so far. |
| 24 | ||
| 25 | GnuWin32.zip | |
| 26 | zip file with all files installed by libtool 1.5.8 from | |
| 27 | http://gnuwin32.sourceforge.net/packages.html | |
| 28 |
| r28 | r30 | |
|---|---|---|
| 7 | 7 | ISCC="$(PROGRAMFILES)\Inno Setup 5\ISCC" |
| 8 | 8 | OPENSSL=0.9.7g |
| 9 | OPENSC=20050720 | |
| 9 | OPENSC=0.10.0-pre3b | |
| 10 | LIBP11=0.1.3 | |
| 10 | 11 | PUTTY=0.58 |
| 11 | 12 | |
| … | … | |
| 17 | 18 | mkdir $(DEST)\include\openssl |
| 18 | 19 | mkdir $(DEST)\include\opensc |
| 20 | mkdir $(DEST)\lib | |
| 19 | 21 | |
| 20 | 22 | copy opensc.conf $(DEST) |
| … | … | |
| 22 | 24 | copy LICENSE $(DEST) |
| 23 | 25 | |
| 26 | cd GNUWIN32 | |
| 27 | COPY BIN\LIBLTDL3.DLL $(DEST) | |
| 28 | COPY include\LTDL.H $(DEST)\include | |
| 29 | COPY lib\libltdl.lib $(DEST)\lib | |
| 30 | cd .. | |
| 31 | ||
| 24 | 32 | cd openssl-$(OPENSSL) |
| 25 | 33 | perl Configure VC-WIN32 |
| 26 | ||
| 34 | # If Microsoft MASM is not installed, comment out the following line | |
| 27 | 35 | ms\do_masm |
| 28 | ||
| 29 | ||
| 30 | ||
| 31 | ||
| 32 | ||
| 36 | # If Free Netwide Assembler NASM in installed, uncomment the | |
| 37 | # following line | |
| 38 | #ms\do_nasm | |
| 39 | # If there is no assembler at all, uncomment the following line | |
| 40 | #ms\do_ms | |
| 33 | 41 | nmake -f ms\ntdll.mak |
| 34 | 42 | |
| 35 | 43 | copy inc32\openssl\* $(DEST)\include\openssl |
| 36 | copy /b out32dll\ssleay32.lib $(DEST) |
|
| 37 | copy /b out32dll\libeay32.lib $(DEST) |
|
| 38 | copy /b out32dll\ssleay32.exp $(DEST) |
|
| 39 | copy /b out32dll\libeay32.exp $(DEST) |
|
| 44 | copy /b out32dll\ssleay32.lib $(DEST)\lib | |
| 45 | copy /b out32dll\libeay32.lib $(DEST)\lib | |
| 46 | copy /b out32dll\ssleay32.exp $(DEST)\lib | |
| 47 | copy /b out32dll\libeay32.exp $(DEST)\lib | |
| 40 | 48 | copy /b out32dll\ssleay32.dll $(DEST) |
| 41 | 49 | copy /b out32dll\libeay32.dll $(DEST) |
| … | … | |
| 45 | 53 | cd .. |
| 46 | 54 | |
| 47 | ||
| 48 | ||
| 49 | ||
| 50 | ||
| 51 | 55 | cd opensc-$(OPENSC) |
| 56 | perl -p -e "s/^LIBLTDL_INCL.*/LIBLTDL_INCL = \/I$(DESTP)\\include/g" -i~ win32\Make.rules.mak | |
| 57 | perl -p -e "s/^LIBLTDL_LIB.*/LIBLTDL_LIB = $(DESTP)\\lib\\libltdl.lib/g" -i~ win32\Make.rules.mak | |
| 52 | 58 | perl -p -e "s/#OPENSSL_DEF/OPENSSL_DEF/g" -i~ win32\Make.rules.mak |
| 53 | 59 | perl -p -e "s/C:\\openssl\\include/$(DESTP)\\include/g" -i~ win32\Make.rules.mak |
| 54 | perl -p -e "s/C:\\openssl\\out32dll/$(DESTP) |
|
| 60 | perl -p -e "s/C:\\openssl\\out32dll/$(DESTP)\\lib/g" -i~ win32\Make.rules.mak | |
| 55 | 61 | |
| 56 | set lib=$(DEST);$( |
|
| 62 | set lib=$(DEST);$(DEST)\lib;$(LIB) | |
| 57 | 63 | set PATH=$(DEST);$(PATH) |
| 58 | 64 | set INCLUDE=$(DEST)\INCLUDE;$(INCLUDE) |
| … | … | |
| 60 | 66 | nmake -f Makefile.mak |
| 61 | 67 | |
| 62 | ||
| 63 | ||
| 64 | 68 | COPY COPYING $(DEST) |
| 69 | COPY NEWS $(DEST) | |
| 65 | 70 | COPY QUICKSTART $(DEST) |
| 66 | ||
| 67 | 71 | |
| 68 | 72 | mkdir $(DEST)\DOC |
| 69 | COPY DOC\*.HTML $(DEST)\DOC | |
| 73 | mkdir $(DEST)\DOC\OPENSC | |
| 74 | COPY DOC\* $(DEST)\DOC\OPENSC | |
| 70 | 75 | |
| 71 | 76 | COPY SRC\PKCS15INIT\*.PROFILE $(DEST) |
| … | … | |
| 74 | 79 | COPY SRC\PKCS11\OPENSC-PKCS11.DLL $(DEST) |
| 75 | 80 | COPY SRC\PKCS11\PKCS11-SPY.DLL $(DEST) |
| 76 | ||
| 77 | ||
| 78 | 81 | |
| 79 | 82 | COPY SRC\TESTS\BASE64.EXE $(DEST) |
| … | … | |
| 87 | 90 | COPY SRC\TOOLS\PKCS15-TOOL.EXE $(DEST) |
| 88 | 91 | COPY SRC\TOOLS\PKCS15-CRYPT.EXE $(DEST) |
| 89 | |
|
| 92 | COPY SRC\INCLUDE\opensc\* $(DEST)\include\opensc | |
| 90 | 93 | |
| 91 | copy SRC\LIBP11\LIBP11.H $(DEST)\include | |
| 94 | COPY SRC\SCCONF\SCCONF.LIB $(DEST)\lib | |
| 95 | ||
| 96 | cd .. | |
| 97 | ||
| 98 | cd libp11-$(LIBP11) | |
| 99 | ||
| 100 | cd src | |
| 101 | perl -p -e "s/^LIBLTDL_INC.*/LIBLTDL_INC = \/I$(DESTP)\\include/g" -i~ Makefile.mak | |
| 102 | perl -p -e "s/^LIBLTDL_LIB.*/LIBLTDL_LIB = $(DESTP)\\lib\\libltdl.lib/g" -i~ Makefile.mak | |
| 103 | perl -p -e "s/^OPENSSL_INC.*/OPENSSL_INC = \/I$(DESTP)\\include/g" -i~ Makefile.mak | |
| 104 | perl -p -e "s/^OPENSSL_LIB.*/OPENSSL_LIB = $(DESTP)\\lib\\libeay32.lib/g" -i~ Makefile.mak | |
| 105 | nmake /f Makefile.mak | |
| 106 | COPY LIBP11.DLL $(DEST) | |
| 107 | cd .. | |
| 108 | ||
| 109 | COPY SRC\LIBP11.H $(DEST)\include | |
| 110 | ||
| 111 | mkdir $(DEST)\DOC\LIBP11 | |
| 112 | COPY DOC\* $(DEST)\DOC\LIBP11 | |
| 92 | 113 | |
| 93 | 114 | cd .. |
| … | … | |
| 97 | 118 | cd Windows |
| 98 | 119 | |
| 99 | ||
| 100 | ||
| 120 | # If your compiler doesn't support IPV6, uncomment the following line | |
| 121 | # perl -p -e "s/# - COMPAT=\/DNO_IPV6/COMPAT=\/DNO_IPV6/g" -i~ Makefile.vc | |
| 101 | 122 | nmake /f Makefile.vc |
| 102 | COPY putty.exe $(DEST) | |
| 103 | COPY pageant.exe $(DEST) | |
| 104 | COPY plink.exe $(DEST) | |
| 105 | COPY puttytel.exe $(DEST) | |
| 106 | COPY puttygen.exe $(DEST) | |
| 107 | COPY pscp.exe $(DEST) | |
| 108 | copy psftp.exe $(DEST) | |
| 123 | ||
| 124 | mkdir $(DEST)\putty | |
| 125 | COPY putty.exe $(DEST)\putty | |
| 126 | COPY pageant.exe $(DEST)\putty | |
| 127 | COPY plink.exe $(DEST)\putty | |
| 128 | COPY puttytel.exe $(DEST)\putty | |
| 129 | COPY puttygen.exe $(DEST)\putty | |
| 130 | COPY pscp.exe $(DEST)\putty | |
| 131 | copy psftp.exe $(DEST)\putty | |
| 109 | 132 | |
| 110 | 133 | cd .. |
| 111 | 134 | |
| 112 | copy smartcard.ppk $(DEST) |
|
| 135 | copy smartcard.ppk $(DEST)\putty | |
| 113 | 136 | |
| 114 | 137 | cd .. |
| 138 | ||
| 139 | cl /Zi /MD /nologo /I$(DEST)\include\opensc /D_WIN32_WINNT=0x0400 \ | |
| 140 | /c editconf.c | |
| 141 | ||
| 142 | link /DEBUG /NOLOGO /INCREMENTAL:NO /MACHINE:IX86 /pdb:$*.pdb \ | |
| 143 | /out:editconf.exe editconf.obj \ | |
| 144 | $(DEST)\\lib\\scconf.lib advapi32.lib | |
| 145 | copy editconf.exe $(DEST) | |
| 115 | 146 | |
| 116 | 147 | copy $(MSVCR) $(DEST) |
| r29 | r30 | |
|---|---|---|
| 3 | 3 | 1.) Download |
| 4 | 4 | OpenSC source code |
| 5 | http://www.opensc.org/files/ |
|
| 5 | http://www.opensc.org/files/testing/opensc-0.10.0-pre3.tar.gz | |
| 6 | 6 | |
| 7 | 7 | OpenSSL source code |
| … | … | |
| 9 | 9 | |
| 10 | 10 | Putty source code (for unix) |
| 11 | http://the.earth.li/~sgtatham/putty/latest/putty-0.5 |
|
| 11 | http://the.earth.li/~sgtatham/putty/latest/putty-0.58.tar.gz | |
| 12 | 12 | |
| 13 | 13 | Smart card patch for Putty |
| … | … | |
| 22 | 22 | Libtool for windows, gnuwin32 port |
| 23 | 23 | http://gnuwin32.sourceforge.net/packages/libtool.htm |
| 24 | ||
| 25 | ||
| 26 | ||
| 27 | 24 | |
| 28 | 25 | 2.) patch putty on a unix system |
| 29 | tar xfvz putty-0.5 |
|
| 30 | cd putty-0.5 |
|
| 31 | patch -p1 < ../putty-0.5 |
|
| 26 | tar xfvz putty-0.58.tar.gz | |
| 27 | cd putty-0.58 | |
| 28 | patch -p1 < ../putty-0.58-smartcard.diff | |
| 32 | 29 | cd .. |
| 33 | tar cfvz putty-0.5 |
|
| 34 | rm -rf putty-0.5 |
|
| 30 | tar cfvz putty-0.58-smartcard.tar.gz putty-0.58 | |
| 31 | rm -rf putty-0.58/ | |
| 35 | 32 | |
| 36 | 3.) | |
| 37 | copy these files to some folder on a windows machine: | |
| 33 | 3.) copy these files to some folder on a windows machine: | |
| 38 | 34 | Makefile.mak scb.iss |
| 39 | 35 | opensc-0.9.6.tar.gz openssl-0.9.7g.tar.gz |
| 40 | putty-0.5 |
|
| 36 | putty-0.58-smartcard.tar.gz | |
| 41 | 37 | |
| 42 | 38 | 4.) use winzip or 7-zip to "Extract here" all *.tar.gz files. |
| r26 | r30 | |
|---|---|---|
| 27 | 27 | #include <windows.h> |
| 28 | 28 | #include <errno.h> |
| 29 | #ifdef HAVE_CONFIG_H | |
| 30 | #include <config.h> | |
| 31 | #endif | |
| 32 | #include "..\trunk\src\scconf\scconf.h" | |
| 29 | #include <scconf.h> | |
| 33 | 30 | |
| 34 | 31 | static int printHelp(const char *csMesg, int iRet); |
| … | … | |
| 38 | 35 | #define CLEANUP(iRes, iVal) {iRes = iVal; goto cleanup;} |
| 39 | 36 | |
| 40 | ||
| 41 | ||
| 42 | 37 | #define LOG(s) |
| 43 | 38 | #define LOGINT(s, i) |
| … | … | |
| 45 | 40 | int main(int argc, char **argv) |
| 46 | 41 | { |
| 47 | ||
| 48 | ||
| 42 | char csConfigDir[MAX_PATH]; | |
| 43 | int iRet = 0; | |
| 49 | 44 | |
| 50 | ||
| 51 | ||
| 52 | ||
| 45 | LOG("\n*************\n"); | |
| 46 | LOG(argv[0]); | |
| 47 | LOGINT("\nargc=%d\n", argc); | |
| 53 | 48 | |
| 54 | ||
| 55 | ||
| 56 | ||
| 49 | if (argc != 2) | |
| 50 | return printHelp(NULL, 0); | |
| 51 | LOG(argv[1]); | |
| 57 | 52 | |
| 58 | ||
| 59 | ||
| 60 | ||
| 61 | ||
| 53 | strncpy(csConfigDir, argv[1], sizeof(csConfigDir) - 1); | |
| 54 | csConfigDir[sizeof(csConfigDir) - 1] = '\0'; | |
| 55 | if (csConfigDir[strlen(csConfigDir) - 1] == '\\') | |
| 56 | csConfigDir[strlen(csConfigDir) - 1] = '\0'; | |
| 62 | 57 | |
| 63 | iRet = changeConfigFile(csConfigDir); | |
| 64 | LOGINT("\nchangeConfigFile(): %d\n", iRet); | |
| 65 | if (iRet != 0) | |
| 66 | printHelp("Error: couldn't change the opensc.conf file: %d\n", iRet); | |
| 67 | else | |
| 68 | { | |
| 69 | iRet = changeRegistry(csConfigDir); | |
| 70 | LOGINT("changeRegistry(): %d\n", iRet); | |
| 71 | if (iRet != 0) | |
| 72 | printHelp("Error: couldn't change the registry: %d\n", iRet); | |
| 73 | else | |
| 74 | printf("\nconfigopensc finished successfully\n"); | |
| 75 | } | |
| 58 | iRet = changeConfigFile(csConfigDir); | |
| 59 | LOGINT("\nchangeConfigFile(): %d\n", iRet); | |
| 60 | if (iRet != 0) | |
| 61 | printHelp("Error: couldn't change the opensc.conf file: %d\n", | |
| 62 | iRet); | |
| 63 | else { | |
| 64 | iRet = changeRegistry(csConfigDir); | |
| 65 | LOGINT("changeRegistry(): %d\n", iRet); | |
| 66 | if (iRet != 0) | |
| 67 | printHelp("Error: couldn't change the registry: %d\n", | |
| 68 | iRet); | |
| 69 | else | |
| 70 | printf("\nconfigopensc finished successfully\n"); | |
| 71 | } | |
| 76 | 72 | |
| 77 | ||
| 73 | return iRet; | |
| 78 | 74 | } |
| 79 | 75 | |
| 80 | 76 | static int printHelp(const char *csMesg, int iRet) |
| 81 | 77 | { |
| 82 | ||
| 83 | ||
| 84 | ||
| 85 | ||
| 86 | ||
| 87 | ||
| 88 | ||
| 89 | ||
| 90 | ||
| 78 | if (csMesg != NULL) | |
| 79 | printf(csMesg, iRet); | |
| 80 | printf("\nThis tool configures OpenSC after installation.\n"); | |
| 81 | printf("\nUsage: configopensc <installationdir>\n"); | |
| 82 | printf(" in which <installationdir> is the directory where\n"); | |
| 83 | printf(" the OpenSC config fileshave been installed.\n"); | |
| 84 | printf(" (E.g. \"C:\\Program Files\\OpenSC\\conf\")\n\n"); | |
| 85 | printf("So: OpenSC should have been installed already.\n\n"); | |
| 86 | return iRet; | |
| 91 | 87 | } |
| 92 | 88 | |
| 93 | 89 | static int changeConfigFile(const char *csConfigDir) |
| 94 | 90 | { |
| 95 | ||
| 91 | char csConfigFile[MAX_PATH]; | |
| 96 | 92 | scconf_block *conf_block = NULL, **blocks; |
| 97 | 93 | scconf_context *conf = NULL; |
| 98 | ||
| 99 | ||
| 94 | scconf_item *item; | |
| 95 | scconf_list *list; | |
| 100 | 96 | int iRes = 0; |
| 101 | 97 | |
| 102 | /* Open and parse the config file */ | |
| 103 | sprintf(csConfigFile, "%s\\opensc.conf", csConfigDir); | |
| 104 | conf = scconf_new(csConfigFile); | |
| 105 | if (!conf) | |
| 106 | { | |
| 98 | /* Open and parse the config file */ | |
| 99 | sprintf(csConfigFile, "%s\\opensc.conf", csConfigDir); | |
| 100 | conf = scconf_new(csConfigFile); | |
| 101 | if (!conf) { | |
| 107 | 102 | printf("\nscconf_new() failed\n"); |
| 108 | 103 | CLEANUP(iRes, 1); |
| 109 | 104 | } |
| 110 | if (scconf_parse(conf) < 1) | |
| 111 | { | |
| 105 | if (scconf_parse(conf) < 1) { | |
| 112 | 106 | printf("\nscconf_parse() failed: %s\n", conf->errmsg); |
| 113 | 107 | CLEANUP(iRes, 1); |
| 114 | 108 | } |
| 115 | 109 | |
| 116 | ||
| 110 | /* Get the "app default" block */ | |
| 117 | 111 | blocks = scconf_find_blocks(conf, NULL, "app", "default"); |
| 118 | 112 | if (blocks[0]) |
| 119 | 113 | conf_block = blocks[0]; |
| 120 | 114 | free(blocks); |
| 121 | if (conf_block != NULL) | |
| 122 | { | |
| 123 | for (item = conf_block->items; item != NULL; item=item->next) | |
| 124 | { | |
| 125 | if ((item->type != SCCONF_ITEM_TYPE_VALUE) || (strcmp(item->key, "profile_dir") != 0)) | |
| 126 | continue; | |
| 127 | list = item->value.list; | |
| 128 | scconf_list_destroy(list); | |
| 129 | list = NULL; | |
| 130 | scconf_list_add(&list, csConfigDir); | |
| 131 | item->value.list = list; | |
| 132 | break; | |
| 133 | } | |
| 134 | if (item == NULL) | |
| 135 | scconf_put_str(conf_block, "profile_dir", csConfigDir); | |
| 136 | } | |
| 115 | if (conf_block != NULL) { | |
| 116 | for (item = conf_block->items; item != NULL; item = item->next) { | |
| 117 | if ((item->type != SCCONF_ITEM_TYPE_VALUE) | |
| 118 | || (strcmp(item->key, "profile_dir") != 0)) | |
| 119 | continue; | |
| 120 | list = item->value.list; | |
| 121 | scconf_list_destroy(list); | |
| 122 | list = NULL; | |
| 123 | scconf_list_add(&list, csConfigDir); | |
| 124 | item->value.list = list; | |
| 125 | break; | |
| 126 | } | |
| 127 | if (item == NULL) | |
| 128 | scconf_put_str(conf_block, "profile_dir", csConfigDir); | |
| 129 | } | |
| 137 | 130 | |
| 138 | ||
| 131 | /* Write */ | |
| 139 | 132 | if ((iRes = scconf_write(conf, csConfigFile)) != 0) |
| 140 | 133 | printf("\nscconf_write(): %s\n", strerror(iRes)); |
| 141 | 134 | |
| 142 | ||
| 143 | ||
| 144 | ||
| 135 | cleanup: | |
| 136 | if (conf) | |
| 137 | scconf_free(conf); | |
| 145 | 138 | |
| 146 | ||
| 139 | return iRes; | |
| 147 | 140 | } |
| 148 | 141 | |
| 149 | 142 | static int changeRegistry(const char *csConfigDir) |
| 150 | 143 | { |
| 151 | char csConfigFile[MAX_PATH]; | |
| 152 | DWORD dwDisposition; | |
| 153 | HKEY hKey; | |
| 154 | DWORD dwErr; | |
| 144 | char csConfigFile[MAX_PATH]; | |
| 145 | char csModuleFile[MAX_PATH]; | |
| 146 | DWORD dwDisposition; | |
| 147 | HKEY hKey; | |
| 148 | DWORD dwErr; | |
| 155 | 149 | |
| 156 | sprintf(csConfigFile, "%s\\opensc.conf", csConfigDir); | |
| 150 | sprintf(csConfigFile, "%s\\opensc.conf", csConfigDir); | |
| 151 | sprintf(csModuleFile, "%s\\opensc-pkcs11.dll", csConfigDir); | |
| 157 | 152 | |
| 158 | dwErr = RegCreateKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\OpenSC", | |
| 159 | 0L, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &dwDisposition); | |
| 160 | if (dwErr != ERROR_SUCCESS) | |
| 161 | printf("RegCreateKeyEx() returned error %d (0x%0x)\n", GetLastError(), GetLastError()); | |
| 162 | else | |
| 163 | { | |
| 164 | dwErr = RegSetValueEx(hKey, "ConfigFile", 0L, REG_SZ, | |
| 165 | csConfigFile, strlen(csConfigFile)+1); | |
| 166 | if (dwErr != ERROR_SUCCESS) | |
| 167 | printf("RegSetValueEx() returned error %d (0x%0x)\n", GetLastError(), GetLastError()); | |
| 153 | dwErr = RegCreateKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\OpenSC", | |
| 154 | 0L, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, | |
| 155 | NULL, &hKey, &dwDisposition); | |
| 156 | if (dwErr != ERROR_SUCCESS) | |
| 157 | printf("RegCreateKeyEx() returned error %d (0x%0x)\n", | |
| 158 | GetLastError(), GetLastError()); | |
| 159 | else { | |
| 160 | dwErr = RegSetValueEx(hKey, "ConfigFile", 0L, REG_SZ, | |
| 161 | csConfigFile, strlen(csConfigFile) + 1); | |
| 162 | if (dwErr != ERROR_SUCCESS) | |
| 163 | printf("RegSetValueEx() returned error %d (0x%0x)\n", | |
| 164 | GetLastError(), GetLastError()); | |
| 168 | 165 | |
| 169 | ||
| 170 | ||
| 166 | RegCloseKey(hKey); | |
| 167 | } | |
| 171 | 168 | |
| 172 | return (int) dwErr; | |
| 169 | dwErr = RegCreateKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\PKCS11-Spy", | |
| 170 | 0L, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, | |
| 171 | NULL, &hKey, &dwDisposition); | |
| 172 | if (dwErr != ERROR_SUCCESS) | |
| 173 | printf("RegCreateKeyEx() returned error %d (0x%0x)\n", | |
| 174 | GetLastError(), GetLastError()); | |
| 175 | else { | |
| 176 | dwErr = RegSetValueEx(hKey, "Module", 0L, REG_SZ, | |
| 177 | csModuleFile, strlen(csModuleFile) + 1); | |
| 178 | if (dwErr != ERROR_SUCCESS) | |
| 179 | printf("RegSetValueEx() returned error %d (0x%0x)\n", | |
| 180 | GetLastError(), GetLastError()); | |
| 181 | ||
| 182 | RegCloseKey(hKey); | |
| 183 | } | |
| 184 | ||
| 185 | return (int)dwErr; | |
| 173 | 186 | } |
| r13 | r30 | |
|---|---|---|
| 20 | 20 | # Default: stdout |
| 21 | 21 | # |
| 22 | # debug_file = |
|
| 22 | # debug_file = /tmp/opensc-debug.log; | |
| 23 | 23 | |
| 24 | 24 | # The file to which errors will be written |
| … | … | |
| 27 | 27 | # Default: stderr |
| 28 | 28 | # |
| 29 | # error_file = "C:\opensc-error.log"; | |
| 30 | ||
| 31 | # Where to find the *.profile files for pkcs15init; | |
| 32 | ||
| 33 | profile_dir = "C:\Program Files\Smart card bundle"; | |
| 29 | # error_file = /tmp/opensc-errors.log; | |
| 30 | ||
| 31 | # PKCS#15 initialization / personalization | |
| 32 | # profiles directory for pkcs15-init. | |
| 33 | ||
| 34 | profile_dir = PKGDATADIR; | |
| 34 | 35 | |
| 35 | 36 | # What reader drivers to load at start-up |
| … | … | |
| 40 | 41 | # configuration block has to be written for the driver. |
| 41 | 42 | # Default: internal |
| 42 | # NOTE: if "internal" keyword is used, must be the |
|
| 43 | # NOTE: if "internal" keyword is used, must be the | |
| 43 | 44 | # last entry in reader_drivers list |
| 44 | 45 | # |
| … | … | |
| 80 | 81 | # Default: none |
| 81 | 82 | # |
| 82 | apdu_masquerade = |
|
| 83 | apdu_masquerade = none; | |
| 83 | 84 | # |
| 84 | 85 | # This sets the maximum send and receive sizes. |
| … | … | |
| 88 | 89 | max_send_size = 252; |
| 89 | 90 | max_recv_size = 252; |
| 90 | } | |
| 91 | # | |
| 92 | # Connect to reader in exclusive mode. | |
| 93 | # Default: false | |
| 94 | connect_exclusive = false; | |
| 95 | # | |
| 96 | # Reset the card after disconnect. | |
| 97 | # Default: true | |
| 98 | connect_reset = true; | |
| 99 | # | |
| 100 | # Reset the card after each transaction. | |
| 101 | # Default: false | |
| 102 | transcaction_reset = false; | |
| 103 | # | |
| 104 | # Enable pinpad if detected (PC/SC v2.0.2 Part 10) | |
| 105 | # Default: false | |
| 106 | enable_pinpad = false; | |
| 107 | } | |
| 108 | ||
| 109 | # options for openct support | |
| 110 | reader_driver openct { | |
| 111 | # virtual readers to allocate. default:5 | |
| 112 | readers = 5; | |
| 113 | }; | |
| 91 | 114 | |
| 92 | 115 | # What card drivers to load at start-up |
| … | … | |
| 97 | 120 | # configuration block has to be written for the driver. |
| 98 | 121 | # Default: internal |
| 99 | # NOTE: When "internal" keyword is used, must be last entry |
|
| 122 | # NOTE: When "internal" keyword is used, must be last entry | |
| 100 | 123 | # |
| 101 | 124 | # card_drivers = customcos, internal; |
| 102 | 125 | |
| 103 | # Card driver configuration blocks. | |
| 104 | ||
| 105 | # For all drivers, you can specify ATRs of cards that | |
| 106 | # should be handled by this driver (in addition to the | |
| 107 | # list of compiled-in ATRs). | |
| 108 | # | |
| 109 | # The supported internal card driver names are | |
| 110 | # flex Cryptoflex/Multiflex | |
| 111 | # setcos Setec | |
| 112 | # etoken Aladdin eToken and other CardOS based cards | |
| 113 | # gpk GPK 4K/8K/16K | |
| 114 | # mcrd MICARDO 2.1 | |
| 115 | # miocos MioCOS 1.1 | |
| 116 | # openpgp OpenPGP card | |
| 117 | # tcos TCOS 2.0 | |
| 118 | # emv EMV compatible cards | |
| 119 | ||
| 120 | # GPK card driver additional ATR entry: | |
| 121 | card_driver gpk { | |
| 122 | # atr = 00:11:22; | |
| 123 | } | |
| 124 | ||
| 125 | # For card drivers loaded from an external shared library/DLL, | |
| 126 | # Card driver configuration blocks. | |
| 127 | ||
| 128 | # For card drivers loaded from an external shared library/DLL, | |
| 126 | 129 | # you need to specify the path name of the module |
| 127 | 130 | # |
| … | … | |
| 129 | 132 | # The location of the driver library |
| 130 | 133 | # module = /usr/lib/opensc/drivers/card_customcos.so; |
| 131 | ||
| 132 | ||
| 133 | 134 | # } |
| 134 | 135 | |
| … | … | |
| 140 | 141 | # Default: autodetect |
| 141 | 142 | # |
| 142 | # force_card_driver = miocos; | |
| 143 | # force_card_driver = customcos; | |
| 144 | ||
| 145 | # In addition to the built-in list of known cards in the | |
| 146 | # card driver, you can configure a new card for the driver | |
| 147 | # using the card_atr block. The goal is to centralize | |
| 148 | # everything related to a certain card to card_atr. | |
| 149 | # | |
| 150 | # The supported internal card driver names are | |
| 151 | # etoken Aladdin eToken and other Siemens CardOS cards | |
| 152 | # flex Schlumberger Multiflex/Cryptoflex | |
| 153 | # cyberflex Schlumberger Cyberflex | |
| 154 | # gpk Gemplus GPK | |
| 155 | # miocos MioCOS 1.1 | |
| 156 | # mcrd MICARDO 2.1 | |
| 157 | # setcos Setec cards | |
| 158 | # starcos STARCOS SPK 2.3 | |
| 159 | # tcos TCOS 2.0 | |
| 160 | # openpgp OpenPGP card | |
| 161 | # jcop JCOP cards with BlueZ PKCS#15 applet | |
| 162 | # oberthur Oberthur AuthentIC.v2/CosmopolIC.v4 | |
| 163 | # belpic Belpic cards | |
| 164 | # emv EMV compatible cards | |
| 165 | ||
| 166 | # Generic format: card_atr <hex encoded ATR (case-sensitive!)> | |
| 167 | ||
| 168 | # New card entry for the flex card driver | |
| 169 | # card_atr 3b:f0:0d:ca:fe { | |
| 170 | # All parameters for the context are | |
| 171 | # optional unless specified otherwise. | |
| 172 | ||
| 173 | # Context: global, card driver | |
| 174 | # | |
| 175 | # ATR mask value | |
| 176 | # | |
| 177 | # The mask is logically AND'd with an | |
| 178 | # card ATR prior to comparison with the | |
| 179 | # ATR reference value above. Using mask | |
| 180 | # allows identifying and configuring | |
| 181 | # multiple ATRs as the same card model. | |
| 182 | # atrmask = "ff:ff:ff:ff:ff"; | |
| 183 | ||
| 184 | # Context: card driver | |
| 185 | # | |
| 186 | # Specify used card driver (REQUIRED). | |
| 187 | # | |
| 188 | # When enabled, overrides all possible | |
| 189 | # settings from the card drivers built-in | |
| 190 | # card configuration list. | |
| 191 | # driver = "flex"; | |
| 192 | ||
| 193 | # Set card name for card drivers that allows it. | |
| 194 | # name = "My CryptoFlex card"; | |
| 195 | ||
| 196 | # Card type as an integer value. | |
| 197 | # | |
| 198 | # Depending on card driver, this allows | |
| 199 | # tuning the behaviour of the card driver | |
| 200 | # for your card. | |
| 201 | # type = "2002"; | |
| 202 | ||
| 203 | # Card flags as an hex value. | |
| 204 | # Multiple values are OR'd together. | |
| 205 | # | |
| 206 | # Depending on card driver, this allows | |
| 207 | # fine-tuning the capabilities in | |
| 208 | # the card driver for your card. | |
| 209 | # | |
| 210 | # Optionally, some known parameters | |
| 211 | # can be specified as strings: | |
| 212 | # | |
| 213 | # keygen - On-board key generation capability | |
| 214 | # rng - On-board random number source | |
| 215 | # | |
| 216 | # flags = "keygen", "rng", "0x80000000"; | |
| 217 | ||
| 218 | # | |
| 219 | # Context: PKCS#15 emulation layer | |
| 220 | # | |
| 221 | # When using PKCS#15 emulation, force | |
| 222 | # the emulation driver for specific cards. | |
| 223 | # | |
| 224 | # Required for external drivers, but can | |
| 225 | # be used with built-in drivers, too. | |
| 226 | # pkcs15emu = "custom"; | |
| 227 | ||
| 228 | # | |
| 229 | # Context: reader driver | |
| 230 | # | |
| 231 | # Force protocol selection for specific cards. | |
| 232 | # Known parameters: t0, t1, raw | |
| 233 | # force_protocol = "t0"; | |
| 234 | # } | |
| 235 | ||
| 236 | # Estonian ID card and Micardo driver currently play together with T=0 only. | |
| 237 | # In theory only the 'cold' ATR should be specified, as T=0 will be the preferred | |
| 238 | # protocol once you boot it up with T=0, but be paranoid. | |
| 239 | card_atr 3b:6e:00:ff:45:73:74:45:49:44:20:76:65:72:20:31:2e:30 { | |
| 240 | force_protocol = t0; | |
| 241 | } | |
| 242 | card_atr 3b:fe:94:00:ff:80:b1:fa:45:1f:03:45:73:74:45:49:44:20:76:65:72:20:31:2e:30:43 { | |
| 243 | force_protocol = t0; | |
| 244 | } | |
| 245 | ||
| 143 | 246 | |
| 144 | 247 | # Below are the framework specific configuration blocks. |
| … | … | |
| 149 | 252 | # home directory. |
| 150 | 253 | # |
| 151 | # At the moment you have to 'teach' the card to the | |
| 152 | # system by: | |
| 153 | # pkcs15-tool -L | |
| 254 | # At the moment you have to 'teach' the card | |
| 255 | # to the system by running command: pkcs15-tool -L | |
| 154 | 256 | # |
| 155 | 257 | # WARNING: Caching shouldn't be used in setuid root |
| … | … | |
| 158 | 260 | # |
| 159 | 261 | use_caching = true; |
| 160 | # Enable pkcs15 emulation |
|
| 262 | # Enable pkcs15 emulation. | |
| 161 | 263 | # Default: yes |
| 162 | 264 | enable_pkcs15_emulation = yes; |
| 163 | # |
|
| 164 | # |
|
| 265 | # Prefer pkcs15 emulation code before | |
| 266 | # the normal pkcs15 processing. | |
| 165 | 267 | # Default: no |
| 166 | 268 | try_emulation_first = no; |
| 167 | # Enable builtin emulators |
|
| 269 | # Enable builtin emulators. | |
| 168 | 270 | # Default: yes |
| 169 | 271 | enable_builtin_emulation = yes; |
| 170 | 272 | # list of the builtin pkcs15 emulators to test |
| 171 | # possible values: esteid, openpgp, netkey, netkey, starcert, infocamere | |
| 172 | builtin_emulators = esteid, openpgp, netkey, netkey, starcert, infocamere; | |
| 173 | ||
| 174 | # additional pkcs15 emulators (dynamic or builtin with | |
| 175 | # a different atr etc.) | |
| 176 | # emulate foo { | |
| 177 | # module = builtin; | |
| 178 | # atr = 11:22:33:44; | |
| 179 | #} | |
| 180 | } | |
| 181 | ||
| 182 | # Estonian ID card and Micardo driver currently play together with T=0 only. | |
| 183 | # In theory only the 'cold' ATR should be specified, as T=0 will be the preferred | |
| 184 | # protocol once you boot it up with T=0, but be paranoid. | |
| 185 | ||
| 186 | # Generic format: card_atr <hex encoded ATR (case-sensitive!)> | |
| 187 | # Only parameter currently understood is force_protocol | |
| 188 | card_atr 3b:6e:00:ff:45:73:74:45:49:44:20:76:65:72:20:31:2e:30 { | |
| 189 | force_protocol = t0; | |
| 190 | } | |
| 191 | card_atr 3b:fe:94:00:ff:80:b1:fa:45:1f:03:45:73:74:45:49:44:20:76:65:72:20:31:2e:30:43 { | |
| 192 | force_protocol = t0; | |
| 193 | } | |
| 194 | } | |
| 195 | ||
| 196 | # For applications that use SCAM (pam_opensc, sia_opensc) | |
| 197 | app scam { | |
| 198 | framework pkcs15 { | |
| 199 | use_caching = false; | |
| 273 | builtin_emulators = esteid, openpgp, tcos, starcert, infocamere, postecert, actalis, atrust-acosi, gemsafe, tccardos; | |
| 274 | ||
| 275 | # additional settings per driver | |
| 276 | # | |
| 277 | # For pkcs15 emulators loaded from an external shared library/DLL, | |
| 278 | # you need to specify the path name of the module and customize | |
| 279 | # the card_atr example above correctly. | |
| 280 | # | |
| 281 | # emulate custom { | |
| 282 | # The location of the driver library | |
| 283 | # module = /usr/lib/opensc/drivers/p15emu_custom.so; | |
| 284 | # } | |
| 200 | 285 | } |
| 201 | 286 | } |
| … | … | |
| 211 | 296 | # maximum on the overall number of slots |
| 212 | 297 | # the pkcs11 module is able to handle. |
| 213 | # | |
| 214 | # reduced to 1 as new default to make ID CSP happy. | |
| 215 | num_slots = 1; | |
| 298 | num_slots = 4; | |
| 216 | 299 | |
| 217 | 300 | # Normally, the pkcs11 module will create |
| … | … | |
| 224 | 307 | # Set this option to true to hide these empty |
| 225 | 308 | # slots. |
| 226 | hide_empty_tokens = |
|
| 309 | hide_empty_tokens = yes; | |
| 227 | 310 | |
| 228 | 311 | # By default, the OpenSC PKCS#11 module will |
| … | … | |
| 259 | 342 | } |
| 260 | 343 | } |
| 261 | ||
| 262 | ||
| 263 | ||
| 264 | ||
| 265 | ||
| 266 | ||
| 267 | ||
| 268 | ||
| 269 | ||
| 270 | ||
| 271 | ||
| 272 | ||
| 273 | ||
| 274 | ||
| 275 | ||
| 276 | ||
| 277 | ||
| 278 | ||
| 279 | ||
| 280 | ||
| 281 | ||
| 282 | ||
| 283 |
| r24 | r30 | |
|---|---|---|
| 3 | 3 | |
| 4 | 4 | #define MyAppName "Smart card bundle" |
| 5 | #define MyAppVerName "Smart card bundle |
|
| 5 | #define MyAppVerName "Smart card bundle 0.5-pre1b" | |
| 6 | 6 | #define MyAppPublisher "Andreas Jellinghaus" |
| 7 | 7 | #define MyAppURL "http://www.opensc.org/scb/" |
| … | … | |
| 18 | 18 | DefaultGroupName={#MyAppName} |
| 19 | 19 | LicenseFile=TARGET\LICENSE |
| 20 | OutputBaseFilename=scb- |
|
| 20 | OutputBaseFilename=scb-0.5-pre1 | |
| 21 | 21 | Compression=lzma |
| 22 | 22 | SolidCompression=yes |
| 23 | 23 | |
| 24 | [Components] | |
| 25 | Name: "main"; Description: "OpenSC PKCS#11 Library"; Types: full; Flags: fixed | |
| 26 | Name: "docs"; Description: "Documentation"; Types: full | |
| 27 | Name: "devel"; Description: "Development"; Types: full | |
| 28 | Name: "putty"; Description: "Putty SSH Client"; Types: full | |
| 29 | ||
| 30 | [Files] | |
| 31 | Source: TARGET\*; DestDir: {app}; Components: main | |
| 32 | Source: TARGET\*.dll; DestDir: {sys}; Components: main | |
| 33 | ; NOTE: Don't use "Flags: ignoreversion" on any shared system files | |
| 34 | Source: TARGET\lib; DestDir: {app}\lib; Flags: recursesubdirs createallsubdirs; Components: devel | |
| 35 | Source: TARGET\include; DestDir: {app}\include; Flags: recursesubdirs createallsubdirs; Components: devel | |
| 36 | Source: TARGET\doc; DestDir: {app}\doc; Flags: recursesubdirs createallsubdirs; Components: docs | |
| 37 | Source: TARGET\putty; DestDir: {app}; Flags: recursesubdirs createallsubdirs; Components: putty | |
| 38 | ||
| 24 | 39 | [Tasks] |
| 25 | 40 | Name: startmenu; Description: "Create a &Start Menu group" |
| 26 | Name: desktopicon; Description: "Create a &desktop icon for PuTTY" | |
| 27 | Name: associate; Description: "&Associate .PPK files (PuTTY Private Key) with Pageant" | |
| 28 | ||
| 29 | [Files] | |
| 30 | Source: TARGET\*; DestDir: {app}; Flags: recursesubdirs createallsubdirs | |
| 31 | Source: TARGET\*.dll; DestDir: {sys}; Flags: recursesubdirs createallsubdirs | |
| 32 | ; NOTE: Don't use "Flags: ignoreversion" on any shared system files | |
| 41 | Name: desktopicon; Description: "Create a &desktop icon for PuTTY"; Components: putty | |
| 42 | Name: associate; Description: "&Associate .PPK files (PuTTY Private Key) with Pageant"; Components: putty | |
| 33 | 43 | |
| 34 | 44 | [Icons] |
| 35 | Name: "{group}\PuTTY"; Filename: "{app}\putty.exe"; Tasks: startmenu |
|
| 36 | Name: "{group}\PuTTY Manual"; Filename: "{app}\putty.hlp"; Tasks: startmenu |
|
| 37 | Name: "{group}\PuTTY Web Site"; Filename: "{app}\website.url"; Tasks: startmenu |
|
| 38 | Name: "{group}\PSFTP"; Filename: "{app}\psftp.exe"; Tasks: startmenu |
|
| 39 | Name: "{group}\PuTTYgen"; Filename: "{app}\puttygen.exe"; Tasks: startmenu |
|
| 40 | Name: "{group}\Pageant"; Filename: "{app}\pageant.exe"; Tasks: startmenu |
|
| 41 | Name: "{userdesktop}\PuTTY"; Filename: "{app}\putty.exe"; Tasks: desktopicon |
|
| 42 | Name: "{group}\Web page"; Filename: "{app}\opensc.url"; Tasks: startmenu |
|
| 43 | Name: "{group}\Uninstall"; Filename: "{app}\unins000.exe"; Tasks: startmenu |
|
| 45 | Name: "{group}\PuTTY"; Filename: "{app}\putty.exe"; Tasks: startmenu; Components: putty | |
| 46 | Name: "{group}\PuTTY Manual"; Filename: "{app}\putty.hlp"; Tasks: startmenu; Components: putty | |
| 47 | Name: "{group}\PuTTY Web Site"; Filename: "{app}\website.url"; Tasks: startmenu; Components: putty | |
| 48 | Name: "{group}\PSFTP"; Filename: "{app}\psftp.exe"; Tasks: startmenu; Components: putty | |
| 49 | Name: "{group}\PuTTYgen"; Filename: "{app}\puttygen.exe"; Tasks: startmenu; Components: putty | |
| 50 | Name: "{group}\Pageant"; Filename: "{app}\pageant.exe"; Tasks: startmenu; Components: putty | |
| 51 | Name: "{userdesktop}\PuTTY"; Filename: "{app}\putty.exe"; Tasks: desktopicon; Components: putty | |
| 52 | Name: "{group}\Web page"; Filename: "{app}\opensc.url"; Tasks: startmenu; Components: main | |
| 53 | Name: "{group}\Uninstall"; Filename: "{app}\unins000.exe"; Tasks: startmenu; Components: main | |
| 44 | 54 | |
| 45 | 55 | [Registry] |
| 46 | Root: HKCR; Subkey: ".ppk"; ValueType: string; ValueName: ""; ValueData: "PuTTYPrivateKey"; Flags: uninsdeletevalue; Tasks: associate | |
| 47 | Root: HKCR; Subkey: "PuTTYPrivateKey"; ValueType: string; ValueName: ""; ValueData: "PuTTY Private Key File"; Flags: uninsdeletekey; Tasks: associate | |
| 48 | Root: HKCR; Subkey: "PuTTYPrivateKey\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\pageant.exe,0"; Tasks: associate | |
| 49 | Root: HKCR; Subkey: "PuTTYPrivateKey\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\pageant.exe"" ""%1"""; Tasks: associate | |
| 50 | Root: HKCR; Subkey: "PuTTYPrivateKey\shell\edit"; ValueType: string; ValueName: ""; ValueData: "&Edit"; Tasks: associate | |
| 51 | Root: HKCR; Subkey: "PuTTYPrivateKey\shell\edit\command"; ValueType: string; ValueName: ""; ValueData: """{app}\puttygen.exe"" ""%1"""; Tasks: associate | |
| 52 | Root: HKLM; Subkey: "Software\OpenSC"; ValueType: string; ValueName: "ConfigFile"; ValueData: "{app}\opensc.conf" | |
| 53 | Root: HKCU; Subkey: "Software\OpenSC"; ValueType: string; ValueName: "ConfigFile"; ValueData: "{app}\opensc.conf" | |
| 56 | Root: HKCR; Subkey: ".ppk"; ValueType: string; ValueName: ""; ValueData: "PuTTYPrivateKey"; Flags: uninsdeletevalue; Tasks: associate; Components: putty | |
| 57 | Root: HKCR; Subkey: "PuTTYPrivateKey"; ValueType: string; ValueName: ""; ValueData: "PuTTY Private Key File"; Flags: uninsdeletekey; Tasks: associate; Components: putty | |
| 58 | Root: HKCR; Subkey: "PuTTYPrivateKey\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\pageant.exe,0"; Tasks: associate; Components: putty | |
| 59 | Root: HKCR; Subkey: "PuTTYPrivateKey\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\pageant.exe"" ""%1"""; Tasks: associate; Components: putty | |
| 60 | Root: HKCR; Subkey: "PuTTYPrivateKey\shell\edit"; ValueType: string; ValueName: ""; ValueData: "&Edit"; Tasks: associate; Components: putty | |
| 61 | Root: HKCR; Subkey: "PuTTYPrivateKey\shell\edit\command"; ValueType: string; ValueName: ""; ValueData: """{app}\puttygen.exe"" ""%1"""; Tasks: associate; Components: putty | |
| 62 | Root: HKLM; Subkey: "Software\OpenSC"; ValueType: string; ValueName: "ConfigFile"; ValueData: "{app}\opensc.conf"; Components: main | |
| 63 | Root: HKLM; Subkey: "Software\PKCS11-Spy"; ValueType: string; ValueName: "Module"; ValueData: "{app}\opensc-pkcs11.dll"; Components: main | |
| 64 | ||
| 65 | [Run] | |
| 66 | Filename: "{app}\editconf.exe"; Parameters: "{app}"; Flags: postinstall runhidden; Components: main |