All of lore.kernel.org
 help / color / mirror / Atom feed
From: "José Pekkarinen" <jose.pekkarinen@unikie.com>
To: buildroot@buildroot.org
Cc: "José Pekkarinen" <jose.pekkarinen@unikie.com>
Subject: [Buildroot] [PATCH v3] package/opensc: new package
Date: Thu, 25 Nov 2021 09:22:41 +0200	[thread overview]
Message-ID: <20211125072240.2932-1-jose.pekkarinen@unikie.com> (raw)

The patch will add a basic opensc package to build
on buildroot.

Signed-off-by: José Pekkarinen <jose.pekkarinen@unikie.com>
---
[v1 -> v2] Addressed multiple comments from former rev
[v2 -> v3] Fixed warning of missing signed off patch

 DEVELOPERS                                    |   1 +
 package/Config.in                             |   1 +
 ...ckage-opensc-fix-maybe-uninitialized.patch |  69 +++++++++
 ...x-strict-aliasing-warnings-as-errors.patch | 132 ++++++++++++++++++
 package/opensc/Config.in                      |  11 ++
 package/opensc/opensc.hash                    |   5 +
 package/opensc/opensc.mk                      |  14 ++
 7 files changed, 233 insertions(+)
 create mode 100644 package/opensc/0001-package-opensc-fix-maybe-uninitialized.patch
 create mode 100644 package/opensc/0002-package-opensc-fix-strict-aliasing-warnings-as-errors.patch
 create mode 100644 package/opensc/Config.in
 create mode 100644 package/opensc/opensc.hash
 create mode 100644 package/opensc/opensc.mk

diff --git a/DEVELOPERS b/DEVELOPERS
index 70262eac8c..d92c38f07d 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -1455,6 +1455,7 @@ F:	support/testing/tests/package/test_zfs.py
 
 N:	José Pekkarinen <jose.pekkarinen@unikie.com>
 F:	package/softhsm2/
+F:	package/opensc/
 
 N:	Joseph Kogut <joseph.kogut@gmail.com>
 F:	package/at-spi2-atk/
diff --git a/package/Config.in b/package/Config.in
index e355ab1987..3cfcf372f3 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -1617,6 +1617,7 @@ menu "Hardware handling"
 	source "package/tslib/Config.in"
 	source "package/uhd/Config.in"
 	source "package/urg/Config.in"
+	source "package/opensc/Config.in"
 endmenu
 
 menu "Javascript"
