summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2010-05-16 23:02:33 +0200
committerBram Moolenaar <Bram@vim.org>2010-05-16 23:02:33 +0200
commit823a165119fccd8ace6b8d37619ef68b75ecd44f (patch)
treef0e02a702ae8220ffd2562fba213fab0df720c5f
parent40e6a71c6777242a254f1748766aa0e60764ebb3 (diff)
downloadvim-823a165119fccd8ace6b8d37619ef68b75ecd44f.zip
Minor updates to blowfish encryption.
-rw-r--r--runtime/doc/todo.txt14
-rw-r--r--src/blowfish.c8
-rw-r--r--src/proto/sha256.pro2
-rw-r--r--src/sha256.c44
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
{