add ykpiv_fetch_object() to library
This commit is contained in:
+24
@@ -602,3 +602,27 @@ ykpiv_rc ykpiv_verify(ykpiv_state *state, const char *pin, int *tries) {
|
|||||||
return YKPIV_GENERIC_ERROR;
|
return YKPIV_GENERIC_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ykpiv_rc ykpiv_fetch_object(ykpiv_state *state, int object_id,
|
||||||
|
unsigned char *data, unsigned long *len) {
|
||||||
|
int sw;
|
||||||
|
unsigned char indata[5];
|
||||||
|
unsigned char templ[] = {0, YKPIV_INS_GET_DATA, 0x3b, 0xff};
|
||||||
|
long inlen = 5;
|
||||||
|
|
||||||
|
indata[0] = 0x5c;
|
||||||
|
if(object_id == YKPIV_OBJ_DISCOVERY) {
|
||||||
|
indata[1] = 1;
|
||||||
|
indata[2] = YKPIV_OBJ_DISCOVERY;
|
||||||
|
inlen = 3;
|
||||||
|
} else if(object_id > 0xffff && object_id <= 0xffffff) {
|
||||||
|
indata[1] = 3;
|
||||||
|
indata[2] = (object_id >> 16) & 0xff;
|
||||||
|
indata[3] = (object_id >> 8) & 0xff;
|
||||||
|
indata[4] = object_id & 0xff;
|
||||||
|
} else {
|
||||||
|
return YKPIV_INVALID_OBJECT;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ykpiv_transfer_data(state, templ, indata, inlen, data, len, &sw);
|
||||||
|
}
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ extern "C"
|
|||||||
YKPIV_KEY_ERROR = -8,
|
YKPIV_KEY_ERROR = -8,
|
||||||
YKPIV_PARSE_ERROR = -9,
|
YKPIV_PARSE_ERROR = -9,
|
||||||
YKPIV_WRONG_PIN = -10,
|
YKPIV_WRONG_PIN = -10,
|
||||||
|
YKPIV_INVALID_OBJECT = -11,
|
||||||
} ykpiv_rc;
|
} ykpiv_rc;
|
||||||
|
|
||||||
const char *ykpiv_strerror(ykpiv_rc err);
|
const char *ykpiv_strerror(ykpiv_rc err);
|
||||||
@@ -77,6 +78,8 @@ extern "C"
|
|||||||
unsigned char algorithm, unsigned char key);
|
unsigned char algorithm, unsigned char key);
|
||||||
ykpiv_rc ykpiv_get_version(ykpiv_state *state, char *version, size_t len);
|
ykpiv_rc ykpiv_get_version(ykpiv_state *state, char *version, size_t len);
|
||||||
ykpiv_rc ykpiv_verify(ykpiv_state *state, const char *pin, int *tries);
|
ykpiv_rc ykpiv_verify(ykpiv_state *state, const char *pin, int *tries);
|
||||||
|
ykpiv_rc ykpiv_fetch_object(ykpiv_state *state, int object_id,
|
||||||
|
unsigned char *data, unsigned long *len);
|
||||||
|
|
||||||
#define YKPIV_ALGO_3DES 0x03
|
#define YKPIV_ALGO_3DES 0x03
|
||||||
#define YKPIV_ALGO_RSA1024 0x06
|
#define YKPIV_ALGO_RSA1024 0x06
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ global:
|
|||||||
ykpiv_sign_data;
|
ykpiv_sign_data;
|
||||||
ykpiv_get_version;
|
ykpiv_get_version;
|
||||||
ykpiv_verify;
|
ykpiv_verify;
|
||||||
|
ykpiv_fetch_object;
|
||||||
|
|
||||||
local:
|
local:
|
||||||
*;
|
*;
|
||||||
|
|||||||
Reference in New Issue
Block a user