summaryrefslogtreecommitdiff
path: root/dev-libs/opensc/files/opensc-0.17.0-build.patch
blob: 8a51d7ac445054a0d28a8fe67c29c62ecded79a2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
From 65b302e33b710833d4d14bf8eaf00acdaa436c39 Mon Sep 17 00:00:00 2001
From: Frank Morgner <frankmorgner@gmail.com>
Date: Wed, 19 Jul 2017 00:09:36 +0200
Subject: [PATCH] sc-hsm: fixed building with --disable-sm

Closes https://github.com/OpenSC/OpenSC/pull/1103
---
 src/libopensc/card-sc-hsm.c | 21 ++++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/src/libopensc/card-sc-hsm.c b/src/libopensc/card-sc-hsm.c
index cfa084a06..1f61e0138 100644
--- a/src/libopensc/card-sc-hsm.c
+++ b/src/libopensc/card-sc-hsm.c
@@ -284,7 +284,9 @@ static int sc_hsm_soc_select_minbioclient(sc_card_t *card)
 	};
 
 	/* Select MinBioClient */
+#ifdef ENABLE_SM
 	sc_sm_stop(card);
+#endif
 	sc_format_apdu(card, &apdu, SC_APDU_CASE_3_SHORT, 0xA4, 0x04, 0x0C);
 	apdu.data = minBioClient_aid.value;
 	apdu.datalen = minBioClient_aid.len;
@@ -533,7 +535,9 @@ static int sc_hsm_pin_cmd(sc_card_t *card, struct sc_pin_cmd_data *data,
 	sc_hsm_private_data_t *priv = (sc_hsm_private_data_t *) card->drv_data;
 	sc_apdu_t apdu;
 	u8 cmdbuff[16];
+#ifdef ENABLE_SM
 	u8 rbuf[SC_MAX_APDU_BUFFER_SIZE];
+#endif
 	int r;
 	int cmd = data->cmd;
 	size_t pin2_len = data->pin2.len;
@@ -563,7 +567,10 @@ static int sc_hsm_pin_cmd(sc_card_t *card, struct sc_pin_cmd_data *data,
 	if ((card->type == SC_CARD_TYPE_SC_HSM_SOC || card->reader->uid.len
 				|| cmd == SC_PIN_CMD_GET_SESSION_PIN)
 			&& (data->cmd != SC_PIN_CMD_GET_INFO)
-			&& card->sm_ctx.sm_mode != SM_MODE_TRANSMIT) {
+#ifdef ENABLE_SM
+			&& card->sm_ctx.sm_mode != SM_MODE_TRANSMIT
+#endif
+			) {
 		LOG_TEST_RET(card->ctx,
 				sc_hsm_perform_chip_authentication(card),
 				"Could not perform chip authentication");
@@ -604,6 +611,7 @@ static int sc_hsm_pin_cmd(sc_card_t *card, struct sc_pin_cmd_data *data,
 			data->apdu = &apdu;
 		}
 
+#ifdef ENABLE_SM
 		if ((data->cmd == SC_PIN_CMD_GET_INFO)
 				&& (card->sm_ctx.sm_mode == SM_MODE_TRANSMIT)) {
 			/* JCOP's SM accelerator is incapable of using case 1 APDU in SM */
@@ -612,6 +620,7 @@ static int sc_hsm_pin_cmd(sc_card_t *card, struct sc_pin_cmd_data *data,
 			apdu.resplen = sizeof rbuf;
 			data->apdu = &apdu;
 		}
+#endif
 
 		data->pin1.offset = 5;
 		data->pin1.length_offset = 4;
@@ -627,11 +636,17 @@ static int sc_hsm_pin_cmd(sc_card_t *card, struct sc_pin_cmd_data *data,
 		data->cmd = SC_PIN_CMD_GET_SESSION_PIN;
 		if (data->pin_reference == 0x81) {
 			u8 recvbuf[SC_MAX_APDU_BUFFER_SIZE];
+#ifdef ENABLE_SM
 			if (card->sm_ctx.sm_mode != SM_MODE_TRANSMIT) {
 				sc_debug(card->ctx, SC_LOG_DEBUG_NORMAL,
 						"Session PIN generation only supported in SM");
 				LOG_FUNC_RETURN(card->ctx, SC_SUCCESS);
 			}
+#else
+			sc_debug(card->ctx, SC_LOG_DEBUG_NORMAL,
+					"Session PIN generation only supported in SM");
+			LOG_FUNC_RETURN(card->ctx, SC_SUCCESS);
+#endif
 			sc_format_apdu(card, &apdu, SC_APDU_CASE_2_SHORT, 0x5A, 0x01, data->pin_reference);
 			apdu.cla = 0x80;
 			apdu.resp = recvbuf;
@@ -669,7 +684,9 @@ static int sc_hsm_logout(sc_card_t * card)
 	sc_path_t path;
 	sc_hsm_private_data_t *priv = (sc_hsm_private_data_t *) card->drv_data;
 	memset(priv->sopin, 0, sizeof(priv->sopin));
+#ifdef ENABLE_SM
 	sc_sm_stop(card);
+#endif
 
 	sc_path_set(&path, SC_PATH_TYPE_DF_NAME, sc_hsm_aid.value, sc_hsm_aid.len, 0, 0);
 
@@ -1586,7 +1603,9 @@ static int sc_hsm_init(struct sc_card *card)
 static int sc_hsm_finish(sc_card_t * card)
 {
 	sc_hsm_private_data_t *priv = (sc_hsm_private_data_t *) card->drv_data;
+#ifdef ENABLE_SM
 	sc_sm_stop(card);
+#endif
 	if (priv->serialno) {
 		free(priv->serialno);
 	}