История изменений
Исправление EXL, (текущая версия) :
Собственно, раз никто не знает, я решил сам собрать как wolfSSH, так и Dropbear, попробовать их, сравнить и поделиться опытом.
Во-первых, кодовая база Dropbear значительно меньше, чем wolfSSH: 2.98 MiB супротив 19.85 MiB + 380.46 KiB.
Во-вторых, сборка мне показалась проще у Dropbear, чем у wolfSSH.
$ cd dropbear
$ ./configure --host=arm-linux-gnu --disable-harden --disable-syslog --with-zlib=/opt/toolchains/motoezx --prefix=`pwd`/../dropbear_built
$ make
$ make scp
$ make install
$ cd wolfssl
$ ./autogen.sh
$ . /opt/toolchains/motoezx/setenv-a1200.sh
$ CFLAGS=-D_REENTRANT gl_cv_cc_vis_werror=no ax_cv_check_cflags___Werror=no ./configure --host=arm-linux-gnu --enable-ssh --enable-static --disable-shared --with-libz=/opt/toolchains/motoezx --prefix=`pwd`/../wolfssl_built
$ make install
$ cd wolfssh
$ ./autogen.sh
$ . /opt/toolchains/motoezx/setenv-a1200.sh
$ gl_cv_cc_vis_werror=no ax_cv_check_cflags___Werror=no ./configure --host=arm-linux-gnu --enable-scp --enable-sftp --with-wolfssl=`pwd`/../wolfssl_built --prefix=`pwd`/../wolfssh_built
$ make install
Из-за очень древнего кросс-компилятора GCC 3.3.6 в обоих случаях нужно было делать всякие странные патч-трюки. Однако, слава сишке, они оказались тривиальными.
Выложу эти патчи здесь, на всякий случай:
// Dropbear
From bcd25f9f10a65f3cca30a095c1044f80b82600c0 Mon Sep 17 00:00:00 2001
From: EXL <exlmotodev@gmail.com>
Date: Thu, 7 Jul 2022 02:44:34 +0700
Subject: [PATCH] Fix dropbear compilation for MotoEZX platform
---
default_options.h | 8 ++++----
libtommath/makefile_include.mk | 4 ++--
svr-main.c | 4 ++--
3 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/default_options.h b/default_options.h
index 536f4e7..7b06765 100644
--- a/default_options.h
+++ b/default_options.h
@@ -21,10 +21,10 @@ IMPORTANT: Some options will require "make clean" after changes */
/* Default hostkey paths - these can be specified on the command line.
* Homedir is prepended if path begins with ~/
*/
-#define DSS_PRIV_FILENAME "/etc/dropbear/dropbear_dss_host_key"
-#define RSA_PRIV_FILENAME "/etc/dropbear/dropbear_rsa_host_key"
-#define ECDSA_PRIV_FILENAME "/etc/dropbear/dropbear_ecdsa_host_key"
-#define ED25519_PRIV_FILENAME "/etc/dropbear/dropbear_ed25519_host_key"
+#define DSS_PRIV_FILENAME "/ezxlocal/dropbear/dropbear_dss_host_key"
+#define RSA_PRIV_FILENAME "/ezxlocal/dropbear/dropbear_rsa_host_key"
+#define ECDSA_PRIV_FILENAME "/ezxlocal/dropbear/dropbear_ecdsa_host_key"
+#define ED25519_PRIV_FILENAME "/ezxlocal/dropbear/dropbear_ed25519_host_key"
/* Set NON_INETD_MODE if you require daemon functionality (ie Dropbear listens
* on chosen ports and keeps accepting connections. This is the default.
diff --git a/libtommath/makefile_include.mk b/libtommath/makefile_include.mk
index 711b630..b95c9cd 100644
--- a/libtommath/makefile_include.mk
+++ b/libtommath/makefile_include.mk
@@ -48,7 +48,7 @@ else
endif
endif
-LTM_CFLAGS += -I./ -Wall -Wsign-compare -Wextra -Wshadow
+LTM_CFLAGS += -I./ -Wall -Wsign-compare -Wshadow
# renamed for Dropbear to avoid clash with oss-fuzz $SANITIZER var
ifdef LTM_SANITIZER
@@ -57,7 +57,7 @@ endif
ifndef NO_ADDTL_WARNINGS
# additional warnings
-LTM_CFLAGS += -Wdeclaration-after-statement -Wbad-function-cast -Wcast-align
+LTM_CFLAGS += -Wbad-function-cast -Wcast-align
LTM_CFLAGS += -Wstrict-prototypes -Wpointer-arith
endif
diff --git a/svr-main.c b/svr-main.c
index a9f8a57..f0d9a72 100644
--- a/svr-main.c
+++ b/svr-main.c
@@ -169,9 +169,9 @@ static void main_noinetd(int argc, char ** argv, const char* multipath) {
#if DROPBEAR_DO_REEXEC
if (multipath) {
- execfd = open(multipath, O_CLOEXEC|O_RDONLY);
+ execfd = open(multipath, O_RDONLY);
} else {
- execfd = open(argv[0], O_CLOEXEC|O_RDONLY);
+ execfd = open(argv[0], O_RDONLY);
}
if (execfd < 0) {
/* Just fallback to straight fork */
--
2.34.1
// wolfSSL
From e17fcbe474e34a170520d8410a88a6e3de47ed16 Mon Sep 17 00:00:00 2001
From: EXL <exlmotodev@gmail.com>
Date: Thu, 7 Jul 2022 01:04:25 +0700
Subject: [PATCH] Fix wolfSSL compilation for MotoEZX platform
---
wolfssl/wolfcrypt/types.h | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/wolfssl/wolfcrypt/types.h b/wolfssl/wolfcrypt/types.h
index 5fad9b1..4343fa9 100644
--- a/wolfssl/wolfcrypt/types.h
+++ b/wolfssl/wolfcrypt/types.h
@@ -793,11 +793,7 @@ decouple library dependencies with standard string, memory and so on.
#endif
#ifndef OFFSETOF
- #if defined(__clang__) || defined(__GNUC__)
- #define OFFSETOF(type, field) __builtin_offsetof(type, field)
- #else
- #define OFFSETOF(type, field) ((size_t)&(((type *)0)->field))
- #endif
+ #define OFFSETOF(type, field) ((size_t)&(((type *)0)->field))
#endif
--
2.34.1
В-третьих, размер получившихся серверов у Dropbear всего 263.2 KiB, у wolfSSH – 677.7 KiB. При этом сервачок Dropbear при запуске на конечном устройстве поддерживает всякие ED25519 из коробки, а вот с wolfSSH всё не так радужно. Да и проект мне показался очень сырым, опций кот наплакал, сам сервер лежит в папке examples и т. д
Исправление EXL, :
Собственно, раз никто не знает, я решил сам собрать как wolfSSH, так и Dropbear, попробовать их, сравнить и поделиться опытом.
Во-первых, кодовая база Dropbear значительно меньше, чем wolfSSH: 2.98 MiB супротив 19.85 MiB + 380.46 KiB.
Во-вторых, сборка мне показалась проще у Dropbear, чем у wolfSSH.
$ cd dropbear
$ ./configure --host=arm-linux-gnu --with-zlib=/opt/toolchains/motoezx --prefix=`pwd`/../dropbear_built
$ make
$ make scp
$ make install
$ cd wolfssl
$ ./autogen.sh
$ . /opt/toolchains/motoezx/setenv-a1200.sh
$ CFLAGS=-D_REENTRANT gl_cv_cc_vis_werror=no ax_cv_check_cflags___Werror=no ./configure --host=arm-linux-gnu --enable-ssh --enable-static --disable-shared --with-libz=/opt/toolchains/motoezx --prefix=`pwd`/../wolfssl_built
$ make install
$ cd wolfssh
$ ./autogen.sh
$ . /opt/toolchains/motoezx/setenv-a1200.sh
$ gl_cv_cc_vis_werror=no ax_cv_check_cflags___Werror=no ./configure --host=arm-linux-gnu --enable-scp --enable-sftp --with-wolfssl=`pwd`/../wolfssl_built --prefix=`pwd`/../wolfssh_built
$ make install
Из-за очень древнего кросс-компилятора GCC 3.3.6 в обоих случаях нужно было делать всякие странные патч-трюки. Однако, слава сишке, они оказались тривиальными.
Выложу эти патчи здесь, на всякий случай:
// Dropbear
From bcd25f9f10a65f3cca30a095c1044f80b82600c0 Mon Sep 17 00:00:00 2001
From: EXL <exlmotodev@gmail.com>
Date: Thu, 7 Jul 2022 02:44:34 +0700
Subject: [PATCH] Fix dropbear compilation for MotoEZX platform
---
default_options.h | 8 ++++----
libtommath/makefile_include.mk | 4 ++--
svr-main.c | 4 ++--
3 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/default_options.h b/default_options.h
index 536f4e7..7b06765 100644
--- a/default_options.h
+++ b/default_options.h
@@ -21,10 +21,10 @@ IMPORTANT: Some options will require "make clean" after changes */
/* Default hostkey paths - these can be specified on the command line.
* Homedir is prepended if path begins with ~/
*/
-#define DSS_PRIV_FILENAME "/etc/dropbear/dropbear_dss_host_key"
-#define RSA_PRIV_FILENAME "/etc/dropbear/dropbear_rsa_host_key"
-#define ECDSA_PRIV_FILENAME "/etc/dropbear/dropbear_ecdsa_host_key"
-#define ED25519_PRIV_FILENAME "/etc/dropbear/dropbear_ed25519_host_key"
+#define DSS_PRIV_FILENAME "/ezxlocal/dropbear/dropbear_dss_host_key"
+#define RSA_PRIV_FILENAME "/ezxlocal/dropbear/dropbear_rsa_host_key"
+#define ECDSA_PRIV_FILENAME "/ezxlocal/dropbear/dropbear_ecdsa_host_key"
+#define ED25519_PRIV_FILENAME "/ezxlocal/dropbear/dropbear_ed25519_host_key"
/* Set NON_INETD_MODE if you require daemon functionality (ie Dropbear listens
* on chosen ports and keeps accepting connections. This is the default.
diff --git a/libtommath/makefile_include.mk b/libtommath/makefile_include.mk
index 711b630..b95c9cd 100644
--- a/libtommath/makefile_include.mk
+++ b/libtommath/makefile_include.mk
@@ -48,7 +48,7 @@ else
endif
endif
-LTM_CFLAGS += -I./ -Wall -Wsign-compare -Wextra -Wshadow
+LTM_CFLAGS += -I./ -Wall -Wsign-compare -Wshadow
# renamed for Dropbear to avoid clash with oss-fuzz $SANITIZER var
ifdef LTM_SANITIZER
@@ -57,7 +57,7 @@ endif
ifndef NO_ADDTL_WARNINGS
# additional warnings
-LTM_CFLAGS += -Wdeclaration-after-statement -Wbad-function-cast -Wcast-align
+LTM_CFLAGS += -Wbad-function-cast -Wcast-align
LTM_CFLAGS += -Wstrict-prototypes -Wpointer-arith
endif
diff --git a/svr-main.c b/svr-main.c
index a9f8a57..f0d9a72 100644
--- a/svr-main.c
+++ b/svr-main.c
@@ -169,9 +169,9 @@ static void main_noinetd(int argc, char ** argv, const char* multipath) {
#if DROPBEAR_DO_REEXEC
if (multipath) {
- execfd = open(multipath, O_CLOEXEC|O_RDONLY);
+ execfd = open(multipath, O_RDONLY);
} else {
- execfd = open(argv[0], O_CLOEXEC|O_RDONLY);
+ execfd = open(argv[0], O_RDONLY);
}
if (execfd < 0) {
/* Just fallback to straight fork */
--
2.34.1
// wolfSSL
From e17fcbe474e34a170520d8410a88a6e3de47ed16 Mon Sep 17 00:00:00 2001
From: EXL <exlmotodev@gmail.com>
Date: Thu, 7 Jul 2022 01:04:25 +0700
Subject: [PATCH] Fix wolfSSL compilation for MotoEZX platform
---
wolfssl/wolfcrypt/types.h | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/wolfssl/wolfcrypt/types.h b/wolfssl/wolfcrypt/types.h
index 5fad9b1..4343fa9 100644
--- a/wolfssl/wolfcrypt/types.h
+++ b/wolfssl/wolfcrypt/types.h
@@ -793,11 +793,7 @@ decouple library dependencies with standard string, memory and so on.
#endif
#ifndef OFFSETOF
- #if defined(__clang__) || defined(__GNUC__)
- #define OFFSETOF(type, field) __builtin_offsetof(type, field)
- #else
- #define OFFSETOF(type, field) ((size_t)&(((type *)0)->field))
- #endif
+ #define OFFSETOF(type, field) ((size_t)&(((type *)0)->field))
#endif
--
2.34.1
В-третьих, размер получившихся серверов у Dropbear всего 263.2 KiB, у wolfSSH – 677.7 KiB. При этом сервачок Dropbear при запуске на конечном устройстве поддерживает всякие ED25519 из коробки, а вот с wolfSSH всё не так радужно. Да и проект мне показался очень сырым, опций кот наплакал, сам сервер лежит в папке examples и т. д
Исходная версия EXL, :
Собственно, раз никто не знает, я решил сам собрать как wolfSSH, так и Dropbear, попробовать их, сравнить и поделиться опытом.
Во-первых, кодовая база Dropbear значительно меньше, чем wolfSSH: 2.98 MiB супротив 19.85 MiB + 380.46 KiB.
Во-вторых, сборка мне показалась проще у Dropbear, чем у wolfSSH.
$ cd dropbear
$ ./configure --host=arm-linux-gnu --with-zlib=/opt/toolchains/motoezx --prefix=`pwd`/../dropbear_built
$ cd wolfssl
$ ./autogen.sh
$ . /opt/toolchains/motoezx/setenv-a1200.sh
$ CFLAGS=-D_REENTRANT gl_cv_cc_vis_werror=no ax_cv_check_cflags___Werror=no ./configure --host=arm-linux-gnu --enable-ssh --enable-static --disable-shared --with-libz=/opt/toolchains/motoezx --prefix=`pwd`/../wolfssl_built
$ make install
$ cd wolfssh
$ ./autogen.sh
$ . /opt/toolchains/motoezx/setenv-a1200.sh
$ gl_cv_cc_vis_werror=no ax_cv_check_cflags___Werror=no ./configure --host=arm-linux-gnu --enable-scp --enable-sftp --with-wolfssl=`pwd`/../wolfssl_built --prefix=`pwd`/../wolfssh_built
$ make install
Из-за очень древнего кросс-компилятора GCC 3.3.6 в обоих случаях нужно было делать всякие странные патч-трюки. Однако, слава сишке, они оказались тривиальными.
Выложу эти патчи здесь, на всякий случай:
// Dropbear
From bcd25f9f10a65f3cca30a095c1044f80b82600c0 Mon Sep 17 00:00:00 2001
From: EXL <exlmotodev@gmail.com>
Date: Thu, 7 Jul 2022 02:44:34 +0700
Subject: [PATCH] Fix dropbear compilation for MotoEZX platform
---
default_options.h | 8 ++++----
libtommath/makefile_include.mk | 4 ++--
svr-main.c | 4 ++--
3 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/default_options.h b/default_options.h
index 536f4e7..7b06765 100644
--- a/default_options.h
+++ b/default_options.h
@@ -21,10 +21,10 @@ IMPORTANT: Some options will require "make clean" after changes */
/* Default hostkey paths - these can be specified on the command line.
* Homedir is prepended if path begins with ~/
*/
-#define DSS_PRIV_FILENAME "/etc/dropbear/dropbear_dss_host_key"
-#define RSA_PRIV_FILENAME "/etc/dropbear/dropbear_rsa_host_key"
-#define ECDSA_PRIV_FILENAME "/etc/dropbear/dropbear_ecdsa_host_key"
-#define ED25519_PRIV_FILENAME "/etc/dropbear/dropbear_ed25519_host_key"
+#define DSS_PRIV_FILENAME "/ezxlocal/dropbear/dropbear_dss_host_key"
+#define RSA_PRIV_FILENAME "/ezxlocal/dropbear/dropbear_rsa_host_key"
+#define ECDSA_PRIV_FILENAME "/ezxlocal/dropbear/dropbear_ecdsa_host_key"
+#define ED25519_PRIV_FILENAME "/ezxlocal/dropbear/dropbear_ed25519_host_key"
/* Set NON_INETD_MODE if you require daemon functionality (ie Dropbear listens
* on chosen ports and keeps accepting connections. This is the default.
diff --git a/libtommath/makefile_include.mk b/libtommath/makefile_include.mk
index 711b630..b95c9cd 100644
--- a/libtommath/makefile_include.mk
+++ b/libtommath/makefile_include.mk
@@ -48,7 +48,7 @@ else
endif
endif
-LTM_CFLAGS += -I./ -Wall -Wsign-compare -Wextra -Wshadow
+LTM_CFLAGS += -I./ -Wall -Wsign-compare -Wshadow
# renamed for Dropbear to avoid clash with oss-fuzz $SANITIZER var
ifdef LTM_SANITIZER
@@ -57,7 +57,7 @@ endif
ifndef NO_ADDTL_WARNINGS
# additional warnings
-LTM_CFLAGS += -Wdeclaration-after-statement -Wbad-function-cast -Wcast-align
+LTM_CFLAGS += -Wbad-function-cast -Wcast-align
LTM_CFLAGS += -Wstrict-prototypes -Wpointer-arith
endif
diff --git a/svr-main.c b/svr-main.c
index a9f8a57..f0d9a72 100644
--- a/svr-main.c
+++ b/svr-main.c
@@ -169,9 +169,9 @@ static void main_noinetd(int argc, char ** argv, const char* multipath) {
#if DROPBEAR_DO_REEXEC
if (multipath) {
- execfd = open(multipath, O_CLOEXEC|O_RDONLY);
+ execfd = open(multipath, O_RDONLY);
} else {
- execfd = open(argv[0], O_CLOEXEC|O_RDONLY);
+ execfd = open(argv[0], O_RDONLY);
}
if (execfd < 0) {
/* Just fallback to straight fork */
--
2.34.1
// wolfSSL
From e17fcbe474e34a170520d8410a88a6e3de47ed16 Mon Sep 17 00:00:00 2001
From: EXL <exlmotodev@gmail.com>
Date: Thu, 7 Jul 2022 01:04:25 +0700
Subject: [PATCH] Fix wolfSSL compilation for MotoEZX platform
---
wolfssl/wolfcrypt/types.h | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/wolfssl/wolfcrypt/types.h b/wolfssl/wolfcrypt/types.h
index 5fad9b1..4343fa9 100644
--- a/wolfssl/wolfcrypt/types.h
+++ b/wolfssl/wolfcrypt/types.h
@@ -793,11 +793,7 @@ decouple library dependencies with standard string, memory and so on.
#endif
#ifndef OFFSETOF
- #if defined(__clang__) || defined(__GNUC__)
- #define OFFSETOF(type, field) __builtin_offsetof(type, field)
- #else
- #define OFFSETOF(type, field) ((size_t)&(((type *)0)->field))
- #endif
+ #define OFFSETOF(type, field) ((size_t)&(((type *)0)->field))
#endif
--
2.34.1
В-третьих, размер получившихся серверов у Dropbear всего 263.2 KiB, у wolfSSH – 677.7 KiB. При этом сервачок Dropbear при запуске на конечном устройстве поддерживает всякие ED25519 из коробки, а вот с wolfSSH всё не так радужно. Да и проект мне показался очень сырым, опций кот наплакал, сам сервер лежит в папке examples и т. д