diff --git a/package/opensc/0001-package-opensc-fix-maybe-uninitialized.patch b/package/opensc/0001-package-opensc-fix-maybe-uninitialized.patch
new file mode 100644
index 0000000000..1f6a2e6f42
--- /dev/null
+++ b/package/opensc/0001-package-opensc-fix-maybe-uninitialized.patch
@@ -0,0 +1,69 @@
+package:opensc: Fix maybe uninitialized issues
+
+This patch will fix some warning treated as errors
+that highlight maybe uninitialized variables.
+
+Signed-off-by: José Pekkarinen <jose.pekkarinen@unikie.com>
+Index: opensc-0.22.0/src/pkcs15init/pkcs15-asepcos.c
+===================================================================
+--- opensc-0.22.0.orig/src/pkcs15init/pkcs15-asepcos.c
++++ opensc-0.22.0/src/pkcs15init/pkcs15-asepcos.c
+@@ -221,7 +221,7 @@ static int asepcos_do_store_pin(sc_profi
+ {
+ 	sc_file_t *nfile = NULL;
+ 	u8  buf[64], sbuf[64], *p = buf, *q = sbuf;
+-	int r, akn;
++	int r, akn = 0;
+ 
+ 	if (auth_info->auth_type != SC_PKCS15_PIN_AUTH_TYPE_PIN)
+ 		return SC_ERROR_OBJECT_NOT_VALID;
+Index: opensc-0.22.0/src/libopensc/pkcs15-coolkey.c
+===================================================================
+--- opensc-0.22.0.orig/src/libopensc/pkcs15-coolkey.c
++++ opensc-0.22.0/src/libopensc/pkcs15-coolkey.c
+@@ -147,9 +147,9 @@ coolkey_find_matching_cert(sc_card_t *ca
+ static int
+ coolkey_get_attribute_ulong(sc_card_t *card, sc_cardctl_coolkey_object_t *obj, CK_ATTRIBUTE_TYPE type, CK_ULONG *value)
+ {
+-	const u8 *val;
+-	size_t val_len;
+-	u8 data_type;
++	const u8 *val = malloc(sizeof(u8));
++	size_t val_len = 0;
++	u8 data_type = 0;
+ 	int r;
+ 
+ 	r  = coolkey_get_attribute(card, obj, type, &val, &val_len, &data_type);
+@@ -168,8 +168,8 @@ static int
+ coolkey_get_attribute_boolean(sc_card_t *card, sc_cardctl_coolkey_object_t *obj, CK_ATTRIBUTE_TYPE attr_type)
+ {
+ 	int r;
+-	const u8 *val;
+-	size_t val_len;
++	const u8 *val = malloc(sizeof(u8));
++	size_t val_len = 0;
+ 
+ 	r = coolkey_get_attribute(card, obj, attr_type, &val, &val_len, NULL);
+ 	if (r < 0) {
+@@ -186,7 +186,7 @@ static int
+ coolkey_get_attribute_bytes(sc_card_t *card, sc_cardctl_coolkey_object_t *obj, CK_ATTRIBUTE_TYPE type, u8 *data, size_t *data_len, size_t max_data_len)
+ {
+ 	const u8 *val;
+-	size_t val_len;
++	size_t val_len = 0;
+ 	int r;
+ 
+ 	r = coolkey_get_attribute(card, obj, type, &val, &val_len, NULL);
+Index: opensc-0.22.0/src/tools/opensc-explorer.c
+===================================================================
+--- opensc-0.22.0.orig/src/tools/opensc-explorer.c
++++ opensc-0.22.0/src/tools/opensc-explorer.c
+@@ -2472,7 +2472,7 @@ int main(int argc, char *argv[])
+ 		char *line;
+ 		int cargc;
+ 		char *cargv[260];
+-		int multiple;
++		int multiple = 0;
+ 		struct command *cmd;
+ 		char prompt[3*SC_MAX_PATH_STRING_SIZE];
+ 
diff --git a/package/opensc/0002-package-opensc-fix-strict-aliasing-warnings-as-errors.patch b/package/opensc/0002-package-opensc-fix-strict-aliasing-warnings-as-errors.patch
new file mode 100644
index 0000000000..e66fc21657
--- /dev/null
+++ b/package/opensc/0002-package-opensc-fix-strict-aliasing-warnings-as-errors.patch
@@ -0,0 +1,132 @@
+Index: opensc-0.22.0/src/libopensc/card-gids.c
+===================================================================
+--- opensc-0.22.0.orig/src/libopensc/card-gids.c
++++ opensc-0.22.0/src/libopensc/card-gids.c
+@@ -691,7 +691,8 @@ static int gids_finish(sc_card_t *card)
+ // the cmap file is used to detect the key algorithm / size
+ static int gids_get_crypto_identifier_from_key_ref(sc_card_t *card, const unsigned char keyref, unsigned char *cryptoidentifier) {
+ 	struct gids_private_data *data = (struct gids_private_data *) card->drv_data;
+-	PCONTAINER_MAP_RECORD records = (PCONTAINER_MAP_RECORD) data->cmapfile;
++	PCONTAINER_MAP_RECORD records = malloc(sizeof(CONTAINER_MAP_RECORD));
++	memcpy(records, data->cmapfile, sizeof(CONTAINER_MAP_RECORD));
+ 	int recordsnum = (int) (data->cmapfilesize / sizeof(CONTAINER_MAP_RECORD));
+ 	int index = keyref - GIDS_FIRST_KEY_IDENTIFIER;
+ 	if (index >= recordsnum) {
+@@ -1112,10 +1113,10 @@ gids_get_all_containers(sc_card_t* card,
+ // return the detail about a container to emulate a pkcs15 card
+ static int
+ gids_get_container_detail(sc_card_t* card, sc_cardctl_gids_get_container_t* container) {
+-	PCONTAINER_MAP_RECORD records = NULL;
++	PCONTAINER_MAP_RECORD records = malloc(sizeof(CONTAINER_MAP_RECORD));
+ 	struct gids_private_data *privatedata = (struct gids_private_data *) card->drv_data;
+ 	size_t recordsnum, num, i;
+-	records = (PCONTAINER_MAP_RECORD) privatedata ->cmapfile;
++	memcpy(records, privatedata->cmapfile, sizeof(CONTAINER_MAP_RECORD));
+ 	recordsnum = (privatedata ->cmapfilesize / sizeof(CONTAINER_MAP_RECORD));
+ 
+ 	num = container->containernum ;
+@@ -1158,7 +1159,8 @@ gids_get_container_detail(sc_card_t* car
+ static int
+ gids_select_key_reference(sc_card_t *card, sc_pkcs15_prkey_info_t* key_info) {
+ 	struct gids_private_data *data = (struct gids_private_data *) card->drv_data;
+-	PCONTAINER_MAP_RECORD records = (PCONTAINER_MAP_RECORD) data->cmapfile;
++	PCONTAINER_MAP_RECORD records = malloc(sizeof(CONTAINER_MAP_RECORD));
++	memcpy(records, data->cmapfile, sizeof(CONTAINER_MAP_RECORD));
+ 	size_t recordsnum;
+ 	int r;
+ 	char ch_tmp[10];
+@@ -1302,7 +1304,8 @@ static int gids_create_keyfile(sc_card_t
+ 	struct gids_private_data *data = (struct gids_private_data *) card->drv_data;
+ 	size_t recordnum;
+ 	size_t containernum = key_info->key_reference - GIDS_FIRST_KEY_IDENTIFIER;
+-	PCONTAINER_MAP_RECORD records = ((PCONTAINER_MAP_RECORD) cmapbuffer) + containernum;
++	PCONTAINER_MAP_RECORD records = malloc(sizeof(CONTAINER_MAP_RECORD));
++	memcpy(records, cmapbuffer + containernum, sizeof(CONTAINER_MAP_RECORD));
+ 	struct gids_keymap_record* keymaprecord = NULL;
+ 	int i;
+ 
+@@ -1390,12 +1393,12 @@ static int gids_create_keyfile(sc_card_t
+ 
+ 	// convert char to wchar
+ 	for(i = 0; i < MAX_CONTAINER_NAME_LEN && object->label[i]; i++) {
+-		records->wszGuid[i] = object->label[i];
++		records->wszGuid[i] = (unsigned short) object->label[i];
+ 	}
+ 
+ 	// TODO: check if a container with the same name already exists and prevent is creation or change its name
+ 
+-	records->bFlags = CONTAINER_MAP_VALID_CONTAINER;
++	records->bFlags = (unsigned char) CONTAINER_MAP_VALID_CONTAINER;
+ 	if (recordnum == 0) {
+ 		records->bFlags |= CONTAINER_MAP_DEFAULT_CONTAINER;
+ 	}
+@@ -1638,7 +1641,8 @@ static int gids_delete_container_num(sc_
+ 	size_t keymaprecordnum = 0;
+ 	struct gids_private_data *data = (struct gids_private_data *) card->drv_data;
+ 	size_t recordnum;
+-	PCONTAINER_MAP_RECORD records = ((PCONTAINER_MAP_RECORD) cmapbuffer) + containernum;
++	PCONTAINER_MAP_RECORD records = malloc(sizeof(CONTAINER_MAP_RECORD));
++	memcpy(records, cmapbuffer + containernum, sizeof(CONTAINER_MAP_RECORD));
+ 	struct gids_keymap_record* keymaprecord = NULL;
+ 
+ 	SC_FUNC_CALLED(card->ctx, SC_LOG_DEBUG_VERBOSE);
+Index: opensc-0.22.0/src/libopensc/card-gpk.c
+===================================================================
+--- opensc-0.22.0.orig/src/libopensc/card-gpk.c
++++ opensc-0.22.0/src/libopensc/card-gpk.c
+@@ -228,11 +228,12 @@ static int
+ match_path(sc_card_t *card, unsigned short int **pathptr, size_t *pathlen,
+ 		int need_info)
+ {
+-	unsigned short int	*curptr, *ptr;
++	u8			*curptr;
++	unsigned short int	*ptr;
+ 	size_t		curlen, len;
+ 	size_t		i;
+ 
+-	curptr = (unsigned short int *) card->cache.current_path.value;
++	curptr = (u8 *) card->cache.current_path.value;
+ 	curlen = card->cache.current_path.len;
+ 	ptr    = *pathptr;
+ 	len    = *pathlen;
+@@ -242,7 +243,7 @@ match_path(sc_card_t *card, unsigned sho
+ 
+ 	/* Make sure path starts with MF.
+ 	 * Note the cached path should always begin with MF. */
+-	if (ptr[0] != GPK_FID_MF || curptr[0] != GPK_FID_MF)
++	if (ptr[0] != (GPK_FID_MF >> 8) || curptr[0] != (GPK_FID_MF >> 8))
+ 		return 0;
+ 
+ 	for (i = 1; i < len && i < curlen; i++) {
+@@ -545,7 +546,7 @@ gpk_select_id(sc_card_t *card, int kind,
+ 	/* Fix up the path cache.
+ 	 * NB we never cache the ID of an EF, just the DF path */
+ 	if (r == 0) {
+-		unsigned short int	*path;
++		u8	*path;
+ 
+ 		switch (kind) {
+ 		case GPK_SEL_MF:
+@@ -555,7 +556,7 @@ gpk_select_id(sc_card_t *card, int kind,
+ 			if (cp->len + 1 > SC_MAX_PATH_SIZE / 2) {
+ 				return SC_ERROR_INTERNAL;
+ 			}
+-			path = (unsigned short int *) cp->value;
++			path = (u8 *) cp->value;
+ 			path[cp->len++] = fid;
+ 		}
+ 	} else {
+Index: opensc-0.22.0/src/tools/gids-tool.c
+===================================================================
+--- opensc-0.22.0.orig/src/tools/gids-tool.c
++++ opensc-0.22.0/src/tools/gids-tool.c
+@@ -401,7 +401,8 @@ static int print_info(sc_card_t *card) {
+ 		if (cmapfilesize == sizeof(cmapfile)) {
+ 			printf("Unable to find the container file (mscp\\cmapfile)\n");
+ 		} else {
+-			PCONTAINER_MAP_RECORD cmaprecords = (PCONTAINER_MAP_RECORD) cmapfile;
++			PCONTAINER_MAP_RECORD cmaprecords = malloc(sizeof(CONTAINER_MAP_RECORD));
++			memcpy(cmaprecords, cmapfile, sizeof(CONTAINER_MAP_RECORD));
+ 			int cmaprecordnum = (cmapfilesize / sizeof(CONTAINER_MAP_RECORD));
+ 			int keymaprecordnum = -1;
+ 			struct gids_keymap_record* keymaprecord = ((struct gids_keymap_record*)(keymap +1));
diff --git a/package/opensc/Config.in b/package/opensc/Config.in
new file mode 100644
index 0000000000..d6b137a87f
--- /dev/null
+++ b/package/opensc/Config.in
@@ -0,0 +1,11 @@
+config BR2_PACKAGE_OPENSC
+	bool "opensc"
+	depends on !BR2_STATIC_LIBS # dlopen()
+	select BR2_PACKAGE_PCSC_LITE
+	select BR2_PACKAGE_OPENSSL
+	select BR2_PACKAGE_OPENSSL_FORCE_LIBOPENSSL
+	help
+	  OpenSC provides a set of libraries and utilities to work
+	  with smart cards.
+
+	  https://github.com/OpenSC/OpenSC/wiki
diff --git a/package/opensc/opensc.hash b/package/opensc/opensc.hash
new file mode 100644
index 0000000000..1e3472ba2a
--- /dev/null
+++ b/package/opensc/opensc.hash
@@ -0,0 +1,5 @@
+# From https://https://github.com/OpenSC/OpenSC/releases/
+sha256  8d4e5347195ebea332be585df61dcc470331c26969e4b0447c851fb0844c7186  opensc-0.22.0.tar.gz
+
+# Computed locally
+sha256  376b54d4c5f4aa99421823fa4da93e3ab73096fce2400e89858632aa7da24a14  COPYING
diff --git a/package/opensc/opensc.mk b/package/opensc/opensc.mk
new file mode 100644
index 0000000000..7221eee944
--- /dev/null
+++ b/package/opensc/opensc.mk
@@ -0,0 +1,14 @@
+################################################################################
+#
+# opensc
+#
+################################################################################
+
+OPENSC_VERSION = 0.22.0
+OPENSC_SITE = https://github.com/OpenSC/OpenSC/releases/download/$(OPENSC_VERSION)
+OPENSC_LICENSE = LGPL-2.1+
+OPENSC_LICENSE_FILES = COPYING
+OPENSC_DEPENDENCIES = openssl pcsc-lite
+OPENSC_INSTALL_STAGING = YES
+
+$(eval $(autotools-package))
-- 
2.30.2

_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

             reply	other threads:[~2021-11-25  7:24 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-25  7:22 José Pekkarinen [this message]
2021-11-30 13:16 ` [Buildroot] [PATCH v3] package/opensc: new package José Pekkarinen
2021-11-25  7:27 José Pekkarinen
2021-11-25  7:29 ` José Pekkarinen
2022-01-13 11:49 José Pekkarinen
2022-01-13 19:54 ` Thomas Petazzoni
2022-01-13 20:22   ` Thomas Petazzoni

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20211125072240.2932-1-jose.pekkarinen@unikie.com \
    --to=jose.pekkarinen@unikie.com \
    --cc=buildroot@buildroot.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.