diff options
author | Bram Moolenaar <Bram@vim.org> | 2010-05-16 23:02:33 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2010-05-16 23:02:33 +0200 |
commit | 823a165119fccd8ace6b8d37619ef68b75ecd44f (patch) | |
tree | f0e02a702ae8220ffd2562fba213fab0df720c5f | |
parent | 40e6a71c6777242a254f1748766aa0e60764ebb3 (diff) | |
download | vim-git-823a165119fccd8ace6b8d37619ef68b75ecd44f.tar.gz |
Minor updates to blowfish encryption.
-rw-r--r-- | runtime/doc/todo.txt | 14 | ||||
-rw-r--r-- | src/blowfish.c | 8 | ||||
-rw-r--r-- | src/proto/sha256.pro | 2 | ||||
-rw-r--r-- | src/sha256.c | 44 |
4 files changed, 30 insertions, 38 deletions
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt index fcb6b0c0c..173e8ab2b 100644 --- a/runtime/doc/todo.txt +++ b/runtime/doc/todo.txt @@ -30,17 +30,15 @@ be worked on, but only if you sponsor Vim development. See |sponsor|. *known-bugs* -------------------- Known bugs and current work ----------------------- -check blowfish.c -check sha256.c -Use 'cm' option only when FEAT_CRYPT is defined. -When not full match with magic, check for head and give warning about -unsupported crypt method. -if 'enc' is ucs-2, does utf-8 to ucs-2 encoding always work for seed? - Crypt update: -- move bf_self_test() and sha256_self_test() elsewhere +- Use 'cm' option only when FEAT_CRYPT is defined. +- When not full match with magic, check for head and give warning about + unsupported crypt method. +- if 'enc' is ucs-2, does utf-8 to ucs-2 encoding always work for seed? - Update E000 to error number. +Include cabal and obj syntax files. (Vincent Berthoux, 2010 May 16) + Cursor positioning wrong with 0x200e character. (John Becket, 2010 May 6) E315 when trying to change a file in FileChangedRO autocommand event. diff --git a/src/blowfish.c b/src/blowfish.c index f5b8e9070..ab2e7e00f 100644 --- a/src/blowfish.c +++ b/src/blowfish.c @@ -1,6 +1,6 @@ /* vi:set ts=8 sts=4 sw=4: * - * Blowfish encryption for vim; in Blowfish output feedback mode. + * Blowfish encryption for Vim; in Blowfish output feedback mode. * GPL(C) Mohsin Ahmed, http://www.cs.albany.edu/~mosh * Based on http://www.schneier.com/blowfish.html by Bruce Schneier. */ @@ -399,10 +399,10 @@ bf_key_init(password) { int i, j, keypos = 0; long_u val, data_l, data_r; - char *key; + char_u *key; int keylen; - key = sha256_key((char *)password); + key = sha256_key(password); keylen = STRLEN(key); for (i = 0; i < 256; ++i) { @@ -416,7 +416,7 @@ bf_key_init(password) { val = 0; for (j = 0; j < 4; ++j) - val = (val << 8) | (key[keypos++ % keylen] & 0xff); + val = (val << 8) | key[keypos++ % keylen]; pax[i] = ipa[i] ^ val; } diff --git a/src/proto/sha256.pro b/src/proto/sha256.pro index 635721c8c..a6d6be74a 100644 --- a/src/proto/sha256.pro +++ b/src/proto/sha256.pro @@ -1,5 +1,5 @@ /* sha256.c */ -char *sha256_key __ARGS((char *buf)); +char_u *sha256_key __ARGS((char_u *buf)); int sha256_self_test __ARGS((void)); void sha2_seed __ARGS((char_u header[], int header_len)); /* vim: set ft=c : */ diff --git a/src/sha256.c b/src/sha256.c index 24e57b986..e15725528 100644 --- a/src/sha256.c +++ b/src/sha256.c @@ -28,7 +28,7 @@ static void sha256_starts __ARGS((context_sha256_T *ctx)); static void sha256_process __ARGS((context_sha256_T *ctx, char_u data[64])); static void sha256_update __ARGS((context_sha256_T *ctx, char_u *input, uint32_t length)); static void sha256_finish __ARGS((context_sha256_T *ctx, char_u digest[32])); -static char *sha256_bytes __ARGS((char *buf, int buflen)); +static char_u *sha256_bytes __ARGS((char_u *buf, int buflen)); static unsigned int get_some_time __ARGS((void)); @@ -277,48 +277,42 @@ sha256_finish(ctx, digest) PUT_UINT32(ctx->state[7], digest, 28); } - static char * +/* + * Returns hex digest of "buf[buflen]" in a static array. + */ + static char_u * sha256_bytes(buf, buflen) - char *buf; - int buflen; + char_u *buf; + int buflen; { char_u sha256sum[32]; - static char hexit[65]; + static char_u hexit[65]; int j; context_sha256_T ctx; sha256_self_test(); sha256_starts(&ctx); - sha256_update(&ctx, (char_u *)buf, buflen); + sha256_update(&ctx, buf, buflen); sha256_finish(&ctx, sha256sum); for (j = 0; j < 32; j++) - sprintf(hexit + j * 2, "%02x", sha256sum[j]); + sprintf((char *)hexit + j * 2, "%02x", sha256sum[j]); hexit[sizeof(hexit) - 1] = '\0'; return hexit; } /* - * Returns sha256(buf) as 64 hex chars. + * Returns sha256(buf) as 64 hex chars in static array. */ - char * + char_u * sha256_key(buf) - char *buf; + char_u *buf; { - static char *hexit = 0; - int buflen; - /* No passwd means don't encrypt */ if (buf == NULL || *buf == NUL) - return ""; + return (char_u *)""; - /* if password is "0", reuse previous hash, for user convienience. */ - if (!strcmp(buf, "0") && hexit) - return hexit; - - buflen = strlen(buf); - hexit = sha256_bytes(buf, buflen); - return hexit; + return sha256_bytes(buf, STRLEN(buf)); } /* @@ -353,7 +347,7 @@ sha256_self_test() char_u buf[1000]; char_u sha256sum[32]; static int failures = 0; - char *hexit; + char_u *hexit; static int sha256_self_tested = 0; if (sha256_self_tested > 0) @@ -364,9 +358,9 @@ sha256_self_test() { if (i < 2) { - hexit = sha256_bytes(sha_self_test_msg[i], - strlen(sha_self_test_msg[i])); - strcpy(output, hexit); + hexit = sha256_bytes((char_u *)sha_self_test_msg[i], + STRLEN(sha_self_test_msg[i])); + STRCPY(output, hexit); } else { |