]> granicus.if.org Git - vim/commitdiff
Minor updates to blowfish encryption.
authorBram Moolenaar <Bram@vim.org>
Sun, 16 May 2010 21:02:33 +0000 (23:02 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 16 May 2010 21:02:33 +0000 (23:02 +0200)
runtime/doc/todo.txt
src/blowfish.c
src/proto/sha256.pro
src/sha256.c

index fcb6b0c0c69062e2e762e66d9487b5dd3f810d6f..173e8ab2bcef385fc4c84c9a3957a4f50951a446 100644 (file)
@@ -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.
index f5b8e90708aa6430f55bf65a479d62b50b46aa59..ab2e7e00f2078e8bccfc09c46a22d670286377a7 100644 (file)
@@ -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;
     }
 
index 635721c8c1b261e7e89861eba03cd35a95b73fa1..a6d6be74afad901fc054b67891a1456db727a00c 100644 (file)
@@ -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 : */
index 24e57b986ee295b28bf79bcd603ba5e567882cd0..e157255288d8f8fdd1246e4116ba3e6b7e215782 100644 (file)
@@ -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
        {