Merge v1.14.0 into community

pull/4/merge
Governikus 2017-12-20 15:05:48 +01:00
commit fd71d19839
2115 changed files with 69457 additions and 56850 deletions

View File

@ -1,4 +1,4 @@
CMAKE_MINIMUM_REQUIRED(VERSION 3.3.0)
CMAKE_MINIMUM_REQUIRED(VERSION 3.5.0)
IF(POLICY CMP0020)
CMAKE_POLICY(SET CMP0020 NEW)
@ -33,7 +33,7 @@ ELSE()
ENDIF()
PROJECT(AusweisApp2 VERSION 1.12.4 LANGUAGES ${LANGUAGES})
PROJECT(AusweisApp2 VERSION 1.14.0 LANGUAGES ${LANGUAGES})
# Set TWEAK if not defined in PROJECT_VERSION above to
# have a valid tweak version without propagating it
@ -67,6 +67,7 @@ MESSAGE(STATUS "VENDOR: ${VENDOR}")
MESSAGE(STATUS "VERSION: ${PROJECT_VERSION}")
IF(ANDROID)
GET_ANDROID_TOOLCHAIN_VARS(ANDROID_TOOLCHAIN_PREFIX ANDROID_TOOLCHAIN_MACHINE_NAME)
IF(NOT BUILD_PREVIEW)
SET(BUILD_PREVIEW false)
ENDIF()
@ -78,6 +79,13 @@ IF(ANDROID)
MESSAGE(STATUS "ANDROID_VERSION_CODE: ${ANDROID_VERSION_CODE}")
ENDIF()
IF(IOS)
IF(NOT USE_DISTRIBUTION_PROFILE)
SET(USE_DISTRIBUTION_PROFILE false)
ENDIF()
MESSAGE(STATUS "USE_DISTRIBUTION_PROFILE: ${USE_DISTRIBUTION_PROFILE}")
ENDIF()
IF("${PROJECT_BINARY_DIR}" STREQUAL "${PROJECT_SOURCE_DIR}")
MESSAGE(FATAL_ERROR "in tree building is not supported!")
ENDIF()

View File

@ -466,7 +466,7 @@ Die verwendeten OpenSource-Bibliotheken unterliegen den folgenden Nutzungsbeding
Qt
Lizenz: LGPL v3
Version: 5.8.0
Version: 5.9.3
Adresse: https://www.qt.io/
http_parser
@ -661,11 +661,7 @@ permanent authorization for you to choose that version for the Library.
http_parser.c is based on src/http/ngx_http_parse.c from NGINX copyright
Igor Sysoev.
Additional changes are licensed under the same terms as NGINX and
copyright Joyent, Inc. and other Node contributors. All rights reserved.
Copyright Joyent, Inc. and other Node contributors.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to

View File

@ -416,7 +416,7 @@ Die verwendeten OpenSource-Bibliotheken unterliegen den folgenden Nutzungsbeding
Qt
Lizenz: LGPL v3
Version: 5.8.0
Version: 5.9.3
Adresse: https://www.qt.io/
http_parser
@ -611,11 +611,7 @@ permanent authorization for you to choose that version for the Library.
http_parser.c is based on src/http/ngx_http_parse.c from NGINX copyright
Igor Sysoev.
Additional changes are licensed under the same terms as NGINX and
copyright Joyent, Inc. and other Node contributors. All rights reserved.
Copyright Joyent, Inc. and other Node contributors.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to

View File

@ -170,3 +170,23 @@ Nachdem die Build-Umgebung eingerichtet ist, kann je nach System ein Package ers
$ make install
$ make apk
Reproduzierbarer Build
----------------------
Wir sind stets bemüht den Build des offiziellen Binaries der AusweisApp2 nachvollziehbar zu gestalten.
Daher haben wir unter anderem eine README in dem Unterordner ``./libs`` hinterlegt, die den Aufbau
der Buildumgebung und den Build der externen Bibliotheken beschreibt.
Anhand dieser Anleitung können Sie nachvollziehen, wie unser internes Buildsystem aufgebaut ist und
welche Compiler bzw. Compiler-Versionen wir verwenden.
Im Unterordner ``./resources/jenkins/`` ist es möglich, unsere Konfiguration des CI-Servers einzusehen.
Die Konfiguration besteht aus mehreren Dockerfiles und JobDSL-Dateien.
Anhand dieser Skripte ist es möglich, den Build der AusweisApp2 zu reproduzieren.
Ein Unterschied zum offiziellen Binary sollte lediglich in eventuellen Pfaden,
einem Datum bzw. Zeitstempel und Signaturen bestehen.
.. seealso::
https://reproducible-builds.org/

View File

@ -47,15 +47,15 @@ IF(MAC OR LINUX OR WIN32)
FILE(GLOB TAR_GZ_FILES ${PROJECT_BINARY_DIR}/*.tar.gz)
IF(DMG_FILES)
ADD_APPCAST_FILE("${DMG_FILES}" "Q_OS_MAC")
ADD_APPCAST_FILE("${DMG_FILES}" "mac")
ENDIF()
IF(MSI_FILES)
ADD_APPCAST_FILE("${MSI_FILES}" "Q_OS_WIN32")
ADD_APPCAST_FILE("${MSI_FILES}" "win")
ENDIF()
IF(TAR_GZ_FILES)
ADD_APPCAST_FILE("${TAR_GZ_FILES}" "SOURCES")
ADD_APPCAST_FILE("${TAR_GZ_FILES}" "src")
ENDIF()
IF(APPCAST_ITEMS)

View File

@ -9,14 +9,12 @@ ADD_DEFINITIONS(-DQT_NO_EXCEPTIONS)
IF(QT_VENDOR STREQUAL "Governikus")
ADD_DEFINITIONS(-DGOVERNIKUS_QT)
ADD_DEFINITIONS(-DQT_DEPRECATED_WARNINGS)
ENDIF()
IF(CMAKE_VERSION VERSION_LESS 3.2)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
ELSE()
SET(CMAKE_CXX_STANDARD 11)
SET(CMAKE_CXX_STANDARD_REQUIRED ON)
ENDIF()
SET(CMAKE_CXX_STANDARD 11)
SET(CMAKE_CXX_STANDARD_REQUIRED ON)
SET(CMAKE_CXX_EXTENSIONS OFF)
IF(NOT DEFINED WARNINGS_ARE_ERRORS AND VENDOR_GOVERNIKUS)
SET(WARNINGS_ARE_ERRORS ON)
@ -32,11 +30,17 @@ ELSE()
ADD_DEFINITIONS(-DQT_STRICT_ITERATORS)
STRING(REPLACE "-fexceptions" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wpedantic -Wcast-qual -Wshadow -Wvla")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wcast-qual -Wshadow")
ADD_FLAG(-flto VAR CMAKE_EXE_LINKER_FLAGS_RELEASE CMAKE_SHARED_LINKER_FLAGS_RELEASE LINK -flto)
ADD_FLAG(-fno-exceptions)
ADD_FLAG(-fstack-protector-strong -fstack-protector)
ADD_FLAG(-fuse-ld=gold VAR CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS LINK -fuse-ld=gold)
ADD_FLAG(-Wold-style-cast)
ADD_FLAG(-Wmost)
ADD_FLAG(-Wpedantic)
ADD_FLAG(-Wvla)
ADD_FLAG(-Wconversion)
ADD_FLAG(-Wloop-analysis)
ADD_FLAG(-Wlogical-op)
@ -44,20 +48,28 @@ ELSE()
ADD_FLAG(-Wduplicated-cond)
ADD_FLAG(-Wweak-vtables)
ADD_FLAG(-Wcovered-switch-default)
ADD_FLAG(-Wduplicated-branches)
ADD_FLAG(-Wdocumentation)
ADD_FLAG(-Wsuggest-override)
ADD_FLAG(-Winconsistent-missing-override)
ADD_FLAG(-Winconsistent-missing-destructor-override)
ADD_FLAG(-Wnon-virtual-dtor)
ADD_FLAG(-Winitializer-overrides)
ADD_FLAG(-Wunreachable-code-aggressive)
ADD_FLAG(-Wnewline-eof)
ADD_FLAG(-Wno-gnu-zero-variadic-macro-arguments) # Qt (qDebug) is not compatible
IF(ANDROID)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffunction-sections -fdata-sections -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -finline-limit=64")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffunction-sections -fdata-sections")
IF(CMAKE_COMPILER_IS_GNUCXX)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -finline-limit=64 -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now")
ENDIF()
SET(CMAKE_CXX_VISIBILITY_PRESET hidden)
ENDIF()
IF("${CMAKE_BUILD_TYPE}" STREQUAL "RELEASE")
ADD_FLAG(-flto VAR CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS LINK -flto)
ENDIF()
IF(WARNINGS_ARE_ERRORS AND NOT CMAKE_GENERATOR STREQUAL Xcode)
IF(WARNINGS_ARE_ERRORS)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
ENDIF()
@ -73,17 +85,21 @@ ELSE()
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0")
IF(SANITIZER)
IF(CMAKE_COMPILER_IS_GNUCXX)
ADD_FLAG("-fsanitize=address -fsanitize=undefined -fno-omit-frame-pointer -fno-optimize-sibling-calls" LINK -fsanitize=address -fsanitize=undefined)
ELSE()
ADD_FLAG("-fsanitize=address -fsanitize=undefined -fsanitize=unsigned-integer-overflow -fsanitize-address-use-after-scope -fno-omit-frame-pointer -fno-optimize-sibling-calls" LINK -fsanitize=address -fsanitize=undefined)
IF(NOT SANITIZER_SKIP_ASAN)
SET(SANITIZER_FLAGS "-fsanitize=address")
SET(SANITIZER_LINK_FLAGS "-fsanitize=address")
ENDIF()
SET(SANITIZER_FLAGS "${SANITIZER_FLAGS} -fsanitize=undefined -fno-omit-frame-pointer -fno-optimize-sibling-calls")
ADD_FLAG("${SANITIZER_FLAGS} -fsanitize=unsigned-integer-overflow -fsanitize-address-use-after-scope" "${SANITIZER_FLAGS}" LINK "${SANITIZER_LINK_FLAGS} -fsanitize=undefined")
ENDIF()
IF(CMAKE_CXX_COMPILER_ID STREQUAL Intel)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -wd1875,1682,2259,654,177")
ENDIF()
ENDIF()
# enable Objective-C support on MacOS X
IF(APPLE)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ObjC++")
IF(APPLE AND NOT IOS)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ObjC++ -mmacosx-version-min=10.9")
ENDIF()

View File

@ -93,12 +93,6 @@ MACRO(GET_DVCS_INFO)
DVCS_CALL("revision" "-" id -i)
ELSEIF(GIT_FOUND)
DVCS_CALL("revision" "-" rev-parse --verify --short HEAD)
DVCS_EXECUTE(dvcs_clean_wc diff-index --quiet HEAD)
IF(NOT DEFINED dvcs_clean_wc)
MESSAGE(STATUS "DVCS: dirty working copy")
SET(dvcs_revision ${dvcs_revision}+)
SET(VERSION_DVCS ${VERSION_DVCS}+)
ENDIF()
ENDIF()
ENDMACRO()

View File

@ -1,38 +1,27 @@
SET(REMOTE_CONFIG_URL_PROD https://appl.governikus-asp.de/ausweisapp2)
IF(JENKINS_APPCAST)
SET(REMOTE_CONFIG_URL https://buildautentapp/job/${JENKINS_APPCAST}/lastSuccessfulBuild/artifact CACHE STRING "Remote config download URL" FORCE)
SET(REMOTE_CONFIG_URL https://vtf-aajenkins.tf.bos-test.de/job/${JENKINS_APPCAST}/lastSuccessfulBuild/artifact CACHE STRING "Remote config download URL" FORCE)
ELSE()
SET(REMOTE_CONFIG_URL https://appl.governikus-asp.de/ausweisapp2 CACHE STRING "Remote config download URL" FORCE)
SET(REMOTE_CONFIG_URL ${REMOTE_CONFIG_URL_PROD} CACHE STRING "Remote config download URL" FORCE)
ENDIF()
FUNCTION(CONFIGURE_DEFAULT_FILES _destination)
# Set DEFAULT_PROVIDER_FILE to replace this in config.json.in.
IF(IOS)
SET(DEFAULT_PROVIDER_FILE default-providers-ios.json)
ELSE()
SET(DEFAULT_PROVIDER_FILE default-providers.json)
ENDIF()
IF(JENKINS_APPCAST)
SET(REMOTE_CONFIG_PATH_APPCAST /build)
SET(REMOTE_CONFIG_PATH_APPCAST_BETA /build)
SET(REMOTE_CONFIG_PATH_PROVIDERS /source/resources)
SET(REMOTE_CONFIG_PATH_DRIVERS /source/resources)
SET(REMOTE_CONFIG_PATH_READERS /source/resources)
ELSE()
SET(REMOTE_CONFIG_PATH_APPCAST )
SET(REMOTE_CONFIG_PATH_APPCAST_BETA /beta)
SET(REMOTE_CONFIG_PATH_PROVIDERS )
SET(REMOTE_CONFIG_PATH_DRIVERS /driver)
SET(REMOTE_CONFIG_PATH_READERS /reader)
ENDIF()
SET(REMOTE_CONFIG_URL_READER_IMAGES ${REMOTE_CONFIG_URL_PROD}/reader)
# Copy secure storage file, so that the AusweisApp2 can be started from the build directory.
CONFIGURE_FILE(${RESOURCES_DIR}/config.json.in ${_destination}/config.json @ONLY)
# The same with default providers
CONFIGURE_FILE(${RESOURCES_DIR}/${DEFAULT_PROVIDER_FILE} ${_destination}/default-providers.json COPYONLY)
# The same with default supported devices
CONFIGURE_FILE(${RESOURCES_DIR}/default-supported-devices.json ${_destination}/default-supported-devices.json COPYONLY)
# Copy qtlogging.ini file
CONFIGURE_FILE(${RESOURCES_DIR}/qtlogging.ini ${_destination}/qtlogging.ini COPYONLY)
ENDFUNCTION()

View File

@ -1,9 +1,22 @@
INCLUDE(CheckCXXCompilerFlag)
INCLUDE(CMakeParseArguments)
# Check if a compiler flag is supported by current compiler.
#
# Options
# NOQUOTES: Do not add quotes to the variable (not used if it is a TARGET)
#
# Parameter
# NAME: Add a human readable name. This is for configure output only to
# group multiple flags or to indicate the usage.
# LINK: Use these linker flags to try the compiler flag. The linker
# flags won't be added. They are for testing only.
# VAR: Checked compiler flags will be added to these variables. (default: CMAKE_CXX_FLAGS)
# It is possible to add multiple VAR parameter.
# If VAR parameter is a cmake TARGET the compiler flag will be added
# to the COMPILE_FLAGS property of this TARGET only.
FUNCTION(ADD_FLAG)
SET(options NOQUOTES)
SET(oneValueArgs)
SET(oneValueArgs NAME)
SET(multiValueArgs LINK VAR)
cmake_parse_arguments(_PARAM "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
@ -16,13 +29,19 @@ FUNCTION(ADD_FLAG)
ENDIF()
FOREACH(flag ${_PARAM_UNPARSED_ARGUMENTS})
STRING(REPLACE "-" "_" flagname ${flag})
SET(flagname ${flag})
IF(_PARAM_NAME)
SET(flagname "${flagname}_${_PARAM_NAME}")
ENDIF()
STRING(REPLACE "-" "_" flagname ${flagname})
STRING(REPLACE " " "_" flagname ${flagname})
CHECK_CXX_COMPILER_FLAG(${flag} ${flagname})
IF(${flagname})
FOREACH(var ${_PARAM_VAR})
IF(_PARAM_NOQUOTES)
IF (${var} MATCHES "^AusweisApp")
SET_PROPERTY(TARGET ${var} APPEND_STRING PROPERTY COMPILE_FLAGS " ${flag}")
ELSEIF(_PARAM_NOQUOTES)
SET(${var} ${${var}} ${flag} PARENT_SCOPE)
ELSE()
SET(${var} "${${var}} ${flag}" PARENT_SCOPE)
@ -36,10 +55,6 @@ ENDFUNCTION()
FUNCTION(GET_FILE_MATCHER _result_remove _result_keep)
IF(NOT ${CMAKE_BUILD_TYPE} STREQUAL "DEBUG")
LIST(APPEND matcher_remove "_debug")
ENDIF()
IF(NOT ANDROID)
LIST(APPEND matcher_remove "_android")
ELSE()
@ -115,9 +130,11 @@ FUNCTION(ADD_PLATFORM_LIBRARY _name)
GET_FILE_MATCHER(matcher_remove matcher_keep)
FOREACH(file ${FILES})
STRING(REPLACE "${CMAKE_SOURCE_DIR}" "" file_stripped "${file}")
SET(keep FALSE)
FOREACH(match ${matcher_keep})
IF("${file}" MATCHES ${match})
IF("${file_stripped}" MATCHES ${match})
SET(keep TRUE)
BREAK()
ENDIF()
@ -125,10 +142,10 @@ FUNCTION(ADD_PLATFORM_LIBRARY _name)
IF(NOT keep)
FOREACH(match ${matcher_remove})
IF("${file}" MATCHES ${match})
IF("${file_stripped}" MATCHES ${match})
LIST(REMOVE_ITEM FILES "${file}")
BREAK()
ELSEIF("${file}" MATCHES "_generic")
ELSEIF("${file_stripped}" MATCHES "_generic")
LIST(REMOVE_ITEM FILES "${file}")
LIST(APPEND GENERICS "${file}")
BREAK()
@ -144,7 +161,8 @@ FUNCTION(ADD_PLATFORM_LIBRARY _name)
SET(found FALSE)
FOREACH(file ${FILES})
IF("${file}" MATCHES "${generic_basename}" AND NOT "${file}" MATCHES ".h$")
STRING(REPLACE "${CMAKE_SOURCE_DIR}" "" file_stripped "${file}")
IF("${file_stripped}" MATCHES "${generic_basename}" AND NOT "${file_stripped}" MATCHES ".h$")
SET(found TRUE)
BREAK()
ENDIF()
@ -160,61 +178,22 @@ FUNCTION(ADD_PLATFORM_LIBRARY _name)
ENDFUNCTION()
# This FUNCTION is a workaround for a "bug" in cmake to use OBJECT LIBRARIES with IMPORTED TARGETS like Qt
# http://www.cmake.org/Bug/view.php?id=14778
FUNCTION(ADD_OBJECT_LIBRARY TargetName Files)
ADD_LIBRARY(${TargetName} OBJECT ${Files})
SET(_name ${TargetName}_ObjectLib)
ADD_LIBRARY(${_name} OBJECT ${Files})
FOREACH(MODULE ${ARGN})
TARGET_INCLUDE_DIRECTORIES(${TargetName} PRIVATE $<TARGET_PROPERTY:${MODULE},INTERFACE_INCLUDE_DIRECTORIES>)
TARGET_COMPILE_DEFINITIONS(${TargetName} PRIVATE $<TARGET_PROPERTY:${MODULE},INTERFACE_COMPILE_DEFINITIONS>)
TARGET_INCLUDE_DIRECTORIES(${_name} SYSTEM PRIVATE $<TARGET_PROPERTY:${MODULE},INTERFACE_INCLUDE_DIRECTORIES>)
TARGET_COMPILE_DEFINITIONS(${_name} PRIVATE $<TARGET_PROPERTY:${MODULE},INTERFACE_COMPILE_DEFINITIONS>)
ENDFOREACH()
IF(Qt5_POSITION_INDEPENDENT_CODE)
SET_TARGET_PROPERTIES(${TargetName} PROPERTIES POSITION_INDEPENDENT_CODE ON)
ENDIF()
ENDFUNCTION()
FUNCTION(GET_QUOTED_STRING _dest _str _filename)
IF(CMAKE_GENERATOR STREQUAL Xcode AND CMAKE_VERSION VERSION_LESS "3.5")
SET(tmp_var \\\\"${_str}\\\\")
ELSEIF(NOT "${_filename}" MATCHES ".rc$")
SET(tmp_var \\"${_str}\\")
ELSE()
SET(tmp_var ${_str})
SET_TARGET_PROPERTIES(${_name} PROPERTIES POSITION_INDEPENDENT_CODE ON)
ENDIF()
SET(${_dest} ${tmp_var} PARENT_SCOPE)
ENDFUNCTION()
FUNCTION(ADD_STRING_DEFINITION _str _def)
IF(ARGN)
FOREACH(arg ${ARGN})
IF (${arg} MATCHES "^AusweisApp")
SET(ARG_TYPE TARGET)
ELSE()
SET(ARG_TYPE SOURCE)
ENDIF()
IF(NOT "${_str}" STREQUAL "")
GET_QUOTED_STRING(tmp_var ${_str} ${arg})
SET(tmp_var =\"${tmp_var}\")
ENDIF()
SET_PROPERTY(${ARG_TYPE} ${arg} APPEND_STRING PROPERTY COMPILE_FLAGS " -D${_def}${tmp_var}")
ENDFOREACH()
ELSE()
IF(NOT "${_str}" STREQUAL "")
GET_QUOTED_STRING(tmp_var ${_str} ${arg})
SET(tmp_var =${tmp_var})
ENDIF()
ADD_DEFINITIONS(-D${_def}${tmp_var})
ENDIF()
ENDFUNCTION()
FUNCTION(ADD_DEFINITION _def)
ADD_STRING_DEFINITION("" ${_def} ${ARGN})
ADD_LIBRARY(${TargetName} INTERFACE)
TARGET_SOURCES(${TargetName} INTERFACE $<TARGET_OBJECTS:${_name}>)
TARGET_INCLUDE_DIRECTORIES(${TargetName} INTERFACE "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>")
ENDFUNCTION()
@ -241,6 +220,17 @@ FUNCTION(DIRLIST_OF_FILES _result _files)
SET(${_result} ${dirlist} PARENT_SCOPE)
ENDFUNCTION()
FUNCTION(GET_ANDROID_TOOLCHAIN_VARS _prefix _machine)
GET_FILENAME_COMPONENT(ANDROID_TOOLCHAIN_MACHINE_NAME "${CMAKE_CXX_ANDROID_TOOLCHAIN_PREFIX}" NAME)
STRING(REGEX REPLACE "-$" "" ANDROID_TOOLCHAIN_MACHINE_NAME "${ANDROID_TOOLCHAIN_MACHINE_NAME}")
STRING(REGEX MATCH "/toolchains/(.*)/prebuilt/" _unused "${CMAKE_CXX_ANDROID_TOOLCHAIN_PREFIX}")
STRING(REGEX REPLACE "-${CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION}$" "" ANDROID_TOOLCHAIN_PREFIX "${CMAKE_MATCH_1}")
SET(${_prefix} ${ANDROID_TOOLCHAIN_PREFIX} PARENT_SCOPE)
SET(${_machine} ${ANDROID_TOOLCHAIN_MACHINE_NAME} PARENT_SCOPE)
ENDFUNCTION()
IF("${CMAKE_SYSTEM_NAME}" MATCHES "BSD")
SET(BSD true)
ENDIF()
@ -285,6 +275,11 @@ IF(NOT COMMAND FIND_HOST_PACKAGE)
ENDIF()
FUNCTION(FETCH_TARGET_LOCATION _destination _target)
SET(options NAME)
SET(oneValueArgs)
SET(multiValueArgs)
cmake_parse_arguments(_PARAM "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
GET_TARGET_PROPERTY(tmp "${_target}" IMPORTED_LOCATION_${CMAKE_BUILD_TYPE})
IF(NOT tmp)
@ -299,6 +294,11 @@ FUNCTION(FETCH_TARGET_LOCATION _destination _target)
GET_TARGET_PROPERTY(tmp "${_target}" IMPORTED_LOCATION)
ENDIF()
IF(_PARAM_NAME)
GET_FILENAME_COMPONENT(realpath "${tmp}" REALPATH)
GET_FILENAME_COMPONENT(tmp "${realpath}" NAME)
ENDIF()
SET(${_destination} ${tmp} PARENT_SCOPE)
ENDFUNCTION()
@ -326,6 +326,7 @@ IF(WIN32)
SET(SIGNTOOL_PARAMS ${SIGNTOOL_PARAMS} /n ${WIN_SIGN_SUBJECT_NAME})
MESSAGE(STATUS "Files will be signed using: ${WIN_SIGN_SUBJECT_NAME}")
ELSE()
STRING(REPLACE "\\" "/" WIN_SIGN_KEYSTORE "${WIN_SIGN_KEYSTORE}")
SET(SIGNTOOL_PARAMS ${SIGNTOOL_PARAMS} /f ${WIN_SIGN_KEYSTORE} /p ${WIN_SIGN_KEYSTORE_PSW})
MESSAGE(STATUS "Files will be signed using: ${WIN_SIGN_KEYSTORE}")
ENDIF()

View File

@ -80,19 +80,6 @@ ELSEIF(APPLE AND NOT IOS)
ENDFOREACH()
ENDFOREACH()
FOREACH(entry QtQuick QtQuick.2 QtQml QtGraphicalEffects Qt)
SET(_dir "${QT_HOST_PREFIX}/qml")
FILE(GLOB_RECURSE DYLIB "${_dir}/${entry}/*.dylib")
FOREACH(_lib ${DYLIB})
FILE(RELATIVE_PATH _lib_dest "${_dir}" "${_lib}")
IF(NOT _lib_dest MATCHES "XmlListModel|Particles.2|LocalStorage") # blacklist not needed stuff
GET_FILENAME_COMPONENT(_lib_dest_dir ${_lib_dest} DIRECTORY)
INSTALL(FILES ${_lib} DESTINATION ${MACOS_BUNDLE_RESOURCES_DIR}/qml_stationary/${_lib_dest_dir} COMPONENT Runtime)
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Resources/qml_stationary/${_lib_dest}")
ENDIF()
ENDFOREACH()
ENDFOREACH()
INSTALL(TARGETS AusweisApp DESTINATION . COMPONENT Application)
INSTALL(FILES ${platformMac} DESTINATION ${MACOS_BUNDLE_PLUGINS_DIR}/platforms COMPONENT Runtime)
@ -100,9 +87,8 @@ ELSEIF(APPLE AND NOT IOS)
"
${SEARCH_ADDITIONAL_DIRS}
file(GLOB_RECURSE QTPLUGINS \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${MACOS_BUNDLE_PLUGINS_DIR}/*${CMAKE_SHARED_LIBRARY_SUFFIX}\")
file(GLOB_RECURSE QtQuickPLUGINS \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${MACOS_BUNDLE_RESOURCES_DIR}/*${CMAKE_SHARED_LIBRARY_SUFFIX}\")
INCLUDE(BundleUtilities)
FIXUP_BUNDLE(\"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${EXECUTABLE_NAME}\" \"\${QTPLUGINS};\${QtQuickPLUGINS}\" \"${TOOLCHAIN_LIB_PATH};\${ADDITIONAL_DIRS}\")
FIXUP_BUNDLE(\"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${EXECUTABLE_NAME}\" \"\${QTPLUGINS}\" \"${TOOLCHAIN_LIB_PATH};\${ADDITIONAL_DIRS}\")
" COMPONENT Runtime)
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtCore.framework")
@ -111,18 +97,13 @@ ELSEIF(APPLE AND NOT IOS)
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtNetwork.framework")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtSvg.framework")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtWidgets.framework")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtPrintSupport.framework")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtQml.framework")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtQuick.framework")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtQuickControls2.framework")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtQuickTemplates2.framework")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtQuickWidgets.framework")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtPrintSupport.framework") # remove if disabled in Qt
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtWebSockets.framework")
FOREACH (OPENSSL_LIBRARY ${OPENSSL_LIBRARIES})
GET_FILENAME_COMPONENT(OPENSSL_LIBRARY_REAL ${OPENSSL_LIBRARY} REALPATH)
GET_FILENAME_COMPONENT(OPENSSL_LIBRARY_NAME ${OPENSSL_LIBRARY_REAL} NAME)
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/MacOS/${OPENSSL_LIBRARY_NAME}")
ENDFOREACH()
FETCH_TARGET_LOCATION(opensslCryptoName "OpenSSL::Crypto" NAME)
FETCH_TARGET_LOCATION(opensslSslName "OpenSSL::SSL" NAME)
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/MacOS/${opensslCryptoName}")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/MacOS/${opensslSslName}")
# set it to parent scope to be able to access it from Packaging.cmake
SET(ADDITIONAL_BUNDLE_FILES_TO_SIGN ${ADDITIONAL_BUNDLE_FILES_TO_SIGN} PARENT_SCOPE)
@ -154,7 +135,6 @@ ELSEIF(ANDROID)
INSTALL(FILES ${RESOURCES_IMG_ANDROID_DIR}/${entry}/${ANDROID_LAUNCHER_ICON} DESTINATION ${ANDROID_PACKAGE_SRC_DIR}/res/drawable-${entry} COMPONENT Runtime RENAME npa.png)
ENDFOREACH()
INSTALL(FILES ${PACKAGING_DIR}/android/nfc_tech_filter.xml DESTINATION ${ANDROID_PACKAGE_SRC_DIR}/res/xml COMPONENT Runtime)
INSTALL(FILES ${PACKAGING_DIR}/android/styles.xml DESTINATION ${ANDROID_PACKAGE_SRC_DIR}/res/values COMPONENT Runtime)
FILE(GLOB_RECURSE JAVA_FILES "${SRC_DIR}/*.java")
@ -169,11 +149,6 @@ ELSEIF(ANDROID)
ENDIF()
CONFIGURE_FILE(${PACKAGING_DIR}/android/AndroidManifest.xml.in ${ANDROID_PACKAGE_SRC_DIR}/AndroidManifest.xml @ONLY)
GET_FILENAME_COMPONENT(ANDROID_TOOLCHAIN_MACHINE_NAME "${CMAKE_CXX_ANDROID_TOOLCHAIN_PREFIX}" NAME)
STRING(REGEX REPLACE "-$" "" ANDROID_TOOLCHAIN_MACHINE_NAME "${ANDROID_TOOLCHAIN_MACHINE_NAME}")
STRING(REGEX MATCH "/toolchains/(.*)/prebuilt/" _unused "${CMAKE_CXX_ANDROID_TOOLCHAIN_PREFIX}")
STRING(REGEX REPLACE "-${CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION}$" "" ANDROID_TOOLCHAIN_PREFIX "${CMAKE_MATCH_1}")
SET(ANDROID_DEPLOYMENT_SETTINGS ${PROJECT_BINARY_DIR}/libAusweisApp2.so-deployment-settings.json CACHE INTERNAL "apk deployment" FORCE)
SET(ANDROID_APP_BINARY "${CMAKE_INSTALL_PREFIX}/${ANDROID_DEST}/libAusweisApp2.so")
CONFIGURE_FILE(${PACKAGING_DIR}/android/libAusweisApp2.so-deployment-settings.json.in ${ANDROID_DEPLOYMENT_SETTINGS} @ONLY)
@ -248,18 +223,3 @@ INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/config.json DESTINATION ${DEFAULT_FILE
# qtlogging.ini
INSTALL(FILES ${RESOURCES_DIR}/qtlogging.ini DESTINATION ${DEFAULT_FILE_DESTINATION} COMPONENT Runtime)
# qml directories
IF(DESKTOP)
INSTALL(DIRECTORY ${RESOURCES_DIR}/qml_stationary DESTINATION ${DEFAULT_FILE_DESTINATION} COMPONENT Runtime)
FOREACH(entry QtQuick QtQuick.2 QtQml QtGraphicalEffects Qt)
INSTALL(DIRECTORY ${QT_HOST_PREFIX}/qml/${entry} DESTINATION ${DEFAULT_FILE_DESTINATION}/qml_stationary COMPONENT Runtime PATTERN "*.dylib" EXCLUDE)
ENDFOREACH()
ELSE()
INSTALL(DIRECTORY ${RESOURCES_DIR}/qml DESTINATION ${DEFAULT_FILE_DESTINATION} COMPONENT Runtime)
ENDIF()
# default-providers.json
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/default-providers.json DESTINATION ${DEFAULT_FILE_DESTINATION} COMPONENT Runtime)
# default-supported-devices.json
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/default-supported-devices.json DESTINATION ${DEFAULT_FILE_DESTINATION} COMPONENT Runtime)

View File

@ -1,30 +1,34 @@
# Set CMAKE_PREFIX_PATH with toolchain directory
IF(MINGW)# AND CMAKE_VERSION VERSION_LESS 3.3.0) # see https://public.kitware.com/Bug/view.php?id=15409
# see https://public.kitware.com/Bug/view.php?id=15409
IF(MINGW)
SET(CMAKE_FIND_LIBRARY_SUFFIXES ".dll.a" ".a" ".lib")
ENDIF()
SET(MIN_QT_VERSION 5.8)
SET(MIN_QT_VERSION 5.9)
FIND_PACKAGE(Qt5Core ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5Network ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5Xml ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5Svg ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5LinguistTools ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5Qml ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5Quick ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5QuickControls2 ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5WebSockets ${MIN_QT_VERSION} REQUIRED)
IF(DESKTOP)
FIND_PACKAGE(Qt5Widgets ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5QuickWidgets ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5PrintSupport ${MIN_QT_VERSION} REQUIRED)
IF(WIN32)
FIND_PACKAGE(Qt5WinExtras ${MIN_QT_VERSION} REQUIRED)
ENDIF()
ENDIF()
IF(ANDROID OR IOS OR WINDOWS_STORE OR "${CMAKE_BUILD_TYPE}" STREQUAL "DEBUG")
FIND_PACKAGE(Qt5Nfc ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5Qml ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5Quick ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5QuickControls2 ${MIN_QT_VERSION} REQUIRED)
ENDIF()
IF(LINUX OR ANDROID OR IOS)
FIND_PACKAGE(Qt5Bluetooth ${MIN_QT_VERSION} REQUIRED)
ENDIF()
@ -58,19 +62,20 @@ IF(MINGW AND NOT CMAKE_CROSSCOMPILING)
SET(tmp_crosscompile_enabled TRUE)
SET(CMAKE_CROSSCOMPILING ON)
ENDIF()
FIND_PACKAGE(OpenSSL 1.0.2 REQUIRED)
IF(QT_VENDOR STREQUAL "Governikus")
FIND_PACKAGE(OpenSSL 1.0.2 REQUIRED) # see openssl_rsa_psk.patch
ELSE()
FIND_PACKAGE(OpenSSL 1.1 REQUIRED)
ENDIF()
IF(tmp_crosscompile_enabled)
SET(CMAKE_CROSSCOMPILING OFF)
ENDIF()
IF(ANDROID)
STRING(REPLACE "libssl.so" "libgovssl.so" OPENSSL_LIBRARIES "${OPENSSL_LIBRARIES}")
STRING(REPLACE "libcrypto.so" "libgovcrypto.so" OPENSSL_LIBRARIES "${OPENSSL_LIBRARIES}")
STRING(REPLACE "libssl.so" "libgovssl.so" OPENSSL_SSL_LIBRARY "${OPENSSL_SSL_LIBRARY}")
STRING(REPLACE "libcrypto.so" "libgovcrypto.so" OPENSSL_CRYPTO_LIBRARY "${OPENSSL_CRYPTO_LIBRARY}")
MESSAGE(STATUS "Rewrite OPENSSL_LIBRARIES: ${OPENSSL_LIBRARIES}")
GET_TARGET_PROPERTY(CryptoLib OpenSSL::Crypto IMPORTED_LOCATION)
STRING(REPLACE "libcrypto.so" "libgovcrypto.so" CryptoLib "${CryptoLib}")
MESSAGE(STATUS "Rewrite OpenSSL::Crypto: ${CryptoLib}")
SET_TARGET_PROPERTIES(OpenSSL::Crypto PROPERTIES IMPORTED_LOCATION "${CryptoLib}")
ENDIF()
@ -117,4 +122,8 @@ ENDIF()
IF("${CMAKE_BUILD_TYPE}" STREQUAL "DEBUG")
FIND_PACKAGE(Qt5Test ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5QuickTest ${MIN_QT_VERSION} REQUIRED)
IF(DESKTOP AND NOT APPLE)
FIND_PACKAGE(Qt5UiPlugin ${MIN_QT_VERSION})
ENDIF()
ENDIF()

View File

@ -7,17 +7,36 @@ MESSAGE(STATUS "CMAKE_SYSTEM_PREFIX_PATH: ${CMAKE_SYSTEM_PREFIX_PATH}")
MESSAGE(STATUS "CMAKE_SYSTEM_INCLUDE_PATH: ${CMAKE_SYSTEM_INCLUDE_PATH}")
MESSAGE(STATUS "CMAKE_VERSION: ${CMAKE_VERSION}")
MESSAGE(STATUS "CMAKE_SYSROOT: ${CMAKE_SYSROOT}")
MESSAGE(STATUS "CMAKE_SYSROOT_LINK: ${CMAKE_SYSROOT_LINK}")
MESSAGE(STATUS "CMAKE_SYSROOT_COMPILE: ${CMAKE_SYSROOT_COMPILE}")
MESSAGE(STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}")
IF(ANDROID)
FUNCTION(READ_REVISION _var _regex _file)
IF(EXISTS "${_file}")
FILE(READ "${_file}" content)
STRING(REGEX MATCH "${_regex}" _unused "${content}")
SET(${_var} ${CMAKE_MATCH_1} PARENT_SCOPE)
ENDIF()
ENDFUNCTION()
MESSAGE(STATUS "CMAKE_ANDROID_NDK: ${CMAKE_ANDROID_NDK}")
MESSAGE(STATUS "CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG: ${CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG}")
MESSAGE(STATUS "CMAKE_ANDROID_ARCH_ABI: ${CMAKE_ANDROID_ARCH_ABI}")
MESSAGE(STATUS "CMAKE_SYSTEM_VERSION: ${CMAKE_SYSTEM_VERSION}")
MESSAGE(STATUS "CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION: ${CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION}")
MESSAGE(STATUS "ANDROID_TOOLCHAIN_PREFIX: ${ANDROID_TOOLCHAIN_PREFIX}")
MESSAGE(STATUS "ANDROID_TOOLCHAIN_MACHINE_NAME: ${ANDROID_TOOLCHAIN_MACHINE_NAME}")
MESSAGE(STATUS "ANDROID_SDK: ${ANDROID_SDK}")
MESSAGE(STATUS "ANDROID_BUILD_TOOLS_REVISION: ${ANDROID_BUILD_TOOLS_REVISION}")
READ_REVISION(ANDROID_NDK_REVISION ".*Revision = ([0-9|\\.]+)" "${CMAKE_ANDROID_NDK}/source.properties")
MESSAGE(STATUS "ANDROID_NDK_REVISION: ${ANDROID_NDK_REVISION}")
READ_REVISION(ANDROID_SDK_REVISION ".*Revision=([0-9|\\.]+)" "${ANDROID_SDK}/tools/source.properties")
MESSAGE(STATUS "ANDROID_SDK_REVISION: ${ANDROID_SDK_REVISION}")
ELSEIF(IOS)
MESSAGE(STATUS "CMAKE_IOS_SDK_ROOT: ${CMAKE_IOS_SDK_ROOT}")
MESSAGE(STATUS "CMAKE_IOS_DEVELOPER_ROOT: ${CMAKE_IOS_DEVELOPER_ROOT}")

View File

@ -71,6 +71,7 @@ LIST(APPEND CPACK_SOURCE_IGNORE_FILES "\\\\.cproject")
LIST(APPEND CPACK_SOURCE_IGNORE_FILES "\\\\.reviewboardrc")
LIST(APPEND CPACK_SOURCE_IGNORE_FILES "utils/tlscheck")
LIST(APPEND CPACK_SOURCE_IGNORE_FILES "utils/testbedtool")
LIST(APPEND CPACK_SOURCE_IGNORE_FILES "utils/fuzzing")
SET(CPACK_MONOLITHIC_INSTALL true)
@ -97,7 +98,7 @@ IF(WIN32)
ELSEIF(IOS)
FILE(WRITE ${PROJECT_BINARY_DIR}/ipa.cmake "
SET(BUNDLE_DIRS \"\${CONFIG}-iphoneos;UninstalledProducts;UninstalledProducts/iphoneos\")
SET(BUNDLE_DIRS \"\${CONFIG}-iphoneos;\${CONFIG};UninstalledProducts;UninstalledProducts/iphoneos\")
FOREACH(dir \${BUNDLE_DIRS})
SET(tmpBundleDir ${PROJECT_BINARY_DIR}/src/\${dir}/${PROJECT_NAME}.app)

View File

@ -175,66 +175,143 @@ ENDFUNCTION()
FIND_PROGRAM(CONVERT convert CMAKE_FIND_ROOT_PATH_BOTH)
IF(CONVERT)
SET(CONVERT_CMD convert -background transparent)
ADD_CUSTOM_TARGET(npaicons
COMMAND ${CONVERT_CMD} npa.svg -define icon:auto-resize=256,96,64,48,40,32,24,20,16 npa.ico
COMMAND ${CONVERT_CMD} npa.svg -resize 16x16 autentapp2.iconset/icon_16x16.png
COMMAND ${CONVERT_CMD} npa.svg -resize 32x32 autentapp2.iconset/icon_16x16@2x.png
COMMAND ${CONVERT_CMD} npa.svg -resize 32x32 autentapp2.iconset/icon_32x32.png
COMMAND ${CONVERT_CMD} npa.svg -resize 64x64 autentapp2.iconset/icon_32x32@2x.png
COMMAND ${CONVERT_CMD} npa.svg -resize 128x128 autentapp2.iconset/icon_128x128.png
COMMAND ${CONVERT_CMD} npa.svg -resize 256x256 autentapp2.iconset/icon_128x128@2x.png
COMMAND ${CONVERT_CMD} npa.svg -resize 256x256 autentapp2.iconset/icon_256x256.png
COMMAND ${CONVERT_CMD} npa.svg -resize 512x512 autentapp2.iconset/icon_256x256@2x.png
COMMAND ${CONVERT_CMD} npa.svg -resize 512x512 autentapp2.iconset/icon_512x512.png
COMMAND ${CONVERT_CMD} npa.svg -resize 1024x1024 autentapp2.iconset/icon_512x512@2x.png
COMMAND ${CONVERT_CMD} npa.svg -resize 36x36 android/ldpi/npa.png
COMMAND ${CONVERT_CMD} npa.svg -resize 48x48 android/mdpi/npa.png
COMMAND ${CONVERT_CMD} npa.svg -resize 72x72 android/hdpi/npa.png
COMMAND ${CONVERT_CMD} npa.svg -resize 96x96 android/xhdpi/npa.png
COMMAND ${CONVERT_CMD} npa.svg -resize 144x144 android/xxhdpi/npa.png
COMMAND ${CONVERT_CMD} npa.svg -resize 192x192 android/xxxhdpi/npa.png
COMMAND ${CONVERT_CMD} npa_beta.svg -resize 36x36 android/ldpi/npa_beta.png
COMMAND ${CONVERT_CMD} npa_beta.svg -resize 48x48 android/mdpi/npa_beta.png
COMMAND ${CONVERT_CMD} npa_beta.svg -resize 72x72 android/hdpi/npa_beta.png
COMMAND ${CONVERT_CMD} npa_beta.svg -resize 96x96 android/xhdpi/npa_beta.png
COMMAND ${CONVERT_CMD} npa_beta.svg -resize 144x144 android/xxhdpi/npa_beta.png
COMMAND ${CONVERT_CMD} npa_beta.svg -resize 192x192 android/xxxhdpi/npa_beta.png
COMMAND ${CONVERT_CMD} npa_preview.svg -resize 36x36 android/ldpi/npa_preview.png
COMMAND ${CONVERT_CMD} npa_preview.svg -resize 48x48 android/mdpi/npa_preview.png
COMMAND ${CONVERT_CMD} npa_preview.svg -resize 72x72 android/hdpi/npa_preview.png
COMMAND ${CONVERT_CMD} npa_preview.svg -resize 96x96 android/xhdpi/npa_preview.png
COMMAND ${CONVERT_CMD} npa_preview.svg -resize 144x144 android/xxhdpi/npa_preview.png
COMMAND ${CONVERT_CMD} npa_preview.svg -resize 192x192 android/xxxhdpi/npa_preview.png
SET(CONVERT_CMD convert)
SET(BACKGROUND_COLOR "transparent")
ADD_CUSTOM_TARGET(npaicons.win
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -define icon:auto-resize=256,96,64,48,40,32,24,20,16 npa.svg npa.ico
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ADD_CUSTOM_TARGET(npaicons.android.preview
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 36x36 npa_preview.svg android/ldpi/npa_preview.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 48x48 npa_preview.svg android/mdpi/npa_preview.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 72x72 npa_preview.svg android/hdpi/npa_preview.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 96x96 npa_preview.svg android/xhdpi/npa_preview.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 144x144 npa_preview.svg android/xxhdpi/npa_preview.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 192x192 npa_preview.svg android/xxxhdpi/npa_preview.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ADD_CUSTOM_TARGET(npaicons.android.beta
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 36x36 npa_beta.svg android/ldpi/npa_beta.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 48x48 npa_beta.svg android/mdpi/npa_beta.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 72x72 npa_beta.svg android/hdpi/npa_beta.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 96x96 npa_beta.svg android/xhdpi/npa_beta.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 144x144 npa_beta.svg android/xxhdpi/npa_beta.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 192x192 npa_beta.svg android/xxxhdpi/npa_beta.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ADD_CUSTOM_TARGET(npaicons.android
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 36x36 npa.svg android/ldpi/npa.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 48x48 npa.svg android/mdpi/npa.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 72x72 npa.svg android/hdpi/npa.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 96x96 npa.svg android/xhdpi/npa.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 144x144 npa.svg android/xxhdpi/npa.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 192x192 npa.svg android/xxxhdpi/npa.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ADD_CUSTOM_TARGET(npaicons.ios.beta
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 29x29 npa_beta.svg iOS/appIcons/beta/iconSmall.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 58x58 npa_beta.svg iOS/appIcons/beta/iconSmall@2x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 87x87 npa_beta.svg iOS/appIcons/beta/iconSmall@3x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 40x40 npa_beta.svg iOS/appIcons/beta/iconSmall40.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 80x80 npa_beta.svg iOS/appIcons/beta/iconSmall40@2x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 120x120 npa_beta.svg iOS/appIcons/beta/iconSmall40@3x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 120x120 npa_beta.svg iOS/appIcons/beta/icon60@2x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 180x180 npa_beta.svg iOS/appIcons/beta/icon60@3x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 76x76 npa_beta.svg iOS/appIcons/beta/icon76.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 152x152 npa_beta.svg iOS/appIcons/beta/icon76@2x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 167x167 npa_beta.svg iOS/appIcons/beta/icon83.5@2x.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ADD_CUSTOM_TARGET(npaicons.ios
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 29x29 npa.svg iOS/appIcons/iconSmall.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 58x58 npa.svg iOS/appIcons/iconSmall@2x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 87x87 npa.svg iOS/appIcons/iconSmall@3x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 40x40 npa.svg iOS/appIcons/iconSmall40.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 80x80 npa.svg iOS/appIcons/iconSmall40@2x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 120x120 npa.svg iOS/appIcons/iconSmall40@3x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 120x120 npa.svg iOS/appIcons/icon60@2x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 180x180 npa.svg iOS/appIcons/icon60@3x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 76x76 npa.svg iOS/appIcons/icon76.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 152x152 npa.svg iOS/appIcons/icon76@2x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 167x167 npa.svg iOS/appIcons/icon83.5@2x.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
SET(BACKGROUND_COLOR "rgb\(220,235,246\)")
ADD_CUSTOM_TARGET(npaicons.iphone
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 320x320 -gravity center -extent 640x1136 npa.svg iOS/launchImages/Default-568h@2x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 320x320 -gravity center -extent 640x1136 npa.svg iOS/launchImages/launchImage568@2x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 480x480 -gravity center -extent 960x1704 npa.svg iOS/launchImages/launchImage568@3x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 353x353 -gravity center -extent 705x1334 npa.svg iOS/launchImages/launchImage667@2x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 563x563 -gravity center -extent 1125x2001 npa.svg iOS/launchImages/launchImage667@3x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 414x414 -gravity center -extent 828x1472 npa.svg iOS/launchImages/launchImage736@2x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 621x621 -gravity center -extent 1242x2208 npa.svg iOS/launchImages/launchImage736@3x.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ADD_CUSTOM_TARGET(npaicons.ipad
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 768x768 -gravity center -extent 2048x1536 npa.svg iOS/launchImages/launchImage1024@2x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 1152x1152 -gravity center -extent 3072x2304 npa.svg iOS/launchImages/launchImage1024@3x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 834x834 -gravity center -extent 2224x1668 npa.svg iOS/launchImages/launchImage1112@2x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 1251x1251 -gravity center -extent 3336x2502 npa.svg iOS/launchImages/launchImage1112@3x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 1024x1024 -gravity center -extent 2732x2048 npa.svg iOS/launchImages/launchImage1366@2x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 1536x1536 -gravity center -extent 4098x3072 npa.svg iOS/launchImages/launchImage1366@3x.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ADD_CUSTOM_TARGET(npaicons DEPENDS npaicons.win npaicons.ios npaicons.ios.beta npaicons.iphone npaicons.ipad npaicons.android npaicons.android.beta npaicons.android.preview)
ENDIF()
FIND_PROGRAM(PNGQUANT pngquant CMAKE_FIND_ROOT_PATH_BOTH)
IF(PNGQUANT)
SET(PNGQUANT_CMD pngquant -f -o)
ADD_CUSTOM_TARGET(pngquant
COMMAND ${PNGQUANT_CMD} autentapp2.iconset/icon_16x16.png -- autentapp2.iconset/icon_16x16.png
COMMAND ${PNGQUANT_CMD} autentapp2.iconset/icon_16x16@2x.png -- autentapp2.iconset/icon_16x16@2x.png
COMMAND ${PNGQUANT_CMD} autentapp2.iconset/icon_32x32.png -- autentapp2.iconset/icon_32x32.png
COMMAND ${PNGQUANT_CMD} autentapp2.iconset/icon_32x32@2x.png -- autentapp2.iconset/icon_32x32@2x.png
COMMAND ${PNGQUANT_CMD} autentapp2.iconset/icon_128x128.png -- autentapp2.iconset/icon_128x128.png
COMMAND ${PNGQUANT_CMD} autentapp2.iconset/icon_128x128@2x.png -- autentapp2.iconset/icon_128x128@2x.png
COMMAND ${PNGQUANT_CMD} autentapp2.iconset/icon_256x256.png -- autentapp2.iconset/icon_256x256.png
COMMAND ${PNGQUANT_CMD} autentapp2.iconset/icon_256x256@2x.png -- autentapp2.iconset/icon_256x256@2x.png
COMMAND ${PNGQUANT_CMD} autentapp2.iconset/icon_512x512.png -- autentapp2.iconset/icon_512x512.png
COMMAND ${PNGQUANT_CMD} autentapp2.iconset/icon_512x512@2x.png -- autentapp2.iconset/icon_512x512@2x.png
COMMAND ${PNGQUANT_CMD} android/ldpi/npa.png -- android/ldpi/npa.png
COMMAND ${PNGQUANT_CMD} android/mdpi/npa.png -- android/mdpi/npa.png
COMMAND ${PNGQUANT_CMD} android/hdpi/npa.png -- android/hdpi/npa.png
COMMAND ${PNGQUANT_CMD} android/xhdpi/npa.png -- android/xhdpi/npa.png
COMMAND ${PNGQUANT_CMD} android/xxhdpi/npa.png -- android/xxhdpi/npa.png
COMMAND ${PNGQUANT_CMD} android/xxxhdpi/npa.png -- android/xxxhdpi/npa.png
COMMAND ${PNGQUANT_CMD} android/ldpi/npa_beta.png -- android/ldpi/npa_beta.png
COMMAND ${PNGQUANT_CMD} android/mdpi/npa_beta.png -- android/mdpi/npa_beta.png
COMMAND ${PNGQUANT_CMD} android/hdpi/npa_beta.png -- android/hdpi/npa_beta.png
COMMAND ${PNGQUANT_CMD} android/xhdpi/npa_beta.png -- android/xhdpi/npa_beta.png
COMMAND ${PNGQUANT_CMD} android/xxhdpi/npa_beta.png -- android/xxhdpi/npa_beta.png
COMMAND ${PNGQUANT_CMD} android/xxxhdpi/npa_beta.png -- android/xxxhdpi/npa_beta.png
ADD_CUSTOM_TARGET(pngquant.ios.beta
COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/iconSmall.png -- iOS/appIcons/beta/iconSmall.png
COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/iconSmall@2x.png -- iOS/appIcons/beta/iconSmall@2x.png
COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/iconSmall@3x.png -- iOS/appIcons/beta/iconSmall@3x.png
COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/iconSmall40.png -- iOS/appIcons/beta/iconSmall40.png
COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/iconSmall40@2x.png -- iOS/appIcons/beta/iconSmall40@2x.png
COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/iconSmall40@3x.png -- iOS/appIcons/beta/iconSmall40@3x.png
COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/icon60@2x.png -- iOS/appIcons/beta/icon60@2x.png
COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/icon60@3x.png -- iOS/appIcons/beta/icon60@3x.png
COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/icon76.png -- iOS/appIcons/beta/icon76.png
COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/icon76@2x.png -- iOS/appIcons/beta/icon76@2x.png
COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/icon83.5@2x.png -- iOS/appIcons/beta/icon83.5@2x.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ADD_CUSTOM_TARGET(pngquant.ios
COMMAND ${PNGQUANT_CMD} iOS/appIcons/iconSmall.png -- iOS/appIcons/iconSmall.png
COMMAND ${PNGQUANT_CMD} iOS/appIcons/iconSmall@2x.png -- iOS/appIcons/iconSmall@2x.png
COMMAND ${PNGQUANT_CMD} iOS/appIcons/iconSmall@3x.png -- iOS/appIcons/iconSmall@3x.png
COMMAND ${PNGQUANT_CMD} iOS/appIcons/iconSmall40.png -- iOS/appIcons/iconSmall40.png
COMMAND ${PNGQUANT_CMD} iOS/appIcons/iconSmall40@2x.png -- iOS/appIcons/iconSmall40@2x.png
COMMAND ${PNGQUANT_CMD} iOS/appIcons/iconSmall40@3x.png -- iOS/appIcons/iconSmall40@3x.png
COMMAND ${PNGQUANT_CMD} iOS/appIcons/icon60@2x.png -- iOS/appIcons/icon60@2x.png
COMMAND ${PNGQUANT_CMD} iOS/appIcons/icon60@3x.png -- iOS/appIcons/icon60@3x.png
COMMAND ${PNGQUANT_CMD} iOS/appIcons/icon76.png -- iOS/appIcons/icon76.png
COMMAND ${PNGQUANT_CMD} iOS/appIcons/icon76@2x.png -- iOS/appIcons/icon76@2x.png
COMMAND ${PNGQUANT_CMD} iOS/appIcons/icon83.5@2x.png -- iOS/appIcons/icon83.5@2x.png
COMMAND ${PNGQUANT_CMD} iOS/launchImages/Default-568h@2x.png -- iOS/launchImages/Default-568h@2x.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ADD_CUSTOM_TARGET(pngquant.iphone
COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage568@2x.png -- iOS/launchImages/launchImage568@2x.png
COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage568@3x.png -- iOS/launchImages/launchImage568@3x.png
COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage667@2x.png -- iOS/launchImages/launchImage667@2x.png
COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage667@3x.png -- iOS/launchImages/launchImage667@3x.png
COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage736@2x.png -- iOS/launchImages/launchImage736@2x.png
COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage736@3x.png -- iOS/launchImages/launchImage736@3x.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ADD_CUSTOM_TARGET(pngquant.ipad
COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage1024@2x.png -- iOS/launchImages/launchImage1024@2x.png
COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage1024@3x.png -- iOS/launchImages/launchImage1024@3x.png
COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage1112@2x.png -- iOS/launchImages/launchImage1112@2x.png
COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage1112@3x.png -- iOS/launchImages/launchImage1112@3x.png
COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage1366@2x.png -- iOS/launchImages/launchImage1366@2x.png
COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage1366@3x.png -- iOS/launchImages/launchImage1366@3x.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ADD_CUSTOM_TARGET(pngquant.android.preview
COMMAND ${PNGQUANT_CMD} android/ldpi/npa_preview.png -- android/ldpi/npa_preview.png
COMMAND ${PNGQUANT_CMD} android/mdpi/npa_preview.png -- android/mdpi/npa_preview.png
COMMAND ${PNGQUANT_CMD} android/hdpi/npa_preview.png -- android/hdpi/npa_preview.png
@ -242,6 +319,41 @@ SET(PNGQUANT_CMD pngquant -f -o)
COMMAND ${PNGQUANT_CMD} android/xxhdpi/npa_preview.png -- android/xxhdpi/npa_preview.png
COMMAND ${PNGQUANT_CMD} android/xxxhdpi/npa_preview.png -- android/xxxhdpi/npa_preview.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ADD_CUSTOM_TARGET(pngquant.android.beta
COMMAND ${PNGQUANT_CMD} android/ldpi/npa_beta.png -- android/ldpi/npa_beta.png
COMMAND ${PNGQUANT_CMD} android/mdpi/npa_beta.png -- android/mdpi/npa_beta.png
COMMAND ${PNGQUANT_CMD} android/hdpi/npa_beta.png -- android/hdpi/npa_beta.png
COMMAND ${PNGQUANT_CMD} android/xhdpi/npa_beta.png -- android/xhdpi/npa_beta.png
COMMAND ${PNGQUANT_CMD} android/xxhdpi/npa_beta.png -- android/xxhdpi/npa_beta.png
COMMAND ${PNGQUANT_CMD} android/xxxhdpi/npa_beta.png -- android/xxxhdpi/npa_beta.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ADD_CUSTOM_TARGET(pngquant.android
COMMAND ${PNGQUANT_CMD} android/ldpi/npa.png -- android/ldpi/npa.png
COMMAND ${PNGQUANT_CMD} android/mdpi/npa.png -- android/mdpi/npa.png
COMMAND ${PNGQUANT_CMD} android/hdpi/npa.png -- android/hdpi/npa.png
COMMAND ${PNGQUANT_CMD} android/xhdpi/npa.png -- android/xhdpi/npa.png
COMMAND ${PNGQUANT_CMD} android/xxhdpi/npa.png -- android/xxhdpi/npa.png
COMMAND ${PNGQUANT_CMD} android/xxxhdpi/npa.png -- android/xxxhdpi/npa.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ADD_CUSTOM_TARGET(pngquant DEPENDS pngquant.ios pngquant.ios.beta pngquant.iphone pngquant.ipad pngquant.android pngquant.android.beta pngquant.android.preview)
ENDIF()
IF(NOT JAVA_EXECUTABLE)
FIND_PACKAGE(Java COMPONENTS Runtime)
IF(Java_JAVA_EXECUTABLE)
SET(JAVA_EXECUTABLE "${Java_JAVA_EXECUTABLE}")
ENDIF()
ENDIF()
IF(JAVA_EXECUTABLE)
FIND_FILE(PLANTUML plantuml.jar PATHS ENV HOME NO_DEFAULT_PATH)
IF(PLANTUML)
MESSAGE(STATUS "Target uml.statemachines is available using: ${PLANTUML}")
CONFIGURE_FILE(${RESOURCES_DIR}/statemachine.sh.in ${PROJECT_BINARY_DIR}/statemachine.sh @ONLY)
ADD_CUSTOM_TARGET(uml.statemachines COMMAND ./statemachine.sh WORKING_DIRECTORY ${PROJECT_BINARY_DIR})
ENDIF()
ENDIF()
INCLUDE(Sphinx)

View File

@ -15,3 +15,7 @@ IF(CMAKE_ANDROID_ARCH_ABI MATCHES "arm64-v8a")
ELSE()
SET(CMAKE_SYSTEM_VERSION 18)
ENDIF()
SET(CMAKE_FIND_ROOT_PATH ${CMAKE_PREFIX_PATH} CACHE string "android find search path root")
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

52
cmake/cmd.cmake 100644
View File

@ -0,0 +1,52 @@
CMAKE_MINIMUM_REQUIRED(VERSION 3.1.0)
###########################################
#### Usage: cmake -DCMD= -P cmake/cmd.cmake
###########################################
FUNCTION(MESSAGE type)
IF(ARGV0 STREQUAL "STDOUT")
EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E echo "${ARGN}")
ELSE()
_MESSAGE(${type} "${ARGN}")
ENDIF()
ENDFUNCTION()
FUNCTION(CREATE_HASH)
IF(NOT FILES)
MESSAGE(FATAL_ERROR "You need to specify 'FILES'")
ENDIF()
IF(NOT ALGORITHM)
SET(ALGORITHM SHA256)
ENDIF()
STRING(TOLOWER "${ALGORITHM}" HASHFILE_ENDING)
FILE(GLOB GLOBBED_FILES RELATIVE "${CMAKE_CURRENT_BINARY_DIR}" "${FILES}")
FOREACH(f ${GLOBBED_FILES})
FILE(${ALGORITHM} ${f} fHash)
SET(OUTPUT "${fHash} ${f}")
MESSAGE(STDOUT ${OUTPUT})
IF(CREATE_FILE)
FILE(WRITE ${f}.${HASHFILE_ENDING} "${OUTPUT}\n")
ENDIF()
ENDFOREACH()
ENDFUNCTION()
IF(NOT CMD)
MESSAGE(FATAL_ERROR "You need to specify 'CMD'")
ENDIF()
IF(CMD STREQUAL "HASH")
CREATE_HASH()
ELSE()
MESSAGE(FATAL_ERROR "Unknown CMD: ${CMD}")
ENDIF()

View File

@ -166,7 +166,7 @@ set (CMAKE_OSX_SYSROOT ${CMAKE_IOS_SDK_ROOT} CACHE PATH "Sysroot used for iOS su
# set the architecture for iOS
if (${IOS_PLATFORM} STREQUAL "OS")
set (IOS_ARCH armv7 arm64)
set (IOS_ARCH arm64)
elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR")
set (IOS_ARCH i386)
elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR64")

View File

@ -0,0 +1,42 @@
AusweisApp2 1.14.0
^^^^^^^^^^^^^^^^^^
**Releasedatum:** 20. Dezember 2017
Anwender
""""""""
- Eine neue Funktion ermöglicht die Verwendung eines
geeigneten Smartphones als Kartenlesegerät über WLAN.
- Umstellmöglichkeit der Sprache zur Laufzeit ermöglicht.
- Fortschrittsanzeige unter Windows im Taskbar-Button.
- Verbesserungen bei der Erstellung von PDFs.
- Speicherung der Protokolldateien verbessert.
- Einstellungsbereich für das Verwalten von
Kartenlesegeräten hinzugefügt.
- Grafiken der Kartenlesegeräte erneuert und erweitert.
- Unter macOS wird die Bandbreite im WLAN nicht mehr
beeinträchtigt.
- Beim Ausweisen ohne aktivierte Online-Ausweisfunktion wurde
fälschlicherweise nach der PUK gefragt.
- Unter Windows 10 kommt es nicht mehr zu einem Absturz
bei Proxies mit Passwort-Authentisierung.
Entwickler
""""""""""
- Aktualisierung von OpenSSL auf die Version 1.0.2n.
- Aktualisierung von Qt auf die Version 5.9.3.
- Unterstützung von OpenSSL 1.1.0.

View File

@ -4,10 +4,6 @@ Release Notes
.. toctree::
:maxdepth: 1
1.12.4
1.12.3
1.12.2
1.12.1
1.12.0
1.14.0
announce
issues

View File

@ -5,7 +5,7 @@ Die AusweisApp2 ist eine Software, die Sie auf Ihrem Computer installieren, um s
Ihrem Personalausweis bzw. Ihrem elektronischen Aufenthaltstitel online auszuweisen.
Für die Nutzung der Online-Ausweisfunktion benötigen die Nutzerinnen und Nutzer eine
Software, mit deren Hilfe eine sichere Verbindung zwischen Kartenlesegerät,
Software, mit deren Hilfe eine sichere Verbindung zwischen Kartenlesegerät oder Smartphone,
Personalausweis und eID-Diensteanbieter hergestellt werden kann. Sie ermöglicht den
verschlüsselten Datenaustausch zwischen Personalausweis und eID-Dienst.

View File

@ -7,14 +7,7 @@ Die nachfolgende Liste bezieht sich auf die aktuelle Version der AusweisApp2.
es bei Benutzern mit eingeschränkten Berechtigungen zu Problemen mit der
Online-Ausweisfunktion kommen.
- Bei Erhöhung der Schriftgröße über 175% kommt es zu Darstellungsfehlern.
- Wenn unter OS X ein Kartenleser mit aufliegendem Ausweisdokument
angeschlossen wird und eine Selbstauskunft angestartet wurde, kann unter
Umständen die AusweisApp2 einfrieren.
- Beim Ausweisen ohne aktivierte Online-Ausweisfunktion wird derzeit
fälschlicherweise nach der PUK gefragt.
- Bei Erhöhung der Schriftgröße über 175% kommt es zur Nutzungseinschränkung.
- Derzeit kommt es noch zu leichten Schwierigkeiten bei der Bedienbarkeit
mit der Tastatur.
@ -25,8 +18,12 @@ Die nachfolgende Liste bezieht sich auf die aktuelle Version der AusweisApp2.
- Bei Verwendung des Screenreaders JAWS unter Windows, kann es zu
leichten Irritationen bei der angegebenen Bedienung kommen.
- Unter Mac OS im WLAN kann die Bandbreite beeinträchtigt werden, wenn die
AusweisApp2 im Hintergrund läuft.
- Wenn die AusweisApp2 heruntergefahren wird, während eine Authentisierung
oder eine PIN-Änderung mit Komfort-Kartenlesegerät durchgeführt wird,
kann es unter Windows und macOS zu einem Absturz kommen.
- Unter Mac OS kommt es vereinzelt zu Problemen bei der Verwendung des Kobil
ID Token.
- Die PIN-Änderung über ein Smartphone als Kartenlesegerät wird nicht
unterstützt.
- Unter Umständen kommt es zu Stabilitätsproblemen der NFC-Schnittstelle
auf Android.

View File

@ -8,14 +8,14 @@ der AusweisApp2 unterstützt.
Betriebssysteme
"""""""""""""""
- OS X 10.9
- OS X 10.10
- OS X 10.11
- macOS 10.12
- macOS 10.13
- Windows 7 SP1 (32bit / 64bit)
- Windows 8.1 (64bit)
@ -48,13 +48,13 @@ und sollte daher mit allen marktüblichen Browsern verwendet werden können.
Im Rahmen der Qualitätssicherung werden die folgenden Browserversionen
getestet.
- Firefox 55
- Firefox 57
- Chrome 61
- Chrome 62
- Internet Explorer 11
- Safari 10
- Safari 11
@ -90,6 +90,13 @@ Zusätzlich werden folgende nicht zertifizierte Kartenleser getestet.
Aktuelle Informationen zu Kartenlesern finden Sie auf unserer Webseite:
https://www.ausweisapp.bund.de/fragen-und-antworten/voraussetzungen/
Alle NFC-fähigen Smartphones bzw. Tablets, die die Onlineausweisfunktionalität
unterstützen, können als Kartenlesegerät verwendet werden.
Dabei ist es notwendig die mobile AusweisApp2 auf dem jeweiligen Smartphone
zu installieren und zu starten.
Details hierzu befinden sich auf der Homepage:
https://www.ausweisapp.bund.de/mobile-geraete/
Android
@ -105,9 +112,9 @@ Im mobilen Umfeld ist die Funktionalität jedoch abhängig von der vom
Diensteanbieter umgesetzten Aktivierung. Daher empfehlen wir einen der
folgenden Browser zu verwenden.
- Firefox Klar 1.3
- Firefox Klar 2.5
- Chrome 61
- Chrome 63
- Android System WebView 60
@ -119,6 +126,10 @@ Alle NFC-fähigen Smartphones bzw. Tablets, die die Onlineausweisfunktionalität
unterstützen. Details hierzu befinden sich auf der Homepage:
https://www.ausweisapp.bund.de/mobile-geraete/
Ebenfalls ist es möglich ein weiteres Smartphone als Kartenlesegerät zu
verwenden. Dabei ist es notwendig die mobile AusweisApp2 auf dem jeweiligen
Smartphone zu installieren und zu starten.
Darüber hinaus ist die Verwendung eines Bluetooth-Kartenlesegeräts möglich.
Folgendes Bluetooth-Kartenlesegerät wird von der AusweiApp2 unterstützt:

View File

@ -1,6 +1,14 @@
Versionen
=========
Versionszweig 1.14
------------------
.. toctree::
:maxdepth: 1
1.14.0
Versionszweig 1.12
------------------
.. toctree::

View File

@ -65,6 +65,11 @@ JSON messages from the SDK. Furthermore it has a function which is called
when an existing connection with the SDK is dropped by the SDK. Both interfaces
are listed below and you need to import them into your build environment.
.. important::
It is required that you place the AIDL files under subdirectory
"aidl/com.governikus.ausweisapp2". Also the interface methods
names must be exactly the same.
.. seealso::
https://developer.android.com/guide/components/aidl.html
@ -125,7 +130,7 @@ fingerprint of the authentic SDK certificate is the following:
.. code-block:: text
B0 2A C7 6B 50 A4 97 AE 81 0A EA C2 25 98 18 7B 3D 42 90 27 7D 08 51 A7 FA 8E 1A EA 5A 97 98 70
B0:2A:C7:6B:50:A4:97:AE:81:0A:EA:C2:25:98:18:7B:3D:42:90:27:7D:08:51:A7:FA:8E:1A:EA:5A:97:98:70
@ -143,7 +148,7 @@ hash value of a signed application on Android can be verified.
public class AusweisApp2Validator
{
private static final String PACKAGE = "com.governikus.ausweisapp2";
private static final String FINGERPRINT = "..." // see above;
private static final String FINGERPRINT = "..."; // see above
public boolean isValid()
{
@ -188,17 +193,15 @@ To differentiate between different connected clients, virtual sessions are used
once the binding is completed. These sessions are discussed in a separate
section, section :ref:`android_create_session`.
.. seealso::
:ref:`android_disconnect_sdk`
Create connection
^^^^^^^^^^^^^^^^^
First of all, in order to bind to the service, one needs to instantiate
an Android ServiceConnection. Subsequently, the object is passed to the
Android API and the contained methods are invoked by Android on service
connection and disconnection.
First of all, in order to bind to the service, one needs to instantiate an
Android ServiceConnection.
Subsequently, the object is passed to the Android API and the contained
methods are invoked
by Android on service connection and disconnection.
.. code-block:: java
@ -226,12 +229,13 @@ connection and disconnection.
Bind service to raw connection
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
In order to perform the actual binding a directed Intent, which
identifies the AusweisApp2 SDK, is created. This Intent is send
to the Android API along with the ServiceConnection created above.
In order to perform the actual binding a directed Intent, which identifies
the AusweisApp2 SDK, is created.
This Intent is send to
the Android API along with the ServiceConnection created above.
This API call either starts up the SDK if it is the first client,
or connects to the running SDK instance if there is already
another client bound.
or connects to the running SDK instance
if there is already another client bound.
.. code-block:: java
@ -472,14 +476,15 @@ The **receive** method is called each time the SDK sends a message.
:ref:`android_create_session`
.. _android_disconnect_sdk:
Disconnect from SDK
-------------------
In order to disconnect from the AusweisApp2 SDK you need to invalidate your
instance of **IBinder**. You can unbind from the SDK Android service to undo
your binding, like shown in the code listing below.
instance of **IBinder**. There are two possibilities to do this. The first
one is to unbind from the SDK Android service to undo your binding, like
shown in the code listing below. The second one is to return false in the
**pingBinder** function of your IBinder instance.
.. code-block:: java
@ -670,10 +675,7 @@ are shown in code listing below.
}
}
This class must now be added to the activity:
.. code-block:: java
// [...]
ForegroundDispatcher mDispatcher = new ForegroundDispatcher(this);

View File

@ -104,7 +104,7 @@ We assume that the user did not connect the card reader.
{"cmd": "CANCEL"}
{"msg": "AUTH", "result": {"description":"The operation was aborted due to cancellation by user.","language":"en","major":"http://www.bsi.bund.de/ecard/api/1.1/resultmajor#error","message":"The process was cancelled by the user.","minor":"http://www.bsi.bund.de/ecard/api/1.1/resultminor/sal#cancellationByUser"},"url":"https://test.governikus-eid.de/DEMO/?errID=123456"}
{"msg": "AUTH", "result": {"description":"The process was cancelled by the user.","language":"en","major":"http://www.bsi.bund.de/ecard/api/1.1/resultmajor#error","message":"The process was cancelled by the user.","minor":"http://www.bsi.bund.de/ecard/api/1.1/resultminor/sal#cancellationByUser"},"url":"https://test.governikus-eid.de/DEMO/?errID=123456"}
@ -134,5 +134,5 @@ We assume that the user did not connect the card reader.
{"cmd": "CANCEL"}
{"msg": "AUTH", "result": {"description":"The operation was aborted due to cancellation by user.","language":"en","major":"http://www.bsi.bund.de/ecard/api/1.1/resultmajor#error","message":"The process was cancelled by the user.","minor":"http://www.bsi.bund.de/ecard/api/1.1/resultminor/sal#cancellationByUser"},"url":"https://test.governikus-eid.de/DEMO/?errID=123456"}
{"msg": "AUTH", "result": {"description":"The process was cancelled by the user.","language":"en","major":"http://www.bsi.bund.de/ecard/api/1.1/resultmajor#error","message":"The process was cancelled by the user.","minor":"http://www.bsi.bund.de/ecard/api/1.1/resultminor/sal#cancellationByUser"},"url":"https://test.governikus-eid.de/DEMO/?errID=123456"}

View File

@ -1,4 +1,4 @@
CMAKE_MINIMUM_REQUIRED(VERSION 3.3.0)
CMAKE_MINIMUM_REQUIRED(VERSION 3.5.0)
IF(POLICY CMP0010)
CMAKE_POLICY(SET CMP0010 NEW)
@ -19,6 +19,13 @@ INCLUDE(ExternalProject)
INCLUDE(Helper)
INCLUDE(DVCS)
IF(ANDROID)
GET_ANDROID_TOOLCHAIN_VARS(ANDROID_TOOLCHAIN_PREFIX ANDROID_TOOLCHAIN_MACHINE_NAME)
IF(CMAKE_SYSROOT_COMPILE)
SET(UNIFIED_INCLUDE ${CMAKE_SYSROOT_COMPILE}/usr/include)
ENDIF()
ENDIF()
ADD_FLAG(-fstack-protector-strong -fstack-protector NOQUOTES VAR COMPILER_FLAGS)
@ -97,11 +104,11 @@ INCLUDE(Messages)
################################## Versionen
SET(QT 5.8.0)
SET(QT_HASH 0f4c54386d3dbac0606a936a7145cebb7b94b0ca2d29bc001ea49642984824b6)
SET(QT 5.9.3)
SET(QT_HASH 57acd8f03f830c2d7dc29fbe28aaa96781b2b9bdddce94196e6761a0f88c6046)
SET(OPENSSL 1.0.2k)
SET(OPENSSL_HASH 6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0)
SET(OPENSSL 1.0.2n)
SET(OPENSSL_HASH 370babb75f278c39e0c50e8c4e7493bc0f18db6867478341a832a982fd15a8fe)
################################## Files
SET(QT_FILE qt-everywhere-opensource-src-${QT}.tar.xz)
@ -115,7 +122,7 @@ ELSE()
ENDIF()
STRING(SUBSTRING ${QT} 0 3 QT_SUBVERSION)
SET(QT_URL http://download.qt.io/${QT_DEST_DIR}/qt/${QT_SUBVERSION}/${QT}/single)
SET(QT_URL https://download.qt.io/${QT_DEST_DIR}/qt/${QT_SUBVERSION}/${QT}/single)
SET(OPENSSL_URL https://www.openssl.org/source)
IF(ANDROID OR APPLE)
@ -127,24 +134,6 @@ IF(ANDROID OR APPLE)
ENDIF()
ENDIF()
################################## Android NDK /SDK
#########################################################################
IF(ANDROID)
FIND_PROGRAM(SED_CMD sed CMAKE_FIND_ROOT_PATH_BOTH)
IF(SED_CMD)
MESSAGE(STATUS "Using 'sed' command... ${SED_CMD}")
ELSE()
MESSAGE(FATAL_ERROR "Cannot find 'sed' command")
ENDIF()
ENDIF()
IF(IOS)
SET(HOST --host=arm-apple-darwin7)
SET(HOST64 --host=aarch64-apple-darwin)
SET(IOS_ARCH armv7)
SET(IOS_ARCH64 arm64)
ENDIF()
SET(ENABLED_TARGETS)
@ -157,10 +146,11 @@ SET(OPENSSL_CONFIGURE_FLAGS no-ssl2 no-ssl3 no-ssl3-method no-dtls no-srp no-ide
IF(IOS)
SET(OPENSSL_PATCH_COMMAND ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/openssl_iOS.patch && )
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} iphoneos-cross)
SET(OPENSSL_PATCH_AFTER_CONFIGURE ${SH_CMD} ${PATCHES_DIR}/openssl_iOS_perl.sh ${CMAKE_IOS_SDK_ROOT} &&)
SET(OPENSSL_ENV export CROSS_TOP=${CMAKE_IOS_DEVELOPER_ROOT} && export CROSS_SDK=iPhoneOS.sdk &&)
SET(OPENSSL_COMPILER_FLAGS "-arch arm64")
ELSEIF(APPLE)
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} darwin64-x86_64-cc)
#SET(OPENSSL_PATCH_AFTER_CONFIGURE ${SH_CMD} ${PATCHES_DIR}/openssl_MacOS_perl.sh &&)
SET(COMPILER_FLAGS "${COMPILER_FLAGS} -mmacosx-version-min=10.9")
ELSEIF(MINGW)
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} mingw)
ELSEIF(MSVC)
@ -181,19 +171,25 @@ ELSEIF(ANDROID)
ENDIF()
SET(OPENSSL_ENV export ANDROID_DEV=${CMAKE_SYSROOT}/usr &&)
IF(UNIFIED_INCLUDE)
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} -D__ANDROID_API__=${CMAKE_SYSTEM_VERSION} -isystem${UNIFIED_INCLUDE} -isystem${UNIFIED_INCLUDE}/${ANDROID_TOOLCHAIN_MACHINE_NAME})
ENDIF()
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} --cross-compile-prefix=${CMAKE_C_ANDROID_TOOLCHAIN_PREFIX} ${OPENSSL_ARCH})
SET(OPENSSL_PATCH_COMMAND ${PATCH_CMD} -p0 ${PATCH_OPTIONS} ${PATCHES_DIR}/soname/openssl_makefile.shared.patch && ${SH_CMD} ${PATCHES_DIR}/soname/openssl_sed.sh && )
ELSEIF(BSD)
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} BSD-x86_64)
ELSEIF(LINUX)
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} linux-x86_64)
IF(CMAKE_SYSTEM_PROCESSOR STREQUAL "i686")
SET(OPENSSL_ARCH linux-generic32)
ELSE()
SET(OPENSSL_ARCH linux-x86_64)
ENDIF()
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} ${OPENSSL_ARCH})
ELSE()
MESSAGE(FATAL_ERROR "Unsupported system")
ENDIF()
IF(NOT OPENSSL_PREBUILD)
SET(OPENSSL_PREBUILD ${OPENSSL_PATCH_AFTER_CONFIGURE} ${MAKE} depend)
SET(OPENSSL_PREBUILD ${MAKE} depend)
ENDIF()
IF(NOT OPENSSL_INSTALL_TARGET)
@ -201,42 +197,6 @@ IF(NOT OPENSSL_INSTALL_TARGET)
ENDIF()
# OpenSSL does not support multiple make jobs!
IF(IOS)
ExternalProject_Add(openssl64
URL ${OPENSSL_URL}/${OPENSSL_FILE}
URL_HASH SHA256=${OPENSSL_HASH}
DOWNLOAD_DIR ${PACKAGES_DIR}
PATCH_COMMAND
${OPENSSL_PATCH_COMMAND}
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/openssl-fix-no-engine-build.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/openssl_rsa_psk.patch
CONFIGURE_COMMAND ${PERL_EXECUTABLE} Configure --prefix=${PROJECT_BINARY_DIR}/openssl64-prefix/tmp ${OPENSSL_CONFIGURE_FLAGS} "-arch ${IOS_ARCH64}" "${COMPILER_FLAGS}"
BUILD_COMMAND ${OPENSSL_PATCH_AFTER_CONFIGURE} ${MAKE} depend && ${MAKE}
BUILD_IN_SOURCE 1
INSTALL_COMMAND ${MAKE} install_sw
)
ExternalProject_Add(openssl
DEPENDS openssl64
URL ${OPENSSL_URL}/${OPENSSL_FILE}
URL_HASH SHA256=${OPENSSL_HASH}
DOWNLOAD_DIR ${PACKAGES_DIR}
PATCH_COMMAND
${OPENSSL_PATCH_COMMAND}
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/openssl-fix-no-engine-build.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/openssl_rsa_psk.patch
CONFIGURE_COMMAND ${PERL_EXECUTABLE} Configure --prefix=${PROJECT_BINARY_DIR}/openssl-prefix/tmp ${OPENSSL_CONFIGURE_FLAGS} "-arch ${IOS_ARCH}" "${COMPILER_FLAGS}"
BUILD_COMMAND ${OPENSSL_PATCH_AFTER_CONFIGURE} ${MAKE} depend && ${MAKE}
BUILD_IN_SOURCE 1
INSTALL_COMMAND ${MAKE} install_sw
)
ADD_CUSTOM_COMMAND(TARGET openssl POST_BUILD COMMAND ${SH_CMD} ${PATCHES_DIR}/create_multi_architecture_build.sh ${PROJECT_BINARY_DIR}/openssl-prefix/tmp ${PROJECT_BINARY_DIR}/openssl64-prefix/tmp ${DESTINATION_DIR})
ELSE()
ExternalProject_Add(openssl
URL ${OPENSSL_URL}/${OPENSSL_FILE}
URL_HASH SHA256=${OPENSSL_HASH}
@ -258,7 +218,6 @@ ExternalProject_Add_Step(openssl prebuild
DEPENDEES configure
DEPENDERS build
WORKING_DIRECTORY <BINARY_DIR>)
ENDIF()
IF(UNIX)
ADD_CUSTOM_COMMAND(TARGET openssl POST_BUILD COMMAND chmod 755 ${DESTINATION_DIR}/lib/libssl*${CMAKE_SHARED_LIBRARY_SUFFIX} ${DESTINATION_DIR}/lib/libcrypto*${CMAKE_SHARED_LIBRARY_SUFFIX})
@ -287,9 +246,18 @@ ELSE()
SET(QT_CONFIGURE_FLAGS -release -no-qml-debug)
ENDIF()
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} -prefix ${DESTINATION_DIR} -opensource -confirm-license -qt-zlib -no-mtdev -qt-libpng -qt-libjpeg -no-harfbuzz -qt-pcre -system-proxies -no-compile-examples -nomake examples -nomake tests -no-sql-sqlite -openssl-linked -I ${DESTINATION_DIR}/include -L ${DESTINATION_DIR}/lib)
LIST(APPEND NO_FEATURES bearermanagement ftp paint_debug)
LIST(APPEND NO_FEATURES imageformat_bmp imageformat_ppm imageformat_xbm)
LIST(APPEND NO_FEATURES sharedmemory textodfwriter)
FOREACH(feature ${NO_FEATURES})
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} -no-feature-${feature})
ENDFOREACH()
SET(QT_CONFIGURE_FLAGS_OTHER -no-journald -no-dbus -no-directfb -no-linuxfb)
SET(QT_CONFIGURE_FLAGS_SKIP_MODULES -skip qtscxml -skip qtxmlpatterns -skip qtwebchannel -skip qtwebengine -skip qtscript -skip qtactiveqt -skip qtlocation -skip qtserialbus -skip qtserialport -skip qtgamepad -skip qtvirtualkeyboard -skip qtcanvas3d -skip qtcharts -skip qtdatavis3d -skip qt3d -skip qtpurchasing)
SET(QT_CONFIGURE_FLAGS_SKIP_MODULES -skip qtscxml -skip qtxmlpatterns -skip qtwebchannel -skip qtwebengine -skip qtscript -skip qtactiveqt -skip qtlocation -skip qtserialbus -skip qtserialport -skip qtgamepad -skip qtvirtualkeyboard -skip qtcanvas3d -skip qtcharts -skip qtdatavis3d -skip qt3d -skip qtpurchasing -skip qtwayland -skip qtremoteobjects -skip qtspeech -skip qtwebview)
SET(QT_CONFIGURE ./configure)
IF(IOS)
@ -339,17 +307,12 @@ ExternalProject_Add(qt
PATCH_COMMAND ${QT_PATCH_COMMAND}
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Make-server-side-signature-algorithms-configurable.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Use-apksigner-by-default-if-available-to-sign-the-AP.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Android-Add-support-for-sendCommand-to-QNearFieldTarget.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Android-QNearfieldTarget-Introduce-maxCommandLength.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-QNearfieldTarget-Introduce-set-keepConnection-and-disconnect.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Use-defaultSize-according-to-svg-standard-in-svg-plugin.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Do-not-request-an-unnessessary-dangerous-right.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Introduce-QNetworkAccessManager-clearConnectionCache.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Introduce-QNetworkAccessManager-useAuthenticationManagerFrom.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Make-variant-selection-possible-if-base-is-missing.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Add-debug-stream-operator-for-QNetworkProxyQuery.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Allow-using-nfc-when-running-as-a-service.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Register-additional-meta-types.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Change-build-configuration-for-Qt-on-iOS.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Disable-unused-imageformats.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Avoid-using-deprecated-APIs-on-iOS-10.0.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Add-IsoDep-to-the-techList-on-Android.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-macOS-iOS-Fix-garbled-text-under-some-conditions.patch &&
${CMAKE_COMMAND} -E touch qtbase/.gitignore
CONFIGURE_COMMAND ${QT_ENV} ${QT_CONFIGURE} ${QT_CONFIGURE_FLAGS} ${QT_CONFIGURE_FLAGS_SKIP_MODULES}
BUILD_COMMAND ${MAKE} ${MAKE_JOBS}

View File

@ -17,7 +17,7 @@ Unterstützte Compiler:
Notwendige Bibliotheken:
- Qt >= 5.8
- Qt >= 5.9
- http://www.qt.io/download/
@ -31,12 +31,12 @@ Notwendige Bibliotheken:
- openssl_rsa_psk.patch
- pcsclite >= 1.8 (nur Linux)
- pcsclite >= 1.8 (nur Linux/FreeBSD)
Notwendige Tools:
- CMake >= 3.3.0 (>= 3.7.1 für Android)
- CMake >= 3.5.0 (>= 3.7.1 für Android)
- http://www.cmake.org
@ -221,7 +221,7 @@ Komponenten vorhanden sein:
wird. Dies kann mittels der Umgebungsvariable ANDROID_BUILD_TOOLS_REVISION behoben werden.
Die genaue Version ist im Android Manager vom Android SDK (./tools/android) hinterlegt.
- Getestet: 26.0.1
- Getestet: 27.0.1
- Um Qt erfolgreich zu bauen, sind verschiedene API Level von Android notwendig.
Diese sollten mindestens Level 18 und 21 sein. Nähere Informationen dazu

View File

@ -1,70 +0,0 @@
#!/bin/bash
DIR=$1
DIR64=$2
PREFIX_PATH=$3
#
# Copy content of all folders except the library files
#
echo "Copy content to ${PREFIX_PATH}:"
for dir in ${DIR}/* ; do
if [ -d $dir ]
then
dirname=$(basename "$dir")
if [ "$dirname" != "lib" ]
then
echo "* Copy content of ${dir}"
mkdir -p ${PREFIX_PATH}/${dirname}
cp -R ${dir}/* ${PREFIX_PATH}/${dirname}
fi
fi
done
#
# Make multi-architecture libraries
#
echo "Create multi-architecture libraries in ${PREFIX_PATH}/lib:"
mkdir -p ${PREFIX_PATH}/lib
cd ${PREFIX_PATH}/lib
for file in ${DIR}/lib/* ; do
filename=$(basename "$file")
if [[ ( $filename == *.dylib ) || ( $filename == *.a ) ]]
then
if [ -h $file ]
then
# create symbolic links for multi-architecture library
resolvedfilename=$(readlink "$file")
echo "* Create sym link ${filename}"
ln -s ${resolvedfilename} ${filename}
else
# create multi-architecture library
file64=${DIR64}/lib/${filename}
if [ -f $file64 ]
then
echo "* Create lib ${filename}"
lipo $file $file64 -create -output ${filename}
else
echo "* 64bit library not found ${file64}"
fi
fi
elif [[ ( $filename == pkgconfig ) ]]
then
mkdir -p ${PREFIX_PATH}/lib/pkgconfig
for configfile in ${DIR}/lib/pkgconfig/* ; do
configfilename=$(basename "$configfile")
sed "s:${DIR}:${PREFIX_PATH}:g" "$configfile" > pkgconfig/${configfilename}
echo "* Copy adapted package config file ${configfilename}"
done
elif [ -f $file ]
then
echo "* Skip file ${filename}"
else
echo "* Skip directory ${filename}"
fi
done

View File

@ -1,4 +1,4 @@
From 08b250d56592b8e385cfc37c2d938b839653c264 Mon Sep 17 00:00:00 2001
From aeae7469061c1675d651224789fc664d6809b0d9 Mon Sep 17 00:00:00 2001
From: "Dr. Stephen Henson" <steve@openssl.org>
Date: Sat, 16 Jan 2016 16:11:34 +0000
Subject: [PATCH] fix no-engine build
@ -11,10 +11,10 @@ Reviewed-by: Richard Levitte <levitte@openssl.org>
util/mk1mf.pl | 3 +--
3 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/crypto/ts/ts.h b/crypto/ts/ts.h
index 2daa1b2fb..fc8c14b2d 100644
--- a/crypto/ts/ts.h
+++ b/crypto/ts/ts.h
diff --git x/crypto/ts/ts.h y/crypto/ts/ts.h
index 2daa1b2fb5..fc8c14b2d0 100644
--- x/crypto/ts/ts.h
+++ y/crypto/ts/ts.h
@@ -737,9 +737,11 @@ EVP_PKEY *TS_CONF_load_key(const char *file, const char *pass);
const char *TS_CONF_get_tsa_section(CONF *conf, const char *section);
int TS_CONF_set_serial(CONF *conf, const char *section, TS_serial_cb cb,
@ -27,10 +27,10 @@ index 2daa1b2fb..fc8c14b2d 100644
int TS_CONF_set_signer_cert(CONF *conf, const char *section,
const char *cert, TS_RESP_CTX *ctx);
int TS_CONF_set_certs(CONF *conf, const char *section, const char *certs,
diff --git a/util/libeay.num b/util/libeay.num
index 2094ab364..23ade08e2 100755
--- a/util/libeay.num
+++ b/util/libeay.num
diff --git x/util/libeay.num y/util/libeay.num
index fddfe1cbb2..a76424ceab 100755
--- x/util/libeay.num
+++ y/util/libeay.num
@@ -3874,7 +3874,7 @@ b2i_PVK_bio 4250 EXIST::FUNCTION:RC4
ASN1_UTCTIME_adj 4251 EXIST::FUNCTION:
TS_TST_INFO_new 4252 EXIST::FUNCTION:
@ -49,15 +49,15 @@ index 2094ab364..23ade08e2 100755
EVP_PKEY_verify_init 4474 EXIST::FUNCTION:
TS_CONF_set_policies 4475 EXIST::FUNCTION:
ASN1_PCTX_new 4476 EXIST::FUNCTION:
diff --git a/util/mk1mf.pl b/util/mk1mf.pl
index 7a3ae11f7..6ada6fa62 100755
--- a/util/mk1mf.pl
+++ b/util/mk1mf.pl
diff --git x/util/mk1mf.pl y/util/mk1mf.pl
index 6b31496ed1..ccfb24ca55 100755
--- x/util/mk1mf.pl
+++ y/util/mk1mf.pl
@@ -428,7 +428,6 @@ EOF
{
$extra_install .= <<"EOF"
\$(MKDIR) \"\$(INSTALLTOP)${o}lib${o}engines\"
- \$(CP) \"\$(E_SHLIB)\" \"\$(INSTALLTOP)${o}lib${o}engines\"
- \$(CP) \$(E_SHLIB) \"\$(INSTALLTOP)${o}lib${o}engines\"
EOF
}
}
@ -71,5 +71,5 @@ index 7a3ae11f7..6ada6fa62 100755
exe: \$(T_EXE) \$(BIN_D)$o\$(E_EXE)$exep
--
2.11.0
2.15.0

View File

@ -1,4 +0,0 @@
#!/bin/sh
echo "Patching..."
perl -i -pe "s|^MAKEDEPPROG=makedepend|MAKEDEPPROG= \\\$(CC) -M|g" Makefile

View File

@ -1,9 +0,0 @@
#!/bin/sh
echo "Patching..."
SDK=$1
echo "SDK: ${SDK}"
perl -i -pe "s|^CC= (.*)|CC= \$1 -miphoneos-version-min=7.1|g" Makefile
perl -i -pe "s|^MAKEDEPPROG=makedepend|MAKEDEPPROG= \\\$(CC) -M|g" Makefile
perl -i -pe "s|isysroot\s\S+\s|isysroot ${SDK} |g" Makefile

View File

@ -1,4 +1,4 @@
From 496ac24b811593df82490643d574a037aa47d80e Mon Sep 17 00:00:00 2001
From e681bc2125a396ff34aab4c3f629683dd0ce28bb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Klitzing?= <aklitzing@gmail.com>
Date: Thu, 23 Apr 2015 20:59:30 +0200
Subject: [PATCH] Introduce TLS-RSA-PSK support
@ -12,21 +12,21 @@ This work has been sponsored by Governikus GmbH & Co. KG.
PR: 2464
---
doc/apps/ciphers.pod | 12 +++
ssl/s3_clnt.c | 122 ++++++++++++++++++++++-----
ssl/s3_clnt.c | 106 ++++++++++++++++++++----
ssl/s3_lib.c | 206 +++++++++++++++++++++++++++++++++++++++++++++-
ssl/s3_srvr.c | 227 ++++++++++++++++++++++++++++++++++++++++++++++++---
ssl/s3_srvr.c | 226 ++++++++++++++++++++++++++++++++++++++++++++++++---
ssl/ssl.h | 2 +
ssl/ssl_ciph.c | 9 +-
ssl/ssl_lib.c | 6 ++
ssl/ssl_locl.h | 2 +
ssl/tls1.h | 36 ++++++++
9 files changed, 587 insertions(+), 35 deletions(-)
9 files changed, 572 insertions(+), 33 deletions(-)
diff --git x/doc/apps/ciphers.pod y/doc/apps/ciphers.pod
index 922455725..234350faa 100644
index fa16124d08..45db06c168 100644
--- x/doc/apps/ciphers.pod
+++ y/doc/apps/ciphers.pod
@@ -583,10 +583,22 @@ Note: these ciphers can also be used in SSL v3.
@@ -585,10 +585,22 @@ Note: these ciphers can also be used in SSL v3.
=head2 Pre shared keying (PSK) cipheruites
@ -50,10 +50,10 @@ index 922455725..234350faa 100644
=head2 Deprecated SSL v2.0 cipher suites.
diff --git x/ssl/s3_clnt.c y/ssl/s3_clnt.c
index 32f2f1aee..cd05f4d52 100644
index 5b8b2da59f..ae0d4d840c 100644
--- x/ssl/s3_clnt.c
+++ y/ssl/s3_clnt.c
@@ -337,7 +337,7 @@ int ssl3_connect(SSL *s)
@@ -342,7 +342,7 @@ int ssl3_connect(SSL *s)
}
#endif
/* Check if it is anon DH/ECDH, SRP auth */
@ -62,7 +62,7 @@ index 32f2f1aee..cd05f4d52 100644
if (!
(s->s3->tmp.
new_cipher->algorithm_auth & (SSL_aNULL | SSL_aSRP))
@@ -1419,9 +1419,9 @@ int ssl3_get_key_exchange(SSL *s)
@@ -1424,9 +1424,9 @@ int ssl3_get_key_exchange(SSL *s)
}
#ifndef OPENSSL_NO_PSK
/*
@ -75,53 +75,30 @@ index 32f2f1aee..cd05f4d52 100644
*/
if (alg_k & SSL_kPSK) {
s->session->sess_cert = ssl_sess_cert_new();
@@ -1466,7 +1466,12 @@ int ssl3_get_key_exchange(SSL *s)
@@ -1471,7 +1471,12 @@ int ssl3_get_key_exchange(SSL *s)
al = SSL_AD_DECODE_ERROR;
#ifndef OPENSSL_NO_PSK
- if (alg_k & SSL_kPSK) {
+ /* handle PSK identity hint */
+ if (alg_k & (SSL_kPSK
+ if (alg_k & SSL_kPSK
+#ifndef OPENSSL_NO_RSA
+ | SSL_kRSAPSK
+ || alg_k & SSL_kRSAPSK
+#endif
+ )) {
+ ) {
param_len = 2;
if (param_len > n) {
SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, SSL_R_LENGTH_TOO_SHORT);
@@ -1610,7 +1615,11 @@ int ssl3_get_key_exchange(SSL *s)
} else
#endif /* !OPENSSL_NO_SRP */
#ifndef OPENSSL_NO_RSA
- if (alg_k & SSL_kRSA) {
+ if (alg_k & (SSL_kRSA
+#ifndef OPENSSL_NO_PSK
+ | SSL_kRSAPSK
+#endif
+ )) {
/* Temporary RSA keys only allowed in export ciphersuites */
if (!SSL_C_IS_EXPORT(s->s3->tmp.new_cipher)) {
al = SSL_AD_UNEXPECTED_MESSAGE;
@@ -2034,8 +2043,16 @@ int ssl3_get_key_exchange(SSL *s)
}
@@ -2041,7 +2046,7 @@ int ssl3_get_key_exchange(SSL *s)
}
} else {
- /* aNULL, aSRP or kPSK do not need public keys */
/* aNULL, aSRP or kPSK do not need public keys */
- if (!(alg_a & (SSL_aNULL | SSL_aSRP)) && !(alg_k & SSL_kPSK)) {
+ /* aNULL, aSRP, kPSK or kRSAPSK do not need public keys */
+ if (!(alg_a & (SSL_aNULL | SSL_aSRP))
+#ifndef OPENSSL_NO_PSK
+ && !(alg_k & (SSL_kPSK
+#ifndef OPENSSL_NO_RSA
+ | SSL_kRSAPSK
+#endif
+ ))
+#endif
+ ) {
+ if (!(alg_a & (SSL_aNULL | SSL_aSRP)) && !(alg_k & SSL_kPSK) && !(alg_k & SSL_kRSAPSK)) {
/* Might be wrong key type, check it */
if (ssl3_check_cert_and_algorithm(s))
/* Otherwise this shouldn't happen */
@@ -3124,7 +3141,11 @@ int ssl3_send_client_key_exchange(SSL *s)
@@ -3130,7 +3135,11 @@ int ssl3_send_client_key_exchange(SSL *s)
}
#endif
#ifndef OPENSSL_NO_PSK
@ -134,7 +111,7 @@ index 32f2f1aee..cd05f4d52 100644
/*
* The callback needs PSK_MAX_IDENTITY_LEN + 1 bytes to return a
* \0-terminated identity. The last byte is for us for simulating
@@ -3132,8 +3153,8 @@ int ssl3_send_client_key_exchange(SSL *s)
@@ -3138,8 +3147,8 @@ int ssl3_send_client_key_exchange(SSL *s)
*/
char identity[PSK_MAX_IDENTITY_LEN + 2];
size_t identity_len;
@ -144,7 +121,7 @@ index 32f2f1aee..cd05f4d52 100644
unsigned int pre_ms_len = 0, psk_len = 0;
int psk_err = 1;
@@ -3165,14 +3186,34 @@ int ssl3_send_client_key_exchange(SSL *s)
@@ -3171,14 +3180,34 @@ int ssl3_send_client_key_exchange(SSL *s)
ERR_R_INTERNAL_ERROR);
goto psk_err;
}
@ -187,7 +164,7 @@ index 32f2f1aee..cd05f4d52 100644
if (s->session->psk_identity_hint != NULL)
OPENSSL_free(s->session->psk_identity_hint);
@@ -3202,8 +3243,41 @@ int ssl3_send_client_key_exchange(SSL *s)
@@ -3208,8 +3237,41 @@ int ssl3_send_client_key_exchange(SSL *s)
pre_ms_len);
s2n(identity_len, p);
memcpy(p, identity, identity_len);
@ -229,34 +206,34 @@ index 32f2f1aee..cd05f4d52 100644
psk_err:
OPENSSL_cleanse(identity, sizeof(identity));
OPENSSL_cleanse(psk_or_pre_ms, sizeof(psk_or_pre_ms));
@@ -3574,7 +3648,11 @@ int ssl3_check_cert_and_algorithm(SSL *s)
@@ -3580,7 +3642,11 @@ int ssl3_check_cert_and_algorithm(SSL *s)
}
#endif
#ifndef OPENSSL_NO_RSA
- if (alg_k & SSL_kRSA) {
+ if (alg_k & (SSL_kRSA
+ if (alg_k & SSL_kRSA
+#ifndef OPENSSL_NO_PSK
+ | SSL_kRSAPSK
+ || alg_k & SSL_kRSAPSK
+#endif
+ )) {
+ ) {
if (!SSL_C_IS_EXPORT(s->s3->tmp.new_cipher) &&
!has_bits(i, EVP_PK_RSA | EVP_PKT_ENC)) {
SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,
@@ -3641,7 +3719,11 @@ int ssl3_check_cert_and_algorithm(SSL *s)
@@ -3647,7 +3713,11 @@ int ssl3_check_cert_and_algorithm(SSL *s)
if (SSL_C_IS_EXPORT(s->s3->tmp.new_cipher) &&
pkey_bits > SSL_C_EXPORT_PKEYLENGTH(s->s3->tmp.new_cipher)) {
#ifndef OPENSSL_NO_RSA
- if (alg_k & SSL_kRSA) {
+ if (alg_k & (SSL_kRSA
+ if (alg_k & SSL_kRSA
+#ifndef OPENSSL_NO_PSK
+ | SSL_kRSAPSK
+ || alg_k & SSL_kRSAPSK
+#endif
+ )) {
+ ) {
if (rsa == NULL) {
SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,
SSL_R_MISSING_EXPORT_TMP_RSA_KEY);
diff --git x/ssl/s3_lib.c y/ssl/s3_lib.c
index 0385e039c..ce69ec470 100644
index 1014a3fce1..0187d508a1 100644
--- x/ssl/s3_lib.c
+++ y/ssl/s3_lib.c
@@ -1765,6 +1765,74 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
@ -482,15 +459,15 @@ index 0385e039c..ce69ec470 100644
#ifndef OPENSSL_NO_PSK
/* with PSK there must be server callback set */
- if ((alg_k & SSL_kPSK) && s->psk_server_callback == NULL)
+ if ((alg_k & (SSL_kPSK | SSL_kRSAPSK)) && s->psk_server_callback == NULL)
+ if ((alg_k & SSL_kPSK || alg_k & SSL_kRSAPSK) && s->psk_server_callback == NULL)
continue;
#endif /* OPENSSL_NO_PSK */
diff --git x/ssl/s3_srvr.c y/ssl/s3_srvr.c
index ea56f9ca8..2b1797cc8 100644
index 0fb4845d44..3498836e7d 100644
--- x/ssl/s3_srvr.c
+++ y/ssl/s3_srvr.c
@@ -458,19 +458,23 @@ int ssl3_accept(SSL *s)
@@ -467,19 +467,22 @@ int ssl3_accept(SSL *s)
/*
* only send if a DH key exchange, fortezza or RSA but we have a
@ -513,15 +490,14 @@ index ea56f9ca8..2b1797cc8 100644
- */
#ifndef OPENSSL_NO_PSK
- || ((alg_k & SSL_kPSK) && s->ctx->psk_identity_hint)
+ || ((alg_k & (SSL_kPSK
+ || (alg_k & SSL_kPSK && s->ctx->psk_identity_hint)
+#ifndef OPENSSL_NO_RSA
+ | SSL_kRSAPSK
+ || (alg_k & SSL_kRSAPSK && s->ctx->psk_identity_hint)
+#endif
+ )) && s->ctx->psk_identity_hint)
#endif
#ifndef OPENSSL_NO_SRP
/* SRP: send ServerKeyExchange */
@@ -526,11 +530,14 @@ int ssl3_accept(SSL *s)
@@ -535,11 +538,14 @@ int ssl3_accept(SSL *s)
(s->s3->tmp.new_cipher->algorithm_auth & SSL_aKRB5) ||
/* don't request certificate for SRP auth */
(s->s3->tmp.new_cipher->algorithm_auth & SSL_aSRP)
@ -538,49 +514,56 @@ index ea56f9ca8..2b1797cc8 100644
/* no cert request */
skip = 1;
s->s3->tmp.cert_request = 0;
@@ -1830,7 +1837,11 @@ int ssl3_send_server_key_exchange(SSL *s)
@@ -1835,7 +1841,11 @@ int ssl3_send_server_key_exchange(SSL *s)
} else
#endif /* !OPENSSL_NO_ECDH */
#ifndef OPENSSL_NO_PSK
- if (type & SSL_kPSK) {
+ if (type & (SSL_kPSK
+ if (type & SSL_kPSK
+#ifndef OPENSSL_NO_RSA
+ | SSL_kRSAPSK
+ || type & SSL_kRSAPSK
+#endif
+ )) {
+ ) {
/*
* reserve size for record length and PSK identity hint
*/
@@ -1879,7 +1890,14 @@ int ssl3_send_server_key_exchange(SSL *s)
@@ -1884,7 +1894,8 @@ int ssl3_send_server_key_exchange(SSL *s)
}
if (!(s->s3->tmp.new_cipher->algorithm_auth & (SSL_aNULL | SSL_aSRP))
- && !(s->s3->tmp.new_cipher->algorithm_mkey & SSL_kPSK)) {
+#ifndef OPENSSL_NO_PSK
+ && !(s->s3->tmp.new_cipher->algorithm_mkey & (SSL_kPSK
+#ifndef OPENSSL_NO_RSA
+ | SSL_kRSAPSK
+#endif
+ ))
+#endif
+ ) {
+ && !(s->s3->tmp.new_cipher->algorithm_mkey & SSL_kPSK)
+ && !(s->s3->tmp.new_cipher->algorithm_mkey & SSL_kRSAPSK)) {
if ((pkey = ssl_get_sign_pkey(s, s->s3->tmp.new_cipher, &md))
== NULL) {
al = SSL_AD_DECODE_ERROR;
@@ -1953,7 +1971,11 @@ int ssl3_send_server_key_exchange(SSL *s)
@@ -1899,6 +1910,12 @@ int ssl3_send_server_key_exchange(SSL *s)
} else {
pkey = NULL;
kn = 0;
+ /* Allow space for signature algorithm */
+ if (SSL_USE_SIGALGS(s)) {
+ kn += 4;
+ const unsigned char *sig;
+ kn += tls12_get_psigalgs(s, 1, &sig);
+ }
}
if (!BUF_MEM_grow_clean(buf, n + SSL_HM_HEADER_LENGTH(s) + kn)) {
@@ -1958,7 +1975,11 @@ int ssl3_send_server_key_exchange(SSL *s)
#endif
#ifndef OPENSSL_NO_PSK
- if (type & SSL_kPSK) {
+ if (type & (SSL_kPSK
+ if (type & SSL_kPSK
+#ifndef OPENSSL_NO_RSA
+ | SSL_kRSAPSK
+ || type & SSL_kRSAPSK
+#endif
+ )) {
+ ) {
/* copy PSK identity hint */
s2n(strlen(s->ctx->psk_identity_hint), p);
strncpy((char *)p, s->ctx->psk_identity_hint,
@@ -1969,7 +1991,11 @@ int ssl3_send_server_key_exchange(SSL *s)
@@ -1974,7 +1995,11 @@ int ssl3_send_server_key_exchange(SSL *s)
* points to the space at the end.
*/
#ifndef OPENSSL_NO_RSA
@ -593,7 +576,7 @@ index ea56f9ca8..2b1797cc8 100644
q = md_buf;
j = 0;
for (num = 2; num > 0; num--) {
@@ -2843,6 +2869,181 @@ int ssl3_get_client_key_exchange(SSL *s)
@@ -2870,6 +2895,181 @@ int ssl3_get_client_key_exchange(SSL *s)
goto f_err;
} else
#endif
@ -776,7 +759,7 @@ index ea56f9ca8..2b1797cc8 100644
if (alg_k & SSL_kSRP) {
int param_len;
diff --git x/ssl/ssl.h y/ssl/ssl.h
index 90aeb0ce4..78cf2212e 100644
index 90aeb0ce4e..78cf2212ed 100644
--- x/ssl/ssl.h
+++ y/ssl/ssl.h
@@ -254,6 +254,7 @@ extern "C" {
@ -796,7 +779,7 @@ index 90aeb0ce4..78cf2212e 100644
# define SSL_TXT_DES "DES"
diff --git x/ssl/ssl_ciph.c y/ssl/ssl_ciph.c
index 2ad8f4392..33f6da1be 100644
index ccdf00fa1b..19c4ac0656 100644
--- x/ssl/ssl_ciph.c
+++ y/ssl/ssl_ciph.c
@@ -263,6 +263,7 @@ static const SSL_CIPHER cipher_aliases[] = {
@ -844,10 +827,10 @@ index 2ad8f4392..33f6da1be 100644
kx = "SRP";
break;
diff --git x/ssl/ssl_lib.c y/ssl/ssl_lib.c
index f8054dae6..b835f1fa5 100644
index 3539f4b8d2..df6a45bdc4 100644
--- x/ssl/ssl_lib.c
+++ y/ssl/ssl_lib.c
@@ -2434,8 +2434,14 @@ void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher)
@@ -2442,8 +2442,14 @@ void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher)
#ifndef OPENSSL_NO_PSK
mask_k |= SSL_kPSK;
@ -863,7 +846,7 @@ index f8054dae6..b835f1fa5 100644
#endif
diff --git x/ssl/ssl_locl.h y/ssl/ssl_locl.h
index d50edd18c..3c59fff1b 100644
index aeffc00634..25b9f1d5b1 100644
--- x/ssl/ssl_locl.h
+++ y/ssl/ssl_locl.h
@@ -314,6 +314,8 @@
@ -876,7 +859,7 @@ index d50edd18c..3c59fff1b 100644
/* Bits for algorithm_auth (server authentication) */
/* RSA auth */
diff --git x/ssl/tls1.h y/ssl/tls1.h
index 7e237d063..173be499f 100644
index dd1d8c109e..e04e7ddabc 100644
--- x/ssl/tls1.h
+++ y/ssl/tls1.h
@@ -410,6 +410,24 @@ SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb)
@ -930,5 +913,5 @@ index 7e237d063..173be499f 100644
# define TLS1_TXT_SRP_SHA_WITH_3DES_EDE_CBC_SHA "SRP-3DES-EDE-CBC-SHA"
# define TLS1_TXT_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA "SRP-RSA-3DES-EDE-CBC-SHA"
--
2.11.0
2.15.0

View File

@ -0,0 +1,25 @@
From e06d2d0d163501fdb0926175d7c539c7bb413d70 Mon Sep 17 00:00:00 2001
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
Date: Wed, 22 Nov 2017 07:35:56 +0100
Subject: Add IsoDep to the techList on Android
Change-Id: I26c183c1344cd0d9323fcedde82347487eebdffb
---
src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java | 1 +
1 file changed, 1 insertion(+)
diff --git x/qtconnectivity/src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java y/qtconnectivity/src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java
index 345b87d3..a1ae5c37 100644
--- x/qtconnectivity/src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java
+++ y/qtconnectivity/src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java
@@ -127,6 +127,7 @@ public class QtNfc
filters[2] = new IntentFilter();
filters[2].addAction(NfcAdapter.ACTION_TECH_DISCOVERED);
String[][] techList = new String[][]{
+ {"android.nfc.tech.IsoDep"},
{"android.nfc.tech.Ndef"},
{"android.nfc.tech.NdefFormatable"}
};
--
2.14.2

View File

@ -1,80 +0,0 @@
From a65c1ef2833757f49024f13900645abf62d6eb22 Mon Sep 17 00:00:00 2001
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
Date: Tue, 10 Jan 2017 08:52:35 +0100
Subject: Add debug stream operator for QNetworkProxyQuery
Change-Id: Iae215827350e47a8ce31e5828d3ad1ed54564e84
---
src/network/kernel/qnetworkproxy.cpp | 19 +++++++++++++++----
src/network/kernel/qnetworkproxy.h | 4 ++++
2 files changed, 19 insertions(+), 4 deletions(-)
diff --git x/qtbase/src/network/kernel/qnetworkproxy.cpp y/qtbase/src/network/kernel/qnetworkproxy.cpp
index 94719e9c2d..6bd6fa2658 100644
--- x/qtbase/src/network/kernel/qnetworkproxy.cpp
+++ y/qtbase/src/network/kernel/qnetworkproxy.cpp
@@ -1634,10 +1634,6 @@ QList<QNetworkProxy> QNetworkProxyFactory::proxyForQuery(const QNetworkProxyQuer
}
#ifndef QT_NO_DEBUG_STREAM
-/*!
- \since 5.0
- Outputs a QNetworkProxy details to a debug stream
-*/
QDebug operator<<(QDebug debug, const QNetworkProxy &proxy)
{
QDebugStateSaver saver(debug);
@@ -1686,6 +1682,21 @@ QDebug operator<<(QDebug debug, const QNetworkProxy &proxy)
debug << '[' << scaps.join(QLatin1Char(' ')) << ']';
return debug;
}
+
+QDebug operator<<(QDebug debug, const QNetworkProxyQuery &proxyQuery)
+{
+ QDebugStateSaver saver(debug);
+ debug.resetFormat().nospace()
+ << "ProxyQuery("
+ << "type: " << proxyQuery.queryType()
+ << ", protocol: " << proxyQuery.protocolTag()
+ << ", peerPort: " << proxyQuery.peerPort()
+ << ", peerHostName: " << proxyQuery.peerHostName()
+ << ", localPort: " << proxyQuery.localPort()
+ << ", url: " << proxyQuery.url()
+ << ')';
+ return debug;
+}
#endif
QT_END_NAMESPACE
diff --git x/qtbase/src/network/kernel/qnetworkproxy.h y/qtbase/src/network/kernel/qnetworkproxy.h
index 8fcb7e33cf..8699c313e9 100644
--- x/qtbase/src/network/kernel/qnetworkproxy.h
+++ y/qtbase/src/network/kernel/qnetworkproxy.h
@@ -56,6 +56,8 @@ class QNetworkConfiguration;
class QNetworkProxyQueryPrivate;
class Q_NETWORK_EXPORT QNetworkProxyQuery
{
+ Q_GADGET
+
public:
enum QueryType {
TcpSocket,
@@ -65,6 +67,7 @@ public:
UrlRequest,
SctpServer
};
+ Q_ENUM(QueryType)
QNetworkProxyQuery();
explicit QNetworkProxyQuery(const QUrl &requestUrl, QueryType queryType = UrlRequest);
@@ -222,6 +225,7 @@ public:
#ifndef QT_NO_DEBUG_STREAM
Q_NETWORK_EXPORT QDebug operator<<(QDebug debug, const QNetworkProxy &proxy);
+Q_NETWORK_EXPORT QDebug operator<<(QDebug debug, const QNetworkProxyQuery &proxyQuery);
#endif
QT_END_NAMESPACE
--
2.11.0

View File

@ -1,98 +0,0 @@
From b42f7623ee75b651f6e756a73d0f8f385f337220 Mon Sep 17 00:00:00 2001
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
Date: Thu, 26 Jan 2017 15:02:37 +0100
Subject: Allow using nfc when running as a service
With this change it will be possible to use a tag
injected from outside when running as a service.
Intent newIntent = new Intent();
newIntent.putExtra(NfcAdapter.EXTRA_TAG, tag);
QtNative.onNewIntent(newIntent);
Task-number: QTBUG-57646
Change-Id: I628d4357f023a0926e7d61914b39278342ac7161
---
.../src/org/qtproject/qt5/android/nfc/QtNfc.java | 24 ++++++++++++++--------
1 file changed, 15 insertions(+), 9 deletions(-)
diff --git x/qtconnectivity/src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java y/qtconnectivity/src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java
index 47dcf1bf..25c560f8 100644
--- x/qtconnectivity/src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java
+++ y/qtconnectivity/src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java
@@ -62,22 +62,25 @@ public class QtNfc
static public NfcAdapter m_adapter = null;
static public PendingIntent m_pendingIntent = null;
static public IntentFilter[] m_filters;
- static public Activity m_activity;
+ static public Context m_context = null;
+ static public Activity m_activity = null;
static public void setContext(Context context)
{
- if (!(context instanceof Activity)) {
- Log.w(TAG, "NFC only works with Android activities and not in Android services. " +
- "NFC has been disabled.");
+ m_context = context;
+ if (context instanceof Activity) m_activity = (Activity) context;
+ m_adapter = NfcAdapter.getDefaultAdapter(context);
+
+ if (m_activity == null) {
+ Log.w(TAG, "New NFC tags will only be recognized with Android activities and not with Android services.");
return;
}
- m_activity = (Activity)context;
- m_adapter = NfcAdapter.getDefaultAdapter(m_activity);
if (m_adapter == null) {
//Log.e(TAG, "No NFC available");
return;
}
+
m_pendingIntent = PendingIntent.getActivity(
m_activity,
0,
@@ -103,7 +106,8 @@ public class QtNfc
static public boolean start()
{
- if (m_adapter == null) return false;
+ if (m_adapter == null || m_activity == null) return false;
+
m_activity.runOnUiThread(new Runnable() {
public void run() {
//Log.d(TAG, "Enabling NFC");
@@ -136,7 +140,8 @@ public class QtNfc
static public boolean stop()
{
- if (m_adapter == null) return false;
+ if (m_adapter == null || m_activity == null) return false;
+
m_activity.runOnUiThread(new Runnable() {
public void run() {
//Log.d(TAG, "Disabling NFC");
@@ -153,11 +158,11 @@ public class QtNfc
static public boolean isAvailable()
{
- m_adapter = NfcAdapter.getDefaultAdapter(m_activity);
if (m_adapter == null) {
//Log.e(TAG, "No NFC available (Adapter is null)");
return false;
}
+
return m_adapter.isEnabled();
}
@@ -165,6 +170,7 @@ public class QtNfc
{
Log.d(TAG, "getStartIntent");
if (m_activity == null) return null;
+
Intent intent = m_activity.getIntent();
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction()) ||
NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction()) ||
--
2.11.0

View File

@ -1,180 +0,0 @@
From 6483796d9c117a7dee7c2ffcef090600b04bd21c Mon Sep 17 00:00:00 2001
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
Date: Tue, 13 Dec 2016 15:34:32 +0100
Subject: Android: Add support for sendCommand to QNearFieldTarget
For the communication with a German ID card its required to execute
commands. This change enables support for sendCommand.
Change-Id: I95773c047953b244cd5c3e22bfc7abf7f7eb656e
---
src/nfc/qnearfieldtarget.cpp | 3 +-
src/nfc/qnearfieldtarget.h | 3 +-
src/nfc/qnearfieldtarget_android.cpp | 81 +++++++++++++++++++++++-------------
3 files changed, 56 insertions(+), 31 deletions(-)
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget.cpp y/qtconnectivity/src/nfc/qnearfieldtarget.cpp
index 509160c1..a65b4be2 100644
--- x/qtconnectivity/src/nfc/qnearfieldtarget.cpp
+++ y/qtconnectivity/src/nfc/qnearfieldtarget.cpp
@@ -111,7 +111,7 @@ QT_BEGIN_NAMESPACE
/*!
\enum QNearFieldTarget::Error
- This enum describes the error codes that that a near field target reports.
+ This enum describes the error codes that a near field target reports.
\value NoError No error has occurred.
\value UnknownError An unidentified error occurred.
@@ -123,6 +123,7 @@ QT_BEGIN_NAMESPACE
\value InvalidParametersError Invalid parameters were passed to a tag type specific function.
\value NdefReadError Failed to read NDEF messages from the target.
\value NdefWriteError Failed to write NDEF messages to the target.
+ \value CommandError Failed to send a command to the target.
*/
// Copied from qbytearray.cpp
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget.h y/qtconnectivity/src/nfc/qnearfieldtarget.h
index dc081f5e..dfb474f6 100644
--- x/qtconnectivity/src/nfc/qnearfieldtarget.h
+++ y/qtconnectivity/src/nfc/qnearfieldtarget.h
@@ -91,7 +91,8 @@ public:
ChecksumMismatchError,
InvalidParametersError,
NdefReadError,
- NdefWriteError
+ NdefWriteError,
+ CommandError
};
Q_ENUM(Error)
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp y/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
index e0c1616d..478f4d8c 100644
--- x/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
+++ y/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
@@ -43,6 +43,7 @@
#define NDEFTECHNOLOGY "android.nfc.tech.Ndef"
#define NDEFFORMATABLETECHNOLOGY "android.nfc.tech.NdefFormatable"
+#define ISODEPTECHNOLOGY "android.nfc.tech.IsoDep"
#define NFCATECHNOLOGY "android.nfc.tech.NfcA"
#define NFCBTECHNOLOGY "android.nfc.tech.NfcB"
#define NFCFTECHNOLOGY "android.nfc.tech.NfcF"
@@ -84,7 +85,19 @@ QNearFieldTarget::Type NearFieldTarget::type() const
QNearFieldTarget::AccessMethods NearFieldTarget::accessMethods() const
{
- AccessMethods result = NdefAccess;
+ AccessMethods result = UnknownAccess;
+
+ if (m_techList.contains(QStringLiteral(NDEFTECHNOLOGY))
+ || m_techList.contains(QStringLiteral(NDEFFORMATABLETECHNOLOGY)))
+ result |= NdefAccess;
+
+ if (m_techList.contains(QStringLiteral(ISODEPTECHNOLOGY))
+ || m_techList.contains(QStringLiteral(NFCATECHNOLOGY))
+ || m_techList.contains(QStringLiteral(NFCBTECHNOLOGY))
+ || m_techList.contains(QStringLiteral(NFCFTECHNOLOGY))
+ || m_techList.contains(QStringLiteral(NFCVTECHNOLOGY)))
+ result |= TagTypeSpecificAccess;
+
return result;
}
@@ -157,24 +170,23 @@ QNearFieldTarget::RequestId NearFieldTarget::readNdefMessages()
return requestId;
}
-
QNearFieldTarget::RequestId NearFieldTarget::sendCommand(const QByteArray &command)
{
- Q_UNUSED(command);
- Q_EMIT QNearFieldTarget::error(QNearFieldTarget::UnsupportedError, QNearFieldTarget::RequestId());
- return QNearFieldTarget::RequestId();
-
- //Not supported for now
- /*if (command.size() == 0) {
+ if (command.size() == 0) {
Q_EMIT QNearFieldTarget::error(QNearFieldTarget::InvalidParametersError, QNearFieldTarget::RequestId());
return QNearFieldTarget::RequestId();
}
- AndroidNfc::AttachedJNIEnv aenv;
- JNIEnv *env = aenv.jniEnv;
+ // Making sure that target has commands
+ if (!(accessMethods() & TagTypeSpecificAccess))
+ return QNearFieldTarget::RequestId();
+
+ QAndroidJniEnvironment env;
- jobject tagTech;
- if (m_techList.contains(QStringLiteral(NFCATECHNOLOGY))) {
+ QAndroidJniObject tagTech;
+ if (m_techList.contains(ISODEPTECHNOLOGY)) {
+ tagTech = getTagTechnology(ISODEPTECHNOLOGY);
+ } else if (m_techList.contains(QStringLiteral(NFCATECHNOLOGY))) {
tagTech = getTagTechnology(QStringLiteral(NFCATECHNOLOGY));
} else if (m_techList.contains(QStringLiteral(NFCBTECHNOLOGY))) {
tagTech = getTagTechnology(QStringLiteral(NFCBTECHNOLOGY));
@@ -187,30 +199,41 @@ QNearFieldTarget::RequestId NearFieldTarget::sendCommand(const QByteArray &comma
return QNearFieldTarget::RequestId();
}
- QByteArray ba(ba);
-
- jclass techClass = env->GetObjectClass(tagTech);
- jmethodID tranceiveMID = env->GetMethodID(techClass, "tranceive", "([B)[B");
- Q_ASSERT_X(tranceiveMID != 0, "sendCommand", "could not find tranceive method");
+ // Connecting
+ QNearFieldTarget::RequestId requestId = QNearFieldTarget::RequestId(new QNearFieldTarget::RequestIdPrivate());
+ tagTech.callMethod<void>("connect");
+ if (catchJavaExceptions()) {
+ QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
+ Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::TargetOutOfRangeError),
+ Q_ARG(const QNearFieldTarget::RequestId&, requestId));
+ return requestId;
+ }
+ // Making QByteArray
+ QByteArray ba(command);
jbyteArray jba = env->NewByteArray(ba.size());
env->SetByteArrayRegion(jba, 0, ba.size(), reinterpret_cast<jbyte*>(ba.data()));
- jbyteArray rsp = reinterpret_cast<jbyteArray>(env->CallObjectMethod(tagTech, tranceiveMID, jba));
-
- jsize len = env->GetArrayLength(rsp);
- QByteArray rspQBA;
- rspQBA.resize(len);
-
- env->GetByteArrayRegion(rsp, 0, len, reinterpret_cast<jbyte*>(rspQBA.data()));
-
- qDebug() << "Send command returned QBA size: " << rspQBA.size();
-
-
+ // Writing
+ QAndroidJniObject myNewVal = tagTech.callObjectMethod("transceive", "([B)[B", jba);
+ if (catchJavaExceptions()) {
+ QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
+ Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::CommandError),
+ Q_ARG(const QNearFieldTarget::RequestId&, requestId));
+ return requestId;
+ }
+ QByteArray result = jbyteArrayToQByteArray(myNewVal.object<jbyteArray>());
env->DeleteLocalRef(jba);
+ handleResponse(requestId, result);
- return QNearFieldTarget::RequestId();*/
+ // Closing connection, sending signal and exit
+ tagTech.callMethod<void>("close");
+ catchJavaExceptions(); // IOException at this point does not matter anymore.
+ QMetaObject::invokeMethod(this, "requestCompleted", Qt::QueuedConnection,
+ Q_ARG(const QNearFieldTarget::RequestId&, requestId));
+
+ return requestId;
}
QNearFieldTarget::RequestId NearFieldTarget::sendCommands(const QList<QByteArray> &commands)
--
2.11.0

View File

@ -1,374 +0,0 @@
From f4f7f906ed1c9763c8e79f0882d25caaa00eb264 Mon Sep 17 00:00:00 2001
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
Date: Tue, 29 Nov 2016 16:34:37 +0100
Subject: Android: QNearfieldTarget: Introduce maxCommandLength()
For the communication with a German ID card its required to execute
commands with a length up to 500 byte. With this change it is
possible to check if the required length is supported.
[ChangeLog][QNearfieldTarget] Introduce maxCommandLength() to
make it possible to check the maximum supported length for commands.
Change-Id: I7e655f419765d8ad728f6d6005a85a01d5aa03e9
---
src/nfc/nfc.pro | 7 +++--
src/nfc/qnearfieldtarget.cpp | 15 +++++++++-
src/nfc/qnearfieldtarget.h | 1 +
src/nfc/qnearfieldtarget_android.cpp | 31 ++++++++++++++++++--
src/nfc/qnearfieldtarget_android_p.cpp | 53 ++++++++++++++++++++++++++++++++++
src/nfc/qnearfieldtarget_android_p.h | 1 +
src/nfc/qnearfieldtarget_neard_p.cpp | 52 +++++++++++++++++++++++++++++++++
src/nfc/qnearfieldtarget_p.cpp | 52 +++++++++++++++++++++++++++++++++
src/nfc/qnearfieldtarget_p.h | 8 +++++
9 files changed, 214 insertions(+), 6 deletions(-)
create mode 100644 src/nfc/qnearfieldtarget_android_p.cpp
create mode 100644 src/nfc/qnearfieldtarget_neard_p.cpp
create mode 100644 src/nfc/qnearfieldtarget_p.cpp
diff --git x/qtconnectivity/src/nfc/nfc.pro y/qtconnectivity/src/nfc/nfc.pro
index 0819cc4f..ce193efa 100644
--- x/qtconnectivity/src/nfc/nfc.pro
+++ y/qtconnectivity/src/nfc/nfc.pro
@@ -74,7 +74,8 @@ linux:!android:qtHaveModule(dbus) {
qllcpserver_p.cpp \
qnearfieldsharemanagerimpl_p.cpp \
qnearfieldsharetargetimpl_p.cpp \
- qnearfieldmanager_neard.cpp
+ qnearfieldmanager_neard.cpp \
+ qnearfieldtarget_neard_p.cpp
include(neard/neard.pri)
@@ -107,6 +108,7 @@ linux:!android:qtHaveModule(dbus) {
android/androidjninfc.cpp \
qnearfieldmanager_android.cpp \
qnearfieldtarget_android.cpp \
+ qnearfieldtarget_android_p.cpp \
qnearfieldsharemanagerimpl_p.cpp \
qnearfieldsharetargetimpl_p.cpp \
android/androidmainnewintentlistener.cpp
@@ -127,7 +129,8 @@ isEmpty(NFC_BACKEND_AVAILABLE) {
qllcpserver_p.cpp \
qnearfieldmanagerimpl_p.cpp \
qnearfieldsharemanagerimpl_p.cpp \
- qnearfieldsharetargetimpl_p.cpp
+ qnearfieldsharetargetimpl_p.cpp \
+ qnearfieldtarget_p.cpp
}
HEADERS += $$PUBLIC_HEADERS $$PRIVATE_HEADERS
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget.cpp y/qtconnectivity/src/nfc/qnearfieldtarget.cpp
index a65b4be2..274ef175 100644
--- x/qtconnectivity/src/nfc/qnearfieldtarget.cpp
+++ y/qtconnectivity/src/nfc/qnearfieldtarget.cpp
@@ -277,7 +277,7 @@ QNearFieldTarget::RequestId &QNearFieldTarget::RequestId::operator=(const Reques
Constructs a new near field target with \a parent.
*/
QNearFieldTarget::QNearFieldTarget(QObject *parent)
-: QObject(parent), d_ptr(new QNearFieldTargetPrivate)
+: QObject(parent), d_ptr(new QNearFieldTargetPrivate(this))
{
qRegisterMetaType<QNearFieldTarget::RequestId>();
qRegisterMetaType<QNearFieldTarget::Error>();
@@ -365,6 +365,19 @@ QNearFieldTarget::RequestId QNearFieldTarget::writeNdefMessages(const QList<QNde
}
/*!
+ \since 5.9
+
+ Returns the maximum number of bytes that can be sent with sendCommand. 0 will
+ be returned if the target does not support sending tag type specific commands.
+
+ \sa sendCommand(), sendCommands()
+*/
+int QNearFieldTarget::maxCommandLength() const
+{
+ return d_ptr->maxCommandLength();
+}
+
+/*!
Sends \a command to the near field target. Returns a request id which can be used to track the
completion status of the request. An invalid request id will be returned if the target does not
support sending tag type specific commands.
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget.h y/qtconnectivity/src/nfc/qnearfieldtarget.h
index dfb474f6..620ea813 100644
--- x/qtconnectivity/src/nfc/qnearfieldtarget.h
+++ y/qtconnectivity/src/nfc/qnearfieldtarget.h
@@ -134,6 +134,7 @@ public:
virtual RequestId writeNdefMessages(const QList<QNdefMessage> &messages);
// TagTypeSpecificAccess
+ int maxCommandLength() const;
virtual RequestId sendCommand(const QByteArray &command);
virtual RequestId sendCommands(const QList<QByteArray> &commands);
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp y/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
index 478f4d8c..f41b0b2e 100644
--- x/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
+++ y/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
@@ -170,9 +170,34 @@ QNearFieldTarget::RequestId NearFieldTarget::readNdefMessages()
return requestId;
}
+int NearFieldTarget::maxCommandLength() const
+{
+ QAndroidJniObject tagTech;
+ if (m_techList.contains(QStringLiteral(ISODEPTECHNOLOGY))) {
+ tagTech = getTagTechnology(QStringLiteral(ISODEPTECHNOLOGY));
+ } else if (m_techList.contains(QStringLiteral(NFCATECHNOLOGY))) {
+ tagTech = getTagTechnology(QStringLiteral(NFCATECHNOLOGY));
+ } else if (m_techList.contains(QStringLiteral(NFCBTECHNOLOGY))) {
+ tagTech = getTagTechnology(QStringLiteral(NFCBTECHNOLOGY));
+ } else if (m_techList.contains(QStringLiteral(NFCFTECHNOLOGY))) {
+ tagTech = getTagTechnology(QStringLiteral(NFCFTECHNOLOGY));
+ } else if (m_techList.contains(QStringLiteral(NFCVTECHNOLOGY))) {
+ tagTech = getTagTechnology(QStringLiteral(NFCVTECHNOLOGY));
+ } else {
+ return 0;
+ }
+
+ int returnVal = tagTech.callMethod<jint>("getMaxTransceiveLength");
+ if (catchJavaExceptions()) {
+ return 0;
+ }
+
+ return returnVal;
+}
+
QNearFieldTarget::RequestId NearFieldTarget::sendCommand(const QByteArray &command)
{
- if (command.size() == 0) {
+ if (command.size() == 0 || command.size() > maxCommandLength()) {
Q_EMIT QNearFieldTarget::error(QNearFieldTarget::InvalidParametersError, QNearFieldTarget::RequestId());
return QNearFieldTarget::RequestId();
}
@@ -184,8 +209,8 @@ QNearFieldTarget::RequestId NearFieldTarget::sendCommand(const QByteArray &comma
QAndroidJniEnvironment env;
QAndroidJniObject tagTech;
- if (m_techList.contains(ISODEPTECHNOLOGY)) {
- tagTech = getTagTechnology(ISODEPTECHNOLOGY);
+ if (m_techList.contains(QStringLiteral(ISODEPTECHNOLOGY))) {
+ tagTech = getTagTechnology(QStringLiteral(ISODEPTECHNOLOGY));
} else if (m_techList.contains(QStringLiteral(NFCATECHNOLOGY))) {
tagTech = getTagTechnology(QStringLiteral(NFCATECHNOLOGY));
} else if (m_techList.contains(QStringLiteral(NFCBTECHNOLOGY))) {
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_android_p.cpp y/qtconnectivity/src/nfc/qnearfieldtarget_android_p.cpp
new file mode 100644
index 00000000..da2d8f2d
--- /dev/null
+++ y/qtconnectivity/src/nfc/qnearfieldtarget_android_p.cpp
@@ -0,0 +1,53 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 Governikus GmbH & Co. KG
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtNfc module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QCoreApplication>
+
+#include "qnearfieldtarget_p.h"
+#include "qnearfieldtarget_android_p.h"
+
+QT_BEGIN_NAMESPACE
+
+int QNearFieldTargetPrivate::maxCommandLength() const
+{
+ NearFieldTarget * const q = reinterpret_cast<NearFieldTarget *>(q_ptr);
+ return q->maxCommandLength();
+}
+
+QT_END_NAMESPACE
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_android_p.h y/qtconnectivity/src/nfc/qnearfieldtarget_android_p.h
index 94bb394d..f2e2ee7f 100644
--- x/qtconnectivity/src/nfc/qnearfieldtarget_android_p.h
+++ y/qtconnectivity/src/nfc/qnearfieldtarget_android_p.h
@@ -77,6 +77,7 @@ public:
virtual AccessMethods accessMethods() const;
virtual bool hasNdefMessage();
virtual RequestId readNdefMessages();
+ int maxCommandLength() const;
virtual RequestId sendCommand(const QByteArray &command);
virtual RequestId sendCommands(const QList<QByteArray> &commands);
virtual RequestId writeNdefMessages(const QList<QNdefMessage> &messages);
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_neard_p.cpp y/qtconnectivity/src/nfc/qnearfieldtarget_neard_p.cpp
new file mode 100644
index 00000000..3d1bfa6c
--- /dev/null
+++ y/qtconnectivity/src/nfc/qnearfieldtarget_neard_p.cpp
@@ -0,0 +1,52 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 Governikus GmbH & Co. K
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtNfc module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QCoreApplication>
+
+#include "qnearfieldtarget.h"
+#include "qnearfieldtarget_p.h"
+
+QT_BEGIN_NAMESPACE
+
+int QNearFieldTargetPrivate::maxCommandLength() const
+{
+ return 0;
+}
+
+QT_END_NAMESPACE
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_p.cpp y/qtconnectivity/src/nfc/qnearfieldtarget_p.cpp
new file mode 100644
index 00000000..3d1bfa6c
--- /dev/null
+++ y/qtconnectivity/src/nfc/qnearfieldtarget_p.cpp
@@ -0,0 +1,52 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 Governikus GmbH & Co. K
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtNfc module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QCoreApplication>
+
+#include "qnearfieldtarget.h"
+#include "qnearfieldtarget_p.h"
+
+QT_BEGIN_NAMESPACE
+
+int QNearFieldTargetPrivate::maxCommandLength() const
+{
+ return 0;
+}
+
+QT_END_NAMESPACE
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_p.h y/qtconnectivity/src/nfc/qnearfieldtarget_p.h
index 7a787ace..9b2ed480 100644
--- x/qtconnectivity/src/nfc/qnearfieldtarget_p.h
+++ y/qtconnectivity/src/nfc/qnearfieldtarget_p.h
@@ -57,6 +57,7 @@
#include <QtCore/QMap>
#include <QtCore/QSharedData>
+#include <QtCore/QVariant>
QT_BEGIN_NAMESPACE
@@ -66,8 +67,15 @@ class QNearFieldTarget::RequestIdPrivate : public QSharedData
class QNearFieldTargetPrivate
{
+ QNearFieldTarget *q_ptr;
+ Q_DECLARE_PUBLIC(QNearFieldTarget)
+
public:
+ QNearFieldTargetPrivate(QNearFieldTarget *q) : q_ptr(q) {}
+
QMap<QNearFieldTarget::RequestId, QVariant> m_decodedResponses;
+
+ int maxCommandLength() const;
};
QT_END_NAMESPACE
--
2.11.0

View File

@ -0,0 +1,73 @@
From 26383dba15ceed74b36dd71e5b1837c63aade927 Mon Sep 17 00:00:00 2001
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
Date: Thu, 14 Sep 2017 12:47:11 +0200
Subject: Avoid using deprecated APIs on iOS 10.0+
Change-Id: Ic9dc6a24ef793a29c2652ad37bc11120e2e6ceef
---
src/gui/util/qdesktopservices.cpp | 13 +++++++++++++
src/plugins/platforms/ios/qiosservices.mm | 14 ++++++++++++--
2 files changed, 25 insertions(+), 2 deletions(-)
diff --git x/qtbase/src/gui/util/qdesktopservices.cpp y/qtbase/src/gui/util/qdesktopservices.cpp
index c9747877f7..77ccc02aa5 100644
--- x/qtbase/src/gui/util/qdesktopservices.cpp
+++ y/qtbase/src/gui/util/qdesktopservices.cpp
@@ -177,6 +177,19 @@ void QOpenUrlHandlerRegistry::handlerDestroyed(QObject *handler)
still fail to launch or fail to open the requested URL. This result will not be reported back
to the application.
+ \warning URLs passed to this function on iOS will not load unless their schemes are
+ listed in the \c LSApplicationQueriesSchemes key of the application's Info.plist file.
+ For more information, see the Apple Developer Documentation for
+ \l{https://developer.apple.com/documentation/uikit/uiapplication/1622952-canopenurl}{canOpenURL(_:)}.
+ For example, the following lines enable URLs with the HTTPS scheme:
+
+ \code
+ <key>LSApplicationQueriesSchemes</key>
+ <array>
+ <string>https</string>
+ </array>
+ \endcode
+
\sa setUrlHandler()
*/
bool QDesktopServices::openUrl(const QUrl &url)
diff --git x/qtbase/src/plugins/platforms/ios/qiosservices.mm y/qtbase/src/plugins/platforms/ios/qiosservices.mm
index 0ecc8e123f..a963a5c05d 100644
--- x/qtbase/src/plugins/platforms/ios/qiosservices.mm
+++ y/qtbase/src/plugins/platforms/ios/qiosservices.mm
@@ -41,6 +41,7 @@
#include <QtCore/qurl.h>
#include <QtGui/qdesktopservices.h>
+#include <QOperatingSystemVersion>
#import <UIKit/UIApplication.h>
@@ -55,11 +56,20 @@ bool QIOSServices::openUrl(const QUrl &url)
return openDocument(url);
NSURL *nsUrl = url.toNSURL();
+ UIApplication *application = [UIApplication sharedApplication];
- if (![[UIApplication sharedApplication] canOpenURL:nsUrl])
+ if (![application canOpenURL:nsUrl])
return false;
- return [[UIApplication sharedApplication] openURL:nsUrl];
+#if QT_DARWIN_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_NA, 100000, 100000, __WATCHOS_NA)
+ if (QOperatingSystemVersion::current() >= QOperatingSystemVersion(QOperatingSystemVersion::IOS, 10)) {
+ [application openURL:nsUrl options:@{} completionHandler:nil];
+ return true;
+ } else
+#endif
+ {
+ return [application openURL:nsUrl];
+ }
}
bool QIOSServices::openDocument(const QUrl &url)
--
2.14.1

View File

@ -0,0 +1,32 @@
From 1f505127d1dba4b755fc00360a5bffff8163acb7 Mon Sep 17 00:00:00 2001
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
Date: Wed, 19 Jul 2017 09:44:01 +0200
Subject: Change build configuration for Qt on iOS
---
mkspecs/macx-ios-clang/qmake.conf | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git x/qtbase/mkspecs/macx-ios-clang/qmake.conf y/qtbase/mkspecs/macx-ios-clang/qmake.conf
index 825e03aa85..fe783faee3 100644
--- x/qtbase/mkspecs/macx-ios-clang/qmake.conf
+++ y/qtbase/mkspecs/macx-ios-clang/qmake.conf
@@ -2,13 +2,13 @@
# qmake configuration for macx-ios-clang
#
-QMAKE_IOS_DEPLOYMENT_TARGET = 8.0
+QMAKE_IOS_DEPLOYMENT_TARGET = 10.0
# Universal target (iPhone and iPad)
QMAKE_APPLE_TARGETED_DEVICE_FAMILY = 1,2
-QMAKE_APPLE_DEVICE_ARCHS = armv7 arm64
-QMAKE_APPLE_SIMULATOR_ARCHS = i386 x86_64
+QMAKE_APPLE_DEVICE_ARCHS = arm64
+QMAKE_APPLE_SIMULATOR_ARCHS = x86_64
include(../common/ios.conf)
include(../common/gcc-base-mac.conf)
--
2.13.2

View File

@ -0,0 +1,26 @@
From 978caa044d4e1c52c90a87490defbac387db58d6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Klitzing?= <aklitzing@gmail.com>
Date: Mon, 25 Sep 2017 14:10:56 +0200
Subject: [PATCH] Disable unused imageformats
---
src/plugins/imageformats/imageformats.pro | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git x/qtimageformats/src/plugins/imageformats/imageformats.pro y/qtimageformats/src/plugins/imageformats/imageformats.pro
index 8c79379..2aa80f5 100644
--- x/qtimageformats/src/plugins/imageformats/imageformats.pro
+++ y/qtimageformats/src/plugins/imageformats/imageformats.pro
@@ -16,8 +16,7 @@ config_jasper {
SUBDIRS += macjp2
}
-winrt {
SUBDIRS -= tiff \
tga \
+ wbmp \
webp
-}
--
2.14.1

View File

@ -1,44 +0,0 @@
From 1e9d5b22fbd18cfcf56f5c6ced19c0d9ba55a4f1 Mon Sep 17 00:00:00 2001
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
Date: Wed, 11 Jan 2017 17:29:40 +0100
Subject: [PATCH] Do not request an unnessessary dangerous right
Bluetooth LE discovery needs ACCESS_COARSE_LOCATION permission
since android 6.0. In the manifest file it is possible use it by
"<uses-permission-sdk-23 android:name="ACCESS_COARSE_LOCATION" />"
in general. But the bluetooth LE discovery requests it for every
android version. This change enables the request for android > 6.0
only (API-Level >=23).
Task-number: QTBUG-58085
Change-Id: I78ad2fe83eb16eaf45813137335f85c7b3930992
---
src/bluetooth/qbluetoothdevicediscoveryagent_android.cpp | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git x/qtconnectivity/src/bluetooth/qbluetoothdevicediscoveryagent_android.cpp y/qtconnectivity/src/bluetooth/qbluetoothdevicediscoveryagent_android.cpp
index 2d6e64be..e76ddff7 100644
--- x/qtconnectivity/src/bluetooth/qbluetoothdevicediscoveryagent_android.cpp
+++ y/qtconnectivity/src/bluetooth/qbluetoothdevicediscoveryagent_android.cpp
@@ -45,6 +45,7 @@
#include <QtCore/private/qjnihelpers_p.h>
#include "android/devicediscoverybroadcastreceiver_p.h"
#include <QtAndroidExtras/QAndroidJniEnvironment>
+#include <QtAndroid>
QT_BEGIN_NAMESPACE
@@ -147,7 +148,9 @@ void QBluetoothDeviceDiscoveryAgentPrivate::start(QBluetoothDeviceDiscoveryAgent
// check Android v23+ permissions
// -> BTLE search requires android.permission.ACCESS_COARSE_LOCATION
- if (requestedMethods && QBluetoothDeviceDiscoveryAgent::LowEnergyMethod) {
+ if (requestedMethods & QBluetoothDeviceDiscoveryAgent::LowEnergyMethod
+ && QtAndroid::androidSdkVersion() >= 23)
+ {
QString permission(QLatin1String("android.permission.ACCESS_COARSE_LOCATION"));
// do we have required permission already, if so nothing to do
--
2.11.0

View File

@ -1,140 +0,0 @@
From 523c61571e234865e411d823366dc87d62fe50ab Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sebastian=20L=C3=B6sch?= <Sebastian.Loesch@governikus.de>
Date: Wed, 10 Aug 2016 16:51:34 +0200
Subject: Introduce QNetworkAccessManager::clearConnectionCache()
Sometimes it is desirable to use a new connection but keep already
entered user credentials for usability reasons. This is now possible by
clearing the connection cache (but keeping the authentication cache).
Change-Id: I2f5f64836ce19f81c8525701783a3da823dd468e
---
src/network/access/qnetworkaccessmanager.cpp | 25 +++++++++++++++++++---
src/network/access/qnetworkaccessmanager.h | 2 ++
src/network/access/qnetworkaccessmanager_p.h | 3 ++-
.../access/qnetworkreply/tst_qnetworkreply.cpp | 3 ++-
.../tst_network_remote_stresstest.cpp | 3 ++-
.../network_stresstest/tst_network_stresstest.cpp | 3 ++-
6 files changed, 32 insertions(+), 7 deletions(-)
diff --git x/qtbase/src/network/access/qnetworkaccessmanager.cpp y/qtbase/src/network/access/qnetworkaccessmanager.cpp
index 6d5b2400f1..b763547a15 100644
--- x/qtbase/src/network/access/qnetworkaccessmanager.cpp
+++ y/qtbase/src/network/access/qnetworkaccessmanager.cpp
@@ -1352,10 +1352,26 @@ QStringList QNetworkAccessManager::supportedSchemesImplementation() const
This function is useful for doing auto tests.
+ \sa clearConnectionCache()
*/
void QNetworkAccessManager::clearAccessCache()
{
- QNetworkAccessManagerPrivate::clearCache(this);
+ QNetworkAccessManagerPrivate::clearAuthenticationCache(this);
+ QNetworkAccessManagerPrivate::clearConnectionCache(this);
+}
+
+/*!
+ \since 5.9
+
+ Flushes the internal cache of network connections.
+ In contrast to clearAccessCache() the authentication data
+ is preserved.
+
+ \sa clearAccessCache()
+*/
+void QNetworkAccessManager::clearConnectionCache()
+{
+ QNetworkAccessManagerPrivate::clearConnectionCache(this);
}
void QNetworkAccessManagerPrivate::_q_replyFinished()
@@ -1552,11 +1568,14 @@ QList<QNetworkProxy> QNetworkAccessManagerPrivate::queryProxy(const QNetworkProx
}
#endif
-void QNetworkAccessManagerPrivate::clearCache(QNetworkAccessManager *manager)
+void QNetworkAccessManagerPrivate::clearAuthenticationCache(QNetworkAccessManager *manager)
{
- manager->d_func()->objectCache.clear();
manager->d_func()->authenticationManager->clearCache();
+}
+void QNetworkAccessManagerPrivate::clearConnectionCache(QNetworkAccessManager *manager)
+{
+ manager->d_func()->objectCache.clear();
manager->d_func()->destroyThread();
}
diff --git x/qtbase/src/network/access/qnetworkaccessmanager.h y/qtbase/src/network/access/qnetworkaccessmanager.h
index 4b8c4ddf0e..649013cced 100644
--- x/qtbase/src/network/access/qnetworkaccessmanager.h
+++ y/qtbase/src/network/access/qnetworkaccessmanager.h
@@ -106,6 +106,8 @@ public:
void clearAccessCache();
+ void clearConnectionCache();
+
#ifndef QT_NO_NETWORKPROXY
QNetworkProxy proxy() const;
void setProxy(const QNetworkProxy &proxy);
diff --git x/qtbase/src/network/access/qnetworkaccessmanager_p.h y/qtbase/src/network/access/qnetworkaccessmanager_p.h
index bb4641ab8b..b4b5e6a789 100644
--- x/qtbase/src/network/access/qnetworkaccessmanager_p.h
+++ y/qtbase/src/network/access/qnetworkaccessmanager_p.h
@@ -202,7 +202,8 @@ public:
QNetworkAccessCache objectCache;
static inline QNetworkAccessCache *getObjectCache(QNetworkAccessBackend *backend)
{ return &backend->manager->objectCache; }
- Q_AUTOTEST_EXPORT static void clearCache(QNetworkAccessManager *manager);
+ Q_AUTOTEST_EXPORT static void clearAuthenticationCache(QNetworkAccessManager *manager);
+ Q_AUTOTEST_EXPORT static void clearConnectionCache(QNetworkAccessManager *manager);
#ifndef QT_NO_BEARERMANAGEMENT
Q_AUTOTEST_EXPORT static const QWeakPointer<const QNetworkSession> getNetworkSession(const QNetworkAccessManager *manager);
#endif
diff --git x/qtbase/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp y/qtbase/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
index 649278d48b..c555cd8fa0 100644
--- x/qtbase/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
+++ y/qtbase/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
@@ -6797,7 +6797,8 @@ void tst_QNetworkReply::authenticationCacheAfterCancel()
// QTBUG-23136 workaround (needed even with danted v1.1.19):
if (proxy.port() == 1081) {
#ifdef QT_BUILD_INTERNAL
- QNetworkAccessManagerPrivate::clearCache(&manager);
+ QNetworkAccessManagerPrivate::clearAuthenticationCache(&manager);
+ QNetworkAccessManagerPrivate::clearConnectionCache(&manager);
#else
return;
#endif
diff --git x/qtbase/tests/manual/network_remote_stresstest/tst_network_remote_stresstest.cpp y/qtbase/tests/manual/network_remote_stresstest/tst_network_remote_stresstest.cpp
index 05ede9da99..99e3d148df 100644
--- x/qtbase/tests/manual/network_remote_stresstest/tst_network_remote_stresstest.cpp
+++ y/qtbase/tests/manual/network_remote_stresstest/tst_network_remote_stresstest.cpp
@@ -147,7 +147,8 @@ void tst_NetworkRemoteStressTest::init()
void tst_NetworkRemoteStressTest::clearManager()
{
#ifdef QT_BUILD_INTERNAL
- QNetworkAccessManagerPrivate::clearCache(&manager);
+ QNetworkAccessManagerPrivate::clearAuthenticationCache(&manager);
+ QNetworkAccessManagerPrivate::clearConnectionCache(&manager);
manager.setProxy(QNetworkProxy());
manager.setCache(0);
#endif
diff --git x/qtbase/tests/manual/network_stresstest/tst_network_stresstest.cpp y/qtbase/tests/manual/network_stresstest/tst_network_stresstest.cpp
index e3c76ea11b..d46703c671 100644
--- x/qtbase/tests/manual/network_stresstest/tst_network_stresstest.cpp
+++ y/qtbase/tests/manual/network_stresstest/tst_network_stresstest.cpp
@@ -138,7 +138,8 @@ void tst_NetworkStressTest::init()
void tst_NetworkStressTest::clearManager()
{
#ifdef QT_BUILD_INTERNAL
- QNetworkAccessManagerPrivate::clearCache(&manager);
+ QNetworkAccessManagerPrivate::clearAuthenticationCache(&manager);
+ QNetworkAccessManagerPrivate::clearConnectionCache(&manager);
manager.setProxy(QNetworkProxy());
manager.setCache(0);
#endif
--
2.11.0

View File

@ -1,59 +0,0 @@
From e1ba5a3265be01d7d353bf82e4d8af331edbb434 Mon Sep 17 00:00:00 2001
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
Date: Tue, 13 Sep 2016 14:24:25 +0200
Subject: Introduce QNetworkAccessManager::useAuthenticationManagerFrom
Sometimes it is desirable to use a new connection but keep already
entered user credentials for usability reasons. This is now possible by
using the AuthenticationManager from a different NetworkAccessManager.
[ChangeLog][QtCore][QNetworkAccessManager] Introduce useAuthenticationManagerFrom()
Change-Id: If61f0d03fc8b2f159bad869d0a2b650170e1e174
---
src/network/access/qnetworkaccessmanager.cpp | 15 +++++++++++++++
src/network/access/qnetworkaccessmanager.h | 2 ++
2 files changed, 17 insertions(+)
diff --git x/qtbase/src/network/access/qnetworkaccessmanager.cpp y/qtbase/src/network/access/qnetworkaccessmanager.cpp
index b763547a15..83cb33ce72 100644
--- x/qtbase/src/network/access/qnetworkaccessmanager.cpp
+++ y/qtbase/src/network/access/qnetworkaccessmanager.cpp
@@ -1079,6 +1079,21 @@ void QNetworkAccessManager::connectToHost(const QString &hostName, quint16 port)
}
/*!
+ \since 5.9
+
+ Sets the manager's authentication manager to be the one from
+ \a accessManager. This is useful when you need to use a new connection,
+ but keep already-entered user-credentials for usability reasons.
+*/
+void QNetworkAccessManager::useAuthenticationManagerFrom(const QNetworkAccessManager& accessManager)
+{
+ const QNetworkAccessManagerPrivate * const e = accessManager.d_func();
+
+ Q_D(QNetworkAccessManager);
+ d->authenticationManager = e->authenticationManager;
+}
+
+/*!
\since 4.7
Sends a custom request to the server identified by the URL of \a request.
diff --git x/qtbase/src/network/access/qnetworkaccessmanager.h y/qtbase/src/network/access/qnetworkaccessmanager.h
index 649013cced..24f3c7147c 100644
--- x/qtbase/src/network/access/qnetworkaccessmanager.h
+++ y/qtbase/src/network/access/qnetworkaccessmanager.h
@@ -149,6 +149,8 @@ public:
#endif
void connectToHost(const QString &hostName, quint16 port = 80);
+ void useAuthenticationManagerFrom(const QNetworkAccessManager& accessManager);
+
Q_SIGNALS:
#ifndef QT_NO_NETWORKPROXY
void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator);
--
2.11.0

View File

@ -1,4 +1,4 @@
From 992a338b639e4df6da16659dc238dbaae0ae802f Mon Sep 17 00:00:00 2001
From b0404383ab573d7550a6564405bb9b1316ff193a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sebastian=20L=C3=B6sch?= <Sebastian.Loesch@governikus.de>
Date: Thu, 21 Apr 2016 09:19:19 +0200
Subject: [PATCH] Make server side signature algorithms configurable
@ -10,18 +10,17 @@ server side.
Change-Id: Ia178efd4778b91863fcc919bf50219115b300d77
---
src/network/ssl/qsslconfiguration.cpp | 42 +++++++++++++
src/network/ssl/qsslconfiguration.h | 8 ++-
src/network/ssl/qsslconfiguration_p.h | 5 ++
src/network/ssl/qsslcontext_openssl.cpp | 45 ++++++++++++++
src/network/ssl/qsslcontext_openssl_p.h | 1 +
src/network/ssl/qsslsocket.cpp | 2 +
src/network/ssl/qsslsocket_openssl_symbols_p.h | 5 ++
.../auto/network/ssl/qsslsocket/tst_qsslsocket.cpp | 70 ++++++++++++++++++++++
8 files changed, 177 insertions(+), 1 deletion(-)
src/network/ssl/qsslconfiguration.cpp | 42 ++++++++++++++++++++++++
src/network/ssl/qsslconfiguration.h | 8 ++++-
src/network/ssl/qsslconfiguration_p.h | 5 +++
src/network/ssl/qsslcontext_openssl.cpp | 45 ++++++++++++++++++++++++++
src/network/ssl/qsslcontext_openssl_p.h | 1 +
src/network/ssl/qsslsocket.cpp | 2 ++
src/network/ssl/qsslsocket_openssl_symbols_p.h | 5 +++
7 files changed, 107 insertions(+), 1 deletion(-)
diff --git x/qtbase/src/network/ssl/qsslconfiguration.cpp y/qtbase/src/network/ssl/qsslconfiguration.cpp
index 75a880f..37f99fe 100644
index 75a880f115..37f99feef1 100644
--- x/qtbase/src/network/ssl/qsslconfiguration.cpp
+++ y/qtbase/src/network/ssl/qsslconfiguration.cpp
@@ -221,6 +221,7 @@ bool QSslConfiguration::operator==(const QSslConfiguration &other) const
@ -40,10 +39,11 @@ index 75a880f..37f99fe 100644
d->sslOptions == QSslConfigurationPrivate::defaultSslOptions &&
d->sslSession.isNull() &&
d->sslSessionTicketLifeTimeHint == -1 &&
@@ -870,6 +872,46 @@ void QSslConfiguration::setDiffieHellmanParameters(const QSslDiffieHellmanParame
@@ -869,6 +871,46 @@ void QSslConfiguration::setDiffieHellmanParameters(const QSslDiffieHellmanParame
d->dhParams = dhparams;
}
/*!
+/*!
+ \since 5.9
+
+ Returns the connection's current list of supported signature
@ -83,12 +83,11 @@ index 75a880f..37f99fe 100644
+ d->signatureAndHashAlgorithms = algorithms;
+}
+
+/*!
/*!
\since 5.3
This function returns the protocol negotiated with the server
diff --git x/qtbase/src/network/ssl/qsslconfiguration.h y/qtbase/src/network/ssl/qsslconfiguration.h
index 1c57beb..4d3e512 100644
index 1c57bebd65..4d3e5129d5 100644
--- x/qtbase/src/network/ssl/qsslconfiguration.h
+++ y/qtbase/src/network/ssl/qsslconfiguration.h
@@ -56,10 +56,13 @@
@ -117,7 +116,7 @@ index 1c57beb..4d3e512 100644
static void setDefaultConfiguration(const QSslConfiguration &configuration);
diff --git x/qtbase/src/network/ssl/qsslconfiguration_p.h y/qtbase/src/network/ssl/qsslconfiguration_p.h
index 6adf2c9..7be2539 100644
index 6adf2c9b54..7be253973b 100644
--- x/qtbase/src/network/ssl/qsslconfiguration_p.h
+++ y/qtbase/src/network/ssl/qsslconfiguration_p.h
@@ -75,6 +75,9 @@
@ -140,7 +139,7 @@ index 6adf2c9..7be2539 100644
int sslSessionTicketLifeTimeHint;
diff --git x/qtbase/src/network/ssl/qsslcontext_openssl.cpp y/qtbase/src/network/ssl/qsslcontext_openssl.cpp
index c92d8fc..29df53a 100644
index c92d8fc3f8..29df53abc0 100644
--- x/qtbase/src/network/ssl/qsslcontext_openssl.cpp
+++ y/qtbase/src/network/ssl/qsslcontext_openssl.cpp
@@ -42,6 +42,7 @@
@ -210,7 +209,7 @@ index c92d8fc..29df53a 100644
QSslContext* QSslContext::fromConfiguration(QSslSocket::SslMode mode, const QSslConfiguration &configuration, bool allowRootCertOnDemandLoading)
diff --git x/qtbase/src/network/ssl/qsslcontext_openssl_p.h y/qtbase/src/network/ssl/qsslcontext_openssl_p.h
index 06a31af..c8c8e194 100644
index 06a31af5e5..c8c8e1941b 100644
--- x/qtbase/src/network/ssl/qsslcontext_openssl_p.h
+++ y/qtbase/src/network/ssl/qsslcontext_openssl_p.h
@@ -54,6 +54,7 @@
@ -222,7 +221,7 @@ index 06a31af..c8c8e194 100644
#include <QtNetwork/qsslcertificate.h>
#include <QtNetwork/qsslconfiguration.h>
diff --git x/qtbase/src/network/ssl/qsslsocket.cpp y/qtbase/src/network/ssl/qsslsocket.cpp
index 29e1f32..8257112 100644
index 8eba5db9fe..c0aa8b9bdf 100644
--- x/qtbase/src/network/ssl/qsslsocket.cpp
+++ y/qtbase/src/network/ssl/qsslsocket.cpp
@@ -922,6 +922,7 @@ void QSslSocket::setSslConfiguration(const QSslConfiguration &configuration)
@ -233,7 +232,7 @@ index 29e1f32..8257112 100644
d->configuration.sslOptions = configuration.d->sslOptions;
d->configuration.sslSession = configuration.sessionTicket();
d->configuration.sslSessionTicketLifeTimeHint = configuration.sessionTicketLifeTimeHint();
@@ -2230,6 +2231,7 @@ void QSslConfigurationPrivate::deepCopyDefaultConfiguration(QSslConfigurationPri
@@ -2249,6 +2250,7 @@ void QSslConfigurationPrivate::deepCopyDefaultConfiguration(QSslConfigurationPri
ptr->peerVerifyDepth = global->peerVerifyDepth;
ptr->sslOptions = global->sslOptions;
ptr->ellipticCurves = global->ellipticCurves;
@ -242,7 +241,7 @@ index 29e1f32..8257112 100644
/*!
diff --git x/qtbase/src/network/ssl/qsslsocket_openssl_symbols_p.h y/qtbase/src/network/ssl/qsslsocket_openssl_symbols_p.h
index b35a895..d4cd493 100644
index b35a895d38..d4cd493c45 100644
--- x/qtbase/src/network/ssl/qsslsocket_openssl_symbols_p.h
+++ y/qtbase/src/network/ssl/qsslsocket_openssl_symbols_p.h
@@ -517,6 +517,11 @@ int q_EC_curve_nist2nid(const char *name);
@ -257,94 +256,6 @@ index b35a895..d4cd493 100644
// PKCS#12 support
int q_PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert, STACK_OF(X509) **ca);
PKCS12 *q_d2i_PKCS12_bio(BIO *bio, PKCS12 **pkcs12);
diff --git x/qtbase/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp y/qtbase/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp
index 4eb26d1..79a55cc 100644
--- x/qtbase/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp
+++ y/qtbase/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp
@@ -236,6 +236,8 @@ private slots:
void ephemeralServerKey();
void allowedProtocolNegotiation();
void pskServer();
+ void signatureAlgorithm_data();
+ void signatureAlgorithm();
#endif
void setEmptyDefaultConfiguration(); // this test should be last
@@ -3744,6 +3746,74 @@ void tst_QSslSocket::pskServer()
QCOMPARE(socket.state(), QAbstractSocket::UnconnectedState);
QCOMPARE(disconnectedSpy.count(), 1);
}
+using SigAlgPair = QPair<QSsl::KeyAlgorithm, QCryptographicHash::Algorithm>;
+Q_DECLARE_METATYPE(QCryptographicHash::Algorithm);
+Q_DECLARE_METATYPE(QSsl::KeyAlgorithm);
+Q_DECLARE_METATYPE(SigAlgPair);
+
+void tst_QSslSocket::signatureAlgorithm_data()
+{
+ QTest::addColumn<SigAlgPair>("serverSigAlgPair");
+ QTest::addColumn<QSsl::SslProtocol>("serverProtocol");
+ QTest::addColumn<SigAlgPair>("clientSigAlgPair");
+ QTest::addColumn<QSsl::SslProtocol>("clientProtocol");
+ QTest::addColumn<QAbstractSocket::SocketState>("state");
+
+ auto rsaSha256 = SigAlgPair(QSsl::Rsa, QCryptographicHash::Sha256);
+ auto rsaSha512 = SigAlgPair(QSsl::Rsa, QCryptographicHash::Sha512);
+ auto ecdsaSha512= SigAlgPair(QSsl::Ec, QCryptographicHash::Sha512);
+
+ QTest::newRow("match_TlsV1_2") << rsaSha256 << QSsl::TlsV1_2 << rsaSha256 << QSsl::AnyProtocol << QAbstractSocket::ConnectedState;
+ QTest::newRow("no_hashalg_match_TlsV1_2") << rsaSha256 << QSsl::TlsV1_2 << rsaSha512 << QSsl::AnyProtocol << QAbstractSocket::UnconnectedState;
+ QTest::newRow("no_sigalg_match_TlsV1_2") << ecdsaSha512 << QSsl::TlsV1_2 << rsaSha512 << QSsl::AnyProtocol << QAbstractSocket::UnconnectedState;
+ QTest::newRow("no_cipher_match_AnyProtocol") << rsaSha512 << QSsl::TlsV1_2 << ecdsaSha512 << QSsl::AnyProtocol << QAbstractSocket::UnconnectedState;
+
+ // signature algorithms do not match, but are ignored because the tls version is not v1.2
+ QTest::newRow("client_ignore_TlsV1_1") << rsaSha256 << QSsl::TlsV1_1 << rsaSha512 << QSsl::AnyProtocol << QAbstractSocket::ConnectedState;
+ QTest::newRow("server_ignore_TlsV1_1") << rsaSha256 << QSsl::AnyProtocol << rsaSha512 << QSsl::TlsV1_1 << QAbstractSocket::ConnectedState;
+ QTest::newRow("client_ignore_TlsV1_0") << rsaSha256 << QSsl::TlsV1_0 << rsaSha512 << QSsl::AnyProtocol << QAbstractSocket::ConnectedState;
+ QTest::newRow("server_ignore_TlsV1_0") << rsaSha256 << QSsl::AnyProtocol << rsaSha512 << QSsl::TlsV1_0 << QAbstractSocket::ConnectedState;
+}
+
+
+void tst_QSslSocket::signatureAlgorithm()
+{
+ QFETCH_GLOBAL(bool, setProxy);
+ if (!QSslSocket::supportsSsl() || setProxy)
+ return;
+
+ QFETCH(SigAlgPair, serverSigAlgPair);
+ QFETCH(QSsl::SslProtocol, serverProtocol);
+ QFETCH(SigAlgPair, clientSigAlgPair);
+ QFETCH(QSsl::SslProtocol, clientProtocol);
+ QFETCH(QAbstractSocket::SocketState, state);
+
+
+ SslServer server;
+ server.protocol = serverProtocol;
+ server.config.setCiphers({QSslCipher("ECDHE-RSA-AES256-SHA")});
+ server.config.setSignatureAndHashAlgorithms({serverSigAlgPair});
+ QVERIFY(server.listen());
+
+ QSslConfiguration clientConfig = QSslConfiguration::defaultConfiguration();
+ clientConfig.setSignatureAndHashAlgorithms({clientSigAlgPair});
+ clientConfig.setProtocol(clientProtocol);
+ QSslSocket client;
+ client.setSslConfiguration(clientConfig);
+ socket = &client;
+
+ QEventLoop loop;
+ QTimer::singleShot(5000, &loop, SLOT(quit()));
+ connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), &loop, SLOT(quit()));
+ connect(socket, SIGNAL(sslErrors(QList<QSslError>)), this, SLOT(ignoreErrorSlot()));
+ connect(socket, SIGNAL(encrypted()), &loop, SLOT(quit()));
+
+
+ client.connectToHostEncrypted(QHostAddress(QHostAddress::LocalHost).toString(), server.serverPort());
+ loop.exec();
+ QCOMPARE(client.state(), state);
+}
+
#endif // QT_NO_OPENSSL
--
2.10.2
2.15.0

View File

@ -1,69 +0,0 @@
From a3a86b6b4acb210392d0aa0aad555f7afb455e0b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sebastian=20L=C3=B6sch?= <Sebastian.Loesch@governikus.de>
Date: Tue, 1 Nov 2016 11:16:32 +0100
Subject: Make variant selection possible if base is missing
[ChangeLog][QtCore][QFileSelector] Removed the requirement for an unused
default base file in case you want to load only a variant.
When the base file (e.g. /image.jpg) was missing, no selectors were
considered and it was not possible to load variants of this file (e.g.
/+android/image.jpg, /+android/+tablet/image.jpg) without specifying the
directory as well.
As a work around, one previously had to place a default file in
the base location, which is undesirable in some cases because:
1. The extra file consumes unnecessary space.
2. It is impossible to encapsulate platform-specific implementation
details by hiding files in a subdirectory.
Task-number: QTBUG-51230
Change-Id: I4c7f9ec952bff6e5b7738d8cabe3c762c208a38e
---
src/corelib/io/qfileselector.cpp | 9 +++------
tests/auto/corelib/io/qfileselector/tst_qfileselector.cpp | 2 +-
2 files changed, 4 insertions(+), 7 deletions(-)
diff --git x/qtbase/src/corelib/io/qfileselector.cpp y/qtbase/src/corelib/io/qfileselector.cpp
index 920281cef7..b48b3e1162 100644
--- x/qtbase/src/corelib/io/qfileselector.cpp
+++ y/qtbase/src/corelib/io/qfileselector.cpp
@@ -133,9 +133,9 @@ QFileSelectorPrivate::QFileSelectorPrivate()
With those files available, you would select a different file on the android platform,
but only if the locale was en_GB.
- QFileSelector will not attempt to select if the base file does not exist. For error handling in
- the case no valid selectors are present, it is recommended to have a default or error-handling
- file in the base file location even if you expect selectors to be present for all deployments.
+ For error handling in the case no valid selectors are present, it is recommended to have a default or
+ error-handling file in the base file location even if you expect selectors to be present for all
+ deployments.
In a future version, some may be marked as deploy-time static and be moved during the
deployment step as an optimization. As selectors come with a performance cost, it is
@@ -298,9 +298,6 @@ QString QFileSelectorPrivate::select(const QString &filePath) const
{
Q_Q(const QFileSelector);
QFileInfo fi(filePath);
- // If file doesn't exist, don't select
- if (!fi.exists())
- return filePath;
QString ret = selectionHelper(fi.path().isEmpty() ? QString() : fi.path() + QLatin1Char('/'),
fi.fileName(), q->allSelectors());
diff --git x/qtbase/tests/auto/corelib/io/qfileselector/tst_qfileselector.cpp y/qtbase/tests/auto/corelib/io/qfileselector/tst_qfileselector.cpp
index e5ede1ad06..8c2886f337 100644
--- x/qtbase/tests/auto/corelib/io/qfileselector/tst_qfileselector.cpp
+++ y/qtbase/tests/auto/corelib/io/qfileselector/tst_qfileselector.cpp
@@ -138,7 +138,7 @@ void tst_QFileSelector::basicTest_data()
<< QString(":/extras/test2");
QTest::newRow("custom1-withselector-nobasefile") << QString(":/extras/test3") << (QStringList() << custom1)
- << QString(":/extras/test3");
+ << QString(":/extras/+custom1/test3");
QString custom2("custom2");
QString custom3("custom3");
--
2.11.0

View File

@ -1,681 +0,0 @@
From 0d81394307262f386e9e7d05b37f373c6e64066d Mon Sep 17 00:00:00 2001
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
Date: Thu, 5 Jan 2017 13:43:57 +0100
Subject: QNearfieldTarget: Introduce (set)keepConnection() and disconnect()
For the communication with a German ID card its required to execute
several commands in a row, whereby a state is generated. Every command
works on the state created by the command before. Depending on the
Android version the state gets lost when the connection is closed.
With this change it is possible to keep the connection as long as needed
and close it manually. Because of backward compatibility the connection
is created and closed automatically by default. With the use of
setKeepConnection(true) the communication with the target is also a
lot of faster.
[ChangeLog][QNearfieldTarget] Introduce (set)keepConnection() and
disconnect() to keep the state of a target and speed up communication.
Change-Id: I5778c9bdaf04cfeae78b3222bef4475f4cd7c436
---
src/nfc/qnearfieldtarget.cpp | 46 ++++++
src/nfc/qnearfieldtarget.h | 4 +
src/nfc/qnearfieldtarget_android.cpp | 252 ++++++++++++++++++++-------------
src/nfc/qnearfieldtarget_android_p.cpp | 20 ++-
src/nfc/qnearfieldtarget_android_p.h | 8 ++
src/nfc/qnearfieldtarget_neard_p.cpp | 15 ++
src/nfc/qnearfieldtarget_p.cpp | 16 +++
src/nfc/qnearfieldtarget_p.h | 5 +
8 files changed, 265 insertions(+), 101 deletions(-)
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget.cpp y/qtconnectivity/src/nfc/qnearfieldtarget.cpp
index 274ef175..4477d74b 100644
--- x/qtconnectivity/src/nfc/qnearfieldtarget.cpp
+++ y/qtconnectivity/src/nfc/qnearfieldtarget.cpp
@@ -319,6 +319,52 @@ QUrl QNearFieldTarget::url() const
*/
/*!
+ \since 5.9
+
+ Returns true if this feature is enabled.
+
+ \sa setKeepConnection(), disconnect()
+*/
+bool QNearFieldTarget::keepConnection() const
+{
+ return d_ptr->keepConnection();
+}
+
+/*!
+ \since 5.9
+
+ Causes QNearFieldTarget to keep the connection after processing a command
+ or reading/writing NDEF messages. A call of this function is only needed once.
+
+ Returns true if enabling this feature was successful. A possible
+ reason for a failure is the lack of support on the used platform.
+
+ Enabling this feature requires to use the disconnect() function too, to close the
+ connection manually and enable communication with the target from a different instance.
+ Disabling this feature will also close an open connection.
+
+ \sa keepConnection(), disconnect()
+*/
+bool QNearFieldTarget::setKeepConnection(bool isPersistent)
+{
+ return d_ptr->setKeepConnection(isPersistent);
+}
+
+/*!
+ \since 5.9
+
+ Closes the connection to the target.
+
+ Returns true only if an existing connection was successfully closed.
+
+ \sa keepConnection(), setKeepConnection()
+*/
+bool QNearFieldTarget::disconnect()
+{
+ return d_ptr->disconnect();
+}
+
+/*!
Returns true if the target is processing commands; otherwise returns false.
*/
bool QNearFieldTarget::isProcessingCommand() const
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget.h y/qtconnectivity/src/nfc/qnearfieldtarget.h
index 620ea813..19d87e96 100644
--- x/qtconnectivity/src/nfc/qnearfieldtarget.h
+++ y/qtconnectivity/src/nfc/qnearfieldtarget.h
@@ -126,6 +126,10 @@ public:
virtual Type type() const = 0;
virtual AccessMethods accessMethods() const = 0;
+ bool keepConnection() const;
+ bool setKeepConnection(bool isPersistent);
+ bool disconnect();
+
bool isProcessingCommand() const;
// NdefAccess
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp y/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
index f41b0b2e..04718fc5 100644
--- x/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
+++ y/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
@@ -41,26 +41,27 @@
#include "android/androidjninfc_p.h"
#include "qdebug.h"
-#define NDEFTECHNOLOGY "android.nfc.tech.Ndef"
-#define NDEFFORMATABLETECHNOLOGY "android.nfc.tech.NdefFormatable"
-#define ISODEPTECHNOLOGY "android.nfc.tech.IsoDep"
-#define NFCATECHNOLOGY "android.nfc.tech.NfcA"
-#define NFCBTECHNOLOGY "android.nfc.tech.NfcB"
-#define NFCFTECHNOLOGY "android.nfc.tech.NfcF"
-#define NFCVTECHNOLOGY "android.nfc.tech.NfcV"
-#define MIFARECLASSICTECHNOLOGY "android.nfc.tech.MifareClassic"
-#define MIFARECULTRALIGHTTECHNOLOGY "android.nfc.tech.MifareUltralight"
-
-#define MIFARETAG "com.nxp.ndef.mifareclassic"
-#define NFCTAGTYPE1 "org.nfcforum.ndef.type1"
-#define NFCTAGTYPE2 "org.nfcforum.ndef.type2"
-#define NFCTAGTYPE3 "org.nfcforum.ndef.type3"
-#define NFCTAGTYPE4 "org.nfcforum.ndef.type4"
+#define NDEFTECHNOLOGY QStringLiteral("android.nfc.tech.Ndef")
+#define NDEFFORMATABLETECHNOLOGY QStringLiteral("android.nfc.tech.NdefFormatable")
+#define ISODEPTECHNOLOGY QStringLiteral("android.nfc.tech.IsoDep")
+#define NFCATECHNOLOGY QStringLiteral("android.nfc.tech.NfcA")
+#define NFCBTECHNOLOGY QStringLiteral("android.nfc.tech.NfcB")
+#define NFCFTECHNOLOGY QStringLiteral("android.nfc.tech.NfcF")
+#define NFCVTECHNOLOGY QStringLiteral("android.nfc.tech.NfcV")
+#define MIFARECLASSICTECHNOLOGY QStringLiteral("android.nfc.tech.MifareClassic")
+#define MIFARECULTRALIGHTTECHNOLOGY QStringLiteral("android.nfc.tech.MifareUltralight")
+
+#define MIFARETAG QStringLiteral("com.nxp.ndef.mifareclassic")
+#define NFCTAGTYPE1 QStringLiteral("org.nfcforum.ndef.type1")
+#define NFCTAGTYPE2 QStringLiteral("org.nfcforum.ndef.type2")
+#define NFCTAGTYPE3 QStringLiteral("org.nfcforum.ndef.type3")
+#define NFCTAGTYPE4 QStringLiteral("org.nfcforum.ndef.type4")
NearFieldTarget::NearFieldTarget(QAndroidJniObject intent, const QByteArray uid, QObject *parent) :
QNearFieldTarget(parent),
m_intent(intent),
- m_uid(uid)
+ m_uid(uid),
+ m_keepConnection(false)
{
updateTechList();
updateType();
@@ -87,23 +88,54 @@ QNearFieldTarget::AccessMethods NearFieldTarget::accessMethods() const
{
AccessMethods result = UnknownAccess;
- if (m_techList.contains(QStringLiteral(NDEFTECHNOLOGY))
- || m_techList.contains(QStringLiteral(NDEFFORMATABLETECHNOLOGY)))
+ if (m_techList.contains(NDEFTECHNOLOGY)
+ || m_techList.contains(NDEFFORMATABLETECHNOLOGY))
result |= NdefAccess;
- if (m_techList.contains(QStringLiteral(ISODEPTECHNOLOGY))
- || m_techList.contains(QStringLiteral(NFCATECHNOLOGY))
- || m_techList.contains(QStringLiteral(NFCBTECHNOLOGY))
- || m_techList.contains(QStringLiteral(NFCFTECHNOLOGY))
- || m_techList.contains(QStringLiteral(NFCVTECHNOLOGY)))
+ if (m_techList.contains(ISODEPTECHNOLOGY)
+ || m_techList.contains(NFCATECHNOLOGY)
+ || m_techList.contains(NFCBTECHNOLOGY)
+ || m_techList.contains(NFCFTECHNOLOGY)
+ || m_techList.contains(NFCVTECHNOLOGY))
result |= TagTypeSpecificAccess;
return result;
}
+bool NearFieldTarget::keepConnection() const
+{
+ return m_keepConnection;
+}
+
+bool NearFieldTarget::setKeepConnection(bool isPersistent)
+{
+ m_keepConnection = isPersistent;
+
+ if (!m_keepConnection)
+ disconnect();
+
+ return true;
+}
+
+bool NearFieldTarget::disconnect()
+{
+ if (!m_tagTech.isValid())
+ return false;
+
+ bool connected = m_tagTech.callMethod<jboolean>("isConnected");
+ if (catchJavaExceptions())
+ return false;
+
+ if (!connected)
+ return false;
+
+ m_tagTech.callMethod<void>("close");
+ return !catchJavaExceptions();
+}
+
bool NearFieldTarget::hasNdefMessage()
{
- return m_techList.contains(QStringLiteral(NDEFTECHNOLOGY));
+ return m_techList.contains(NDEFTECHNOLOGY);
}
QNearFieldTarget::RequestId NearFieldTarget::readNdefMessages()
@@ -122,8 +154,7 @@ QNearFieldTarget::RequestId NearFieldTarget::readNdefMessages()
}
// Getting Ndef technology object
- QAndroidJniObject ndef = getTagTechnology(QStringLiteral(NDEFTECHNOLOGY));
- if (!ndef.isValid()) {
+ if (!setTagTechnology({NDEFTECHNOLOGY})) {
QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::UnsupportedError),
Q_ARG(const QNearFieldTarget::RequestId&, requestId));
@@ -131,8 +162,7 @@ QNearFieldTarget::RequestId NearFieldTarget::readNdefMessages()
}
// Connect
- ndef.callMethod<void>("connect");
- if (catchJavaExceptions()) {
+ if (!connect()) {
QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::TargetOutOfRangeError),
Q_ARG(const QNearFieldTarget::RequestId&, requestId));
@@ -140,7 +170,7 @@ QNearFieldTarget::RequestId NearFieldTarget::readNdefMessages()
}
// Get NdefMessage object
- QAndroidJniObject ndefMessage = ndef.callObjectMethod("getNdefMessage", "()Landroid/nfc/NdefMessage;");
+ QAndroidJniObject ndefMessage = m_tagTech.callObjectMethod("getNdefMessage", "()Landroid/nfc/NdefMessage;");
if (catchJavaExceptions())
ndefMessage = QAndroidJniObject();
if (!ndefMessage.isValid()) {
@@ -154,9 +184,10 @@ QNearFieldTarget::RequestId NearFieldTarget::readNdefMessages()
QAndroidJniObject ndefMessageBA = ndefMessage.callObjectMethod("toByteArray", "()[B");
QByteArray ndefMessageQBA = jbyteArrayToQByteArray(ndefMessageBA.object<jbyteArray>());
- // Closing connection
- ndef.callMethod<void>("close");
- catchJavaExceptions(); // IOException at this point does not matter anymore.
+ if (!m_keepConnection) {
+ // Closing connection
+ disconnect(); // IOException at this point does not matter anymore.
+ }
// Sending QNdefMessage, requestCompleted and exit.
QNdefMessage qNdefMessage = QNdefMessage::fromByteArray(ndefMessageQBA);
@@ -173,24 +204,22 @@ QNearFieldTarget::RequestId NearFieldTarget::readNdefMessages()
int NearFieldTarget::maxCommandLength() const
{
QAndroidJniObject tagTech;
- if (m_techList.contains(QStringLiteral(ISODEPTECHNOLOGY))) {
- tagTech = getTagTechnology(QStringLiteral(ISODEPTECHNOLOGY));
- } else if (m_techList.contains(QStringLiteral(NFCATECHNOLOGY))) {
- tagTech = getTagTechnology(QStringLiteral(NFCATECHNOLOGY));
- } else if (m_techList.contains(QStringLiteral(NFCBTECHNOLOGY))) {
- tagTech = getTagTechnology(QStringLiteral(NFCBTECHNOLOGY));
- } else if (m_techList.contains(QStringLiteral(NFCFTECHNOLOGY))) {
- tagTech = getTagTechnology(QStringLiteral(NFCFTECHNOLOGY));
- } else if (m_techList.contains(QStringLiteral(NFCVTECHNOLOGY))) {
- tagTech = getTagTechnology(QStringLiteral(NFCVTECHNOLOGY));
- } else {
+ if (m_techList.contains(ISODEPTECHNOLOGY))
+ tagTech = getTagTechnology(ISODEPTECHNOLOGY);
+ else if (m_techList.contains(NFCATECHNOLOGY))
+ tagTech = getTagTechnology(NFCATECHNOLOGY);
+ else if (m_techList.contains(NFCBTECHNOLOGY))
+ tagTech = getTagTechnology(NFCBTECHNOLOGY);
+ else if (m_techList.contains(NFCFTECHNOLOGY))
+ tagTech = getTagTechnology(NFCFTECHNOLOGY);
+ else if (m_techList.contains(NFCVTECHNOLOGY))
+ tagTech = getTagTechnology(NFCVTECHNOLOGY);
+ else
return 0;
- }
int returnVal = tagTech.callMethod<jint>("getMaxTransceiveLength");
- if (catchJavaExceptions()) {
+ if (catchJavaExceptions())
return 0;
- }
return returnVal;
}
@@ -208,26 +237,14 @@ QNearFieldTarget::RequestId NearFieldTarget::sendCommand(const QByteArray &comma
QAndroidJniEnvironment env;
- QAndroidJniObject tagTech;
- if (m_techList.contains(QStringLiteral(ISODEPTECHNOLOGY))) {
- tagTech = getTagTechnology(QStringLiteral(ISODEPTECHNOLOGY));
- } else if (m_techList.contains(QStringLiteral(NFCATECHNOLOGY))) {
- tagTech = getTagTechnology(QStringLiteral(NFCATECHNOLOGY));
- } else if (m_techList.contains(QStringLiteral(NFCBTECHNOLOGY))) {
- tagTech = getTagTechnology(QStringLiteral(NFCBTECHNOLOGY));
- } else if (m_techList.contains(QStringLiteral(NFCFTECHNOLOGY))) {
- tagTech = getTagTechnology(QStringLiteral(NFCFTECHNOLOGY));
- } else if (m_techList.contains(QStringLiteral(NFCVTECHNOLOGY))) {
- tagTech = getTagTechnology(QStringLiteral(NFCVTECHNOLOGY));
- } else {
+ if (!setTagTechnology({ISODEPTECHNOLOGY, NFCATECHNOLOGY, NFCBTECHNOLOGY, NFCFTECHNOLOGY, NFCVTECHNOLOGY})) {
Q_EMIT QNearFieldTarget::error(QNearFieldTarget::UnsupportedError, QNearFieldTarget::RequestId());
return QNearFieldTarget::RequestId();
}
// Connecting
QNearFieldTarget::RequestId requestId = QNearFieldTarget::RequestId(new QNearFieldTarget::RequestIdPrivate());
- tagTech.callMethod<void>("connect");
- if (catchJavaExceptions()) {
+ if (!connect()) {
QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::TargetOutOfRangeError),
Q_ARG(const QNearFieldTarget::RequestId&, requestId));
@@ -240,7 +257,7 @@ QNearFieldTarget::RequestId NearFieldTarget::sendCommand(const QByteArray &comma
env->SetByteArrayRegion(jba, 0, ba.size(), reinterpret_cast<jbyte*>(ba.data()));
// Writing
- QAndroidJniObject myNewVal = tagTech.callObjectMethod("transceive", "([B)[B", jba);
+ QAndroidJniObject myNewVal = m_tagTech.callObjectMethod("transceive", "([B)[B", jba);
if (catchJavaExceptions()) {
QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::CommandError),
@@ -252,9 +269,10 @@ QNearFieldTarget::RequestId NearFieldTarget::sendCommand(const QByteArray &comma
handleResponse(requestId, result);
- // Closing connection, sending signal and exit
- tagTech.callMethod<void>("close");
- catchJavaExceptions(); // IOException at this point does not matter anymore.
+ if (!m_keepConnection) {
+ // Closing connection
+ disconnect(); // IOException at this point does not matter anymore.
+ }
QMetaObject::invokeMethod(this, "requestCompleted", Qt::QueuedConnection,
Q_ARG(const QNearFieldTarget::RequestId&, requestId));
@@ -264,9 +282,8 @@ QNearFieldTarget::RequestId NearFieldTarget::sendCommand(const QByteArray &comma
QNearFieldTarget::RequestId NearFieldTarget::sendCommands(const QList<QByteArray> &commands)
{
QNearFieldTarget::RequestId requestId;
- for (int i=0; i < commands.size(); i++){
+ for (int i=0; i < commands.size(); i++)
requestId = sendCommand(commands.at(i));
- }
return requestId;
}
@@ -282,22 +299,18 @@ QNearFieldTarget::RequestId NearFieldTarget::writeNdefMessages(const QList<QNdef
const char *writeMethod;
QAndroidJniObject tagTechnology;
+ if (!setTagTechnology({NDEFFORMATABLETECHNOLOGY, NDEFTECHNOLOGY}))
+ return QNearFieldTarget::RequestId();
+
// Getting write method
- if (m_techList.contains(QStringLiteral(NDEFFORMATABLETECHNOLOGY))) {
- tagTechnology = getTagTechnology(QStringLiteral(NDEFFORMATABLETECHNOLOGY));
+ if (m_tech == NDEFFORMATABLETECHNOLOGY)
writeMethod = "format";
- } else if (m_techList.contains(QStringLiteral(NDEFTECHNOLOGY))) {
- tagTechnology = getTagTechnology(QStringLiteral(NDEFTECHNOLOGY));
+ else
writeMethod = "writeNdefMessage";
- } else {
- // An invalid request id will be returned if the target does not support writing NDEF messages.
- return QNearFieldTarget::RequestId();
- }
// Connecting
QNearFieldTarget::RequestId requestId = QNearFieldTarget::RequestId(new QNearFieldTarget::RequestIdPrivate());
- tagTechnology.callMethod<void>("connect");
- if (catchJavaExceptions()) {
+ if (!connect()) {
QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::TargetOutOfRangeError),
Q_ARG(const QNearFieldTarget::RequestId&, requestId));
@@ -326,9 +339,8 @@ QNearFieldTarget::RequestId NearFieldTarget::writeNdefMessages(const QList<QNdef
return requestId;
}
- // Closing connection, sending signal and exit
- tagTechnology.callMethod<void>("close");
- catchJavaExceptions(); // IOException at this point does not matter anymore.
+ if (!m_keepConnection)
+ disconnect(); // IOException at this point does not matter anymore.
QMetaObject::invokeMethod(this, "ndefMessagesWritten", Qt::QueuedConnection);
return requestId;
}
@@ -350,19 +362,26 @@ void NearFieldTarget::setIntent(QAndroidJniObject intent)
void NearFieldTarget::checkIsTargetLost()
{
- if (!m_intent.isValid() || m_techList.isEmpty()) {
+ if (!m_intent.isValid() || !setTagTechnology(m_techList)) {
handleTargetLost();
return;
}
- // Using first available technology to check connection
- QString techStr = m_techList.first();
- QAndroidJniObject tagTech = getTagTechnology(techStr);
- tagTech.callMethod<void>("connect");
+
+ bool connected = m_tagTech.callMethod<jboolean>("isConnected");
+ if (catchJavaExceptions()) {
+ handleTargetLost();
+ return;
+ }
+
+ if (connected)
+ return;
+
+ m_tagTech.callMethod<void>("connect");
if (catchJavaExceptions(false)) {
handleTargetLost();
return;
}
- tagTech.callMethod<void>("close");
+ m_tagTech.callMethod<void>("close");
if (catchJavaExceptions(false))
handleTargetLost();
}
@@ -406,28 +425,28 @@ QNearFieldTarget::Type NearFieldTarget::getTagType() const
{
QAndroidJniEnvironment env;
- if (m_techList.contains(QStringLiteral(NDEFTECHNOLOGY))) {
- QAndroidJniObject ndef = getTagTechnology(QStringLiteral(NDEFTECHNOLOGY));
+ if (m_techList.contains(NDEFTECHNOLOGY)) {
+ QAndroidJniObject ndef = getTagTechnology(NDEFTECHNOLOGY);
QString qtype = ndef.callObjectMethod("getType", "()Ljava/lang/String;").toString();
- if (qtype.compare(QStringLiteral(MIFARETAG)) == 0)
+ if (qtype.compare(MIFARETAG) == 0)
return MifareTag;
- if (qtype.compare(QStringLiteral(NFCTAGTYPE1)) == 0)
+ if (qtype.compare(NFCTAGTYPE1) == 0)
return NfcTagType1;
- if (qtype.compare(QStringLiteral(NFCTAGTYPE2)) == 0)
+ if (qtype.compare(NFCTAGTYPE2) == 0)
return NfcTagType2;
- if (qtype.compare(QStringLiteral(NFCTAGTYPE3)) == 0)
+ if (qtype.compare(NFCTAGTYPE3) == 0)
return NfcTagType3;
- if (qtype.compare(QStringLiteral(NFCTAGTYPE4)) == 0)
+ if (qtype.compare(NFCTAGTYPE4) == 0)
return NfcTagType4;
return ProprietaryTag;
- } else if (m_techList.contains(QStringLiteral(NFCATECHNOLOGY))) {
- if (m_techList.contains(QStringLiteral(MIFARECLASSICTECHNOLOGY)))
+ } else if (m_techList.contains(NFCATECHNOLOGY)) {
+ if (m_techList.contains(MIFARECLASSICTECHNOLOGY))
return MifareTag;
// Checking ATQA/SENS_RES
// xxx0 0000 xxxx xxxx: Identifies tag Type 1 platform
- QAndroidJniObject nfca = getTagTechnology(QStringLiteral(NFCATECHNOLOGY));
+ QAndroidJniObject nfca = getTagTechnology(NFCATECHNOLOGY);
QAndroidJniObject atqaBA = nfca.callObjectMethod("getAtqa", "()[B");
QByteArray atqaQBA = jbyteArrayToQByteArray(atqaBA.object<jbyteArray>());
if (atqaQBA.isEmpty())
@@ -444,9 +463,9 @@ QNearFieldTarget::Type NearFieldTarget::getTagType() const
else if ((sakS & 0x0064) == 0x0020)
return NfcTagType4;
return ProprietaryTag;
- } else if (m_techList.contains(QStringLiteral(NFCBTECHNOLOGY))) {
+ } else if (m_techList.contains(NFCBTECHNOLOGY)) {
return NfcTagType4;
- } else if (m_techList.contains(QStringLiteral(NFCFTECHNOLOGY))) {
+ } else if (m_techList.contains(NFCFTECHNOLOGY)) {
return NfcTagType3;
}
@@ -457,7 +476,7 @@ void NearFieldTarget::setupTargetCheckTimer()
{
m_targetCheckTimer = new QTimer(this);
m_targetCheckTimer->setInterval(1000);
- connect(m_targetCheckTimer, SIGNAL(timeout()), this, SLOT(checkIsTargetLost()));
+ QObject::connect(m_targetCheckTimer, &QTimer::timeout, this, &NearFieldTarget::checkIsTargetLost);
m_targetCheckTimer->start();
}
@@ -475,9 +494,42 @@ QAndroidJniObject NearFieldTarget::getTagTechnology(const QString &tech) const
// Getting requested technology
QAndroidJniObject tag = AndroidNfc::getTag(m_intent);
const QString sig = QString::fromUtf8("(Landroid/nfc/Tag;)L%1;");
- QAndroidJniObject tagtech = QAndroidJniObject::callStaticObjectMethod(techClass.toUtf8().constData(), "get",
+ QAndroidJniObject tagTech = QAndroidJniObject::callStaticObjectMethod(techClass.toUtf8().constData(), "get",
sig.arg(techClass).toUtf8().constData(), tag.object<jobject>());
- return tagtech;
+
+ return tagTech;
+}
+
+bool NearFieldTarget::setTagTechnology(const QStringList &techList)
+{
+ for (const QString &tech : techList) {
+ if (m_techList.contains(tech)) {
+ if (m_tech == tech) {
+ return true;
+ }
+ m_tech = tech;
+ m_tagTech = getTagTechnology(tech);
+ return m_tagTech.isValid();
+ }
+ }
+
+ return false;
+}
+
+bool NearFieldTarget::connect()
+{
+ if (!m_tagTech.isValid())
+ return false;
+
+ bool connected = m_tagTech.callMethod<jboolean>("isConnected");
+ if (catchJavaExceptions())
+ return false;
+
+ if (connected)
+ return true;
+
+ m_tagTech.callMethod<void>("connect");
+ return !catchJavaExceptions();
}
QByteArray NearFieldTarget::jbyteArrayToQByteArray(const jbyteArray &byteArray) const
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_android_p.cpp y/qtconnectivity/src/nfc/qnearfieldtarget_android_p.cpp
index da2d8f2d..de553ea9 100644
--- x/qtconnectivity/src/nfc/qnearfieldtarget_android_p.cpp
+++ y/qtconnectivity/src/nfc/qnearfieldtarget_android_p.cpp
@@ -44,9 +44,27 @@
QT_BEGIN_NAMESPACE
+bool QNearFieldTargetPrivate::keepConnection() const
+{
+ NEARFIELDTARGET_Q();
+ return q->keepConnection();
+}
+
+bool QNearFieldTargetPrivate::setKeepConnection(bool isPersistent)
+{
+ NEARFIELDTARGET_Q();
+ return q->setKeepConnection(isPersistent);
+}
+
+bool QNearFieldTargetPrivate::disconnect()
+{
+ NEARFIELDTARGET_Q();
+ return q->disconnect();
+}
+
int QNearFieldTargetPrivate::maxCommandLength() const
{
- NearFieldTarget * const q = reinterpret_cast<NearFieldTarget *>(q_ptr);
+ NEARFIELDTARGET_Q();
return q->maxCommandLength();
}
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_android_p.h y/qtconnectivity/src/nfc/qnearfieldtarget_android_p.h
index f2e2ee7f..0063e9a5 100644
--- x/qtconnectivity/src/nfc/qnearfieldtarget_android_p.h
+++ y/qtconnectivity/src/nfc/qnearfieldtarget_android_p.h
@@ -75,6 +75,9 @@ public:
virtual QByteArray uid() const;
virtual Type type() const;
virtual AccessMethods accessMethods() const;
+ bool keepConnection() const;
+ bool setKeepConnection(bool isPersistent);
+ bool disconnect();
virtual bool hasNdefMessage();
virtual RequestId readNdefMessages();
int maxCommandLength() const;
@@ -99,6 +102,8 @@ protected:
void setupTargetCheckTimer();
void handleTargetLost();
QAndroidJniObject getTagTechnology(const QString &tech) const;
+ bool setTagTechnology(const QStringList &techList);
+ bool connect();
QByteArray jbyteArrayToQByteArray(const jbyteArray &byteArray) const;
bool catchJavaExceptions(bool verbose = true) const;
@@ -108,6 +113,9 @@ protected:
QStringList m_techList;
Type m_type;
QTimer *m_targetCheckTimer;
+ QString m_tech;
+ QAndroidJniObject m_tagTech;
+ bool m_keepConnection;
};
QT_END_NAMESPACE
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_neard_p.cpp y/qtconnectivity/src/nfc/qnearfieldtarget_neard_p.cpp
index 3d1bfa6c..411b80d5 100644
--- x/qtconnectivity/src/nfc/qnearfieldtarget_neard_p.cpp
+++ y/qtconnectivity/src/nfc/qnearfieldtarget_neard_p.cpp
@@ -44,6 +44,21 @@
QT_BEGIN_NAMESPACE
+bool QNearFieldTargetPrivate::keepConnection() const
+{
+ return false;
+}
+
+bool QNearFieldTargetPrivate::setKeepConnection(bool isPersistent)
+{
+ return false;
+}
+
+bool QNearFieldTargetPrivate::disconnect()
+{
+ return false;
+}
+
int QNearFieldTargetPrivate::maxCommandLength() const
{
return 0;
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_p.cpp y/qtconnectivity/src/nfc/qnearfieldtarget_p.cpp
index 3d1bfa6c..4ed17a15 100644
--- x/qtconnectivity/src/nfc/qnearfieldtarget_p.cpp
+++ y/qtconnectivity/src/nfc/qnearfieldtarget_p.cpp
@@ -44,6 +44,22 @@
QT_BEGIN_NAMESPACE
+bool QNearFieldTargetPrivate::keepConnection() const
+{
+ return false;
+}
+
+bool QNearFieldTargetPrivate::setKeepConnection(bool isPersistent)
+{
+ Q_UNUSED(isPersistent);
+ return false;
+}
+
+bool QNearFieldTargetPrivate::disconnect()
+{
+ return false;
+}
+
int QNearFieldTargetPrivate::maxCommandLength() const
{
return 0;
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_p.h y/qtconnectivity/src/nfc/qnearfieldtarget_p.h
index 9b2ed480..9cef2f55 100644
--- x/qtconnectivity/src/nfc/qnearfieldtarget_p.h
+++ y/qtconnectivity/src/nfc/qnearfieldtarget_p.h
@@ -59,6 +59,8 @@
#include <QtCore/QSharedData>
#include <QtCore/QVariant>
+#define NEARFIELDTARGET_Q() NearFieldTarget * const q = reinterpret_cast<NearFieldTarget *>(q_ptr)
+
QT_BEGIN_NAMESPACE
class QNearFieldTarget::RequestIdPrivate : public QSharedData
@@ -75,6 +77,9 @@ public:
QMap<QNearFieldTarget::RequestId, QVariant> m_decodedResponses;
+ bool keepConnection() const;
+ bool setKeepConnection(bool isPersistent);
+ bool disconnect();
int maxCommandLength() const;
};
--
2.11.0

View File

@ -0,0 +1,123 @@
From 3885257e655cefd1f8b18247aff76020c75379e1 Mon Sep 17 00:00:00 2001
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
Date: Fri, 24 Mar 2017 11:20:14 +0100
Subject: [PATCH] Register additional meta types
Register QLowEnergyCharacteristic and QLowEnergyDescriptor
as meta types because they are used in signals.
[ChangeLog][QtBluetooth] Register QLowEnergyCharacteristic
and QLowEnergyDescriptor as meta types. It is therefore
necessary to declare them as meta types in the header files.
This commit will cause conflicts with existing meta type
declarations in applications using Qt. These declarations
need to be removed.
Change-Id: I18f33b1b2f159cffd6efbacc37178286b86a06e0
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
---
src/bluetooth/osx/osxbtcentralmanager.mm | 2 --
src/bluetooth/qlowenergycharacteristic.h | 2 ++
src/bluetooth/qlowenergycontroller_p.h | 5 -----
src/bluetooth/qlowenergydescriptor.h | 2 ++
src/bluetooth/qlowenergyservice.cpp | 2 ++
.../test/tst_qlowenergycontroller-gattserver.cpp | 4 ----
tests/auto/qlowenergycontroller/tst_qlowenergycontroller.cpp | 3 ---
7 files changed, 6 insertions(+), 14 deletions(-)
diff --git x/qtconnectivity/src/bluetooth/osx/osxbtcentralmanager.mm y/qtconnectivity/src/bluetooth/osx/osxbtcentralmanager.mm
index ec046d1b..70473f1f 100644
--- x/qtconnectivity/src/bluetooth/osx/osxbtcentralmanager.mm
+++ y/qtconnectivity/src/bluetooth/osx/osxbtcentralmanager.mm
@@ -48,8 +48,6 @@
#include <algorithm>
#include <limits>
-Q_DECLARE_METATYPE(QLowEnergyCharacteristic)
-Q_DECLARE_METATYPE(QLowEnergyDescriptor)
Q_DECLARE_METATYPE(QLowEnergyHandle)
QT_BEGIN_NAMESPACE
diff --git x/qtconnectivity/src/bluetooth/qlowenergycharacteristic.h y/qtconnectivity/src/bluetooth/qlowenergycharacteristic.h
index b991e9a2..154c9936 100644
--- x/qtconnectivity/src/bluetooth/qlowenergycharacteristic.h
+++ y/qtconnectivity/src/bluetooth/qlowenergycharacteristic.h
@@ -107,4 +107,6 @@ Q_DECLARE_OPERATORS_FOR_FLAGS(QLowEnergyCharacteristic::PropertyTypes)
QT_END_NAMESPACE
+Q_DECLARE_METATYPE(QLowEnergyCharacteristic)
+
#endif // QLOWENERGYCHARACTERISTIC_H
diff --git x/qtconnectivity/src/bluetooth/qlowenergycontroller_p.h y/qtconnectivity/src/bluetooth/qlowenergycontroller_p.h
index b92716e9..6e866144 100644
--- x/qtconnectivity/src/bluetooth/qlowenergycontroller_p.h
+++ y/qtconnectivity/src/bluetooth/qlowenergycontroller_p.h
@@ -497,11 +497,6 @@ Q_DECLARE_TYPEINFO(QLowEnergyControllerPrivate::Attribute, Q_MOVABLE_TYPE);
QT_END_NAMESPACE
-#ifdef QT_WINRT_BLUETOOTH
-Q_DECLARE_METATYPE(QLowEnergyCharacteristic)
-Q_DECLARE_METATYPE(QLowEnergyDescriptor)
-#endif // QT_WINRT_BLUETOOTH
-
#endif // QT_OSX_BLUETOOTH || QT_IOS_BLUETOOTH
#endif // QLOWENERGYCONTROLLERPRIVATE_P_H
diff --git x/qtconnectivity/src/bluetooth/qlowenergydescriptor.h y/qtconnectivity/src/bluetooth/qlowenergydescriptor.h
index 1dfe1c35..9e71fc56 100644
--- x/qtconnectivity/src/bluetooth/qlowenergydescriptor.h
+++ y/qtconnectivity/src/bluetooth/qlowenergydescriptor.h
@@ -89,4 +89,6 @@ protected:
QT_END_NAMESPACE
+Q_DECLARE_METATYPE(QLowEnergyDescriptor)
+
#endif // QLOWENERGYDESCRIPTOR_H
diff --git x/qtconnectivity/src/bluetooth/qlowenergyservice.cpp y/qtconnectivity/src/bluetooth/qlowenergyservice.cpp
index 6e33c565..9d3129fd 100644
--- x/qtconnectivity/src/bluetooth/qlowenergyservice.cpp
+++ y/qtconnectivity/src/bluetooth/qlowenergyservice.cpp
@@ -380,6 +380,8 @@ QLowEnergyService::QLowEnergyService(QSharedPointer<QLowEnergyServicePrivate> p,
qRegisterMetaType<QLowEnergyService::ServiceError>();
qRegisterMetaType<QLowEnergyService::ServiceType>();
qRegisterMetaType<QLowEnergyService::WriteMode>();
+ qRegisterMetaType<QLowEnergyCharacteristic>();
+ qRegisterMetaType<QLowEnergyDescriptor>();
connect(p.data(), SIGNAL(error(QLowEnergyService::ServiceError)),
this, SIGNAL(error(QLowEnergyService::ServiceError)));
diff --git x/qtconnectivity/tests/auto/qlowenergycontroller-gattserver/test/tst_qlowenergycontroller-gattserver.cpp y/qtconnectivity/tests/auto/qlowenergycontroller-gattserver/test/tst_qlowenergycontroller-gattserver.cpp
index 3df27d92..e01457eb 100644
--- x/qtconnectivity/tests/auto/qlowenergycontroller-gattserver/test/tst_qlowenergycontroller-gattserver.cpp
+++ y/qtconnectivity/tests/auto/qlowenergycontroller-gattserver/test/tst_qlowenergycontroller-gattserver.cpp
@@ -243,10 +243,6 @@ void TestQLowEnergyControllerGattServer::advertisedData()
QVERIFY(m_serverInfo.serviceUuids().contains(QBluetoothUuid(quint16(0x2000))));
}
-// TODO: Why on earth is this not in the library???
-Q_DECLARE_METATYPE(QLowEnergyCharacteristic)
-Q_DECLARE_METATYPE(QLowEnergyDescriptor)
-
void TestQLowEnergyControllerGattServer::serverCommunication()
{
qRegisterMetaType<QLowEnergyCharacteristic>();
diff --git x/qtconnectivity/tests/auto/qlowenergycontroller/tst_qlowenergycontroller.cpp y/qtconnectivity/tests/auto/qlowenergycontroller/tst_qlowenergycontroller.cpp
index 7b02dbcd..c6fd83e6 100644
--- x/qtconnectivity/tests/auto/qlowenergycontroller/tst_qlowenergycontroller.cpp
+++ y/qtconnectivity/tests/auto/qlowenergycontroller/tst_qlowenergycontroller.cpp
@@ -91,9 +91,6 @@ private:
QList<QBluetoothUuid> foundServices;
};
-Q_DECLARE_METATYPE(QLowEnergyCharacteristic)
-Q_DECLARE_METATYPE(QLowEnergyDescriptor)
-
tst_QLowEnergyController::tst_QLowEnergyController()
{
qRegisterMetaType<QLowEnergyCharacteristic>();
--
2.14.2

View File

@ -1,176 +0,0 @@
From 797de4af8231945e1b3688b14719900d9fd0f09e Mon Sep 17 00:00:00 2001
From: BogDan Vatra <bogdan@kdab.com>
Date: Tue, 1 Nov 2016 17:53:29 +0200
Subject: [PATCH] Use apksigner by default if available to sign the APKs
apksigner is smart enough to know which techique to use to sign the apk
based on apk's manifest file.
People that really want to use jarsigner they need to pass --jarsigner
argument
Task-number: QTBUG-56702
Change-Id: I3acd26576c5b0b312d5f2424b1c0a52e48fb920e
---
src/androiddeployqt/main.cpp | 110 ++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 109 insertions(+), 1 deletion(-)
diff --git x/qttools/src/androiddeployqt/main.cpp y/qttools/src/androiddeployqt/main.cpp
index c1fd130..fc1cb94 100644
--- x/qttools/src/androiddeployqt/main.cpp
+++ y/qttools/src/androiddeployqt/main.cpp
@@ -102,6 +102,7 @@ struct Options
, internalSf(false)
, sectionsOnly(false)
, protectedAuthenticationPath(false)
+ , jarSigner(false)
, gdbServer(Auto)
, installApk(false)
, uninstallApk(false)
@@ -181,6 +182,7 @@ struct Options
bool internalSf;
bool sectionsOnly;
bool protectedAuthenticationPath;
+ bool jarSigner;
// Gdbserver
TriState gdbServer;
@@ -446,6 +448,8 @@ Options parseOptions()
options.sectionsOnly = true;
} else if (argument.compare(QLatin1String("--protected"), Qt::CaseInsensitive) == 0) {
options.protectedAuthenticationPath = true;
+ } else if (argument.compare(QLatin1String("--jarsigner"), Qt::CaseInsensitive) == 0) {
+ options.jarSigner = true;
} else if (argument.compare(QLatin1String("--no-generated-assets-cache"), Qt::CaseInsensitive) == 0) {
options.generateAssetsFileList = false;
}
@@ -519,6 +523,8 @@ void printHelp()
" --internalsf: Include the .SF file inside the signature block.\n"
" --sectionsonly: Don't compute hash of entire manifest.\n"
" --protected: Keystore has protected authentication path.\n"
+ " --jarsigner: Force jarsigner usage, otherwise apksigner will be\n"
+ " used if available.\n"
" --gdbserver: Adds the gdbserver to the package. By default the gdbserver\n"
" is bundled for debug pacakges.\n"
" --no-gdbserver: Prevents the gdbserver from being added to the package\n"
@@ -2554,7 +2560,7 @@ bool copyGnuStl(Options *options)
return true;
}
-bool signPackage(const Options &options)
+bool jarSignerSignPackage(const Options &options)
{
if (options.verbose)
fprintf(stdout, "Signing Android package.\n");
@@ -2680,6 +2686,108 @@ bool signPackage(const Options &options)
return QFile::remove(apkPath(options, UnsignedAPK));
}
+bool signPackage(const Options &options)
+{
+ QString apksignerTool = options.sdkPath + QLatin1String("/build-tools/") + options.sdkBuildToolsVersion + QLatin1String("/apksigner");
+#if defined(Q_OS_WIN32)
+ apksignerTool += QLatin1String(".bat");
+#endif
+
+ if (options.jarSigner || !QFile::exists(apksignerTool))
+ return jarSignerSignPackage(options);
+
+ // APKs signed with apksigner must not be changed after they're signed, therefore we need to zipalign it before we sign it.
+
+ QString zipAlignTool = options.sdkPath + QLatin1String("/tools/zipalign");
+#if defined(Q_OS_WIN32)
+ zipAlignTool += QLatin1String(".exe");
+#endif
+
+ if (!QFile::exists(zipAlignTool)) {
+ zipAlignTool = options.sdkPath + QLatin1String("/build-tools/") + options.sdkBuildToolsVersion + QLatin1String("/zipalign");
+#if defined(Q_OS_WIN32)
+ zipAlignTool += QLatin1String(".exe");
+#endif
+ if (!QFile::exists(zipAlignTool)) {
+ fprintf(stderr, "zipalign tool not found: %s\n", qPrintable(zipAlignTool));
+ return false;
+ }
+ }
+
+ zipAlignTool = QString::fromLatin1("%1%2 -f 4 %3 %4")
+ .arg(shellQuote(zipAlignTool))
+ .arg(options.verbose ? QString::fromLatin1(" -v") : QString())
+ .arg(apkPath(options, UnsignedAPK))
+ .arg(apkPath(options, SignedAPK));
+
+ FILE *zipAlignCommand = openProcess(zipAlignTool);
+ if (zipAlignCommand == 0) {
+ fprintf(stderr, "Couldn't run zipalign.\n");
+ return false;
+ }
+
+ char buffer[512];
+ while (fgets(buffer, sizeof(buffer), zipAlignCommand) != 0)
+ fprintf(stdout, "%s", buffer);
+
+ int errorCode = pclose(zipAlignCommand);
+ if (errorCode != 0) {
+ fprintf(stderr, "zipalign command failed.\n");
+ if (!options.verbose)
+ fprintf(stderr, " -- Run with --verbose for more information.\n");
+ return false;
+ }
+
+ QString apkSignerCommandLine = QString::fromLatin1("%1 sign --ks %2")
+ .arg(shellQuote(apksignerTool)).arg(shellQuote(options.keyStore));
+
+ if (!options.keyStorePassword.isEmpty())
+ apkSignerCommandLine += QString::fromLatin1(" --ks-pass pass:%1").arg(shellQuote(options.keyStorePassword));
+
+ if (!options.keyStoreAlias.isEmpty())
+ apkSignerCommandLine += QString::fromLatin1(" --ks-key-alias %1").arg(shellQuote(options.keyStoreAlias));
+
+ if (!options.keyPass.isEmpty())
+ apkSignerCommandLine += QString::fromLatin1(" --key-pass pass:%1").arg(shellQuote(options.keyPass));
+
+ if (options.verbose)
+ apkSignerCommandLine += QLatin1String(" --verbose");
+
+ apkSignerCommandLine += QString::fromLatin1(" %1")
+ .arg(apkPath(options, SignedAPK));
+
+ auto apkSignerRunner = [&] {
+ FILE *apkSignerCommand = openProcess(apkSignerCommandLine);
+ if (apkSignerCommand == 0) {
+ fprintf(stderr, "Couldn't run apksigner.\n");
+ return false;
+ }
+
+ char buffer[512];
+ while (fgets(buffer, sizeof(buffer), apkSignerCommand) != 0)
+ fprintf(stdout, "%s", buffer);
+
+ errorCode = pclose(apkSignerCommand);
+ if (errorCode != 0) {
+ fprintf(stderr, "apksigner command failed.\n");
+ if (!options.verbose)
+ fprintf(stderr, " -- Run with --verbose for more information.\n");
+ return false;
+ }
+ return true;
+ };
+
+ // Sign the package
+ if (!apkSignerRunner())
+ return false;
+
+ apkSignerCommandLine = QString::fromLatin1("%1 verify --verbose %2")
+ .arg(shellQuote(apksignerTool)).arg(apkPath(options, SignedAPK));
+
+ // Verify the package and remove the unsigned apk
+ return apkSignerRunner() && QFile::remove(apkPath(options, UnsignedAPK));
+}
+
bool copyGdbServer(const Options &options)
{
if (options.verbose)
--
2.10.2

View File

@ -1,379 +0,0 @@
From eba0d9bdf34f60f2c36f8cef6c412cbed210fa2f Mon Sep 17 00:00:00 2001
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
Date: Fri, 2 Dec 2016 08:05:46 +0100
Subject: Use defaultSize according to svg standard in svg plugin
The viewBox attribute defines the svg internal coordinate system. If no
width/height is set, the viewBox size is the right choice for defaultSize.
Otherwise the standard prescribes that the specified height/width must be
used.
The old behavior ignored the width and height attributes, and this caused a
lot of problems in qml. If the viewBox was very small the result was a low
resolution image. If the viewBox was very large, loading took ages and the
result used much more memory than needed. Both situations could be avoided
by setting sourceSize. But when using the same image several times, the
sourceSize must be set every time to the same value, otherwise the image
cache would not work. It is cheaper to have the same high-quality source
image in the cache, and scale it down when required.
With the new behavior it is possible to control the default image size
directly in the svg file at one place while it is still possible to set
different sourceSizes if needed.
Task-number: QTBUG-44863
Change-Id: I9c2fc7c122a29ebcf288b7cbd12427e081d404d5
---
src/plugins/imageformats/svg/qsvgiohandler.cpp | 2 +-
tests/auto/auto.pro | 1 +
tests/auto/qsvgplugin/.gitignore | 1 +
tests/auto/qsvgplugin/qsvgplugin.pro | 8 ++
tests/auto/qsvgplugin/resources.qrc | 16 ++++
tests/auto/qsvgplugin/square.svg | 5 ++
tests/auto/qsvgplugin/square_size.svg | 5 ++
tests/auto/qsvgplugin/square_size_viewbox.svg | 5 ++
tests/auto/qsvgplugin/square_viewbox.svg | 5 ++
tests/auto/qsvgplugin/tall.svg | 5 ++
tests/auto/qsvgplugin/tall_size.svg | 5 ++
tests/auto/qsvgplugin/tall_size_viewbox.svg | 5 ++
tests/auto/qsvgplugin/tall_viewbox.svg | 5 ++
tests/auto/qsvgplugin/tst_qsvgplugin.cpp | 108 +++++++++++++++++++++++++
tests/auto/qsvgplugin/wide.svg | 5 ++
tests/auto/qsvgplugin/wide_size.svg | 5 ++
tests/auto/qsvgplugin/wide_size_viewbox.svg | 5 ++
tests/auto/qsvgplugin/wide_viewbox.svg | 5 ++
18 files changed, 195 insertions(+), 1 deletion(-)
create mode 100644 tests/auto/qsvgplugin/.gitignore
create mode 100644 tests/auto/qsvgplugin/qsvgplugin.pro
create mode 100644 tests/auto/qsvgplugin/resources.qrc
create mode 100644 tests/auto/qsvgplugin/square.svg
create mode 100644 tests/auto/qsvgplugin/square_size.svg
create mode 100644 tests/auto/qsvgplugin/square_size_viewbox.svg
create mode 100644 tests/auto/qsvgplugin/square_viewbox.svg
create mode 100644 tests/auto/qsvgplugin/tall.svg
create mode 100644 tests/auto/qsvgplugin/tall_size.svg
create mode 100644 tests/auto/qsvgplugin/tall_size_viewbox.svg
create mode 100644 tests/auto/qsvgplugin/tall_viewbox.svg
create mode 100644 tests/auto/qsvgplugin/tst_qsvgplugin.cpp
create mode 100644 tests/auto/qsvgplugin/wide.svg
create mode 100644 tests/auto/qsvgplugin/wide_size.svg
create mode 100644 tests/auto/qsvgplugin/wide_size_viewbox.svg
create mode 100644 tests/auto/qsvgplugin/wide_viewbox.svg
diff --git x/qtsvg/src/plugins/imageformats/svg/qsvgiohandler.cpp y/qtsvg/src/plugins/imageformats/svg/qsvgiohandler.cpp
index 88d37bc..0c26cb5 100644
--- x/qtsvg/src/plugins/imageformats/svg/qsvgiohandler.cpp
+++ y/qtsvg/src/plugins/imageformats/svg/qsvgiohandler.cpp
@@ -98,7 +98,7 @@ bool QSvgIOHandlerPrivate::load(QIODevice *device)
}
if (res) {
- defaultSize = QSize(r.viewBox().width(), r.viewBox().height());
+ defaultSize = r.defaultSize();
loaded = true;
}
diff --git x/qtsvg/tests/auto/auto.pro y/qtsvg/tests/auto/auto.pro
index 43ff500..e2d84ec 100644
--- x/qtsvg/tests/auto/auto.pro
+++ y/qtsvg/tests/auto/auto.pro
@@ -4,6 +4,7 @@ qtHaveModule(widgets) {
qsvgdevice \
qsvggenerator \
qsvgrenderer \
+ qsvgplugin \
qicon_svg \
cmake \
installed_cmake
diff --git x/qtsvg/tests/auto/qsvgplugin/.gitignore y/qtsvg/tests/auto/qsvgplugin/.gitignore
new file mode 100644
index 0000000..c41c448
--- /dev/null
+++ y/qtsvg/tests/auto/qsvgplugin/.gitignore
@@ -0,0 +1 @@
+tst_qsvgplugin
diff --git x/qtsvg/tests/auto/qsvgplugin/qsvgplugin.pro y/qtsvg/tests/auto/qsvgplugin/qsvgplugin.pro
new file mode 100644
index 0000000..3fec52e
--- /dev/null
+++ y/qtsvg/tests/auto/qsvgplugin/qsvgplugin.pro
@@ -0,0 +1,8 @@
+TARGET = tst_qsvgplugin
+CONFIG += testcase
+QT += svg testlib widgets gui-private
+
+SOURCES += tst_qsvgplugin.cpp
+RESOURCES += resources.qrc
+
+DEFINES += SRCDIR=\\\"$$PWD/\\\"
diff --git x/qtsvg/tests/auto/qsvgplugin/resources.qrc y/qtsvg/tests/auto/qsvgplugin/resources.qrc
new file mode 100644
index 0000000..fcb311a
--- /dev/null
+++ y/qtsvg/tests/auto/qsvgplugin/resources.qrc
@@ -0,0 +1,16 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+ <file>square.svg</file>
+ <file>square_size.svg</file>
+ <file>square_size_viewbox.svg</file>
+ <file>square_viewbox.svg</file>
+ <file>tall.svg</file>
+ <file>tall_size.svg</file>
+ <file>tall_size_viewbox.svg</file>
+ <file>tall_viewbox.svg</file>
+ <file>wide.svg</file>
+ <file>wide_size.svg</file>
+ <file>wide_size_viewbox.svg</file>
+ <file>wide_viewbox.svg</file>
+</qresource>
+</RCC>
diff --git x/qtsvg/tests/auto/qsvgplugin/square.svg y/qtsvg/tests/auto/qsvgplugin/square.svg
new file mode 100644
index 0000000..f35fb87
--- /dev/null
+++ y/qtsvg/tests/auto/qsvgplugin/square.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg">
+ <circle cx="50" cy="50" r="25" fill="#00ff00" />
+</svg>
diff --git x/qtsvg/tests/auto/qsvgplugin/square_size.svg y/qtsvg/tests/auto/qsvgplugin/square_size.svg
new file mode 100644
index 0000000..f4aeb67
--- /dev/null
+++ y/qtsvg/tests/auto/qsvgplugin/square_size.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="200px" height="200px">
+ <circle cx="50" cy="50" r="25" fill="#00ff00" />
+</svg>
diff --git x/qtsvg/tests/auto/qsvgplugin/square_size_viewbox.svg y/qtsvg/tests/auto/qsvgplugin/square_size_viewbox.svg
new file mode 100644
index 0000000..cf39bd7
--- /dev/null
+++ y/qtsvg/tests/auto/qsvgplugin/square_size_viewbox.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="200px" height="200px" viewBox="0 0 100 100">
+ <circle cx="50" cy="50" r="25" fill="#00ff00" />
+</svg>
diff --git x/qtsvg/tests/auto/qsvgplugin/square_viewbox.svg y/qtsvg/tests/auto/qsvgplugin/square_viewbox.svg
new file mode 100644
index 0000000..5811505
--- /dev/null
+++ y/qtsvg/tests/auto/qsvgplugin/square_viewbox.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+ <circle cx="50" cy="50" r="25" fill="#00ff00" />
+</svg>
diff --git x/qtsvg/tests/auto/qsvgplugin/tall.svg y/qtsvg/tests/auto/qsvgplugin/tall.svg
new file mode 100644
index 0000000..b243b62
--- /dev/null
+++ y/qtsvg/tests/auto/qsvgplugin/tall.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg">
+ <ellipse cx="25" cy="50" rx="12.5" ry="25" fill="#00ff00" />
+</svg>
diff --git x/qtsvg/tests/auto/qsvgplugin/tall_size.svg y/qtsvg/tests/auto/qsvgplugin/tall_size.svg
new file mode 100644
index 0000000..6121451
--- /dev/null
+++ y/qtsvg/tests/auto/qsvgplugin/tall_size.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="100px" height="200px">
+ <ellipse cx="25" cy="50" rx="12.5" ry="25" fill="#00ff00" />
+</svg>
diff --git x/qtsvg/tests/auto/qsvgplugin/tall_size_viewbox.svg y/qtsvg/tests/auto/qsvgplugin/tall_size_viewbox.svg
new file mode 100644
index 0000000..9d82492
--- /dev/null
+++ y/qtsvg/tests/auto/qsvgplugin/tall_size_viewbox.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="100px" height="200px" viewBox="0 0 50 100">
+ <ellipse cx="25" cy="50" rx="12.5" ry="25" fill="#00ff00" />
+</svg>
diff --git x/qtsvg/tests/auto/qsvgplugin/tall_viewbox.svg y/qtsvg/tests/auto/qsvgplugin/tall_viewbox.svg
new file mode 100644
index 0000000..8ed61a9
--- /dev/null
+++ y/qtsvg/tests/auto/qsvgplugin/tall_viewbox.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 100">
+ <ellipse cx="25" cy="50" rx="12.5" ry="25" fill="#00ff00" />
+</svg>
diff --git x/qtsvg/tests/auto/qsvgplugin/tst_qsvgplugin.cpp y/qtsvg/tests/auto/qsvgplugin/tst_qsvgplugin.cpp
new file mode 100644
index 0000000..4ec1737
--- /dev/null
+++ y/qtsvg/tests/auto/qsvgplugin/tst_qsvgplugin.cpp
@@ -0,0 +1,108 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include <QtTest/QtTest>
+
+#include "../../../src/plugins/imageformats/svg/qsvgiohandler.cpp"
+#include <QImage>
+#include <QStringList>
+#include <QVector>
+
+#ifndef SRCDIR
+#define SRCDIR
+#endif
+
+
+class tst_QSvgPlugin : public QObject
+{
+Q_OBJECT
+
+public:
+ tst_QSvgPlugin();
+ virtual ~tst_QSvgPlugin();
+
+private slots:
+ void checkSize_data();
+ void checkSize();
+};
+
+
+
+tst_QSvgPlugin::tst_QSvgPlugin()
+{
+}
+
+tst_QSvgPlugin::~tst_QSvgPlugin()
+{
+}
+
+void tst_QSvgPlugin::checkSize_data()
+{
+ QTest::addColumn<QString>("filename");
+ QTest::addColumn<int>("imageHeight");
+ QTest::addColumn<int>("imageWidth");
+
+ QTest::newRow("square") << SRCDIR "square.svg" << 50 << 50;
+ QTest::newRow("square_size") << SRCDIR "square_size.svg" << 200 << 200;
+ QTest::newRow("square_size_viewbox") << SRCDIR "square_size_viewbox.svg" << 200 << 200;
+ QTest::newRow("square_viewbox") << SRCDIR "square_viewbox.svg" << 100 << 100;
+ QTest::newRow("tall") << SRCDIR "tall.svg" << 50 << 25;
+ QTest::newRow("tall_size") << SRCDIR "tall_size.svg" << 200 << 100;
+ QTest::newRow("tall_size_viewbox") << SRCDIR "tall_size_viewbox.svg" << 200 << 100;
+ QTest::newRow("tall_viewbox") << SRCDIR "tall_viewbox.svg" << 100 << 50;
+ QTest::newRow("wide") << SRCDIR "wide.svg" << 25 << 50;
+ QTest::newRow("wide_size") << SRCDIR "wide_size.svg" << 100 << 200;
+ QTest::newRow("wide_size_viewbox") << SRCDIR "wide_size_viewbox.svg" << 100 << 200;
+ QTest::newRow("wide_viewbox") << SRCDIR "wide_viewbox.svg" << 50 << 100;
+}
+
+void tst_QSvgPlugin::checkSize()
+{
+ QFETCH(QString, filename);
+ QFETCH(int, imageHeight);
+ QFETCH(int, imageWidth);
+
+ QFile file(filename);
+ file.open(QIODevice::ReadOnly);
+
+ QSvgIOHandler plugin;
+ plugin.setDevice(&file);
+
+ QImage image;
+ plugin.read(&image);
+
+ file.close();
+
+ QCOMPARE(imageHeight, image.height());
+ QCOMPARE(imageWidth, image.width());
+}
+
+
+QTEST_MAIN(tst_QSvgPlugin)
+#include "tst_qsvgplugin.moc"
diff --git x/qtsvg/tests/auto/qsvgplugin/wide.svg y/qtsvg/tests/auto/qsvgplugin/wide.svg
new file mode 100644
index 0000000..9166606
--- /dev/null
+++ y/qtsvg/tests/auto/qsvgplugin/wide.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg">
+ <ellipse cx="50" cy="25" rx="25" ry="12.5" fill="#00ff00" />
+</svg>
diff --git x/qtsvg/tests/auto/qsvgplugin/wide_size.svg y/qtsvg/tests/auto/qsvgplugin/wide_size.svg
new file mode 100644
index 0000000..e816154
--- /dev/null
+++ y/qtsvg/tests/auto/qsvgplugin/wide_size.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="200px" height="100px">
+ <ellipse cx="50" cy="25" rx="25" ry="12.5" fill="#00ff00" />
+</svg>
diff --git x/qtsvg/tests/auto/qsvgplugin/wide_size_viewbox.svg y/qtsvg/tests/auto/qsvgplugin/wide_size_viewbox.svg
new file mode 100644
index 0000000..3d9b044
--- /dev/null
+++ y/qtsvg/tests/auto/qsvgplugin/wide_size_viewbox.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="200px" height="100px" viewBox="0 0 100 50">
+ <ellipse cx="50" cy="25" rx="25" ry="12.5" fill="#00ff00" />
+</svg>
diff --git x/qtsvg/tests/auto/qsvgplugin/wide_viewbox.svg y/qtsvg/tests/auto/qsvgplugin/wide_viewbox.svg
new file mode 100644
index 0000000..aface45
--- /dev/null
+++ y/qtsvg/tests/auto/qsvgplugin/wide_viewbox.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 50">
+ <ellipse cx="50" cy="25" rx="25" ry="12.5" fill="#00ff00" />
+</svg>
--
2.11.0

View File

@ -0,0 +1,90 @@
From 13f25c979fe4396e6d5a76bf183341229da2bacd Mon Sep 17 00:00:00 2001
From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
Date: Thu, 30 Nov 2017 15:00:26 +0100
Subject: [PATCH] macOS/iOS: Fix garbled text under some conditions
There seems to be an issue in CoreText which may cause an existing
font descriptor to give unreliable results if it refers to one of
the system theme fonts. Since we do not know all function calls
or events that may trigger this bug, the safe route is to always
create fresh font descriptors when creating fonts for these
descriptors. The impact on performance should be small, as Qt has
its own internal caches.
[ChangeLog][macOS/iOS][Text] Fixed an issue where text using
one of the system theme fonts would under certain circumstances
display random glyphs.
Task-number: QTBUG-63476
Change-Id: I9e9b253018c63976345eec1439a6b78de2cab869
---
.../fontdatabases/mac/qcoretextfontdatabase.mm | 24 ++++++++++++++--------
.../fontdatabases/mac/qcoretextfontdatabase_p.h | 4 +++-
2 files changed, 19 insertions(+), 9 deletions(-)
diff --git x/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm y/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm
index 6347d4d231..237e8a89a5 100644
--- x/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm
+++ y/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm
@@ -416,7 +416,19 @@ extern CGAffineTransform qt_transform_from_fontdef(const QFontDef &fontDef);
template <>
QFontEngine *QCoreTextFontDatabaseEngineFactory<QCoreTextFontEngine>::fontEngine(const QFontDef &fontDef, void *usrPtr)
{
- CTFontDescriptorRef descriptor = static_cast<CTFontDescriptorRef>(usrPtr);
+ QCFType<CTFontDescriptorRef> descriptor = QCFType<CTFontDescriptorRef>::constructFromGet(
+ static_cast<CTFontDescriptorRef>(usrPtr));
+
+ // CoreText will sometimes invalidate information in font descriptors that refer
+ // to system fonts in certain function calls or application states. While the descriptor
+ // looks the same from the outside, some internal plumbing is different, causing the results
+ // of creating CTFonts from those descriptors unreliable. The work-around for this
+ // is to copy the attributes of those descriptors each time we make a new CTFont
+ // from them instead of referring to the original, as that may trigger the CoreText bug.
+ if (m_systemFontDescriptors.contains(descriptor)) {
+ QCFType<CFDictionaryRef> attributes = CTFontDescriptorCopyAttributes(descriptor);
+ descriptor = CTFontDescriptorCreateWithAttributes(attributes);
+ }
// Since we do not pass in the destination DPI to CoreText when making
// the font, we need to pass in a point size which is scaled to include
@@ -427,14 +439,10 @@ QFontEngine *QCoreTextFontDatabaseEngineFactory<QCoreTextFontEngine>::fontEngine
qreal scaledPointSize = fontDef.pixelSize;
CGAffineTransform matrix = qt_transform_from_fontdef(fontDef);
- CTFontRef font = CTFontCreateWithFontDescriptor(descriptor, scaledPointSize, &matrix);
- if (font) {
- QFontEngine *engine = new QCoreTextFontEngine(font, fontDef);
- CFRelease(font);
- return engine;
- }
+ if (QCFType<CTFontRef> font = CTFontCreateWithFontDescriptor(descriptor, scaledPointSize, &matrix))
+ return new QCoreTextFontEngine(font, fontDef);
- return NULL;
+ return nullptr;
}
#ifndef QT_NO_FREETYPE
diff --git x/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase_p.h y/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase_p.h
index 9612b909f1..e14d1d6e6e 100644
--- x/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase_p.h
+++ y/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase_p.h
@@ -91,12 +91,14 @@ public:
QFont *themeFont(QPlatformTheme::Font) const;
const QHash<QPlatformTheme::Font, QFont *> &themeFonts() const;
+protected:
+ mutable QSet<CTFontDescriptorRef> m_systemFontDescriptors;
+
private:
void populateFromDescriptor(CTFontDescriptorRef font, const QString &familyName = QString());
mutable QString defaultFontName;
- mutable QSet<CTFontDescriptorRef> m_systemFontDescriptors;
mutable QHash<QPlatformTheme::Font, QFont *> m_themeFonts;
bool m_hasPopulatedAliases;
};
--
2.15.1

View File

@ -1,49 +0,0 @@
--- Makefile.shared.orig 2014-05-09 12:44:04.801960645 +0200
+++ Makefile.shared 2014-05-09 13:08:04.595689322 +0200
@@ -109,23 +109,7 @@
$${SHAREDCMD} $${SHAREDFLAGS} \
-o $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX \
$$ALLSYMSFLAGS $$SHOBJECTS $$NOALLSYMSFLAGS $$LIBDEPS \
- ) && $(SYMLINK_SO)
-
-SYMLINK_SO= \
- if [ -n "$$INHIBIT_SYMLINKS" ]; then :; else \
- prev=$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX; \
- if [ -n "$$SHLIB_COMPAT" ]; then \
- for x in $$SHLIB_COMPAT; do \
- ( $(SET_X); rm -f $$SHLIB$$x$$SHLIB_SUFFIX; \
- ln -s $$prev $$SHLIB$$x$$SHLIB_SUFFIX ); \
- prev=$$SHLIB$$x$$SHLIB_SUFFIX; \
- done; \
- fi; \
- if [ -n "$$SHLIB_SOVER" ]; then \
- ( $(SET_X); rm -f $$SHLIB$$SHLIB_SUFFIX; \
- ln -s $$prev $$SHLIB$$SHLIB_SUFFIX ); \
- fi; \
- fi
+ )
LINK_SO_A= SHOBJECTS="lib$(LIBNAME).a $(LIBEXTRAS)"; $(LINK_SO)
LINK_SO_O= SHOBJECTS="$(LIBEXTRAS)"; $(LINK_SO)
@@ -578,18 +562,15 @@
symlink.gnu symlink.solaris symlink.svr3 symlink.svr5 symlink.irix \
symlink.aix symlink.reliantunix:
@ $(CALC_VERSIONS); \
- SHLIB=lib$(LIBNAME).so; \
- $(SYMLINK_SO)
+ SHLIB=lib$(LIBNAME).so;
symlink.darwin:
@ $(CALC_VERSIONS); \
SHLIB=lib$(LIBNAME); \
- SHLIB_SUFFIX=.dylib; \
- $(SYMLINK_SO)
+ SHLIB_SUFFIX=.dylib;
symlink.hpux:
@ $(CALC_VERSIONS); \
SHLIB=lib$(LIBNAME).sl; \
- expr $(PLATFORM) : '.*ia64' > /dev/null && SHLIB=lib$(LIBNAME).so; \
- $(SYMLINK_SO)
+ expr $(PLATFORM) : '.*ia64' > /dev/null && SHLIB=lib$(LIBNAME).so;
# The following lines means those specific architectures do no symlinks
symlink.cygwin symlink.alpha-osf1 symlink.tru64 symlink.tru64-rpath symlink.beos:

View File

@ -1,8 +0,0 @@
#!/bin/sh
echo "Patching Configure..."
#sed -i 's/.so.\\$(SHLIB_MAJOR).\\$(SHLIB_MINOR)/.so/g' Configure
sed -i 's/.\\$(SHLIB_MAJOR).\\$(SHLIB_MINOR)//g' Configure
echo "Patching Makefile..."
sed -i 's/$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX/$$SHLIB/g' Makefile.shared

View File

@ -1,7 +1,23 @@
FUNCTION(WRITE_QRC _dest_file _dir _prefix)
FILE(GLOB_RECURSE files "${_dir}/*")
FILE(WRITE "${_dest_file}" "<!DOCTYPE RCC><RCC version=\"1.0\"><qresource prefix=\"/${_prefix}/\">\n")
FOREACH(file ${files})
STRING(REPLACE "${_dir}/" "" file_alias "${file}")
FILE(APPEND "${_dest_file}" "<file alias=\"${file_alias}\">${file}</file>\n")
ENDFOREACH()
FILE(APPEND "${_dest_file}" "</qresource></RCC>")
ENDFUNCTION()
SET(QRC_FILES "ausweisapp.qrc")
IF(IOS OR ANDROID OR ${CMAKE_BUILD_TYPE} STREQUAL "DEBUG")
LIST(APPEND QRC_FILES "ausweisapp_mobile.qrc")
SET(ausweisapp_qml.qrc "${CMAKE_CURRENT_BINARY_DIR}/ausweisapp_qml.qrc")
WRITE_QRC("${ausweisapp_qml.qrc}" "${CMAKE_CURRENT_SOURCE_DIR}/qml" "qml")
LIST(APPEND QRC_FILES "${ausweisapp_qml.qrc}")
ENDIF()
IF(DESKTOP)
@ -12,7 +28,3 @@ SET(RCC ${CMAKE_BINARY_DIR}/src/${PROJECT_NAME}.rcc)
SET(RCC ${RCC} PARENT_SCOPE)
qt5_add_binary_resources(AusweisAppRcc "${QRC_FILES}" DESTINATION ${RCC})
SET(QML_IMPORT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/qml ${CMAKE_CURRENT_SOURCE_DIR}/qml_stationary CACHE string "qml files" FORCE)
IF(WIN32)
SET(WINDOWS_RC "${CMAKE_CURRENT_SOURCE_DIR}/windows.rc" PARENT_SCOPE)
ENDIF()

View File

@ -29,7 +29,6 @@
<file>images/iOS/tabBar/Pin-on.png</file>
<file>images/iOS/tabBar/Verlauf-off.png</file>
<file>images/iOS/tabBar/Verlauf-on.png</file>
<file>images/icon_Bluetooth.svg</file>
<file>images/icon_Pin.svg</file>
<file>images/iOS/tabBar/More-off.svg</file>
<file>images/iOS/tabBar/More-on.svg</file>
@ -57,28 +56,34 @@
<file>images/provider/gradient-insurance.png</file>
<file>images/provider/gradient-finance.png</file>
<file>images/provider/gradient-other.png</file>
<file>images/provider/categoryIcons/+android/General.svg</file>
<file>images/provider/categoryIcons/+android/CitizenServices.svg</file>
<file>images/provider/categoryIcons/+android/Financials.svg</file>
<file>images/provider/categoryIcons/+android/Insurances.svg</file>
<file>images/provider/categoryIcons/+android/OtherServices.svg</file>
<file>images/provider/categoryIcons/+android/General_bg.svg</file>
<file>images/provider/categoryIcons/+android/General_button.svg</file>
<file>images/provider/categoryIcons/+android/CitizenServices_bg.svg</file>
<file>images/provider/categoryIcons/+android/CitizenServices_button.svg</file>
<file>images/provider/categoryIcons/+android/Financials_bg.svg</file>
<file>images/provider/categoryIcons/+android/Financials_button.svg</file>
<file>images/provider/categoryIcons/+android/Insurances_bg.svg</file>
<file>images/provider/categoryIcons/+android/Insurances_button.svg</file>
<file>images/provider/categoryIcons/+android/OtherServices_bg.svg</file>
<file>images/provider/categoryIcons/+android/OtherServices_button.svg</file>
<file>images/provider/categoryIcons/+android/General_section.svg</file>
<file>images/provider/categoryIcons/+android/CitizenServices_section.svg</file>
<file>images/provider/categoryIcons/+android/Financials_section.svg</file>
<file>images/provider/categoryIcons/+android/Insurances_section.svg</file>
<file>images/provider/categoryIcons/+android/OtherServices_section.svg</file>
<file>images/provider/categoryIcons/+android/general.svg</file>
<file>images/provider/categoryIcons/+android/citizen.svg</file>
<file>images/provider/categoryIcons/+android/finance.svg</file>
<file>images/provider/categoryIcons/+android/insurance.svg</file>
<file>images/provider/categoryIcons/+android/other.svg</file>
<file>images/provider/categoryIcons/+android/general_bg.svg</file>
<file>images/provider/categoryIcons/+android/general_button.svg</file>
<file>images/provider/categoryIcons/+android/citizen_bg.svg</file>
<file>images/provider/categoryIcons/+android/citizen_button.svg</file>
<file>images/provider/categoryIcons/+android/finance_bg.svg</file>
<file>images/provider/categoryIcons/+android/finance_button.svg</file>
<file>images/provider/categoryIcons/+android/insurance_bg.svg</file>
<file>images/provider/categoryIcons/+android/insurance_button.svg</file>
<file>images/provider/categoryIcons/+android/other_bg.svg</file>
<file>images/provider/categoryIcons/+android/other_button.svg</file>
<file>images/provider/categoryIcons/+android/general_section.svg</file>
<file>images/provider/categoryIcons/+android/citizen_section.svg</file>
<file>images/provider/categoryIcons/+android/finance_section.svg</file>
<file>images/provider/categoryIcons/+android/insurance_section.svg</file>
<file>images/provider/categoryIcons/+android/other_section.svg</file>
<file>updatable-files/supported-providers.json</file>
<file>images/icon_nfc.svg</file>
<file>images/icon_remote.svg</file>
<file>images/icon_bluetooth.svg</file>
<file>images/phone_nfc.svg</file>
<file>images/phone_remote.svg</file>
<file>images/phone_bluetooth.svg</file>
<file>images/location_flag_de.svg</file>
<file>images/location_flag_en.svg</file>
</qresource>
</RCC>

View File

@ -2,13 +2,12 @@
<qresource prefix="/">
<file>html_templates/alreadyactive.html</file>
<file>html_templates/error.html</file>
<file>stylesheets/common.qss</file>
<file>stylesheets/macos.qss</file>
<file>stylesheets/windows.qss</file>
<file>stylesheets/desktop.qss</file>
<file>images/beta.svg</file>
<file>images/green_check_mark.svg</file>
<file>images/MenuSelected.png</file>
<file>images/MenuUnselected.png</file>
<file>images/MenuUnselectedDisabled.png</file>
@ -19,6 +18,8 @@
<file>images/start_nPA_eAT.png</file>
<file>images/busy_animation.gif</file>
<file>images/html_message_section.jpg</file>
<file>images/padlock.svg</file>
<file>images/padlock_empty.svg</file>
<file>images/randompin/btn_normal_0.png</file>
<file>images/randompin/btn_normal_1.png</file>
<file>images/randompin/btn_normal_2.png</file>
@ -33,36 +34,63 @@
<file>images/randompin/btn_ok.png</file>
<file>images/randompin/btn_cancel.png</file>
<file>images/randompin/btn_clear.png</file>
<file>images/reader/default_no_cardreader_01.png</file>
<file>images/reader/default_more_cardreader.png</file>
<file>images/reader/default_no_card_found.png</file>
<file>images/reader/img_cyberjack_wave.png</file>
<file>images/reader/img_cyberjack_wave_mit_ausweis.png</file>
<file>images/reader/img_Reiner_SCT_cyberjack_RFID_komfort.png</file>
<file>images/reader/img_Reiner_SCT_cyberjack_RFID_komfort_mit_ausweis.png</file>
<file>images/reader/img_Reiner_SCT_cyberjack_RFID_standard.png</file>
<file>images/reader/img_Reiner_SCT_cyberjack_RFID_standard_mit_ausweis.png</file>
<file>images/reader/img_Reiner_SCT_cyberjack_RFID_basis.png</file>
<file>images/reader/img_Reiner_SCT_cyberjack_RFID_basis_mit_ausweis.png</file>
<file>images/reader/img_Identive_SCL011.png</file>
<file>images/reader/img_Identive_SCL011_mit_ausweis.png</file>
<file>images/reader/img_Identive_SDI011.png</file>
<file>images/reader/img_Identive_SDI011_mit_ausweis.png</file>
<file>images/reader/img_KOBIL_ID_Token.png</file>
<file>images/reader/img_KOBIL_ID_Token_mit_ausweis.png</file>
<file>images/reader/img_ACS_ACR1281U.png</file>
<file>images/reader/img_ACS_ACR1281U_mit_ausweis.png</file>
<file>images/reader/img_HID_Global_OMNIKEY_5321_V2.png</file>
<file>images/reader/img_HID_Global_OMNIKEY_5321_V2_mit_ausweis.png</file>
<file>images/reader/img_HID_Omnikey_Mobile_Reader_4121_CL.png</file>
<file>images/reader/img_HID_Omnikey_Mobile_Reader_4121_CL_mit_ausweis.png</file>
<file>images/reader/img_FEIG_myAXXES_basic.png</file>
<file>images/reader/img_FEIG_myAXXES_basic_mit_ausweis.png</file>
<file>images/reader/img_Gemalto_Prox_SU.png</file>
<file>images/reader/img_Gemalto_Prox_SU_mit_ausweis.png</file>
<file>images/reader/img_Gemalto_Prox_DU.png</file>
<file>images/reader/img_Gemalto_Prox_DU_mit_ausweis.png</file>
<file>images/reader/default_more_reader.png</file>
<file>images/reader/default_no_card.png</file>
<file>images/reader/default_no_reader.png</file>
<file>images/reader/default_reader.png</file>
<file>images/reader/default_reader_mit_ausweis.png</file>
<file>updatable-files/supported-readers.json</file>
<file>updatable-files/reader/img_ACS_ACR122U.png</file>
<file>updatable-files/reader/img_ACS_ACR122U_mit_ausweis.png</file>
<file>updatable-files/reader/img_ACS_ACR1252U.png</file>
<file>updatable-files/reader/img_ACS_ACR1252U_mit_ausweis.png</file>
<file>updatable-files/reader/img_ACS_ACR1281U.png</file>
<file>updatable-files/reader/img_ACS_ACR1281U_mit_ausweis.png</file>
<file>updatable-files/reader/img_Cherry_TC_1200.png</file>
<file>updatable-files/reader/img_Cherry_TC_1200_mit_ausweis.png</file>
<file>updatable-files/reader/img_Cherry_TC_1300.png</file>
<file>updatable-files/reader/img_Cherry_TC_1300_mit_ausweis.png</file>
<file>updatable-files/reader/img_cyberjack_wave.png</file>
<file>updatable-files/reader/img_cyberjack_wave_mit_ausweis.png</file>
<file>updatable-files/reader/img_FEIG_myAXXES_basic.png</file>
<file>updatable-files/reader/img_FEIG_myAXXES_basic_mit_ausweis.png</file>
<file>updatable-files/reader/img_Gemalto_Prox_DU.png</file>
<file>updatable-files/reader/img_Gemalto_Prox_DU_mit_ausweis.png</file>
<file>updatable-files/reader/img_Gemalto_Prox_SU.png</file>
<file>updatable-files/reader/img_Gemalto_Prox_SU_mit_ausweis.png</file>
<file>updatable-files/reader/img_HID_Global_OMNIKEY_5321_V2.png</file>
<file>updatable-files/reader/img_HID_Global_OMNIKEY_5321_V2_mit_ausweis.png</file>
<file>updatable-files/reader/img_HID_Omnikey_5421.png</file>
<file>updatable-files/reader/img_HID_Omnikey_5421_mit_ausweis.png</file>
<file>updatable-files/reader/img_HID_Omnikey_Mobile_Reader_4121_CL.png</file>
<file>updatable-files/reader/img_HID_Omnikey_Mobile_Reader_4121_CL_mit_ausweis.png</file>
<file>updatable-files/reader/img_HID_Omnikey_Mobile_Reader_5021_CL.png</file>
<file>updatable-files/reader/img_HID_Omnikey_Mobile_Reader_5021_CL_mit_ausweis.png</file>
<file>updatable-files/reader/img_HID_Omnikey_Mobile_Reader_5022_CL.png</file>
<file>updatable-files/reader/img_HID_Omnikey_Mobile_Reader_5022_CL_mit_ausweis.png</file>
<file>updatable-files/reader/img_Identive_Cloud_3700_F.png</file>
<file>updatable-files/reader/img_Identive_Cloud_3700_F_mit_ausweis.png</file>
<file>updatable-files/reader/img_Identive_Cloud_4700_F.png</file>
<file>updatable-files/reader/img_Identive_Cloud_4700_F_mit_ausweis.png</file>
<file>updatable-files/reader/img_Identive_Cloud_4701_F.png</file>
<file>updatable-files/reader/img_Identive_Cloud_4701_F_mit_ausweis.png</file>
<file>updatable-files/reader/img_Identive_SCL011.png</file>
<file>updatable-files/reader/img_Identive_SCL011_mit_ausweis.png</file>
<file>updatable-files/reader/img_Identive_SCL3711.png</file>
<file>updatable-files/reader/img_Identive_SCL3711_mit_ausweis.png</file>
<file>updatable-files/reader/img_Identive_SDI010.png</file>
<file>updatable-files/reader/img_Identive_SDI010_mit_ausweis.png</file>
<file>updatable-files/reader/img_Identive_SDI011.png</file>
<file>updatable-files/reader/img_Identive_SDI011_mit_ausweis.png</file>
<file>updatable-files/reader/img_KOBIL_ID_Token.png</file>
<file>updatable-files/reader/img_KOBIL_ID_Token_mit_ausweis.png</file>
<file>updatable-files/reader/img_Reiner_SCT_cyberjack_RFID_basis.png</file>
<file>updatable-files/reader/img_Reiner_SCT_cyberjack_RFID_basis_mit_ausweis.png</file>
<file>updatable-files/reader/img_Reiner_SCT_cyberjack_RFID_komfort.png</file>
<file>updatable-files/reader/img_Reiner_SCT_cyberjack_RFID_komfort_mit_ausweis.png</file>
<file>updatable-files/reader/img_Reiner_SCT_cyberjack_RFID_standard.png</file>
<file>updatable-files/reader/img_Reiner_SCT_cyberjack_RFID_standard_mit_ausweis.png</file>
<file>updatable-files/reader/img_RemoteReader.png</file>
<file>updatable-files/reader/img_RemoteReader_mit_ausweis.png</file>
</qresource>
</RCC>

View File

@ -13,6 +13,7 @@
<file>images/android/navigation/ausweisen.svg</file>
<file>images/android/navigation/anbieter.svg</file>
<file>images/android/navigation/balloon.svg</file>
<file>images/android/navigation/remoteleser.svg</file>
<file>images/android/navigation/verlauf.svg</file>
<file>images/android/navigation/pin.svg</file>
<file>images/android/navigation/versionsinformation.svg</file>
@ -40,22 +41,27 @@
<file>images/android/android_arrow_back_white.svg</file>
<file>images/iOS/more/icon_mehr_favorit.svg</file>
<file>images/iOS/more/icon_mehr_fragen.svg</file>
<file>images/iOS/more/icon_mehr_upload.svg</file>
<file>images/iOS/more/icon_mehr_info.svg</file>
<file>images/provider/categoryIcons/General.svg</file>
<file>images/provider/categoryIcons/CitizenServices.svg</file>
<file>images/provider/categoryIcons/Financials.svg</file>
<file>images/provider/categoryIcons/Insurances.svg</file>
<file>images/provider/categoryIcons/OtherServices.svg</file>
<file alias="images/provider/categoryIcons/General_bg.svg">images/provider/categoryIcons/+android/General_bg.svg</file>
<file alias="images/provider/categoryIcons/General_button.svg">images/provider/categoryIcons/+android/General_button.svg</file>
<file alias="images/provider/categoryIcons/CitizenServices_bg.svg">images/provider/categoryIcons/+android/CitizenServices_bg.svg</file>
<file alias="images/provider/categoryIcons/CitizenServices_button.svg">images/provider/categoryIcons/+android/CitizenServices_button.svg</file>
<file alias="images/provider/categoryIcons/Financials_bg.svg">images/provider/categoryIcons/+android/Financials_bg.svg</file>
<file alias="images/provider/categoryIcons/Financials_button.svg">images/provider/categoryIcons/+android/Financials_button.svg</file>
<file alias="images/provider/categoryIcons/Insurances_bg.svg">images/provider/categoryIcons/+android/Insurances_bg.svg</file>
<file alias="images/provider/categoryIcons/Insurances_button.svg">images/provider/categoryIcons/+android/Insurances_button.svg</file>
<file alias="images/provider/categoryIcons/OtherServices_bg.svg">images/provider/categoryIcons/+android/OtherServices_bg.svg</file>
<file alias="images/provider/categoryIcons/OtherServices_button.svg">images/provider/categoryIcons/+android/OtherServices_button.svg</file>
<file>images/iOS/more/icon_mehr_license.svg</file>
<file>images/iOS/more/icon_mehr_remotereader.svg</file>
<file>images/iOS/more/icon_mehr_upload.svg</file>
<file>images/provider/categoryIcons/general.svg</file>
<file>images/provider/categoryIcons/citizen.svg</file>
<file>images/provider/categoryIcons/finance.svg</file>
<file>images/provider/categoryIcons/insurance.svg</file>
<file>images/provider/categoryIcons/other.svg</file>
<file alias="images/provider/categoryIcons/general_bg.svg">images/provider/categoryIcons/+android/general_bg.svg</file>
<file alias="images/provider/categoryIcons/general_button.svg">images/provider/categoryIcons/+android/general_button.svg</file>
<file alias="images/provider/categoryIcons/citizen_bg.svg">images/provider/categoryIcons/+android/citizen_bg.svg</file>
<file alias="images/provider/categoryIcons/citizen_button.svg">images/provider/categoryIcons/+android/citizen_button.svg</file>
<file alias="images/provider/categoryIcons/finance_bg.svg">images/provider/categoryIcons/+android/finance_bg.svg</file>
<file alias="images/provider/categoryIcons/finance_button.svg">images/provider/categoryIcons/+android/finance_button.svg</file>
<file alias="images/provider/categoryIcons/insurance_bg.svg">images/provider/categoryIcons/+android/insurance_bg.svg</file>
<file alias="images/provider/categoryIcons/insurance_button.svg">images/provider/categoryIcons/+android/insurance_button.svg</file>
<file alias="images/provider/categoryIcons/other_bg.svg">images/provider/categoryIcons/+android/other_bg.svg</file>
<file alias="images/provider/categoryIcons/other_button.svg">images/provider/categoryIcons/+android/other_button.svg</file>
<file>images/phone_to_pc.svg</file>
<file>images/android/navigation/remotesettings.svg</file>
<file>images/trash_icon.svg</file>
</qresource>
</RCC>

View File

@ -3,9 +3,9 @@
"_comment_1": "array of CVCs; hex encoded",
"_comment_2": [
"certificate 1: DECVCAeID00103_DECVCAeID00104",
"certificate 2: DECVCAeID00102_DECVCAeID00103",
"certificate 3: DECVCAeID00102"
"DECVCAeID00103_DECVCAeID00104",
"DECVCAeID00102_DECVCAeID00103",
"DECVCAeID00102"
],
"cvRootCertificates": [
"7F218201B67F4E82016E5F290100420E44454356434165494430303130337F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7864104241D8627338B64F20077FFD558909A096C635DDB222852038EAAE642E869A40173D588F817D95DB2A6A0F077EA5EE63596A20F85BC3CB176D2F98D88D90219AA8701015F200E44454356434165494430303130347F4C12060904007F0007030102025305FC0F13FFFF5F25060105000901045F24060108000901045F3740313A81ED8734E7A8C45F16B55FB603E63027B7F44C2DE3A8E782552D35949DB221CA33BD41A01DA6A1288C7885714FC3A03FA45683B75D3884930EC6738AF8A0",
@ -15,13 +15,13 @@
"_comment_3": "array of Test-CVCs; hex encoded",
"_comment_4": [
"certificate 4: DETESTeID00001",
"certificate 5: DETESTeID00002_DETESTeID00001",
"certificate 6: DETESTeID00004_DETESTeID00002",
"certificate 7: DETESTeID00005_DETESTeID00004",
"certificate 8: DECVCAeIDCTL0401_DECVCAeIDCTL0402",
"certificate 9: DECVCAeIDCT00001_DECVCAeIDCTL0401",
"certificate 10: DECVCAeIDCT00001_DECVCAeIDCT00001"
"DETESTeID00001",
"DETESTeID00001_DETESTeID00002",
"DETESTeID00002_DETESTeID00004",
"DETESTeID00004_DETESTeID00005",
"DECVCAeIDCTL0401_DECVCAeIDCTL0402",
"DECVCAeIDCT00001_DECVCAeIDCTL0401",
"DECVCAeIDCT00001_DECVCAeIDCT00001"
],
"cvRootCertificatesTest": [
"7F218201B67F4E82016E5F290100420E44455445535465494430303030317F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7864104184BB519FC2A8F52DC0DC73112FACFE914F2A49B678DD5799A2B1DFE95E1A66359014E22FA8D66438413CEBA6CF0E215576B673376BF617AF4DFE9761D2290148701015F200E44455445535465494430303030317F4C12060904007F0007030102025305FE0F01FFFF5F25060100000801035F24060103000801035F37409F25EBFAF4B91E4C60A1683754C5DC076A3179753EF97D9F8CB01FE1DCD3B8C83E7A26602AB1F344BE5706006D79A9FF6A9716404DC83B9F30E1213B393128A2",
@ -35,16 +35,16 @@
"_comment_5": "array of certificates for checking the authenticity of updates; DER format, hex encoded",
"updateCertificates": [
"308206f8308205e0a003020102020840b202f4450f40bf300d06092a864886f70d01010505003076310b300906035504061302444531253023060355040a131c542d53797374656d7320496e7465726e6174696f6e616c20476d6248311e301c060355040b131554727573742043656e7465722053657276696365733120301e0603550403131754656c6553656320536572766572506173732043412031301e170d3132303832313037353132345a170d3135303832363233353935395a3081ab310b3009060355040613024445312d302b060355040a0c246272656d656e206f6e6c696e6520736572766963657320476d6248202620436f2e204b47310b3009060355040b13025345310f300d060355040813064272656d656e310f300d060355040713064272656d656e3124302206092a864886f70d01090116156265747269656240626f732d6272656d656e2e6465311830160603550403130f6170706c2e626f732d6173702e646530820122300d06092a864886f70d01010105000382010f003082010a0282010100baa234d61141856dcc308a4fe30d1eaeb3e3356971e79a7c8257ce0ff15cd786a24670b58f2e0e2ba609805b9db94e7a68c5216375e9549c45c7d2d40ad9ecd1332adb6a94c8b312cc71097a671ff3ebec674f2decde539b619c867b1873deafa8eaeda61b335d483a260196903e4f3922cb3d66e30b6e22cfed5e249f7847b37d53b00409edd52e7148a72e2baf22194ec408496b6726ef5c8e2495e88e1c0193ab46f75b9e6fb0cfd100ab314a59337eb80d7c0449ff523606ea72e357e153182353d9cbe92567507f39c6d6545d3d561657703c6d6858a0cfa322c086bab2366f7df64cf8697f85e0d054a7c1283c7858cc2192082b9e14f88ce6388928d30203010001a38203523082034e301f0603551d2304183016801433dc9e96ecd8e8351f6d901b0b38a4af741bc658300e0603551d0f0101ff0404030205a0301d0603551d250416301406082b0601050507030206082b06010505070301301d0603551d0e041604146a2f35506e2da75862fe292c02f2222d28d4051c304f0603551d2004483046304406092b06010401bd470d023037303506082b060105050702011629687474703a2f2f7777772e74656c657365632e64652f736572766572706173732f6370732e68746d6c308201220603551d1f04820119308201153045a043a041863f687474703a2f2f63726c2e736572766572706173732e74656c657365632e64652f726c2f54656c655365635f536572766572506173735f43415f312e63726c3081cba081c8a081c58681c26c6461703a2f2f6c6461702e736572766572706173732e74656c657365632e64652f636e3d54656c65536563253230536572766572506173732532304341253230312c6f753d547275737425323043656e74657225323053657276696365732c6f3d542d53797374656d73253230496e7465726e6174696f6e616c253230476d62482c633d64653f63657274696669636174655265766f636174696f6e6c6973743f626173653f63657274696669636174655265766f636174696f6e6c6973743d2a3082013a06082b060105050701010482012c30820128303306082b060105050730018627687474703a2f2f6f6373702e736572766572706173732e74656c657365632e64652f6f63737072304c06082b060105050730028640687474703a2f2f63726c2e736572766572706173732e74656c657365632e64652f6372742f54656c655365635f536572766572506173735f43415f312e6365723081a206082b060105050730028681956c6461703a2f2f6c6461702e736572766572706173732e74656c657365632e64652f636e3d54656c65536563253230536572766572506173732532304341253230312c6f753d547275737425323043656e74657225323053657276696365732c6f3d542d53797374656d73253230496e7465726e6174696f6e616c253230476d62482c633d64653f63414365727469666963617465300c0603551d130101ff04023000301a0603551d1104133011820f6170706c2e626f732d6173702e6465300d06092a864886f70d0101050500038201010026a20d746b23686fa3d7513bf46ee88fbc1d895a7626576cd3ca16fa4a483a36bbe72bdb1aafd1f653a30c7e512870037eeba1706c75082248402061c5a2b39abe2c7a13433c6344cdfb9fb83ddee505bc406d7aa00b35b32ace9faffea387d1dd5982ac7e09c2687d5d33853885fea902e30dde7870457ac3431db6f64314a768b293a1ba097cf7b25d0abb83090f8a1b9a8fe009fe63f9fe6029b06e0d4e95e3995c6a93812a783493f66b69270f64d472637a8b30cb5870676ccaf98a4655e843c5c255d57e19388b60c5ffc6fd65f3eb17353279a68b609681b2bd7c629f4e6061619df736f78eabb2761a3ef9b3dcc87abcbca781620297f576ea9ce06a",
"308208673082074fa00302010202086b5eeeb3f0155141300d06092a864886f70d01010b05003081d8310b300906035504061302444531253023060355040a131c542d53797374656d7320496e7465726e6174696f6e616c20476d6248311e301c060355040b131554727573742043656e7465722053657276696365733120301e0603550403131754656c6553656320536572766572506173732043412032311c301a060355040813134e6f7264726865696e205765737466616c656e310e300c0603550411130535373235303110300e060355040713074e65747068656e3120301e06035504091317556e7465726520496e647573747269657374722e203230301e170d3135303532303039353335315a170d3138303532353233353935395a3081a6310b30090603550406130244453121301f060355040a0c18476f7665726e696b757320476d6248202620436f2e204b47310b3009060355040b13025345310f300d060355040813064272656d656e310f300d060355040713064272656d656e3124302206092a864886f70d01090116156265747269656240676f7665726e696b75732e6465311f301d060355040313166170706c2e676f7665726e696b75732d6173702e646530820222300d06092a864886f70d01010105000382020f003082020a0282020100c1d969514392105ce65b089b7357f75356f076b21168233d1eb57ae81f826c74258ec4814c48a3e99633fcac1fb444412cba421c1569d21b6317b6614b096203ab5b605128671764d30186dec09716d2173bfab911a9ad3d2d0b850ff2595dd9c72113bd64879c39c39b3debbfdd7f8d68e8d1bdaf2cca0508583bd59b965ec5f4950e4fbbe48b7be351237d478253bc34ac5aed9448f5ae31878067bdad75179cb776ef19f8e49e62b830de8279142233030189c20008345553847b7edc6471bf7c15c98b087159b44faa5a35fe16adc285e4d8266fab49b7b4e7fbcbd91767e05dbb45a5564cb11abcbeb0ff66869ca72dd7919eae796340fb5b26fb8ecc65b8380d3eb30e46150725e2156ad156773a79b482133b846b247868a6d3fcc18f96cfc6044fb7678fd79c04fb580b7bfb86e3252554b9a97dfd6fb9ae0e0d8d663a56b471d37752fc88a172151494553d78a39ade4669076e5ddfa13fd684b7eb800efedf9af8f90d4bab6d80378b950d43ef6de6f9ca5dccb81ecbbf820126d90923c5b87462af2acf0fc460599b2d7022e488f20069e2b3e80e057ebbd1454891929c2e0252688a1c0e801eb8bec795251087a755a6edcd22759a5c1869550d63b0596cb5ac20a7e5cb11f5412598990092cbe058b4ec67b98dd9ed2b2a5f8b7994e92b89a1ef51517beb2e2594cb8007d514f988968c52246a18945fba0adf0203010001a38203633082035f301f0603551d2304183016801415bbded6256fbdf2319f6213dc5ca6f465b46df2300e0603551d0f0101ff0404030205a0301d0603551d250416301406082b0601050507030206082b06010505070301301d0603551d0e041604148c76a1377b9cad8059a5d4126a53bc633671ca1c30590603551d2004523050304406092b06010401bd470d023037303506082b060105050702011629687474703a2f2f7777772e74656c657365632e64652f736572766572706173732f6370732e68746d6c3008060667810c010202308201220603551d1f04820119308201153045a043a041863f687474703a2f2f63726c2e736572766572706173732e74656c657365632e64652f726c2f54656c655365635f536572766572506173735f43415f322e63726c3081cba081c8a081c58681c26c6461703a2f2f6c6461702e736572766572706173732e74656c657365632e64652f636e3d54656c65536563253230536572766572506173732532304341253230322c6f753d547275737425323043656e74657225323053657276696365732c6f3d542d53797374656d73253230496e7465726e6174696f6e616c253230476d62482c633d64653f63657274696669636174655265766f636174696f6e6c6973743f626173653f63657274696669636174655265766f636174696f6e6c6973743d2a3082013a06082b060105050701010482012c30820128303306082b060105050730018627687474703a2f2f6f6373702e736572766572706173732e74656c657365632e64652f6f63737072304c06082b060105050730028640687474703a2f2f63726c2e736572766572706173732e74656c657365632e64652f6372742f54656c655365635f536572766572506173735f43415f322e6365723081a206082b060105050730028681956c6461703a2f2f6c6461702e736572766572706173732e74656c657365632e64652f636e3d54656c65536563253230536572766572506173732532304341253230322c6f753d547275737425323043656e74657225323053657276696365732c6f3d542d53797374656d73253230496e7465726e6174696f6e616c253230476d62482c633d64653f63414365727469666963617465300c0603551d130101ff0402300030210603551d11041a301882166170706c2e676f7665726e696b75732d6173702e6465300d06092a864886f70d01010b050003820101005f35f8a5ed5fe3879dbb137d1505768bff7635e3c7824735bf8c0b1bdd02335de7928f484192925c29738b034b152805935aa54d92abc3be5c7cfec5017ca506a33c2b15fdb2762037b0b4615e39d7697f64dba763ad0b6e05b7e8b6dd29c7ace3ec86ea74a82ce9a5575166375849afbd48cebdbd18bfdab0f905b094b4e686649bee5fba153ff5786cbb5926807891ae07871127a887c2e2747dcfd1bd18d34b0642eb2fa8309e8b434b2cf91ab0e918c3f3c59d70aa096a46abfc50b3e66baacd7748b7ef98110760cce271c1528ed4e84ae9144983ad26aa27f00a527053c50739d2592ad13179a33eb1d299081be8b9824bc63ac70e1ad518380df08a56%",
"308202eb308201d3a003020102020437a18b8a300d06092a864886f70d01010b05003026310b3009060355040613024445311730150603550403130e6275696c64617574656e74617070301e170d3134303732343131323334325a170d3234303732313131323334325a3026310b3009060355040613024445311730150603550403130e6275696c64617574656e7461707030820122300d06092a864886f70d01010105000382010f003082010a0282010100ca573d1c79c72f15dd80020b39886bec2de9004556eabc833f61b86aac3b4658ed8ecf7f32cb3daeb34576b49ff13e9eaaafa5ce2cf7cb13df2f89be6a1659f79cca6b4276b90914594e74998f9b9fffa0c8efdf4409be91a195458e1a0dce707cb1573cab99d297c80e8026c2f299fd97b8bbf14b172094f17abe50483a2e1df0cf6629d024cf5b752a1bb0edbe172dcce7ed30cc3c193ba742bff2e0afa0f15c414f27bdb374f65ac71c0c7af3a4a5fe1707d22bed1b63019e659c42e763c601f45d60094be915a422a0c183da33e8b3909cf83c0d7dfd3d5ffd1a92cf00c07961b284ddbef1e9b9d5536e12630cefa8493c8244edd2f687b09d38e79f639d0203010001a321301f301d0603551d0e04160414b29d3e7f193789f68d2234738a2773e737c4ce1c300d06092a864886f70d01010b0500038201010030800530f9d3abb215e8c8da5ee62ee083bdd8fce00d673702d00fac194eabd4c0b9338166a6dd76711651e685d0b9a50cdf2dc4872edeb5f4369372fb0d70d8fe02892b962e5fafd73add31ec0fd6708aa6ad2c82beca260773dd3e62460d1e416ac8d931e221b1bcf8255abd44933d38660e5bad639c38fb7dbbcf1f9504e20b27d75810b5ab475ce061d725b54628b4cfd7bd53f29d93a8ecb16e96df9ff654da55ea8ed1700c8d3135b1bc97655595a56f75dfb101c27341309602dce89e9c4db08a7c19d7fb199394f0ec478c4f246dbab0a37c2cea22b5b2b4c9e589a640611348b77dddd0fc412c9980cb5d516b274b9649debdd22df123cd06495924%"
"308205633082044ba00302010202135100000749e339b5a8a2ecb8e8000000000749300d06092a864886f70d01010b0500304431153013060a0992268993f22c64011916056c6f63616c31153013060a0992268993f22c6401191605626f736b67311430120603550403130b676f766b67726f6f746361301e170d3136313232393039343930325a170d3138313232393039353930325a307c310b3009060355040613024445310b3009060355040813024445310f300d060355040713064272656d656e31163014060355040a130d476f7665726e696b7573204b47311c301a060355040b131353797374656d7320456e67696e656572696e6731193017060355040314102a2e74662e626f732d746573742e646530820122300d06092a864886f70d01010105000382010f003082010a0282010100c2ce4b611d136b4a99f43bd6487c323f812f00c433ed7ec3d343b93c1b064ba12ff3f950634bbba55283ea48bf91d3a6736ee17c3467918b22d9ba1d55f9b8593461b42ed54454d15577abe0ec286203c4c33a82aae8216c802f8f81f1d06473f85acbf6ba69357828030a97086aa1bc6836cae3916d2d83f24c153a05402e13828a30822e7a861395be7d7c511b84baf4bc4a5daeb3db755b37e8ffb5dd18f8ac22c018801e212ab59b96e64b85c3d418c577c33ef73cc0ba5fef68041ba39fa0b795e7b5eabfa408c36ca582572ca2adde4cd104ccad376eaa06b41e737121f349eedb063438b406bd32dc032659e9cbad809afb5679d8a7d776a916ead35b0203010001a382021430820210300e0603551d0f0101ff0404030205a030130603551d25040c300a06082b0601050507030130240603551d11041d301b82102a2e74662e626f732d746573742e646582012a87040ad2f861301d0603551d0e04160414262451b4431de1ccdb523d93038d7e01c4a3d153301f0603551d230418301680144b7e48a7b2f2db121642634bcd7e1c0deee96285303b0603551d1f043430323030a02ea02c862a687474703a2f2f676f7663726c2e676f7665726e696b75732e64652f63726c2f7265766f6b652e63726c3081eb06082b060105050701010481de3081db3081aa06082b0601050507300286819d6c6461703a2f2f2f434e3d676f766b67726f6f7463612c434e3d4149412c434e3d5075626c69632532304b657925323053657276696365732c434e3d53657276696365732c434e3d436f6e66696775726174696f6e2c44433d626f736b672c44433d6c6f63616c3f634143657274696669636174653f626173653f6f626a656374436c6173733d63657274696669636174696f6e417574686f72697479302c06082b060105050730018620687474703a2f2f676f7663726c2e676f7665726e696b75732e64652f6f637370303b06092b0601040182371507042e302c06242b060104018237150887a4920efcad6b83a98117819cb41586e9ea5a1791ff2e87b7af7c020164020109301b06092b060104018237150a040e300c300a06082b06010505070301300d06092a864886f70d01010b05000382010100a41dd5971c9b983bc3369bc9f3046481ff05aab5b47fac27a8cb7f917585b15c5acfbc8d083375a459b0642974968f4e00ad501d715dfb8a9e098437459ddcbba5a7d49f0278bd841b89fb93e86683bd89334f6b5ab556834e1fb4ec86647e812438e17512ee87b01bd0679b3abf4a67fe7272eae0c4cd9ed174d70b2728e72361cded46a42d445dfe244efb55feb1eee13f614d30237ee399b4108bc596b8aab377ad98d22c87ce4ce976ec1ceac512c33d6941b715d9fa60882b4644f9a066dcd51ff6c429af37cfa38f06444e6682d09643b2866a23a42da0ae21a787e8fe40aa2b21aa55a10aa42097c9a219528ac4968eb12cec5f223791a40d21fcce05",
"3082083a30820722a003020102020900d5b6a4dc1fd8854a300d06092a864886f70d01010b05003081df310b300906035504061302444531253023060355040a0c1c542d53797374656d7320496e7465726e6174696f6e616c20476d6248311f301d060355040b0c16542d53797374656d732054727573742043656e746572311c301a06035504080c134e6f7264726865696e205765737466616c656e310e300c06035504110c0535373235303110300e06035504070c074e65747068656e3120301e06035504090c17556e7465726520496e647573747269657374722e2032303126302406035504030c1d54656c65536563205365727665725061737320436c6173732032204341301e170d3137313230313130343733325a170d3230313230363233353935395a308180310b30090603550406130244453121301f060355040a0c18476f7665726e696b757320476d6248202620436f2e204b47310b3009060355040b13025345310f300d060355040813064272656d656e310f300d060355040713064272656d656e311f301d060355040313166170706c2e676f7665726e696b75732d6173702e646530820222300d06092a864886f70d01010105000382020f003082020a0282020100c1d969514392105ce65b089b7357f75356f076b21168233d1eb57ae81f826c74258ec4814c48a3e99633fcac1fb444412cba421c1569d21b6317b6614b096203ab5b605128671764d30186dec09716d2173bfab911a9ad3d2d0b850ff2595dd9c72113bd64879c39c39b3debbfdd7f8d68e8d1bdaf2cca0508583bd59b965ec5f4950e4fbbe48b7be351237d478253bc34ac5aed9448f5ae31878067bdad75179cb776ef19f8e49e62b830de8279142233030189c20008345553847b7edc6471bf7c15c98b087159b44faa5a35fe16adc285e4d8266fab49b7b4e7fbcbd91767e05dbb45a5564cb11abcbeb0ff66869ca72dd7919eae796340fb5b26fb8ecc65b8380d3eb30e46150725e2156ad156773a79b482133b846b247868a6d3fcc18f96cfc6044fb7678fd79c04fb580b7bfb86e3252554b9a97dfd6fb9ae0e0d8d663a56b471d37752fc88a172151494553d78a39ade4669076e5ddfa13fd684b7eb800efedf9af8f90d4bab6d80378b950d43ef6de6f9ca5dccb81ecbbf820126d90923c5b87462af2acf0fc460599b2d7022e488f20069e2b3e80e057ebbd1454891929c2e0252688a1c0e801eb8bec795251087a755a6edcd22759a5c1869550d63b0596cb5ac20a7e5cb11f5412598990092cbe058b4ec67b98dd9ed2b2a5f8b7994e92b89a1ef51517beb2e2594cb8007d514f988968c52246a18945fba0adf0203010001a382035430820350301f0603551d2304183016801494c87446f53ab4464826f82bca341e5626041200300e0603551d0f0101ff0404030205a0301d0603551d250416301406082b0601050507030206082b06010505070301301d0603551d0e041604148c76a1377b9cad8059a5d4126a53bc633671ca1c305a0603551d20045330513045060a2b06010401bd470d17013037303506082b060105050702011629687474703a2f2f7777772e74656c657365632e64652f736572766572706173732f6370732e68746d6c3008060667810c010202308201030603551d1f0481fb3081f83040a03ea03c863a687474703a2f2f63726c2e736572766572706173732e74656c657365632e64652f726c2f536572766572506173735f436c6173735f322e63726c3081b3a081b0a081ad8681aa6c6461703a2f2f6c6461702e736572766572706173732e74656c657365632e64652f434e3d54656c6553656325323053657276657250617373253230436c6173732532303225323043412c4f553d542d53797374656d73253230547275737425323043656e7465722c4f3d542d53797374656d73253230496e7465726e6174696f6e616c253230476d62482c433d44453f43657274696669636174655265766f636174696f6e4c6973743082014906082b060105050701010482013b30820137303306082b060105050730018627687474703a2f2f6f6373702e736572766572706173732e74656c657365632e64652f6f63737072305206082b060105050730028646687474703a2f2f63726c2e736572766572706173732e74656c657365632e64652f6372742f54656c655365635f536572766572506173735f436c6173735f325f43412e6365723081ab06082b0601050507300286819e6c6461703a2f2f6c6461702e736572766572706173732e74656c657365632e64652f434e3d54656c6553656325323053657276657250617373253230436c6173732532303225323043412c4f553d542d53797374656d73253230547275737425323043656e7465722c4f3d542d53797374656d73253230496e7465726e6174696f6e616c253230476d62482c433d44453f63414365727469666963617465300c0603551d130101ff0402300030210603551d11041a301882166170706c2e676f7665726e696b75732d6173702e6465300d06092a864886f70d01010b050003820101006376f829a32345d2d590176bf2294d9ab6fe44e6c7db3b467bd597eebda4121d6e8795ec33de253ff9f271857c4a1ddf4b80b080464a51741a53de5137be13fc482e41b3649afbb571bfec2a894022d933ca60c691a99f31fe40209e7ca2e7fcd15d33baf8c1d20e107750cbd8628bc883af062a622f29c36574decaf97ef00471bbbe81380042ab82e46788491e4f77e58168f154d5210748263bfb8b2c3c82937436f758e1b2360c22458803a304eb90a4617bdcaa591176f4002e63dce3c9a3c7dcec83472dec70346544105118227fce63bae6a6686950846f65f30de621c1e5d6b7b20f3ce7d8ebbd95667c89123adb9efcbdd5ea1ba6e71b152bea43d3"
],
"tlsSettings" : {
"protocolVersion": "TlsV1_0OrLater",
"tlsSettings": {
"protocolVersion": "TlsV1_0OrLater",
"_comment_1": "ciphers are ordered by preference",
"ciphers": [
"ECDHE-ECDSA-AES256-GCM-SHA384",
"ECDHE-ECDSA-AES256-GCM-SHA384",
"ECDHE-RSA-AES256-GCM-SHA384",
"DHE-DSS-AES256-GCM-SHA384",
"DHE-RSA-AES256-GCM-SHA384",
@ -71,15 +71,15 @@
],
"_comment_2": "prime256v1 := secp256r1",
"ellipticCurves": [
"brainpoolP512r1",
"brainpoolP512r1",
"brainpoolP384r1",
"brainpoolP256r1",
"secp384r1",
"prime256v1",
"secp224r1"
],
"signatureAlgorithms" : [
"Rsa+Sha512",
"signatureAlgorithms": [
"Rsa+Sha512",
"Dsa+Sha512",
"Ec+Sha512",
"Rsa+Sha384",
@ -94,34 +94,78 @@
]
},
"tlsSettingsPsk" : {
"protocolVersion": "TlsV1_1OrLater",
"tlsSettingsPsk": {
"protocolVersion": "TlsV1_1OrLater",
"_comment_1": "ciphers are ordered by preference",
"ciphers": [
"RSA-PSK-AES256-GCM-SHA384",
"RSA-PSK-AES256-GCM-SHA384",
"RSA-PSK-AES256-CBC-SHA384",
"RSA-PSK-AES128-GCM-SHA256",
"RSA-PSK-AES128-CBC-SHA256",
"RSA-PSK-AES256-CBC-SHA"
],
"_comment_2": "ellipticCurves not needed",
"signatureAlgorithms" : [
"Rsa+Sha512",
"signatureAlgorithms": [
"Rsa+Sha512",
"Rsa+Sha384",
"Rsa+Sha256",
"Rsa+Sha224"
]
},
"minStaticKeySizes": {
"Rsa": 2000,
"tlsSettingsRemoteReader": {
"protocolVersion": "TlsV1_2OrLater",
"_comment_1": "ciphers are ordered by preference",
"ciphers": [
"ECDHE-RSA-AES256-GCM-SHA384",
"DHE-RSA-AES256-GCM-SHA384",
"ECDHE-RSA-AES256-SHA384",
"DHE-RSA-AES256-SHA256",
"ECDHE-RSA-AES128-GCM-SHA256",
"ECDHE-RSA-AES128-SHA256",
"DHE-RSA-AES128-SHA256"
],
"ellipticCurves": [
"brainpoolP512r1",
"brainpoolP384r1",
"brainpoolP256r1",
"secp384r1",
"prime256v1",
"secp224r1"
],
"signatureAlgorithms": [
"Rsa+Sha512",
"Rsa+Sha384",
"Rsa+Sha256"
]
},
"tlsSettingsRemoteReaderPairing": {
"protocolVersion": "TlsV1_2OrLater",
"_comment_1": "ciphers are ordered by preference",
"ciphers": [
"RSA-PSK-AES256-GCM-SHA384",
"RSA-PSK-AES256-CBC-SHA384",
"RSA-PSK-AES128-GCM-SHA256",
"RSA-PSK-AES128-CBC-SHA256",
"RSA-PSK-AES256-CBC-SHA"
],
"signatureAlgorithms": [
"Rsa+Sha512",
"Rsa+Sha384",
"Rsa+Sha256"
]
},
"minStaticKeySizes": {
"Rsa": 2000,
"Dsa": 2000,
"Ec": 224
},
"minEphemeralKeySizes": {
"Rsa": 2000,
"Dsa": 1024,
"minEphemeralKeySizes": {
"Rsa": 2000,
"Dsa": 2000,
"Ec": 224
},
@ -134,13 +178,8 @@
"testCertDescr": "30820266060A04007F00070301030101A1160C14476F7665726E696B757320546573742044564341A21A1318687474703A2F2F7777772E676F7665726E696B75732E6465A31A0C18476F7665726E696B757320476D6248202620436F2E204B47A420131E68747470733A2F2F746573742E676F7665726E696B75732D6569642E6465A582014F0C82014B416E736368726966743A090D0A476F7665726E696B757320476D6248202620436F2E204B470D0A416D2046616C6C7475726D20390D0A3238333539204272656D656E090D0A0D0A452D4D61696C2D416472657373653A09686240626F732D6272656D656E2E6465090D0A0D0A5A7765636B20646573204175736C657365766F7267616E67733A0944656D6F6E7374726174696F6E20646573206549442D53657276696365090D0A0D0A5A757374C3A46E6469676520446174656E73636875747A61756673696368743A090D0A446965204C616E64657362656175667472616774652066C3BC7220446174656E73636875747A20756E6420496E666F726D6174696F6E736672656968656974206465722046726569656E2048616E73657374616474204272656D656E0D0A41726E647473747261C39F6520310D0A3237353730204272656D6572686176656EA64B134968747470733A2F2F746573742E676F7665726E696B75732D6569642E64653A3434332F417574656E742D44656D6F4170706C69636174696F6E2F5265636569766572536572766C6574A74631440420D2E54E1D26FC5DFC3408609831BBE4CFE3204365604849E7B094623566B54A760420E224D25B448DC054C023392CA11017751041D762F83D880895B3018D8EC2B290"
},
"drivers": {
"updateUrl": "@REMOTE_CONFIG_URL@@REMOTE_CONFIG_PATH_DRIVERS@/default-supported-devices.json"
},
"providers": {
"updateUrl": "@REMOTE_CONFIG_URL@@REMOTE_CONFIG_PATH_PROVIDERS@/@DEFAULT_PROVIDER_FILE@",
"iconsUpdateUrlBase": "@REMOTE_CONFIG_URL@@REMOTE_CONFIG_PATH_PROVIDERS@/provider/"
"updateServer": {
"baseUrl": "@REMOTE_CONFIG_URL@/updatable-files"
},
"updates": {

View File

@ -1,53 +0,0 @@
{
"issueDate": "2015-10-29T06:25:00+1:00",
"provider": [
{
"name": "Beantragung Schwerbehindertenausweis Saarland",
"address": "https://gatewaylas.saarland.de/FV/Onlineantrag",
"phone": "",
"email": "",
"postaladdress": "",
"category": "citizen"
},
{
"name": "Bürgerportal Rheinland Pfalz",
"address": "http://www.rlpdirekt.de/rheinland-pfalz",
"phone": "",
"email": "",
"postaladdress": "",
"category": "citizen"
},
{
"name": ":::(bit)kasten",
"address": "https://www.bitkasten.de/",
"phone": "",
"email": "",
"postaladdress": "",
"category": "other"
},
{
"name": "Bürgerkonto Test (Testausweis erforderlich)",
"address": "https://bk.test.bos-asp.de/BuergerKontoTestSPTest/",
"phone": "",
"email": "",
"postaladdress": "",
"category": "other"
},
{
"name": "OpenPGP-eID",
"address": "https://pgp.governikus-eid.de/pgp",
"phone": "",
"email": "",
"postaladdress": "",
"category": "other"
},
{
"name": "SkIDentity Service",
"address": "https://skidentity.de/service",
"phone": "",
"email": "",
"postaladdress": "",
"category": "other"
}
]
}

View File

@ -1,964 +0,0 @@
{
"issueDate": "2017-09-15T11:00:00+1:00",
"callcosts" : [
{
"prefixes" : ["1371", "1375"],
"landline" : {
"per-call" : 14
}
},
{
"prefixes" : ["1372", "1373", "1374", "138"],
"landline" : {
"per-minute" : 14
}
},
{
"prefixes" : ["1376"],
"landline" : {
"per-call" : 25
}
},
{
"prefixes" : ["1377"],
"landline" : {
"per-call" : 100
}
},
{
"prefixes" : ["1378", "1379"],
"landline" : {
"per-call" : 50
}
},
{
"prefixes" : ["1801"],
"landline" : {
"per-minute" : 3.9
},
"mobile" : {
"per-minute" : 42
}
},
{
"prefixes": ["1802"],
"landline" : {
"per-call" : 6
},
"mobile" : {
"per-minute" : 42
}
},
{
"prefixes" : ["1803"],
"landline" : {
"per-minute" : 9
},
"mobile" : {
"per-minute" : 42
}
},
{
"prefixes" : ["1804"],
"landline" : {
"per-call" : 20
},
"mobile" : {
"per-minute" : 42
}
},
{
"prefixes" : ["1805"],
"landline" : {
"per-minute" : 14
},
"mobile" : {
"per-minute" : 42
}
},
{
"prefixes" : ["1806"],
"landline" : {
"per-call" : 20
},
"mobile" : {
"per-call" : 60
}
},
{
"prefixes" : ["1807"],
"free-seconds": 30,
"landline" : {
"per-minute" : 14
},
"mobile" : {
"per-minute" : 42
}
}
],
"provider": [
{
"shortName": {"" : ":::(bit)kasten"},
"longDescription": {"": "Der :::(bit)kasten ist ein elektronischer Briefkasten, in dem Sie Ihre Post elektronisch von teilnehmenden Unternehmen und Behörden zum Beispiel Rechnungen, Vertragsunterlagen oder Bescheide sicher und rechtsverbindlich empfangen. Ihre Post erhalten Sie wie bisher anhand Ihrer Postanschrift, nur eben digital. Sie müssen keine persönliche Daten an Dritte herausgeben, Ihre Postadresse reicht für den elektronischen Versand an den :::(bit)kasten aus.<br/>Eine Registrierung für den :::(bit)kasten ist nicht zwingend erforderlich. Ob Sie sich ein Konto anlegen möchten, entscheiden Sie selbst. Nach Login mit Ihrer Online-Ausweisfunktion können Sie Ihre Post abrufen und verwalten.<br/>Da Ihre Post nicht mehr als Papierpost verschickt werden muss, sparen Sie Zeit und senken den Papierverbrauch."},
"address": "https://www.bitkasten.de/",
"homepage": "https://www.bitkasten.de/",
"phone": "+49 911 6000 2874",
"email": "nachricht@bitkasten.de",
"postalAddress": "Wallensteinstr. 63<br/>90431 Nürnberg",
"category": "other",
"tcTokenUrl": "https://www.bitkasten.de/portal/api/login/npa/createRequest?returnUrl=https%3A%2F%2Fwww.bitkasten.de%2Fportal%2Fapi%2Flogin%2Fnpa%2Flogin.html",
"subjectUrls": ["https://www.bitkasten.de"]
},
{
"exclude": ["ios"],
"shortName": {"" : "Allianz Maklerportal"},
"address": "https://makler.allianz.de",
"homepage": "https://makler.allianz.de",
"phone": "+49 800/22 23 557 ",
"email": "zviss.makler@allianz.de",
"postalAddress": "Königinstraße 28<br/>80802 München",
"category": "insurance",
"tcTokenUrl": "https://npa.allianz.de/azsecurity-npa-service/NpaEIDService/nparef/-wnfwSFGamtJotxe6_BKiLj",
"tcTokenUrlInfo" : "TcToken URL contains dynamic request id but is accepted anyway.",
"subjectUrls": ["https://npa.allianz.de"]
},
{
"exclude": ["ios"],
"shortName": {"" : "Akteneinsicht in Stasi-Unterlagen"},
"longName": {"" : "Akteneinsicht in Stasi-Unterlagen"},
"shortDescription": {"": "Antragstellung auf Einsicht in Stasi-Unterlagen für Privatpersonen."},
"longDescription": {"": "Privatpersonen können online mittels neuem Personalausweis ohne weitere Wege die Einsichtnahme in die von der Stasi angelegten Akten zur eigenen Person oder zu verstorbenen/vermissten nahen Angehörigen beantragen."},
"address": "https://www.bstu.bund.de/DE/Akteneinsicht/Privatpersonen/Online-Antrag/online-antrag_node.html",
"homepage": "https://www.bstu.bund.de",
"phone": "+49 30 23 24-7000",
"email": "post@bstu.bund.de",
"postalAddress": "Der Bundesbeauftragte für die Unterlagen des Staatssicherheitsdienstes der ehemaligen Deutschen Demokratischen Republik (BStU)<br/>Karl-Liebknecht-Straße 31/33<br/>10178 Berlin",
"image": "stasi_image.jpg",
"icon": "stasi_icon.png",
"category": "citizen",
"subjectUrls": ["https://www.bstu-formulare.de/lip"]
},
{
"exclude": ["ios"],
"shortName": {"" : "Ausweis Auskunft des Bundes"},
"address": "https://www.buergerserviceportal.de/bund/ausweisapp/bspx_selbstauskunft",
"homepage": "https://www.buergerserviceportal.de/",
"phone": "+49 180-1-33 33 33",
"email": "eID_buergerservice@bmi.bund.de",
"postalAddress": "Bundesministerium des Innern<br/>Alt-Moabit 101 D<br/>10559 Berlin",
"category": "citizen",
"tcTokenUrl" : "https://www.buergerserviceportal.de:443/bund/ausweisapp/bspx_selbstauskunft/SamlAuthnRequestProvider",
"subjectUrls": ["https://www.buergerserviceportal.de"]
},
{
"exclude": ["ios"],
"shortName": {"" : "BAföG Online"},
"address": "https://www.bafoegonline.bva.bund.de/",
"homepage": "http://www.bafoeg.bund.de/",
"longDescription": {"": "Mit Ihrer Online-Ausweisfunktion können Sie sich beim Bundesverwaltungsamt für das BAföG-Rückzahlungsverfahren anmelden und sowohl Ihre persönlichen Daten als auch die erforderlichen Nachweise sicher und schnell elektronisch übermitteln. Sie müssen die Nachweise nicht mehr per Post senden.<br/>Die Online-Ausweisfunktion vereinfacht und beschleunigt das BAföG-Rückzahlungsverfahren."},
"phone": "+49 22899358 - 4500",
"email": "",
"postalAddress": "Bundesverwaltungsamt<br/>BT-BAföG<br/>50728 Köln",
"category": "citizen",
"tcTokenUrl" : "",
"clientUrl" : "https://www.bafoegonline.bva.bund.de/bafoeg-online/Bafoeg/flow/anmeldenMitNpaPreFlow",
"subjectUrls": ["https://e-id.bva.bund.de"]
},
{
"exclude": ["ios"],
"shortName": {"" : "BAföG Online Bayern (AKDB)"},
"longDescription": {"": "In Bayern können Sie Ihr BAföG für ein Studium bzw. eine Ausbildung in Bayern, Österreich, Liechtenstein oder der Schweiz nicht nur auf dem Postweg oder durch persönliche Abgabe beim Amt beantragen, sondern auch mit der Online-Ausweisfunktion bequem und schnell im Internet.<br/>Ihr Antrag muss dann nicht mehr ausgedruckt, unterschrieben und versandt werden, sondern gilt mit der Übermittlung Ihrer Daten als wirksam gestellt. Beizufügende und nachzureichende Unterlagen sowie Bescheinigungen können Sie über die Upload-Funktion ebenfalls elektronisch übermitteln.<br/>Nach Übermittlung der Daten wird Ihnen der Antrag als PDF-Dokument zum Download angeboten. Der Bescheid wird Ihnen per Post zugestellt."},
"address": "https://afoegfofa.osrz-akdb.de",
"homepage": "https://afoegfofa.osrz-akdb.de",
"phone": "+49 89 / 5903 - 0",
"email": "",
"postalAddress": "Anstalt für Kommunale Datenverarbeitung in Bayern (AKDB)<br/>Hansastraße 12-16<br/>80686 München",
"category": "citizen",
"subjectUrls": ["https://www.buergerserviceportal.de"]
},
{
"exclude": ["ios"],
"shortName": {"" : "BAföG Online Bayern (Studentenwerk)"},
"address": "https://www.bafoeg-bayern.de",
"homepage": "https://www.bafoeg-bayern.de",
"phone": "+49 800-223 63 41",
"email": "webmaster@bafoeg-bayern.de",
"postalAddress": "Studentenwerk Niederbayern/Oberpfalz, Anstalt des öffentlichen Rechts<br/>Administration BAföG-Bayern<br/>Albertus-Magnus-Straße 4<br/>93053 Regensburg",
"category": "citizen",
"subjectUrls": []
},
{
"exclude": ["ios"],
"shortName": {"" : "BAföG Berlin"},
"longName": {"" : "BAföG Online Berlin"},
"shortDescription": {"": "BAföG-Anträge und Formblätter online ausfüllen und unterschreiben."},
"longDescription": {"": "Sie wollen einen Antrag auf Ausbildungsförderung nach dem BAföG stellen? Mit dem neuen Personalausweis / elektronischen Aufenthaltstitel können Sie Ihren Antrag elektronisch signieren und an das Amt übermitteln. Ebenso können Ihre Eltern und ggf. Ihr Ehepartner die nötigen Formulare signieren."},
"address": "https://www.berlin-bafoeg.de",
"homepage": "https://www.berlin-bafoeg.de",
"phone": "+49 30 939 39 - 70",
"email": "info@stw.berlin",
"postalAddress": "studierendenWERK BERLIN<br/>BAföG-Amt<br/>Behrenstraße 40/41<br/>10117 Berlin",
"image": "BafoegBerlin_image.jpg",
"icon": "BafoegBerlin_icon.png",
"category": "citizen",
"subjectUrls": []
},
{
"exclude": ["ios"],
"shortName": {"" : "BAföG Online Brandenburg"},
"longDescription": {"": "In Brandenburg können Sie Ihr BAföG nicht nur auf dem Postweg oder durch persönliche Abgabe beim Amt beantragen, sondern auch bequem und schnell im Internet.<br/>Ihr Antrag muss dann nicht mehr ausgedruckt, unterschrieben und versandt werden, sondern gilt mit der Übermittlung Ihrer Daten als wirksam gestellt. Beizufügende und nachzureichende Unterlagen sowie Bescheinigungen können Sie über die Upload-Funktion ebenfalls elektronisch übermitteln.<br/>Nach Übermittlung der Daten wird Ihnen der Antrag als PDF-Dokument zum Download angeboten. Der Bescheid wird Ihnen per Post zugestellt."},
"address": "https://www.bafoeg-brandenburg.de",
"homepage": "https://www.bafoeg-brandenburg.de",
"phone": "+49 331 / 866 45 60",
"email": "mwfk@mwfk.brandenburg.de",
"postalAddress": "Ministerium für Wissenschaft, Forschung und Kultur<br/>Presse- und Öffentlichkeitsarbeit ",
"category": "citizen",
"subjectUrls": ["https://www.bafoeg-brandenburg.de"]
},
{
"exclude": ["ios"],
"shortName": {"" : "BAföG Online Hamburg"},
"longDescription": {"": "In Hamburg können Sie Ihr BAföG nicht nur auf dem Postweg oder durch persönliche Abgabe beim Amt beantragen, sondern auch bequem und schnell im Internet.<br/>Ihr Antrag muss dann nicht mehr ausgedruckt, unterschrieben und versandt werden, sondern gilt mit der Übermittlung Ihrer Daten als wirksam gestellt. Beizufügende und nachzureichende Unterlagen sowie Bescheinigungen können Sie über die neue Upload-Funktion ebenfalls elektronisch übermitteln.<br/>Nach Übermittlung der Daten wird Ihnen der Antrag als PDF-Dokument zum Download angeboten. Der Bescheid wird Ihnen per Post zugestellt."},
"address": "https://bafoeg-online.hamburg.de",
"homepage": "https://bafoeg-online.hamburg.de",
"phone": "+49 800-223 63 41",
"email": "Marita.Porr@bwfg.hamburg.de",
"postalAddress": "Ressortleiter Online-Redaktion der Behörde für Wissenschaft, Forschung und Gleichstellung:<br/>Kommunikation<br/>Daniel Drexelius<br/>Hamburger Straße 37<br/>22083 Hamburg",
"category": "citizen",
"subjectUrls": ["https://bafoeg-online.hamburg.de"]
},
{
"exclude": ["ios"],
"shortName": {"" : "BAföG Hessen"},
"longName": {"" : "BAföG/AFBG hessenweit"},
"shortDescription": {"": "BAföG und AFBG Online-Antragstellung Hessen"},
"longDescription": {"": "Mit Hilfe dieses Angebotes können Antragstellende, Ehegatten / eingetragene Lebenspartner und Eltern die erforderlichen Antragsformblätter online ausfüllen, mit Hilfe der eID rechtswirksam unterschreiben und papierlos dem zuständigen Amt übermitteln."},
"address": "https://www.bafoeg-hessen.de",
"homepage": "http://www.hmwk.hessen.de",
"phone": "+49 611 32 - 3551",
"email": "hebav@hmwk.hessen.de",
"postalAddress": "Hessisches Ministerium für Wissenschaft und Kunst<br/>Rheinstraße 23-25<br/>65185 Wiesbaden ",
"image": "BafoegHessen_image.jpg",
"icon": "BafoegHessen_icon.png",
"category": "citizen",
"subjectUrls": ["https://www.bafoeg-hessen.de"]
},
{
"exclude": ["ios"],
"shortName": {"" : "BAföG Online Mecklenburg-Vorpommern"},
"address": "http://www.bm.regierung-mv.de/bafoeg",
"homepage": "http://www.regierung-mv.de/",
"phone": "",
"email": "",
"postalAddress": "Ministerium für Bildung, Wissenschaft und Kultur Mecklenburg-Vorpommern<br/>Werderstraße 124<br/>19055 Schwerin",
"category": "citizen",
"subjectUrls": ["https://fms.mv-regierung.de"]
},
{
"exclude": ["ios"],
"shortName": {"" : "BAföG Online Nordrhein-Westfalen"},
"longDescription": {"": "In Nordrhein-Westfalen können Sie mit der Online-Ausweisfunktion Ihren Antrag auf BAföG für eine Ausbildung (Schulausbildung, Studium in Nordrhein-Westfalen sowie Studium in Belgien, den Niederlanden oder Luxemburg) oder Ihren Antrag auf Aufstiegsfortbildungsförderung (z. B. für die Meisterausbildung) in Nordrhein-Westfalen bequem und schnell im Internet stellen.<br/>Ihr Antrag muss dann nicht mehr ausgedruckt, unterschrieben und versandt werden, sondern gilt mit der Übermittlung Ihrer Daten als wirksam gestellt. Beizufügende und nachzureichende Unterlagen sowie Bescheinigungen können Sie über die Upload-Funktion ebenfalls elektronisch übermitteln.<br/>Nach Übermittlung der Daten wird Ihnen der Antrag als PDF-Dokument zum Download angeboten. Der Bescheid wird Ihnen per Post zugestellt."},
"address": "https://www.bafoeg-online.nrw.de",
"homepage": "https://www.bafoeg-online.nrw.de",
"phone": "+49 385-588 7145",
"email": "m.boehm@bm.mv-regierung.de",
"postalAddress": "Ministerium für Bildung, Wissenschaft und Kultur Mecklenburg-Vorpommern<br/>Abteilung 1<br/>Referat 140<br/>Werderstraße 124<br/>19055 Schwerin",
"category": "citizen",
"subjectUrls": []
},
{
"exclude": ["ios"],
"shortName": {"" : "BAföG Online Schleswig-Holstein"},
"longDescription": {"": "In Schleswig-Holstein können Sie Ihr BAföG nicht nur auf dem Postweg oder durch persönliche Abgabe beim Amt beantragen, sondern auch bequem und schnell im Internet.<br/>Ihr Antrag muss dann nicht mehr ausgedruckt, unterschrieben und versandt werden, sondern gilt mit der Übermittlung Ihrer Daten als wirksam gestellt. Beizufügende und nachzureichende Unterlagen sowie Bescheinigungen können Sie über die Upload-Funktion ebenfalls elektronisch übermitteln.<br/>Nach Übermittlung der Daten wird Ihnen der Antrag als PDF-Dokument zum Download angeboten. Der Bescheid wird Ihnen per Post zugestellt."},
"address": "https://bafoeg.schleswig-holstein.de/BAfoeGOnline/ABAfoeG/",
"homepage": "https://bafoeg.schleswig-holstein.de/",
"phone": "+49 431 988-0",
"email": "bafoeg@sozmi.landsh.de",
"postalAddress": "Ministerium für Soziales, Gesundheit, Wissenschaft und Gleichstellung des Landes Schleswig-Holstein<br/>Abteilung VIII 5<br/>Düsternbrooker Weg 104<br/>24105 Kiel",
"category": "citizen"
},
{
"exclude": ["ios"],
"shortName": {"" : "BAföG Online Sachsen"},
"address": "https://fs.egov.sachsen.de/formserv/findform?shortname=bafoeg&formtecid=11&areashortname=SMWK_bafoeg",
"homepage": "http://www.studieren.sachsen.de/",
"phone": "+49 351 564-1080",
"email": "info@sk.sachsen.de",
"postalAddress": "Sächsische Staatskanzlei<br/>Redaktion Amt24 / Bürgerbüro<br/>01095 Dresden",
"category": "citizen",
"subjectUrls": ["https://fs.egov.sachsen.de"]
},
{
"exclude": ["ios"],
"shortName": {"" : "bahn.de"},
"address": "https://www.bahn.de/p/view/meinebahn/login.shtml",
"homepage": "https://www.bahn.de",
"phone": "+49 1806 - 996633",
"email": "reiseportal@bahn.de",
"postalAddress": "DB Vertrieb GmbH<br/>Stephensonstraße 1<br/>60326 Frankfurt am Main",
"category": "other",
"subjectUrls": ["https://www.bahn.de/"]
},
{
"shortName": {"" : "Beantragung Schwerbehindertenausweis Bayern"},
"longDescription": {"": "Einen Schwerbehindertenantrag können Sie bei der Landesbehörde Zentrum Bayern Familie und Soziales (ZBFS) mit der Online-Ausweisfunktion komplett papierlos stellen.<br/>Der papierlose Antrag ist ein bedeutender Schritt auf dem Weg zur digitalen Verwaltung online, schnell und unkompliziert.<br/>Das Online-Verfahren hat weitere Vorteile. Gerade für sehbehinderte Menschen ist die papiergebundene Schriftform ein Hindernis. Digitale Angebote bieten ihnen die Chance, Behördenangelegenheiten ein Stück weit selbständiger erledigen zu können.<br/>Zu 100 Prozent digital ein bisschen weniger lästiger Papierkram. Digitalisierung ist somit ein Beitrag zur Inklusion."},
"address": "https://www.schwerbehindertenantrag.bayern.de",
"homepage": "http://www.zbfs.bayern.de/",
"phone": "+49 921 605-03",
"email": "poststelle@zbfs.bayern.de",
"postalAddress": "Zentrum Bayern Familie und Soziales<br/>95440 Bayreuth",
"category": "citizen",
"subjectUrls": ["https://www.buergerserviceportal.de"]
},
{
"shortName": {"" : "Beantragung Schwerbehindertenausweis Saarland"},
"longDescription": {"": "Als erstes Bundesland bietet Ihnen das Saarland mit Schweb.NET Online die Möglichkeit, Ihren Erst- und Verschlimmerungsantrag auf Feststellung einer Behinderung nach dem Schwerbehindertenrecht online beim Landesamt für Soziales zu stellen.<br/>Weite Wege werden dadurch vermieden. Bearbeitungszeiten und Arbeitsabläufe werden verkürzt.<br/>Der Antrag ist selbsterklärend und nutzerfreundlich. "},
"address": "https://gatewaylas.saarland.de/FV/Onlineantrag",
"homepage": "http://www.saarland.de/index.htm",
"phone": "+49 681/9978-2181",
"email": "",
"postalAddress": "Ministerium für Soziales, Gesundheit, Frauen und Familie<br/>Franz-Josef-Röder-Straße 23<br/>66119 Saarbrücken",
"category": "citizen",
"tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
"subjectUrls": ["https://tbklas.saarland.de"]
},
{
"exclude": ["ios"],
"shortName": {"" : "Bundesagentur für Arbeit"},
"longDescription": {"": "Mit der Online-Ausweisfunktion des Personalausweises können Sie sich bei der Bundesagentur für Arbeit einfach und zuverlässig über Ihr Kindergeld informieren. Die Anwendung bietet u.a. die Möglichkeit:<br/>- sich über den Antragstatus und die Berechnungsgrundlage für den eigenen Kindergeldbezug zu informieren<br/>- Ihre persönlichen Daten online zu ändern, z. B. Ihre Adresse<br/>- für Kunden der Familienkasse Änderungen vollständig papierlos zu übermitteln."},
"address": "https://www.arbeitsagentur.de/npa",
"homepage": "https://www.arbeitsagentur.de/",
"phone": "+49 911/179-0",
"email": "Zentrale@arbeitsagentur.de ",
"postalAddress": "Bundesagentur für Arbeit<br/>Regensburger Straße 104<br/>90478 Nürnberg",
"category": "other",
"tcTokenUrl" : "",
"clientUrl" : "https://formular.arbeitsagentur.de/eantrag/fallinfo-npa.page",
"subjectUrls": ["https://formular.arbeitsagentur.de"]
},
{
"exclude": ["ios"],
"shortName": {"" : "Bundestag ePetition"},
"longDescription": {"": "Mit der Online-Ausweisfunktion des Personalausweises können Sie sich einfach und sicher am Petitionsportal des Deutschen Bundestages<br/>- registrieren,<br/>- eine Petition einreichen sowie<br/>- eine Petition mitzeichnen."},
"address": "https://epetitionen.bundestag.de/epet/anmelden.html",
"homepage": "http://www.bundestag.de/",
"phone": "+49 30 227-35257",
"email": "post.pet@bundestag.de",
"postalAddress": "Sekretariat des Petitionsausschusses<br/>Platz der Republik 1<br/>11011 Berlin",
"category": "citizen",
"tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
"subjectUrls": ["https://epetitionen.bundestag.de"]
},
{
"exclude": ["ios"],
"shortName": {"" : "Bürgerantrag Bremen"},
"longDescription": {"": "Mit der Online-Ausweisfunktion können Sie im Bundesland Bremen Bürgeranträge elektronisch mitzeichnen oder Unterschriften für Ihren eigenen Bürgerantrag sammeln. Mit nur 5.000 Mitzeichnerinnen und Mitzeichnern egal ob online oder auf Papier können Sie Anträge direkt in den Bremische Bürgerschaft (Landtag) einbringen. Für die Stadtbürgerschaft Bremen genügen sogar 4.000 Unterschriften."},
"address": "https://www.buergerantrag.bremen.de",
"homepage": "http://www.bremische-buergerschaft.de/",
"phone": "",
"email": "webmaster@buergerschaft.bremen.de",
"postalAddress": "",
"category": "citizen",
"tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
"subjectUrls": ["https://servicekonto.bremen.de"]
},
{
"shortName": {"" : "Bürgerdienste der Stadt Münster"},
"longDescription": {"": "Die Stadt Münster bietet auf ihrer Webseite eine Reihe von Online-Diensten an. Dort können Sie mit der Online-Ausweisfunktion unter anderem:<br/>- eine Personenstandsurkunde bestellen,<br/>- Ihr Wunschkennzeichen beantragen,<br/>- geografische Karten bestellen,<br/>- Elektroschrott zur Abholung anmelden,<br/>- eine Erklärung zum Elterneinkommen für die Festsetzung des Elternbeitrags für die Kindertagesbetreuung abgeben,<br/>- eine Sondernutzungserlaubnis für private Baumaßnahmen an öffentlichen Straßen beantragen,<br/>- eine Großanlage mit zentraler Trinkwassererwärmung anzeigen,<br/>- einen Fahrradfund melden,<br/>- ein Reitkennzeichen beantragen,<br/>- Mietspiegel-Broschüren bestellen."},
"address": "https://www.stadt-muenster.de/rathaus/online-dienste.html",
"homepage": "http://www.muenster.de/",
"phone": "+49 251/4 92-0",
"email": "stadtverwaltung@stadt-muenster.de",
"postalAddress": "Stadt Münster<br/>48127 Münster",
"category": "citizen",
"tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
"subjectUrls": []
},
{
"exclude": ["ios"],
"shortName": {"" : "Bürgerportal Baden-Württemberg"},
"longDescription": {"": "Das Bürgerportal ,mein service-bw' bietet Bürgerinnen und Bürgern mit dem Personalausweis praktische Anwendungen für die Online-Ausweisfunktion. Das Portal bietet seinen Nutzern unter anderem:<br/>- sicheres Registrieren und Anmelden, um Behördengänge im Internet zu erledigen<br/>- verschlüsselte Ablage persönlicher Daten und Dateien in einem Datenspeicher im Internet, dem sogenannten Dokumentensafe<br/>- orts- und zeitunabhängiger Zugang zu den Daten im Dokumentensafe sowie die Möglichkeit, diese elektronisch an Behörden weiterzuleiten (z. B. für eine Gewerbeanmeldung)."},
"address": "http://service-bw.de/zfinder-bw-web/welcome.do?showMsbwDetails=1",
"homepage": "https://www.service-bw.de/",
"phone": "",
"email": "service-bw@im.bwl.de",
"postalAddress": "Ministerium für Inneres, Digitalisierung und Migration Baden-Württemberg<br/>Willy-Brandt-Straße 41<br/>70173 Stuttgart",
"category": "citizen",
"tcTokenUrlInfo" : "Unable to locate URL",
"subjectUrls": ["https://eid.service-bw.de"]
},
{
"shortName": {"" : "Bürgerportal Rheinland Pfalz"},
"longDescription": {"": "Über 80% der Meldebehörden und über 90% der Standesämter in Rheinland-Pfalz bieten Ihnen über das Portal www.rlpdirekt.de Verwaltungsleistungen mit der Online-Ausweisfunktion an, für die Sie nicht mehr zur Behörde gehen müssen, z. B.:<br/>- Kfz abmelden<br/>- Führungszeugnis beantragen,<br/>- Meldebescheinigung beantragen,<br/>- Aufenthaltsbescheinigung beantragen,<br/>- Übermittlungssperre einrichten,<br/>- Auskunft aus dem Gewerbezentralregister beantragen,<br/>- Beurkundung im Personenstandswesen beantragen.<br/>Welche Dienste in Ihrer Kommune mit der Online-Ausweisfunktion genutzt werden können, erfahren Sie, wenn Sie auf dem Portal unter \"Stadt/Ort\" Ihren Wohnort eingeben."},
"address": "http://www.rlpdirekt.de/rheinland-pfalz",
"homepage": "http://www.rlpdirekt.de/rheinland-pfalz/",
"phone": "+49 6131 / 6277-0",
"email": "support@kommwis.de",
"postalAddress": "KommWis GmbH<br/>Gesellschaft für Kommunikation und Wissenstransfer mbH<br/>Hindenburgplatz 3<br/>55118 Mainz",
"category": "citizen",
"tcTokenUrlInfo" : "PLZ required",
"subjectUrls": []
},
{
"exclude": ["ios"],
"shortName": {"" : "Bürgerservice-Portal Kreis Herford"},
"longName": {"" : "Bürgerservice-Portal Kreis Herford"},
"shortDescription": {"": "Anträge an die Kreisverwaltung Herford online erfassen."},
"longDescription": {"": "In unserem Bürgerservice-Portal können Sie Anträge an die Kreisverwaltung Herford online erfassen und direkt zur weiteren Bearbeitung an die zuständigen Stellen übermitteln."},
"address": "https://www.buergerserviceportal.nrw/krz/lkrherford",
"homepage": "https://www.kreis-herford.de/",
"phone": "+49 5223/988 - 500",
"email": "portal@kreis-herford.de",
"postalAddress": "Kreis Herford<br/>Amtshausstraße 3<br/>32051 Herford",
"image": "KreisHerford_image.jpg",
"icon": "KreisHerford_icon.png",
"category": "citizen",
"tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
"subjectUrls": ["https://www.buergerserviceportal.nrw"]
},
{
"exclude": ["ios"],
"shortName": {"" : "Bürgerservice-Portal Kreis Minden-Lübbecke"},
"longName": {"" : "Bürgerservice-Portal Kreis Minden-Lübbecke"},
"shortDescription": {"": "Anträge an den Kreis Minden-Lübbecke online erfassen."},
"longDescription": {"": "In unserem Portal können Sie Ihren Antrag an den Kreis Minden-Lübbecke direkt online erfassen und elektronisch übermitteln."},
"address": "https://www.buergerserviceportal.nrw/krz/mindenluebbecke",
"homepage": "http://www.minden-luebbecke.de/",
"phone": "+49 571 807-0",
"email": "info@minden-luebbecke.de",
"postalAddress": "Kreis Minden-Lübbecke<br/>Portastraße 13<br/>32423 Minden",
"image": "KreisMindenLuebbeke_image.jpg",
"icon": "KreisMindenLuebbeke_icon.png",
"category": "citizen",
"tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
"subjectUrls": ["https://www.buergerserviceportal.nrw"]
},
{
"exclude": ["ios"],
"shortName": {"" : "Bürgerservice-Portal Stadt Lage"},
"longName": {"" : "Bürgerservice-Portal Stadt Lage"},
"shortDescription": {"": "Anträge online erfassen und an die Verwaltung weiterleiten."},
"longDescription": {"": "Das Bürgerservice-Portal bietet die Möglichkeit, Anträge an die Verwaltung der Stadt Lage online zu erfassen und elektronisch zur weiteren Bearbeitung weiterzuleiten."},
"address": "https://www.buergerserviceportal.nrw/krz/lage",
"homepage": "http://www.lage.de/",
"phone": "+49 5232/601300",
"email": "Buergerbuero@lage.de",
"postalAddress": "Bürgerbüro Lage<br/>Bergstraße 21<br/>32791 Lage",
"image": "StadtLage_image.jpg",
"icon": "StadtLage_icon.png",
"category": "citizen",
"tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
"subjectUrls": ["https://www.buergerserviceportal.nrw"]
},
{
"exclude": ["ios"],
"shortName": {"" : "Bürgerservice-Portal Stadt Norderstedt"},
"longDescription": {"": "In Norderstedt können Sie mit der Online-Ausweisfunktion über das Bürgerservice-Portal folgende Bürgerdienste nutzen:<br/>- Meldebestätigung<br/>- Aufenthaltsbescheinigung<br/>- Übermittlungssperren<br/>- Umzug innerhalb der Stadt<br/>- Voranzeige einer Anmeldung<br/>- Briefwahlunterlagen<br/>- Führungszeugnis<br/>Darüber hinaus können Sie Ihr persönliches Bürgerkonto einrichten. Nach Einrichtung des Bürgerkontos werden die bei einer Nutzung des Bürgerservice-Portals notwendigen persönlichen Daten komfortabel aus Ihrem Bürgerkonto übernommen. Damit sparen Sie Zeit und erleichtern den Behörden die Bearbeitung Ihres Antrags."},
"address": "https://norderstedt.de/digital",
"homepage": "https://www.norderstedt.de/",
"phone": "+49 40 - 535 95-0 ",
"email": "info@norderstedt.de",
"postalAddress": "Stadt Norderstedt<br/>Rathausallee 50<br/>22846 Norderstedt",
"category": "citizen",
"tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
"subjectUrls": ["https://sh.buergerserviceportal.de"]
},
{
"exclude": ["ios"],
"shortName": {"" : "Bürgerservice-Portal Wiesbaden"},
"longDescription": {"": "In Wiesbaden können Sie mit der Online-Ausweisfunktion über das Bürgerservice-Portal<br/>- Briefwahlunterlagen,<br/>- Meldebestätigungen,<br/>- Aufenthaltsbescheinigungen,<br/>- Übermittlungssperren,<br/>- Führungszeugnisse und<br/>- Auskünfte aus dem Gewerbezentralregister beantragen."},
"address": "https://www.buergerserviceportal.de/hessen/wiesbaden",
"homepage": "http://www.wiesbaden.de/",
"phone": "+49 611 / 31 - 8300",
"email": "buergeramt@wiesbaden.de",
"postalAddress": "Postfach 3920<br/>65029 Wiesbaden",
"category": "citizen",
"tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
"subjectUrls": ["https://www.buergerserviceportal.de"]
},
{
"exclude": ["ios"],
"shortName": {"" : "Bürgerservice-Portale der bayerischen Kommunen"},
"longDescription": {"": "Das BayernPortal ist das zentrale Verwaltungsportal für den Freistaat Bayern und die bayerischen Kommunen.<br/>Es bietet Ihnen eine einheitliche Anlaufstelle sowie einen einheitlichen Zugang zu den staatlichen und kommunalen Verwaltungsdienstleistungen in Bayern. Sie erreichen darüber mehr als 150 Online-Dienstleistungen, mehr als 2.000 Fachdatenbanken, über 2.500 Formulare und Merkblätter sowie mehr als 20.000 Ansprechpartnerinnen und Ansprechpartner bei Behörden.<br/>Über das BayernPortal können Sie sich zudem ein Servicekonto einrichten, das BayernID genannt wird und mit dem Sie die Verwaltungsdienstleistungen aller angeschlossenen Kommunen und des Freistaats Bayern einfach und sicher nutzen können. Die Einrichtung Ihrer BayernID und die Anmeldung an diesem persönlichen Servicekonto können Sie auch mit der Online-Ausweisfunktion vornehmen.<br/>Ihre in Ihrem Servicekonto gespeicherten Daten werden automatisch in Ihre Anträge übernommen. Dadurch sparen Sie Zeit und erleichtern der Behörde die Bearbeitung Ihres Anliegens.<br/>In Verbindung mit dem Bayerischen E-Government Gesetz bietet Ihnen die BayernID die Möglichkeit, die in vielen Fällen erforderliche Schriftform zu ersetzen und damit Ihre Anträge ohne handschriftliche Unterschrift, d. h. vollständig online abzuwickeln. Sie müssen nicht mehr zur Behörde gehen oder Unterlagen per Post senden."},
"address": "https://www.buergerserviceportal.de/bayern/classic/",
"homepage": "http://www.freistaat.bayern/",
"phone": "+49 (0)89 12 22 20",
"email": "direkt@bayern.de",
"postalAddress": "Postfach 22 00 03<br/>80535 München",
"category": "citizen",
"tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
"subjectUrls": ["https://www.buergerserviceportal.de"]
},
{
"exclude": ["ios"],
"shortName": {"" : "CosmosDirekt Kundenportal meinCosmosDirekt"},
"longDescription": {"": "Mit der Online-Ausweisfunktion des Personalausweises können Sie sich einfach und sicher am Kundenportal ,mein Cosmos-Direkt' registrieren und anmelden. Im Portal haben Sie die Möglichkeit Ihre Versicherungen zu verwalten. Sie können online einen Antrag für ein Tagesgeldkonto stellen oder auch schnell und einfach Ihre persönlichen Daten, z.B. Ihre Adresse, ändern."},
"address": "https://www.cosmosdirekt.de/services/mcd-info",
"homepage": "https://www.cosmosdirekt.de/",
"phone": "+49 681-9 66 68 00",
"email": "info@cosmosdirekt.de",
"postalAddress": "CosmosDirekt<br/>66101 Saarbrücken",
"image": "CosmosDirekt_image.jpg",
"icon": "CosmosDirekt_icon.png",
"category": "insurance",
"tcTokenUrl" : "https://www.cosmosdirekt.de/nPa/IdentifizierenNPA?back_url=https://www.cosmosdirekt.de/meincosmosdirekt-registrierung/*ident=1",
"subjectUrls": ["https://www.cosmosdirekt.de"]
},
{
"exclude": ["ios"],
"shortName": {"" : "d.velop foxdox.de: Dokumente sicher ablegen"},
"longDescription": {"": "Dokumente, Verträge, Reiseunterlagen, Bilder und vieles mehr können Sie einfach in Ihren persönlichen foxdox-Account hochladen. <br/>Sie melden sich mit der Online-Ausweisfunktion an und können von überall und jederzeit auf Ihre Dokumentenablage zugreifen, z. B. um sie innerhalb der Familie, Ihren Kollegen oder auch Ihrem Steuerberater zur Verfügung zu stellen. <br/>Quittungen und Belege können Sie einfach fotografieren oder scannen, hochladen und sicher in Ihrem foxdox-Account mit übersichtlichem Ordner-System speichern. Eine separate Ablage oder Kopien sind nicht mehr notwendig. Alle Daten liegen sicher und verschlüsselt in einem Rechenzentrum in Deutschland.<br/>Ein Standard-Account ist kostenfrei erhältlich."},
"address": "https://mein.foxdox.de/",
"homepage": "https://www.d-velop.de/foxdox/foxdox-home",
"phone": "+49 (0) 2542 9307-0",
"email": "support@foxdox.de",
"postalAddress": "d.velop business services GmbH<br/>Schildarpstraße 6-8<br/>48712 Gescher",
"category": "other",
"tcTokenUrl" : "https://mein.foxdox.de/npa_login?action=gettctoken&next=/documents",
"subjectUrls": ["https://mein.foxdox.de"]
},
{
"exclude": ["ios"],
"shortName": {"" : "Datev - Arbeitnehmer online / Lohn- und Gehaltsabrechnung"},
"longDescription": {"": "Nach einmaliger Freischaltung durch den Arbeitgeber erhalten Sie Ihren persönlichen Aktivierungscode per Post. Mit dem Aktivierungscode registrieren Sie sich an dem Portal „DATEV Arbeitnehmer online“, dazu können Sie u.a. die Online-Ausweisfunktion nutzen. Danach können Sie jederzeit Ihre Brutto/Netto-Abrechnungen, Sozialversicherungsnachweise und Lohnsteuerbescheinigungen online abrufen. Sie haben dadurch jederzeit und überall einen schnellen Überblick über Ihre gesamten Lohn- und Gehaltsdokumente. "},
"address": "https://www.datev.de/ano/",
"homepage": "https://www.datev.de",
"phone": "+49 800 3283825",
"email": "info@datev.de",
"postalAddress": "DATEV eG<br/>90329 Nürnberg",
"category": "other",
"tcTokenUrlInfo" : "Address is faulty",
"subjectUrls": ["https://secure6.datev.de"]
},
{
"exclude": ["ios"],
"shortName": {"" : "Deutsche Post AG - POSTIDENT Verfahren"},
"longName": {"" : "Deutsche Post AG - POSTIDENT Verfahren"},
"shortDescription": {"": "Durch das Onlineverfahren POSTIDENT mit dem neuem Personalausweis, können Sie sich schnell und einfach online mit Ihrem neuen Personalausweis identifizieren."},
"longDescription": {"": "Durch das Onlineverfahren POSTIDENT mit dem neuem Personalausweis, können Sie sich schnell und einfach online mit Ihrem neuen Personalausweis z.B. zur Eröffnung eines Tagesgeldkontos identifizieren: Sie werden hierzu von Ihrer Bank automatisch auf das POSTIDENT Portal geleitet und können sich mithilfe Ihres neuen Personalausweises mit freigeschalteter Online-Ausweisfunktion, einem Kartenlesegerät sowie der AusweisApp2 in wenigen Minuten sicher identifizieren."},
"address": "https://www.deutschepost.de/de/p/postident/identifizierungsverfahren/postident-npa.html",
"homepage": "https://www.deutschepost.de/de/p/postident.html",
"email": "info@deutschepost.de",
"postalAddress": "Deutsche Post AG<br/>Charles-de-Gaulle-Str. 20<br/>53113 Bonn",
"image": "DeutschePost_image.jpg",
"icon": "DeutschePost_icon.png",
"category": "finance"
},
{
"shortName": {"" : "Deutsche Rentenversicherung"},
"longDescription": {"": "Mit der Online-Ausweisfunktion im neuen Personalausweis können Sie ...<br/>- auf Informationen Ihres Rentenkontos im Kundenbereich ,eService' sicher zugreifen (z. B. Versicherungsverlauf und Beitragsrechnung),<br/>- Ihre Rentenauskunft online abrufen,<br/>- schnell und einfach Ihre persönlichen Daten ändern (z. B. Ihre Adresse und Bankverbindung)."},
"address": "https://www.eservice-drv.de/OnlineDiensteWeb/init.do?npa=true",
"homepage": "http://www.deutsche-rentenversicherung.de/",
"phone": "+49 800 100 048070",
"email": "Online-Dienste@deutsche-rentenversicherung.de",
"postalAddress": "Ruhrstraße 2<br/>10709 Berlin",
"category": "citizen",
"tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
"subjectUrls": ["https://www.eservice-drv.de"]
},
{
"exclude": ["ios"],
"shortName": {"" : "eAntrag der Investitionsbank Berlin (IBB)"},
"longDescription": {"": "Im Kundenportal der Investitionsbank Berlin können Sie verschiedene Förder-Produkte durchgängig elektronisch beantragen:<br/>- Berlin Kapital<br/>- IBB Familienbaudarlehen<br/>- IBB Wohnraum modernisieren<br/>- KMU-Fonds über 25.000 Euro<br/>- Liquiditätshilfen BERLIN<br/>- Mikrokredit aus dem KMU-Fonds<br/>- Pro FIT (Projektvorschlagsphase)<br/>- Pro FIT (Frühphasenfinanzierung)<br/>Für die rechtsverbindliche, fristwahrende Antragstellung der Produkte<br/>- GRW<br/>- Innovationsassistent<br/>- PFI - Gemeinschaft<br/>- PFI - KMU<br/>- PFI - Netzwerk<br/>- ProFIT (Projektantragsphase)<br/>gilt aus verwaltungsrechtlichen Anforderungen das Schriftformerfordernis: Die elektronische Antragstellung ist zwingend nachträglich schriftlich zu bestätigen.<br/>Mit der Online-Ausweisfunktion können Sie sich bequem und sicher elektronisch legitimieren und müssen dadurch Ihre Identität weder per Postident-Verfahren noch persönlich vor Ort nachweisen.<br/>Nach Ihrer Legitimierung können Sie über eine persönliche Dokumentenablage die rechtsverbindliche Kommunikation mit Ihrem IBB-Ansprechpartner online und unabhängig von Öffnungszeiten oder Postwegen über das Kundenportal erledigen."},
"address": "https://www.ibb.de/de/service/eantrag/eantrag.html",
"homepage": "http://www.ibb.de/",
"phone": "+49 30 / 2125 - 0",
"email": "info@ibb.de",
"postalAddress": "Investitionsbank Berlin (IBB)<br/>Bundesallee 210<br/>10719 Berlin",
"category": "finance",
"tcTokenUrlInfo" : "Registration required.",
"subjectUrls": []
},
{
"exclude": ["ios"],
"shortName": {"" : "easy Login - Der Zugang für Finanz- & Versicherungsvermittler"},
"address": "http://www.easy-login.de",
"homepage": "http://www.easy-login.de",
"phone": "+49 921 75758-555",
"email": "info@easy-login.de",
"postalAddress": "easy Login GmbH<br/>Bindlacher Str. 4<br/>95448 Bayreuth",
"category": "insurance",
"tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
"subjectUrls": ["https://easy-login.vdg-portal.de"]
},
{
"exclude": ["ios"],
"shortName": {"" : "ELSTER"},
"longName": {"" : "ELSTER - Die elektronische Steuererklärung"},
"shortDescription": {"": "Abwicklung der Steuererklärungen und -anmeldungen über das Internet."},
"longDescription": {"": "ELSTER bietet im Rahmen der Registrierung, welche Voraussetzung für die Abwicklung der Steuererklärungen und Steueranmeldungen über das Internet ist, die Möglichkeit der Nutzung der Online-Ausweisfunktion."},
"address": "https://www.elster.de",
"homepage": "https://www.elster.de",
"phone": "+49 89 9991 - 0",
"email": "info@elster.de",
"postalAddress": "Bayerisches Landesamt für Steuern - Dienststelle München<br/>80284 München",
"image": "elster_image.png",
"icon": "elster_icon.png",
"category": "citizen",
"tcTokenUrlInfo" : "Registration required.",
"subjectUrls": []
},
{
"exclude": ["ios"],
"shortName": {"" : "ERGO Direkt Lebensversicherung AG"},
"address": "https://ergodirekt.de/de/persoenlicherbereich.html#login",
"homepage": "https://ergodirekt.de",
"phone": "+49 800 / 444 1000",
"email": "beratung@ergodirekt.de",
"postalAddress": "Karl-Martell-Straße 60<br/>90344 Nürnberg",
"category": "insurance",
"subjectUrls": ["https://ergodirekt.de"]
},
{
"shortName": {"" : "Feinstaubplakette beantragen"},
"longDescription": {"": "In Berlin können Sie eine Feinstaubplakette für alle Kraftfahrzeuge mit der Online-Ausweisfunktion beantragen. Der Antrag ist unabhängig davon, ob Ihr Fahrzeug in Berlin, bei einer anderen deutschen Zulassungsbehörde, oder im Ausland zugelassen ist.<br/>Ihre persönlichen Daten werden verschlüsselt übertragen. Sie müssen Ihre Angaben nicht per Hand eingeben und die Behörde erhält zuverlässig korrekte Informationen, die rasch weiterverarbeitet werden können.<br/>Auf der Internet-Seite Umweltzonen und Feinstaubplaketten der Senatsverwaltung für Stadtentwicklung und Umwelt können Sie sich vorab informieren, welche Plakette Ihrem Fahrzeug zugeteilt werden kann."},
"address": "http://www.berlin.de/labo/fahrzeuge/kfz-zulassung/feinstaubplakette/shop.85047.php",
"homepage": "https://www.berlin.de",
"phone": "+49 30 90269 0",
"email": "",
"postalAddress": "Direktorin Landesamt für Bürger- und Ordnungsangelegenheiten<br/>Friedrichstr. 219<br/>10958 Berlin",
"category": "other",
"tcTokenUrlInfo" : "Car lizence number required",
"subjectUrls": []
},
{
"exclude": ["ios", "android"],
"shortName": {"" : "Führungszeugnis und Auskunft aus dem Gewerbezentralregister"},
"longDescription": {"": "Sie benötigen ein Führungszeugnis oder eine Auskunft aus dem Gewerbezentralregister? Mit dem Personalausweis im Scheckkartenformat können Sie einen Behördengang sparen. Weitere Voraussetzungen sind die freigeschaltete Online-Ausweisfunktion und ein passendes Kartenlesegerät für Ihren Computer. Auf diese Weise kann eindeutig identifiziert werden, wer den Antrag stellt. Ausländische Mitbürger, die keinen deutschen Personalausweis besitzen, können in gleicher Weise die entsprechende Funktion ihres elektronischen Aufenthaltstitels nutzen.<br/>Neben Führungszeugnissen können auch Auskünfte aus dem Gewerbezentralregister über das neue Online-Portal des BfJ beantragt werden. Solche Auskünfte benötigen Unternehmen, die sich in Ausschreibungsverfahren um öffentliche Aufträge bewerben, recht häufig. Auch hier kann das Online-Verfahren den Aufwand erheblich senken."},
"address": "https://www.fuehrungszeugnis.bund.de/",
"homepage": "https://www.bundesjustizamt.de",
"phone": "+49 228 99 410-40",
"email": "poststelle@bfj.bund.de",
"postalAddress": "Bundesamt für Justiz<br/>53094 Bonn",
"category": "citizen",
"tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
"subjectUrls": ["https://www.fuehrungszeugnis.bund.de/ffw"]
},
{
"shortName": {"" : "Halterauskunft zu einem KFZ beantragen"},
"longDescription": {"": "In Berlin können Sie für Fahrzeuge, die bei der Zulassungsbehörde Berlin registriert sind, mit der Online-Ausweisfunktion eine Halterauskunft beantragen.<br/>Ihre persönlichen Daten werden verschlüsselt übertragen. Sie müssen Ihre Angaben nicht per Hand eingeben und die Behörde erhält zuverlässig korrekte Informationen, die rasch weiterverarbeitet werden können.<br/>Bitte beachten Sie, dass eine Halterauskunft nur erteilt werden kann, wenn diese der Geltendmachung oder Abwehr von Rechtsansprüchen dient, die sich aus der Teilnahme am Straßenverkehr ergeben, oder wenn sie zur Erhebung einer Privatklage aufgrund im Straßenverkehr begangener Verstöße benötigt wird."},
"address": "https://www.berlin.de/labo/mobilitaet/kfz-zulassung/halterauskunft/shop.86598.php",
"homepage": "https://www.berlin.de",
"phone": "+49 30 90269 0",
"email": "",
"postalAddress": "Direktorin Landesamt für Bürger- und Ordnungsangelegenheiten<br/>Friedrichstr. 219<br/>10958 Berlin",
"category": "other",
"tcTokenUrlInfo" : "Car lizence number required.",
"subjectUrls": []
},
{
"exclude": ["ios"],
"shortName": {"" : "Hamburg Service Online-Bürgerdienste"},
"longDescription": {"": "Über das Portal ,HamburgService' finden Sie auf einen Blick alle Online-Dienste der Freien und Hansestadt Hamburg. Für die Dienste, die mit sensiblen Daten arbeiten (Dienste der Sicherheitsstufe 2), müssen Sie sich nach der Registrierung einmalig identifizieren. Sie können dazu die Online-Ausweisfunktion Ihres Personalausweises nutzen. Eine persönliche Identifizierung in einem Kundenzentrum der Stadt Hamburg ist dann nicht mehr nötig."},
"address": "https://gateway.hamburg.de/HamburgGateway/FVP/Application/Index.aspx",
"homepage": "http://www.hamburg.de/",
"phone": "",
"email": "dataporthamburggateway-service@dataport.de",
"postalAddress": "Bürgermeister Olaf Scholz<br/>Rathausmarkt 1<br/>20095 Hamburg",
"category": "citizen",
"tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
"subjectUrls": ["https://gateway.hamburg.de"]
},
{
"exclude": ["ios"],
"shortName": {"" : "HUK 24 AG - Registrierung für Servicebereich \"Meine HUK24\""},
"longDescription": {"": "Die Registrierung am Kundenportal ,Meine HUK24' können Sie mit der Online-Ausweisfunktion im Personalausweis schnell und einfach selbst erledigen. Ihre Versicherung lässt sich damit komplett online verwalten: egal, ob Sie einen Vertrag abändern eine neue Versicherung abschließen, oder Ihre persönlichen Daten aktualisieren möchten mit dem Personalausweis können Sie alles problemlos von Zuhause aus erledigen."},
"address": "https://www.huk24.de/",
"homepage": "https://www.huk24.de/",
"phone": "+49 95 61/96-13 38",
"email": "info@huk24.de",
"postalAddress": "HUK24 AG<br/>Willi-Hussong-Str. 2<br/>96440 Coburg",
"category": "insurance",
"tcTokenUrlInfo" : "Registration required",
"subjectUrls": ["https://www.huk24.de"]
},
{
"shortName": {"" : "Kreis Borken"},
"longName": {"" : "Kreis Borken - Kfz-Abmeldung Internet"},
"shortDescription": {"": "Authentisierung für internetbasierte Kfz-Abmeldung."},
"longDescription": {"": "Für die internetbasierte Kfz-Abmeldung wird die eID-Funktionalität des neuen Personalausweises benötigt."},
"address": "https://formulare-extern.de/administrationCenter/Form-Solutions/05554004-0001/eID/eIDMandatory?directlink=https%3A%2F%2Fformulare-extern.de%2Fmetaform%2FForm-Solutions%2Fsid%2Fassistant%2F55dc839be4b054042fb93dba%3FeIDComplete%3Dtrue",
"homepage": "https://www.kreis-borken.de",
"phone": "+49 2861 / 82 - 2059",
"email": "zulassungsstelle@kreis-borken.de",
"postalAddress": "Kfz-Zulassungsstelle Borken<br/>Burloer Str. 93<br/>46325 Borken",
"image": "KreisBorken_image.png",
"icon": "KreisBorken_icon.svg",
"category": "citizen",
"tcTokenUrlInfo" : "",
"subjectUrls": []
},
{
"exclude": ["ios"],
"shortName": {"" : "ID-Safe des Landkreis Kitzingen"},
"longDescription": {"": "Die Stadt Kitzingen bietet bei verschiedenen Bürgerdiensten die Nutzung der Online-Ausweisfunktion in Verbindung mit elektronischen Antragsformularen an:<br/>- Gewerbeanmeldung<br/>- Gewerbeummeldung<br/>- Gewerbeabmeldung<br/>- Fischereischein<br/>- Verkehrsrechtliche Anordnung<br/>- Sondernutzung<br/>- Parkerleichterung<br/>- Mängelmeldung"},
"address": "https://www.buergerservice.org/ID-Safe-Kitzingen",
"homepage": "http://www.kitzingen.de/",
"phone": "+49 9321 / 928-0,",
"email": "info@kitzingen.de",
"postalAddress": "Landratsamt Kitzingen<br/>Herr Thomas Langhojer<br/>Kaiserstraße 4<br/>97318 Kitzingen",
"category": "citizen",
"tcTokenUrlInfo" : "Registration required",
"subjectUrls": ["https://www.buergerservice.org"]
},
{
"exclude": ["ios"],
"shortName": {"" : "ID-Safe des Landkreis Ostallgäu"},
"longDescription": {"": "Der Landkreis Ostallgäu bietet Ihnen bei verschiedenen Bürgerdiensten die Nutzung der Online-Ausweisfunktion in Verbindung mit elektronischen Antragsformularen an:<br/>- Bauantrag digital<br/>- Sperrmüll-Abholung<br/>- An-, Um- oder Abmeldung einer Abfalltonne<br/>- Antrag auf Dauergenehmigung und Feriengenehmigung für ein Segelboot oder Motorboot auf dem Forggensee<br/>Der Landkreis Ostallgäu bietet Ihnen außerdem einen ID-Safe an. Hier können Sie die Daten aus Ihrer Online-Ausweisfunktion hinterlegen und um weitere Kontaktdaten ergänzen. Anschließend können Sie die elektronischen Antragsformulare des Landkreises automatisch mit Ihren hinterlegten Daten befüllen. Dadurch vermeiden Sie Tippfehler und können die Bearbeitung Ihres Vorgangs beschleunigen.<br/>Darüber hinaus können Sie im Landkreis Ostallgäu über das bayerische Bürgerservice-Portal folgende Bürgerdienste online beantragen:<br/>- Fahrzeug-Anmeldung<br/>- Fahrzeug-Abmeldung<br/>- Feinstaubplakette<br/>- Wunschkennzeichen"},
"address": "https://www.sixform.com/ID-safe",
"homepage": "https://www.landkreis-ostallgaeu.de/",
"phone": "+49 83 42 · 9 11 - 0",
"email": "poststelle@lra-oal.bayern.de",
"postalAddress": "Landkreis Ostallgäu<br/>Schwabenstraße 11<br/>87616 Marktoberdorf",
"category": "citizen",
"tcTokenUrlInfo" : "Registration required",
"subjectUrls": ["https://www.sixform.com"]
},
{
"exclude": ["ios"],
"shortName": {"" : "ID-Safe des Landkreis Würzburg"},
"address": "https://www.buergerservice.org/ID-Safe-Wuerzburg",
"homepage": "http://www.landkreis-wuerzburg.de/startseite.phtml",
"phone": "+49 931 8003-0 ",
"email": "poststelle@lra-wue.bayern.de",
"postalAddress": "Landratsamt Würzburg<br/>Zeppelinstraße 15<br/>97074 Würzburg",
"category": "citizen",
"tcTokenUrlInfo" : "Registration required",
"subjectUrls": ["https://www.buergerservice.org"]
},
{
"exclude": ["ios"],
"shortName": {"" : "Identitätsprüfungen nach dem Signaturgesetz und dem Geldwäschegesetz"},
"longDescription": {"": "Die identity Trust Management AG bietet Unternehmen die Möglichkeit, ihre Kunden schnell und sicher mit der Online-Ausweisfunktion zu identifizieren. <br/>Kunden der Kooperationspartner der identity Trust Management AG können die Identitätsprüfung nach dem Signaturgesetz und dem Geldwäschegesetz auch direkt über die Internetseite der identity Trust Management AG vornehmen."},
"address": "https://www.identity.tm",
"homepage": "https://www.identity.tm",
"phone": "+49 211 68 77 3-0",
"email": "kontakt@identity.tm",
"postalAddress": "identity Trust Management AG<br/>Lierenfelder Straße 51<br/>40231 Düsseldorf",
"category": "other",
"tcTokenUrlInfo" : "Registration required",
"subjectUrls": []
},
{
"exclude": ["ios"],
"shortName": {"" : "Kraftfahrt-Bundesamt - Registerauskunft"},
"longDescription": {"": "Mit der Online-Ausweisfunktion können Sie beim Kraftfahrt-Bundesamt einfach und schnell eine Auskunft über Ihren Punktestand und die zu Ihrer Person gespeicherten Eintragungen im Fahreignungsregister (FAER) beantragen. Die erforderlichen Daten werden dann von Ihrem Personalausweis ausgelesen. Die Auskunft erhalten Sie innerhalb weniger Tage per Post."},
"address": "https://www.kba-online.de/registerauskunft/app/registeranfrage.html",
"homepage": "http://www.kba.de/",
"phone": "+49 461 316-0",
"email": "poststelle@kba.de",
"postalAddress": "Kraftfahrt-Bundesamt <br/>Fördestraße 16<br/>24944 Flensburg",
"category": "citizen",
"tcTokenUrl" : "https://www.kba-online.de:443/registerauskunft/app/eidstart.html;jsessionid=HZFFDC4E848A794D83A1D3032252F3F905?ref=HZFFDC4E848A794D83A1D3032252F3F905",
"tcTokenUrlInfo" : "TcToken URL contains dynamic request id but is accepted anyway.",
"subjectUrls": ["https://www.kba-online.de/registerauskunft"]
},
{
"exclude": ["ios"],
"shortName": {"" : "Login Meine VBL"},
"longDescription": {"": "Bei der VBL können Sie sich mit dem Personalausweis am Kundenportal ,Meine VBL' registrieren und anmelden. Dadurch entfällt der Postversand eines Freischaltcodes - Sie sparen Zeit. Im Kundenkonto können Sie Ihre Vertragsdaten und Ihre persönlichen Daten einsehen und weitere Online-Dienste nutzen, z. B.<br/>- Rentenantrag stellen,<br/>- Beitragserstattung beantragen,<br/>- Kontaktdaten ändern,<br/>- persönliche Mitteilungen von der VBL erhalten."},
"address": "https://vbl.de/de/meine_vbl",
"homepage": "https://vbl.de/",
"phone": "+49 721 93 98 93 1",
"email": "info@vbl.de",
"postalAddress": "VBL. Kundenservice<br/>76240 Karlsruhe",
"category": "other",
"tcTokenUrlInfo" : "Registration required",
"subjectUrls": ["https://www.vbl.de"]
},
{
"exclude": ["ios"],
"shortName": {"" : "LVM Versicherung - Kundenportal Meine LVM"},
"longDescription": {"": "Mit der Online-Ausweisfunktion im Personalausweis können Sie sich nach der Registrierung durch Ihre LVM-Agentur sicher am Kundenportal ,Meine LVM' anmelden. Ihre Versicherung können Sie nun selbst verwalten und beispielsweise sämtliche Vertragsdaten online einsehen. Darüber hinaus ist es möglich über das Portal Versicherungsbescheinigungen anzufordern sowie schnell und einfach Ihre persönlichen Daten wie Adresse oder Bankverbindung zu ändern."},
"address": "http://www.lvm.de/personalausweis",
"homepage": "http://www.lvm.de/",
"phone": "+49 251 702-0",
"email": "info@lvm.de",
"postalAddress": "LVM Versicherung<br/>48126 Münster",
"category": "insurance",
"tcTokenUrlInfo" : "Registration required",
"subjectUrls": ["https://www.lvm.de"]
},
{
"exclude": ["ios"],
"shortName": {"" : "Mentana-Claimsoft AG - Registrierung beim De-Mail Dienst"},
"address": "https://www.fp-demail.de/",
"homepage": "https://www.fp-demail.de/",
"phone": "+49 800-6368262",
"email": "de-mail.info@mentana.de",
"postalAddress": "Mentana-Claimsoft GmbH<br/>Trebuser-Str. 47 Haus 1<br/>D-15517 Fürstenwalde",
"category": "other",
"tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
"subjectUrls": ["https://www.fp-demail.de"]
},
{
"shortName": {"" : "OpenPGP-eID"},
"longDescription": {"": "Durch die Verschlüsselung Ihrer Nachrichten mittels OpenPGP ist die Vertraulichkeit Ihrer Information gewährleistet. Aber kann ein Empfänger der Nachricht sicher sein, dass der Absender der ist, der er vorgibt zu sein? Die Antwortet lautet: Nein. Abhilfe schafft die Beglaubigung Ihres OpenPGP-Schlüssels durch eine Signatur. Sie benötigen hierfür einen Personalausweis bzw. elektronischen Aufenthaltstitel mit aktivierter Online-Ausweisfunktion. Diesen Dienst stellen wir im Auftrag des Bundesamtes für Sicherheit in der Informationstechnik (BSI) zur Verfügung."},
"address": "https://pgp.governikus-eid.de/pgp/",
"homepage": "https://www.governikus.de/",
"phone": "+49 421 204 95-0",
"email": "kontakt@governikus.com",
"postalAddress": "Governikus GmbH & Co. KG<br/>Am Fallturm 9<br/>28359 Bremen",
"category": "other",
"tcTokenUrl" : "https://pgp.governikus-eid.de/pgp/EIDRequest",
"subjectUrls": ["https://pgp.governikus-eid.de"]
},
{
"shortName": {"" : "Techniker Krankenkasse"},
"longDescription": {"": "Die Online-Ausweisfunktion des Personalausweises ermöglicht Ihnen die schnelle und sichere Registrierung am Kundenportal \"Meine TK\". Damit können Sie online verbindlich Anträge stellen und Ihre Unterlagen anfordern (z. B. eine neue Versichertenkarte). Außerdem lassen sich persönliche Daten wie Kontoverbindung oder Adresse selbstständig ändern und verwalten. Wenn Sie \"Meine TK\" mit der Online-Ausweisfunktion nutzen, sparen Sie Zeit und Aufwand."},
"address": "https://www.tk.de/tk/118032",
"homepage": "https://www.tk.de/",
"phone": "+49 800 - 285 85 85",
"email": "service@tk.de",
"postalAddress": "Techniker Krankenkasse<br/>Bramfelder Straße 140<br/>22305 Hamburg",
"category": "insurance",
"tcTokenUrlInfo" : "Registration required",
"subjectUrls": ["https://www.tk.de"]
},
{
"exclude": ["ios"],
"shortName": {"" : "Schufa Auskunftsportal „Meine SCHUFA“"},
"longDescription": {"": "Wenn Sie Ihre Bonität gegenüber Dritten z. B. für einen Mietvertrag, belegen müssen, benötigen Sie dazu in der Regel eine SCHUFA-Auskunft. Mit der Online-Ausweisfunktion können Sie sich einfach und sicher am Kundenportal „MeineSCHUFA“ registrieren. Ohne weitere Verzögerungen haben Sie nach Anmeldung am Portal die Möglichkeit Ihre Schufa-Auskunft direkt online abzurufen oder auf dem Postweg Ihren Geschäftspartnern zukommen zu lassen. Der Personalausweis erspart Ihnen hierbei unnötige Wartezeit und gewährleistet dennoch eine verlässliche Identifizierung."},
"address": "https://www.meineschufa.de/index.php?site=30_2_1_pa#tabNPA",
"homepage": "https://www.meineschufa.de",
"phone": "+49 611 92780",
"email": "meineSCHUFA@SCHUFA.de",
"postalAddress": "SCHUFA Holding AG<br/>Postfach 10 25 66<br/>44725 Bochum",
"category": "citizen",
"tcTokenUrl" : "https://www.meineschufa.de/eID-Service-Connector-V2/createSamlRequest/Reg",
"subjectUrls": ["https://www.meineschufa.de"]
},
{
"shortName": {"" : "Selbstauskunft - „Meine Daten einsehen“"},
"longDescription": {"": "Die AusweisApp2 verfügt über die Funktion \"Meine Daten einsehen\". Mit dieser Funktion können die auf dem Personalausweis bzw. dem elektronischen Aufenthaltstitel gespeicherten Daten ausgelesen und angezeigt werden.<br/>Sobald Sie die AusweisApp2 gestartet und ein geeignetes Kartenlesegerät angeschlossen haben, können Sie diese Funktion unter dem Menüpunkt \"Ausweisen\" aufrufen. Über voreingestellte Checkboxen können Sie steuern, ob Sie alle gespeicherten Daten oder nur spezielle Daten auslesen möchten.<br/>Nach Ihrer PIN-Eingabe und erfolgreicher Datenübertragung werden die von Ihnen festgelegten Daten in der AusweisApp2 dargestellt.<br/>Bitte beachten Sie, dass Sie für diesen Vorgang eine Internetverbindung benötigen. Dies hat folgenden Hintergrund: Für jedes Auslesen der Daten aus dem Personalausweis oder dem elektronischen Aufenthaltstitel muss gesetzlich der Zweck des Auslesevorgangs angegeben werden. Dieser Zweck wird Ihnen auf einem speziellen Zertifikat angezeigt (Berechtigungszertifikat). Diese Zertifikate werden individuell durch die Vergabestelle für Berechtigungszertifikate beim Bundesverwaltungsamt genehmigt. Damit Sie also jederzeit genau wissen, wer zu welchem Zweck einen Auslesevorgang startet, wird eine Internetverbindung zu einem vertrauenswürdigen Authentisierungsserver aufgebaut. Die Berechtigungszertifikate dienen Ihrem Schutz!"},
"address": "https://www.ausweisapp.bund.de/ausweisapp2/ausprobieren-meine-daten-einsehen/",
"homepage": "https://www.ausweisapp.bund.de/",
"phone": "+49 1805 - 348743",
"email": "support@ausweisapp.de",
"postalAddress": "Governikus GmbH & Co. KG<br/>- im Auftrag des Bundesministeriums des Innern -<br/>Am Fallturm 9<br/>D-28359 Bremen",
"image": "Selbstauskunft.jpg",
"icon": "npa.svg",
"category": "citizen",
"tcTokenUrlInfo" : "https://www.autentapp.de/AusweisAuskunft/WebServiceRequesterServlet?mode=xml",
"subjectUrls": ["https://www.autentapp.de"]
},
{
"exclude": ["ios"],
"shortName": {"" : "Service-Portal \"Auto\" Kreis Lippe"},
"longName": {"" : "Service-Portal \"Auto\" Kreis Lippe"},
"shortDescription": {"": "Das Service-Portal bietet Online-Dienste rund um die KFZ-Zulassung."},
"longDescription": {"": "Im Service-Portal \"Auto\" können Sie Ihr Auto online abmelden. Weitere Angebote wie die komplette online KFZ-Wiederzulassung und -Zulassung sind im Aufbau."},
"address": "https://www.buergerserviceportal.nrw/krz/lkrlippe",
"homepage": "http://www.kreis-lippe.de/",
"phone": "+49 5231/62-0",
"email": "stva@kreis-lippe.de",
"postalAddress": "Kreis Lippe<br/>Felix-Fechenbach-Straße 5<br/>32756 Detmold",
"image": "KreisLippe_image.jpg",
"icon": "KreisLippe_icon.png",
"category": "citizen",
"tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
"subjectUrls": ["https://www.buergerserviceportal.nrw"]
},
{
"shortName": {"" : "SkIDentity Service"},
"longName": {"" : "SkIDentity Service"},
"longDescription": {"": "SkIDentity unterstützt die Umsetzung der Cyber-Sicherheitsstrategie der Bundesregierung und macht den elektronischen Personalausweis im Internet sehr leicht und mobil nutzbar. Der SkIDentity-Dienst bietet „Mobile eID as a Service“ und leitet bei Bedarf aus elektronischen Ausweisdokumenten kryptographisch geschützte „Cloud Identitäten“ ab, die auf beliebige Smartphones übertragen und dort sicher mobil genutzt werden können. Darüber hinaus kann auch die bislang aufwändige eID-Integration in einem komfortablen Portal erfolgen und die vertrauenswürdigen Identitäten kommen nun selbst aus einer vom Bundesamt für Sicherheit in der Informationstechnik (BSI) zertifizierten „Secure Cloud Infrastructure“."},
"address": "https://skidentity.de/service",
"homepage": "https://www.skidentity.de",
"phone": "+49 9571 604 8014",
"email": "detlef.huehnlein@ecsec.de",
"postalAddress": "ecsec GmbH<br/>Sudetenstraße 16<br/>96247 Michelau",
"category": "other",
"tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
"subjectUrls": []
},
{
"shortName": {"" : "Stadt Nürnberg: Online-Bürgerdienste Service"},
"longDescription": {"": "Die Stadt Nürnberg bietet Ihnen mit ihrem Bürgerserviceportal ,Mein.Nürnberg' erstmals die Möglichkeit, Ihre Verwaltungsangelegenheiten komplett elektronisch abzuwickeln von der Antragstellung bis zur Rückmeldung der Bescheide oder Schriftstücke in Ihren persönlichen Bereich auf dem Portal. Alle Online-Dienste der Stadt Nürnberg wurden zudem für die Nutzung mit mobilen Endgeräten optimiert.<br/>Bei immer mehr Verfahren akzeptiert die Stadtverwaltung einen Unterschriftersatz durch die Online-Ausweisfunktion.<br/>Jeder Online-Dienst der Stadt Nürnberg, der die Online-Ausweisfunktion nutzt, ist an dem Hinweis \"mit eID\" erkennbar. Derzeit sind dies z. B.:<br/>- Aufenthaltstitel beantragen<br/>- Gaststättenrechtliche Erlaubnis für den Ausschank von Alkohol beantragen<br/>- Hunde Negativzeugnis für Kampfhunde beantragen<br/>- Kfz-Halterauskunft beantragen<br/>- Melderegister Widerspruch gegen Datenübermittlung<br/>- Veranstaltung, Messe, Markt beantragen"},
"address": "http://www.nuernberg.de/internet/onlinedienste",
"homepage": "http://www.nuernberg.de/",
"phone": "+49 9 11 / 2 31-8613",
"email": "poststelle@stadt.nuernberg.de",
"postalAddress": "Amt für Organisation, Informationsverarbeitung und Zentrale Dienste<br/>E-Government-Büro<br/>Rathausplatz 2<br/>III. OG<br/>90403 Nürnberg",
"category": "citizen",
"tcTokenUrlInfo" : "Registration required",
"subjectUrls": ["https://meinkonto.nuernberg.de"]
},
{
"exclude": ["ios"],
"shortName": {"" : "Standesamt Online Mecklenburg-Vorpommern"},
"longDescription": {"": "In Mecklenburg-Vorpommern können Sie in immer mehr Kommunen Urkunden mit der Online-Ausweisfunktion beantragen:<br/>- Geburtsurkunden<br/>- Eheurkunden<br/>- Lebenspartnerschaftsurkunden<br/>- Sterbeurkunden"},
"address": "https://portal.ego-mv.de/",
"homepage": "http://www.ego-mv.de/",
"phone": "+49 3 85 77 33 47-0",
"email": "info@ego-mv.de",
"postalAddress": "Zweckverband Elektronische Verwaltung in Mecklenburg-Vorpommern (eGo-MV)<br/>Eckdrift 103<br/>19061 Schwerin",
"category": "citizen",
"tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
"subjectUrls": ["https://tbk.ego-mv.de/BuergerKontoWeb"]
},
{
"exclude": ["ios"],
"shortName": {"" : "Telekom DeMail für Privat- und Geschäftskunden"},
"address": "https://www.telekom.de/de-mail",
"homepage": "https://www.telekom.de/",
"phone": "+49 800 33 01000",
"email": "",
"postalAddress": "Telekom Deutschland GmbH<br/>Landgrabenweg 151<br/>53227 Bonn",
"category": "other",
"tcTokenUrlInfo" : "Registration required",
"subjectUrls": ["https://www.de-mail.t-online.de"]
},
{
"exclude": ["ios"],
"shortName": {"" : "T-Systems DeMail für Großkunden"},
"address": "https://www.t-systems.de/de-mail",
"homepage": "https://www.t-systems.de/",
"phone": "+49 69 20060 - 0",
"email": "de-mail@t-systems.com",
"postalAddress": "T-Systems International GmbH<br/>Hahnstraße 43d<br/>60528 Frankfurt am Main",
"category": "other",
"tcTokenUrlInfo" : "Registration required",
"subjectUrls": ["https://www.de-mail.t-systems.de"]
},
{
"exclude": ["ios"],
"shortName": {"" : "Urkundenservice Köln"},
"longDescription": {"": "Bei der Stadt Köln können Sie mit der Online-Ausweisfunktion folgende Urkunden beantragen:<br/>- Geburtsurkunden<br/>- Eheurkunden<br/>- Lebenspartnerschaftsurkunden<br/>- Sterbeurkunden<br/>Dabei werden die Adressatenangaben in den Online-Formularen automatisch befüllt."},
"address": "http://www.stadt-koeln.de/service/produkt/urkundenservice-des-standesamtes",
"homepage": "http://www.stadt-koeln.de/",
"phone": "+49 221 / 221-26530",
"email": "standesamt@stadt-koeln.de",
"postalAddress": "Gülichplatz 1-3<br/>50667 Köln",
"category": "citizen",
"tcTokenUrl" : "https://ea.stadt-koeln.de/Gastzugang/EIDServiceProvider/Request.ashx?appID=7",
"subjectUrls": ["https://ea.stadt-koeln.de"]
},
{
"exclude": ["ios"],
"shortName": {"" : "Virtuelles Rathaus Stadt Dortmund"},
"longDescription": {"": "Sie wollen städtische Dienstleistungen in Anspruch nehmen, sich zunächst nur informieren oder Sie suchen bereits ein bestimmtes Formular?<br/>Wir haben für Sie ein umfassendes Informationsangebot über Produkte und Leistungen (Services) der Stadt Dortmund gegliedert nach Themen und der Behördenstruktur bereitgestellt."},
"address": "https://www.domap.de/wps/portal/dortmund/login",
"homepage": "https://www.domap.de/",
"phone": "+49 231 / 50-25650",
"email": "domap-feedback@stadtdo.de",
"postalAddress": "Stadt Dortmund<br/>Dortmunder Systemhaus<br/>Deggingstraße 42<br/>44122 Dortmund",
"category": "citizen",
"tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.",
"subjectUrls": ["https://rathaus.dortmund.de"]
},
{
"exclude": ["ios"],
"shortName": {"" : "Vollstreckungsportal"},
"longDescription": {"": "Herzlich willkommen auf dem Gemeinsamen Vollstreckungsportal der Länder."},
"address": "https://www.vollstreckungsportal.de/auskunft/priv/anmelden.jsf?type=npa",
"homepage": "https://www.vollstreckungsportal.de/",
"phone": "",
"email": "bundesportal@ag-hagen.nrw.de",
"postalAddress": "Land Nordrhein-Westfalen<br/>vertreten durch das Justizministerium<br/>Martin-Luther-Platz 40<br/>40212 Düsseldorf",
"category": "citizen",
"tcTokenUrlInfo" : "Registration required.",
"subjectUrls": ["https://www.vollstreckungsportal.de"]
}
]
}

View File

@ -1,123 +0,0 @@
{
"IssueDate": "2015-11-24T12:00:00+1:00",
"SupportedDevices":
[
{
"ReaderType": "REINER_cyberJack_RFID_komfort",
"VendorId": "0x0C4B",
"ProductId": "0x0501",
"Name": "REINER SCT cyberJack RFID komfort",
"Drivers":
[
{
"Platforms": ["WV_WINDOWS7", "WV_WINDOWS8", "WV_WINDOWS8_1", "WV_WINDOWS10"],
"URL": "https://appl.governikus-asp.de/ausweisapp2/driver/bc_7_2_3.exe"
},
{
"Platforms": ["MV_10_9", "MV_10_10"],
"URL": "https://appl.governikus-asp.de/ausweisapp2/driver/pcsc-cyberjack_3.99.5final.SP07-universal-signed.pkg"
},
{
"Platforms": ["MV_10_11", "MV_10_12"],
"URL": "https://appl.governikus-asp.de/ausweisapp2/driver/01_pcsc-cyberjack_3.99.5final.SP08-universal-osx10.11-signed.pkg"
},
{
"Platforms": ["LINUX"],
"URL": "https://www.reiner-sct.com/support/download/treiber-und-software/cyberjack/rfid-komfort-linux.html"
}
]
},
{
"ReaderType": "REINER_cyberJack_RFID_standard",
"VendorId": "0x0C4B",
"ProductId": "0x0500",
"Name": "REINER SCT cyberJack RFID standard",
"Drivers":
[
{
"Platforms": ["WV_WINDOWS7", "WV_WINDOWS8", "WV_WINDOWS8_1", "WV_WINDOWS10"],
"URL": "https://appl.governikus-asp.de/ausweisapp2/driver/bc_7_2_3.exe"
},
{
"Platforms": ["MV_10_9", "MV_10_10"],
"URL": "https://appl.governikus-asp.de/ausweisapp2/driver/pcsc-cyberjack_3.99.5final.SP07-universal-signed.pkg"
},
{
"Platforms": ["MV_10_11", "MV_10_12"],
"URL": "https://appl.governikus-asp.de/ausweisapp2/driver/01_pcsc-cyberjack_3.99.5final.SP08-universal-osx10.11-signed.pkg"
},
{
"Platforms": ["LINUX"],
"URL": "https://www.reiner-sct.com/support/download/treiber-und-software/cyberjack/rfid-standard-linux.html"
}
]
},
{
"ReaderType": "REINER_cyberJack_RFID_basis",
"VendorId": "0x0C4B",
"ProductId": "0x9102",
"Name": "REINER SCT cyberJack RFID basis",
"Drivers":
[
{
"Platforms": ["WV_WINDOWS7", "WV_WINDOWS8", "WV_WINDOWS8_1", "WV_WINDOWS10"],
"URL": "https://appl.governikus-asp.de/ausweisapp2/driver/01_cJRFIDbasisIFD.exe"
},
{
"Platforms": ["MV_10_9", "MV_10_10", "MV_10_11", "MV_10_12"],
"URL": "https://appl.governikus-asp.de/ausweisapp2/driver/ifd-ccid-1.4.8-universal-signed.pkg"
},
{
"Platforms": ["LINUX"],
"URL": "https://www.reiner-sct.com/support/download/treiber-und-software/cyberjack/rfid-basis-linux.html"
}
]
},
{
"ReaderType": "SCM_SDI011",
"VendorId": "0x04E6",
"ProductId": "0x512B",
"Name": "SDI011 Contactless Reader",
"Drivers":
[
{
"Platforms": ["WV_WINDOWS7", "WV_WINDOWS8", "WV_WINDOWS8_1", "WV_WINDOWS10"],
"URL": "https://appl.governikus-asp.de/ausweisapp2/driver/SDI011_win_installer_V1.01.zip"
},
{
"Platforms": ["MV_10_9", "MV_10_10", "MV_10_11", "MV_10_12"],
"URL": "https://appl.governikus-asp.de/ausweisapp2/driver/SDI011_mac_V5.0.18.zip"
},
{
"Platforms": ["LINUX"],
"URL": "http://support.identive-group.com/npa_downloads.php"
}
]
},
{
"ReaderType": "SCM_SCL011_Contactless_Reader",
"VendorId": "0x04E6",
"ProductId": "0x5292",
"Name": "SCL01x Contactless Reader",
"Drivers":
[
{
"Platforms": ["WV_WINDOWS7", "WV_WINDOWS8", "WV_WINDOWS8_1", "WV_WINDOWS10"],
"URL": "https://appl.governikus-asp.de/ausweisapp2/driver/SCL011_win_installer_V1.01.zip"
},
{
"Platforms": ["MV_10_9", "MV_10_10", "MV_10_11", "MV_10_12"],
"URL": "https://appl.governikus-asp.de/ausweisapp2/driver/SCL011_V2.09_mac.zip"
},
{
"Platforms": ["LINUX"],
"URL": "http://support.identive-group.com/npa_downloads.php"
}
]
}
]
}

View File

@ -1,28 +0,0 @@
#!/bin/bash
root=$(hg root)
revs=$(hg log -r "$HG_NODE:tip" --template '{rev} ') #Intentional space after {rev}
builddir=$root/build
rc=0
for rev in $revs
do
hg update -C -r $rev > /dev/null
rm -rf $builddir
mkdir $builddir
cd $builddir
cmake -DENABLE_DVCS=false -Dtools.only=true $root > /dev/null
make format > /dev/null
cd $root
STATUS=$(hg status | wc -c)
if [ "$STATUS" != "0" ]; then
desc=$(hg log -r $rev --template '{firstline(desc)}')
echo "Changeset $rev is not formatted correctly: $desc"
rc=-1
break
fi
done
rm -rf $builddir
hg update -C null > /dev/null
exit $rc

View File

@ -1,11 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="14px" height="32px" viewBox="0 0 14 32" enable-background="new 0 0 14 32" xml:space="preserve">
width="14px" height="32px" viewBox="0 0 14 32" xml:space="preserve">
<path display="none" fill="#3D3D3D" d="M23,15v8H9V9h13V8H8v16h16v-9H23z"/>
<path display="none" fill="#3D3D3D" d="M26.496,9.577l-2.178-2.172l-8.646,8.727l-3.014-3.051l-2.167,2.182l5.164,5.176
L26.496,9.577z"/>
<path display="none" fill="#3D3D3D" d="M23,9v14H9V9H23 M24,8H8v16h16V8.039V8z"/>
<path opacity="0.3" fill="#FFFFFF" enable-background="new " d="M10.895,8.933l-4.108,7.025l4.095,6.983l-2.979-0.008L4,15.958
<path opacity="0.3" fill="#FFFFFF" d="M10.895,8.933l-4.108,7.025l4.095,6.983l-2.979-0.008L4,15.958
L7.934,8.92L10.895,8.933z"/>
</svg>

Before

Width:  |  Height:  |  Size: 821 B

After

Width:  |  Height:  |  Size: 680 B

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="14px" height="32px" viewBox="0 0 14 32" enable-background="new 0 0 14 32" xml:space="preserve">
width="70px" height="160px" viewBox="0 0 14 32" enable-background="new 0 0 14 32" xml:space="preserve">
<path display="none" fill="#3D3D3D" d="M23,15v8H9V9h13V8H8v16h16v-9H23z"/>
<path display="none" fill="#3D3D3D" d="M26.496,9.577l-2.178-2.172l-8.645,8.727l-3.014-3.051l-2.167,2.182l5.164,5.176
L26.496,9.577z"/>

Before

Width:  |  Height:  |  Size: 775 B

After

Width:  |  Height:  |  Size: 776 B

View File

@ -1,11 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="14px" height="32px" viewBox="0 0 14 32" enable-background="new 0 0 14 32" xml:space="preserve">
width="14px" height="32px" viewBox="0 0 14 32" xml:space="preserve">
<path display="none" fill="#3D3D3D" d="M23,15v8H9V9h13V8H8v16h16v-9H23z"/>
<path display="none" fill="#3D3D3D" d="M26.496,9.577l-2.178-2.172l-8.646,8.727l-3.014-3.051l-2.167,2.182l5.164,5.176
L26.496,9.577z"/>
<path display="none" fill="#3D3D3D" d="M23,9v14H9V9H23 M24,8H8v16h16V8.039V8z"/>
<path opacity="0.3" fill="#FFFFFF" enable-background="new " d="M3.106,22.928l4.108-7.025L3.12,8.92l2.979,0.008L10,15.903
<path opacity="0.3" fill="#FFFFFF" d="M3.106,22.928l4.108-7.025L3.12,8.92l2.979,0.008L10,15.903
l-3.933,7.039L3.106,22.928z"/>
</svg>

Before

Width:  |  Height:  |  Size: 820 B

After

Width:  |  Height:  |  Size: 679 B

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="96px" height="96px" viewBox="0 0 840 840" >
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="96" height="96" viewBox="0 0 840 840" >
<path d="M95,250 c0,0 0,-100 100,-100 h450 c0,0 100,0 100,100 v300 c0,0 0,100 -100,100 h-450 c0,0 -100,0 -100,-100 Z
M210,295 c0,0 0,20 20,20 h390 c0,0 20,0 20,-20 v-5 c0,0 0,-20 -20,-20 h-390 c0,0 -20,0 -20,20 Z
M210,405 c0,0 0,20 20,20 h210 c0,0 20,0 20,-20 v-5 c0,0 0,-20 -20,-20 h-210 c0,0 -20,0 -20,20 Z

Before

Width:  |  Height:  |  Size: 693 B

After

Width:  |  Height:  |  Size: 689 B

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="96" height="96" viewBox="-1 -1 34 34">
<path d="M 22.507,0 9.175,0 C 7.9,0 6.87,1.034 6.87,2.309 l 0,27.07 c 0,1.271 1.03,2.306 2.305,2.306 l 13.332,0 c 1.273,0 2.307,-1.034 2.307,-2.306 l 0,-27.07 C 24.813,1.034 23.78,0 22.507,0 Z
m 0.578,25.672 -14.486,0 0,-21.777 14.486,0 0,21.777 z
m -4.153,-23.329 -6.181,0 0,-0.674 6.182,0 -0.001,0.674 0,0 z
m 2.645,-0.308 c 0,0.326 -0.266,0.59 -0.591,0.59 -0.326,0 -0.591,-0.265 -0.591,-0.59 0,-0.325 0.265,-0.59 0.591,-0.59 0.326,-0.001 0.591,0.264 0.591,0.59 z
m -2.922,27.19 -5.629,0 0,-1.732 5.629,0 0,1.732 z"
style="fill: #8e8e93;" />
</svg>

After

Width:  |  Height:  |  Size: 760 B

View File

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="138" height="138" viewBox="-1 -1 34 34">
<defs>
<g id="gear" fill="#8e8e93">
<path d="M183.5126953,183.3852539l-8.5625,8.5615234c-2.1396484,2.1386719-5.6181641,2.1396484-7.7597656,0.0009766
l-3.1816406-3.1826172c-2.5058594,1.3637695-5.1445313,2.4555664-7.8857422,3.2636719v4.5029297
c0,1.465332-0.5703125,2.84375-1.6064453,3.8798828s-2.4150391,1.6064453-3.8798828,1.6074219l-12.109375-0.0009766
c-1.4648438,0-2.8427734-0.5703125-3.8789063-1.6064453c-1.0351563-1.0371094-1.6064453-2.4150391-1.6064453-3.8798828v-4.5048828
c-2.7412109-0.8066406-5.3798828-1.8979492-7.8857422-3.2626953l-3.1816406,3.1826172
c-2.140625,2.1396484-5.6210938,2.1401367-7.7597656,0.0009766l-8.5625-8.5625
c-1.0351563-1.0351563-1.6064453-2.4140625-1.6064453-3.8789063c-0.0009766-1.4658203,0.5703125-2.84375,1.6064453-3.8798828
l3.1835938-3.1831055c-1.3642578-2.5053711-2.4550781-5.1435547-3.2636719-7.8862305l-4.5039063,0.0009766
c-3.0253906,0-5.4863281-2.4609375-5.4863281-5.4863281v-12.1083984c0-1.4648438,0.5703125-2.8432617,1.6064453-3.8798828
c1.0361328-1.0361328,2.4140625-1.6064453,3.8798828-1.6074219l4.5029297,0.0009766
c0.8085938-2.7421875,1.9003906-5.3808594,3.2646484-7.8867188l-3.1835938-3.1816406
c-2.1386719-2.1391602-2.1386719-5.6201172,0-7.7587891l8.5625-8.5625c2.1396484-2.1391602,5.6201172-2.1386719,7.7597656,0
l3.1816406,3.1821289c2.5058594-1.3637695,5.1445313-2.4545898,7.8857422-3.2636719v-4.503418
c0-1.4648438,0.5703125-2.8427734,1.6064453-3.8779297c1.0361328-1.0366211,2.4140625-1.6079102,3.8798828-1.6083984
l12.1083984,0.0009766c1.4658203-0.0009766,2.8427734,0.5693359,3.8798828,1.6064453
c1.0361328,1.0361328,1.6064453,2.4140625,1.6064453,3.8789063v4.5039063
c2.7402344,0.8076172,5.3789063,1.9003906,7.8857422,3.2641602l3.1816406-3.1831055
c2.1396484-2.1386719,5.6201172-2.1386719,7.7597656-0.0009766l8.5615234,8.5634766
c1.0361328,1.0351563,1.6074219,2.4130859,1.6074219,3.8793945s-0.5693359,2.8427734-1.6064453,3.878418l-3.1826172,3.1835938
c1.3642578,2.5058594,2.4560547,5.1435547,3.2636719,7.8847656l4.5029297,0.0009766
c3.0253906-0.0004883,5.4863281,2.4619141,5.4863281,5.4858398l0.0009766,12.1088867
c0,1.465332-0.5703125,2.8427734-1.6074219,3.8793945c-1.0361328,1.0366211-2.4130859,1.6069336-3.8789063,1.6064453
l-4.5039063,0.0004883c-0.8085938,2.7412109-1.9003906,5.3779297-3.2636719,7.8857422l3.1826172,3.1826172
C185.6513672,177.7651367,185.6503906,181.2460938,183.5126953,183.3852539z M168.4873047,183.4428711l6.5200195-6.5200195
l-5.4921875-5.4916992l1.2353516-1.9614258c1.859375-2.9506836,3.1923828-6.1743164,3.965332-9.5825195l0.5126953-2.2592773
L183,157.6274414l0.0004883-9.2202148l-7.7700195,0.0004883l-0.5141602-2.2612305
c-0.7734375-3.4086914-2.1074219-6.6333008-3.9648438-9.5820313l-1.2353516-1.9604492l5.4912109-5.4921875l-6.5200195-6.5200195
l-5.4916992,5.4921875l-1.9609375-1.2348633c-2.949707-1.8579102-6.1748047-3.1933594-9.5820313-3.9658203l-2.2597656-0.5136719
v-7.7700195l-9.2207031-0.0004883v7.7705078l-2.2607422,0.5131836c-3.409668,0.7734375-6.6337891,2.1083984-9.5820313,3.965332
l-1.9609375,1.2353516l-5.4916992-5.4921875l-6.5200195,6.5205078l5.4926758,5.4921875l-1.2358398,1.9609375
c-1.8574219,2.9477539-3.1914063,6.1713867-3.9648438,9.5810547l-0.5131836,2.2617188l-7.7714844-0.0009766v9.2211914
l7.7714844-0.0004883l0.5131836,2.2602539c0.7744141,3.4101563,2.1074219,6.6337891,3.9648438,9.581543l1.2348633,1.9619141
l-5.4926758,5.4912109l6.5209961,6.5205078l5.4916992-5.4921875l1.9619141,1.2353516
c2.9492188,1.8569336,6.1723633,3.1914063,9.5800781,3.965332l2.2617188,0.5126953v7.7714844l9.2207031-0.0004883v-7.7705078
l2.2607422-0.512207c3.4086914-0.7744141,6.6318359-2.1083984,9.5810547-3.9663086l1.9609375-1.2353516L168.4873047,183.4428711z" />
<path d="M160.6000977,136.9990234c-8.8334961-8.8320313-23.2026367-8.8320313-32.0351563,0.0009766
c-8.8325195,8.831543-8.8325195,23.2026367,0,32.0341797c8.8325195,8.8325195,23.2026367,8.8330078,32.034668,0.0004883
C169.4316406,160.2026367,169.4326172,145.831543,160.6000977,136.9990234z M144.4072266,166.7856445
c-7.5419922,0-13.6557617-6.112793-13.6557617-13.6542969c0-7.5424805,6.1137695-13.6552734,13.6557617-13.6552734
c7.5424805,0,13.6552734,6.112793,13.6552734,13.6552734C158.0625,160.6728516,151.949707,166.7856445,144.4072266,166.7856445z" />
</g>
</defs>
<path d="M 22.507,0 9.175,0 C 7.9,0 6.87,1.034 6.87,2.309 l 0,27.07 c 0,1.271 1.03,2.306 2.305,2.306 l 13.332,0 c 1.273,0 2.307,-1.034 2.307,-2.306 l 0,-27.07 C 24.813,1.034 23.78,0 22.507,0 Z
m 0.578,25.672 -14.486,0 0,-21.777 14.486,0 0,21.777 z
m -4.153,-23.329 -6.181,0 0,-0.674 6.182,0 -0.001,0.674 0,0 z
m 2.645,-0.308 c 0,0.326 -0.266,0.59 -0.591,0.59 -0.326,0 -0.591,-0.265 -0.591,-0.59 0,-0.325 0.265,-0.59 0.591,-0.59 0.326,-0.001 0.591,0.264 0.591,0.59 z
m -2.922,27.19 -5.629,0 0,-1.732 5.629,0 0,1.732 z"
style="fill: #8e8e93;" />
<use xlink:href="#gear" x="-18" y="-50" transform="scale(0.125,0.125)"/>
</svg>

After

Width:  |  Height:  |  Size: 5.5 KiB

View File

@ -1,7 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="96" height="96" viewBox="0 0 120 120" >
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="96" height="96" viewBox="0 0 140 140" >
<g fill="#8e8e93">
<path d="M 37 25 C 78 -5 93 40 70 55 C 62 62 60 71 60 80" style="fill: none; stroke-width: 20; stroke: #8e8e93;" />
<circle cx="60" cy="100" r="14"/>
<path d="M 70 10 a 60 60 0 0 0 0 120 a 60 60 0 0 0 0 -120 z
M 70 20 a 50 50 0 0 1 0 100 a 50 50 0 0 1 0 -100 z" />
<path d="M 51 55 C 60 15 100 40 80 60 C 65 70 70 80 70 85" style="fill: none; stroke-width: 10; stroke: #8e8e93;" />
<circle cx="70" cy="100" r="6"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 349 B

After

Width:  |  Height:  |  Size: 481 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 661 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="512px" height="512px" viewBox="90 90 332 332">
<path fill="#68B633" stroke="#68B633" stroke-linejoin="round" stroke-width="10" d="M160 260 l20 -20 l40 60 l100 -120 l20 20 l-120 130 z" />
</svg>

After

Width:  |  Height:  |  Size: 355 B

View File

@ -1,9 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="512px" height="512px" viewBox="90 90 332 332">
<path fill="#68B633" d="M196.128,280.614c7.912,21.703,20.335,37.694,38.703,51.545c9.032,6.81,20.226-0.987,23.568-9.589
c17.133-44.117,38.522-86.035,63.694-126.099c11.04-17.578-16.732-33.666-27.71-16.194c-26.665,42.45-48.79,87.045-66.927,133.759
c7.857-3.196,15.714-6.393,23.568-9.588c-11.286-8.508-19.14-19.15-23.955-32.362C220.042,252.808,189.026,261.13,196.128,280.614
L196.128,280.614z"/>
<path fill="#FFFFFF" d="M 256 94 a 162 162 0 0 1 0 324 a 162 162 0 0 1 0 -324 z
M 256 124 a 132 132 0 0 0 0 264 a 132 132 0 0 0 0 -264 z" />
<path fill="#68B633" stroke="#68B633" stroke-linejoin="round" stroke-width="10" d="M160 260 l20 -20 l40 60 l100 -120 l20 20 l-120 130 z" />
</svg>

Before

Width:  |  Height:  |  Size: 854 B

After

Width:  |  Height:  |  Size: 525 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Some files were not shown because too many files have changed in this diff Show More