diff --git a/src/libopensc/iso7816.c b/src/libopensc/iso7816.c index d1e857af..8cb9e6b6 100644 --- a/src/libopensc/iso7816.c +++ b/src/libopensc/iso7816.c @@ -426,6 +426,14 @@ static int iso7816_select_file(sc_card_t *card, pathlen -= 2; } break; + case SC_PATH_TYPE_FROM_CURRENT: + apdu.p1 = 9; + break; + case SC_PATH_TYPE_PARENT: + apdu.p1 = 3; + pathlen = 0; + apdu.cse = SC_APDU_CASE_2_SHORT; + break; default: SC_FUNC_RETURN(card->ctx, 2, SC_ERROR_INVALID_ARGUMENTS); } diff --git a/src/libopensc/types.h b/src/libopensc/types.h index b5840f6d..44527d54 100644 --- a/src/libopensc/types.h +++ b/src/libopensc/types.h @@ -38,6 +38,8 @@ struct sc_object_id { #define SC_PATH_TYPE_PATH 2 #define SC_PATH_TYPE_PATH_PROT 3 /* path of a file containing EnveleopedData objects */ +#define SC_PATH_TYPE_FROM_CURRENT 4 +#define SC_PATH_TYPE_PARENT 5 #define SC_MAX_PATH_SIZE 16 #define SC_MAX_PATH_STRING_SIZE (SC_MAX_PATH_SIZE * 2 + 1)