diff options
author | Bram Moolenaar <Bram@vim.org> | 2014-08-10 13:38:34 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2014-08-10 13:38:34 +0200 |
commit | 8f4ac01544b44bdd906d241e4f203de7496e5ac8 (patch) | |
tree | 52ee7ff7368d7953f2baa3d7d015c539b11a345e /src/proto | |
parent | 0106b4b89127b043eddf711c750364b487deb794 (diff) | |
download | vim-git-8f4ac01544b44bdd906d241e4f203de7496e5ac8.tar.gz |
updated for version 7.4.399v7.4.399
Problem: Encryption implementation is messy. Blowfish encryption has a
weakness.
Solution: Refactor the encryption, store the state in an allocated struct
instead of using a save/restore mechanism. Introduce the
"blowfish2" method, which does not have the weakness and encrypts
the whole undo file. (largely by David Leadbeater)
Diffstat (limited to 'src/proto')
-rw-r--r-- | src/proto/blowfish.pro | 10 | ||||
-rw-r--r-- | src/proto/crypt.pro | 24 | ||||
-rw-r--r-- | src/proto/crypt_zip.pro | 5 | ||||
-rw-r--r-- | src/proto/fileio.pro | 2 | ||||
-rw-r--r-- | src/proto/misc2.pro | 11 |
5 files changed, 33 insertions, 19 deletions
diff --git a/src/proto/blowfish.pro b/src/proto/blowfish.pro index 4d64e10e8..66d029cd8 100644 --- a/src/proto/blowfish.pro +++ b/src/proto/blowfish.pro @@ -1,10 +1,6 @@ /* blowfish.c */ -void bf_key_init __ARGS((char_u *password, char_u *salt, int salt_len)); -void bf_cfb_init __ARGS((char_u *iv, int iv_len)); -void bf_crypt_encode __ARGS((char_u *from, size_t len, char_u *to)); -void bf_crypt_decode __ARGS((char_u *ptr, long len)); -void bf_crypt_init_keys __ARGS((char_u *passwd)); -void bf_crypt_save __ARGS((void)); -void bf_crypt_restore __ARGS((void)); +void crypt_blowfish_encode __ARGS((cryptstate_T *state, char_u *from, size_t len, char_u *to)); +void crypt_blowfish_decode __ARGS((cryptstate_T *state, char_u *from, size_t len, char_u *to)); +void crypt_blowfish_init __ARGS((cryptstate_T *state, char_u *key, char_u *salt, int salt_len, char_u *seed, int seed_len)); int blowfish_self_test __ARGS((void)); /* vim: set ft=c : */ diff --git a/src/proto/crypt.pro b/src/proto/crypt.pro new file mode 100644 index 000000000..d61df718b --- /dev/null +++ b/src/proto/crypt.pro @@ -0,0 +1,24 @@ +/* crypt.c */ +int crypt_method_nr_from_name __ARGS((char_u *name)); +int crypt_method_nr_from_magic __ARGS((char *ptr, int len)); +int crypt_works_inplace __ARGS((cryptstate_T *state)); +int crypt_get_method_nr __ARGS((buf_T *buf)); +int crypt_whole_undofile __ARGS((int method_nr)); +int crypt_get_header_len __ARGS((int method_nr)); +void crypt_set_cm_option __ARGS((buf_T *buf, int method_nr)); +int crypt_self_test __ARGS((void)); +cryptstate_T *crypt_create __ARGS((int method_nr, char_u *key, char_u *salt, int salt_len, char_u *seed, int seed_len)); +cryptstate_T *crypt_create_from_header __ARGS((int method_nr, char_u *key, char_u *header)); +cryptstate_T *crypt_create_from_file __ARGS((FILE *fp, char_u *key)); +cryptstate_T *crypt_create_for_writing __ARGS((int method_nr, char_u *key, char_u **header, int *header_len)); +void crypt_free_state __ARGS((cryptstate_T *state)); +long crypt_encode_alloc __ARGS((cryptstate_T *state, char_u *from, size_t len, char_u **newptr)); +long crypt_decode_alloc __ARGS((cryptstate_T *state, char_u *ptr, long len, char_u **newptr)); +void crypt_encode __ARGS((cryptstate_T *state, char_u *from, size_t len, char_u *to)); +void crypt_decode __ARGS((cryptstate_T *state, char_u *from, size_t len, char_u *to)); +void crypt_encode_inplace __ARGS((cryptstate_T *state, char_u *buf, size_t len)); +void crypt_decode_inplace __ARGS((cryptstate_T *state, char_u *buf, size_t len)); +void crypt_free_key __ARGS((char_u *key)); +char_u *crypt_get_key __ARGS((int store, int twice)); +void crypt_append_msg __ARGS((buf_T *buf)); +/* vim: set ft=c : */ diff --git a/src/proto/crypt_zip.pro b/src/proto/crypt_zip.pro new file mode 100644 index 000000000..5f4e13771 --- /dev/null +++ b/src/proto/crypt_zip.pro @@ -0,0 +1,5 @@ +/* crypt_zip.c */ +void crypt_zip_init __ARGS((cryptstate_T *state, char_u *key, char_u *salt, int salt_len, char_u *seed, int seed_len)); +void crypt_zip_encode __ARGS((cryptstate_T *state, char_u *from, size_t len, char_u *to)); +void crypt_zip_decode __ARGS((cryptstate_T *state, char_u *from, size_t len, char_u *to)); +/* vim: set ft=c : */ diff --git a/src/proto/fileio.pro b/src/proto/fileio.pro index 7aa99cfa8..0d532f4ce 100644 --- a/src/proto/fileio.pro +++ b/src/proto/fileio.pro @@ -4,8 +4,6 @@ int readfile __ARGS((char_u *fname, char_u *sfname, linenr_T from, linenr_T line int prep_exarg __ARGS((exarg_T *eap, buf_T *buf)); void set_file_options __ARGS((int set_options, exarg_T *eap)); void set_forced_fenc __ARGS((exarg_T *eap)); -int prepare_crypt_read __ARGS((FILE *fp)); -char_u *prepare_crypt_write __ARGS((buf_T *buf, int *lenp)); int check_file_readonly __ARGS((char_u *fname, int perm)); int buf_write __ARGS((buf_T *buf, char_u *fname, char_u *sfname, linenr_T start, linenr_T end, exarg_T *eap, int append, int forceit, int reset_changed, int filtering)); void msg_add_fname __ARGS((buf_T *buf, char_u *fname)); diff --git a/src/proto/misc2.pro b/src/proto/misc2.pro index 4fd457382..b2f72d864 100644 --- a/src/proto/misc2.pro +++ b/src/proto/misc2.pro @@ -84,16 +84,6 @@ int illegal_slash __ARGS((char *name)); char_u *parse_shape_opt __ARGS((int what)); int get_shape_idx __ARGS((int mouse)); void update_mouseshape __ARGS((int shape_idx)); -int crypt_method_from_string __ARGS((char_u *s)); -int get_crypt_method __ARGS((buf_T *buf)); -void set_crypt_method __ARGS((buf_T *buf, int method)); -void crypt_push_state __ARGS((void)); -void crypt_pop_state __ARGS((void)); -void crypt_encode __ARGS((char_u *from, size_t len, char_u *to)); -void crypt_decode __ARGS((char_u *ptr, long len)); -void crypt_init_keys __ARGS((char_u *passwd)); -void free_crypt_key __ARGS((char_u *key)); -char_u *get_crypt_key __ARGS((int store, int twice)); void *vim_findfile_init __ARGS((char_u *path, char_u *filename, char_u *stopdirs, int level, int free_visited, int find_what, void *search_ctx_arg, int tagfile, char_u *rel_fname)); char_u *vim_findfile_stopdir __ARGS((char_u *buf)); void vim_findfile_cleanup __ARGS((void *ctx)); @@ -116,5 +106,6 @@ time_t get8ctime __ARGS((FILE *fd)); char_u *read_string __ARGS((FILE *fd, int cnt)); int put_bytes __ARGS((FILE *fd, long_u nr, int len)); void put_time __ARGS((FILE *fd, time_t the_time)); +void time_to_bytes __ARGS((time_t the_time, char_u *buf)); int has_non_ascii __ARGS((char_u *s)); /* vim: set ft=c : */ |