Overview
| Comment: | Updated to deal with 6E00 and added support for win32 build options | 
|---|---|
| Downloads: | Tarball | ZIP archive | SQL archive | 
| Timelines: | family | ancestors | descendants | both | piv | 
| Files: | files | file ages | folders | 
| SHA1: | 6ba1dff55aa7d7e17bc220bf48492d88 | 
| User & Date: | rkeene on 2013-10-17 20:29:07 | 
| Other Links: | branch diff | manifest | tags | 
Context
| 2015-07-15 | ||
| 20:10 | Merged divergent PIV branches Closed-Leaf check-in: 466549fe92 user: rkeene tags: piv | |
| 2013-10-17 | ||
| 20:29 | Merged in PIV support check-in: 3e5963d5d9 user: rkeene tags: trunk | |
| 20:29 | Updated to deal with 6E00 and added support for win32 build options check-in: 6ba1dff55a user: rkeene tags: piv | |
| 2013-09-14 | ||
| 02:50 | Updated to treat a return code of 0x6E00 (wrong instruction class) the same as 0x6982 (security status not satisified) check-in: 2e1e0bfc20 user: rkeene tags: piv | |
Changes
Modified build/cackey_win32_build/build.sh from [716f40add4] to [fbfa3a5bbe].
| 1 2 3 4 | #! /bin/bash make distclean | | | 1 2 3 4 5 6 7 8 9 | #! /bin/bash make distclean ./configure --with-pcsc-headers="$(pwd)/build/cackey_win32_build/include" --with-pcsc-libs="-L$(pwd)/build/cackey_win32_build/lib -lwinscard" --host=i586-mingw32msvc CPPFLAGS="-I$(pwd)/build/cackey_win32_build/include" "$@" || exit 1 make || exit 1 exit 0 | 
Modified cackey.c from [c06e51ee9b] to [e6fa629162].
| ︙ | ︙ | |||
| 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 | 
				CACKEY_DEBUG_PRINTF("Security status not satisified (respcode = 0x%04x).  Returning NEEDLOGIN", (int) respcode);
				cackey_mark_slot_reset(slot);
				slot->token_flags = CKF_LOGIN_REQUIRED;
				return(CACKEY_PCSC_E_NEEDLOGIN);
			}
			if (send_ret == CACKEY_PCSC_E_TOKENABSENT) {
				CACKEY_DEBUG_PRINTF("Token absent.  Returning TOKENABSENT");
				cackey_mark_slot_reset(slot);
				return(CACKEY_PCSC_E_TOKENABSENT);
 | > > > > > > > > > | 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 | 
				CACKEY_DEBUG_PRINTF("Security status not satisified (respcode = 0x%04x).  Returning NEEDLOGIN", (int) respcode);
				cackey_mark_slot_reset(slot);
				slot->token_flags = CKF_LOGIN_REQUIRED;
				return(CACKEY_PCSC_E_NEEDLOGIN);
			}
			if (respcode == 0x6E00) {
				CACKEY_DEBUG_PRINTF("Got \"WRONG CLASS\", this means we are talking to the wrong object (likely because the card went away) -- resetting");
				cackey_mark_slot_reset(slot);
				slot->token_flags = CKF_LOGIN_REQUIRED;
				return(CACKEY_PCSC_E_NEEDLOGIN);
			}
			if (send_ret == CACKEY_PCSC_E_TOKENABSENT) {
				CACKEY_DEBUG_PRINTF("Token absent.  Returning TOKENABSENT");
				cackey_mark_slot_reset(slot);
				return(CACKEY_PCSC_E_TOKENABSENT);
 | 
| ︙ | ︙ | |||
| 3069 3070 3071 3072 3073 3074 3075 | 
	}
	/* PIV authentication uses a "key_reference" of 0x80 */
	pcsc_identities = cackey_read_certs(slot, NULL, &num_certs);
	if (num_certs > 0 && pcsc_identities != NULL) {
		switch (pcsc_identities[0].id_type) {
			case CACKEY_ID_TYPE_PIV:
 | | | 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 | 
	}
	/* PIV authentication uses a "key_reference" of 0x80 */
	pcsc_identities = cackey_read_certs(slot, NULL, &num_certs);
	if (num_certs > 0 && pcsc_identities != NULL) {
		switch (pcsc_identities[0].id_type) {
			case CACKEY_ID_TYPE_PIV:
				CACKEY_DEBUG_PRINTF("We have PIV card, so we will attempt to authenticate using the PIV Application key reference");
				key_reference = 0x80;
				break;
			default:
				break;
		}
 | 
| ︙ | ︙ |