0
0
mirror of https://github.com/vim/vim.git synced 2025-09-28 04:24:06 -04:00

Minor updates to blowfish encryption.

This commit is contained in:
Bram Moolenaar
2010-05-16 23:02:33 +02:00
parent 40e6a71c67
commit 823a165119
4 changed files with 30 additions and 38 deletions

View 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.

View 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;
}

View 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 : */

View 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;
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
{