diff options
-rw-r--r-- | src/crypt.c | 170 | ||||
-rw-r--r-- | src/crypt.h | 2 |
2 files changed, 72 insertions, 100 deletions
diff --git a/src/crypt.c b/src/crypt.c index 9a62f9174d..4220739cf7 100644 --- a/src/crypt.c +++ b/src/crypt.c @@ -1,17 +1,16 @@ -/* - * Optional encryption support. - * Mohsin Ahmed, mosh@sasi.com, 98-09-24 - * Based on zip/crypt sources. - * - * NOTE FOR USA: Since 2000 exporting this code from the USA is allowed to - * most countries. There are a few exceptions, but that still should not be a - * problem since this code was originally created in Europe and India. - * - * Blowfish addition originally made by Mohsin Ahmed, - * http://www.cs.albany.edu/~mosh 2010-03-14 - * Based on blowfish by Bruce Schneier (http://www.schneier.com/blowfish.html) - * and sha256 by Christophe Devine. - */ +// Optional encryption support. +// Mohsin Ahmed, mosh@sasi.com, 98-09-24 +// Based on zip/crypt sources. +// +// NOTE FOR USA: Since 2000 exporting this code from the USA is allowed to +// most countries. There are a few exceptions, but that still should not be a +// problem since this code was originally created in Europe and India. +// +// Blowfish addition originally made by Mohsin Ahmed, +// http://www.cs.albany.edu/~mosh 2010-03-14 +// Based on blowfish by Bruce Schneier (http://www.schneier.com/blowfish.html) +// and sha256 by Christophe Devine. + #include "vim.h" #include "misc2.h" #include "blowfish.h" @@ -19,22 +18,17 @@ #include "message.h" #include "option.h" -/* from zip.h */ - -typedef unsigned short ush; /* unsigned 16-bit value */ -typedef unsigned long ulg; /* unsigned 32-bit value */ - static void make_crc_tab(void); -static ulg crc_32_tab[256]; +static unsigned long crc_32_tab[256]; -/* - * Fill the CRC table. - */ +// Fills the CRC table. static void make_crc_tab(void) { - ulg s, t, v; - static int done = FALSE; + unsigned long s; + unsigned long t; + unsigned long v; + static bool done = false; if (done) { return; @@ -44,29 +38,25 @@ static void make_crc_tab(void) v = t; for (s = 0; s < 8; s++) { - v = (v >> 1) ^ ((v & 1) * (ulg)0xedb88320L); + v = (v >> 1) ^ ((v & 1) * (unsigned long)0xedb88320L); } crc_32_tab[t] = v; } - done = TRUE; + done = true; } #define CRC32(c, b) (crc_32_tab[((int)(c) ^ (b)) & 0xff] ^ ((c) >> 8)) -static ulg keys[3]; /* keys defining the pseudo-random sequence */ +static unsigned long keys[3]; // keys defining the pseudo-random sequence -/* - * Return the next byte in the pseudo-random sequence. - */ +// Returns the next byte in the pseudo-random sequence. #define DECRYPT_BYTE_ZIP(t) { \ - ush temp; \ - temp = (ush)keys[2] | 2; \ + unsigned short temp; \ + temp = (unsigned short)keys[2] | 2; \ t = (int)(((unsigned)(temp * (temp ^ 1U)) >> 8) & 0xff); \ } -/* - * Update the encryption keys with the next byte of plain text. - */ +// Updates the encryption keys with the next byte of plain text. #define UPDATE_KEYS_ZIP(c) { \ keys[0] = CRC32(keys[0], (c)); \ keys[1] += keys[0] & 0xff; \ @@ -75,46 +65,38 @@ static ulg keys[3]; /* keys defining the pseudo-random sequence */ } static int crypt_busy = 0; -static ulg saved_keys[3]; +static unsigned long saved_keys[3]; static int saved_crypt_method; -/* - * Return int value for crypt method string: - * 0 for "zip", the old method. Also for any non-valid value. - * 1 for "blowfish". - */ +// Returns int value for crypt method string: +// 0 for "zip", the old method. Also for any non-valid value. +// 1 for "blowfish". int crypt_method_from_string(char_u *s) { return *s == 'b' ? 1 : 0; } -/* - * Get the crypt method for buffer "buf" as a number. - */ +// Returns the crypt method for buffer "buf" as a number. int get_crypt_method(buf_T *buf) { return crypt_method_from_string(*buf->b_p_cm == NUL ? p_cm : buf->b_p_cm); } -/* - * Set the crypt method for buffer "buf" to "method" using the int value as - * returned by crypt_method_from_string(). - */ +// Sets the crypt method for buffer "buf" to "method" using the int value as +// returned by crypt_method_from_string(). void set_crypt_method(buf_T *buf, int method) { free_string_option(buf->b_p_cm); buf->b_p_cm = vim_strsave((char_u *)(method == 0 ? "zip" : "blowfish")); } -/* - * Prepare for initializing encryption. If already doing encryption then save - * the state. - * Must always be called symmetrically with crypt_pop_state(). - */ +// Prepares for initializing the encryption. If already doing encryption then +// save the state. +// Must always be called symmetrically with crypt_pop_state(). void crypt_push_state(void) { if (crypt_busy == 1) { - /* save the state */ + // Save the state if (use_crypt_method == 0) { saved_keys[0] = keys[0]; saved_keys[1] = keys[1]; @@ -126,17 +108,15 @@ void crypt_push_state(void) } else if (crypt_busy > 1) { EMSG2(_(e_intern2), "crypt_push_state()"); } - ++crypt_busy; + crypt_busy++; } -/* - * End encryption. If doing encryption before crypt_push_state() then restore - * the saved state. - * Must always be called symmetrically with crypt_push_state(). - */ +// Ends encryption. If doing encryption before crypt_push_state() then restore +// the saved state. +// Must always be called symmetrically with crypt_push_state(). void crypt_pop_state(void) { - --crypt_busy; + crypt_busy--; if (crypt_busy == 1) { use_crypt_method = saved_crypt_method; @@ -151,17 +131,16 @@ void crypt_pop_state(void) } } -/* - * Encrypt "from[len]" into "to[len]". - * "from" and "to" can be equal to encrypt in place. - */ +// Encrypts "from[len]" into "to[len]". +// "from" and "to" can be equal to encrypt in place. void crypt_encode(char_u *from, size_t len, char_u *to) { size_t i; - int ztemp, t; + int ztemp; + int t; if (use_crypt_method == 0) { - for (i = 0; i < len; ++i) { + for (i = 0; i < len; i++) { ztemp = from[i]; DECRYPT_BYTE_ZIP(t); UPDATE_KEYS_ZIP(ztemp); @@ -172,18 +151,16 @@ void crypt_encode(char_u *from, size_t len, char_u *to) } } -/* - * Decrypt "ptr[len]" in place. - */ +// Decrypts "ptr[len]" in place. void crypt_decode(char_u *ptr, long len) { char_u *p; if (use_crypt_method == 0) { - for (p = ptr; p < ptr + len; ++p) { - ush temp; + for (p = ptr; p < ptr + len; p++) { + unsigned short temp; - temp = (ush)keys[2] | 2; + temp = (unsigned short)keys[2] | 2; temp = (int)(((unsigned)(temp * (temp ^ 1U)) >> 8) & 0xff); UPDATE_KEYS_ZIP(*p ^= temp); } @@ -192,12 +169,10 @@ void crypt_decode(char_u *ptr, long len) } } -/* - * Initialize the encryption keys and the random header according to - * the given password. - * If "passwd" is NULL or empty, don't do anything. - * in: "passwd" password string with which to modify keys - */ +// Initializes the encryption keys and the random header according to +// the given password. +// If "passwd" is NULL or empty, don't do anything. +// in: "passwd" password string with which to modify keys void crypt_init_keys(char_u *passwd) { if ((passwd != NULL) && (*passwd != NUL)) { @@ -209,7 +184,7 @@ void crypt_init_keys(char_u *passwd) keys[1] = 591751049L; keys[2] = 878082192L; - for (p = passwd; *p != NUL; ++p) { + for (p = passwd; *p != NUL; p++) { UPDATE_KEYS_ZIP((int)*p); } } else { @@ -218,36 +193,33 @@ void crypt_init_keys(char_u *passwd) } } -/* - * Free an allocated crypt key. Clear the text to make sure it doesn't stay - * in memory anywhere. - */ +// Frees an allocated crypt key. Clears the text to make sure it doesn't stay +// in memory anywhere. void free_crypt_key(char_u *key) { char_u *p; if (key != NULL) { - for (p = key; *p != NUL; ++p) { + for (p = key; *p != NUL; p++) { *p = 0; } - vim_free(key); + free(key); } } -/* - * Ask the user for a crypt key. - * When "store" is TRUE, the new key is stored in the 'key' option, and the - * 'key' option value is returned: Don't free it. - * When "store" is FALSE, the typed key is returned in allocated memory. - * in: "twice" Ask for the key twice. - * Returns NULL on failure. - */ +// Asks the user for a crypt key. +// When "store" is TRUE, the new key is stored in the 'key' option, and the +// 'key' option value is returned: Don't free it. +// When "store" is FALSE, the typed key is returned in allocated memory. +// in: "twice" Ask for the key twice. +// Returns NULL on failure. char_u *get_crypt_key(int store, int twice) { - char_u *p1, *p2 = NULL; + char_u *p1; + char_u *p2 = NULL; int round; - for (round = 0;; ++round) { + for (round = 0;; round++) { cmdline_star = TRUE; cmdline_row = msg_row; char_u *prompt = (round == 0) @@ -265,7 +237,7 @@ char_u *get_crypt_key(int store, int twice) free_crypt_key(p1); free_crypt_key(p2); p2 = NULL; - round = -1; /* do it again */ + round = -1; // Do it again continue; } @@ -279,7 +251,7 @@ char_u *get_crypt_key(int store, int twice) p2 = p1; } - /* since the user typed this, no need to wait for return */ + // Since the user typed this, no need to wait for return. if (msg_didout) { msg_putchar('\n'); } diff --git a/src/crypt.h b/src/crypt.h index 4cbb5ba272..bcbb964b4a 100644 --- a/src/crypt.h +++ b/src/crypt.h @@ -12,4 +12,4 @@ void crypt_init_keys(char_u *passwd); void free_crypt_key(char_u *key); char_u *get_crypt_key(int store, int twice); -#endif /* NEOVIM_CRYPT_H */ +#endif // NEOVIM_CRYPT_H |