ASR_BASE
Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/external/subpack/utils/opensc/Makefile b/external/subpack/utils/opensc/Makefile
new file mode 100644
index 0000000..1d84b1f
--- /dev/null
+++ b/external/subpack/utils/opensc/Makefile
@@ -0,0 +1,228 @@
+#
+# Copyright (C) 2011-2014 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=opensc
+PKG_VERSION:=0.22.0
+PKG_RELEASE:=$(AUTORELEASE)
+PKG_HASH:=8d4e5347195ebea332be585df61dcc470331c26969e4b0447c851fb0844c7186
+
+PKG_LICENSE:=LGPL-2.1-or-later
+PKG_LICENSE_FILES:=COPYING
+PKG_MAINTAINER:=Daniel Golle <daniel@makrotopia.org>
+PKG_SOURCE_URL:=https://github.com/OpenSC/OpenSC/releases/download/$(PKG_VERSION)/
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+
+PKG_BUILD_DEPENDS:=pcsc-lite
+PKG_FIXUP:=libtool
+
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/libopensc
+ SECTION:=libs
+ CATEGORY:=Libraries
+ TITLE:=OpenSC libraries for smart cards
+ URL:=https://github.com/OpenSC/OpenSC/wiki
+ DEPENDS:=+libopenssl +libpthread +zlib
+ MENU:=1
+endef
+
+define Package/libopensc/description
+ OpenSC provides a set of libraries and utilities to work with smart cards.
+ Its main focus is on cards that support cryptographic operations, and
+ facilitate their use in security applications such as authentication,
+ mail encryption and digital signatures.
+endef
+
+define Package/libopensc-pkcs11
+ SECTION:=libs
+ CATEGORY:=Libraries
+ TITLE:=OpenSC - PKCS11 provider
+ URL:=https://github.com/OpenSC/OpenSC/wiki
+ DEPENDS:=libopensc
+endef
+
+define Package/libopensc-pkcs11/description
+ OpenSC PKCS#11 provider
+endef
+
+define Package/libpkcs11-spy
+ SECTION:=libs
+ CATEGORY:=Libraries
+ TITLE:=PKCS11 spying wrapper
+ URL:=https://github.com/OpenSC/OpenSC/wiki
+ DEPENDS:=+libopenssl +libpthread
+endef
+
+define Package/libpkcs11-spy/dscription
+ PKCS#11 spying wrapper
+endef
+
+define Package/opensc-utils
+ SECTION:=utils
+ CATEGORY:=Utilities
+ TITLE:=OpenSC - tools for smart cards
+ URL:=https://github.com/OpenSC/OpenSC/wiki
+ DEPENDS:=+libopensc
+ MENU:=1
+endef
+
+define Package/opensc-utils/description
+ OpenSC utilities
+endef
+
+define ToolGen
+define Package/opensc-utils-$(subst _,-,$(firstword $(subst :, ,$(1))))
+ TITLE:=$(firstword $(subst :, ,$(1))) utility from opensc
+ URL:=https://github.com/OpenSC/OpenSC/wiki
+ SECTION:=utils
+ CATEGORY:=Utilities
+ DEPENDS:=opensc-utils $(wordlist 2,$(words $(subst :, ,$(1))),$(subst :, ,$(1)))
+endef
+endef
+
+define ProfileGen
+define Package/libopensc-profile-$(subst _,-,$(firstword $(subst :, ,$(1))))
+ TITLE:=$(firstword $(subst :, ,$(1))) card profile for opensc
+ URL:=https://github.com/OpenSC/OpenSC/wiki
+ SECTION:=libs
+ CATEGORY:=Libraries
+ DEPENDS:=libopensc
+endef
+endef
+
+CONFIGURE_ARGS += \
+ --disable-notify \
+ --disable-strict
+
+TOOLS:= \
+ cardos-tool \
+ cryptoflex-tool \
+ dnie-tool \
+ eidenv \
+ iasecc-tool \
+ netkey-tool \
+ openpgp-tool \
+ opensc-tool \
+ opensc-explorer:+libncurses:+libreadline \
+ piv-tool \
+ pkcs11-tool \
+ pkcs15-crypt \
+ pkcs15-init \
+ pkcs15-tool \
+ sc-hsm-tool \
+ westcos-tool
+
+PROFILES:= \
+ asepcos \
+ authentic \
+ cardos \
+ cyberflex \
+ entersafe \
+ epass2003 \
+ flex \
+ gpk \
+ ias_adele_admin1 \
+ ias_adele_admin2 \
+ ias_adele_common \
+ iasecc_admin_eid \
+ iasecc_generic_oberthur \
+ iasecc_generic_pki \
+ iasecc \
+ incrypto34 \
+ jcop \
+ miocos \
+ muscle \
+ myeid \
+ oberthur \
+ openpgp \
+ pkcs15 \
+ rutoken_ecp \
+ rutoken \
+ sc-hsm \
+ setcos \
+ starcos \
+ westcos
+
+$(foreach file,$(TOOLS),$(eval $(call ToolGen,$(file))))
+$(foreach file,$(PROFILES),$(eval $(call ProfileGen,$(file))))
+
+define Build/InstallDev
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libopensc.{la,so}* $(1)/usr/lib/
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libsmm-local.{la,so}* $(1)/usr/lib/
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/opensc-pkcs11.so $(1)/usr/lib/
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkcs11-spy.so $(1)/usr/lib/
+ $(INSTALL_DIR) $(1)/usr/lib/pkcs11
+ $(LN) ../pkcs11-spy.so $(1)/usr/lib/pkcs11/
+ $(LN) ../opensc-pkcs11.so $(1)/usr/lib/pkcs11/
+ $(INSTALL_DIR) $(1)/usr/share/opensc
+ $(CP) $(PKG_INSTALL_DIR)/usr/share/opensc/* $(1)/usr/share/opensc/
+endef
+
+define Package/libopensc/install
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libopensc.so* $(1)/usr/lib/
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libsmm-local.so* $(1)/usr/lib/
+ $(INSTALL_DIR) $(1)/etc
+ $(CP) $(PKG_INSTALL_DIR)/etc/opensc.conf $(1)/etc/
+endef
+
+define Package/libopensc-pkcs11/install
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/opensc-pkcs11.so $(1)/usr/lib/
+ $(INSTALL_DIR) $(1)/usr/lib/pkcs11
+ $(LN) ../opensc-pkcs11.so $(1)/usr/lib/pkcs11/
+endef
+
+define Package/libpkcs11-spy/install
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkcs11-spy.so $(1)/usr/lib/
+ $(INSTALL_DIR) $(1)/usr/lib/pkcs11
+ $(LN) ../pkcs11-spy.so $(1)/usr/lib/pkcs11/
+endef
+
+define Package/opensc-card-profiles
+ $(INSTALL_DIR) $(1)/usr/share/opensc
+ $(CP) $(PKG_INSTALL_DIR)/usr/share/opensc/* $(1)/usr/share/opensc/
+endef
+
+define Package/opensc-utils/install
+ true
+endef
+
+define ToolInstall
+define Package/opensc-utils-$(subst _,-,$(firstword $(subst :, ,$(1))))/install
+ $(INSTALL_DIR) $$(1)/usr/bin
+ $(INSTALL_BIN) \
+ $(PKG_INSTALL_DIR)/usr/bin/$(firstword $(subst :, ,$(1))) \
+ $$(1)/usr/bin/
+endef
+endef
+
+define ProfileInstall
+define Package/libopensc-profile-$(subst _,-,$(firstword $(subst :, ,$(1))))/install
+ $(INSTALL_DIR) $$(1)/usr/share/opensc
+ $(INSTALL_BIN) \
+ $(PKG_INSTALL_DIR)/usr/share/opensc/$(firstword $(subst :, ,$(1))).profile \
+ $$(1)/usr/share/opensc
+endef
+endef
+
+$(foreach file,$(TOOLS),$(eval $(call ToolInstall,$(file))))
+$(foreach file,$(PROFILES),$(eval $(call ProfileInstall,$(file))))
+
+$(eval $(call BuildPackage,libopensc))
+$(eval $(call BuildPackage,libopensc-pkcs11))
+$(eval $(call BuildPackage,libpkcs11-spy))
+
+$(eval $(call BuildPackage,opensc-utils))
+$(foreach file,$(TOOLS),$(eval $(call BuildPackage,opensc-utils-$(subst _,-,$(firstword $(subst :, ,$(file)))))))
+$(foreach file,$(PROFILES),$(eval $(call BuildPackage,libopensc-profile-$(subst _,-,$(firstword $(subst :, ,$(file)))))))
diff --git a/external/subpack/utils/opensc/patches/010-openssl-deprecated.patch b/external/subpack/utils/opensc/patches/010-openssl-deprecated.patch
new file mode 100644
index 0000000..4bdd9db
--- /dev/null
+++ b/external/subpack/utils/opensc/patches/010-openssl-deprecated.patch
@@ -0,0 +1,24 @@
+--- a/src/libopensc/sc-ossl-compat.h
++++ b/src/libopensc/sc-ossl-compat.h
+@@ -101,6 +101,21 @@ extern "C" {
+ #endif
+
+ /*
++ * 1.1.0 depracated ERR_load_crypto_strings(), SSL_load_error_strings(), ERR_free_strings()
++ * and ENGINE_load_dynamic.EVP_CIPHER_CTX_cleanup and EVP_CIPHER_CTX_init are replaced
++ * by EVP_CIPHER_CTX_reset.
++ * But for compatability with LibreSSL and older OpenSSL. OpenSC uses the older functions
++ */
++#if OPENSSL_API_COMPAT >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
++#define ERR_load_crypto_strings(x) {}
++#define SSL_load_error_strings(x) {}
++#define ERR_free_strings(x) {}
++#define ENGINE_load_dynamic(x) {}
++#define EVP_CIPHER_CTX_cleanup(x) EVP_CIPHER_CTX_reset(x)
++#define EVP_CIPHER_CTX_init(x) EVP_CIPHER_CTX_reset(x)
++#endif
++
++/*
+ * OpenSSL-1.1.0-pre5 has hidden the RSA and DSA structures
+ * One can no longer use statements like rsa->n = ...
+ * Macros and defines don't work on all systems, so use inline versions