From 3d5cafbe1727a95a54eb4a65d98d6d79ec46f0c8 Mon Sep 17 00:00:00 2001 From: Sarper Akdemir Date: Mon, 2 Oct 2023 15:56:04 +0300 Subject: tdf#157518: external: bundle zxcvbn-c Integrates zxcvbn-c as a static library. zxcvbn-c is C/C++ implementation of https://dropbox.tech/security/zxcvbn-realistic-password-strength-estimation. This is the first step for introducing a password strength meter. Some example projects that utilize zxcvbn-c are KeepassXC, monero-gui. ExternalProject_zxcvbn-c takes care of the dictionary node generation bits resulting in the dict-src.h Then StaticLibrary_zxcvbn-c depends on ExternalProject_zxcvbn-c and uses the generated bits and the zxcvbn-c source to compile the library. It should be possible to get rid of dictionary node generation bit with a patch that includes a constant dict-src.h that's what monero-gui does for example. But this might also obfuscate what dict-src.h is. Right now the dictionary that is included with zxcvbn-c only targets English, so that might be something to improve upon. Change-Id: Ic2b0a558cff341114d69fbdc257979a28bf5c865 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/157565 Reviewed-by: Michael Stahl Tested-by: Jenkins Reviewed-by: Sarper Akdemir --- external/Module_external.mk | 1 + external/zxcvbn-c/ExternalProject_zxcvbn-c.mk | 35 ++++++++++++++++++++++ external/zxcvbn-c/Makefile | 14 +++++++++ external/zxcvbn-c/Module_zxcvbn-c.mk | 18 +++++++++++ external/zxcvbn-c/README.md | 3 ++ external/zxcvbn-c/StaticLibrary_zxcvbn-c.mk | 26 ++++++++++++++++ external/zxcvbn-c/UnpackedTarball_zxcvbn-c.mk | 18 +++++++++++ .../zxcvbn-c/zxcvbn-c-2.5-do-not-use-stdafx.patch | 13 ++++++++ 8 files changed, 128 insertions(+) create mode 100644 external/zxcvbn-c/ExternalProject_zxcvbn-c.mk create mode 100644 external/zxcvbn-c/Makefile create mode 100644 external/zxcvbn-c/Module_zxcvbn-c.mk create mode 100644 external/zxcvbn-c/README.md create mode 100644 external/zxcvbn-c/StaticLibrary_zxcvbn-c.mk create mode 100644 external/zxcvbn-c/UnpackedTarball_zxcvbn-c.mk create mode 100644 external/zxcvbn-c/zxcvbn-c-2.5-do-not-use-stdafx.patch (limited to 'external') diff --git a/external/Module_external.mk b/external/Module_external.mk index 366509f8960e..2b2cd99ff399 100644 --- a/external/Module_external.mk +++ b/external/Module_external.mk @@ -90,6 +90,7 @@ $(eval $(call gb_Module_add_moduledirs,external,\ $(call gb_Helper_optional,POSTGRESQL,postgresql) \ $(call gb_Helper_optional,PYTHON,python3) \ $(call gb_Helper_optional,QXP,libqxp) \ + zxcvbn-c \ $(call gb_Helper_optional,ZXING,zxing) \ $(call gb_Helper_optional,REDLAND,redland) \ $(call gb_Helper_optional,REVENGE,librevenge) \ diff --git a/external/zxcvbn-c/ExternalProject_zxcvbn-c.mk b/external/zxcvbn-c/ExternalProject_zxcvbn-c.mk new file mode 100644 index 000000000000..51b60a9c2ecb --- /dev/null +++ b/external/zxcvbn-c/ExternalProject_zxcvbn-c.mk @@ -0,0 +1,35 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t; fill-column: 100 -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +$(eval $(call gb_ExternalProject_ExternalProject,zxcvbn-c)) + +$(eval $(call gb_ExternalProject_register_targets,zxcvbn-c,\ + generate-dictionary-nodes \ +)) + +$(call gb_ExternalProject_get_state_target,zxcvbn-c,generate-dictionary-nodes): \ + $(call gb_Executable_get_runtime_dependencies,gcc-wrapper) \ + $(call gb_Executable_get_runtime_dependencies,g++-wrapper) \ + $(if $(CROSS_COMPILING),$(call gb_ExternalProject_get_target_for_build,zxcvbn-c)) + $(call gb_Trace_StartRange,zxcvbn-c,EXTERNAL) + $(call gb_ExternalProject_run,generate-dictionary-nodes,\ + $(if $(CROSS_COMPILING),\ + cp $(WORKDIR_FOR_BUILD)/UnpackedTarball/zxcvbn-c/dict-src.h \ + $(WORKDIR)/UnpackedTarball/zxcvbn-c/dict-src.h \ + ,\ + $(MAKE) dict-src.h \ + AR="$(gb_AR)" \ + CFLAGS="$(gb_CFLAGS)" \ + CXXFLAGS="$(gb_CXXFLAGS)" \ + $(if $(filter MSC,$(COM)),$(gb_AUTOCONF_WRAPPERS) )\ + )\ + ) + $(call gb_Trace_EndRange,zxcvbn-c,EXTERNAL) + +# vim: set noet sw=4 ts=4: diff --git a/external/zxcvbn-c/Makefile b/external/zxcvbn-c/Makefile new file mode 100644 index 000000000000..6427d44e3790 --- /dev/null +++ b/external/zxcvbn-c/Makefile @@ -0,0 +1,14 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t; fill-column: 100 -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +module_directory:=$(dir $(realpath $(firstword $(MAKEFILE_LIST)))) + +include $(module_directory)/../../solenv/gbuild/partial_build.mk + +# vim: set noet sw=4 ts=4: diff --git a/external/zxcvbn-c/Module_zxcvbn-c.mk b/external/zxcvbn-c/Module_zxcvbn-c.mk new file mode 100644 index 000000000000..14d5dfbe6abc --- /dev/null +++ b/external/zxcvbn-c/Module_zxcvbn-c.mk @@ -0,0 +1,18 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t; fill-column: 100 -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +$(eval $(call gb_Module_Module,zxcvbn-c)) + +$(eval $(call gb_Module_add_targets,zxcvbn-c,\ + UnpackedTarball_zxcvbn-c \ + ExternalProject_zxcvbn-c \ + StaticLibrary_zxcvbn-c \ +)) + +# vim: set noet sw=4 ts=4: diff --git a/external/zxcvbn-c/README.md b/external/zxcvbn-c/README.md new file mode 100644 index 000000000000..6193c7307e85 --- /dev/null +++ b/external/zxcvbn-c/README.md @@ -0,0 +1,3 @@ +C/C++ version of the zxcvbn password strength estimator. + +zxcvbn-c is available from [ https://github.com/tsyrogit/zxcvbn-c ]. diff --git a/external/zxcvbn-c/StaticLibrary_zxcvbn-c.mk b/external/zxcvbn-c/StaticLibrary_zxcvbn-c.mk new file mode 100644 index 000000000000..9748ef850c55 --- /dev/null +++ b/external/zxcvbn-c/StaticLibrary_zxcvbn-c.mk @@ -0,0 +1,26 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t; fill-column: 100 -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +$(eval $(call gb_StaticLibrary_StaticLibrary,zxcvbn-c)) + +$(eval $(call gb_StaticLibrary_use_unpacked,zxcvbn-c,zxcvbn-c)) + +# zxcvbn-c static library depends on generation of dictionary nodes resulting in dict-src.h +$(eval $(call gb_StaticLibrary_use_external_project,zxcvbn-c,zxcvbn-c,full)) + +$(eval $(call gb_StaticLibrary_set_include,zxcvbn-c,\ + -I$(call gb_UnpackedTarball_get_dir,zxcvbn-c)\ + $$(INCLUDE)\ +)) + +$(eval $(call gb_StaticLibrary_add_generated_cobjects,zxcvbn-c,\ + UnpackedTarball/zxcvbn-c/zxcvbn \ +)) + +# vim: set noet sw=4 ts=4: diff --git a/external/zxcvbn-c/UnpackedTarball_zxcvbn-c.mk b/external/zxcvbn-c/UnpackedTarball_zxcvbn-c.mk new file mode 100644 index 000000000000..b6eba6b8cb3a --- /dev/null +++ b/external/zxcvbn-c/UnpackedTarball_zxcvbn-c.mk @@ -0,0 +1,18 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t; fill-column: 100 -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +$(eval $(call gb_UnpackedTarball_UnpackedTarball,zxcvbn-c)) + +$(eval $(call gb_UnpackedTarball_set_tarball,zxcvbn-c,$(ZXCVBN_C_TARBALL))) + +$(eval $(call gb_UnpackedTarball_add_patches,zxcvbn-c,\ + external/zxcvbn-c/zxcvbn-c-2.5-do-not-use-stdafx.patch \ +)) + +# vim: set noet sw=4 ts=4: diff --git a/external/zxcvbn-c/zxcvbn-c-2.5-do-not-use-stdafx.patch b/external/zxcvbn-c/zxcvbn-c-2.5-do-not-use-stdafx.patch new file mode 100644 index 000000000000..1b5151995067 --- /dev/null +++ b/external/zxcvbn-c/zxcvbn-c-2.5-do-not-use-stdafx.patch @@ -0,0 +1,13 @@ +--- a/zxcvbn-c/zxcvbn.c ++++ b/zxcvbn-c/zxcvbn.c +@@ -44,11 +44,6 @@ + #endif + #endif + +-/* For pre-compiled headers under windows */ +-#ifdef _WIN32 +-#include "stdafx.h" +-#endif +- + /* Minimum number of characters in a incrementing/decrementing sequence match */ + #define MIN_SEQUENCE_LEN 3 -- cgit