# HG changeset patch # User Bram Moolenaar # Date 1276399242 -7200 # Node ID b7cb69ab616d46bbf316169b74cbf19c9602c060 # Parent 0256b9c93e875555e53419d252b526be0423d917 Added salt to blowfish encryption. diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -7363,7 +7363,7 @@ A jump table for the options with a shor When not empty all messages are written in a file with this name. When the file exists messages are appended. Writing to the file ends when Vim exits or when 'verbosefile' is made - empty. + empty. Writes are buffered, thus may not show up for some time. Setting 'verbosefile' to a new value is like making it empty first. The difference with |:redir| is that verbose messages are not displayed when 'verbosefile' is set. diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt --- a/runtime/doc/todo.txt +++ b/runtime/doc/todo.txt @@ -30,9 +30,6 @@ be worked on, but only if you sponsor Vi *known-bugs* -------------------- Known bugs and current work ----------------------- -gtk_selection_clear_targets not available in GTK1 (Patrick Texier) -Use #ifdefs to use old code for GTK1. - Cursor positioning wrong with 0x200e character. (John Becket, 2010 May 6) E315 when trying to change a file in FileChangedRO autocommand event. @@ -1088,7 +1085,6 @@ restored. (Luc St-Louis) Vim 7.3: -- crash when reloading file. (Namsh, 2010 Jun 11) - using NSIS 2.46: install on Windows 7 works, but no "Edit with Vim" menu. Use register_shell_extension()? (George Reilly, 2010 May 26) Ron's version: http://dev.ronware.org/p/vim/finfo?name=gvim.nsi diff --git a/runtime/tutor/tutor.eo b/runtime/tutor/tutor.eo --- a/runtime/tutor/tutor.eo +++ b/runtime/tutor/tutor.eo @@ -1,5 +1,5 @@ ============================================================================== -= B o n v e n o n al la I n s t r u i l o de V I M - Versio 1.7.eo.2 = += B o n v e n o n al la I n s t r u i l o de V I M - Versio 1.7.eo.3 = ============================================================================== Vim estas tre potenca redaktilo, kiu havas multajn komandojn, tro da ili @@ -149,6 +149,7 @@ RIMARKO: Trairante la instruilon, ne pro !! RIMARKO: Antaý ol plenumi iun suban paþon ajn, legu la tutan lecionon!! 1. Eliru el la instruilo kiel vi faris en la leciono 1.2: :q! + Aý, se vi havas atingon al alia terminalo, faru tion, kio sekvas tie. 2. Æe la þelinvito, tajpu æi tiun komandon: vim tutor 'vim' estas la komando por lanæi la redaktilon Vim, 'tutor' estas la @@ -159,7 +160,8 @@ RIMARKO: Trairante la instruilon, ne pro 4. Konservu la dosieron kun þanøoj kaj eliru el Vim per: :wq - 5. Relanæu la instruilon vimtutor kaj moviøu suben al la sekvanta resumo. + 5. Se vi eliris la instruilon vimtutor en paþo 1, restartu la intruilon + vimtutor kaj moviøu suben al la sekvanta resumo. 6. Post kiam vi legis la suprajn paþojn, kaj komprenis ilin: faru ilin. @@ -413,7 +415,7 @@ RIMARKO: Premo de nur la movo en Normala reøimo sen operatoro movos 5. Nun moviøu al la leciono 3.3. -Rimarko: Memoru, ke vi devus lerni per uzo, kaj ne per memorado. +RIMARKO: Memoru, ke vi devus lerni per uzo, kaj ne per memorado. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -908,7 +910,7 @@ RIMARKO: Se vi deziras ignori usklecon por nur unu seræa komando, uzu \c ** Ebligu kapablojn de Vim ** Vim havas multe pli da kapabloj ol Vi, sed la plej multaj estas defaýlte - malþaltitaj. Por ekuzi la kapablojn, vi devas krei dosieron "vimrc. + malþaltitaj. Por ekuzi la kapablojn, vi devas krei dosieron "vimrc". 1. Ekredaktu la dosieron "vimrc". Tio dependas de via sistemo: :e ~/.vimrc por Unikso @@ -969,7 +971,7 @@ RIMARKO: Kompletigo funkcias por multaj ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Tio konkludas la instruilon de Vim. Øi celis doni mallongan superrigardon - de la redaktilo Vim, nur tio kio sufiæas por ebligi al vi facilan uzon de + de la redaktilo Vim, nur tion kio sufiæas por ebligi al vi facilan uzon de la redaktilo. Estas nepre nekompleta, æar Vim havas multajn multajn pliajn komandojn. Legu la manlibron: ":help user-manual". @@ -984,6 +986,6 @@ RIMARKO: Kompletigo funkcias por multaj Tradukita en Esperanto de Dominique Pellé, 2008-04-01 Retpoþto: dominique.pelle@gmail.com - Lasta þanøo: 2009-02-01 + Lasta þanøo: 2010-05-23 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/runtime/tutor/tutor.eo.utf-8 b/runtime/tutor/tutor.eo.utf-8 --- a/runtime/tutor/tutor.eo.utf-8 +++ b/runtime/tutor/tutor.eo.utf-8 @@ -1,5 +1,5 @@ ============================================================================== -= B o n v e n o n al la I n s t r u i l o de V I M - Versio 1.7.eo.2 = += B o n v e n o n al la I n s t r u i l o de V I M - Versio 1.7.eo.3 = ============================================================================== Vim estas tre potenca redaktilo, kiu havas multajn komandojn, tro da ili @@ -149,6 +149,7 @@ RIMARKO: Trairante la instruilon, ne pro !! RIMARKO: AntaÅ­ ol plenumi iun suban paÅon ajn, legu la tutan lecionon!! 1. Eliru el la instruilo kiel vi faris en la leciono 1.2: :q! + AÅ­, se vi havas atingon al alia terminalo, faru tion, kio sekvas tie. 2. Ĉe la Åelinvito, tajpu ĉi tiun komandon: vim tutor 'vim' estas la komando por lanĉi la redaktilon Vim, 'tutor' estas la @@ -159,7 +160,8 @@ RIMARKO: Trairante la instruilon, ne pro 4. Konservu la dosieron kun ÅanÄoj kaj eliru el Vim per: :wq - 5. Relanĉu la instruilon vimtutor kaj moviÄu suben al la sekvanta resumo. + 5. Se vi eliris la instruilon vimtutor en paÅo 1, restartu la intruilon + vimtutor kaj moviÄu suben al la sekvanta resumo. 6. Post kiam vi legis la suprajn paÅojn, kaj komprenis ilin: faru ilin. @@ -413,7 +415,7 @@ RIMARKO: Premo de nur la movo en Normala reÄimo sen operatoro movos 5. Nun moviÄu al la leciono 3.3. -Rimarko: Memoru, ke vi devus lerni per uzo, kaj ne per memorado. +RIMARKO: Memoru, ke vi devus lerni per uzo, kaj ne per memorado. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -908,7 +910,7 @@ RIMARKO: Se vi deziras ignori usklecon por nur unu serĉa komando, uzu \c ** Ebligu kapablojn de Vim ** Vim havas multe pli da kapabloj ol Vi, sed la plej multaj estas defaÅ­lte - malÅaltitaj. Por ekuzi la kapablojn, vi devas krei dosieron "vimrc. + malÅaltitaj. Por ekuzi la kapablojn, vi devas krei dosieron "vimrc". 1. Ekredaktu la dosieron "vimrc". Tio dependas de via sistemo: :e ~/.vimrc por Unikso @@ -969,7 +971,7 @@ RIMARKO: Kompletigo funkcias por multaj ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Tio konkludas la instruilon de Vim. Äœi celis doni mallongan superrigardon - de la redaktilo Vim, nur tio kio sufiĉas por ebligi al vi facilan uzon de + de la redaktilo Vim, nur tion kio sufiĉas por ebligi al vi facilan uzon de la redaktilo. Estas nepre nekompleta, ĉar Vim havas multajn multajn pliajn komandojn. Legu la manlibron: ":help user-manual". @@ -984,6 +986,6 @@ RIMARKO: Kompletigo funkcias por multaj Tradukita en Esperanto de Dominique Pellé, 2008-04-01 RetpoÅto: dominique.pelle@gmail.com - Lasta ÅanÄo: 2009-02-01 + Lasta ÅanÄo: 2010-05-23 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/runtime/tutor/tutor.fr b/runtime/tutor/tutor.fr --- a/runtime/tutor/tutor.fr +++ b/runtime/tutor/tutor.fr @@ -1,5 +1,5 @@ =============================================================================== -= B i e n v e n u e dans le T u t o r i e l de V I M - Version 1.7.fr.1 = += B i e n v e n u e dans le T u t o r i e l de V I M - Version 1.7.fr.2 = =============================================================================== Vim est un éditeur très puissant qui a trop de commandes pour pouvoir @@ -67,7 +67,7 @@ NOTE : Les touches fléchées devraient également fonctionner. Mais en utilisant 4. Si vous avez mémorisé ces étapes et êtes confiant, effectuez les étapes 1 à 3 pour sortir puis rentrer dans l'éditeur. -NOTE : :q! annule tous le changements que vous avez fait. Dans +NOTE : :q! annule tous les changements que vous avez fait. Dans quelques leçons, vous apprendrez à enregistrer les changements. 5. Déplacez le curseur à la Leçon 1.3. @@ -401,7 +401,7 @@ NOTE : Le seul appui d'un mouvement en mode Normal, sans commande, déplace le 2. Tapez dd pour effacer la ligne et la placer dans un registre de Vim. - 3. Déplacez le curseur sur la ligne c) au dessus où vous voulez remettre la + 3. Déplacez le curseur sur la ligne c) au-dessus où vous voulez remettre la ligne effacée. 4. En mode Normal, tapez p pour remettre la ligne en dessous du curseur. @@ -486,7 +486,7 @@ Notez que ce efface le mot et vous pla ---> La fin de cette ligne doit être rendue identique à la seconde. ---> La fin de cette ligne doit être corrigée avec la commande c$ . -NOTE : Vous pouvez utilisez la touche Retour Arrière pour corriger les +NOTE : Vous pouvez utiliser la touche Retour Arrière pour corriger les erreurs lorsque vous tapez. @@ -722,14 +722,14 @@ NOTE : L'appui de v démarre la sélection Visuelle. Vous pouvez déplacer le ** Pour insérer le contenu d'un fichier, tapez :r FICHIER ** - 1. Placez le curseur juste au dessus de cette ligne. + 1. Placez le curseur juste au-dessus de cette ligne. NOTE : Après avoir exécuté l'étape 2 vous verrez du texte de la Leçon 5.3. Puis déplacez vous vers le bas pour voir cette leçon à nouveau. 2. Maintenant récupérez votre fichier TEST en utilisant la commande :r TEST où TEST est le nom de votre fichier. - Le fichier que vous récupérez est placé au dessous de la ligne du curseur. + Le fichier que vous récupérez est placé au-dessous de la ligne du curseur. 4. Pour vérifier que le fichier a bien été inséré, remontez et vérifiez qu'il y a maintenant deux copies de la Leçon 5.3, l'originale et celle @@ -779,7 +779,7 @@ NOTE : Vous pouvez aussi lire la sortie ---> En tapant o le curseur se met sur la ligne ouverte, en mode Insertion. - 4. Pour ouvrir une ligne au DESSUS du curseur, tapez simplement un O + 4. Pour ouvrir une ligne au-DESSUS du curseur, tapez simplement un O majuscule, plutôt qu'un o minuscule. Faites un essai sur la ligne ci-dessous. @@ -849,7 +849,7 @@ NOTE : Le mode Remplacement est comme le 3. Tapez y pour copier le texte en surbrillance. - 4. Déplacez la curseur à la fin de la ligne suivante : j$ + 4. Déplacez le curseur à la fin de la ligne suivante : j$ 5. Tapez p pour coller le texte. Puis tapez : un second <Échap> . @@ -893,7 +893,7 @@ NOTE : Si vous voulez ignorer la casse u 1. Taper o ouvre une ligne SOUS le curseur et démarre le mode Insertion. - Taper O ouvre une ligne au DESSUS du curseur. + Taper O ouvre une ligne au-DESSUS du curseur. 2. Taper a pour insérer du texte APRÈS le curseur. Taper A pour insérer du texte après la fin de ligne. @@ -985,7 +985,7 @@ NOTE : Si vous voulez ignorer la casse u 7 Appuyez . Vim va compléter le nom (s'il est unique). -NOTE : Le complètement fonctionne pour de nombreuse commandes. Essayez +NOTE : Le complètement fonctionne pour de nombreuses commandes. Essayez d'appuyer CTRL-D et . C'est utile en particulier pour :help . @@ -1034,5 +1034,5 @@ NOTE : Le complètement fonctionne pour de nombreuse commandes. Essayez Dernières mises à jour par Dominique Pellé. E-mail : dominique.pelle@gmail.com - Last Change : 2008 Nov 23 + Last Change : 2010 May 23 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/runtime/tutor/tutor.fr.utf-8 b/runtime/tutor/tutor.fr.utf-8 --- a/runtime/tutor/tutor.fr.utf-8 +++ b/runtime/tutor/tutor.fr.utf-8 @@ -1,5 +1,5 @@ =============================================================================== -= B i e n v e n u e dans le T u t o r i e l de V I M - Version 1.7.fr.1 = += B i e n v e n u e dans le T u t o r i e l de V I M - Version 1.7.fr.2 = =============================================================================== Vim est un éditeur très puissant qui a trop de commandes pour pouvoir @@ -67,7 +67,7 @@ NOTE : Les touches fléchées devraient également fonctionner. Mais en utilisant 4. Si vous avez mémorisé ces étapes et êtes confiant, effectuez les étapes 1 à 3 pour sortir puis rentrer dans l'éditeur. -NOTE : :q! annule tous le changements que vous avez fait. Dans +NOTE : :q! annule tous les changements que vous avez fait. Dans quelques leçons, vous apprendrez à enregistrer les changements. 5. Déplacez le curseur à la Leçon 1.3. @@ -401,7 +401,7 @@ NOTE : Le seul appui d'un mouvement en mode Normal, sans commande, déplace le 2. Tapez dd pour effacer la ligne et la placer dans un registre de Vim. - 3. Déplacez le curseur sur la ligne c) au dessus où vous voulez remettre la + 3. Déplacez le curseur sur la ligne c) au-dessus où vous voulez remettre la ligne effacée. 4. En mode Normal, tapez p pour remettre la ligne en dessous du curseur. @@ -486,7 +486,7 @@ Notez que ce efface le mot et vous pla ---> La fin de cette ligne doit être rendue identique à la seconde. ---> La fin de cette ligne doit être corrigée avec la commande c$ . -NOTE : Vous pouvez utilisez la touche Retour Arrière pour corriger les +NOTE : Vous pouvez utiliser la touche Retour Arrière pour corriger les erreurs lorsque vous tapez. @@ -722,14 +722,14 @@ NOTE : L'appui de v démarre la sélection Visuelle. Vous pouvez déplacer le ** Pour insérer le contenu d'un fichier, tapez :r FICHIER ** - 1. Placez le curseur juste au dessus de cette ligne. + 1. Placez le curseur juste au-dessus de cette ligne. NOTE : Après avoir exécuté l'étape 2 vous verrez du texte de la Leçon 5.3. Puis déplacez vous vers le bas pour voir cette leçon à nouveau. 2. Maintenant récupérez votre fichier TEST en utilisant la commande :r TEST où TEST est le nom de votre fichier. - Le fichier que vous récupérez est placé au dessous de la ligne du curseur. + Le fichier que vous récupérez est placé au-dessous de la ligne du curseur. 4. Pour vérifier que le fichier a bien été inséré, remontez et vérifiez qu'il y a maintenant deux copies de la Leçon 5.3, l'originale et celle @@ -779,7 +779,7 @@ NOTE : Vous pouvez aussi lire la sortie ---> En tapant o le curseur se met sur la ligne ouverte, en mode Insertion. - 4. Pour ouvrir une ligne au DESSUS du curseur, tapez simplement un O + 4. Pour ouvrir une ligne au-DESSUS du curseur, tapez simplement un O majuscule, plutôt qu'un o minuscule. Faites un essai sur la ligne ci-dessous. @@ -849,7 +849,7 @@ NOTE : Le mode Remplacement est comme le 3. Tapez y pour copier le texte en surbrillance. - 4. Déplacez la curseur à la fin de la ligne suivante : j$ + 4. Déplacez le curseur à la fin de la ligne suivante : j$ 5. Tapez p pour coller le texte. Puis tapez : un second <Échap> . @@ -893,7 +893,7 @@ NOTE : Si vous voulez ignorer la casse u 1. Taper o ouvre une ligne SOUS le curseur et démarre le mode Insertion. - Taper O ouvre une ligne au DESSUS du curseur. + Taper O ouvre une ligne au-DESSUS du curseur. 2. Taper a pour insérer du texte APRÈS le curseur. Taper A pour insérer du texte après la fin de ligne. @@ -985,7 +985,7 @@ NOTE : Si vous voulez ignorer la casse u 7 Appuyez . Vim va compléter le nom (s'il est unique). -NOTE : Le complètement fonctionne pour de nombreuse commandes. Essayez +NOTE : Le complètement fonctionne pour de nombreuses commandes. Essayez d'appuyer CTRL-D et . C'est utile en particulier pour :help . @@ -1034,5 +1034,5 @@ NOTE : Le complètement fonctionne pour de nombreuse commandes. Essayez Dernières mises à jour par Dominique Pellé. E-mail : dominique.pelle@gmail.com - Last Change : 2008 Nov 23 + Last Change : 2010 May 23 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/src/blowfish.c b/src/blowfish.c --- a/src/blowfish.c +++ b/src/blowfish.c @@ -402,22 +402,40 @@ bf_d_cblock(block) } #endif +/* + * Initialize the crypt method using "password" as the encryption key and + * "salt[salt_len]" as the salt. + */ void -bf_key_init(password) +bf_key_init(password, salt, salt_len) char_u *password; + char_u *salt; + int salt_len; { int i, j, keypos = 0; UINT32_T val, data_l, data_r; char_u *key; int keylen; - key = sha256_key(password); - keylen = (int)STRLEN(key); + /* Process the key 1000 times. + * See http://en.wikipedia.org/wiki/Key_strengthening. */ + key = sha256_key(password, salt, salt_len); + for (i = 0; i < 1000; i++) + key = sha256_key(key, salt, salt_len); + + /* Convert the key from 64 hex chars to 32 binary chars. */ + keylen = (int)STRLEN(key) / 2; if (keylen == 0) { EMSG(_("E831: bf_key_init() called with empty password")); return; } + for (i = 0; i < keylen; i++) + { + sscanf((char *)&key[i * 2], "%2x", &j); + key[i] = j; + } + for (i = 0; i < 256; ++i) { sbx[0][i] = sbi[0][i]; @@ -475,9 +493,10 @@ bf_check_tables(ipa, sbi, val) typedef struct { char_u password[64]; - char_u plaintxt[8]; - char_u cryptxt[8]; - char_u badcryptxt[8]; /* cryptxt when big/little endian is wrong */ + char_u salt[9]; + char_u plaintxt[9]; + char_u cryptxt[9]; + char_u badcryptxt[9]; /* cryptxt when big/little endian is wrong */ UINT32_T keysum; } struct_bf_test_data; @@ -488,10 +507,11 @@ typedef struct { static struct_bf_test_data bf_test_data[] = { { "password", + "salt", "plaintxt", - "\x55\xca\x56\x3a\xef\xe1\x9c\x73", /* cryptxt */ - "\x47\xd9\x67\x49\x91\xc5\x9a\x95", /* badcryptxt */ - 0x5de01bdbu, /* keysum */ + "\xad\x3d\xfa\x7f\xe8\xea\x40\xf6", /* cryptxt */ + "\x72\x50\x3b\x38\x10\x60\x22\xa7", /* badcryptxt */ + 0x56701b5du /* keysum */ }, }; @@ -519,7 +539,9 @@ bf_self_test() bn = ARRAY_LENGTH(bf_test_data); for (i = 0; i < bn; i++) { - bf_key_init((char_u *)(bf_test_data[i].password)); + bf_key_init((char_u *)(bf_test_data[i].password), + bf_test_data[i].salt, + (int)STRLEN(bf_test_data[i].salt)); if (!bf_check_tables(pax, sbx, bf_test_data[i].keysum)) err++; diff --git a/src/fileio.c b/src/fileio.c --- a/src/fileio.c +++ b/src/fileio.c @@ -37,7 +37,12 @@ static char *crypt_magic[] = {"VimCrypt~01!", "VimCrypt~02!"}; static char crypt_magic_head[] = "VimCrypt~"; # define CRYPT_MAGIC_LEN 12 /* must be multiple of 4! */ + +/* For blowfish, after the magic header, we store 8 bytes of salt and then 8 + * bytes of seed (initialisation vector). */ +static int crypt_salt_len[] = {0, 8}; static int crypt_seed_len[] = {0, 8}; +#define CRYPT_SALT_LEN_MAX 8 #define CRYPT_SEED_LEN_MAX 8 #endif @@ -1441,6 +1446,7 @@ retry: if ((filesize == 0 # ifdef FEAT_CRYPT || (filesize == (CRYPT_MAGIC_LEN + + crypt_salt_len[use_crypt_method] + crypt_seed_len[use_crypt_method]) && cryptkey != NULL) # endif @@ -2488,7 +2494,9 @@ failed: #ifdef FEAT_CRYPT if (cryptkey != NULL) msg_add_lines(c, (long)linecnt, filesize - - CRYPT_MAGIC_LEN - crypt_seed_len[use_crypt_method]); + - CRYPT_MAGIC_LEN + - crypt_salt_len[use_crypt_method] + - crypt_seed_len[use_crypt_method]); else #endif msg_add_lines(c, (long)linecnt, filesize); @@ -2841,7 +2849,7 @@ get_crypt_method(ptr, len) for (i = 0; i < (int)(sizeof(crypt_magic) / sizeof(crypt_magic[0])); i++) { - if (len < (CRYPT_MAGIC_LEN + crypt_seed_len[i])) + if (len < (CRYPT_MAGIC_LEN + crypt_salt_len[i] + crypt_seed_len[i])) continue; if (memcmp(ptr, crypt_magic[i], CRYPT_MAGIC_LEN) == 0) return i; @@ -2903,19 +2911,20 @@ check_for_cryptkey(cryptkey, ptr, sizep, if (cryptkey != NULL) { int seed_len = crypt_seed_len[method]; + int salt_len = crypt_salt_len[method]; if (method == 0) crypt_init_keys(cryptkey); else { - bf_key_init(cryptkey); - bf_ofb_init(ptr + CRYPT_MAGIC_LEN, seed_len); + bf_key_init(cryptkey, ptr + CRYPT_MAGIC_LEN, salt_len); + bf_ofb_init(ptr + CRYPT_MAGIC_LEN + salt_len, seed_len); } /* Remove magic number from the text */ - *filesizep += CRYPT_MAGIC_LEN + seed_len; - *sizep -= CRYPT_MAGIC_LEN + seed_len; - mch_memmove(ptr, ptr + CRYPT_MAGIC_LEN + seed_len, (size_t)*sizep); + *filesizep += CRYPT_MAGIC_LEN + salt_len + seed_len; + *sizep -= CRYPT_MAGIC_LEN + salt_len + seed_len; + mch_memmove(ptr, ptr + CRYPT_MAGIC_LEN + salt_len + seed_len, (size_t)*sizep); } } /* When starting to edit a new file which does not have encryption, clear @@ -2935,12 +2944,15 @@ prepare_crypt_read(fp) FILE *fp; { int method; - char_u buffer[CRYPT_MAGIC_LEN + CRYPT_SEED_LEN_MAX + 2]; + char_u buffer[CRYPT_MAGIC_LEN + CRYPT_SALT_LEN_MAX + + CRYPT_SEED_LEN_MAX + 2]; if (fread(buffer, CRYPT_MAGIC_LEN, 1, fp) != 1) return FAIL; method = get_crypt_method((char *)buffer, - CRYPT_MAGIC_LEN + CRYPT_SEED_LEN_MAX); + CRYPT_MAGIC_LEN + + CRYPT_SEED_LEN_MAX + + CRYPT_SALT_LEN_MAX); if (method < 0 || method != curbuf->b_p_cm) return FAIL; @@ -2948,12 +2960,13 @@ prepare_crypt_read(fp) crypt_init_keys(curbuf->b_p_key); else { + int salt_len = crypt_salt_len[method]; int seed_len = crypt_seed_len[method]; - if (fread(buffer, seed_len, 1, fp) != 1) + if (fread(buffer, salt_len + seed_len, 1, fp) != 1) return FAIL; - bf_key_init(curbuf->b_p_key); - bf_ofb_init(buffer, seed_len); + bf_key_init(curbuf->b_p_key, buffer, salt_len); + bf_ofb_init(buffer + salt_len, seed_len); } return OK; } @@ -2969,8 +2982,12 @@ prepare_crypt_write(buf, lenp) { char_u *header; int seed_len = crypt_seed_len[buf->b_p_cm]; - - header = alloc_clear(CRYPT_MAGIC_LEN + CRYPT_SEED_LEN_MAX + 2); + int salt_len = crypt_salt_len[buf->b_p_cm]; + char_u *salt; + char_u *seed; + + header = alloc_clear(CRYPT_MAGIC_LEN + CRYPT_SALT_LEN_MAX + + CRYPT_SEED_LEN_MAX + 2); if (header != NULL) { use_crypt_method = buf->b_p_cm; /* select pkzip or blowfish */ @@ -2980,27 +2997,32 @@ prepare_crypt_write(buf, lenp) crypt_init_keys(buf->b_p_key); else { - /* Using blowfish, add seed. */ - sha2_seed(header + CRYPT_MAGIC_LEN, seed_len); /* create iv */ - bf_ofb_init(header + CRYPT_MAGIC_LEN, seed_len); - bf_key_init(buf->b_p_key); - } - } - *lenp = CRYPT_MAGIC_LEN + seed_len; + /* Using blowfish, add salt and seed. */ + salt = header + CRYPT_MAGIC_LEN; + seed = salt + salt_len; + sha2_seed(salt, salt_len, seed, seed_len); + bf_key_init(buf->b_p_key, salt, salt_len); + bf_ofb_init(seed, seed_len); + } + } + *lenp = CRYPT_MAGIC_LEN + salt_len + seed_len; return header; } +#endif /* FEAT_CRYPT */ + /* * Like fwrite() but crypt the bytes when 'key' is set. * Returns 1 if successful. */ size_t fwrite_crypt(buf, ptr, len, fp) - buf_T *buf; + buf_T *buf UNUSED; char_u *ptr; size_t len; FILE *fp; { +#ifdef FEAT_CRYPT char_u *copy; char_u small_buf[100]; size_t i; @@ -3020,6 +3042,9 @@ fwrite_crypt(buf, ptr, len, fp) if (copy != small_buf) vim_free(copy); return i; +#else + return fwrite(ptr, len, (size_t)1, fp); +#endif } /* @@ -3028,19 +3053,20 @@ fwrite_crypt(buf, ptr, len, fp) */ char_u * read_string_decrypt(buf, fd, len) - buf_T *buf; + buf_T *buf UNUSED; FILE *fd; int len; { char_u *ptr; ptr = read_string(fd, len); +#ifdef FEAT_CRYPT if (ptr != NULL || *buf->b_p_key != NUL) crypt_decode(ptr, len); +#endif return ptr; } -#endif /* FEAT_CRYPT */ #ifdef UNIX static void diff --git a/src/po/eo.po b/src/po/eo.po --- a/src/po/eo.po +++ b/src/po/eo.po @@ -23,14 +23,29 @@ msgid "" msgstr "" "Project-Id-Version: Vim(Esperanto)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-16 21:54+0100\n" -"PO-Revision-Date: 2010-02-16 21:56+0100\n" +"POT-Creation-Date: 2010-06-12 07:15+0200\n" +"PO-Revision-Date: 2010-06-12 08:24+0200\n" "Last-Translator: Dominique PELLÉ \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +msgid "E831: bf_key_init() called with empty password" +msgstr "E831: bf_key_init() alvokita kun malplena pasvorto" + +msgid "E820: sizeof(uint32_t) != 4" +msgstr "E820: sizeof(uint32_t) != 4" + +msgid "E817: Blowfish big/little endian use wrong" +msgstr "E817: Misuzo de pezkomenca/pezfina en blowfish" + +msgid "E818: sha256 test failed" +msgstr "E818: Testo de sha256 fiaskis" + +msgid "E819: Blowfish test failed" +msgstr "E819: Testo de blowfish fiaskis" + msgid "E82: Cannot allocate any buffer, exiting..." msgstr "E82: Ne eblas disponigi iun ajn bufron, nun eliras..." @@ -749,7 +764,6 @@ msgstr "daÅ­rigas en %s" msgid "E133: :return not inside a function" msgstr "E133: \":return\" ekster funkcio" -#, c-format msgid "" "\n" "# global variables:\n" @@ -1039,7 +1053,7 @@ msgid " (NOT FOUND)" msgstr " (NETROVITA)" msgid " (not supported)" -msgstr " (nesubtenita)" +msgstr " (nesubtenata)" msgid "[Deleted]" msgstr "[ForviÅita]" @@ -1070,8 +1084,8 @@ msgstr "Neniu kontrolpunkto estas difini msgid "%3d %s %s line %ld" msgstr "%3d %s %s linio %ld" -msgid "E750: First use :profile start " -msgstr "E750: Uzu unue \":profile start \"" +msgid "E750: First use \":profile start {fname}\"" +msgstr "E750: Uzu unue \":profile start {dosiernomo}\"" #, c-format msgid "Save changes to \"%s\"?" @@ -1097,10 +1111,6 @@ msgid "E165: Cannot go beyond last file" msgstr "E165: Ne eblas iri preter la lastan dosieron" #, c-format -msgid "E666: compiler not supported: %s" -msgstr "E666: kompililo nesubtenita: %s" - -#, c-format msgid "Searching for \"%s\" in \"%s\"" msgstr "Serĉado de \"%s\" en \"%s\"" @@ -1279,6 +1289,9 @@ msgstr "" msgid "E467: Custom completion requires a function argument" msgstr "E467: Uzula kompletigo bezonas funkcian argumenton" +msgid "unknown" +msgstr "nekonata" + #, c-format msgid "E185: Cannot find color scheme %s" msgstr "E185: Ne eblas trovi agordaron de koloroj %s" @@ -1645,6 +1658,9 @@ msgstr "Konverto kun 'charconvert' fiask msgid "can't read output of 'charconvert'" msgstr "ne eblas legi la eligon de 'charconvert'" +msgid "E821: File is encrypted with unknown method" +msgstr "E821: Dosiero estas ĉifrata per nekonata metodo" + msgid "E676: No matching autocommands for acwrite buffer" msgstr "E676: Neniu kongrua aÅ­tokomando por la bufro acwrite" @@ -1793,6 +1809,10 @@ msgid "1 character" msgstr "1 signo" #, c-format +msgid "%lld characters" +msgstr "%lld signoj" + +#, c-format msgid "%ld characters" msgstr "%ld signoj" @@ -2169,7 +2189,7 @@ msgstr "E671: Ne eblas trovi titolon de #, c-format msgid "E243: Argument not supported: \"-%s\"; Use the OLE version." -msgstr "E243: Ne subtenita argumento: \"-%s\"; Uzu la version OLE." +msgstr "E243: Ne subtenata argumento: \"-%s\"; Uzu la version OLE." msgid "E672: Unable to open window inside MDI application" msgstr "E672: Ne eblas malfermi fenestron interne de aplikaĵo MDI" @@ -2321,7 +2341,7 @@ msgstr "E618: \"%s\" ne estas dosiero de #, c-format msgid "E619: file \"%s\" is not a supported PostScript resource file" -msgstr "E619: \"%s\" ne estas subtenita dosiero de PostSkripta rimedo" +msgstr "E619: \"%s\" ne estas subtenata dosiero de PostSkripta rimedo" #, c-format msgid "E621: \"%s\" resource file has wrong version" @@ -2442,13 +2462,13 @@ msgid "E567: no cscope connections" msgstr "E567: neniu konekto al cscope" #, c-format +msgid "E469: invalid cscopequickfix flag %c for %c" +msgstr "E469: nevalida flago cscopequickfix %c de %c" + +#, c-format msgid "E259: no matches found for cscope query %s of %s" msgstr "E259: neniu kongruo trovita por serĉo per cscope %s de %s" -#, c-format -msgid "E469: invalid cscopequickfix flag %c for %c" -msgstr "E469: nevalida flago cscopequickfix %c de %c" - msgid "cscope commands:\n" msgstr "komandoj de cscope:\n" @@ -2880,6 +2900,9 @@ msgstr "Nevalida argumento por" msgid "%d files to edit\n" msgstr "%d redaktendaj dosieroj\n" +msgid "netbeans is not supported with this GUI\n" +msgstr "netbeans ne estas subtenata kun tiu grafika interfaco\n" + msgid "This Vim was not compiled with the diff feature." msgstr "Tiu Vim ne estis kompilita kun la kompara eblo." @@ -2971,7 +2994,7 @@ msgid "--\t\t\tOnly file names after thi msgstr "--\t\t\tNur dosiernomoj malantaÅ­ tio" msgid "--literal\t\tDon't expand wildcards" -msgstr "--literal\t\tNe ekspansii ĵokerojn" +msgstr "--literal\t\tNe malvolvi ĵokerojn" msgid "-register\t\tRegister this gvim for OLE" msgstr "-register\t\tRegistri tiun gvim al OLE" @@ -3397,7 +3420,7 @@ msgid "E296: Seek error in swap file wri msgstr "E296: Eraro de enpoziciigo dum skribo de permutodosiero .swp" msgid "E297: Write error in swap file" -msgstr "E297: Eraro de skribo en permutodosiero .swp" +msgstr "E297: Skriberaro en permutodosiero .swp" msgid "E300: Swap file already exists (symlink attack?)" msgstr "E300: Permutodosiero .swp jam ekzistas (ĉu atako per simbola ligilo?)" @@ -3537,14 +3560,20 @@ msgstr "" "\n" "(Indas konservi tiun dosieron per alia nomo\n" -msgid "and run diff with the original file to check for changes)\n" -msgstr "kaj lanĉi diff kun la originala dosiero por kontroli la ÅanÄojn)\n" +msgid "and run diff with the original file to check for changes)" +msgstr "kaj lanĉi diff kun la originala dosiero por kontroli la ÅanÄojn)" + +msgid "Recovery completed. Buffer contents equals file contents." +msgstr "" +"RestaÅ­ro finiÄis. La enhavo de la bufro samas kun la enhavo de la dosiero." msgid "" -"Delete the .swp file afterwards.\n" +"\n" +"You may want to delete the .swp file now.\n" "\n" msgstr "" -"Poste forviÅi la permutodosieron .swp.\n" +"\n" +"La dosiero .swp nun forviÅindas.\n" "\n" #. use msg() to start the scrolling properly @@ -4074,6 +4103,9 @@ msgstr "lego el kontaktoskatolo de Netbe msgid "E658: NetBeans connection lost for buffer %ld" msgstr "E658: Konekto de NetBeans perdita por bufro %ld" +msgid "E511: netbeans already connected" +msgstr "E511: nebeans jam konektata" + msgid "E505: " msgstr "E505: " @@ -4236,7 +4268,7 @@ msgid "E518: Unknown option" msgstr "E518: Nekonata opcio" msgid "E519: Option not supported" -msgstr "E519: Opcio ne subtenita" +msgstr "E519: Opcio ne subtenata" msgid "E520: Not allowed in a modeline" msgstr "E520: Ne permesita en reÄimlinio" @@ -4312,7 +4344,7 @@ msgid "E537: 'commentstring' must be emp msgstr "E537: 'commentstring' devas esti malplena aÅ­ enhavi %s" msgid "E538: No mouse support" -msgstr "E538: Neniu muso subtenita" +msgstr "E538: Neniu muso subtenata" msgid "E540: Unclosed expression sequence" msgstr "E540: '}' mankas" @@ -4637,7 +4669,7 @@ msgstr "E374: Mankas ] en formata ĉeno" #, c-format msgid "E375: Unsupported %%%c in format string" -msgstr "E375: Nesubtenita %%%c en formata ĉeno" +msgstr "E375: Nesubtenata %%%c en formata ĉeno" #, c-format msgid "E376: Invalid %%%c in format string prefix" @@ -4949,11 +4981,11 @@ msgid "E772: Spell file is for newer ver msgstr "E772: Literuma dosiero estas por pli nova versio de Vim" msgid "E770: Unsupported section in spell file" -msgstr "E770: Nesubtenita sekcio en literuma dosiero" +msgstr "E770: Nesubtenata sekcio en literuma dosiero" #, c-format msgid "Warning: region %s not supported" -msgstr "Averto: regiono %s ne subtenita" +msgstr "Averto: regiono %s ne subtenata" #, c-format msgid "Reading affix file %s ..." @@ -4965,11 +4997,11 @@ msgstr "Malsukceso dum konverto de vorto #, c-format msgid "Conversion in %s not supported: from %s to %s" -msgstr "Konverto en %s nesubtenita: de %s al %s" +msgstr "Konverto en %s nesubtenata: de %s al %s" #, c-format msgid "Conversion in %s not supported" -msgstr "Konverto en %s nesubtenita" +msgstr "Konverto en %s nesubtenata" #, c-format msgid "Invalid value for FLAG in %s line %d: %s" @@ -5189,7 +5221,7 @@ msgid "E751: Output file name must not h msgstr "E751: Nomo de eliga dosiero ne devas havi nomon de regiono" msgid "E754: Only up to 8 regions supported" -msgstr "E754: Nur 8 regionoj subtenitaj" +msgstr "E754: Nur 8 regionoj subtenataj" #, c-format msgid "E755: Invalid region in %s" @@ -5589,6 +5621,75 @@ msgstr "Uzis CUT_BUFFER0 anstataÅ­ malplenan apartigon" msgid "No undo possible; continue anyway" msgstr "Malfaro neebla; daÅ­rigi tamene" +#, c-format +msgid "E828: Cannot open undo file for writing: %s" +msgstr "E828: Ne eblas malfermi la malfaran dosieron por skribi: %s" + +#, c-format +msgid "E825: Corrupted undo file (%s): %s" +msgstr "E825: Difektita malfara dosiero (%s): %s" + +msgid "Cannot write undo file in any directory in 'undodir'" +msgstr "Ne eblis skribi malfaran dosieron en iu dosiero ajn de 'undodir'" + +#, c-format +msgid "Will not overwrite with undo file, cannot read: %s" +msgstr "Ne superkribos malfaran dosieron, ne eblis legi: %s" + +#, c-format +msgid "Will not overwrite, this is not an undo file: %s" +msgstr "Ne superskribos, tio ne estas malfara dosiero: %s" + +msgid "Skipping undo file write, nothing to undo" +msgstr "Preterpasas skribon de malfara dosiero, nenio por malfari" + +#, c-format +msgid "Writing undo file: %s" +msgstr "Skribas malfaran dosieron: %s" + +#, c-format +msgid "E829: write error in undo file: %s" +msgstr "E829: Skriberaro en malfara dosiero: %s" + +#, c-format +msgid "Not reading undo file, owner differs: %s" +msgstr "Ne legas malfaran dosieron, posedanto malsamas: %s" + +#, c-format +msgid "Reading undo file: %s" +msgstr "Legado de de malfara dosiero: %s" + +#, c-format +msgid "E822: Cannot open undo file for reading: %s" +msgstr "E822: Ne eblas malfermi malfaran dosieron por legi: %s" + +#, c-format +msgid "E823: Not an undo file: %s" +msgstr "E823: Ne estas malfara dosiero: %s" + +#, c-format +msgid "E832: Non-encrypted file has encrypted undo file: %s" +msgstr "E832: Ne ĉifrata dosiero havas ĉifratan malfaran dosieron: %s" + +#, c-format +msgid "E826: Undo file decryption failed: %s" +msgstr "E826: Malĉifrado de malfara dosiero fiaskis: %s" + +#, c-format +msgid "E827: Undo file is encrypted: %s" +msgstr "E827: Malfara dosiero estas ĉifrata: %s" + +#, c-format +msgid "E824: Incompatible undo file: %s" +msgstr "E824: Malkongrua malfara dosiero: %s" + +msgid "File contents changed, cannot use undo info" +msgstr "Enhavo de dosiero ÅanÄiÄis, ne eblas uzi malfarajn infomojn" + +#, c-format +msgid "Finished reading undo file %s" +msgstr "Finis legi malfaran dosieron %s" + msgid "Already at oldest change" msgstr "Jam al la plej malnova ÅanÄo" @@ -5596,8 +5697,8 @@ msgid "Already at newest change" msgstr "Jam al la plej nova ÅanÄo" #, c-format -msgid "Undo number %ld not found" -msgstr "Malfaro numero %ld netrovita" +msgid "E830: Undo number %ld not found" +msgstr "E830: Malfara numero %ld netrovita" msgid "E438: u_undo: line numbers wrong" msgstr "E438: u_undo: nevalidaj numeroj de linioj" @@ -6318,7 +6419,7 @@ msgid "E523: Not allowed here" msgstr "E523: Ne permesita tie" msgid "E359: Screen mode setting not supported" -msgstr "E359: ReÄimo de ekrano ne subtenita" +msgstr "E359: ReÄimo de ekrano ne subtenata" msgid "E49: Invalid scroll size" msgstr "E49: Nevalida grando de rulumo" @@ -6354,7 +6455,7 @@ msgid "E78: Unknown mark" msgstr "E78: Nekonata marko" msgid "E79: Cannot expand wildcards" -msgstr "E79: Ne eblas ekspansi ĵokerojn" +msgstr "E79: Ne eblas malvolvi ĵokerojn" msgid "E591: 'winheight' cannot be smaller than 'winminheight'" msgstr "E591: 'winheight' ne rajtas esti malpli ol 'winminheight'" diff --git a/src/po/fr.po b/src/po/fr.po --- a/src/po/fr.po +++ b/src/po/fr.po @@ -15,14 +15,29 @@ msgid "" msgstr "" "Project-Id-Version: Vim(Français)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-16 21:54+0100\n" -"PO-Revision-Date: 2010-02-16 22:10+0100\n" +"POT-Creation-Date: 2010-06-12 07:15+0200\n" +"PO-Revision-Date: 2010-06-12 07:56+0200\n" "Last-Translator: Dominique Pellé \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO_8859-15\n" "Content-Transfer-Encoding: 8bit\n" +msgid "E831: bf_key_init() called with empty password" +msgstr "E831: bf_key_init() appelée avec un mot de passe vide" + +msgid "E820: sizeof(uint32_t) != 4" +msgstr "E820: sizeof(uint32_t) != 4" + +msgid "E817: Blowfish big/little endian use wrong" +msgstr "E817: petit/gros boutisme incorrect dans blowfish" + +msgid "E818: sha256 test failed" +msgstr "E818: le test de sha256 a échoué" + +msgid "E819: Blowfish test failed" +msgstr "E819: le test de blowfish a échoué" + # AB - Il faut respecter l'esprit plus que la lettre. msgid "E82: Cannot allocate any buffer, exiting..." msgstr "E82: Aucun tampon ne peut être alloué, Vim doit s'arrêter" @@ -590,7 +605,7 @@ msgid "E723: Missing end of Dictionary ' msgstr "E723: Il manque '}' à la fin du Dictionnaire %s" msgid "E724: variable nested too deep for displaying" -msgstr "E724: variable trop imbriquée pour être afficher" +msgstr "E724: variable trop imbriquée pour être affichée" #, c-format msgid "E740: Too many arguments for function %s" @@ -840,7 +855,6 @@ msgstr "E133: :return en dehors d'une fo # AB - La version française est capitalisée pour être en accord avec les autres # commentaires enregistrés dans le fichier viminfo. -#, c-format msgid "" "\n" "# global variables:\n" @@ -1113,7 +1127,7 @@ msgstr "E148: :global doit être suivi par une expression régulière" # qui est utilisé. #, c-format msgid "Pattern found in every line: %s" -msgstr "Motif trouvé dans toutes les ligne : %s" +msgstr "Motif trouvé dans toutes les lignes : %s" # AB - Ne pas traduire le dollar. # AB - Ce message n'est volontairement pas traduit. En effet, il fait partie @@ -1251,8 +1265,8 @@ msgstr "Aucun point d'arrêt n'est défini" msgid "%3d %s %s line %ld" msgstr "%3d %s %s ligne %ld" -msgid "E750: First use :profile start " -msgstr "E750: Utilisez d'abord :profile start " +msgid "E750: First use \":profile start {fname}\"" +msgstr "E750: Utilisez d'abord \":profile start {nomfichier}\"" # AB - "changes to" est redondant et a été omis de la version française. #, c-format @@ -1465,6 +1479,9 @@ msgstr "E468: Seul le complètement personnalisé accepte un argument" msgid "E467: Custom completion requires a function argument" msgstr "E467: Le complètement personnalisé requiert une fonction en argument" +msgid "unknown" +msgstr "inconnu" + #, c-format msgid "E185: Cannot find color scheme %s" msgstr "E185: Impossible de trouver le jeu de couleurs %s" @@ -1732,7 +1749,7 @@ msgid "E198: cmd_pchar beyond the comman msgstr "E198: cmd_pchar au-delà de la longueur de la commande" msgid "E199: Active window or buffer deleted" -msgstr "E199: Tampon ou fenêtre active effacé(e)" +msgstr "E199: Fenêtre ou tampon actif effacé" msgid "E812: Autocommands changed buffer or buffer name" msgstr "E812: Des autocommandes on changé le tampon ou le nom du tampon" @@ -1830,6 +1847,9 @@ msgstr "La conversion avec 'charconvert' a échoué" msgid "can't read output of 'charconvert'" msgstr "Impossible de lire la sortie de 'charconvert'" +msgid "E821: File is encrypted with unknown method" +msgstr "E821: Le fichier est chiffré avec une méthode inconnue" + msgid "E676: No matching autocommands for acwrite buffer" msgstr "E676: Pas d'autocommande correspondante pour le tampon acwrite" @@ -1898,15 +1918,15 @@ msgstr "E512: Erreur de fermeture de fic msgid "E513: write error, conversion failed (make 'fenc' empty to override)" msgstr "" -"E513: Erreur d'écriture, échec de conversion (videz 'fenc' pour passer " -"outre)" +"E513: Erreur d'écriture, échec de conversion (videz 'fenc' pour passer outre)" #, c-format msgid "" "E513: write error, conversion failed in line %ld (make 'fenc' empty to " "override)" msgstr "" -"E513: Erreur d'écriture, échec de conversion à la ligne %ld (videz 'fenc' pour passer outre)" +"E513: Erreur d'écriture, échec de conversion à la ligne %ld (videz 'fenc' " +"pour passer outre)" msgid "E514: write error (file system full?)" msgstr "E514: erreur d'écriture (système de fichiers plein ?)" @@ -1987,6 +2007,10 @@ msgid "1 character" msgstr "1 caractère" #, c-format +msgid "%lld characters" +msgstr "%lld caractères" + +#, c-format msgid "%ld characters" msgstr "%ld caractères" @@ -2657,15 +2681,15 @@ msgstr "E623: Impossible d'engendrer le msgid "E567: no cscope connections" msgstr "E567: Aucune connexion cscope" +#, c-format +msgid "E469: invalid cscopequickfix flag %c for %c" +msgstr "E469: Drapeau cscopequickfix %c invalide pour %c" + # DB - todo #, c-format msgid "E259: no matches found for cscope query %s of %s" msgstr "E259: aucune correspondance trouvée pour la requête cscope %s de %s" -#, c-format -msgid "E469: invalid cscopequickfix flag %c for %c" -msgstr "E469: Drapeau cscopequickfix %c invalide pour %c" - msgid "cscope commands:\n" msgstr "commandes cscope :\n" @@ -3097,6 +3121,9 @@ msgstr "Argument invalide pour" msgid "%d files to edit\n" msgstr "%d fichiers à éditer\n" +msgid "netbeans is not supported with this GUI\n" +msgstr "netbeans n'est pas supporté avec cette interface graphique\n" + msgid "This Vim was not compiled with the diff feature." msgstr "Ce Vim n'a pas été compilé avec la fonctionnalité diff" @@ -3371,7 +3398,9 @@ msgid "--servername \tSend to/beco msgstr "--servername \tEnvoyer au/devenir le serveur Vim nommé " msgid "--startuptime \tWrite startup timing messages to " -msgstr "--startuptime \tÉcrire les messages d'horodatage au démarrage dans " +msgstr "" +"--startuptime \tÉcrire les messages d'horodatage au démarrage dans " +"" msgid "-i \t\tUse instead of .viminfo" msgstr "-i \t\tUtiliser au lieu du viminfo habituel" @@ -3759,15 +3788,20 @@ msgstr "" "\n" "(Vous voudrez peut-être enregistrer ce fichier sous un autre nom\n" -msgid "and run diff with the original file to check for changes)\n" -msgstr "" -"et lancer diff avec le fichier original pour repérer les changements)\n" +msgid "and run diff with the original file to check for changes)" +msgstr "" +"et lancer diff avec le fichier original pour repérer les changements)" + +msgid "Recovery completed. Buffer contents equals file contents." +msgstr "Récupération achevée. Le contenu du tampon est identique au contenu du fichier." msgid "" -"Delete the .swp file afterwards.\n" -"\n" -msgstr "" -"Effacez ensuite le fichier .swp.\n" +"\n" +"You may want to delete the .swp file now.\n" +"\n" +msgstr "" +"\n" +"Il est conseillé d'effacer maintenant le fichier .swp.\n" "\n" #. use msg() to start the scrolling properly @@ -4299,6 +4333,9 @@ msgstr "read sur la socket Netbeans" msgid "E658: NetBeans connection lost for buffer %ld" msgstr "E658: Connexion NetBeans perdue pour le tampon %ld" +msgid "E511: netbeans already connected" +msgstr "E511: netbeans déjà connecté" + msgid "E505: " msgstr "E505: " @@ -5376,7 +5413,7 @@ msgstr "Trop de régions dans %s ligne %d : %s" #, c-format msgid "/ line ignored in %s line %d: %s" -msgstr "Ligne / ignorée dans %s ligen %d : %s" +msgstr "Ligne / ignorée dans %s ligne %d : %s" #, c-format msgid "Invalid region nr in %s line %d: %s" @@ -5599,7 +5636,7 @@ msgid "E399: Not enough arguments: synta msgstr "E399: Pas assez d'arguments : syntax region %s" msgid "E400: No cluster specified" -msgstr "E400: Aucun grappe spécifiée" +msgstr "E400: Aucune grappe spécifiée" #, c-format msgid "E401: Pattern delimiter not found: %s" @@ -5834,6 +5871,77 @@ msgstr "CUT_BUFFER0 utilisé plutôt qu'une sélection vide" msgid "No undo possible; continue anyway" msgstr "Annulation impossible ; continuer" +#, c-format +msgid "E828: Cannot open undo file for writing: %s" +msgstr "E828: Impossible d'ouvrir le fichier d'annulations en écriture : %s" + +#, c-format +msgid "E825: Corrupted undo file (%s): %s" +msgstr "E825: Fichier d'annulations corrompu (%s) : %s" + +msgid "Cannot write undo file in any directory in 'undodir'" +msgstr "Impossible d'écrire le fichier d'annulations dans n'importe " +"quel répertoire de 'undodir'" + +#, c-format +msgid "Will not overwrite with undo file, cannot read: %s" +msgstr "Le fichier d'annulations de sera pas écrasé, impossible de lire : %s" + +#, c-format +msgid "Will not overwrite, this is not an undo file: %s" +msgstr "Fichier ne sera pas écrasé, ce n'est pas un fichier d'annulations : %s" + +msgid "Skipping undo file write, nothing to undo" +msgstr "Le fichier d'annulations n'est pas écrit, rien à annuler" + +#, c-format +msgid "Writing undo file: %s" +msgstr "Écriture du fichier d'annulations : %s" + +#, c-format +msgid "E829: write error in undo file: %s" +msgstr "E829: Erreur d'écriture dans le fichier d'annulations : %s" + +#, c-format +msgid "Not reading undo file, owner differs: %s" +msgstr "Le fichier d'annulations n'est pas lu, propriétaire différent : %s" + +#, c-format +msgid "Reading undo file: %s" +msgstr "Lecture du fichier d'annulations : %s..." + +#, c-format +msgid "E822: Cannot open undo file for reading: %s" +msgstr "E822: Impossible d'ouvrir le fichier d'annulations en lecture : %s" + +#, c-format +msgid "E823: Not an undo file: %s" +msgstr "E823: Ce n'est pas un fichier d'annulations : %s" + +#, c-format +msgid "E832: Non-encrypted file has encrypted undo file: %s" +msgstr "E832: Fichier non-chiffré a un fichier d'annulations chiffré : %s" + +#, c-format +msgid "E826: Undo file decryption failed: %s" +msgstr "E826: Déchiffrage du fichier d'annulation a échoué : %s" + +#, c-format +msgid "E827: Undo file is encrypted: %s" +msgstr "E827: Le fichier d'annulations est chiffré : %s" + +#, c-format +msgid "E824: Incompatible undo file: %s" +msgstr "E824: Fichier d'annulations incompatible : %s" + +msgid "File contents changed, cannot use undo info" +msgstr "Le contenu du fichier a changé, impossible d'utiliser les " +"informations d'annulation" + +#, c-format +msgid "Finished reading undo file %s" +msgstr "Fin de lecture du fichier d'annulations %s" + msgid "Already at oldest change" msgstr "Déjà à la modification la plus ancienne" @@ -5841,8 +5949,8 @@ msgid "Already at newest change" msgstr "Déjà à la modification la plus récente" #, c-format -msgid "Undo number %ld not found" -msgstr "L'annulation n° %ld introuvable" +msgid "E830: Undo number %ld not found" +msgstr "E830: Annulation n° %ld introuvable" msgid "E438: u_undo: line numbers wrong" msgstr "E438: u_undo : numéros de ligne erronés" @@ -6535,7 +6643,7 @@ msgid "E776: No location list" msgstr "E776: Aucune liste d'emplacements" msgid "E43: Damaged match string" -msgstr "E43: Le chaîne de recherche est endommagée" +msgstr "E43: La chaîne de recherche est endommagée" msgid "E44: Corrupted regexp program" msgstr "E44: L'automate de regexp est corrompu" @@ -6650,9 +6758,3 @@ msgstr "La recherche a atteint le HAUT, msgid "search hit BOTTOM, continuing at TOP" msgstr "La recherche a atteint le BAS, et continue en HAUT" - -#~ msgid "E569: maximum number of cscope connections reached" -#~ msgstr "E569: nombre maximum de connexions cscope atteint" - -#~ msgid "[NL found]" -#~ msgstr "[NL trouvé]" diff --git a/src/proto.h b/src/proto.h --- a/src/proto.h +++ b/src/proto.h @@ -149,7 +149,7 @@ void qsort __ARGS((void *base, size_t el # endif # include "regexp.pro" # include "screen.pro" -# ifdef FEAT_CRYPT +# if defined(FEAT_CRYPT) || defined(FEAT_PERSISTENT_UNDO) # include "sha256.pro" # endif # include "search.pro" diff --git a/src/proto/blowfish.pro b/src/proto/blowfish.pro --- a/src/proto/blowfish.pro +++ b/src/proto/blowfish.pro @@ -1,5 +1,5 @@ /* blowfish.c */ -void bf_key_init __ARGS((char_u *password)); +void bf_key_init __ARGS((char_u *password, char_u *salt, int salt_len)); void bf_ofb_init __ARGS((char_u *iv, int iv_len)); void bf_crypt_encode __ARGS((char_u *from, size_t len, char_u *to)); void bf_crypt_decode __ARGS((char_u *ptr, long len)); diff --git a/src/proto/sha256.pro b/src/proto/sha256.pro --- a/src/proto/sha256.pro +++ b/src/proto/sha256.pro @@ -2,7 +2,7 @@ void sha256_start __ARGS((context_sha256_T *ctx)); void sha256_update __ARGS((context_sha256_T *ctx, char_u *input, UINT32_T length)); void sha256_finish __ARGS((context_sha256_T *ctx, char_u digest[32])); -char_u *sha256_key __ARGS((char_u *buf)); +char_u *sha256_key __ARGS((char_u *buf, char_u *salt, int salt_len)); int sha256_self_test __ARGS((void)); -void sha2_seed __ARGS((char_u header[], int header_len)); +void sha2_seed __ARGS((char_u header[], int header_len, char_u salt[], int salt_len)); /* vim: set ft=c : */ diff --git a/src/sha256.c b/src/sha256.c --- a/src/sha256.c +++ b/src/sha256.c @@ -23,9 +23,6 @@ #if defined(FEAT_CRYPT) || defined(FEAT_PERSISTENT_UNDO) static void sha256_process __ARGS((context_sha256_T *ctx, char_u data[64])); -static char_u *sha256_bytes __ARGS((char_u *buf, int buflen)); -static unsigned int get_some_time __ARGS((void)); - #define GET_UINT32(n, b, i) \ { \ @@ -271,14 +268,22 @@ sha256_finish(ctx, digest) PUT_UINT32(ctx->state[6], digest, 24); PUT_UINT32(ctx->state[7], digest, 28); } +#endif /* FEAT_CRYPT || FEAT_PERSISTENT_UNDO */ + +#if defined(FEAT_CRYPT) || defined(PROTO) +static char_u *sha256_bytes __ARGS((char_u *buf, int buf_len, char_u *salt, int salt_len)); +static unsigned int get_some_time __ARGS((void)); /* - * Returns hex digest of "buf[buflen]" in a static array. + * Returns hex digest of "buf[buf_len]" in a static array. + * if "salt" is not NULL also do "salt[salt_len]". */ static char_u * -sha256_bytes(buf, buflen) +sha256_bytes(buf, buf_len, salt, salt_len) char_u *buf; - int buflen; + int buf_len; + char_u *salt; + int salt_len; { char_u sha256sum[32]; static char_u hexit[65]; @@ -288,7 +293,9 @@ sha256_bytes(buf, buflen) sha256_self_test(); sha256_start(&ctx); - sha256_update(&ctx, buf, buflen); + sha256_update(&ctx, buf, buf_len); + if (salt != NULL) + sha256_update(&ctx, salt, salt_len); sha256_finish(&ctx, sha256sum); for (j = 0; j < 32; j++) sprintf((char *)hexit + j * 2, "%02x", sha256sum[j]); @@ -300,14 +307,16 @@ sha256_bytes(buf, buflen) * Returns sha256(buf) as 64 hex chars in static array. */ char_u * -sha256_key(buf) +sha256_key(buf, salt, salt_len) char_u *buf; + char_u *salt; + int salt_len; { /* No passwd means don't encrypt */ if (buf == NULL || *buf == NUL) return (char_u *)""; - return sha256_bytes(buf, (int)STRLEN(buf)); + return sha256_bytes(buf, (int)STRLEN(buf), salt, salt_len); } /* @@ -354,7 +363,8 @@ sha256_self_test() if (i < 2) { hexit = sha256_bytes((char_u *)sha_self_test_msg[i], - (int)STRLEN(sha_self_test_msg[i])); + (int)STRLEN(sha_self_test_msg[i]), + NULL, 0); STRCPY(output, hexit); } else @@ -380,29 +390,32 @@ sha256_self_test() static unsigned int get_some_time() { -#ifdef HAVE_GETTIMEOFDAY +# ifdef HAVE_GETTIMEOFDAY struct timeval tv; /* Using usec makes it less predictable. */ gettimeofday(&tv, NULL); return (unsigned int)(tv.tv_sec + tv.tv_usec); -#else +# else return (unsigned int)time(NULL); -#endif +# endif } /* * set header = sha2_seed(random_data); */ void -sha2_seed(header, header_len) - char_u header[]; +sha2_seed(header, header_len, salt, salt_len) + char_u *header; int header_len; + char_u *salt; + int salt_len; { int i; static char_u random_data[1000]; char_u sha256sum[32]; context_sha256_T ctx; + srand(get_some_time()); for (i = 0; i < (int)sizeof(random_data) - 1; i++) @@ -411,8 +424,13 @@ sha2_seed(header, header_len) sha256_update(&ctx, (char_u *)random_data, sizeof(random_data)); sha256_finish(&ctx, sha256sum); + /* put first block into header. */ for (i = 0; i < header_len; i++) header[i] = sha256sum[i % sizeof(sha256sum)]; + + /* put remaining block into salt. */ + for (i = 0; i < salt_len; i++) + salt[i] = sha256sum[(i + header_len) % sizeof(sha256sum)]; } -#endif /* FEAT_CRYPT || FEAT_PERSISTENT_UNDO */ +#endif /* FEAT_CRYPT */ diff --git a/src/testdir/test71.in b/src/testdir/test71.in --- a/src/testdir/test71.in +++ b/src/testdir/test71.in @@ -71,5 +71,5 @@ VimCrypt~01!lV'Þ}Mg ê£V©çE#3Ž2Ué— end of cm=0 bytes start of cm=1 bytes -VimCrypt~02!¨Ò9ZšÙ¢èì”F¼èÃ[,ì”F¼ƒ€z¼Ö軂 y¾Ô( +VimCrypt~02!k)¾—#ÝSœõ=ºàÈ#¥M´†JÃAÍ¥M´†!€›õáÒ‚˜÷ Ú end of cm=1 bytes