summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2010-06-13 05:20:42 +0200
committerBram Moolenaar <Bram@vim.org>2010-06-13 05:20:42 +0200
commit80794b1ce64b394fe6a1355ddd7159d1c97d6f48 (patch)
treebdd1db9f6f3d6934e8a3862ee2116f42d99db27b
parent46f9d4960161284182b11240783f427816700ab1 (diff)
downloadvim-git-80794b1ce64b394fe6a1355ddd7159d1c97d6f48.tar.gz
Added salt to blowfish encryption.
-rw-r--r--runtime/doc/options.txt2
-rw-r--r--runtime/doc/todo.txt4
-rw-r--r--runtime/tutor/tutor.eo14
-rw-r--r--runtime/tutor/tutor.eo.utf-814
-rw-r--r--runtime/tutor/tutor.fr22
-rw-r--r--runtime/tutor/tutor.fr.utf-822
-rw-r--r--src/blowfish.c42
-rw-r--r--src/fileio.c68
-rw-r--r--src/po/eo.po169
-rw-r--r--src/po/fr.po164
-rw-r--r--src/proto.h2
-rw-r--r--src/proto/blowfish.pro2
-rw-r--r--src/proto/sha256.pro4
-rw-r--r--src/sha256.c50
-rw-r--r--src/testdir/test71.in2
15 files changed, 425 insertions, 156 deletions
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index c021edfc4..e63bcdb73 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -7363,7 +7363,7 @@ A jump table for the options with a short description can be found at |Q_op|.
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
index 605c3cbe1..f898c0297 100644
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -30,9 +30,6 @@ be worked on, but only if you sponsor Vim development. See |sponsor|.
*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
index 2ac06893c..958d393d2 100644
--- 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 provu memori, lernu per la uzo.
!! 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 <Enenklavo>
'vim' estas la komando por lanæi la redaktilon Vim, 'tutor' estas la
@@ -159,7 +160,8 @@ RIMARKO: Trairante la instruilon, ne provu memori, lernu per la uzo.
4. Konservu la dosieron kun þanøoj kaj eliru el Vim per: :wq <Enenklavo>
- 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 komandoj. Nur provu premi CTRL-D kaj
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
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 komandoj. Nur provu premi CTRL-D kaj
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
index 5adad3913..febf2f983 100644
--- 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 provu memori, lernu per la uzo.
!! 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 <Enenklavo>
'vim' estas la komando por lanĉi la redaktilon Vim, 'tutor' estas la
@@ -159,7 +160,8 @@ RIMARKO: Trairante la instruilon, ne provu memori, lernu per la uzo.
4. Konservu la dosieron kun ÅanÄoj kaj eliru el Vim per: :wq <Enenklavo>
- 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 komandoj. Nur provu premi CTRL-D kaj
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
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 komandoj. Nur provu premi CTRL-D kaj
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
index e32175457..abb53d18f 100644
--- 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! <Entrée> annule tous le changements que vous avez fait. Dans
+NOTE : :q! <Entrée> 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 place ensuite en mode Insertion.
---> 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 d'une commande externe. Par exemple,
---> 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 mode Insertion, mais tous les
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 uniquement pour une recherche, utilisez
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 uniquement pour une recherche, utilisez
7 Appuyez <TAB>. 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 <TAB>. 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
index 1b015105d..24d8bfa00 100644
--- 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 utilisan
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! <Entrée> annule tous le changements que vous avez fait. Dans
+NOTE : :q! <Entrée> 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 place ensuite en mode Insertion.
---> 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 d'une commande externe. Par exemple,
---> 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 mode Insertion, mais tous les
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 uniquement pour une recherche, utilisez
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 uniquement pour une recherche, utilisez
7 Appuyez <TAB>. 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 <TAB>. 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
index d47f46305..f0b97b7b9 100644
--- 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
index bc629f39e..bfc11d0d9 100644
--- 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, filesizep, newfile, did_ask)
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];
+ int salt_len = crypt_salt_len[buf->b_p_cm];
+ char_u *salt;
+ char_u *seed;
- header = alloc_clear(CRYPT_MAGIC_LEN + CRYPT_SEED_LEN_MAX + 2);
+ 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);
+ /* 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 + 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
index 7ea2e69dd..23543ebda 100644
--- 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É <dominique.pelle@gmail.com>\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 difinita"
msgid "%3d %s %s line %ld"
msgstr "%3d %s %s linio %ld"
-msgid "E750: First use :profile start <fname>"
-msgstr "E750: Uzu unue \":profile start <dosiernomo>\""
+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' fiaskis"
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 fenestro \"%s\""
#, 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 PostSkripta rimedo"
#, 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 "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"
+#, 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"
+
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 this"
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 write"
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 Netbeans"
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 empty or contain %s"
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 version of Vim"
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 en %s linio %d: %s"
#, 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 have region name"
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
index b341489c8..0c6f69b24 100644
--- 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é <dominique.pelle@gmail.com>\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 '}': %s"
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 fonction"
# 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 <fname>"
-msgstr "E750: Utilisez d'abord :profile start <nomfichier>"
+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 command length"
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 fichier"
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 processus cscope"
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 <name>\tSend to/become the Vim server <name>"
msgstr "--servername <nom>\tEnvoyer au/devenir le serveur Vim nommé <nom>"
msgid "--startuptime <file>\tWrite startup timing messages to <file>"
-msgstr "--startuptime <fich>\tÉcrire les messages d'horodatage au démarrage dans <fich>"
+msgstr ""
+"--startuptime <fich>\tÉcrire les messages d'horodatage au démarrage dans "
+"<fich>"
msgid "-i <viminfo>\t\tUse <viminfo> instead of .viminfo"
msgstr "-i <viminfo>\t\tUtiliser <viminfo> 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"
+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)\n"
+"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"
+"You may want to delete the .swp file now.\n"
"\n"
msgstr ""
-"Effacez ensuite le fichier .swp.\n"
+"\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: syntax region %s"
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, et continue en BAS"
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
index 2b248a5e3..331365615 100644
--- a/src/proto.h
+++ b/src/proto.h
@@ -149,7 +149,7 @@ void qsort __ARGS((void *base, size_t elm_count, size_t elm_size, int (*cmp)(con
# 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
index da3560e78..ba18176fb 100644
--- 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
index c5237f439..651a0a0af 100644
--- 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
index 0f9585623..c24e8b8f8 100644
--- 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
index 717b66026..56dee5574 100644
--- 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