summaryrefslogtreecommitdiff
path: root/external
diff options
context:
space:
mode:
authorSarper Akdemir <sarper.akdemir.extern@allotropia.de>2023-10-02 15:56:04 +0300
committerSarper Akdemir <sarper.akdemir.extern@allotropia.de>2023-10-30 08:17:05 +0100
commit3d5cafbe1727a95a54eb4a65d98d6d79ec46f0c8 (patch)
tree231df57c921bdd4ad124df266cbb7ee7ad49701f /external
parent9a4e4db710137b1a7cb8e62ffa16128c7cc72177 (diff)
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>
Diffstat (limited to 'external')
-rw-r--r--external/Module_external.mk1
-rw-r--r--external/zxcvbn-c/ExternalProject_zxcvbn-c.mk35
-rw-r--r--external/zxcvbn-c/Makefile14
-rw-r--r--external/zxcvbn-c/Module_zxcvbn-c.mk18
-rw-r--r--external/zxcvbn-c/README.md3
-rw-r--r--external/zxcvbn-c/StaticLibrary_zxcvbn-c.mk26
-rw-r--r--external/zxcvbn-c/UnpackedTarball_zxcvbn-c.mk18
-rw-r--r--external/zxcvbn-c/zxcvbn-c-2.5-do-not-use-stdafx.patch13
8 files changed, 128 insertions, 0 deletions
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