Added obj files to Makefile.mak for windows build
Fixed WIN32 compiler errors Adjusted log message calls to short form modified: src/libopensc/Makefile.mak modified: src/libopensc/card-sc-hsm.c modified: src/libopensc/pkcs15-sc-hsm.c
This commit is contained in:
parent
1a7ca32865
commit
4ff917bd25
@ -23,12 +23,13 @@ OBJECTS = \
|
||||
card-rtecp.obj card-westcos.obj card-myeid.obj card-ias.obj \
|
||||
card-javacard.obj card-itacns.obj card-authentic.obj \
|
||||
card-iasecc.obj iasecc-sdo.obj iasecc-sm.obj \
|
||||
card-sc-hsm.obj \
|
||||
\
|
||||
pkcs15-openpgp.obj pkcs15-infocamere.obj pkcs15-starcert.obj \
|
||||
pkcs15-tcos.obj pkcs15-esteid.obj pkcs15-postecert.obj pkcs15-gemsafeGPK.obj \
|
||||
pkcs15-actalis.obj pkcs15-atrust-acos.obj pkcs15-tccardos.obj pkcs15-piv.obj \
|
||||
pkcs15-esinit.obj pkcs15-westcos.obj pkcs15-pteid.obj pkcs15-oberthur.obj \
|
||||
pkcs15-itacns.obj pkcs15-gemsafeV1.obj \
|
||||
pkcs15-itacns.obj pkcs15-gemsafeV1.obj pkcs15-sc-hsm.obj \
|
||||
compression.obj p15card-helper.obj \
|
||||
$(TOPDIR)\win32\versioninfo.res
|
||||
|
||||
|
@ -109,26 +109,26 @@ static int sc_hsm_read_binary(sc_card_t *card,
|
||||
apdu.resp = recvbuf;
|
||||
|
||||
r = sc_transmit_apdu(card, &apdu);
|
||||
SC_TEST_RET(ctx, SC_LOG_DEBUG_NORMAL, r, "APDU transmit failed");
|
||||
LOG_TEST_RET(ctx, r, "APDU transmit failed");
|
||||
if (apdu.resplen == 0)
|
||||
SC_FUNC_RETURN(ctx, SC_LOG_DEBUG_VERBOSE, sc_check_sw(card, apdu.sw1, apdu.sw2));
|
||||
LOG_FUNC_RETURN(ctx, sc_check_sw(card, apdu.sw1, apdu.sw2));
|
||||
memcpy(buf, recvbuf, apdu.resplen);
|
||||
|
||||
r = sc_check_sw(card, apdu.sw1, apdu.sw2);
|
||||
if (r == SC_ERROR_FILE_END_REACHED)
|
||||
SC_FUNC_RETURN(ctx, SC_LOG_DEBUG_VERBOSE, apdu.resplen);
|
||||
SC_TEST_RET(ctx, SC_LOG_DEBUG_NORMAL, r, "Check SW error");
|
||||
LOG_FUNC_RETURN(ctx, apdu.resplen);
|
||||
LOG_TEST_RET(ctx, r, "Check SW error");
|
||||
|
||||
if (apdu.resplen < count) {
|
||||
r = sc_hsm_read_binary(card, idx + apdu.resplen, buf + apdu.resplen, count - apdu.resplen, flags);
|
||||
/* Ignore all but 'corrupted data' errors */
|
||||
if (r == SC_ERROR_CORRUPTED_DATA)
|
||||
SC_FUNC_RETURN(ctx, SC_LOG_DEBUG_NORMAL, SC_ERROR_CORRUPTED_DATA);
|
||||
LOG_FUNC_RETURN(ctx, SC_ERROR_CORRUPTED_DATA);
|
||||
else if (r > 0)
|
||||
apdu.resplen += r;
|
||||
}
|
||||
|
||||
SC_FUNC_RETURN(ctx, SC_LOG_DEBUG_VERBOSE, apdu.resplen);
|
||||
LOG_FUNC_RETURN(ctx, apdu.resplen);
|
||||
}
|
||||
|
||||
|
||||
@ -145,11 +145,11 @@ static int sc_hsm_list_files(sc_card_t *card, u8 * buf, size_t buflen)
|
||||
apdu.resplen = sizeof(recvbuf);
|
||||
apdu.le = 0;
|
||||
r = sc_transmit_apdu(card, &apdu);
|
||||
SC_TEST_RET(card->ctx, SC_LOG_DEBUG_NORMAL, r, "ENUMERATE OBJECTS APDU transmit failed");
|
||||
LOG_TEST_RET(card->ctx, r, "ENUMERATE OBJECTS APDU transmit failed");
|
||||
|
||||
memcpy(buf, recvbuf, buflen);
|
||||
|
||||
SC_FUNC_RETURN(card->ctx, SC_LOG_DEBUG_VERBOSE, apdu.resplen);
|
||||
LOG_FUNC_RETURN(card->ctx, apdu.resplen);
|
||||
}
|
||||
|
||||
|
||||
@ -170,7 +170,7 @@ static int sc_hsm_set_security_env(sc_card_t *card,
|
||||
// } else if (env->algorithm_flags & SC_ALGORITHM_RSA_HASH_SHA256) {
|
||||
// priv->algorithm = ALGO_RSA_PKCS1_SHA256;
|
||||
// } else {
|
||||
// SC_FUNC_RETURN(card->ctx, SC_LOG_DEBUG_VERBOSE, SC_ERROR_INVALID_ARGUMENTS);
|
||||
// LOG_FUNC_RETURN(card->ctx, SC_ERROR_INVALID_ARGUMENTS);
|
||||
// }
|
||||
// } else {
|
||||
priv->algorithm = ALGO_RSA_RAW;
|
||||
@ -188,13 +188,13 @@ static int sc_hsm_set_security_env(sc_card_t *card,
|
||||
} else if (env->algorithm_flags & SC_ALGORITHM_ECDSA_RAW) {
|
||||
priv->algorithm = ALGO_EC_RAW;
|
||||
} else {
|
||||
SC_FUNC_RETURN(card->ctx, SC_LOG_DEBUG_VERBOSE, SC_ERROR_INVALID_ARGUMENTS);
|
||||
LOG_FUNC_RETURN(card->ctx, SC_ERROR_INVALID_ARGUMENTS);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
SC_FUNC_RETURN(card->ctx, SC_LOG_DEBUG_VERBOSE, SC_ERROR_INVALID_ARGUMENTS);
|
||||
LOG_FUNC_RETURN(card->ctx, SC_ERROR_INVALID_ARGUMENTS);
|
||||
}
|
||||
SC_FUNC_RETURN(card->ctx, SC_LOG_DEBUG_VERBOSE, SC_SUCCESS);
|
||||
LOG_FUNC_RETURN(card->ctx, SC_SUCCESS);
|
||||
}
|
||||
|
||||
|
||||
@ -212,7 +212,7 @@ static int sc_hsm_compute_signature(sc_card_t *card,
|
||||
assert(card != NULL && data != NULL && out != NULL);
|
||||
|
||||
if (priv->env == NULL) {
|
||||
SC_FUNC_RETURN(card->ctx, SC_LOG_DEBUG_VERBOSE, SC_ERROR_OBJECT_NOT_FOUND);
|
||||
LOG_FUNC_RETURN(card->ctx, SC_ERROR_OBJECT_NOT_FOUND);
|
||||
}
|
||||
|
||||
sc_format_apdu(card, &apdu, SC_APDU_CASE_4, 0x68, priv->env->key_ref[0], priv->algorithm);
|
||||
@ -226,14 +226,14 @@ static int sc_hsm_compute_signature(sc_card_t *card,
|
||||
apdu.lc = datalen;
|
||||
apdu.datalen = datalen;
|
||||
r = sc_transmit_apdu(card, &apdu);
|
||||
SC_TEST_RET(card->ctx, SC_LOG_DEBUG_NORMAL, r, "APDU transmit failed");
|
||||
LOG_TEST_RET(card->ctx, r, "APDU transmit failed");
|
||||
if (apdu.sw1 == 0x90 && apdu.sw2 == 0x00) {
|
||||
size_t len = apdu.resplen > outlen ? outlen : apdu.resplen;
|
||||
|
||||
memcpy(out, apdu.resp, len);
|
||||
SC_FUNC_RETURN(card->ctx, SC_LOG_DEBUG_VERBOSE, len);
|
||||
LOG_FUNC_RETURN(card->ctx, len);
|
||||
}
|
||||
SC_FUNC_RETURN(card->ctx, SC_LOG_DEBUG_VERBOSE, sc_check_sw(card, apdu.sw1, apdu.sw2));
|
||||
LOG_FUNC_RETURN(card->ctx, sc_check_sw(card, apdu.sw1, apdu.sw2));
|
||||
}
|
||||
|
||||
|
||||
@ -245,7 +245,7 @@ static int sc_hsm_decipher(sc_card_t *card, const u8 * crgram, size_t crgram_len
|
||||
sc_hsm_private_data_t *priv = (sc_hsm_private_data_t *) card->drv_data;
|
||||
|
||||
assert(card != NULL && crgram != NULL && out != NULL);
|
||||
SC_FUNC_CALLED(card->ctx, SC_LOG_DEBUG_NORMAL);
|
||||
LOG_FUNC_CALLED(card->ctx);
|
||||
|
||||
sc_format_apdu(card, &apdu, SC_APDU_CASE_4, 0x62, priv->env->key_ref[0], 0x21);
|
||||
apdu.cla = 0x80;
|
||||
@ -262,11 +262,11 @@ static int sc_hsm_decipher(sc_card_t *card, const u8 * crgram, size_t crgram_len
|
||||
|
||||
r = sc_transmit_apdu(card, &apdu);
|
||||
|
||||
SC_TEST_RET(card->ctx, SC_LOG_DEBUG_NORMAL, r, "APDU transmit failed");
|
||||
LOG_TEST_RET(card->ctx, r, "APDU transmit failed");
|
||||
if (apdu.sw1 == 0x90 && apdu.sw2 == 0x00)
|
||||
SC_FUNC_RETURN(card->ctx, SC_LOG_DEBUG_VERBOSE, apdu.resplen);
|
||||
LOG_FUNC_RETURN(card->ctx, apdu.resplen);
|
||||
else
|
||||
SC_FUNC_RETURN(card->ctx, SC_LOG_DEBUG_VERBOSE, sc_check_sw(card, apdu.sw1, apdu.sw2));
|
||||
LOG_FUNC_RETURN(card->ctx, sc_check_sw(card, apdu.sw1, apdu.sw2));
|
||||
}
|
||||
|
||||
|
||||
@ -276,11 +276,11 @@ static int sc_hsm_init(struct sc_card *card)
|
||||
sc_hsm_private_data_t *priv;
|
||||
int flags,ext_flags;
|
||||
|
||||
SC_FUNC_CALLED(card->ctx, SC_LOG_DEBUG_VERBOSE);
|
||||
LOG_FUNC_CALLED(card->ctx);
|
||||
|
||||
priv = calloc(1, sizeof(sc_hsm_private_data_t));
|
||||
if (!priv)
|
||||
SC_FUNC_RETURN(card->ctx, SC_LOG_DEBUG_NORMAL, SC_ERROR_OUT_OF_MEMORY);
|
||||
LOG_FUNC_RETURN(card->ctx, SC_ERROR_OUT_OF_MEMORY);
|
||||
|
||||
card->drv_data = priv;
|
||||
|
||||
|
@ -46,16 +46,27 @@ static int sc_pkcs15emu_sc_hsm_init (sc_pkcs15_card_t * p15card)
|
||||
u8 filelist[MAX_EXT_APDU_LENGTH];
|
||||
int filelistlength;
|
||||
int r, i;
|
||||
struct sc_app_info *appinfo;
|
||||
struct sc_pkcs15_auth_info pin_info;
|
||||
struct sc_pkcs15_object pin_obj;
|
||||
struct sc_pkcs15_cert_info cert_info;
|
||||
struct sc_pkcs15_object cert_obj;
|
||||
u8 fid[2];
|
||||
u8 prkdbin[512];
|
||||
sc_pkcs15_object_t prkd;
|
||||
u8 keyid;
|
||||
u8 *ptr;
|
||||
size_t len;
|
||||
|
||||
SC_FUNC_CALLED(card->ctx, SC_LOG_DEBUG_VERBOSE);
|
||||
LOG_FUNC_CALLED(card->ctx);
|
||||
|
||||
p15card->tokeninfo->label = strdup("SmartCard-HSM");
|
||||
p15card->tokeninfo->manufacturer_id = strdup("CardContact");
|
||||
|
||||
struct sc_app_info *appinfo = calloc(1, sizeof(struct sc_app_info));
|
||||
appinfo = calloc(1, sizeof(struct sc_app_info));
|
||||
|
||||
if (appinfo == NULL) {
|
||||
SC_FUNC_RETURN(card->ctx, SC_LOG_DEBUG_NORMAL, SC_ERROR_OUT_OF_MEMORY);
|
||||
LOG_FUNC_RETURN(card->ctx, SC_ERROR_OUT_OF_MEMORY);
|
||||
}
|
||||
|
||||
appinfo->label = strdup(p15card->tokeninfo->label);
|
||||
@ -70,11 +81,7 @@ static int sc_pkcs15emu_sc_hsm_init (sc_pkcs15_card_t * p15card)
|
||||
// ToDo: Extract version number
|
||||
sc_file_free(file);
|
||||
|
||||
SC_TEST_RET(card->ctx, SC_LOG_DEBUG_NORMAL, r, "Could not select SmartCard-HSM application");
|
||||
|
||||
// Define UserPIN
|
||||
struct sc_pkcs15_auth_info pin_info;
|
||||
struct sc_pkcs15_object pin_obj;
|
||||
LOG_TEST_RET(card->ctx, r, "Could not select SmartCard-HSM application");
|
||||
|
||||
memset(&pin_info, 0, sizeof(pin_info));
|
||||
memset(&pin_obj, 0, sizeof(pin_obj));
|
||||
@ -97,10 +104,10 @@ static int sc_pkcs15emu_sc_hsm_init (sc_pkcs15_card_t * p15card)
|
||||
|
||||
r = sc_pkcs15emu_add_pin_obj(p15card, &pin_obj, &pin_info);
|
||||
if (r < 0)
|
||||
SC_FUNC_RETURN(card->ctx, SC_LOG_DEBUG_NORMAL, r);
|
||||
LOG_FUNC_RETURN(card->ctx, r);
|
||||
|
||||
filelistlength = sc_list_files(card, filelist, sizeof(filelist));
|
||||
SC_TEST_RET(card->ctx, SC_LOG_DEBUG_NORMAL, r, "Could not enumerate file and key identifier");
|
||||
LOG_TEST_RET(card->ctx, r, "Could not enumerate file and key identifier");
|
||||
|
||||
for (i = 0; i < filelistlength; i += 2) {
|
||||
/* Look for private key files */
|
||||
@ -108,10 +115,7 @@ static int sc_pkcs15emu_sc_hsm_init (sc_pkcs15_card_t * p15card)
|
||||
continue;
|
||||
}
|
||||
|
||||
u8 fid[2];
|
||||
u8 prkdbin[512];
|
||||
sc_pkcs15_object_t prkd;
|
||||
u8 keyid = filelist[i + 1];
|
||||
keyid = filelist[i + 1];
|
||||
|
||||
fid[0] = PRKD_PREFIX;
|
||||
fid[1] = keyid;
|
||||
@ -126,13 +130,13 @@ static int sc_pkcs15emu_sc_hsm_init (sc_pkcs15_card_t * p15card)
|
||||
|
||||
sc_file_free(file);
|
||||
r = sc_read_binary(p15card->card, 0, prkdbin, sizeof(prkdbin), 0);
|
||||
SC_TEST_RET(card->ctx, SC_LOG_DEBUG_NORMAL, r, "Could not read EF.PRKD");
|
||||
LOG_TEST_RET(card->ctx, r, "Could not read EF.PRKD");
|
||||
|
||||
memset(&prkd, 0, sizeof(prkd));
|
||||
const u8 *ptr = prkdbin;
|
||||
size_t len = r;
|
||||
ptr = prkdbin;
|
||||
len = r;
|
||||
|
||||
sc_pkcs15_decode_prkdf_entry(p15card, &prkd, &ptr, &len);
|
||||
sc_pkcs15_decode_prkdf_entry(p15card, &prkd, (const u8 **)&ptr, &len);
|
||||
|
||||
/* All keys require user PIN authentication */
|
||||
prkd.auth_id.len = 1;
|
||||
@ -156,7 +160,7 @@ static int sc_pkcs15emu_sc_hsm_init (sc_pkcs15_card_t * p15card)
|
||||
} else {
|
||||
r = sc_pkcs15emu_add_ec_prkey(p15card, &prkd, key_info);
|
||||
}
|
||||
SC_TEST_RET(card->ctx, SC_LOG_DEBUG_NORMAL, r, "Could not decode EF.PRKD");
|
||||
LOG_TEST_RET(card->ctx, r, "Could not decode EF.PRKD");
|
||||
|
||||
/* Check if we also have a certificate for the private key */
|
||||
fid[0] = EE_CERTIFICATE_PREFIX;
|
||||
@ -170,9 +174,6 @@ static int sc_pkcs15emu_sc_hsm_init (sc_pkcs15_card_t * p15card)
|
||||
|
||||
sc_file_free(file);
|
||||
|
||||
struct sc_pkcs15_cert_info cert_info;
|
||||
struct sc_pkcs15_object cert_obj;
|
||||
|
||||
memset(&cert_info, 0, sizeof(cert_info));
|
||||
memset(&cert_obj, 0, sizeof(cert_obj));
|
||||
|
||||
@ -183,10 +184,10 @@ static int sc_pkcs15emu_sc_hsm_init (sc_pkcs15_card_t * p15card)
|
||||
|
||||
strlcpy(cert_obj.label, prkd.label, sizeof(cert_obj.label));
|
||||
r = sc_pkcs15emu_add_x509_cert(p15card, &cert_obj, &cert_info);
|
||||
SC_TEST_RET(card->ctx, SC_LOG_DEBUG_NORMAL, r, "Could not add certificate");
|
||||
LOG_TEST_RET(card->ctx, r, "Could not add certificate");
|
||||
}
|
||||
|
||||
SC_FUNC_RETURN(card->ctx, SC_LOG_DEBUG_NORMAL, SC_SUCCESS);
|
||||
LOG_FUNC_RETURN(card->ctx, SC_SUCCESS);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user