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 <michael.stahl@allotropia.de>
Tested-by: Jenkins
Reviewed-by: Sarper Akdemir <sarper.akdemir.extern@allotropia.de>
This commit is contained in:
Sarper Akdemir
2023-10-02 15:56:04 +03:00
parent 9a4e4db710
commit 3d5cafbe17
13 changed files with 170 additions and 0 deletions

View File

@@ -171,6 +171,7 @@ $(WORKDIR)/download: $(BUILDDIR)/config_$(gb_Side).mk $(SRCDIR)/download.lst $(S
$(call fetch_Optional,LXML,LXML_TARBALL) \
$(call fetch_Optional,MARIADB_CONNECTOR_C,MARIADB_CONNECTOR_C_TARBALL) \
$(call fetch_Optional,MDDS,MDDS_TARBALL) \
ZXCVBN_C_TARBALL \
$(call fetch_Optional,ZXING,ZXING_TARBALL) \
$(call fetch_Optional,MDNSRESPONDER,MDNSRESPONDER_TARBALL) \
$(call fetch_Optional,MORE_FONTS,FONT_CALADEA_TARBALL) \

View File

@@ -4287,6 +4287,17 @@ endef
endif # SYSTEM_BOX2D
define gb_LinkTarget__use_zxcvbn-c
$(call gb_LinkTarget_use_unpacked,$(1),zxcvbn-c)
$(call gb_LinkTarget_set_include,$(1),\
-I$(call gb_UnpackedTarball_get_dir,zxcvbn-c)\
$$(INCLUDE) \
)
$(call gb_LinkTarget_use_static_libraries,$(1),\
zxcvbn-c \
)
endef
ifneq ($(SYSTEM_ZXING),)
define gb_LinkTarget__use_zxing

View File

@@ -640,6 +640,11 @@ ZMF_TARBALL := libzmf-0.0.2.tar.xz
# three static lines
# so that git cherry-pick
# will not run into conflicts
ZXCVBN_C_SHA256SUM := 77d6c6ecb35952a8d8ce7f736b7a2bf466275c48210e309b73782d6b7e84dffd
ZXCVBN_C_TARBALL := zxcvbn-c-2.5.tar.gz
# three static lines
# so that git cherry-pick
# will not run into conflicts
ZXING_SHA256SUM := 6d54e403592ec7a143791c6526c1baafddf4c0897bb49b1af72b70a0f0c4a3fe
ZXING_TARBALL := zxing-cpp-2.1.0.tar.gz
# three static lines

View File

@@ -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) \

View File

@@ -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:

14
external/zxcvbn-c/Makefile vendored Normal file
View File

@@ -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:

18
external/zxcvbn-c/Module_zxcvbn-c.mk vendored Normal file
View File

@@ -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:

3
external/zxcvbn-c/README.md vendored Normal file
View File

@@ -0,0 +1,3 @@
C/C++ version of the zxcvbn password strength estimator.
zxcvbn-c is available from [ https://github.com/tsyrogit/zxcvbn-c ].

View File

@@ -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:

View File

@@ -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:

View File

@@ -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

View File

@@ -1815,6 +1815,30 @@
PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.</p>
</div>
<h2>zxcvbn-c</h2>
<p>The following software may be included in this product: zxcvbn-c.</p>
<p>zxcvbn-c code is covered by the MIT license:</p>
<blockquote>
<p>Copyright (c) 2015-2017 Tony Evans </p>
<p>Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:</p>
<p>The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.</p>
<p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.</p>
</blockquote>
<h2>Dragonbox</h2>
<p>The following software may be included in this product: Dragonbox.</p>
<p>Dragonbox code is covered by the following license:</p>

View File

@@ -48,6 +48,7 @@ gb_BUILD_TOOLS = \
$(foreach executable,$(gb_BUILD_TOOLS_executables),$(call gb_Executable_get_runtime_dependencies,$(executable))) \
$(foreach executable,$(gb_BUILD_TOOLS_executables_extern),$(call gb_ExternalExecutable_get_dependencies,$(executable))) \
$(INSTROOT)/$(LIBO_URE_ETC_FOLDER)/$(call gb_Helper_get_rcfile,uno) \
$(call gb_ExternalProject_get_target_for_build,zxcvbn-c) \
endif