summaryrefslogtreecommitdiffstats
path: root/engines
diff options
context:
space:
mode:
authorMatt Caswell <matt@openssl.org>2015-09-22 11:11:24 +0100
committerMatt Caswell <matt@openssl.org>2016-03-07 21:26:04 +0000
commit98ee75439d7e844de6c063a4be5bd09b3cc9db53 (patch)
tree014bfd6c0ef4670574466b10fe17449be2264649 /engines
parent4e3925227a65ade92f3052ee54a810f5d6c4e96e (diff)
Update the dasync engine to add a pipeline cipher
Implement aes128-cbc as a pipeline capable cipher in the dasync engine. As dasync is just a dummy engine, it actually just performs the parallel encrypts/decrypts in serial. Reviewed-by: Tim Hudson <tjh@openssl.org>
Diffstat (limited to 'engines')
-rw-r--r--engines/e_dasync.c190
-rw-r--r--engines/e_dasync_err.c115
-rw-r--r--engines/e_dasync_err.h26
3 files changed, 260 insertions, 71 deletions
diff --git a/engines/e_dasync.c b/engines/e_dasync.c
index 25dd233769..018175c9e4 100644
--- a/engines/e_dasync.c
+++ b/engines/e_dasync.c
@@ -60,6 +60,8 @@
#include <openssl/async.h>
#include <openssl/bn.h>
#include <openssl/crypto.h>
+#include <openssl/ssl.h>
+#include <openssl/modes.h>
#if (defined(OPENSSL_SYS_UNIX) || defined(OPENSSL_SYS_CYGWIN)) && defined(OPENSSL_THREADS)
# undef ASYNC_POSIX
@@ -176,6 +178,70 @@ static RSA_METHOD dasync_rsa_method = {
};
+/* AES */
+
+static int dasync_aes128_cbc_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg,
+ void *ptr);
+
+static int dasync_aes128_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
+ const unsigned char *iv, int enc);
+
+static int dasync_aes128_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
+ const unsigned char *in, size_t inl);
+
+static int dasync_aes128_cbc_cleanup(EVP_CIPHER_CTX *ctx);
+
+struct aes_128_cbc_pipeline_ctx {
+ void *inner_cipher_data;
+ unsigned char dummy[256];
+ unsigned int numpipes;
+ unsigned char **inbufs;
+ unsigned char **outbufs;
+ size_t *lens;
+};
+
+static EVP_CIPHER *_hidden_aes_128_cbc = NULL;
+static const EVP_CIPHER *dasync_aes_128_cbc(void)
+{
+ if (_hidden_aes_128_cbc == NULL)
+ _hidden_aes_128_cbc = EVP_CIPHER_meth_new(NID_aes_128_cbc,
+ 16 /* block size */,
+ 16 /* key len */);
+ if (_hidden_aes_128_cbc == NULL
+ || !EVP_CIPHER_meth_set_iv_length(_hidden_aes_128_cbc,16)
+ || !EVP_CIPHER_meth_set_flags(_hidden_aes_128_cbc,
+ EVP_CIPH_FLAG_DEFAULT_ASN1
+ | EVP_CIPH_CBC_MODE
+ | EVP_CIPH_FLAG_PIPELINE)
+ || !EVP_CIPHER_meth_set_init(_hidden_aes_128_cbc,
+ dasync_aes128_init_key)
+ || !EVP_CIPHER_meth_set_do_cipher(_hidden_aes_128_cbc,
+ dasync_aes128_cbc_cipher)
+ || !EVP_CIPHER_meth_set_cleanup(_hidden_aes_128_cbc,
+ dasync_aes128_cbc_cleanup)
+ || !EVP_CIPHER_meth_set_ctrl(_hidden_aes_128_cbc,
+ dasync_aes128_cbc_ctrl)
+ || !EVP_CIPHER_meth_set_impl_ctx_size(_hidden_aes_128_cbc,
+ sizeof(struct aes_128_cbc_pipeline_ctx))) {
+ EVP_CIPHER_meth_free(_hidden_aes_128_cbc);
+ _hidden_aes_128_cbc = NULL;
+ }
+ return _hidden_aes_128_cbc;
+}
+
+
+static int dasync_ciphers(ENGINE *e, const EVP_CIPHER **cipher,
+ const int **nids, int nid);
+
+# ifdef NID_aes_128_cbc_hmac_sha256
+static int dasync_cipher_nids[] = {
+ NID_aes_128_cbc,
+ 0
+};
+# else
+static int dasync_cipher_nids[] = { 0 };
+#endif
+
static int bind_dasync(ENGINE *e)
{
/* Ensure the dasync error handling is set up */
@@ -185,6 +251,7 @@ static int bind_dasync(ENGINE *e)
|| !ENGINE_set_name(e, engine_dasync_name)
|| !ENGINE_set_RSA(e, &dasync_rsa_method)
|| !ENGINE_set_digests(e, dasync_digests)
+ || !ENGINE_set_ciphers(e, dasync_ciphers)
|| !ENGINE_set_destroy_function(e, dasync_destroy)
|| !ENGINE_set_init_function(e, dasync_init)
|| !ENGINE_set_finish_function(e, dasync_finish)) {
@@ -271,6 +338,29 @@ static int dasync_digests(ENGINE *e, const EVP_MD **digest,
return ok;
}
+static int dasync_ciphers(ENGINE *e, const EVP_CIPHER **cipher,
+ const int **nids, int nid)
+{
+ int ok = 1;
+ if (!cipher) {
+ /* We are returning a list of supported nids */
+ *nids = dasync_cipher_nids;
+ return (sizeof(dasync_cipher_nids) -
+ 1) / sizeof(dasync_cipher_nids[0]);
+ }
+ /* We are being asked for a specific cipher */
+ switch (nid) {
+ case NID_aes_128_cbc:
+ *cipher = dasync_aes_128_cbc();
+ break;
+ default:
+ ok = 0;
+ *cipher = NULL;
+ break;
+ }
+ return ok;
+}
+
static void wait_cleanup(ASYNC_WAIT_CTX *ctx, const void *key,
OSSL_ASYNC_FD readfd, void *pvwritefd)
{
@@ -431,3 +521,103 @@ static int dasync_rsa_finish(RSA *rsa)
{
return RSA_PKCS1_OpenSSL()->finish(rsa);
}
+
+/*
+ * AES128 Implementation
+ */
+
+static int dasync_aes128_cbc_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg,
+ void *ptr)
+{
+ struct aes_128_cbc_pipeline_ctx *pipe_ctx =
+ (struct aes_128_cbc_pipeline_ctx *)EVP_CIPHER_CTX_cipher_data(ctx);
+
+ if (pipe_ctx == NULL)
+ return 0;
+
+ switch (type) {
+ case EVP_CTRL_SET_PIPELINE_OUTPUT_BUFS:
+ pipe_ctx->numpipes = arg;
+ pipe_ctx->outbufs = (unsigned char **)ptr;
+ break;
+
+ case EVP_CTRL_SET_PIPELINE_INPUT_BUFS:
+ pipe_ctx->numpipes = arg;
+ pipe_ctx->inbufs = (unsigned char **)ptr;
+ break;
+
+ case EVP_CTRL_SET_PIPELINE_INPUT_LENS:
+ pipe_ctx->numpipes = arg;
+ pipe_ctx->lens = (size_t *)ptr;
+ break;
+
+ default:
+ return 0;
+ }
+
+ return 1;
+}
+
+static int dasync_aes128_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
+ const unsigned char *iv, int enc)
+{
+ int ret;
+ struct aes_128_cbc_pipeline_ctx *pipe_ctx =
+ (struct aes_128_cbc_pipeline_ctx *)EVP_CIPHER_CTX_cipher_data(ctx);
+
+ if (pipe_ctx->inner_cipher_data == NULL
+ && EVP_CIPHER_impl_ctx_size(EVP_aes_128_cbc()) != 0) {
+ pipe_ctx->inner_cipher_data = OPENSSL_zalloc(
+ EVP_CIPHER_impl_ctx_size(EVP_aes_128_cbc()));
+ if (pipe_ctx->inner_cipher_data == NULL) {
+ DASYNCerr(DASYNC_F_DASYNC_AES128_INIT_KEY,
+ ERR_R_MALLOC_FAILURE);
+ return 0;
+ }
+ }
+
+ pipe_ctx->numpipes = 0;
+
+ EVP_CIPHER_CTX_set_cipher_data(ctx, pipe_ctx->inner_cipher_data);
+ ret = EVP_CIPHER_meth_get_init(EVP_aes_128_cbc())(ctx, key, iv, enc);
+ EVP_CIPHER_CTX_set_cipher_data(ctx, pipe_ctx);
+
+ return ret;
+}
+
+static int dasync_aes128_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
+ const unsigned char *in, size_t inl)
+{
+ int ret = 1;
+ unsigned int i, pipes;
+ struct aes_128_cbc_pipeline_ctx *pipe_ctx =
+ (struct aes_128_cbc_pipeline_ctx *)EVP_CIPHER_CTX_cipher_data(ctx);
+
+ pipes = pipe_ctx->numpipes;
+ EVP_CIPHER_CTX_set_cipher_data(ctx, pipe_ctx->inner_cipher_data);
+ if (pipes == 0) {
+ ret = EVP_CIPHER_meth_get_do_cipher(EVP_aes_128_cbc())
+ (ctx, out, in, inl);
+ } else {
+ for (i = 0; i < pipes; i++) {
+ ret = ret && EVP_CIPHER_meth_get_do_cipher(EVP_aes_128_cbc())
+ (ctx, pipe_ctx->outbufs[i],
+ pipe_ctx->inbufs[i],
+ pipe_ctx->lens[i]);
+ }
+ pipe_ctx->numpipes = 0;
+ }
+ EVP_CIPHER_CTX_set_cipher_data(ctx, pipe_ctx);
+ return ret;
+}
+
+static int dasync_aes128_cbc_cleanup(EVP_CIPHER_CTX *ctx)
+{
+ struct aes_128_cbc_pipeline_ctx *pipe_ctx =
+ (struct aes_128_cbc_pipeline_ctx *)EVP_CIPHER_CTX_cipher_data(ctx);
+
+ OPENSSL_clear_free(pipe_ctx->inner_cipher_data,
+ EVP_CIPHER_impl_ctx_size(EVP_aes_128_cbc()));
+
+ return 1;
+}
diff --git a/engines/e_dasync_err.c b/engines/e_dasync_err.c
index 33d4a90e1a..570a54ed37 100644
--- a/engines/e_dasync_err.c
+++ b/engines/e_dasync_err.c
@@ -6,7 +6,7 @@
* are met:
*
* 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
+ * notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
@@ -52,7 +52,8 @@
*
*/
-/* NOTE: this file was auto generated by the mkerr.pl script: any changes
+/*
+ * NOTE: this file was auto generated by the mkerr.pl script: any changes
* made to it will be overwritten when the script next updates this file,
* only reason strings will be preserved.
*/
@@ -64,83 +65,79 @@
/* BEGIN ERROR CODES */
#ifndef OPENSSL_NO_ERR
-#define ERR_FUNC(func) ERR_PACK(0,func,0)
-#define ERR_REASON(reason) ERR_PACK(0,0,reason)
-
-static ERR_STRING_DATA DASYNC_str_functs[]=
- {
-{ERR_FUNC(DASYNC_F_BIND_DASYNC), "BIND_DASYNC"},
-{ERR_FUNC(DASYNC_F_CIPHER_AES_128_CBC_CODE), "CIPHER_AES_128_CBC_CODE"},
-{ERR_FUNC(DASYNC_F_DASYNC_BN_MOD_EXP), "DASYNC_BN_MOD_EXP"},
-{ERR_FUNC(DASYNC_F_DASYNC_MOD_EXP), "DASYNC_MOD_EXP"},
-{ERR_FUNC(DASYNC_F_DASYNC_PRIVATE_DECRYPT), "DASYNC_PRIVATE_DECRYPT"},
-{ERR_FUNC(DASYNC_F_DASYNC_PRIVATE_ENCRYPT), "DASYNC_PRIVATE_ENCRYPT"},
-{ERR_FUNC(DASYNC_F_DASYNC_PUBLIC_DECRYPT), "DASYNC_PUBLIC_DECRYPT"},
-{ERR_FUNC(DASYNC_F_DASYNC_PUBLIC_ENCRYPT), "DASYNC_PUBLIC_ENCRYPT"},
-{0,NULL}
- };
-
-static ERR_STRING_DATA DASYNC_str_reasons[]=
- {
-{ERR_REASON(DASYNC_R_INIT_FAILED) ,"init failed"},
-{ERR_REASON(DASYNC_R_LENGTH_NOT_BLOCK_ALIGNED),"length not block aligned"},
-{ERR_REASON(DASYNC_R_UNKNOWN_FAULT) ,"unknown fault"},
-{0,NULL}
- };
+# define ERR_FUNC(func) ERR_PACK(0,func,0)
+# define ERR_REASON(reason) ERR_PACK(0,0,reason)
+
+static ERR_STRING_DATA DASYNC_str_functs[] = {
+ {ERR_FUNC(DASYNC_F_BIND_DASYNC), "BIND_DASYNC"},
+ {ERR_FUNC(DASYNC_F_CIPHER_AES_128_CBC_CODE), "CIPHER_AES_128_CBC_CODE"},
+ {ERR_FUNC(DASYNC_F_DASYNC_AES128_INIT_KEY), "DASYNC_AES128_INIT_KEY"},
+ {ERR_FUNC(DASYNC_F_DASYNC_BN_MOD_EXP), "DASYNC_BN_MOD_EXP"},
+ {ERR_FUNC(DASYNC_F_DASYNC_MOD_EXP), "DASYNC_MOD_EXP"},
+ {ERR_FUNC(DASYNC_F_DASYNC_PRIVATE_DECRYPT), "DASYNC_PRIVATE_DECRYPT"},
+ {ERR_FUNC(DASYNC_F_DASYNC_PRIVATE_ENCRYPT), "DASYNC_PRIVATE_ENCRYPT"},
+ {ERR_FUNC(DASYNC_F_DASYNC_PUBLIC_DECRYPT), "DASYNC_PUBLIC_DECRYPT"},
+ {ERR_FUNC(DASYNC_F_DASYNC_PUBLIC_ENCRYPT), "DASYNC_PUBLIC_ENCRYPT"},
+ {0, NULL}
+};
+
+static ERR_STRING_DATA DASYNC_str_reasons[] = {
+ {ERR_REASON(DASYNC_R_INIT_FAILED), "init failed"},
+ {ERR_REASON(DASYNC_R_LENGTH_NOT_BLOCK_ALIGNED),
+ "length not block aligned"},
+ {ERR_REASON(DASYNC_R_UNKNOWN_FAULT), "unknown fault"},
+ {0, NULL}
+};
#endif
#ifdef DASYNC_LIB_NAME
-static ERR_STRING_DATA DASYNC_lib_name[]=
- {
-{0 ,DASYNC_LIB_NAME},
-{0,NULL}
- };
+static ERR_STRING_DATA DASYNC_lib_name[] = {
+ {0, DASYNC_LIB_NAME},
+ {0, NULL}
+};
#endif
-
-static int DASYNC_lib_error_code=0;
-static int DASYNC_error_init=1;
+static int DASYNC_lib_error_code = 0;
+static int DASYNC_error_init = 1;
static void ERR_load_DASYNC_strings(void)
- {
- if (DASYNC_lib_error_code == 0)
- DASYNC_lib_error_code=ERR_get_next_error_library();
+{
+ if (DASYNC_lib_error_code == 0)
+ DASYNC_lib_error_code = ERR_get_next_error_library();
- if (DASYNC_error_init)
- {
- DASYNC_error_init=0;
+ if (DASYNC_error_init) {
+ DASYNC_error_init = 0;
#ifndef OPENSSL_NO_ERR
- ERR_load_strings(DASYNC_lib_error_code,DASYNC_str_functs);
- ERR_load_strings(DASYNC_lib_error_code,DASYNC_str_reasons);
+ ERR_load_strings(DASYNC_lib_error_code, DASYNC_str_functs);
+ ERR_load_strings(DASYNC_lib_error_code, DASYNC_str_reasons);
#endif
#ifdef DASYNC_LIB_NAME
- DASYNC_lib_name->error = ERR_PACK(DASYNC_lib_error_code,0,0);
- ERR_load_strings(0,DASYNC_lib_name);
+ DASYNC_lib_name->error = ERR_PACK(DASYNC_lib_error_code, 0, 0);
+ ERR_load_strings(0, DASYNC_lib_name);
#endif
- }
- }
+ }
+}
static void ERR_unload_DASYNC_strings(void)
- {
- if (DASYNC_error_init == 0)
- {
+{
+ if (DASYNC_error_init == 0) {
#ifndef OPENSSL_NO_ERR
- ERR_unload_strings(DASYNC_lib_error_code,DASYNC_str_functs);
- ERR_unload_strings(DASYNC_lib_error_code,DASYNC_str_reasons);
+ ERR_unload_strings(DASYNC_lib_error_code, DASYNC_str_functs);
+ ERR_unload_strings(DASYNC_lib_error_code, DASYNC_str_reasons);
#endif
#ifdef DASYNC_LIB_NAME
- ERR_unload_strings(0,DASYNC_lib_name);
+ ERR_unload_strings(0, DASYNC_lib_name);
#endif
- DASYNC_error_init=1;
- }
- }
+ DASYNC_error_init = 1;
+ }
+}
static void ERR_DASYNC_error(int function, int reason, char *file, int line)
- {
- if (DASYNC_lib_error_code == 0)
- DASYNC_lib_error_code=ERR_get_next_error_library();
- ERR_PUT_error(DASYNC_lib_error_code,function,reason,file,line);
- }
+{
+ if (DASYNC_lib_error_code == 0)
+ DASYNC_lib_error_code = ERR_get_next_error_library();
+ ERR_PUT_error(DASYNC_lib_error_code, function, reason, file, line);
+}
diff --git a/engines/e_dasync_err.h b/engines/e_dasync_err.h
index a34a099392..af5241e572 100644
--- a/engines/e_dasync_err.h
+++ b/engines/e_dasync_err.h
@@ -60,7 +60,8 @@ extern "C" {
#endif
/* BEGIN ERROR CODES */
-/* The following lines are auto generated by the script mkerr.pl. Any changes
+/*
+ * The following lines are auto generated by the script mkerr.pl. Any changes
* made after this point may be overwritten when the script is next run.
*/
static void ERR_load_DASYNC_strings(void);
@@ -71,19 +72,20 @@ static void ERR_DASYNC_error(int function, int reason, char *file, int line);
/* Error codes for the DASYNC functions. */
/* Function codes. */
-#define DASYNC_F_BIND_DASYNC 107
-#define DASYNC_F_CIPHER_AES_128_CBC_CODE 100
-#define DASYNC_F_DASYNC_BN_MOD_EXP 101
-#define DASYNC_F_DASYNC_MOD_EXP 102
-#define DASYNC_F_DASYNC_PRIVATE_DECRYPT 103
-#define DASYNC_F_DASYNC_PRIVATE_ENCRYPT 104
-#define DASYNC_F_DASYNC_PUBLIC_DECRYPT 105
-#define DASYNC_F_DASYNC_PUBLIC_ENCRYPT 106
+# define DASYNC_F_BIND_DASYNC 107
+# define DASYNC_F_CIPHER_AES_128_CBC_CODE 100
+# define DASYNC_F_DASYNC_AES128_INIT_KEY 108
+# define DASYNC_F_DASYNC_BN_MOD_EXP 101
+# define DASYNC_F_DASYNC_MOD_EXP 102
+# define DASYNC_F_DASYNC_PRIVATE_DECRYPT 103
+# define DASYNC_F_DASYNC_PRIVATE_ENCRYPT 104
+# define DASYNC_F_DASYNC_PUBLIC_DECRYPT 105
+# define DASYNC_F_DASYNC_PUBLIC_ENCRYPT 106
/* Reason codes. */
-#define DASYNC_R_INIT_FAILED 102
-#define DASYNC_R_LENGTH_NOT_BLOCK_ALIGNED 100
-#define DASYNC_R_UNKNOWN_FAULT 101
+# define DASYNC_R_INIT_FAILED 102
+# define DASYNC_R_LENGTH_NOT_BLOCK_ALIGNED 100
+# define DASYNC_R_UNKNOWN_FAULT 101
#ifdef __cplusplus
}
>942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091
# List of distributed Vim files.
# Used by Makefile.

