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