# source files for all source archives
SRC_ALL =	\
		.cirrus.yml \
		.gitattributes \
		.github/CODEOWNERS \
		.github/ISSUE_TEMPLATE/bug_report.yml \
		.github/ISSUE_TEMPLATE/feature_request.md \
		.github/workflows/ci.yml \
		.github/workflows/codeql-analysis.yml \
		.github/workflows/coverity.yml \
		.github/dependabot.yml \
		.gitignore \
		.hgignore \
		.appveyor.yml \
		.codecov.yml \
		ci/appveyor.bat \
		ci/config.mk*.sed \
		ci/if_ver*.vim \
		ci/setup-xvfb.sh \
		src/Make_all.mak \
		src/README.md \
		src/alloc.c \
		src/alloc.h \
		src/arabic.c \
		src/arglist.c \
		src/ascii.h \
		src/autocmd.c \
		src/beval.c \
		src/beval.h \
		src/blob.c \
		src/blowfish.c \
		src/buffer.c \
		src/bufwrite.c \
		src/change.c \
		src/channel.c \
		src/charset.c \
		src/cindent.c \
		src/clientserver.c \
		src/clipboard.c \
		src/cmdexpand.c \
		src/cmdhist.c \
		src/crypt.c \
		src/crypt_zip.c \
		src/debugger.c \
		src/dict.c \
		src/diff.c \
		src/digraph.c \
		src/drawline.c \
		src/drawscreen.c \
		src/edit.c \
		src/errors.h \
		src/eval.c \
		src/evalbuffer.c \
		src/evalfunc.c \
		src/evalvars.c \
		src/evalwindow.c \
		src/ex_cmdidxs.h \
		src/ex_cmds.c \
		src/ex_cmds.h \
		src/ex_cmds2.c \
		src/ex_docmd.c \
		src/ex_eval.c \
		src/ex_getln.c \
		src/feature.h \
		src/fileio.c \
		src/filepath.c \
		src/findfile.c \
		src/float.c \
		src/fold.c \
		src/getchar.c \
		src/globals.h \
		src/gui.c \
		src/gui.h \
		src/gui_beval.c \
		src/hardcopy.c \
		src/hashtab.c \
		src/help.c \
		src/highlight.c \
		src/indent.c \
		src/insexpand.c \
		src/job.c \
		src/json.c \
		src/json_test.c \
		src/keymap.h \
		src/kword_test.c \
		src/list.c \
		src/locale.c \
		src/logfile.c \
		src/macros.h \
		src/main.c \
		src/map.c \
		src/mark.c \
		src/match.c \
		src/mbyte.c \
		src/memfile.c \
		src/memfile_test.c \
		src/memline.c \
		src/menu.c \
		src/message.c \
		src/message_test.c \
		src/misc1.c \
		src/misc2.c \
		src/mouse.c \
		src/move.c \
		src/mysign \
		src/nbdebug.c \
		src/nbdebug.h \
		src/netbeans.c \
		src/normal.c \
		src/nv_cmdidxs.h \
		src/nv_cmds.h \
		src/ops.c \
		src/option.c \
		src/option.h \
		src/optiondefs.h \
		src/optionstr.c \
		src/popupmenu.c \
		src/popupwin.c \
		src/profiler.c \
		src/quickfix.c \
		src/regexp.c \
		src/regexp_bt.c \
		src/regexp_nfa.c \
		src/regexp.h \
		src/register.c \
		src/scriptfile.c \
		src/screen.c \
		src/search.c \
		src/session.c \
		src/sha256.c \
		src/sign.c \
		src/sound.c \
		src/spell.c \
		src/spell.h \
		src/spellfile.c \
		src/spellsuggest.c \
		src/strings.c \
		src/structs.h \
		src/syntax.c \
		src/tag.c \
		src/term.c \
		src/terminal.c \
		src/termdefs.h \
		src/termlib.c \
		src/testing.c \
		src/textformat.c \
		src/textobject.c \
		src/textprop.c \
		src/time.c \
		src/typval.c \
		src/ui.c \
		src/undo.c \
		src/usercmd.c \
		src/userfunc.c \
		src/version.c \
		src/version.h \
		src/vim.h \
		src/vim9.h \
		src/vim9class.c \
		src/vim9cmds.c \
		src/vim9compile.c \
		src/vim9execute.c \
		src/vim9expr.c \
		src/vim9instr.c \
		src/vim9script.c \
		src/vim9type.c \
		src/viminfo.c \
		src/winclip.c \
		src/window.c \
		src/xxd/xxd.c \
		src/testdir/gen_opt_test.vim \
		src/testdir/README.txt \
		src/testdir/Make_all.mak \
		src/testdir/*.in \
		src/testdir/*.py \
		src/testdir/keycode_check.vim \
		src/testdir/keycode_check.json \
		src/testdir/lsan-suppress.txt \
		src/testdir/sautest/autoload/*.vim \
		src/testdir/testluaplugin/lua/testluaplugin/*.lua \
		src/testdir/check.vim \
		src/testdir/gui_init.vim \
		src/testdir/gui_preinit.vim \
		src/testdir/mouse.vim \
		src/testdir/runtest.vim \
		src/testdir/screendump.vim \
		src/testdir/setup.vim \
		src/testdir/setup_gui.vim \
		src/testdir/shared.vim \
		src/testdir/vim9.vim \
		src/testdir/script_util.vim \
		src/testdir/summarize.vim \
		src/testdir/term_util.vim \
		src/testdir/view_util.vim \
		src/testdir/test[0-9]*.ok \
		src/testdir/test77a.ok \
		src/testdir/test77a.com \
		src/testdir/test_*.vim \
		src/testdir/python2/*.py \
		src/testdir/python3/*.py \
		src/testdir/pythonx/*.py \
		src/testdir/pythonx/topmodule/__init__.py \
		src/testdir/pythonx/topmodule/submodule/__init__.py \
		src/testdir/pythonx/topmodule/submodule/subsubmodule/__init__.py \
		src/testdir/pythonx/topmodule/submodule/subsubmodule/subsubsubmodule.py \
		src/testdir/python_after/*.py \
		src/testdir/python_before/*.py \
		src/testdir/pyxfile/*.py \
		src/testdir/dumps/*.dump \
		src/testdir/dumps/*.vim \
		src/testdir/samples/*.txt \
		src/testdir/samples/*.vim \
		src/testdir/samples/test000 \
		src/testdir/color_ramp.vim \
		src/testdir/silent.wav \
		src/testdir/popupbounce.vim \
		src/testdir/crash/* \
		src/proto.h \
		src/protodef.h \
		src/proto/alloc.pro \
		src/proto/arabic.pro \
		src/proto/arglist.pro \
		src/proto/autocmd.pro \
		src/proto/beval.pro \
		src/proto/blob.pro \
		src/proto/blowfish.pro \
		src/proto/buffer.pro \
		src/proto/bufwrite.pro \
		src/proto/change.pro \
		src/proto/channel.pro \
		src/proto/charset.pro \
		src/proto/cindent.pro \
		src/proto/clientserver.pro \
		src/proto/clipboard.pro \
		src/proto/cmdexpand.pro \
		src/proto/cmdhist.pro \
		src/proto/crypt.pro \
		src/proto/crypt_zip.pro \
		src/proto/debugger.pro \
		src/proto/dict.pro \
		src/proto/diff.pro \
		src/proto/digraph.pro \
		src/proto/drawline.pro \
		src/proto/drawscreen.pro \
		src/proto/edit.pro \
		src/proto/eval.pro \
		src/proto/evalbuffer.pro \
		src/proto/evalfunc.pro \
		src/proto/evalvars.pro \
		src/proto/evalwindow.pro \
		src/proto/ex_cmds.pro \
		src/proto/ex_cmds2.pro \
		src/proto/ex_docmd.pro \
		src/proto/ex_eval.pro \
		src/proto/ex_getln.pro \
		src/proto/fileio.pro \
		src/proto/filepath.pro \
		src/proto/findfile.pro \
		src/proto/float.pro \
		src/proto/fold.pro \
		src/proto/getchar.pro \
		src/proto/gui.pro \
		src/proto/gui_beval.pro \
		src/proto/hardcopy.pro \
		src/proto/hashtab.pro \
		src/proto/help.pro \
		src/proto/highlight.pro \
		src/proto/indent.pro \
		src/proto/insexpand.pro \
		src/proto/job.pro \
		src/proto/json.pro \
		src/proto/list.pro \
		src/proto/locale.pro \
		src/proto/logfile.pro \
		src/proto/main.pro \
		src/proto/map.pro \
		src/proto/mark.pro \
		src/proto/match.pro \
		src/proto/mbyte.pro \
		src/proto/memfile.pro \
		src/proto/memline.pro \
		src/proto/menu.pro \
		src/proto/message.pro \
		src/proto/misc1.pro \
		src/proto/misc2.pro \
		src/proto/mouse.pro \
		src/proto/move.pro \
		src/proto/netbeans.pro \
		src/proto/normal.pro \
		src/proto/ops.pro \
		src/proto/option.pro \
		src/proto/optionstr.pro \
		src/proto/popupmenu.pro \
		src/proto/popupwin.pro \
		src/proto/profiler.pro \
		src/proto/quickfix.pro \
		src/proto/regexp.pro \
		src/proto/register.pro \
		src/proto/scriptfile.pro \
		src/proto/screen.pro \
		src/proto/search.pro \
		src/proto/session.pro \
		src/proto/sha256.pro \
		src/proto/sign.pro \
		src/proto/sound.pro \
		src/proto/spell.pro \
		src/proto/spellfile.pro \
		src/proto/spellsuggest.pro \
		src/proto/strings.pro \
		src/proto/syntax.pro \
		src/proto/tag.pro \
		src/proto/term.pro \
		src/proto/terminal.pro \
		src/proto/termlib.pro \
		src/proto/testing.pro \
		src/proto/textformat.pro \
		src/proto/textobject.pro \
		src/proto/textprop.pro \
		src/proto/time.pro \
		src/proto/typval.pro \
		src/proto/ui.pro \
		src/proto/undo.pro \
		src/proto/usercmd.pro \
		src/proto/userfunc.pro \
		src/proto/version.pro \
		src/proto/vim9class.pro \
		src/proto/vim9cmds.pro \
		src/proto/vim9compile.pro \
		src/proto/vim9execute.pro \
		src/proto/vim9expr.pro \
		src/proto/vim9instr.pro \
		src/proto/vim9script.pro \
		src/proto/vim9type.pro \
		src/proto/viminfo.pro \
		src/proto/winclip.pro \
		src/proto/window.pro \
		src/libvterm/.bzrignore \
		src/libvterm/.gitignore \
		src/libvterm/LICENSE \
		src/libvterm/Makefile \
		src/libvterm/README \
		src/libvterm/CONTRIBUTING \
		src/libvterm/tbl2inc_c.pl \
		src/libvterm/vterm.pc.in \
		src/libvterm/doc/URLs \
		src/libvterm/doc/seqs.txt \
		src/libvterm/find-wide-chars.pl \
		src/libvterm/include/vterm.h \
		src/libvterm/include/vterm_keycodes.h \
		src/libvterm/src/encoding.c \
		src/libvterm/src/encoding/DECdrawing.inc \
		src/libvterm/src/encoding/DECdrawing.tbl \
		src/libvterm/src/encoding/uk.inc \
		src/libvterm/src/encoding/uk.tbl \
		src/libvterm/src/fullwidth.inc \
		src/libvterm/src/keyboard.c \
		src/libvterm/src/mouse.c \
		src/libvterm/src/parser.c \
		src/libvterm/src/pen.c \
		src/libvterm/src/rect.h \
		src/libvterm/src/screen.c \
		src/libvterm/src/state.c \
		src/libvterm/src/unicode.c \
		src/libvterm/src/utf8.h \
		src/libvterm/src/vterm.c \
		src/libvterm/src/vterm_internal.h \
		src/libvterm/t/02parser.test \
		src/libvterm/t/03encoding_utf8.test \
		src/libvterm/t/10state_putglyph.test \
		src/libvterm/t/11state_movecursor.test \
		src/libvterm/t/12state_scroll.test \
		src/libvterm/t/13state_edit.test \
		src/libvterm/t/14state_encoding.test \
		src/libvterm/t/15state_mode.test \
		src/libvterm/t/16state_resize.test \
		src/libvterm/t/17state_mouse.test \
		src/libvterm/t/18state_termprops.test \
		src/libvterm/t/20state_wrapping.test \
		src/libvterm/t/21state_tabstops.test \
		src/libvterm/t/22state_save.test \
		src/libvterm/t/25state_input.test \
		src/libvterm/t/26state_query.test \
		src/libvterm/t/27state_reset.test \
		src/libvterm/t/28state_dbl_wh.test \
		src/libvterm/t/29state_fallback.test \
		src/libvterm/t/30state_pen.test \
		src/libvterm/t/31state_rep.test \
		src/libvterm/t/32state_flow.test \
		src/libvterm/t/40state_selection.test \
		src/libvterm/t/60screen_ascii.test \
		src/libvterm/t/61screen_unicode.test \
		src/libvterm/t/62screen_damage.test \
		src/libvterm/t/63screen_resize.test \
		src/libvterm/t/64screen_pen.test \
		src/libvterm/t/65screen_protect.test \
		src/libvterm/t/66screen_extent.test \
		src/libvterm/t/67screen_dbl_wh.test \
		src/libvterm/t/68screen_termprops.test \
		src/libvterm/t/69screen_reflow.test \
		src/libvterm/t/90vttest_01-movement-1.test \
		src/libvterm/t/90vttest_01-movement-2.test \
		src/libvterm/t/90vttest_01-movement-3.test \
		src/libvterm/t/90vttest_01-movement-4.test \
		src/libvterm/t/90vttest_02-screen-1.test \
		src/libvterm/t/90vttest_02-screen-2.test \
		src/libvterm/t/90vttest_02-screen-3.test \
		src/libvterm/t/90vttest_02-screen-4.test \
		src/libvterm/t/92lp1640917.test \
		src/libvterm/t/harness.c \
		src/libvterm/t/run-test.pl \
		src/xdiff/COPYING \
		src/xdiff/README.txt \
		src/xdiff/xdiff.h \
		src/xdiff/xdiffi.c \
		src/xdiff/xdiffi.h \
		src/xdiff/xemit.c \
		src/xdiff/xemit.h \
		src/xdiff/xhistogram.c \
		src/xdiff/xinclude.h \
		src/xdiff/xmacros.h \
		src/xdiff/xpatience.c \
		src/xdiff/xprepare.c \
		src/xdiff/xprepare.h \
		src/xdiff/xtypes.h \
		src/xdiff/xutils.c \
		src/xdiff/xutils.h \


# source files for Unix only
SRC_UNIX =	\
		Makefile \
		Filelist \
		README_src.txt \
		configure \
		pixmaps/*.xpm \
		pixmaps/*.png \
		pixmaps/gen-inline-pixbufs.sh \
		pixmaps/stock_icons.h \
		src/INSTALL \
		src/INSTALLx.txt \
		src/Makefile \
		src/auto/configure \
		src/config.h.in \
		src/config.mk.dist \
		src/config.mk.in \
		src/configure \
		src/configure.ac \
		src/create_cmdidxs.vim \
		src/create_nvcmdidxs.c \
		src/create_nvcmdidxs.vim \
		src/gui_gtk.c \
		src/gui_gtk_f.c \
		src/gui_gtk_f.h \
		src/gui_gtk_x11.c \
		src/gui_gtk_res.xml \
		src/gui_motif.c \
		src/gui_xmdlg.c \
		src/gui_xmebw.c \
		src/gui_xmebw.h \
		src/gui_xmebwp.h \
		src/gui_x11.c \
		src/gui_x11_pm.h \
		src/if_xcmdsrv.c \
		src/link.sh \
		src/installman.sh \
		src/installml.sh \
		src/install-sh \
		src/os_unix.c \
		src/os_unix.h \
		src/os_unixx.h \
		src/osdef.sh \
		src/osdef1.h.in \
		src/osdef2.h.in \
		src/pathdef.sh \
		src/proto/gui_gtk.pro \
		src/proto/gui_gtk_x11.pro \
		src/proto/gui_gtk_gresources.pro \
		src/proto/gui_motif.pro \
		src/proto/gui_xmdlg.pro \
		src/proto/gui_x11.pro \
		src/proto/if_xcmdsrv.pro \
		src/proto/os_unix.pro \
		src/proto/pty.pro \
		src/pty.c \
		src/testdir/Makefile \
		src/testdir/unix.vim \
		src/toolcheck \
		src/vim_icon.xbm \
		src/vim_mask.xbm \
		src/vimtutor \
		src/gvimtutor \
		src/which.sh \
		src/xxd/Makefile \

# source files for both DOS and Unix
SRC_DOS_UNIX =	\
		src/gui_xim.c \
		src/if_cscope.c \
		src/if_lua.c \
		src/if_mzsch.c \
		src/if_mzsch.h \
		src/if_perl.xs \
		src/if_perlsfio.c \
		src/if_python.c \
		src/if_python3.c \
		src/if_py_both.h \
		src/if_ruby.c \
		src/if_tcl.c \
		src/proto/gui_xim.pro \
		src/proto/if_cscope.pro \
		src/proto/if_lua.pro \
		src/proto/if_mzsch.pro \
		src/proto/if_perl.pro \
		src/proto/if_perlsfio.pro \
		src/proto/if_python.pro \
		src/proto/if_python3.pro \
		src/proto/if_ruby.pro \
		src/proto/if_tcl.pro \
		src/typemap \

# source files for MS-Windows (also in the extra archive)
SRC_DOS =	\
		src/GvimExt/*.mak \
		src/GvimExt/GvimExt.reg \
		src/GvimExt/Makefile \
		src/GvimExt/README.txt \
		src/GvimExt/gvimext.cpp \
		src/GvimExt/gvimext.def \
		src/GvimExt/gvimext.h \
		src/GvimExt/gvimext.inf \
		src/GvimExt/gvimext.rc \
		src/GvimExt/gvimext_ming.def \
		src/GvimExt/gvimext_ming.rc \
		src/GvimExt/resource.h \
		src/GvimExt/uninst.bat \
		README_srcdos.txt \
		src/INSTALLpc.txt \
		src/Make_cyg.mak \
		src/Make_cyg_ming.mak \
		src/Make_ming.mak \
		src/Make_mvc.mak \
		tools/rename.bat \
		src/bigvim.bat \
		src/bigvim64.bat \
		src/msvc-latest.bat \
		src/msvc2015.bat \
		src/msvc2017.bat \
		src/msvc2019.bat \
		src/msvc2022.bat \
		src/msys32.bat \
		src/msys64.bat \
		src/dlldata.c \
		src/dosinst.c \
		src/dosinst.h \
		src/gui_dwrite.cpp \
		src/gui_dwrite.h \
		src/gui_w32.c \
		src/gui_w32_rc.h \
		src/if_ole.cpp \
		src/if_ole.h \
		src/if_ole.idl \
		src/iscygpty.c \
		src/iscygpty.h \
		src/iid_ole.c \
		src/os_dos.h \
		src/os_w32dll.c \
		src/os_w32exe.c \
		src/os_win32.c \
		src/os_mswin.c \
		src/os_win32.h \
		src/proto/gui_w32.pro \
		src/proto/if_ole.pro \
		src/proto/os_win32.pro \
		src/proto/os_mswin.pro \
		src/testdir/Make_dos.mak \
		src/testdir/Make_mvc.mak \
		src/testdir/Make_ming.mak \
		src/testdir/dos.vim \
		src/uninstall.c \
		src/vim.rc \
		src/vim.manifest \
		src/vimrun.c \
		src/xpm_w32.c \
		src/xpm_w32.h \
		src/tee/Make_ming.mak \
		src/tee/Make_mvc.mak \
		src/tee/Makefile \
		src/tee/tee.c \
		src/xxd/Make_ming.mak \
		src/xxd/Make_mvc.mak \
		nsis/gvim.nsi \
		nsis/gvim_version.nsh \
		nsis/README.txt \
		nsis/lang/*.nsi \
		uninstall.txt \

# source files for DOS without CR/LF translation (also in the extra archive)
SRC_DOS_BIN =	\
		src/tearoff.bmp \
		src/tools.bmp \
		src/vim*.ico \
		src/vim.tlb \
		src/xpm/COPYRIGHT \
		src/xpm/README.txt \
		src/xpm/arm64/lib-vc14/libXpm.lib \
		src/xpm/include/*.h \
		src/xpm/x64/lib-vc14/libXpm.lib \
		src/xpm/x64/lib/libXpm.a \
		src/xpm/x86/lib-vc14/libXpm.lib \
		src/xpm/x86/lib/libXpm.a \
		runtime/bitmaps/vim.ico \
		nsis/icons.zip \

# source files for Amiga, DOS, etc. (also in the extra archive)
SRC_AMI_DOS =	\

# source files for Amiga (also in the extra archive)
SRC_AMI =	\
		README_amisrc.txt \
		README_amisrc.txt.info \
		src.info \
		src/INSTALLami.txt \
		src/Make_ami.mak \
		src/os_amiga.c \
		src/os_amiga.h \
		src/proto/os_amiga.pro \
		src/testdir/Make_amiga.mak \
		src/testdir/amiga.vim \
		src/xxd/Make_amiga.mak \

# source files for Haiku (also in the extra archive)
SRC_HAIKU =	\
		README_haiku.txt \
		src/os_haiku.h \
		src/os_haiku.rdef.in \
		src/gui_haiku.cc \
		src/gui_haiku.h \
		src/proto/gui_haiku.pro \

# source files for the Mac (also in the extra archive)
SRC_MAC =	\
		src/INSTALLmac.txt \
		src/os_mac.h \
		src/os_mac_conv.c \
		src/os_macosx.m \
		src/proto/os_mac_conv.pro \
		src/proto/os_macosx.pro \

# source files for VMS (in the extra archive)
SRC_VMS =	\
		src/INSTALLvms.txt \
		src/Make_vms.mms \
		src/gui_gtk_vms.h \
		src/os_vms.c \
		src/os_vms_conf.h \
		src/os_vms_mms.c \
		src/proto/os_vms.pro \
		src/testdir/Make_vms.mms \
		src/testdir/vms.vim \
		src/xxd/Make_vms.mms \
		vimtutor.com \

# source files for QNX (in the extra archive)
SRC_QNX =	\
		src/os_qnx.c \
		src/os_qnx.h \
		src/gui_photon.c \
		src/proto/gui_photon.pro \
		src/proto/os_qnx.pro \

# source files for the extra archive (all sources that are not for Unix)
SRC_EXTRA =	\
		$(SRC_AMI) \
		$(SRC_AMI_DOS) \
		$(SRC_DOS) \
		$(SRC_DOS_BIN) \
		$(SRC_HAIKU) \
		$(SRC_MAC) \
		$(SRC_QNX) \
		$(SRC_VMS) \
		README_os390.txt \
		src/link.390 \
		src/os_vms_fix.com \
		src/toolbar.phi \

# runtime files for all distributions
RT_ALL =	\
		README.txt \
		README.md \
		README_VIM9.md \
		LICENSE \
		CONTRIBUTING.md \
		runtime/bugreport.vim \
		runtime/doc/*.awk \
		runtime/doc/*.pl \
		runtime/doc/*.txt \
		runtime/doc/Makefile \
		runtime/doc/Make_all.mak \
		runtime/doc/doctags.c \
		runtime/doc/doctags.vim \
		runtime/doc/test_urls.vim \
		runtime/doc/vim.1 \
		runtime/doc/evim.1 \
		runtime/doc/vimdiff.1 \
		runtime/doc/vimtutor.1 \
		runtime/doc/xxd.1 \
		runtime/ftoff.vim \
		runtime/gvimrc_example.vim \
		runtime/import/dist/vimhelp.vim \
		runtime/import/dist/vimhighlight.vim \
		runtime/macros/README.txt \
		runtime/macros/editexisting.vim \
		runtime/macros/hanoi/click.me \
		runtime/macros/hanoi/hanoi.vim \
		runtime/macros/hanoi/poster \
		runtime/macros/justify.vim \
		runtime/macros/less.bat \
		runtime/macros/less.sh \
		runtime/macros/less.vim \
		runtime/macros/life/click.me \
		runtime/macros/life/life.vim \
		runtime/macros/matchit.vim \
		runtime/macros/maze/README.txt \
		runtime/macros/maze/[mM]akefile \
		runtime/macros/maze/maze.c \
		runtime/macros/maze/maze_5.78 \
		runtime/macros/maze/maze_mac \
		runtime/macros/maze/mazeansi.c \
		runtime/macros/maze/mazeclean.c \
		runtime/macros/maze/poster \
		runtime/macros/shellmenu.vim \
		runtime/macros/swapmous.vim \
		runtime/macros/urm/README.txt \
		runtime/macros/urm/examples \
		runtime/macros/urm/urm \
		runtime/macros/urm/urm.vim \
		runtime/defaults.vim \
		runtime/evim.vim \
		runtime/mswin.vim \
		runtime/optwin.vim \
		runtime/ftplugin.vim \
		runtime/ftplugof.vim \
		runtime/indent.vim \
		runtime/indoff.vim \
		runtime/termcap \
		runtime/tools/README.txt \
		runtime/tools/[a-z]*[a-z0-9] \
		runtime/tutor/README.txt \
		runtime/tutor/tutor \
		runtime/tutor/tutor.vim \
		runtime/vimrc_example.vim \
		runtime/pack/dist/opt/cfilter/plugin/cfilter.vim \
		runtime/pack/dist/opt/dvorak/plugin/dvorak.vim \
		runtime/pack/dist/opt/dvorak/dvorak/enable.vim \
		runtime/pack/dist/opt/dvorak/dvorak/disable.vim \
		runtime/pack/dist/opt/editexisting/plugin/editexisting.vim \
		runtime/pack/dist/opt/editorconfig/.editorconfig \
		runtime/pack/dist/opt/editorconfig/CONTRIBUTORS \
		runtime/pack/dist/opt/editorconfig/LICENSE* \
		runtime/pack/dist/opt/editorconfig/mkzip.sh \
		runtime/pack/dist/opt/editorconfig/README.md \
		runtime/pack/dist/opt/editorconfig/autoload/*.vim \
		runtime/pack/dist/opt/editorconfig/autoload/editorconfig_core/*.vim \
		runtime/pack/dist/opt/editorconfig/doc/tags \
		runtime/pack/dist/opt/editorconfig/doc/editorconfig.txt \
		runtime/pack/dist/opt/editorconfig/ftdetect/editorconfig.vim \
		runtime/pack/dist/opt/editorconfig/plugin/editorconfig.vim \
		runtime/pack/dist/opt/justify/plugin/justify.vim \
		runtime/pack/dist/opt/matchit/plugin/matchit.vim \
		runtime/pack/dist/opt/matchit/doc/matchit.txt \
		runtime/pack/dist/opt/matchit/doc/tags \
		runtime/pack/dist/opt/matchit/autoload/*.vim \
		runtime/pack/dist/opt/shellmenu/plugin/shellmenu.vim \
		runtime/pack/dist/opt/swapmouse/plugin/swapmouse.vim \
		runtime/pack/dist/opt/termdebug/plugin/termdebug.vim \

# runtime files for all distributions without CR-NL translation
RT_ALL_BIN =	\
		runtime/doc/tags \
		runtime/print/*.ps \

# runtime script files
RT_SCRIPTS =	\
		runtime/filetype.vim \
		runtime/scripts.vim \
		runt