# # add_file "botan/des.cpp" # # add_file "botan/des.h" # # add_file "botan/des_tab.cpp" # # add_file "botan/pkcs5.cpp" # # add_file "botan/pkcs5.h" # # patch "ChangeLog" # from [e3cb4410fbf089f5ba258314b15d2fb0494ec871] # to [685c474f29d68ac662b431cc8e412343789e1e6d] # # patch "Makefile.am" # from [c3ca41e70b719d5d345383a893a7d4ba7823160c] # to [09c4fb85c475a9a65d1367de3a4a9ce7c262f081] # # patch "botan/algolist.cpp" # from [e73a701e948afdcb723a29f89e88dbc793764d76] # to [1f97304bc111e2f3ea06915975b63ec1c359b090] # # patch "botan/des.cpp" # from [] # to [8b763d83ca4d1febab40f06292fdbfdff2ba8142] # # patch "botan/des.h" # from [] # to [769c08188bd776f17a84c887ef1aba7d19e18c63] # # patch "botan/des_tab.cpp" # from [] # to [9ce42b4de43fb7cf599b1bad7c69b0e167543656] # # patch "botan/pkcs5.cpp" # from [] # to [cdf709aac78dc4cf416125512278e117589bf8e6] # # patch "botan/pkcs5.h" # from [] # to [660436fb11b2f632b3dba051539cf93d023ffaa6] # # patch "commands.cc" # from [5e3307a36823404a734e65224da9966461d8e382] # to [10b5b48c3a9202ae481022dd03ddc778343ab16d] # # patch "database.cc" # from [a1452325ac8f6aef8804ec53785ecbac5ee4cea6] # to [2859331985e8687cd337886ff960d6ce0d6be7ae] # # patch "keys.cc" # from [0a144d76856af7fe643c529d9d2536a197fe15cb] # to [b43ff403dae506d2958e518965ed12c57dc1d93a] # # patch "keys.hh" # from [ec2036295cdf27e6ac7994fb9952360c364221f6] # to [37f54b83f95952ba438899513ca0991cc63d4d10] # # patch "packet.cc" # from [f4ca19df46ef590bb112762f222325ae2ddb98be] # to [ef8866949aab6ca49284575de0c4c63494efe3d1] # # patch "po/fr.po" # from [2385bcc193a5aa321863cda06106737be42a1bee] # to [d7aef69713125651e61b6d37b9377ae69a3fb561] # # patch "sanity.cc" # from [d43cf000a18c156b97527e0724635b050159d16d] # to [6a638085b01e1178573585233adc5eb5848b5207] # # patch "vocab.cc" # from [cebf734fb6a83a66665786e2c1486d4934137066] # to [023a5cc51fde8562c2d21f7b06fb11e0cf68b672] # # patch "vocab.hh" # from [f14bf372280ec9b5bc886598249ec518dfa114d3] # to [06422180e56f9298d0c8c91387d10c7db8283199] # # patch "vocab_terms.hh" # from [9abc8225074b278d3b7a57c291ab5d8fd0a98ea6] # to [64c7b6e84baa98c36e9811817b548ba4adecb8d2] # ======================================================================== --- ChangeLog e3cb4410fbf089f5ba258314b15d2fb0494ec871 +++ ChangeLog 685c474f29d68ac662b431cc8e412343789e1e6d @@ -1,3 +1,12 @@ +2005-09-26 Matt Johnston + + * commands.cc, keys.cc, others: use standard + "PBE-PKCS5v20(SHA-1,TripleDES/CBC)" encoding rather than + raw arc4. extract_keys will re-encode keys, still + need to work on packet.cc encoding. + * botan/{des*,pkcs5*,algolist.cpp}: required files + from Botan 1.4.6 + 2005-09-25 Timothy Brownawell Move private keys outside the database. ======================================================================== --- Makefile.am c3ca41e70b719d5d345383a893a7d4ba7823160c +++ Makefile.am 09c4fb85c475a9a65d1367de3a4a9ce7c262f081 @@ -115,6 +115,7 @@ botan/x509_crl.cpp botan/x509_key.cpp botan/x509_obj.cpp \ botan/x509cert.cpp botan/x509find.cpp botan/x509opt.cpp \ botan/x509self.cpp botan/x509stor.cpp botan/x917_rng.cpp \ + botan/des.cpp botan/des_tab.cpp botan/pkcs5.cpp \ \ botan/aes.h botan/botan.h botan/def_eng.h botan/es_win32.h \ botan/lookup.h botan/omac.h botan/randpool.h botan/version.h \ @@ -146,7 +147,7 @@ botan/data_src.h botan/es_egd.h botan/look_add.h botan/ofb.h \ botan/pk_util.h botan/ui.h botan/blinding.h botan/defalloc.h \ botan/es_file.h botan/look_pk.h botan/oids.h botan/pubkey.h \ - botan/util.h + botan/util.h botan/des.h botan/pkcs5.h BOOST_SANDBOX_SOURCES = \ ======================================================================== --- botan/algolist.cpp e73a701e948afdcb723a29f89e88dbc793764d76 +++ botan/algolist.cpp 1f97304bc111e2f3ea06915975b63ec1c359b090 @@ -6,6 +6,7 @@ #include #include +#include #include @@ -15,6 +16,7 @@ #include #include +#include namespace Botan { @@ -75,6 +77,9 @@ HANDLE_TYPE_NO_ARGS("AES-128", AES_128); HANDLE_TYPE_NO_ARGS("AES-192", AES_192); HANDLE_TYPE_NO_ARGS("AES-256", AES_256); + HANDLE_TYPE_NO_ARGS("DES", DES); + HANDLE_TYPE_NO_ARGS("DESX", DESX); + HANDLE_TYPE_NO_ARGS("TripleDES", TripleDES); return 0; } @@ -136,6 +141,8 @@ return 0; const std::string algo_name = deref_alias(name[0]); + HANDLE_TYPE_ONE_STRING("PBKDF1", PKCS5_PBKDF1); + HANDLE_TYPE_ONE_STRING("PBKDF2", PKCS5_PBKDF2); return 0; } ======================================================================== --- botan/des.cpp +++ botan/des.cpp 8b763d83ca4d1febab40f06292fdbfdff2ba8142 @@ -0,0 +1,256 @@ +/************************************************* +* DES Source File * +* (C) 1999-2005 The Botan Project * +*************************************************/ + +#include + +namespace Botan { + +/************************************************* +* DES Encryption * +*************************************************/ +void DES::enc(const byte in[], byte out[]) const + { + u32bit left = make_u32bit(in[0], in[1], in[2], in[3]), + right = make_u32bit(in[4], in[5], in[6], in[7]); + IP(left, right); round(left, right, 0); round(right, left, 1); + round(left, right, 2); round(right, left, 3); round(left, right, 4); + round(right, left, 5); round(left, right, 6); round(right, left, 7); + round(left, right, 8); round(right, left, 9); round(left, right,10); + round(right, left,11); round(left, right,12); round(right, left,13); + round(left, right,14); round(right, left,15); FP(left, right); + out[0] = get_byte(0, right); out[1] = get_byte(1, right); + out[2] = get_byte(2, right); out[3] = get_byte(3, right); + out[4] = get_byte(0, left); out[5] = get_byte(1, left); + out[6] = get_byte(2, left); out[7] = get_byte(3, left); + } + +/************************************************* +* DES Decryption * +*************************************************/ +void DES::dec(const byte in[], byte out[]) const + { + u32bit left = make_u32bit(in[0], in[1], in[2], in[3]), + right = make_u32bit(in[4], in[5], in[6], in[7]); + IP(left, right); round(left, right,15); round(right, left,14); + round(left, right,13); round(right, left,12); round(left, right,11); + round(right, left,10); round(left, right, 9); round(right, left, 8); + round(left, right, 7); round(right, left, 6); round(left, right, 5); + round(right, left, 4); round(left, right, 3); round(right, left, 2); + round(left, right, 1); round(right, left, 0); FP(left, right); + out[0] = get_byte(0, right); out[1] = get_byte(1, right); + out[2] = get_byte(2, right); out[3] = get_byte(3, right); + out[4] = get_byte(0, left); out[5] = get_byte(1, left); + out[6] = get_byte(2, left); out[7] = get_byte(3, left); + } + +/************************************************* +* DES Round * +*************************************************/ +void DES::round(u32bit& left, u32bit right, u32bit n) const + { + u32bit T1 = rotate_right(right, 4) ^ round_key[2*n], + T2 = right ^ round_key[2*n + 1]; + left ^= SPBOX1[get_byte(0, T1)] ^ SPBOX2[get_byte(0, T2)] ^ + SPBOX3[get_byte(1, T1)] ^ SPBOX4[get_byte(1, T2)] ^ + SPBOX5[get_byte(2, T1)] ^ SPBOX6[get_byte(2, T2)] ^ + SPBOX7[get_byte(3, T1)] ^ SPBOX8[get_byte(3, T2)]; + } + +/************************************************* +* DES Initial Permutation * +*************************************************/ +void DES::IP(u32bit& L, u32bit& R) + { + u64bit T = (IPTAB1[get_byte(0, L)] ) | (IPTAB1[get_byte(1, L)] << 1) | + (IPTAB1[get_byte(2, L)] << 2) | (IPTAB1[get_byte(3, L)] << 3) | + (IPTAB1[get_byte(0, R)] << 4) | (IPTAB1[get_byte(1, R)] << 5) | + (IPTAB1[get_byte(2, R)] << 6) | (IPTAB2[get_byte(3, R)] ); + L = (u32bit)((T >> 32) & 0xFFFFFFFF); + R = (u32bit)((T ) & 0xFFFFFFFF); + } + +/************************************************* +* DES Final Permutation * +*************************************************/ +void DES::FP(u32bit& L, u32bit& R) + { + u64bit T = (FPTAB1[get_byte(0, L)] << 5) | (FPTAB1[get_byte(1, L)] << 3) | + (FPTAB1[get_byte(2, L)] << 1) | (FPTAB2[get_byte(3, L)] << 1) | + (FPTAB1[get_byte(0, R)] << 4) | (FPTAB1[get_byte(1, R)] << 2) | + (FPTAB1[get_byte(2, R)] ) | (FPTAB2[get_byte(3, R)] ); + L = (u32bit)((T >> 32) & 0xFFFFFFFF); + R = (u32bit)((T ) & 0xFFFFFFFF); + } + +/************************************************* +* DES Raw Encryption * +*************************************************/ +void DES::raw_encrypt(u32bit& left, u32bit& right) const + { + round(left, right, 0); round(right, left, 1); round(left, right, 2); + round(right, left, 3); round(left, right, 4); round(right, left, 5); + round(left, right, 6); round(right, left, 7); round(left, right, 8); + round(right, left, 9); round(left, right,10); round(right, left,11); + round(left, right,12); round(right, left,13); round(left, right,14); + round(right, left,15); + } + +/************************************************* +* DES Raw Decryption * +*************************************************/ +void DES::raw_decrypt(u32bit& left, u32bit& right) const + { + round(left, right,15); round(right, left,14); round(left, right,13); + round(right, left,12); round(left, right,11); round(right, left,10); + round(left, right, 9); round(right, left, 8); round(left, right, 7); + round(right, left, 6); round(left, right, 5); round(right, left, 4); + round(left, right, 3); round(right, left, 2); round(left, right, 1); + round(right, left, 0); + } + +/************************************************* +* DES Key Schedule * +*************************************************/ +void DES::key(const byte key[], u32bit) + { + static const byte ROT[16] = { 1, 1, 2, 2, 2, 2, 2, 2, + 1, 2, 2, 2, 2, 2, 2, 1 }; + u32bit C = ((key[7] & 0x80) << 20) | ((key[6] & 0x80) << 19) | + ((key[5] & 0x80) << 18) | ((key[4] & 0x80) << 17) | + ((key[3] & 0x80) << 16) | ((key[2] & 0x80) << 15) | + ((key[1] & 0x80) << 14) | ((key[0] & 0x80) << 13) | + ((key[7] & 0x40) << 13) | ((key[6] & 0x40) << 12) | + ((key[5] & 0x40) << 11) | ((key[4] & 0x40) << 10) | + ((key[3] & 0x40) << 9) | ((key[2] & 0x40) << 8) | + ((key[1] & 0x40) << 7) | ((key[0] & 0x40) << 6) | + ((key[7] & 0x20) << 6) | ((key[6] & 0x20) << 5) | + ((key[5] & 0x20) << 4) | ((key[4] & 0x20) << 3) | + ((key[3] & 0x20) << 2) | ((key[2] & 0x20) << 1) | + ((key[1] & 0x20) ) | ((key[0] & 0x20) >> 1) | + ((key[7] & 0x10) >> 1) | ((key[6] & 0x10) >> 2) | + ((key[5] & 0x10) >> 3) | ((key[4] & 0x10) >> 4); + u32bit D = ((key[7] & 0x02) << 26) | ((key[6] & 0x02) << 25) | + ((key[5] & 0x02) << 24) | ((key[4] & 0x02) << 23) | + ((key[3] & 0x02) << 22) | ((key[2] & 0x02) << 21) | + ((key[1] & 0x02) << 20) | ((key[0] & 0x02) << 19) | + ((key[7] & 0x04) << 17) | ((key[6] & 0x04) << 16) | + ((key[5] & 0x04) << 15) | ((key[4] & 0x04) << 14) | + ((key[3] & 0x04) << 13) | ((key[2] & 0x04) << 12) | + ((key[1] & 0x04) << 11) | ((key[0] & 0x04) << 10) | + ((key[7] & 0x08) << 8) | ((key[6] & 0x08) << 7) | + ((key[5] & 0x08) << 6) | ((key[4] & 0x08) << 5) | + ((key[3] & 0x08) << 4) | ((key[2] & 0x08) << 3) | + ((key[1] & 0x08) << 2) | ((key[0] & 0x08) << 1) | + ((key[3] & 0x10) >> 1) | ((key[2] & 0x10) >> 2) | + ((key[1] & 0x10) >> 3) | ((key[0] & 0x10) >> 4); + for(u32bit j = 0; j != 16; j++) + { + C = ((C << ROT[j]) | (C >> (28-ROT[j]))) & 0x0FFFFFFF; + D = ((D << ROT[j]) | (D >> (28-ROT[j]))) & 0x0FFFFFFF; + round_key[2*j ] = ((C & 0x00000010) << 22) | ((C & 0x00000800) << 17) | + ((C & 0x00000020) << 16) | ((C & 0x00004004) << 15) | + ((C & 0x00000200) << 11) | ((C & 0x00020000) << 10) | + ((C & 0x01000000) >> 6) | ((C & 0x00100000) >> 4) | + ((C & 0x00010000) << 3) | ((C & 0x08000000) >> 2) | + ((C & 0x00800000) << 1) | ((D & 0x00000010) << 8) | + ((D & 0x00000002) << 7) | ((D & 0x00000001) << 2) | + ((D & 0x00000200) ) | ((D & 0x00008000) >> 2) | + ((D & 0x00000088) >> 3) | ((D & 0x00001000) >> 7) | + ((D & 0x00080000) >> 9) | ((D & 0x02020000) >> 14) | + ((D & 0x00400000) >> 21); + round_key[2*j+1] = ((C & 0x00000001) << 28) | ((C & 0x00000082) << 18) | + ((C & 0x00002000) << 14) | ((C & 0x00000100) << 10) | + ((C & 0x00001000) << 9) | ((C & 0x00040000) << 6) | + ((C & 0x02400000) << 4) | ((C & 0x00008000) << 2) | + ((C & 0x00200000) >> 1) | ((C & 0x04000000) >> 10) | + ((D & 0x00000020) << 6) | ((D & 0x00000100) ) | + ((D & 0x00000800) >> 1) | ((D & 0x00000040) >> 3) | + ((D & 0x00010000) >> 4) | ((D & 0x00000400) >> 5) | + ((D & 0x00004000) >> 10) | ((D & 0x04000000) >> 13) | + ((D & 0x00800000) >> 14) | ((D & 0x00100000) >> 18) | + ((D & 0x01000000) >> 24) | ((D & 0x08000000) >> 26); + } + } + +/************************************************* +* TripleDES Encryption * +*************************************************/ +void TripleDES::enc(const byte in[], byte out[]) const + { + u32bit left = make_u32bit(in[0], in[1], in[2], in[3]), + right = make_u32bit(in[4], in[5], in[6], in[7]); + DES::IP(left, right); + des1.raw_encrypt(left, right); + des2.raw_decrypt(right, left); + des3.raw_encrypt(left, right); + DES::FP(left, right); + out[0] = get_byte(0, right); out[1] = get_byte(1, right); + out[2] = get_byte(2, right); out[3] = get_byte(3, right); + out[4] = get_byte(0, left); out[5] = get_byte(1, left); + out[6] = get_byte(2, left); out[7] = get_byte(3, left); + } + +/************************************************* +* TripleDES Decryption * +*************************************************/ +void TripleDES::dec(const byte in[], byte out[]) const + { + u32bit left = make_u32bit(in[0], in[1], in[2], in[3]), + right = make_u32bit(in[4], in[5], in[6], in[7]); + DES::IP(left, right); + des3.raw_decrypt(left, right); + des2.raw_encrypt(right, left); + des1.raw_decrypt(left, right); + DES::FP(left, right); + out[0] = get_byte(0, right); out[1] = get_byte(1, right); + out[2] = get_byte(2, right); out[3] = get_byte(3, right); + out[4] = get_byte(0, left); out[5] = get_byte(1, left); + out[6] = get_byte(2, left); out[7] = get_byte(3, left); + } + +/************************************************* +* TripleDES Key Schedule * +*************************************************/ +void TripleDES::key(const byte key[], u32bit length) + { + des1.set_key(key, 8); + des2.set_key(key + 8, 8); + if(length == 24) + des3.set_key(key + 16, 8); + else + des3.set_key(key, 8); + } + +/************************************************* +* DESX Encryption * +*************************************************/ +void DESX::enc(const byte in[], byte out[]) const + { + xor_buf(out, in, K1.begin(), BLOCK_SIZE); + des.encrypt(out); + xor_buf(out, K2.begin(), BLOCK_SIZE); + } + +/************************************************* +* DESX Decryption * +*************************************************/ +void DESX::dec(const byte in[], byte out[]) const + { + xor_buf(out, in, K2.begin(), BLOCK_SIZE); + des.decrypt(out); + xor_buf(out, K1.begin(), BLOCK_SIZE); + } + +/************************************************* +* DESX Key Schedule * +*************************************************/ +void DESX::key(const byte key[], u32bit) + { + K1.copy(key, 8); + des.set_key(key + 8, 8); + K2.copy(key + 16, 8); + } + +} ======================================================================== --- botan/des.h +++ botan/des.h 769c08188bd776f17a84c887ef1aba7d19e18c63 @@ -0,0 +1,76 @@ +/************************************************* +* DES Header File * +* (C) 1999-2005 The Botan Project * +*************************************************/ + +#ifndef BOTAN_DES_H__ +#define BOTAN_DES_H__ + +#include + +namespace Botan { + +/************************************************* +* DES * +*************************************************/ +class DES : public BlockCipher + { + public: + void clear() throw() { round_key.clear(); } + std::string name() const { return "DES"; } + BlockCipher* clone() const { return new DES; } + DES() : BlockCipher(8, 8) {} + private: + friend class TripleDES; + void enc(const byte[], byte[]) const; + void dec(const byte[], byte[]) const; + void key(const byte[], u32bit); + void raw_encrypt(u32bit&, u32bit&) const; + void raw_decrypt(u32bit&, u32bit&) const; + void round(u32bit&, u32bit, u32bit) const; + static void IP(u32bit&, u32bit&); + static void FP(u32bit&, u32bit&); + static const u32bit SPBOX1[256], SPBOX2[256], SPBOX3[256], SPBOX4[256], + SPBOX5[256], SPBOX6[256], SPBOX7[256], SPBOX8[256]; + static const u64bit IPTAB1[256], IPTAB2[256], FPTAB1[256], FPTAB2[256]; + SecureBuffer round_key; + }; + +/************************************************* +* Triple DES * +*************************************************/ +class TripleDES : public BlockCipher + { + public: + void clear() throw() { des1.clear(); des2.clear(); des3.clear(); } + std::string name() const { return "TripleDES"; } + BlockCipher* clone() const { return new TripleDES; } + TripleDES() : BlockCipher(8, 16, 24, 8) {} + private: + void enc(const byte[], byte[]) const; + void dec(const byte[], byte[]) const; + void key(const byte[], u32bit); + DES des1, des2, des3; + }; + +/************************************************* +* DESX * +*************************************************/ +class DESX : public BlockCipher + { + public: + void clear() throw() { des.clear(); K1.clear(); K2.clear(); } + std::string name() const { return "DESX"; } + BlockCipher* clone() const { return new DESX; } + DESX() : BlockCipher(8, 24) {} + private: + void enc(const byte[], byte[]) const; + void dec(const byte[], byte[]) const; + void key(const byte[], u32bit); + SecureBuffer K1, K2; + DES des; + }; + +} + +#endif ======================================================================== --- botan/des_tab.cpp +++ botan/des_tab.cpp 9ce42b4de43fb7cf599b1bad7c69b0e167543656 @@ -0,0 +1,634 @@ +/************************************************* +* Substitution/Permutation Tables for DES * +* (C) 1999-2005 The Botan Project * +*************************************************/ + +#include + +namespace Botan { + +const u32bit DES::SPBOX1[256] = { +0x01010400, 0x00000000, 0x00010000, 0x01010404, 0x01010004, 0x00010404, +0x00000004, 0x00010000, 0x00000400, 0x01010400, 0x01010404, 0x00000400, +0x01000404, 0x01010004, 0x01000000, 0x00000004, 0x00000404, 0x01000400, +0x01000400, 0x00010400, 0x00010400, 0x01010000, 0x01010000, 0x01000404, +0x00010004, 0x01000004, 0x01000004, 0x00010004, 0x00000000, 0x00000404, +0x00010404, 0x01000000, 0x00010000, 0x01010404, 0x00000004, 0x01010000, +0x01010400, 0x01000000, 0x01000000, 0x00000400, 0x01010004, 0x00010000, +0x00010400, 0x01000004, 0x00000400, 0x00000004, 0x01000404, 0x00010404, +0x01010404, 0x00010004, 0x01010000, 0x01000404, 0x01000004, 0x00000404, +0x00010404, 0x01010400, 0x00000404, 0x01000400, 0x01000400, 0x00000000, +0x00010004, 0x00010400, 0x00000000, 0x01010004, 0x01010400, 0x00000000, +0x00010000, 0x01010404, 0x01010004, 0x00010404, 0x00000004, 0x00010000, +0x00000400, 0x01010400, 0x01010404, 0x00000400, 0x01000404, 0x01010004, +0x01000000, 0x00000004, 0x00000404, 0x01000400, 0x01000400, 0x00010400, +0x00010400, 0x01010000, 0x01010000, 0x01000404, 0x00010004, 0x01000004, +0x01000004, 0x00010004, 0x00000000, 0x00000404, 0x00010404, 0x01000000, +0x00010000, 0x01010404, 0x00000004, 0x01010000, 0x01010400, 0x01000000, +0x01000000, 0x00000400, 0x01010004, 0x00010000, 0x00010400, 0x01000004, +0x00000400, 0x00000004, 0x01000404, 0x00010404, 0x01010404, 0x00010004, +0x01010000, 0x01000404, 0x01000004, 0x00000404, 0x00010404, 0x01010400, +0x00000404, 0x01000400, 0x01000400, 0x00000000, 0x00010004, 0x00010400, +0x00000000, 0x01010004, 0x01010400, 0x00000000, 0x00010000, 0x01010404, +0x01010004, 0x00010404, 0x00000004, 0x00010000, 0x00000400, 0x01010400, +0x01010404, 0x00000400, 0x01000404, 0x01010004, 0x01000000, 0x00000004, +0x00000404, 0x01000400, 0x01000400, 0x00010400, 0x00010400, 0x01010000, +0x01010000, 0x01000404, 0x00010004, 0x01000004, 0x01000004, 0x00010004, +0x00000000, 0x00000404, 0x00010404, 0x01000000, 0x00010000, 0x01010404, +0x00000004, 0x01010000, 0x01010400, 0x01000000, 0x01000000, 0x00000400, +0x01010004, 0x00010000, 0x00010400, 0x01000004, 0x00000400, 0x00000004, +0x01000404, 0x00010404, 0x01010404, 0x00010004, 0x01010000, 0x01000404, +0x01000004, 0x00000404, 0x00010404, 0x01010400, 0x00000404, 0x01000400, +0x01000400, 0x00000000, 0x00010004, 0x00010400, 0x00000000, 0x01010004, +0x01010400, 0x00000000, 0x00010000, 0x01010404, 0x01010004, 0x00010404, +0x00000004, 0x00010000, 0x00000400, 0x01010400, 0x01010404, 0x00000400, +0x01000404, 0x01010004, 0x01000000, 0x00000004, 0x00000404, 0x01000400, +0x01000400, 0x00010400, 0x00010400, 0x01010000, 0x01010000, 0x01000404, +0x00010004, 0x01000004, 0x01000004, 0x00010004, 0x00000000, 0x00000404, +0x00010404, 0x01000000, 0x00010000, 0x01010404, 0x00000004, 0x01010000, +0x01010400, 0x01000000, 0x01000000, 0x00000400, 0x01010004, 0x00010000, +0x00010400, 0x01000004, 0x00000400, 0x00000004, 0x01000404, 0x00010404, +0x01010404, 0x00010004, 0x01010000, 0x01000404, 0x01000004, 0x00000404, +0x00010404, 0x01010400, 0x00000404, 0x01000400, 0x01000400, 0x00000000, +0x00010004, 0x00010400, 0x00000000, 0x01010004 }; + +const u32bit DES::SPBOX2[256] = { +0x80108020, 0x80008000, 0x00008000, 0x00108020, 0x00100000, 0x00000020, +0x80100020, 0x80008020, 0x80000020, 0x80108020, 0x80108000, 0x80000000, +0x80008000, 0x00100000, 0x00000020, 0x80100020, 0x00108000, 0x00100020, +0x80008020, 0x00000000, 0x80000000, 0x00008000, 0x00108020, 0x80100000, +0x00100020, 0x80000020, 0x00000000, 0x00108000, 0x00008020, 0x80108000, +0x80100000, 0x00008020, 0x00000000, 0x00108020, 0x80100020, 0x00100000, +0x80008020, 0x80100000, 0x80108000, 0x00008000, 0x80100000, 0x80008000, +0x00000020, 0x80108020, 0x00108020, 0x00000020, 0x00008000, 0x80000000, +0x00008020, 0x80108000, 0x00100000, 0x80000020, 0x00100020, 0x80008020, +0x80000020, 0x00100020, 0x00108000, 0x00000000, 0x80008000, 0x00008020, +0x80000000, 0x80100020, 0x80108020, 0x00108000, 0x80108020, 0x80008000, +0x00008000, 0x00108020, 0x00100000, 0x00000020, 0x80100020, 0x80008020, +0x80000020, 0x80108020, 0x80108000, 0x80000000, 0x80008000, 0x00100000, +0x00000020, 0x80100020, 0x00108000, 0x00100020, 0x80008020, 0x00000000, +0x80000000, 0x00008000, 0x00108020, 0x80100000, 0x00100020, 0x80000020, +0x00000000, 0x00108000, 0x00008020, 0x80108000, 0x80100000, 0x00008020, +0x00000000, 0x00108020, 0x80100020, 0x00100000, 0x80008020, 0x80100000, +0x80108000, 0x00008000, 0x80100000, 0x80008000, 0x00000020, 0x80108020, +0x00108020, 0x00000020, 0x00008000, 0x80000000, 0x00008020, 0x80108000, +0x00100000, 0x80000020, 0x00100020, 0x80008020, 0x80000020, 0x00100020, +0x00108000, 0x00000000, 0x80008000, 0x00008020, 0x80000000, 0x80100020, +0x80108020, 0x00108000, 0x80108020, 0x80008000, 0x00008000, 0x00108020, +0x00100000, 0x00000020, 0x80100020, 0x80008020, 0x80000020, 0x80108020, +0x80108000, 0x80000000, 0x80008000, 0x00100000, 0x00000020, 0x80100020, +0x00108000, 0x00100020, 0x80008020, 0x00000000, 0x80000000, 0x00008000, +0x00108020, 0x80100000, 0x00100020, 0x80000020, 0x00000000, 0x00108000, +0x00008020, 0x80108000, 0x80100000, 0x00008020, 0x00000000, 0x00108020, +0x80100020, 0x00100000, 0x80008020, 0x80100000, 0x80108000, 0x00008000, +0x80100000, 0x80008000, 0x00000020, 0x80108020, 0x00108020, 0x00000020, +0x00008000, 0x80000000, 0x00008020, 0x80108000, 0x00100000, 0x80000020, +0x00100020, 0x80008020, 0x80000020, 0x00100020, 0x00108000, 0x00000000, +0x80008000, 0x00008020, 0x80000000, 0x80100020, 0x80108020, 0x00108000, +0x80108020, 0x80008000, 0x00008000, 0x00108020, 0x00100000, 0x00000020, +0x80100020, 0x80008020, 0x80000020, 0x80108020, 0x80108000, 0x80000000, +0x80008000, 0x00100000, 0x00000020, 0x80100020, 0x00108000, 0x00100020, +0x80008020, 0x00000000, 0x80000000, 0x00008000, 0x00108020, 0x80100000, +0x00100020, 0x80000020, 0x00000000, 0x00108000, 0x00008020, 0x80108000, +0x80100000, 0x00008020, 0x00000000, 0x00108020, 0x80100020, 0x00100000, +0x80008020, 0x80100000, 0x80108000, 0x00008000, 0x80100000, 0x80008000, +0x00000020, 0x80108020, 0x00108020, 0x00000020, 0x00008000, 0x80000000, +0x00008020, 0x80108000, 0x00100000, 0x80000020, 0x00100020, 0x80008020, +0x80000020, 0x00100020, 0x00108000, 0x00000000, 0x80008000, 0x00008020, +0x80000000, 0x80100020, 0x80108020, 0x00108000 }; + +const u32bit DES::SPBOX3[256] = { +0x00000208, 0x08020200, 0x00000000, 0x08020008, 0x08000200, 0x00000000, +0x00020208, 0x08000200, 0x00020008, 0x08000008, 0x08000008, 0x00020000, +0x08020208, 0x00020008, 0x08020000, 0x00000208, 0x08000000, 0x00000008, +0x08020200, 0x00000200, 0x00020200, 0x08020000, 0x08020008, 0x00020208, +0x08000208, 0x00020200, 0x00020000, 0x08000208, 0x00000008, 0x08020208, +0x00000200, 0x08000000, 0x08020200, 0x08000000, 0x00020008, 0x00000208, +0x00020000, 0x08020200, 0x08000200, 0x00000000, 0x00000200, 0x00020008, +0x08020208, 0x08000200, 0x08000008, 0x00000200, 0x00000000, 0x08020008, +0x08000208, 0x00020000, 0x08000000, 0x08020208, 0x00000008, 0x00020208, +0x00020200, 0x08000008, 0x08020000, 0x08000208, 0x00000208, 0x08020000, +0x00020208, 0x00000008, 0x08020008, 0x00020200, 0x00000208, 0x08020200, +0x00000000, 0x08020008, 0x08000200, 0x00000000, 0x00020208, 0x08000200, +0x00020008, 0x08000008, 0x08000008, 0x00020000, 0x08020208, 0x00020008, +0x08020000, 0x00000208, 0x08000000, 0x00000008, 0x08020200, 0x00000200, +0x00020200, 0x08020000, 0x08020008, 0x00020208, 0x08000208, 0x00020200, +0x00020000, 0x08000208, 0x00000008, 0x08020208, 0x00000200, 0x08000000, +0x08020200, 0x08000000, 0x00020008, 0x00000208, 0x00020000, 0x08020200, +0x08000200, 0x00000000, 0x00000200, 0x00020008, 0x08020208, 0x08000200, +0x08000008, 0x00000200, 0x00000000, 0x08020008, 0x08000208, 0x00020000, +0x08000000, 0x08020208, 0x00000008, 0x00020208, 0x00020200, 0x08000008, +0x08020000, 0x08000208, 0x00000208, 0x08020000, 0x00020208, 0x00000008, +0x08020008, 0x00020200, 0x00000208, 0x08020200, 0x00000000, 0x08020008, +0x08000200, 0x00000000, 0x00020208, 0x08000200, 0x00020008, 0x08000008, +0x08000008, 0x00020000, 0x08020208, 0x00020008, 0x08020000, 0x00000208, +0x08000000, 0x00000008, 0x08020200, 0x00000200, 0x00020200, 0x08020000, +0x08020008, 0x00020208, 0x08000208, 0x00020200, 0x00020000, 0x08000208, +0x00000008, 0x08020208, 0x00000200, 0x08000000, 0x08020200, 0x08000000, +0x00020008, 0x00000208, 0x00020000, 0x08020200, 0x08000200, 0x00000000, +0x00000200, 0x00020008, 0x08020208, 0x08000200, 0x08000008, 0x00000200, +0x00000000, 0x08020008, 0x08000208, 0x00020000, 0x08000000, 0x08020208, +0x00000008, 0x00020208, 0x00020200, 0x08000008, 0x08020000, 0x08000208, +0x00000208, 0x08020000, 0x00020208, 0x00000008, 0x08020008, 0x00020200, +0x00000208, 0x08020200, 0x00000000, 0x08020008, 0x08000200, 0x00000000, +0x00020208, 0x08000200, 0x00020008, 0x08000008, 0x08000008, 0x00020000, +0x08020208, 0x00020008, 0x08020000, 0x00000208, 0x08000000, 0x00000008, +0x08020200, 0x00000200, 0x00020200, 0x08020000, 0x08020008, 0x00020208, +0x08000208, 0x00020200, 0x00020000, 0x08000208, 0x00000008, 0x08020208, +0x00000200, 0x08000000, 0x08020200, 0x08000000, 0x00020008, 0x00000208, +0x00020000, 0x08020200, 0x08000200, 0x00000000, 0x00000200, 0x00020008, +0x08020208, 0x08000200, 0x08000008, 0x00000200, 0x00000000, 0x08020008, +0x08000208, 0x00020000, 0x08000000, 0x08020208, 0x00000008, 0x00020208, +0x00020200, 0x08000008, 0x08020000, 0x08000208, 0x00000208, 0x08020000, +0x00020208, 0x00000008, 0x08020008, 0x00020200 }; + +const u32bit DES::SPBOX4[256] = { +0x00802001, 0x00002081, 0x00002081, 0x00000080, 0x00802080, 0x00800081, +0x00800001, 0x00002001, 0x00000000, 0x00802000, 0x00802000, 0x00802081, +0x00000081, 0x00000000, 0x00800080, 0x00800001, 0x00000001, 0x00002000, +0x00800000, 0x00802001, 0x00000080, 0x00800000, 0x00002001, 0x00002080, +0x00800081, 0x00000001, 0x00002080, 0x00800080, 0x00002000, 0x00802080, +0x00802081, 0x00000081, 0x00800080, 0x00800001, 0x00802000, 0x00802081, +0x00000081, 0x00000000, 0x00000000, 0x00802000, 0x00002080, 0x00800080, +0x00800081, 0x00000001, 0x00802001, 0x00002081, 0x00002081, 0x00000080, +0x00802081, 0x00000081, 0x00000001, 0x00002000, 0x00800001, 0x00002001, +0x00802080, 0x00800081, 0x00002001, 0x00002080, 0x00800000, 0x00802001, +0x00000080, 0x00800000, 0x00002000, 0x00802080, 0x00802001, 0x00002081, +0x00002081, 0x00000080, 0x00802080, 0x00800081, 0x00800001, 0x00002001, +0x00000000, 0x00802000, 0x00802000, 0x00802081, 0x00000081, 0x00000000, +0x00800080, 0x00800001, 0x00000001, 0x00002000, 0x00800000, 0x00802001, +0x00000080, 0x00800000, 0x00002001, 0x00002080, 0x00800081, 0x00000001, +0x00002080, 0x00800080, 0x00002000, 0x00802080, 0x00802081, 0x00000081, +0x00800080, 0x00800001, 0x00802000, 0x00802081, 0x00000081, 0x00000000, +0x00000000, 0x00802000, 0x00002080, 0x00800080, 0x00800081, 0x00000001, +0x00802001, 0x00002081, 0x00002081, 0x00000080, 0x00802081, 0x00000081, +0x00000001, 0x00002000, 0x00800001, 0x00002001, 0x00802080, 0x00800081, +0x00002001, 0x00002080, 0x00800000, 0x00802001, 0x00000080, 0x00800000, +0x00002000, 0x00802080, 0x00802001, 0x00002081, 0x00002081, 0x00000080, +0x00802080, 0x00800081, 0x00800001, 0x00002001, 0x00000000, 0x00802000, +0x00802000, 0x00802081, 0x00000081, 0x00000000, 0x00800080, 0x00800001, +0x00000001, 0x00002000, 0x00800000, 0x00802001, 0x00000080, 0x00800000, +0x00002001, 0x00002080, 0x00800081, 0x00000001, 0x00002080, 0x00800080, +0x00002000, 0x00802080, 0x00802081, 0x00000081, 0x00800080, 0x00800001, +0x00802000, 0x00802081, 0x00000081, 0x00000000, 0x00000000, 0x00802000, +0x00002080, 0x00800080, 0x00800081, 0x00000001, 0x00802001, 0x00002081, +0x00002081, 0x00000080, 0x00802081, 0x00000081, 0x00000001, 0x00002000, +0x00800001, 0x00002001, 0x00802080, 0x00800081, 0x00002001, 0x00002080, +0x00800000, 0x00802001, 0x00000080, 0x00800000, 0x00002000, 0x00802080, +0x00802001, 0x00002081, 0x00002081, 0x00000080, 0x00802080, 0x00800081, +0x00800001, 0x00002001, 0x00000000, 0x00802000, 0x00802000, 0x00802081, +0x00000081, 0x00000000, 0x00800080, 0x00800001, 0x00000001, 0x00002000, +0x00800000, 0x00802001, 0x00000080, 0x00800000, 0x00002001, 0x00002080, +0x00800081, 0x00000001, 0x00002080, 0x00800080, 0x00002000, 0x00802080, +0x00802081, 0x00000081, 0x00800080, 0x00800001, 0x00802000, 0x00802081, +0x00000081, 0x00000000, 0x00000000, 0x00802000, 0x00002080, 0x00800080, +0x00800081, 0x00000001, 0x00802001, 0x00002081, 0x00002081, 0x00000080, +0x00802081, 0x00000081, 0x00000001, 0x00002000, 0x00800001, 0x00002001, +0x00802080, 0x00800081, 0x00002001, 0x00002080, 0x00800000, 0x00802001, +0x00000080, 0x00800000, 0x00002000, 0x00802080 }; + +const u32bit DES::SPBOX5[256] = { +0x00000100, 0x02080100, 0x02080000, 0x42000100, 0x00080000, 0x00000100, +0x40000000, 0x02080000, 0x40080100, 0x00080000, 0x02000100, 0x40080100, +0x42000100, 0x42080000, 0x00080100, 0x40000000, 0x02000000, 0x40080000, +0x40080000, 0x00000000, 0x40000100, 0x42080100, 0x42080100, 0x02000100, +0x42080000, 0x40000100, 0x00000000, 0x42000000, 0x02080100, 0x02000000, +0x42000000, 0x00080100, 0x00080000, 0x42000100, 0x00000100, 0x02000000, +0x40000000, 0x02080000, 0x42000100, 0x40080100, 0x02000100, 0x40000000, +0x42080000, 0x02080100, 0x40080100, 0x00000100, 0x02000000, 0x42080000, +0x42080100, 0x00080100, 0x42000000, 0x42080100, 0x02080000, 0x00000000, +0x40080000, 0x42000000, 0x00080100, 0x02000100, 0x40000100, 0x00080000, +0x00000000, 0x40080000, 0x02080100, 0x40000100, 0x00000100, 0x02080100, +0x02080000, 0x42000100, 0x00080000, 0x00000100, 0x40000000, 0x02080000, +0x40080100, 0x00080000, 0x02000100, 0x40080100, 0x42000100, 0x42080000, +0x00080100, 0x40000000, 0x02000000, 0x40080000, 0x40080000, 0x00000000, +0x40000100, 0x42080100, 0x42080100, 0x02000100, 0x42080000, 0x40000100, +0x00000000, 0x42000000, 0x02080100, 0x02000000, 0x42000000, 0x00080100, +0x00080000, 0x42000100, 0x00000100, 0x02000000, 0x40000000, 0x02080000, +0x42000100, 0x40080100, 0x02000100, 0x40000000, 0x42080000, 0x02080100, +0x40080100, 0x00000100, 0x02000000, 0x42080000, 0x42080100, 0x00080100, +0x42000000, 0x42080100, 0x02080000, 0x00000000, 0x40080000, 0x42000000, +0x00080100, 0x02000100, 0x40000100, 0x00080000, 0x00000000, 0x40080000, +0x02080100, 0x40000100, 0x00000100, 0x02080100, 0x02080000, 0x42000100, +0x00080000, 0x00000100, 0x40000000, 0x02080000, 0x40080100, 0x00080000, +0x02000100, 0x40080100, 0x42000100, 0x42080000, 0x00080100, 0x40000000, +0x02000000, 0x40080000, 0x40080000, 0x00000000, 0x40000100, 0x42080100, +0x42080100, 0x02000100, 0x42080000, 0x40000100, 0x00000000, 0x42000000, +0x02080100, 0x02000000, 0x42000000, 0x00080100, 0x00080000, 0x42000100, +0x00000100, 0x02000000, 0x40000000, 0x02080000, 0x42000100, 0x40080100, +0x02000100, 0x40000000, 0x42080000, 0x02080100, 0x40080100, 0x00000100, +0x02000000, 0x42080000, 0x42080100, 0x00080100, 0x42000000, 0x42080100, +0x02080000, 0x00000000, 0x40080000, 0x42000000, 0x00080100, 0x02000100, +0x40000100, 0x00080000, 0x00000000, 0x40080000, 0x02080100, 0x40000100, +0x00000100, 0x02080100, 0x02080000, 0x42000100, 0x00080000, 0x00000100, +0x40000000, 0x02080000, 0x40080100, 0x00080000, 0x02000100, 0x40080100, +0x42000100, 0x42080000, 0x00080100, 0x40000000, 0x02000000, 0x40080000, +0x40080000, 0x00000000, 0x40000100, 0x42080100, 0x42080100, 0x02000100, +0x42080000, 0x40000100, 0x00000000, 0x42000000, 0x02080100, 0x02000000, +0x42000000, 0x00080100, 0x00080000, 0x42000100, 0x00000100, 0x02000000, +0x40000000, 0x02080000, 0x42000100, 0x40080100, 0x02000100, 0x40000000, +0x42080000, 0x02080100, 0x40080100, 0x00000100, 0x02000000, 0x42080000, +0x42080100, 0x00080100, 0x42000000, 0x42080100, 0x02080000, 0x00000000, +0x40080000, 0x42000000, 0x00080100, 0x02000100, 0x40000100, 0x00080000, +0x00000000, 0x40080000, 0x02080100, 0x40000100 }; + +const u32bit DES::SPBOX6[256] = { +0x20000010, 0x20400000, 0x00004000, 0x20404010, 0x20400000, 0x00000010, +0x20404010, 0x00400000, 0x20004000, 0x00404010, 0x00400000, 0x20000010, +0x00400010, 0x20004000, 0x20000000, 0x00004010, 0x00000000, 0x00400010, +0x20004010, 0x00004000, 0x00404000, 0x20004010, 0x00000010, 0x20400010, +0x20400010, 0x00000000, 0x00404010, 0x20404000, 0x00004010, 0x00404000, +0x20404000, 0x20000000, 0x20004000, 0x00000010, 0x20400010, 0x00404000, +0x20404010, 0x00400000, 0x00004010, 0x20000010, 0x00400000, 0x20004000, +0x20000000, 0x00004010, 0x20000010, 0x20404010, 0x00404000, 0x20400000, +0x00404010, 0x20404000, 0x00000000, 0x20400010, 0x00000010, 0x00004000, +0x20400000, 0x00404010, 0x00004000, 0x00400010, 0x20004010, 0x00000000, +0x20404000, 0x20000000, 0x00400010, 0x20004010, 0x20000010, 0x20400000, +0x00004000, 0x20404010, 0x20400000, 0x00000010, 0x20404010, 0x00400000, +0x20004000, 0x00404010, 0x00400000, 0x20000010, 0x00400010, 0x20004000, +0x20000000, 0x00004010, 0x00000000, 0x00400010, 0x20004010, 0x00004000, +0x00404000, 0x20004010, 0x00000010, 0x20400010, 0x20400010, 0x00000000, +0x00404010, 0x20404000, 0x00004010, 0x00404000, 0x20404000, 0x20000000, +0x20004000, 0x00000010, 0x20400010, 0x00404000, 0x20404010, 0x00400000, +0x00004010, 0x20000010, 0x00400000, 0x20004000, 0x20000000, 0x00004010, +0x20000010, 0x20404010, 0x00404000, 0x20400000, 0x00404010, 0x20404000, +0x00000000, 0x20400010, 0x00000010, 0x00004000, 0x20400000, 0x00404010, +0x00004000, 0x00400010, 0x20004010, 0x00000000, 0x20404000, 0x20000000, +0x00400010, 0x20004010, 0x20000010, 0x20400000, 0x00004000, 0x20404010, +0x20400000, 0x00000010, 0x20404010, 0x00400000, 0x20004000, 0x00404010, +0x00400000, 0x20000010, 0x00400010, 0x20004000, 0x20000000, 0x00004010, +0x00000000, 0x00400010, 0x20004010, 0x00004000, 0x00404000, 0x20004010, +0x00000010, 0x20400010, 0x20400010, 0x00000000, 0x00404010, 0x20404000, +0x00004010, 0x00404000, 0x20404000, 0x20000000, 0x20004000, 0x00000010, +0x20400010, 0x00404000, 0x20404010, 0x00400000, 0x00004010, 0x20000010, +0x00400000, 0x20004000, 0x20000000, 0x00004010, 0x20000010, 0x20404010, +0x00404000, 0x20400000, 0x00404010, 0x20404000, 0x00000000, 0x20400010, +0x00000010, 0x00004000, 0x20400000, 0x00404010, 0x00004000, 0x00400010, +0x20004010, 0x00000000, 0x20404000, 0x20000000, 0x00400010, 0x20004010, +0x20000010, 0x20400000, 0x00004000, 0x20404010, 0x20400000, 0x00000010, +0x20404010, 0x00400000, 0x20004000, 0x00404010, 0x00400000, 0x20000010, +0x00400010, 0x20004000, 0x20000000, 0x00004010, 0x00000000, 0x00400010, +0x20004010, 0x00004000, 0x00404000, 0x20004010, 0x00000010, 0x20400010, +0x20400010, 0x00000000, 0x00404010, 0x20404000, 0x00004010, 0x00404000, +0x20404000, 0x20000000, 0x20004000, 0x00000010, 0x20400010, 0x00404000, +0x20404010, 0x00400000, 0x00004010, 0x20000010, 0x00400000, 0x20004000, +0x20000000, 0x00004010, 0x20000010, 0x20404010, 0x00404000, 0x20400000, +0x00404010, 0x20404000, 0x00000000, 0x20400010, 0x00000010, 0x00004000, +0x20400000, 0x00404010, 0x00004000, 0x00400010, 0x20004010, 0x00000000, +0x20404000, 0x20000000, 0x00400010, 0x20004010 }; + +const u32bit DES::SPBOX7[256] = { +0x00200000, 0x04200002, 0x04000802, 0x00000000, 0x00000800, 0x04000802, +0x00200802, 0x04200800, 0x04200802, 0x00200000, 0x00000000, 0x04000002, +0x00000002, 0x04000000, 0x04200002, 0x00000802, 0x04000800, 0x00200802, +0x00200002, 0x04000800, 0x04000002, 0x04200000, 0x04200800, 0x00200002, +0x04200000, 0x00000800, 0x00000802, 0x04200802, 0x00200800, 0x00000002, +0x04000000, 0x00200800, 0x04000000, 0x00200800, 0x00200000, 0x04000802, +0x04000802, 0x04200002, 0x04200002, 0x00000002, 0x00200002, 0x04000000, +0x04000800, 0x00200000, 0x04200800, 0x00000802, 0x00200802, 0x04200800, +0x00000802, 0x04000002, 0x04200802, 0x04200000, 0x00200800, 0x00000000, +0x00000002, 0x04200802, 0x00000000, 0x00200802, 0x04200000, 0x00000800, +0x04000002, 0x04000800, 0x00000800, 0x00200002, 0x00200000, 0x04200002, +0x04000802, 0x00000000, 0x00000800, 0x04000802, 0x00200802, 0x04200800, +0x04200802, 0x00200000, 0x00000000, 0x04000002, 0x00000002, 0x04000000, +0x04200002, 0x00000802, 0x04000800, 0x00200802, 0x00200002, 0x04000800, +0x04000002, 0x04200000, 0x04200800, 0x00200002, 0x04200000, 0x00000800, +0x00000802, 0x04200802, 0x00200800, 0x00000002, 0x04000000, 0x00200800, +0x04000000, 0x00200800, 0x00200000, 0x04000802, 0x04000802, 0x04200002, +0x04200002, 0x00000002, 0x00200002, 0x04000000, 0x04000800, 0x00200000, +0x04200800, 0x00000802, 0x00200802, 0x04200800, 0x00000802, 0x04000002, +0x04200802, 0x04200000, 0x00200800, 0x00000000, 0x00000002, 0x04200802, +0x00000000, 0x00200802, 0x04200000, 0x00000800, 0x04000002, 0x04000800, +0x00000800, 0x00200002, 0x00200000, 0x04200002, 0x04000802, 0x00000000, +0x00000800, 0x04000802, 0x00200802, 0x04200800, 0x04200802, 0x00200000, +0x00000000, 0x04000002, 0x00000002, 0x04000000, 0x04200002, 0x00000802, +0x04000800, 0x00200802, 0x00200002, 0x04000800, 0x04000002, 0x04200000, +0x04200800, 0x00200002, 0x04200000, 0x00000800, 0x00000802, 0x04200802, +0x00200800, 0x00000002, 0x04000000, 0x00200800, 0x04000000, 0x00200800, +0x00200000, 0x04000802, 0x04000802, 0x04200002, 0x04200002, 0x00000002, +0x00200002, 0x04000000, 0x04000800, 0x00200000, 0x04200800, 0x00000802, +0x00200802, 0x04200800, 0x00000802, 0x04000002, 0x04200802, 0x04200000, +0x00200800, 0x00000000, 0x00000002, 0x04200802, 0x00000000, 0x00200802, +0x04200000, 0x00000800, 0x04000002, 0x04000800, 0x00000800, 0x00200002, +0x00200000, 0x04200002, 0x04000802, 0x00000000, 0x00000800, 0x04000802, +0x00200802, 0x04200800, 0x04200802, 0x00200000, 0x00000000, 0x04000002, +0x00000002, 0x04000000, 0x04200002, 0x00000802, 0x04000800, 0x00200802, +0x00200002, 0x04000800, 0x04000002, 0x04200000, 0x04200800, 0x00200002, +0x04200000, 0x00000800, 0x00000802, 0x04200802, 0x00200800, 0x00000002, +0x04000000, 0x00200800, 0x04000000, 0x00200800, 0x00200000, 0x04000802, +0x04000802, 0x04200002, 0x04200002, 0x00000002, 0x00200002, 0x04000000, +0x04000800, 0x00200000, 0x04200800, 0x00000802, 0x00200802, 0x04200800, +0x00000802, 0x04000002, 0x04200802, 0x04200000, 0x00200800, 0x00000000, +0x00000002, 0x04200802, 0x00000000, 0x00200802, 0x04200000, 0x00000800, +0x04000002, 0x04000800, 0x00000800, 0x00200002 }; + +const u32bit DES::SPBOX8[256] = { +0x10001040, 0x00001000, 0x00040000, 0x10041040, 0x10000000, 0x10001040, +0x00000040, 0x10000000, 0x00040040, 0x10040000, 0x10041040, 0x00041000, +0x10041000, 0x00041040, 0x00001000, 0x00000040, 0x10040000, 0x10000040, +0x10001000, 0x00001040, 0x00041000, 0x00040040, 0x10040040, 0x10041000, +0x00001040, 0x00000000, 0x00000000, 0x10040040, 0x10000040, 0x10001000, +0x00041040, 0x00040000, 0x00041040, 0x00040000, 0x10041000, 0x00001000, +0x00000040, 0x10040040, 0x00001000, 0x00041040, 0x10001000, 0x00000040, +0x10000040, 0x10040000, 0x10040040, 0x10000000, 0x00040000, 0x10001040, +0x00000000, 0x10041040, 0x00040040, 0x10000040, 0x10040000, 0x10001000, +0x10001040, 0x00000000, 0x10041040, 0x00041000, 0x00041000, 0x00001040, +0x00001040, 0x00040040, 0x10000000, 0x10041000, 0x10001040, 0x00001000, +0x00040000, 0x10041040, 0x10000000, 0x10001040, 0x00000040, 0x10000000, +0x00040040, 0x10040000, 0x10041040, 0x00041000, 0x10041000, 0x00041040, +0x00001000, 0x00000040, 0x10040000, 0x10000040, 0x10001000, 0x00001040, +0x00041000, 0x00040040, 0x10040040, 0x10041000, 0x00001040, 0x00000000, +0x00000000, 0x10040040, 0x10000040, 0x10001000, 0x00041040, 0x00040000, +0x00041040, 0x00040000, 0x10041000, 0x00001000, 0x00000040, 0x10040040, +0x00001000, 0x00041040, 0x10001000, 0x00000040, 0x10000040, 0x10040000, +0x10040040, 0x10000000, 0x00040000, 0x10001040, 0x00000000, 0x10041040, +0x00040040, 0x10000040, 0x10040000, 0x10001000, 0x10001040, 0x00000000, +0x10041040, 0x00041000, 0x00041000, 0x00001040, 0x00001040, 0x00040040, +0x10000000, 0x10041000, 0x10001040, 0x00001000, 0x00040000, 0x10041040, +0x10000000, 0x10001040, 0x00000040, 0x10000000, 0x00040040, 0x10040000, +0x10041040, 0x00041000, 0x10041000, 0x00041040, 0x00001000, 0x00000040, +0x10040000, 0x10000040, 0x10001000, 0x00001040, 0x00041000, 0x00040040, +0x10040040, 0x10041000, 0x00001040, 0x00000000, 0x00000000, 0x10040040, +0x10000040, 0x10001000, 0x00041040, 0x00040000, 0x00041040, 0x00040000, +0x10041000, 0x00001000, 0x00000040, 0x10040040, 0x00001000, 0x00041040, +0x10001000, 0x00000040, 0x10000040, 0x10040000, 0x10040040, 0x10000000, +0x00040000, 0x10001040, 0x00000000, 0x10041040, 0x00040040, 0x10000040, +0x10040000, 0x10001000, 0x10001040, 0x00000000, 0x10041040, 0x00041000, +0x00041000, 0x00001040, 0x00001040, 0x00040040, 0x10000000, 0x10041000, +0x10001040, 0x00001000, 0x00040000, 0x10041040, 0x10000000, 0x10001040, +0x00000040, 0x10000000, 0x00040040, 0x10040000, 0x10041040, 0x00041000, +0x10041000, 0x00041040, 0x00001000, 0x00000040, 0x10040000, 0x10000040, +0x10001000, 0x00001040, 0x00041000, 0x00040040, 0x10040040, 0x10041000, +0x00001040, 0x00000000, 0x00000000, 0x10040040, 0x10000040, 0x10001000, +0x00041040, 0x00040000, 0x00041040, 0x00040000, 0x10041000, 0x00001000, +0x00000040, 0x10040040, 0x00001000, 0x00041040, 0x10001000, 0x00000040, +0x10000040, 0x10040000, 0x10040040, 0x10000000, 0x00040000, 0x10001040, +0x00000000, 0x10041040, 0x00040040, 0x10000040, 0x10040000, 0x10001000, +0x10001040, 0x00000000, 0x10041040, 0x00041000, 0x00041000, 0x00001040, +0x00001040, 0x00040040, 0x10000000, 0x10041000 }; + +const u64bit DES::IPTAB1[256] = { +0x0000000000000000ULL, 0x0000000200000000ULL, 0x0000000000000002ULL, 0x0000000200000002ULL, +0x0000020000000000ULL, 0x0000020200000000ULL, 0x0000020000000002ULL, 0x0000020200000002ULL, +0x0000000000000200ULL, 0x0000000200000200ULL, 0x0000000000000202ULL, 0x0000000200000202ULL, +0x0000020000000200ULL, 0x0000020200000200ULL, 0x0000020000000202ULL, 0x0000020200000202ULL, +0x0002000000000000ULL, 0x0002000200000000ULL, 0x0002000000000002ULL, 0x0002000200000002ULL, +0x0002020000000000ULL, 0x0002020200000000ULL, 0x0002020000000002ULL, 0x0002020200000002ULL, +0x0002000000000200ULL, 0x0002000200000200ULL, 0x0002000000000202ULL, 0x0002000200000202ULL, +0x0002020000000200ULL, 0x0002020200000200ULL, 0x0002020000000202ULL, 0x0002020200000202ULL, +0x0000000000020000ULL, 0x0000000200020000ULL, 0x0000000000020002ULL, 0x0000000200020002ULL, +0x0000020000020000ULL, 0x0000020200020000ULL, 0x0000020000020002ULL, 0x0000020200020002ULL, +0x0000000000020200ULL, 0x0000000200020200ULL, 0x0000000000020202ULL, 0x0000000200020202ULL, +0x0000020000020200ULL, 0x0000020200020200ULL, 0x0000020000020202ULL, 0x0000020200020202ULL, +0x0002000000020000ULL, 0x0002000200020000ULL, 0x0002000000020002ULL, 0x0002000200020002ULL, +0x0002020000020000ULL, 0x0002020200020000ULL, 0x0002020000020002ULL, 0x0002020200020002ULL, +0x0002000000020200ULL, 0x0002000200020200ULL, 0x0002000000020202ULL, 0x0002000200020202ULL, +0x0002020000020200ULL, 0x0002020200020200ULL, 0x0002020000020202ULL, 0x0002020200020202ULL, +0x0200000000000000ULL, 0x0200000200000000ULL, 0x0200000000000002ULL, 0x0200000200000002ULL, +0x0200020000000000ULL, 0x0200020200000000ULL, 0x0200020000000002ULL, 0x0200020200000002ULL, +0x0200000000000200ULL, 0x0200000200000200ULL, 0x0200000000000202ULL, 0x0200000200000202ULL, +0x0200020000000200ULL, 0x0200020200000200ULL, 0x0200020000000202ULL, 0x0200020200000202ULL, +0x0202000000000000ULL, 0x0202000200000000ULL, 0x0202000000000002ULL, 0x0202000200000002ULL, +0x0202020000000000ULL, 0x0202020200000000ULL, 0x0202020000000002ULL, 0x0202020200000002ULL, +0x0202000000000200ULL, 0x0202000200000200ULL, 0x0202000000000202ULL, 0x0202000200000202ULL, +0x0202020000000200ULL, 0x0202020200000200ULL, 0x0202020000000202ULL, 0x0202020200000202ULL, +0x0200000000020000ULL, 0x0200000200020000ULL, 0x0200000000020002ULL, 0x0200000200020002ULL, +0x0200020000020000ULL, 0x0200020200020000ULL, 0x0200020000020002ULL, 0x0200020200020002ULL, +0x0200000000020200ULL, 0x0200000200020200ULL, 0x0200000000020202ULL, 0x0200000200020202ULL, +0x0200020000020200ULL, 0x0200020200020200ULL, 0x0200020000020202ULL, 0x0200020200020202ULL, +0x0202000000020000ULL, 0x0202000200020000ULL, 0x0202000000020002ULL, 0x0202000200020002ULL, +0x0202020000020000ULL, 0x0202020200020000ULL, 0x0202020000020002ULL, 0x0202020200020002ULL, +0x0202000000020200ULL, 0x0202000200020200ULL, 0x0202000000020202ULL, 0x0202000200020202ULL, +0x0202020000020200ULL, 0x0202020200020200ULL, 0x0202020000020202ULL, 0x0202020200020202ULL, +0x0000000002000000ULL, 0x0000000202000000ULL, 0x0000000002000002ULL, 0x0000000202000002ULL, +0x0000020002000000ULL, 0x0000020202000000ULL, 0x0000020002000002ULL, 0x0000020202000002ULL, +0x0000000002000200ULL, 0x0000000202000200ULL, 0x0000000002000202ULL, 0x0000000202000202ULL, +0x0000020002000200ULL, 0x0000020202000200ULL, 0x0000020002000202ULL, 0x0000020202000202ULL, +0x0002000002000000ULL, 0x0002000202000000ULL, 0x0002000002000002ULL, 0x0002000202000002ULL, +0x0002020002000000ULL, 0x0002020202000000ULL, 0x0002020002000002ULL, 0x0002020202000002ULL, +0x0002000002000200ULL, 0x0002000202000200ULL, 0x0002000002000202ULL, 0x0002000202000202ULL, +0x0002020002000200ULL, 0x0002020202000200ULL, 0x0002020002000202ULL, 0x0002020202000202ULL, +0x0000000002020000ULL, 0x0000000202020000ULL, 0x0000000002020002ULL, 0x0000000202020002ULL, +0x0000020002020000ULL, 0x0000020202020000ULL, 0x0000020002020002ULL, 0x0000020202020002ULL, +0x0000000002020200ULL, 0x0000000202020200ULL, 0x0000000002020202ULL, 0x0000000202020202ULL, +0x0000020002020200ULL, 0x0000020202020200ULL, 0x0000020002020202ULL, 0x0000020202020202ULL, +0x0002000002020000ULL, 0x0002000202020000ULL, 0x0002000002020002ULL, 0x0002000202020002ULL, +0x0002020002020000ULL, 0x0002020202020000ULL, 0x0002020002020002ULL, 0x0002020202020002ULL, +0x0002000002020200ULL, 0x0002000202020200ULL, 0x0002000002020202ULL, 0x0002000202020202ULL, +0x0002020002020200ULL, 0x0002020202020200ULL, 0x0002020002020202ULL, 0x0002020202020202ULL, +0x0200000002000000ULL, 0x0200000202000000ULL, 0x0200000002000002ULL, 0x0200000202000002ULL, +0x0200020002000000ULL, 0x0200020202000000ULL, 0x0200020002000002ULL, 0x0200020202000002ULL, +0x0200000002000200ULL, 0x0200000202000200ULL, 0x0200000002000202ULL, 0x0200000202000202ULL, +0x0200020002000200ULL, 0x0200020202000200ULL, 0x0200020002000202ULL, 0x0200020202000202ULL, +0x0202000002000000ULL, 0x0202000202000000ULL, 0x0202000002000002ULL, 0x0202000202000002ULL, +0x0202020002000000ULL, 0x0202020202000000ULL, 0x0202020002000002ULL, 0x0202020202000002ULL, +0x0202000002000200ULL, 0x0202000202000200ULL, 0x0202000002000202ULL, 0x0202000202000202ULL, +0x0202020002000200ULL, 0x0202020202000200ULL, 0x0202020002000202ULL, 0x0202020202000202ULL, +0x0200000002020000ULL, 0x0200000202020000ULL, 0x0200000002020002ULL, 0x0200000202020002ULL, +0x0200020002020000ULL, 0x0200020202020000ULL, 0x0200020002020002ULL, 0x0200020202020002ULL, +0x0200000002020200ULL, 0x0200000202020200ULL, 0x0200000002020202ULL, 0x0200000202020202ULL, +0x0200020002020200ULL, 0x0200020202020200ULL, 0x0200020002020202ULL, 0x0200020202020202ULL, +0x0202000002020000ULL, 0x0202000202020000ULL, 0x0202000002020002ULL, 0x0202000202020002ULL, +0x0202020002020000ULL, 0x0202020202020000ULL, 0x0202020002020002ULL, 0x0202020202020002ULL, +0x0202000002020200ULL, 0x0202000202020200ULL, 0x0202000002020202ULL, 0x0202000202020202ULL, +0x0202020002020200ULL, 0x0202020202020200ULL, 0x0202020002020202ULL, 0x0202020202020202ULL }; + +const u64bit DES::IPTAB2[256] = { +0x0000000000000000ULL, 0x0000010000000000ULL, 0x0000000000000100ULL, 0x0000010000000100ULL, +0x0001000000000000ULL, 0x0001010000000000ULL, 0x0001000000000100ULL, 0x0001010000000100ULL, +0x0000000000010000ULL, 0x0000010000010000ULL, 0x0000000000010100ULL, 0x0000010000010100ULL, +0x0001000000010000ULL, 0x0001010000010000ULL, 0x0001000000010100ULL, 0x0001010000010100ULL, +0x0100000000000000ULL, 0x0100010000000000ULL, 0x0100000000000100ULL, 0x0100010000000100ULL, +0x0101000000000000ULL, 0x0101010000000000ULL, 0x0101000000000100ULL, 0x0101010000000100ULL, +0x0100000000010000ULL, 0x0100010000010000ULL, 0x0100000000010100ULL, 0x0100010000010100ULL, +0x0101000000010000ULL, 0x0101010000010000ULL, 0x0101000000010100ULL, 0x0101010000010100ULL, +0x0000000001000000ULL, 0x0000010001000000ULL, 0x0000000001000100ULL, 0x0000010001000100ULL, +0x0001000001000000ULL, 0x0001010001000000ULL, 0x0001000001000100ULL, 0x0001010001000100ULL, +0x0000000001010000ULL, 0x0000010001010000ULL, 0x0000000001010100ULL, 0x0000010001010100ULL, +0x0001000001010000ULL, 0x0001010001010000ULL, 0x0001000001010100ULL, 0x0001010001010100ULL, +0x0100000001000000ULL, 0x0100010001000000ULL, 0x0100000001000100ULL, 0x0100010001000100ULL, +0x0101000001000000ULL, 0x0101010001000000ULL, 0x0101000001000100ULL, 0x0101010001000100ULL, +0x0100000001010000ULL, 0x0100010001010000ULL, 0x0100000001010100ULL, 0x0100010001010100ULL, +0x0101000001010000ULL, 0x0101010001010000ULL, 0x0101000001010100ULL, 0x0101010001010100ULL, +0x0000000100000000ULL, 0x0000010100000000ULL, 0x0000000100000100ULL, 0x0000010100000100ULL, +0x0001000100000000ULL, 0x0001010100000000ULL, 0x0001000100000100ULL, 0x0001010100000100ULL, +0x0000000100010000ULL, 0x0000010100010000ULL, 0x0000000100010100ULL, 0x0000010100010100ULL, +0x0001000100010000ULL, 0x0001010100010000ULL, 0x0001000100010100ULL, 0x0001010100010100ULL, +0x0100000100000000ULL, 0x0100010100000000ULL, 0x0100000100000100ULL, 0x0100010100000100ULL, +0x0101000100000000ULL, 0x0101010100000000ULL, 0x0101000100000100ULL, 0x0101010100000100ULL, +0x0100000100010000ULL, 0x0100010100010000ULL, 0x0100000100010100ULL, 0x0100010100010100ULL, +0x0101000100010000ULL, 0x0101010100010000ULL, 0x0101000100010100ULL, 0x0101010100010100ULL, +0x0000000101000000ULL, 0x0000010101000000ULL, 0x0000000101000100ULL, 0x0000010101000100ULL, +0x0001000101000000ULL, 0x0001010101000000ULL, 0x0001000101000100ULL, 0x0001010101000100ULL, +0x0000000101010000ULL, 0x0000010101010000ULL, 0x0000000101010100ULL, 0x0000010101010100ULL, +0x0001000101010000ULL, 0x0001010101010000ULL, 0x0001000101010100ULL, 0x0001010101010100ULL, +0x0100000101000000ULL, 0x0100010101000000ULL, 0x0100000101000100ULL, 0x0100010101000100ULL, +0x0101000101000000ULL, 0x0101010101000000ULL, 0x0101000101000100ULL, 0x0101010101000100ULL, +0x0100000101010000ULL, 0x0100010101010000ULL, 0x0100000101010100ULL, 0x0100010101010100ULL, +0x0101000101010000ULL, 0x0101010101010000ULL, 0x0101000101010100ULL, 0x0101010101010100ULL, +0x0000000000000001ULL, 0x0000010000000001ULL, 0x0000000000000101ULL, 0x0000010000000101ULL, +0x0001000000000001ULL, 0x0001010000000001ULL, 0x0001000000000101ULL, 0x0001010000000101ULL, +0x0000000000010001ULL, 0x0000010000010001ULL, 0x0000000000010101ULL, 0x0000010000010101ULL, +0x0001000000010001ULL, 0x0001010000010001ULL, 0x0001000000010101ULL, 0x0001010000010101ULL, +0x0100000000000001ULL, 0x0100010000000001ULL, 0x0100000000000101ULL, 0x0100010000000101ULL, +0x0101000000000001ULL, 0x0101010000000001ULL, 0x0101000000000101ULL, 0x0101010000000101ULL, +0x0100000000010001ULL, 0x0100010000010001ULL, 0x0100000000010101ULL, 0x0100010000010101ULL, +0x0101000000010001ULL, 0x0101010000010001ULL, 0x0101000000010101ULL, 0x0101010000010101ULL, +0x0000000001000001ULL, 0x0000010001000001ULL, 0x0000000001000101ULL, 0x0000010001000101ULL, +0x0001000001000001ULL, 0x0001010001000001ULL, 0x0001000001000101ULL, 0x0001010001000101ULL, +0x0000000001010001ULL, 0x0000010001010001ULL, 0x0000000001010101ULL, 0x0000010001010101ULL, +0x0001000001010001ULL, 0x0001010001010001ULL, 0x0001000001010101ULL, 0x0001010001010101ULL, +0x0100000001000001ULL, 0x0100010001000001ULL, 0x0100000001000101ULL, 0x0100010001000101ULL, +0x0101000001000001ULL, 0x0101010001000001ULL, 0x0101000001000101ULL, 0x0101010001000101ULL, +0x0100000001010001ULL, 0x0100010001010001ULL, 0x0100000001010101ULL, 0x0100010001010101ULL, +0x0101000001010001ULL, 0x0101010001010001ULL, 0x0101000001010101ULL, 0x0101010001010101ULL, +0x0000000100000001ULL, 0x0000010100000001ULL, 0x0000000100000101ULL, 0x0000010100000101ULL, +0x0001000100000001ULL, 0x0001010100000001ULL, 0x0001000100000101ULL, 0x0001010100000101ULL, +0x0000000100010001ULL, 0x0000010100010001ULL, 0x0000000100010101ULL, 0x0000010100010101ULL, +0x0001000100010001ULL, 0x0001010100010001ULL, 0x0001000100010101ULL, 0x0001010100010101ULL, +0x0100000100000001ULL, 0x0100010100000001ULL, 0x0100000100000101ULL, 0x0100010100000101ULL, +0x0101000100000001ULL, 0x0101010100000001ULL, 0x0101000100000101ULL, 0x0101010100000101ULL, +0x0100000100010001ULL, 0x0100010100010001ULL, 0x0100000100010101ULL, 0x0100010100010101ULL, +0x0101000100010001ULL, 0x0101010100010001ULL, 0x0101000100010101ULL, 0x0101010100010101ULL, +0x0000000101000001ULL, 0x0000010101000001ULL, 0x0000000101000101ULL, 0x0000010101000101ULL, +0x0001000101000001ULL, 0x0001010101000001ULL, 0x0001000101000101ULL, 0x0001010101000101ULL, +0x0000000101010001ULL, 0x0000010101010001ULL, 0x0000000101010101ULL, 0x0000010101010101ULL, +0x0001000101010001ULL, 0x0001010101010001ULL, 0x0001000101010101ULL, 0x0001010101010101ULL, +0x0100000101000001ULL, 0x0100010101000001ULL, 0x0100000101000101ULL, 0x0100010101000101ULL, +0x0101000101000001ULL, 0x0101010101000001ULL, 0x0101000101000101ULL, 0x0101010101000101ULL, +0x0100000101010001ULL, 0x0100010101010001ULL, 0x0100000101010101ULL, 0x0100010101010101ULL, +0x0101000101010001ULL, 0x0101010101010001ULL, 0x0101000101010101ULL, 0x0101010101010101ULL }; + +const u64bit DES::FPTAB1[256] = { +0x0000000000000000ULL, 0x0000000100000000ULL, 0x0000000004000000ULL, 0x0000000104000000ULL, +0x0000000000040000ULL, 0x0000000100040000ULL, 0x0000000004040000ULL, 0x0000000104040000ULL, +0x0000000000000400ULL, 0x0000000100000400ULL, 0x0000000004000400ULL, 0x0000000104000400ULL, +0x0000000000040400ULL, 0x0000000100040400ULL, 0x0000000004040400ULL, 0x0000000104040400ULL, +0x0000000000000004ULL, 0x0000000100000004ULL, 0x0000000004000004ULL, 0x0000000104000004ULL, +0x0000000000040004ULL, 0x0000000100040004ULL, 0x0000000004040004ULL, 0x0000000104040004ULL, +0x0000000000000404ULL, 0x0000000100000404ULL, 0x0000000004000404ULL, 0x0000000104000404ULL, +0x0000000000040404ULL, 0x0000000100040404ULL, 0x0000000004040404ULL, 0x0000000104040404ULL, +0x0400000000000000ULL, 0x0400000100000000ULL, 0x0400000004000000ULL, 0x0400000104000000ULL, +0x0400000000040000ULL, 0x0400000100040000ULL, 0x0400000004040000ULL, 0x0400000104040000ULL, +0x0400000000000400ULL, 0x0400000100000400ULL, 0x0400000004000400ULL, 0x0400000104000400ULL, +0x0400000000040400ULL, 0x0400000100040400ULL, 0x0400000004040400ULL, 0x0400000104040400ULL, +0x0400000000000004ULL, 0x0400000100000004ULL, 0x0400000004000004ULL, 0x0400000104000004ULL, +0x0400000000040004ULL, 0x0400000100040004ULL, 0x0400000004040004ULL, 0x0400000104040004ULL, +0x0400000000000404ULL, 0x0400000100000404ULL, 0x0400000004000404ULL, 0x0400000104000404ULL, +0x0400000000040404ULL, 0x0400000100040404ULL, 0x0400000004040404ULL, 0x0400000104040404ULL, +0x0004000000000000ULL, 0x0004000100000000ULL, 0x0004000004000000ULL, 0x0004000104000000ULL, +0x0004000000040000ULL, 0x0004000100040000ULL, 0x0004000004040000ULL, 0x0004000104040000ULL, +0x0004000000000400ULL, 0x0004000100000400ULL, 0x0004000004000400ULL, 0x0004000104000400ULL, +0x0004000000040400ULL, 0x0004000100040400ULL, 0x0004000004040400ULL, 0x0004000104040400ULL, +0x0004000000000004ULL, 0x0004000100000004ULL, 0x0004000004000004ULL, 0x0004000104000004ULL, +0x0004000000040004ULL, 0x0004000100040004ULL, 0x0004000004040004ULL, 0x0004000104040004ULL, +0x0004000000000404ULL, 0x0004000100000404ULL, 0x0004000004000404ULL, 0x0004000104000404ULL, +0x0004000000040404ULL, 0x0004000100040404ULL, 0x0004000004040404ULL, 0x0004000104040404ULL, +0x0404000000000000ULL, 0x0404000100000000ULL, 0x0404000004000000ULL, 0x0404000104000000ULL, +0x0404000000040000ULL, 0x0404000100040000ULL, 0x0404000004040000ULL, 0x0404000104040000ULL, +0x0404000000000400ULL, 0x0404000100000400ULL, 0x0404000004000400ULL, 0x0404000104000400ULL, +0x0404000000040400ULL, 0x0404000100040400ULL, 0x0404000004040400ULL, 0x0404000104040400ULL, +0x0404000000000004ULL, 0x0404000100000004ULL, 0x0404000004000004ULL, 0x0404000104000004ULL, +0x0404000000040004ULL, 0x0404000100040004ULL, 0x0404000004040004ULL, 0x0404000104040004ULL, +0x0404000000000404ULL, 0x0404000100000404ULL, 0x0404000004000404ULL, 0x0404000104000404ULL, +0x0404000000040404ULL, 0x0404000100040404ULL, 0x0404000004040404ULL, 0x0404000104040404ULL, +0x0000040000000000ULL, 0x0000040100000000ULL, 0x0000040004000000ULL, 0x0000040104000000ULL, +0x0000040000040000ULL, 0x0000040100040000ULL, 0x0000040004040000ULL, 0x0000040104040000ULL, +0x0000040000000400ULL, 0x0000040100000400ULL, 0x0000040004000400ULL, 0x0000040104000400ULL, +0x0000040000040400ULL, 0x0000040100040400ULL, 0x0000040004040400ULL, 0x0000040104040400ULL, +0x0000040000000004ULL, 0x0000040100000004ULL, 0x0000040004000004ULL, 0x0000040104000004ULL, +0x0000040000040004ULL, 0x0000040100040004ULL, 0x0000040004040004ULL, 0x0000040104040004ULL, +0x0000040000000404ULL, 0x0000040100000404ULL, 0x0000040004000404ULL, 0x0000040104000404ULL, +0x0000040000040404ULL, 0x0000040100040404ULL, 0x0000040004040404ULL, 0x0000040104040404ULL, +0x0400040000000000ULL, 0x0400040100000000ULL, 0x0400040004000000ULL, 0x0400040104000000ULL, +0x0400040000040000ULL, 0x0400040100040000ULL, 0x0400040004040000ULL, 0x0400040104040000ULL, +0x0400040000000400ULL, 0x0400040100000400ULL, 0x0400040004000400ULL, 0x0400040104000400ULL, +0x0400040000040400ULL, 0x0400040100040400ULL, 0x0400040004040400ULL, 0x0400040104040400ULL, +0x0400040000000004ULL, 0x0400040100000004ULL, 0x0400040004000004ULL, 0x0400040104000004ULL, +0x0400040000040004ULL, 0x0400040100040004ULL, 0x0400040004040004ULL, 0x0400040104040004ULL, +0x0400040000000404ULL, 0x0400040100000404ULL, 0x0400040004000404ULL, 0x0400040104000404ULL, +0x0400040000040404ULL, 0x0400040100040404ULL, 0x0400040004040404ULL, 0x0400040104040404ULL, +0x0004040000000000ULL, 0x0004040100000000ULL, 0x0004040004000000ULL, 0x0004040104000000ULL, +0x0004040000040000ULL, 0x0004040100040000ULL, 0x0004040004040000ULL, 0x0004040104040000ULL, +0x0004040000000400ULL, 0x0004040100000400ULL, 0x0004040004000400ULL, 0x0004040104000400ULL, +0x0004040000040400ULL, 0x0004040100040400ULL, 0x0004040004040400ULL, 0x0004040104040400ULL, +0x0004040000000004ULL, 0x0004040100000004ULL, 0x0004040004000004ULL, 0x0004040104000004ULL, +0x0004040000040004ULL, 0x0004040100040004ULL, 0x0004040004040004ULL, 0x0004040104040004ULL, +0x0004040000000404ULL, 0x0004040100000404ULL, 0x0004040004000404ULL, 0x0004040104000404ULL, +0x0004040000040404ULL, 0x0004040100040404ULL, 0x0004040004040404ULL, 0x0004040104040404ULL, +0x0404040000000000ULL, 0x0404040100000000ULL, 0x0404040004000000ULL, 0x0404040104000000ULL, +0x0404040000040000ULL, 0x0404040100040000ULL, 0x0404040004040000ULL, 0x0404040104040000ULL, +0x0404040000000400ULL, 0x0404040100000400ULL, 0x0404040004000400ULL, 0x0404040104000400ULL, +0x0404040000040400ULL, 0x0404040100040400ULL, 0x0404040004040400ULL, 0x0404040104040400ULL, +0x0404040000000004ULL, 0x0404040100000004ULL, 0x0404040004000004ULL, 0x0404040104000004ULL, +0x0404040000040004ULL, 0x0404040100040004ULL, 0x0404040004040004ULL, 0x0404040104040004ULL, +0x0404040000000404ULL, 0x0404040100000404ULL, 0x0404040004000404ULL, 0x0404040104000404ULL, +0x0404040000040404ULL, 0x0404040100040404ULL, 0x0404040004040404ULL, 0x0404040104040404ULL }; + +const u64bit DES::FPTAB2[256] = { +0x0000000000000000ULL, 0x0000004000000000ULL, 0x0000000001000000ULL, 0x0000004001000000ULL, +0x0000000000010000ULL, 0x0000004000010000ULL, 0x0000000001010000ULL, 0x0000004001010000ULL, +0x0000000000000100ULL, 0x0000004000000100ULL, 0x0000000001000100ULL, 0x0000004001000100ULL, +0x0000000000010100ULL, 0x0000004000010100ULL, 0x0000000001010100ULL, 0x0000004001010100ULL, +0x0000000000000001ULL, 0x0000004000000001ULL, 0x0000000001000001ULL, 0x0000004001000001ULL, +0x0000000000010001ULL, 0x0000004000010001ULL, 0x0000000001010001ULL, 0x0000004001010001ULL, +0x0000000000000101ULL, 0x0000004000000101ULL, 0x0000000001000101ULL, 0x0000004001000101ULL, +0x0000000000010101ULL, 0x0000004000010101ULL, 0x0000000001010101ULL, 0x0000004001010101ULL, +0x0100000000000000ULL, 0x0100004000000000ULL, 0x0100000001000000ULL, 0x0100004001000000ULL, +0x0100000000010000ULL, 0x0100004000010000ULL, 0x0100000001010000ULL, 0x0100004001010000ULL, +0x0100000000000100ULL, 0x0100004000000100ULL, 0x0100000001000100ULL, 0x0100004001000100ULL, +0x0100000000010100ULL, 0x0100004000010100ULL, 0x0100000001010100ULL, 0x0100004001010100ULL, +0x0100000000000001ULL, 0x0100004000000001ULL, 0x0100000001000001ULL, 0x0100004001000001ULL, +0x0100000000010001ULL, 0x0100004000010001ULL, 0x0100000001010001ULL, 0x0100004001010001ULL, +0x0100000000000101ULL, 0x0100004000000101ULL, 0x0100000001000101ULL, 0x0100004001000101ULL, +0x0100000000010101ULL, 0x0100004000010101ULL, 0x0100000001010101ULL, 0x0100004001010101ULL, +0x0001000000000000ULL, 0x0001004000000000ULL, 0x0001000001000000ULL, 0x0001004001000000ULL, +0x0001000000010000ULL, 0x0001004000010000ULL, 0x0001000001010000ULL, 0x0001004001010000ULL, +0x0001000000000100ULL, 0x0001004000000100ULL, 0x0001000001000100ULL, 0x0001004001000100ULL, +0x0001000000010100ULL, 0x0001004000010100ULL, 0x0001000001010100ULL, 0x0001004001010100ULL, +0x0001000000000001ULL, 0x0001004000000001ULL, 0x0001000001000001ULL, 0x0001004001000001ULL, +0x0001000000010001ULL, 0x0001004000010001ULL, 0x0001000001010001ULL, 0x0001004001010001ULL, +0x0001000000000101ULL, 0x0001004000000101ULL, 0x0001000001000101ULL, 0x0001004001000101ULL, +0x0001000000010101ULL, 0x0001004000010101ULL, 0x0001000001010101ULL, 0x0001004001010101ULL, +0x0101000000000000ULL, 0x0101004000000000ULL, 0x0101000001000000ULL, 0x0101004001000000ULL, +0x0101000000010000ULL, 0x0101004000010000ULL, 0x0101000001010000ULL, 0x0101004001010000ULL, +0x0101000000000100ULL, 0x0101004000000100ULL, 0x0101000001000100ULL, 0x0101004001000100ULL, +0x0101000000010100ULL, 0x0101004000010100ULL, 0x0101000001010100ULL, 0x0101004001010100ULL, +0x0101000000000001ULL, 0x0101004000000001ULL, 0x0101000001000001ULL, 0x0101004001000001ULL, +0x0101000000010001ULL, 0x0101004000010001ULL, 0x0101000001010001ULL, 0x0101004001010001ULL, +0x0101000000000101ULL, 0x0101004000000101ULL, 0x0101000001000101ULL, 0x0101004001000101ULL, +0x0101000000010101ULL, 0x0101004000010101ULL, 0x0101000001010101ULL, 0x0101004001010101ULL, +0x0000010000000000ULL, 0x0000014000000000ULL, 0x0000010001000000ULL, 0x0000014001000000ULL, +0x0000010000010000ULL, 0x0000014000010000ULL, 0x0000010001010000ULL, 0x0000014001010000ULL, +0x0000010000000100ULL, 0x0000014000000100ULL, 0x0000010001000100ULL, 0x0000014001000100ULL, +0x0000010000010100ULL, 0x0000014000010100ULL, 0x0000010001010100ULL, 0x0000014001010100ULL, +0x0000010000000001ULL, 0x0000014000000001ULL, 0x0000010001000001ULL, 0x0000014001000001ULL, +0x0000010000010001ULL, 0x0000014000010001ULL, 0x0000010001010001ULL, 0x0000014001010001ULL, +0x0000010000000101ULL, 0x0000014000000101ULL, 0x0000010001000101ULL, 0x0000014001000101ULL, +0x0000010000010101ULL, 0x0000014000010101ULL, 0x0000010001010101ULL, 0x0000014001010101ULL, +0x0100010000000000ULL, 0x0100014000000000ULL, 0x0100010001000000ULL, 0x0100014001000000ULL, +0x0100010000010000ULL, 0x0100014000010000ULL, 0x0100010001010000ULL, 0x0100014001010000ULL, +0x0100010000000100ULL, 0x0100014000000100ULL, 0x0100010001000100ULL, 0x0100014001000100ULL, +0x0100010000010100ULL, 0x0100014000010100ULL, 0x0100010001010100ULL, 0x0100014001010100ULL, +0x0100010000000001ULL, 0x0100014000000001ULL, 0x0100010001000001ULL, 0x0100014001000001ULL, +0x0100010000010001ULL, 0x0100014000010001ULL, 0x0100010001010001ULL, 0x0100014001010001ULL, +0x0100010000000101ULL, 0x0100014000000101ULL, 0x0100010001000101ULL, 0x0100014001000101ULL, +0x0100010000010101ULL, 0x0100014000010101ULL, 0x0100010001010101ULL, 0x0100014001010101ULL, +0x0001010000000000ULL, 0x0001014000000000ULL, 0x0001010001000000ULL, 0x0001014001000000ULL, +0x0001010000010000ULL, 0x0001014000010000ULL, 0x0001010001010000ULL, 0x0001014001010000ULL, +0x0001010000000100ULL, 0x0001014000000100ULL, 0x0001010001000100ULL, 0x0001014001000100ULL, +0x0001010000010100ULL, 0x0001014000010100ULL, 0x0001010001010100ULL, 0x0001014001010100ULL, +0x0001010000000001ULL, 0x0001014000000001ULL, 0x0001010001000001ULL, 0x0001014001000001ULL, +0x0001010000010001ULL, 0x0001014000010001ULL, 0x0001010001010001ULL, 0x0001014001010001ULL, +0x0001010000000101ULL, 0x0001014000000101ULL, 0x0001010001000101ULL, 0x0001014001000101ULL, +0x0001010000010101ULL, 0x0001014000010101ULL, 0x0001010001010101ULL, 0x0001014001010101ULL, +0x0101010000000000ULL, 0x0101014000000000ULL, 0x0101010001000000ULL, 0x0101014001000000ULL, +0x0101010000010000ULL, 0x0101014000010000ULL, 0x0101010001010000ULL, 0x0101014001010000ULL, +0x0101010000000100ULL, 0x0101014000000100ULL, 0x0101010001000100ULL, 0x0101014001000100ULL, +0x0101010000010100ULL, 0x0101014000010100ULL, 0x0101010001010100ULL, 0x0101014001010100ULL, +0x0101010000000001ULL, 0x0101014000000001ULL, 0x0101010001000001ULL, 0x0101014001000001ULL, +0x0101010000010001ULL, 0x0101014000010001ULL, 0x0101010001010001ULL, 0x0101014001010001ULL, +0x0101010000000101ULL, 0x0101014000000101ULL, 0x0101010001000101ULL, 0x0101014001000101ULL, +0x0101010000010101ULL, 0x0101014000010101ULL, 0x0101010001010101ULL, 0x0101014001010101ULL }; + +} ======================================================================== --- botan/pkcs5.cpp +++ botan/pkcs5.cpp cdf709aac78dc4cf416125512278e117589bf8e6 @@ -0,0 +1,122 @@ +/************************************************* +* PKCS #5 Source File * +* (C) 1999-2005 The Botan Project * +*************************************************/ + +#include +#include +#include +#include + +namespace Botan { + +/************************************************* +* Return a PKCS#5 PBKDF1 derived key * +*************************************************/ +OctetString PKCS5_PBKDF1::derive(u32bit key_len, + const std::string& passphrase, + const byte salt[], u32bit salt_size, + u32bit iterations) const + { + if(iterations == 0) + throw Invalid_Argument("PKCS#5 PBKDF1: Invalid iteration count"); + + std::auto_ptr hash(get_hash(hash_name)); + if(key_len > hash->OUTPUT_LENGTH) + throw Exception("PKCS#5 PBKDF1: Requested output length too long"); + + hash->update(passphrase); + hash->update(salt, salt_size); + SecureVector key = hash->final(); + + for(u32bit j = 1; j != iterations; j++) + { + hash->update(key); + hash->final(key); + } + + return OctetString(key, std::min(key_len, key.size())); + } + +/************************************************* +* Return the name of this type * +*************************************************/ +std::string PKCS5_PBKDF1::name() const + { + return "PBKDF1(" + hash_name + ")"; + } + +/************************************************* +* PKCS5_PBKDF1 Constructor * +*************************************************/ +PKCS5_PBKDF1::PKCS5_PBKDF1(const std::string& h_name) : hash_name(h_name) + { + if(!have_hash(hash_name)) + throw Algorithm_Not_Found(hash_name); + } + +/************************************************* +* Return a PKCS#5 PBKDF2 derived key * +*************************************************/ +OctetString PKCS5_PBKDF2::derive(u32bit key_len, + const std::string& passphrase, + const byte salt[], u32bit salt_size, + u32bit iterations) const + { + if(iterations == 0) + throw Invalid_Argument("PKCS#5 PBKDF2: Invalid iteration count"); + + if(passphrase.length() == 0) + throw Invalid_Argument("PKCS#5 PBKDF2: Empty passphrase is invalid"); + + HMAC hmac(hash_name); + hmac.set_key((const byte*)passphrase.c_str(), passphrase.length()); + SecureVector key(key_len); + + byte* T = key.begin(); + + u32bit counter = 1; + while(key_len) + { + u32bit T_size = std::min(hmac.OUTPUT_LENGTH, key_len); + SecureVector U(hmac.OUTPUT_LENGTH); + + hmac.update(salt, salt_size); + for(u32bit j = 0; j != 4; j++) + hmac.update(get_byte(j, counter)); + hmac.final(U); + xor_buf(T, U, T_size); + + for(u32bit j = 1; j != iterations; j++) + { + hmac.update(U); + hmac.final(U); + xor_buf(T, U, T_size); + } + + key_len -= T_size; + T += T_size; + counter++; + } + + return key; + } + +/************************************************* +* Return the name of this type * +*************************************************/ +std::string PKCS5_PBKDF2::name() const + { + return "PBKDF2(" + hash_name + ")"; + } + +/************************************************* +* PKCS5_PBKDF2 Constructor * +*************************************************/ +PKCS5_PBKDF2::PKCS5_PBKDF2(const std::string& h_name) : hash_name(h_name) + { + if(!have_hash(hash_name)) + throw Algorithm_Not_Found(hash_name); + } + +} ======================================================================== --- botan/pkcs5.h +++ botan/pkcs5.h 660436fb11b2f632b3dba051539cf93d023ffaa6 @@ -0,0 +1,45 @@ +/************************************************* +* PKCS #5 Header File * +* (C) 1999-2005 The Botan Project * +*************************************************/ + +#ifndef BOTAN_PKCS5_H__ +#define BOTAN_PKCS5_H__ + +#include + +namespace Botan { + +/************************************************* +* PKCS #5 PBKDF1 * +*************************************************/ +class PKCS5_PBKDF1 : public S2K + { + public: + std::string name() const; + S2K* clone() const { return new PKCS5_PBKDF1(hash_name); } + PKCS5_PBKDF1(const std::string&); + private: + OctetString derive(u32bit, const std::string&, + const byte[], u32bit, u32bit) const; + const std::string hash_name; + }; + +/************************************************* +* PKCS #5 PBKDF2 * +*************************************************/ +class PKCS5_PBKDF2 : public S2K + { + public: + std::string name() const; + S2K* clone() const { return new PKCS5_PBKDF2(hash_name); } + PKCS5_PBKDF2(const std::string&); + private: + OctetString derive(u32bit, const std::string&, + const byte[], u32bit, u32bit) const; + const std::string hash_name; + }; + +} + +#endif ======================================================================== --- commands.cc 5e3307a36823404a734e65224da9966461d8e382 +++ commands.cc 10b5b48c3a9202ae481022dd03ddc778343ab16d @@ -3760,9 +3760,19 @@ for (std::vector::const_iterator i = privkeys.begin(); i != privkeys.end(); ++i) { + base64< arc4 > old_priv; + app.db.get_key(*i, old_priv); + // convert it to a newstyle key keypair kp; - app.db.get_key(*i, kp.priv); - app.db.get_key(*i, kp.pub); + migrate_private_key(app, *i, old_priv, kp); + + // check the public key matches + base64< rsa_pub_key > pub; + app.db.get_key(*i, pub); + MM(pub); + MM(kp.pub); + N(keys_match(*i, pub, *i, kp.pub), F("public and private keys for %s don't match") % (*i)()); + app.keys.put_key_pair(*i, kp); } } ======================================================================== --- database.cc a1452325ac8f6aef8804ec53785ecbac5ee4cea6 +++ database.cc 2859331985e8687cd337886ff960d6ce0d6be7ae @@ -523,7 +523,7 @@ for (size_t i = 0; i < res.size(); ++i) { hexenc tmp; - key_hash_code(rsa_keypair_id(res[i][0]), base64< arc4 >(res[i][1]), tmp); + key_hash_code(rsa_keypair_id(res[i][0]), base64< rsa_priv_key >(res[i][1]), tmp); execute("INSERT INTO private_keys VALUES(?, ?, ?)", tmp().c_str(), res[i][0].c_str(), res[i][1].c_str()); ++privkeys; ======================================================================== --- keys.cc 0a144d76856af7fe643c529d9d2536a197fe15cb +++ keys.cc b43ff403dae506d2958e518965ed12c57dc1d93a @@ -36,11 +36,11 @@ using Botan::byte; static void -do_arc4(SecureVector & phrase, +do_arc4(SecureVector & sym_key, SecureVector & payload) { L(F("running arc4 process on %d bytes of data\n") % payload.size()); - Pipe enc(get_cipher("ARC4", phrase, ENCRYPTION)); + Pipe enc(get_cipher("ARC4", sym_key, ENCRYPTION)); enc.process_msg(payload); payload = enc.read_all(); } @@ -50,12 +50,11 @@ static void get_passphrase(lua_hooks & lua, rsa_keypair_id const & keyid, - SecureVector & phrase, + string & phrase, bool confirm_phrase = false, bool force_from_user = false, string prompt_beginning = "enter passphrase") { - string lua_phrase; // we permit the user to relax security here, by caching a passphrase (if // they permit it) through the life of a program run. this helps when @@ -66,17 +65,14 @@ if (!force_from_user && phrases.find(keyid) != phrases.end()) { - string phr = phrases[keyid]; - phrase.set(reinterpret_cast(phr.data()), phr.size()); + phrase = phrases[keyid]; return; } - if (!force_from_user && lua.hook_get_passphrase(keyid, lua_phrase)) + if (!force_from_user && lua.hook_get_passphrase(keyid, phrase)) { // user is being a slob and hooking lua to return his passphrase - phrase.set(reinterpret_cast(lua_phrase.data()), - lua_phrase.size()); - N(lua_phrase != "", + N(phrase != "", F("got empty passphrase from get_passphrase() hook")); } else @@ -123,7 +119,7 @@ try { - phrase.set(reinterpret_cast(pass1), strlen(pass1)); + phrase = pass1; // permit security relaxation. maybe. if (persist_phrase) @@ -150,32 +146,30 @@ string const unit_test_passphrase) { - SecureVector phrase, pubkey, privkey; + string phrase; + SecureVector pubkey, privkey; rsa_pub_key raw_pub_key; - arc4 raw_priv_key; + rsa_priv_key raw_priv_key; // generate private key (and encrypt it) RSA_PrivateKey priv(constants::keylen); - Pipe p; - p.start_msg(); - PKCS8::encode(priv, p, RAW_BER); - privkey = p.read_all(); - if (unit_test_passphrase.empty()) get_passphrase(lua, id, phrase, true, true); else - phrase.set(reinterpret_cast(unit_test_passphrase.c_str()), - unit_test_passphrase.size()); - do_arc4(phrase, privkey); - raw_priv_key = string(reinterpret_cast(privkey.begin()), privkey.size()); + phrase = unit_test_passphrase; + + Pipe p; + p.start_msg(); + PKCS8::encrypt_key(priv, p, phrase, + "PBE-PKCS5v20(SHA-1,TripleDES/CBC)", RAW_BER); + raw_priv_key = rsa_priv_key(p.read_all_as_string()); // generate public key Pipe p2; p2.start_msg(); X509::encode(priv, p2, RAW_BER); - pubkey = p2.read_all(); - raw_pub_key = string(reinterpret_cast(pubkey.begin()), pubkey.size()); + raw_pub_key = rsa_pub_key(p2.read_all_as_string()); // if all that worked, we can return our results to caller encode_base64(raw_priv_key, kp_out.priv); @@ -186,52 +180,145 @@ % kp_out.priv().size()); } -void -change_key_passphrase(lua_hooks & lua, - rsa_keypair_id const & id, - base64< arc4 > & encoded_key) +// ask for passphrase then decrypt a private key. +shared_ptr +get_private_key(lua_hooks & lua, + rsa_keypair_id const & id, + base64< rsa_priv_key > const & priv) { - SecureVector phrase; - get_passphrase(lua, id, phrase, false, true, "enter old passphrase"); + rsa_priv_key decoded_key; + string phrase; + bool force = false; + L(F("base64-decoding %d-byte private key\n") % priv().size()); + decode_base64(priv, decoded_key); + for (int i = 0; i < 3; ++i) + { + get_passphrase(lua, id, phrase, false, force); + L(F("have %d-byte encrypted private key\n") % decoded_key().size()); + + shared_ptr pkcs8_key; + try + { + Pipe p; + p.process_msg(decoded_key()); + pkcs8_key = shared_ptr(PKCS8::load_key(p, phrase)); + } + catch (...) + { + if (i >= 2) + throw informative_failure("failed to decrypt private RSA key, " + "probably incorrect passphrase"); + // don't use the cache bad one next time + force = true; + continue; + } + + shared_ptr priv_key; + priv_key = shared_dynamic_cast(pkcs8_key); + if (!priv_key) + throw informative_failure("Failed to get RSA signing key"); + + return priv_key; + } + I(false); +} + +// converts an oldstyle arc4 encrypted key into a newstyle pkcs#8 encoded +// key. the public key is also included +void +migrate_private_key(app_state & app, + rsa_keypair_id const & id, + base64< arc4 > const & old_priv, + keypair & new_kp) +{ arc4 decoded_key; - SecureVector key_block; - decode_base64(encoded_key, decoded_key); - key_block.set(reinterpret_cast(decoded_key().data()), - decoded_key().size()); - do_arc4(phrase, key_block); + SecureVector decrypted_key; + string phrase; - try + bool force = false; + + // need to decrypt the old key + shared_ptr priv_key; + L(F("base64-decoding %d-byte old private key\n") % old_priv().size()); + decode_base64(old_priv, decoded_key); + for (int i = 0; i < 3; ++i) { - L(F("building signer from %d-byte decrypted private key\n") % key_block.size()); - Pipe p; - p.process_msg(key_block); - shared_ptr pkcs8_key = - shared_ptr(PKCS8::load_key(p)); + decrypted_key.set(reinterpret_cast(decoded_key().data()), + decoded_key().size()); + get_passphrase(app.lua, id, phrase, false, force); + SecureVector sym_key; + sym_key.set(reinterpret_cast(phrase.data()), phrase.size()); + do_arc4(sym_key, decrypted_key); + + L(F("building signer from %d-byte decrypted private key\n") % decrypted_key.size()); + + shared_ptr pkcs8_key; + try + { + Pipe p; + p.process_msg(decrypted_key); + pkcs8_key = shared_ptr(PKCS8::load_key(p)); + } + catch (...) + { + if (i >= 2) + throw informative_failure("failed to decrypt old private RSA key, " + "probably incorrect passphrase"); + // don't use the cache bad one next time + force = true; + continue; + } + + priv_key = shared_dynamic_cast(pkcs8_key); + if (!priv_key) + throw informative_failure("Failed to get old RSA key"); } - catch (...) - { - throw informative_failure("failed to decrypt private RSA key, " - "probably incorrect passphrase"); - } - get_passphrase(lua, id, phrase, true, true, "enter new passphrase"); - do_arc4(phrase, key_block); - decoded_key = string(reinterpret_cast(key_block.begin()), - key_block.size()); + I(priv_key); + + // now we can write out the new key + Pipe p; + p.start_msg(); + PKCS8::encrypt_key(*priv_key, p, phrase, + "PBE-PKCS5v20(SHA-1,TripleDES/CBC)", RAW_BER); + rsa_priv_key raw_priv = rsa_priv_key(p.read_all_as_string()); + encode_base64(raw_priv, new_kp.priv); + + // also the public portion + Pipe p2; + p2.start_msg(); + X509::encode(*priv_key, p2, RAW_BER); + rsa_pub_key raw_pub = rsa_pub_key(p2.read_all_as_string()); + encode_base64(raw_pub, new_kp.pub); +} + +void +change_key_passphrase(lua_hooks & lua, + rsa_keypair_id const & id, + base64< rsa_priv_key > & encoded_key) +{ + shared_ptr priv = get_private_key(lua, id, encoded_key); + + string new_phrase; + get_passphrase(lua, id, new_phrase, true, true, "enter new passphrase"); + + Pipe p; + p.start_msg(); + PKCS8::encrypt_key(*priv, p, new_phrase, + "PBE-PKCS5v20(SHA-1,TripleDES/CBC)", RAW_BER); + rsa_priv_key decoded_key = rsa_priv_key(p.read_all_as_string()); + encode_base64(decoded_key, encoded_key); } void make_signature(app_state & app, // to hook for phrase rsa_keypair_id const & id, // to prompting user for phrase - base64< arc4 > const & priv, + base64< rsa_priv_key > const & priv, string const & tosign, base64 & signature) { - arc4 decoded_key; - SecureVector decrypted_key; - SecureVector phrase; SecureVector sig; string sig_string; @@ -241,7 +328,6 @@ // something. bool persist_phrase = (!app.signers.empty()) || app.lua.hook_persist_phrase_ok(); - bool force = false; shared_ptr signer; shared_ptr priv_key; @@ -250,47 +336,16 @@ else { - for (int i = 0; i < 3; ++i) - { - L(F("base64-decoding %d-byte private key\n") % priv().size()); - decode_base64(priv, decoded_key); - decrypted_key.set(reinterpret_cast(decoded_key().data()), - decoded_key().size()); - get_passphrase(app.lua, id, phrase, false, force); - do_arc4(phrase, decrypted_key); - - L(F("building signer from %d-byte decrypted private key\n") % decrypted_key.size()); - - shared_ptr pkcs8_key; - try - { - Pipe p; - p.process_msg(decrypted_key); - pkcs8_key = shared_ptr(PKCS8::load_key(p)); - } - catch (...) - { - if (i >= 2) - throw informative_failure("failed to decrypt private RSA key, " - "probably incorrect passphrase"); - // don't use the cache bad one next time - force = true; - continue; - } - - priv_key = shared_dynamic_cast(pkcs8_key); - if (!priv_key) - throw informative_failure("Failed to get RSA signing key"); - - signer = shared_ptr(get_pk_signer(*priv_key, "EMSA3(SHA-1)")); - - /* XXX This is ugly. We need to keep the key around as long - * as the signer is around, but the shared_ptr for the key will go - * away after we leave this scope. Hence we store a pair of - * so they both exist. */ - if (persist_phrase) - app.signers.insert(make_pair(id,make_pair(signer,priv_key))); - } + shared_ptr priv_key; + priv_key = get_private_key(app.lua, id, priv); + signer = shared_ptr(get_pk_signer(*priv_key, "EMSA3(SHA-1)")); + + /* XXX This is ugly. We need to keep the key around as long + * as the signer is around, but the shared_ptr for the key will go + * away after we leave this scope. Hence we store a pair of + * so they both exist. */ + if (persist_phrase) + app.signers.insert(make_pair(id,make_pair(signer,priv_key))); } sig = signer->sign_message(reinterpret_cast(tosign.data()), tosign.size()); @@ -383,51 +438,19 @@ void decrypt_rsa(lua_hooks & lua, rsa_keypair_id const & id, - base64< arc4 > const & priv, + base64< rsa_priv_key > const & priv, rsa_oaep_sha_data const & ciphertext, std::string & plaintext) { - arc4 decoded_key; - SecureVector decrypted_key; - SecureVector phrase; - shared_ptr decryptor; - shared_ptr pkcs8_key; + shared_ptr priv_key = get_private_key(lua, id, priv); - for (int i = 0; i < 3; i++) - { - bool force = false; - decode_base64(priv, decoded_key); - decrypted_key.set(reinterpret_cast(decoded_key().data()), - decoded_key().size()); - get_passphrase(lua, id, phrase, false, force); - do_arc4(phrase, decrypted_key); + shared_ptr decryptor; + decryptor = shared_ptr(get_pk_decryptor(*priv_key, "EME1(SHA-1)")); - try - { - Pipe p; - p.process_msg(decrypted_key); - pkcs8_key = shared_ptr(PKCS8::load_key(p)); - } - catch (...) - { - if (i >= 2) - throw informative_failure("failed to decrypt private RSA key, " - "probably incorrect passphrase"); - // don't use the cache bad one next time - force = true; - continue; - } - } - - shared_ptr priv_key = shared_dynamic_cast(pkcs8_key); - if (!priv_key) - throw informative_failure("Failed to get RSA decrypting key"); - decryptor = shared_ptr(get_pk_decryptor(*priv_key, "EME1(SHA-1)")); - - SecureVector plain; - plain = decryptor->decrypt( - reinterpret_cast(ciphertext().data()), ciphertext().size()); - plaintext = string(reinterpret_cast(plain.begin()), plain.size()); + SecureVector plain; + plain = decryptor->decrypt( + reinterpret_cast(ciphertext().data()), ciphertext().size()); + plaintext = string(reinterpret_cast(plain.begin()), plain.size()); } void @@ -466,7 +489,7 @@ void key_hash_code(rsa_keypair_id const & id, - base64< arc4 > const & priv, + base64< rsa_priv_key > const & priv, hexenc & out) { data tdat(id() + ":" + remove_ws(priv())); @@ -489,9 +512,9 @@ bool keys_match(rsa_keypair_id const & id1, - base64< arc4 > const & key1, + base64< rsa_priv_key > const & key1, rsa_keypair_id const & id2, - base64< arc4 > const & key2) + base64< rsa_priv_key > const & key2) { hexenc hash1, hash2; key_hash_code(id1, key1, hash1); ======================================================================== --- keys.hh ec2036295cdf27e6ac7994fb9952360c364221f6 +++ keys.hh 37f54b83f95952ba438899513ca0991cc63d4d10 @@ -24,11 +24,16 @@ void change_key_passphrase(lua_hooks & lua, // to hook for phrase rsa_keypair_id const & id, // to prompting user for phrase - base64< arc4 > & encoded_key); + base64< rsa_priv_key > & encoded_key); +void migrate_private_key(app_state & app, + rsa_keypair_id const & id, + base64< arc4 > const & old_priv, + keypair & kp); + void make_signature(app_state & app, // to hook for phrase rsa_keypair_id const & id, // to prompting user for phrase - base64< arc4 > const & priv, + base64< rsa_priv_key > const & priv, std::string const & tosign, base64 & signature); @@ -49,7 +54,7 @@ void decrypt_rsa(lua_hooks & lua, rsa_keypair_id const & id, - base64< arc4 > const & priv, + base64< rsa_priv_key > const & priv, rsa_oaep_sha_data const & ciphertext, std::string & plaintext); @@ -68,7 +73,7 @@ hexenc & out); void key_hash_code(rsa_keypair_id const & id, - base64< arc4 > const & priv, + base64< rsa_priv_key > const & priv, hexenc & out); bool keys_match(rsa_keypair_id const & id1, @@ -77,9 +82,9 @@ base64 const & key2); bool keys_match(rsa_keypair_id const & id1, - base64< arc4 > const & key1, + base64< rsa_priv_key > const & key1, rsa_keypair_id const & id2, - base64< arc4 > const & key2); + base64< rsa_priv_key > const & key2); #endif // __KEYS_HH__ ======================================================================== --- packet.cc f4ca19df46ef590bb112762f222325ae2ddb98be +++ packet.cc ef8866949aab6ca49284575de0c4c63494efe3d1 @@ -1558,9 +1558,8 @@ pw.consume_public_key(rsa_keypair_id("address@hidden"), puk); // a private key packet - base64< arc4 > pik; - encode_base64(arc4 - (rsa_priv_key("this is not a real rsa key either!")), pik); + base64< rsa_priv_key > pik; + encode_base64(rsa_priv_key("this is not a real rsa key either!"), pik); pw.consume_key_pair(rsa_keypair_id("address@hidden"), puk, pik); ======================================================================== --- po/fr.po 2385bcc193a5aa321863cda06106737be42a1bee +++ po/fr.po d7aef69713125651e61b6d37b9377ae69a3fb561 @@ -1,12 +1,13 @@ # French translation of monotone # This file is distributed under the same license as the monotone package. # Benoît Dejean , 2005 # +#: commands.cc:3754 msgid "" msgstr "" "Project-Id-Version: monotone 0.22\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2005-09-06 03:04+0200\n" +"POT-Creation-Date: 2005-09-26 14:59+0800\n" "PO-Revision-Date: 2005-09-06 03:22+0200\n" "Last-Translator: Benoît Dejean \n" "Language-Team: Benoît Dejean \n" @@ -15,459 +16,462 @@ "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n>1;\n" -#: ../app_state.cc:51 +#: app_state.cc:53 #, c-format msgid "initializing from directory %s\n" msgstr "" -#: ../app_state.cc:62 +#: app_state.cc:64 #, c-format msgid "branch name is '%s'\n" msgstr "le nom de la branche est « %s »\n" -#: ../app_state.cc:69 +#: app_state.cc:71 #, c-format msgid "setting dump path to %s\n" msgstr "" -#: ../app_state.cc:83 +#: app_state.cc:85 #, c-format msgid "working copy directory required but not found%s%s" msgstr "" -#: ../app_state.cc:91 +#: app_state.cc:93 #, c-format msgid "invalid directory ''" msgstr "" -#: ../app_state.cc:93 +#: app_state.cc:95 #, c-format msgid "creating working copy in %s\n" msgstr "création d'une copie de travail dans %s\n" -#: ../app_state.cc:99 +#: app_state.cc:101 #, c-format msgid "monotone bookkeeping directory '%s' already exists in '%s'\n" msgstr "" -#: ../app_state.cc:102 +#: app_state.cc:104 #, c-format msgid "creating bookkeeping directory '%s' for working copy in '%s'\n" msgstr "" -#: ../app_state.cc:132 +#: app_state.cc:135 #, c-format msgid "'%s' ignored by restricted path set\n" msgstr "" -#: ../app_state.cc:137 +#: app_state.cc:140 app_state.cc:158 #, c-format msgid "unknown path '%s'\n" msgstr "chemin inconnu « %s »\n" -#: ../app_state.cc:139 +#: app_state.cc:142 #, c-format msgid "'%s' added to restricted path set\n" msgstr "" -#: ../app_state.cc:178 +#: app_state.cc:153 #, c-format -msgid "checking restricted path set for '%s'\n" +msgid "'%s' ignored by excluded path set\n" msgstr "" -#: ../app_state.cc:185 +#: app_state.cc:160 #, c-format -msgid "path '%s' found in restricted path set; '%s' included\n" +msgid "'%s' added to excluded path set\n" msgstr "" -#: ../app_state.cc:191 +#: app_state.cc:187 #, c-format -msgid "path '%s' not found in restricted path set; '%s' excluded\n" +msgid "checking excluded path set for '%s'\n" msgstr "" -#: ../app_state.cc:248 +#: app_state.cc:194 app_state.cc:227 +#, c-format +msgid "path '%s' found in excluded path set; '%s' excluded\n" +msgstr "" + +#: app_state.cc:213 +#, c-format +msgid "checking restricted path set for '%s'\n" +msgstr "" + +#: app_state.cc:221 +#, c-format +msgid "path '%s' found in restricted path set; '%s' included\n" +msgstr "" + +#: app_state.cc:297 #, fuzzy, c-format msgid "search root '%s' does not exist" msgstr "le fichier rc « %s » n'existe pas" -#: ../app_state.cc:249 +#: app_state.cc:298 #, c-format msgid "search root '%s' is not a directory\n" msgstr "" -#: ../app_state.cc:251 +#: app_state.cc:300 #, c-format msgid "set search root to %s\n" msgstr "" -#: ../app_state.cc:282 +#: app_state.cc:331 #, c-format msgid "negative depth not allowed\n" msgstr "profondeur négative interdite\n" -#: ../app_state.cc:290 +#: app_state.cc:339 #, c-format msgid "negative or zero last not allowed\n" msgstr "" -#: ../app_state.cc:399 +#: app_state.cc:448 #, c-format msgid "Failed to read options file %s" msgstr "" -#: ../app_state.cc:416 +#: app_state.cc:465 #, c-format msgid "Failed to write options file %s" msgstr "" -#: ../basic_io.cc:26 ../basic_io.cc:27 +#: basic_io.cc:26 basic_io.cc:27 #, c-format msgid "error in %s:%d:%d:E: %s" msgstr "" -#: ../cert.cc:49 +#: cert.cc:49 #, c-format msgid "cert ok\n" msgstr "certificat OK\n" -#: ../cert.cc:56 +#: cert.cc:56 #, c-format msgid "ignoring bad signature by '%s' on '%s'\n" msgstr "" -#: ../cert.cc:64 +#: cert.cc:64 #, c-format msgid "ignoring unknown signature by '%s' on '%s'\n" msgstr "" -#: ../cert.cc:121 +#: cert.cc:121 #, c-format msgid "trust function liked %d signers of %s cert on manifest %s\n" msgstr "" -#: ../cert.cc:127 +#: cert.cc:127 #, c-format msgid "trust function disliked %d signers of %s cert on manifest %s\n" msgstr "" -#: ../cert.cc:174 +#: cert.cc:174 #, c-format msgid "trust function liked %d signers of %s cert on revision %s\n" msgstr "" -#: ../cert.cc:180 +#: cert.cc:180 #, c-format msgid "trust function disliked %d signers of %s cert on revision %s\n" msgstr "" -#: ../cert.cc:269 +#: cert.cc:269 #, c-format msgid "calculated cert hash '%s' does not match '%s'" msgstr "" -#: ../cert.cc:302 +#: cert.cc:302 #, c-format msgid "address@hidden:%s]" msgstr "" -#: ../cert.cc:303 +#: cert.cc:303 #, c-format msgid "cert: signable text %s\n" msgstr "" -#: ../cert.cc:364 ../keys.cc:508 +#: cert.cc:363 #, c-format -msgid "no private key '%s' found in database or get_priv_key hook" +msgid "no private key '%s' found in key store or get_priv_key hook" msgstr "" -#: ../cert.cc:373 +#: cert.cc:373 #, c-format -msgid "mismatch between private key '%s' in database and get_priv_key hook" +msgid "mismatch between key '%s' in key store and get_key_pair hook" msgstr "" -#: ../cert.cc:477 +#: cert.cc:481 #, c-format msgid "no branch found for empty revision, please provide a branch name" msgstr "" -#: ../cert.cc:486 +#: cert.cc:490 #, c-format msgid "no branch certs found for revision %s, please provide a branch name" msgstr "" -#: ../cert.cc:490 +#: cert.cc:494 #, c-format msgid "" "multiple branch certs found for revision %s, please provide a branch name" msgstr "" -#: ../cert.cc:507 ../rcs_import.cc:1231 ../revision.cc:1594 -#: ../revision.cc:1626 +#: cert.cc:511 rcs_import.cc:1231 revision.cc:1594 revision.cc:1626 #, c-format msgid "no unique private key for cert construction" msgstr "" -#: ../cert.cc:622 +#: cert.cc:626 #, c-format msgid "no default author name for branch '%s'" msgstr "" -#: ../change_set.cc:289 +#: change_set.cc:289 #, c-format msgid "tid %d: parent %d, type %s, name %s\n" msgstr "" -#: ../change_set.cc:315 +#: change_set.cc:315 #, c-format msgid "%d -> %d\n" msgstr "" -#: ../change_set.cc:1540 +#: change_set.cc:1540 #, c-format msgid "concatenating change sets\n" msgstr "" -#: ../change_set.cc:1563 +#: change_set.cc:1563 #, c-format msgid "concatenating %d and %d deltas\n" msgstr "" -#: ../change_set.cc:1573 +#: change_set.cc:1573 #, c-format msgid "processing delta on %s\n" msgstr "" -#: ../change_set.cc:1577 +#: change_set.cc:1577 #, c-format msgid "delta on %s in first changeset renamed to %s\n" msgstr "" -#. the delta should be removed if the file is going to be deleted -#: ../change_set.cc:1582 +#: change_set.cc:1582 #, c-format msgid "discarding delta [%s]->[%s] for deleted file '%s'\n" msgstr "" -#: ../change_set.cc:1600 +#: change_set.cc:1600 #, c-format msgid "fusing deltas on %s : %s -> %s and %s -> %s\n" msgstr "" -#: ../change_set.cc:1614 +#: change_set.cc:1614 #, c-format msgid "delta on %s in second changeset copied forward\n" msgstr "" -#: ../change_set.cc:1628 +#: change_set.cc:1628 #, c-format msgid "finished concatenation\n" msgstr "" -#: ../change_set.cc:1734 ../change_set.cc:1741 +#: change_set.cc:1734 change_set.cc:1741 #, c-format msgid "delete of %s dominates rename to %s\n" msgstr "" -#: ../change_set.cc:1751 +#: change_set.cc:1751 #, c-format msgid "unable to resolve file conflict '%s' -> '%s' vs. '%s'" msgstr "" -#: ../change_set.cc:1755 +#: change_set.cc:1755 #, c-format msgid "unable to resolve dir conflict '%s' -> '%s' vs. '%s'" msgstr "" -#: ../change_set.cc:1760 +#: change_set.cc:1760 #, c-format msgid "illegal conflict resolution '%s', wanted '%s' or '%s'\n" msgstr "" -#: ../change_set.cc:1816 +#: change_set.cc:1816 #, c-format msgid "tid %d (%s) clobbered tid %d (%s)\n" msgstr "" -#: ../change_set.cc:1852 +#: change_set.cc:1852 #, c-format msgid "skipping common change on %s (tid %d)\n" msgstr "" -#: ../change_set.cc:1857 +#: change_set.cc:1857 #, c-format msgid "skipping neutral change of %s -> %s (tid %d)\n" msgstr "" -#: ../change_set.cc:1864 +#: change_set.cc:1864 #, c-format msgid "propagating change on %s -> %s (tid %d)\n" msgstr "" -#: ../change_set.cc:1880 +#: change_set.cc:1880 #, c-format msgid "conflict detected, resolved in A's favour\n" msgstr "conflit détecté, résolu en faveur de A\n" -#: ../change_set.cc:1886 +#: change_set.cc:1886 #, c-format msgid "conflict detected, resolved in B's favour\n" msgstr "conflit détecté, résolu en faveur de B\n" -#: ../change_set.cc:2053 +#: change_set.cc:2053 #, c-format msgid "reusing merge resolution '%s' : '%s' -> '%s'\n" msgstr "" -#: ../change_set.cc:2062 +#: change_set.cc:2062 #, c-format msgid "merge of '%s' : '%s' vs. '%s' (no common ancestor) failed" msgstr "" -#: ../change_set.cc:2069 +#: change_set.cc:2069 #, c-format msgid "merge of '%s' : '%s' -> '%s' vs '%s' failed" msgstr "" -#: ../change_set.cc:2073 +#: change_set.cc:2073 #, c-format msgid "merge of '%s' : '%s' -> '%s' vs '%s' resolved to '%s'\n" msgstr "" -#: ../change_set.cc:2131 +#: change_set.cc:2131 #, c-format msgid "skipping delta '%s'->'%s' on deleted file '%s'\n" msgstr "" -#. if no deltas in b, copy ours over using the merged name -#: ../change_set.cc:2139 +#: change_set.cc:2139 #, c-format msgid "merge is copying delta '%s' : '%s' -> '%s'\n" msgstr "" -#. ... use the delta from 'a' -#. 'a' change_set included a delta []->[...], ie file added. We want to -#. follow this fork so it gets added to the b_merged changeset -#: ../change_set.cc:2163 +#: change_set.cc:2163 #, c-format msgid "propagating new file addition delta on '%s' : '%s' -> '%s'\n" msgstr "" -#. ... ignore the delta -#. 'b' change_set included a delta []->[...], ie file added. We don't need -#. to add it to the b_merged changeset, since any delta in 'a' will be -#. ignored (as 'b' includes deletions). -#: ../change_set.cc:2175 +#: change_set.cc:2175 #, c-format msgid "skipping new file addition delta on '%s' : '' -> '%s'\n" msgstr "" -#. ... absorb identical deltas -#: ../change_set.cc:2183 +#: change_set.cc:2183 #, c-format msgid "skipping common delta '%s' : '%s' -> '%s'\n" msgstr "" -#: ../change_set.cc:2189 +#: change_set.cc:2189 #, c-format msgid "skipping neutral delta on '%s' : %s -> %s\n" msgstr "" -#: ../change_set.cc:2197 +#: change_set.cc:2197 #, c-format msgid "propagating unperturbed delta on '%s' : '%s' -> '%s'\n" msgstr "" -#. ... or resolve conflict -#: ../change_set.cc:2207 +#: change_set.cc:2207 #, c-format msgid "merging delta '%s' : '%s' -> '%s' vs. '%s'\n" msgstr "" -#: ../change_set.cc:2220 +#: change_set.cc:2220 #, c-format msgid "resolved merge to '%s' : '%s' -> '%s'\n" msgstr "" -#: ../change_set.cc:2249 +#: change_set.cc:2249 #, c-format msgid "merging change sets\n" msgstr "" -#: ../change_set.cc:2311 +#: change_set.cc:2311 #, c-format msgid "finished merge\n" msgstr "" -#: ../change_set.cc:2330 +#: change_set.cc:2330 #, c-format msgid "inverting change set\n" msgstr "" -#: ../change_set.cc:2360 +#: change_set.cc:2360 #, c-format msgid "converted 'delete %s' to 'add as %s' in inverse\n" msgstr "" -#: ../change_set.cc:2369 +#: change_set.cc:2369 #, c-format msgid "converted add %s to delete in inverse\n" msgstr "" -#: ../change_set.cc:2379 +#: change_set.cc:2379 #, c-format msgid "converting delta %s -> %s on %s\n" msgstr "" -#: ../change_set.cc:2381 +#: change_set.cc:2381 #, c-format msgid "inverse is delta %s -> %s on %s\n" msgstr "" -#: ../change_set.cc:2447 ../change_set.cc:2495 +#: change_set.cc:2447 change_set.cc:2495 #, c-format msgid "moving file %s -> %s\n" msgstr "déplacement du fichier %s -> %s\n" -#: ../change_set.cc:2454 ../change_set.cc:2503 +#: change_set.cc:2454 change_set.cc:2503 #, c-format msgid "moving dir %s -> %s\n" msgstr "déplacement du dossier %s -> %s\n" -#: ../commands.cc:136 +#: commands.cc:136 #, c-format msgid "expanding command '%s'\n" msgstr "" -#: ../commands.cc:153 +#: commands.cc:153 #, c-format msgid "expanded command to '%s'\n" msgstr "" -#: ../commands.cc:158 +#: commands.cc:158 #, c-format msgid "command '%s' has multiple ambiguous expansions:\n" msgstr "" -#: ../commands.cc:201 +#: commands.cc:201 msgid "commands:" msgstr "commandes :" -#: ../commands.cc:245 +#: commands.cc:245 #, c-format msgid "executing command '%s'\n" msgstr "exécution de la commande « %s »\n" -#: ../commands.cc:251 +#: commands.cc:251 #, c-format msgid "unknown command '%s'\n" msgstr "commande inconnue « %s »\n" -#: ../commands.cc:298 +#: commands.cc:298 #, c-format msgid "pid file '%s' already exists" msgstr "le fichier pid « %s » existe déjà" -#: ../commands.cc:368 +#: commands.cc:368 msgid "" "Enter a description of this change.\n" "Lines beginning with `MT:' are removed automatically.\n" @@ -475,16 +479,16 @@ "Saisissez une description pour cette modification.\n" "Les lignes débutant par « MT: » sont supprimées automatiquement.\n" -#: ../commands.cc:375 +#: commands.cc:375 #, c-format msgid "edit of log message failed" msgstr "l'édition du message du journal a échouée" -#: ../commands.cc:384 +#: commands.cc:384 msgid "note: " msgstr "" -#: ../commands.cc:385 +#: commands.cc:385 #, c-format msgid "" "branch '%s' has multiple heads\n" @@ -493,60 +497,59 @@ "la branche « %s » a plusieurs heads\n" "vous devriez peut-être lancer « monotone merge »" -#: ../commands.cc:445 ../commands.cc:666 ../commands.cc:1304 -#: ../commands.cc:1374 ../commands.cc:1742 ../commands.cc:2605 -#: ../commands.cc:2620 ../commands.cc:2623 ../commands.cc:2821 -#: ../commands.cc:3462 +#: commands.cc:445 commands.cc:672 commands.cc:1316 commands.cc:1386 +#: commands.cc:1754 commands.cc:2630 commands.cc:2645 commands.cc:2648 +#: commands.cc:2846 commands.cc:3487 #, c-format msgid "no such revision '%s'" msgstr "aucune révision « %s »" -#: ../commands.cc:452 +#: commands.cc:452 #, c-format msgid "expanding selection '%s'\n" msgstr "" -#: ../commands.cc:460 +#: commands.cc:460 #, c-format msgid "no match for selection '%s'" msgstr "" -#: ../commands.cc:463 +#: commands.cc:463 #, c-format msgid "selection '%s' has multiple ambiguous expansions: \n" msgstr "" -#: ../commands.cc:470 +#: commands.cc:470 #, c-format msgid "expanded to '%s'\n" msgstr "" -#: ../commands.cc:481 +#: commands.cc:481 #, c-format msgid "non-hex digits in id" msgstr "" -#: ../commands.cc:490 +#: commands.cc:490 #, fuzzy, c-format msgid "partial id '%s' does not have an expansion" msgstr "le fichier rc « %s » n'existe pas" -#: ../commands.cc:493 +#: commands.cc:493 #, fuzzy, c-format msgid "partial id '%s' has multiple ambiguous expansions:\n" msgstr "le fichier rc « %s » n'existe pas" -#: ../commands.cc:500 +#: commands.cc:500 #, c-format msgid "expanded partial id '%s' to '%s'\n" msgstr "" -#: ../commands.cc:527 ../keys.cc:510 ../netsync.cc:2194 +#: commands.cc:527 netsync.cc:2197 #, c-format msgid "no public key '%s' found in database" msgstr "aucune clef publique « %s » dans la base de données" -#: ../commands.cc:537 +#: commands.cc:537 #, c-format msgid "" "Key : %s\n" @@ -559,71 +562,71 @@ "Nom : %s\n" "Valeur : %s\n" -#: ../commands.cc:571 +#: commands.cc:571 msgid "ok" msgstr "0K" -#: ../commands.cc:574 +#: commands.cc:574 msgid "bad" msgstr "mauvais" -#: ../commands.cc:577 +#: commands.cc:577 msgid "unknown" msgstr "inconnu" -#: ../commands.cc:652 +#: commands.cc:658 #, c-format msgid "no keys found\n" msgstr "aucune clef trouvée\n" -#: ../commands.cc:654 +#: commands.cc:660 #, c-format msgid "no keys found matching '%s'\n" msgstr "aucune clef correspondant à « %s »\n" -#: ../commands.cc:672 +#: commands.cc:678 #, c-format msgid "revision %s already has children. We cannot kill it." msgstr "la révision %s a déjà des descendants. Impossible de la tuer." -#: ../commands.cc:802 ../commands.cc:824 ../commands.cc:856 ../commands.cc:880 -#: ../commands.cc:920 +#: commands.cc:808 commands.cc:829 commands.cc:868 commands.cc:892 +#: commands.cc:932 msgid "key and cert" msgstr "clef et certificat" -#: ../commands.cc:802 ../commands.cc:824 ../commands.cc:856 +#: commands.cc:808 commands.cc:829 commands.cc:868 msgid "KEYID" msgstr "IDCLEF" -#: ../commands.cc:802 +#: commands.cc:808 msgid "generate an RSA key-pair" msgstr "générer une paire de clefs RSA" -#: ../commands.cc:812 -#, c-format -msgid "key '%s' already exists in database" -msgstr "la clef « %s » est déjà dans la base de données" +#: commands.cc:818 +#, fuzzy, c-format +msgid "key '%s' already exists" +msgstr "le fichier pid « %s » existe déjà" -#: ../commands.cc:816 +#: commands.cc:821 #, c-format msgid "generating key-pair '%s'\n" msgstr "" -#: ../commands.cc:818 +#: commands.cc:823 #, c-format msgid "storing key-pair '%s' in database\n" msgstr "" -#: ../commands.cc:824 +#: commands.cc:829 msgid "drop a public and private key" msgstr "supprimer une clef publique et privée" -#: ../commands.cc:835 +#: commands.cc:840 #, c-format msgid "dropping public key '%s' from database\n" msgstr "" -#: ../commands.cc:842 +#: commands.cc:847 #, c-format msgid "" "dropping private key '%s' from database\n" @@ -632,7 +635,7 @@ "suppression de la clef privée « %s » de la base de données\n" "\n" -#: ../commands.cc:843 +#: commands.cc:848 #, c-format msgid "" "the private key data may not have been erased from the\n" @@ -640,49 +643,58 @@ "'db load' to be sure." msgstr "" -#: ../commands.cc:851 -#, c-format -msgid "public or private key '%s' does not exist in database" +#: commands.cc:857 +#, fuzzy, c-format +msgid "" +"dropping key pair '%s' from key store\n" +"\n" +msgstr "" +"suppression de la clef privée « %s » de la base de données\n" +"\n" + +#: commands.cc:863 +#, fuzzy, c-format +msgid "public or private key '%s' does not exist" msgstr "la clef publique ou privée « %s » n'existe pas dans la base de données" -#: ../commands.cc:857 +#: commands.cc:869 msgid "change passphrase of a private RSA key" msgstr "changer la phrase de passe pour une clef RSA privée" -#: ../commands.cc:868 -#, c-format -msgid "key '%s' does not exist in database" +#: commands.cc:880 +#, fuzzy, c-format +msgid "key '%s' does not exist in the key store" msgstr "la clef « %s » n'existe pas dans la base de données" -#: ../commands.cc:875 +#: commands.cc:887 #, c-format msgid "passphrase changed\n" msgstr "la phrase de passe à changée\n" -#: ../commands.cc:880 +#: commands.cc:892 msgid "REVISION CERTNAME [CERTVAL]" msgstr "" -#: ../commands.cc:881 +#: commands.cc:893 msgid "create a cert for a revision" msgstr "créer un certificat pour une révision" -#: ../commands.cc:901 +#: commands.cc:913 #, c-format msgid "no unique private key found, and no key specified" msgstr "" -#: ../commands.cc:920 +#: commands.cc:932 msgid "REVISION NAME VALUE SIGNER1 [SIGNER2 [...]]" msgstr "" -#: ../commands.cc:921 +#: commands.cc:933 msgid "" "test whether a hypothetical cert would be trusted\n" "by current settings" msgstr "" -#: ../commands.cc:954 +#: commands.cc:966 #, c-format msgid "" "if a cert on: %s\n" @@ -692,205 +704,192 @@ "it would be: %s\n" msgstr "" -#: ../commands.cc:963 +#: commands.cc:975 msgid "trusted" msgstr "" -#: ../commands.cc:963 +#: commands.cc:975 msgid "UNtrusted" msgstr "" -#: ../commands.cc:966 ../commands.cc:979 ../commands.cc:991 -#: ../commands.cc:1008 ../commands.cc:1054 +#: commands.cc:978 commands.cc:991 commands.cc:1003 commands.cc:1020 +#: commands.cc:1066 msgid "review" msgstr "" -#: ../commands.cc:966 +#: commands.cc:978 msgid "REVISION TAGNAME" msgstr "" -#: ../commands.cc:967 +#: commands.cc:979 #, fuzzy msgid "put a symbolic tag cert on a revision version" msgstr "mettre une certificat-étiquette symbolique" -#: ../commands.cc:979 +#: commands.cc:991 msgid "ID (pass|fail|true|false|yes|no|1|0)" msgstr "" -#: ../commands.cc:980 +#: commands.cc:992 msgid "note the results of running a test on a revision" msgstr "" -#: ../commands.cc:991 ../commands.cc:1008 +#: commands.cc:1003 commands.cc:1020 msgid "REVISION" msgstr "" -#: ../commands.cc:992 +#: commands.cc:1004 msgid "approve of a particular revision" msgstr "approuver une révision particulière" -#: ../commands.cc:1003 +#: commands.cc:1015 #, c-format msgid "need --branch argument for approval" msgstr "" -#: ../commands.cc:1009 +#: commands.cc:1021 msgid "disapprove of a particular revision" msgstr "" -#: ../commands.cc:1022 +#: commands.cc:1034 #, fuzzy, c-format msgid "revision '%s' has %d changesets, cannot invert\n" msgstr "la révision %s n'existe pas" -#: ../commands.cc:1026 +#: commands.cc:1038 #, c-format msgid "need --branch argument for disapproval" msgstr "" -#: ../commands.cc:1054 +#: commands.cc:1066 msgid "REVISION [COMMENT]" msgstr "" -#: ../commands.cc:1055 +#: commands.cc:1067 msgid "comment on a particular revision" msgstr "" -#: ../commands.cc:1065 +#: commands.cc:1077 #, c-format msgid "edit comment failed" msgstr "l'édition du commentaire a échouée" -#: ../commands.cc:1068 +#: commands.cc:1080 #, c-format msgid "empty comment" msgstr "commentaire vide" -#. static void dump_change_set(string const & name, -#. change_set & cs) -#. { -#. data dat; -#. write_change_set(cs, dat); -#. cout << "change set '" << name << "'\n" << dat << endl; -#. } -#: ../commands.cc:1078 ../commands.cc:1103 ../commands.cc:1130 -#: ../commands.cc:1262 ../commands.cc:2092 ../commands.cc:2215 -#: ../commands.cc:2770 ../commands.cc:3303 +#: commands.cc:1090 commands.cc:1115 commands.cc:1142 commands.cc:1274 +#: commands.cc:2114 commands.cc:2237 commands.cc:2795 commands.cc:3328 msgid "working copy" msgstr "copie de travail" -#: ../commands.cc:1078 ../commands.cc:1103 +#: commands.cc:1090 commands.cc:1115 msgid "PATH..." msgstr "CHEMIN..." -#: ../commands.cc:1079 +#: commands.cc:1091 msgid "add files to working copy" msgstr "ajouter des fichiers à la copie de travail" -#: ../commands.cc:1104 +#: commands.cc:1116 msgid "drop files from working copy" msgstr "supprimer des fichiers de la copie de travail" -#: ../commands.cc:1130 +#: commands.cc:1142 msgid "SRC DST" msgstr "SRC DST" -#: ../commands.cc:1131 +#: commands.cc:1143 msgid "rename entries in the working copy" msgstr "renommer des entrées dans la copie de travail" -#. fload and fmerge are simple commands for debugging the line -#. merger. -#: ../commands.cc:1159 ../commands.cc:1172 ../commands.cc:2691 -#: ../commands.cc:2708 ../commands.cc:3363 +#: commands.cc:1171 commands.cc:1184 commands.cc:2716 commands.cc:2733 +#: commands.cc:3388 commands.cc:3754 msgid "debug" msgstr "" -#: ../commands.cc:1159 +#: commands.cc:1171 msgid "load file contents into db" msgstr "charger le contenu du fichier dans la base de données" -#: ../commands.cc:1172 +#: commands.cc:1184 msgid " " msgstr " " -#: ../commands.cc:1173 +#: commands.cc:1185 msgid "merge 3 files and output result" msgstr "" -#: ../commands.cc:1183 +#: commands.cc:1195 #, c-format msgid "ancestor file id does not exist" msgstr "" -#: ../commands.cc:1186 +#: commands.cc:1198 #, c-format msgid "left file id does not exist" msgstr "" -#: ../commands.cc:1189 +#: commands.cc:1201 #, c-format msgid "right file id does not exist" msgstr "" -#: ../commands.cc:1200 +#: commands.cc:1212 #, c-format msgid "merge failed" msgstr "" -#: ../commands.cc:1205 ../commands.cc:1285 ../commands.cc:1631 -#: ../commands.cc:2558 ../commands.cc:3246 ../commands.cc:3443 -#: ../commands.cc:3480 +#: commands.cc:1217 commands.cc:1297 commands.cc:1643 commands.cc:2583 +#: commands.cc:3271 commands.cc:3468 commands.cc:3505 msgid "informative" msgstr "information" -#: ../commands.cc:1205 ../commands.cc:2215 ../commands.cc:2558 -#: ../commands.cc:3303 +#: commands.cc:1217 commands.cc:2237 commands.cc:2583 commands.cc:3328 msgid "[PATH]..." msgstr "" -#: ../commands.cc:1205 +#: commands.cc:1217 msgid "show status of working copy" msgstr "afficher l'état de la copie de travail" -#: ../commands.cc:1262 +#: commands.cc:1274 msgid "[PATH]" msgstr "" -#: ../commands.cc:1263 +#: commands.cc:1275 msgid "calculate identity of PATH or stdin" msgstr "" -#: ../commands.cc:1286 +#: commands.cc:1298 msgid "FILENAME" msgstr "" -#: ../commands.cc:1287 +#: commands.cc:1299 msgid "write file from database to stdout" msgstr "" -#: ../commands.cc:1318 +#: commands.cc:1330 #, c-format msgid "no file '%s' found in revision '%s'\n" msgstr "" -#: ../commands.cc:1322 +#: commands.cc:1334 #, fuzzy, c-format msgid "dumping file '%s'\n" msgstr "importation du fichier « %s »\n" -#: ../commands.cc:1330 ../commands.cc:1437 ../commands.cc:3046 -#: ../commands.cc:3095 ../commands.cc:3180 ../commands.cc:3187 -#: ../commands.cc:3648 +#: commands.cc:1342 commands.cc:1449 commands.cc:3071 commands.cc:3120 +#: commands.cc:3205 commands.cc:3212 commands.cc:3673 msgid "tree" msgstr "arborescence" -#: ../commands.cc:1330 +#: commands.cc:1342 msgid "[DIRECTORY]\n" msgstr "" -#: ../commands.cc:1331 +#: commands.cc:1343 msgid "" "check out a revision from database into directory.\n" "If a revision is given, that's the one that will be checked out.\n" @@ -898,89 +897,86 @@ "If no directory is given, the branch name will be used as directory" msgstr "" -#. no checkout dir specified, use branch name for dir -#. use branch head revision -#: ../commands.cc:1348 ../commands.cc:1362 +#: commands.cc:1360 commands.cc:1374 #, c-format msgid "need --branch argument for branch-based checkout" msgstr "" -#: ../commands.cc:1365 +#: commands.cc:1377 #, c-format msgid "branch %s is empty" msgstr "la branche %s est vide" -#: ../commands.cc:1366 +#: commands.cc:1378 #, c-format msgid "branch %s has multiple heads" msgstr "" -#: ../commands.cc:1387 +#: commands.cc:1399 #, c-format msgid "found %d %s branch certs on revision %s\n" msgstr "" -#: ../commands.cc:1392 +#: commands.cc:1404 #, c-format msgid "revision %s is not a member of branch %s\n" msgstr "la révision %s n'est pas membre de la branche %s\n" -#: ../commands.cc:1398 +#: commands.cc:1410 #, fuzzy, c-format msgid "checkout directory '%s' already exists" msgstr "le fichier pid « %s » existe déjà" -#: ../commands.cc:1412 +#: commands.cc:1424 #, c-format msgid "no manifest %s found in database" msgstr "" -#: ../commands.cc:1414 +#: commands.cc:1426 #, c-format msgid "checking out revision %s to directory %s\n" msgstr "" -#: ../commands.cc:1420 +#: commands.cc:1432 #, c-format msgid "no file %s found in database for %s" msgstr "" -#: ../commands.cc:1424 ../commands.cc:3350 +#: commands.cc:1436 commands.cc:3375 #, c-format msgid "writing file %s to %s\n" msgstr "" -#: ../commands.cc:1437 +#: commands.cc:1449 msgid "show unmerged head revisions of branch" msgstr "" -#: ../commands.cc:1445 ../commands.cc:3055 +#: commands.cc:1457 commands.cc:3080 #, c-format msgid "please specify a branch, with --branch=BRANCH" msgstr "veuillez préciser une branche avec --branch=BRANCHE" -#: ../commands.cc:1450 ../commands.cc:3059 ../commands.cc:3129 -#: ../commands.cc:3132 +#: commands.cc:1462 commands.cc:3084 commands.cc:3154 commands.cc:3157 #, c-format msgid "branch '%s' is empty\n" msgstr "la branche « %s » est vide\n" -#: ../commands.cc:1452 +#: commands.cc:1464 #, c-format msgid "branch '%s' is currently merged:\n" msgstr "la branche « %s » est actuellement fusionnée :\n" -#: ../commands.cc:1454 +#: commands.cc:1466 #, c-format msgid "branch '%s' is currently unmerged:\n" msgstr "la branche « %s » n'est actuellement pas fusionnée :\n" -#: ../commands.cc:1493 +#: commands.cc:1505 #, c-format msgid "no epoch for branch %s\n" msgstr "" -#: ../commands.cc:1632 +#: commands.cc:1644 msgid "" "certs ID\n" "keys [PATTERN]\n" @@ -994,212 +990,211 @@ "missing" msgstr "" -#: ../commands.cc:1642 +#: commands.cc:1654 msgid "" "show database objects, or the current working copy manifest,\n" "or unknown, intentionally ignored, or missing state files" msgstr "" -#: ../commands.cc:1679 ../commands.cc:1705 ../commands.cc:1729 -#: ../commands.cc:1747 ../commands.cc:1766 ../commands.cc:1785 -#: ../commands.cc:1803 ../commands.cc:1819 ../commands.cc:1839 +#: commands.cc:1691 commands.cc:1717 commands.cc:1741 commands.cc:1759 +#: commands.cc:1778 commands.cc:1797 commands.cc:1815 commands.cc:1843 +#: commands.cc:1861 msgid "packet i/o" msgstr "" -#: ../commands.cc:1679 ../commands.cc:1705 +#: commands.cc:1691 commands.cc:1717 msgid "OLDID NEWID" msgstr "" -#: ../commands.cc:1680 +#: commands.cc:1692 msgid "write manifest delta packet to stdout" msgstr "" -#: ../commands.cc:1694 ../commands.cc:1696 ../commands.cc:1760 +#: commands.cc:1706 commands.cc:1708 commands.cc:1772 #, c-format msgid "no such manifest '%s'" msgstr "aucun manifeste « %s »" -#: ../commands.cc:1706 +#: commands.cc:1718 msgid "write file delta packet to stdout" msgstr "" -#: ../commands.cc:1720 ../commands.cc:1722 ../commands.cc:1779 -#: ../commands.cc:2113 +#: commands.cc:1732 commands.cc:1734 commands.cc:1791 commands.cc:2135 #, c-format msgid "no such file '%s'" msgstr "aucun fichier « %s »" -#: ../commands.cc:1729 ../commands.cc:1747 ../commands.cc:1766 -#: ../commands.cc:1785 ../commands.cc:1803 ../commands.cc:1819 +#: commands.cc:1741 commands.cc:1759 commands.cc:1778 commands.cc:1797 +#: commands.cc:1815 commands.cc:1843 msgid "ID" msgstr "" -#: ../commands.cc:1729 +#: commands.cc:1741 msgid "write revision data packet to stdout" msgstr "" -#: ../commands.cc:1747 +#: commands.cc:1759 msgid "write manifest data packet to stdout" msgstr "" -#: ../commands.cc:1766 +#: commands.cc:1778 msgid "write file data packet to stdout" msgstr "" -#: ../commands.cc:1785 +#: commands.cc:1797 msgid "write cert packets to stdout" msgstr "" -#: ../commands.cc:1803 +#: commands.cc:1815 msgid "write public key packet to stdout" msgstr "" -#: ../commands.cc:1811 -#, c-format -msgid "public key '%s' does not exist in database" -msgstr "" +#: commands.cc:1837 +#, fuzzy, c-format +msgid "public key '%s' does not exist" +msgstr "le fichier rc « %s » n'existe pas" -#: ../commands.cc:1819 +#: commands.cc:1843 msgid "write private key packet to stdout" msgstr "" -#: ../commands.cc:1827 -#, c-format -msgid "public and private key '%s' do not exist in database" -msgstr "" +#: commands.cc:1851 +#, fuzzy, c-format +msgid "public and private key '%s' do not exist in key store" +msgstr "la clef publique ou privée « %s » n'existe pas dans la base de données" -#: ../commands.cc:1840 +#: commands.cc:1862 msgid "read packets from files or stdin" msgstr "lecture des paquets depuis des fichiers ou l'entrée standard" -#: ../commands.cc:1848 +#: commands.cc:1870 #, c-format msgid "no packets found on stdin" msgstr "aucun paquet trouvé sur l'entrée standard" -#: ../commands.cc:1859 +#: commands.cc:1881 #, c-format msgid "no packets found in given file" msgid_plural "no packets found in given files" msgstr[0] "aucun paquet trouvé dans le fichier spécifié" msgstr[1] "aucun paquet trouvé dans les fichiers spécifiés" -#: ../commands.cc:1863 +#: commands.cc:1885 #, c-format msgid "read %d packet" msgid_plural "read %d packets" msgstr[0] "lu %d paquet" msgstr[1] "lu %d paquets" -#: ../commands.cc:1867 ../commands.cc:1956 ../commands.cc:1971 -#: ../commands.cc:1985 ../commands.cc:2000 +#: commands.cc:1889 commands.cc:1978 commands.cc:1993 commands.cc:2007 +#: commands.cc:2022 msgid "network" msgstr "réseau" -#: ../commands.cc:1868 +#: commands.cc:1890 msgid "rebuild the indices used to sync over the network" msgstr "" "reconstruction des index utilisés pour la synchronisation par le réseau" -#: ../commands.cc:1902 +#: commands.cc:1924 #, c-format msgid "setting default server to %s\n" msgstr "" -#: ../commands.cc:1908 +#: commands.cc:1930 #, c-format msgid "no hostname given" msgstr "" -#: ../commands.cc:1910 +#: commands.cc:1932 #, c-format msgid "no server given and no default server set" msgstr "" -#: ../commands.cc:1914 +#: commands.cc:1936 #, c-format msgid "using default server address: %s\n" msgstr "utilisation de l'adresse par défaut du serveur : %s\n" -#: ../commands.cc:1926 +#: commands.cc:1948 #, c-format msgid "setting default branch include pattern to '%s'\n" msgstr "" -#: ../commands.cc:1932 +#: commands.cc:1954 #, c-format msgid "setting default branch exclude pattern to '%s'\n" msgstr "" -#: ../commands.cc:1938 +#: commands.cc:1960 #, c-format msgid "no branch pattern given" msgstr "" -#: ../commands.cc:1940 +#: commands.cc:1962 #, c-format msgid "no branch pattern given and no default pattern set" msgstr "" -#: ../commands.cc:1944 +#: commands.cc:1966 #, c-format msgid "using default branch include pattern: '%s'\n" msgstr "" -#: ../commands.cc:1952 +#: commands.cc:1974 #, c-format msgid "excluding: %s\n" msgstr "" -#: ../commands.cc:1956 ../commands.cc:1971 ../commands.cc:1985 +#: commands.cc:1978 commands.cc:1993 commands.cc:2007 msgid "[ADDRESS[:PORTNUMBER] [PATTERN]]" msgstr "[ADRESSE[:PORT] [MOTIF]]" -#: ../commands.cc:1957 +#: commands.cc:1979 msgid "push branches matching PATTERN to netsync server at ADDRESS" msgstr "" "envoie les branches correspondant au MOTIF au serveur netsync à l'ADRESSE" -#: ../commands.cc:1964 ../commands.cc:1993 ../commands.cc:2010 +#: commands.cc:1986 commands.cc:2015 commands.cc:2032 #, c-format msgid "could not guess default signing key" msgstr "" -#: ../commands.cc:1972 +#: commands.cc:1994 msgid "pull branches matching PATTERN from netsync server at ADDRESS" msgstr "" -#: ../commands.cc:1979 +#: commands.cc:2001 #, c-format msgid "doing anonymous pull; use -kKEYNAME if you need authentication\n" msgstr "" "récupération anonyme; utilisez -kNOMCLEF si vous avez besoin d'une " "authentification\n" -#: ../commands.cc:1986 +#: commands.cc:2008 msgid "sync branches matching PATTERN with netsync server at ADDRESS" msgstr "" -#: ../commands.cc:2000 +#: commands.cc:2022 msgid "ADDRESS[:PORTNUMBER] PATTERN ..." msgstr "ADRESSE[:PORT] MOTIF ..." -#: ../commands.cc:2001 +#: commands.cc:2023 msgid "" "listen on ADDRESS and serve the specified branches to connecting clients" msgstr "" -#: ../commands.cc:2014 +#: commands.cc:2036 #, c-format msgid "" "need permission to store persistent passphrase (see hook persist_phrase_ok())" msgstr "" -#: ../commands.cc:2024 +#: commands.cc:2046 msgid "database" msgstr "base de données" -#: ../commands.cc:2025 +#: commands.cc:2047 msgid "" "init\n" "info\n" @@ -1217,46 +1212,46 @@ "set_epoch BRANCH EPOCH\n" msgstr "" -#: ../commands.cc:2039 +#: commands.cc:2061 msgid "manipulate database state" msgstr "manipule l'état de la base de données" -#: ../commands.cc:2092 +#: commands.cc:2114 msgid "" "set FILE ATTR VALUE\n" "get FILE [ATTR]\n" "drop FILE" msgstr "" -#: ../commands.cc:2093 +#: commands.cc:2115 msgid "set, get or drop file attributes" msgstr "" -#: ../commands.cc:2181 ../work.cc:113 +#: commands.cc:2203 work.cc:113 #, c-format msgid "registering %s file in working copy\n" msgstr "" -#: ../commands.cc:2210 +#: commands.cc:2232 #, c-format msgid "failed to parse date string '%s': %s" msgstr "" -#: ../commands.cc:2216 +#: commands.cc:2238 msgid "commit working copy to database" msgstr "" -#: ../commands.cc:2234 +#: commands.cc:2256 #, c-format msgid "no changes to commit\n" msgstr "aucun changement à valider\n" -#: ../commands.cc:2245 +#: commands.cc:2267 #, c-format msgid "beginning commit on branch '%s'\n" msgstr "" -#: ../commands.cc:2246 +#: commands.cc:2268 #, c-format msgid "" "new manifest '%s'\n" @@ -1265,12 +1260,12 @@ "nouveau manifeste « %s »\n" "nouvelle révision « %s »\n" -#: ../commands.cc:2253 +#: commands.cc:2275 #, c-format msgid "--message and --message-file are mutually exclusive" msgstr "--message et --message-file sont mutuellement exclusifs" -#: ../commands.cc:2256 +#: commands.cc:2278 #, fuzzy, c-format msgid "" "MT/log is non-empty and --message supplied\n" @@ -1278,7 +1273,7 @@ "or remove --message from the command line?" msgstr "MT/log n'est pas vide et --message-file a été passé\n" -#: ../commands.cc:2261 +#: commands.cc:2283 #, c-format msgid "" "MT/log is non-empty and --message-file supplied\n" @@ -1286,70 +1281,69 @@ "or remove --message-file from the command line?" msgstr "" -#: ../commands.cc:2279 +#: commands.cc:2301 #, fuzzy, c-format msgid "empty log message; commit canceled" msgstr "message du journal vide" -#: ../commands.cc:2291 +#: commands.cc:2313 #, c-format msgid "revision %s already in database\n" msgstr "la révision %s est déjà dans la base de données\n" -#. new revision -#: ../commands.cc:2296 +#: commands.cc:2318 #, c-format msgid "inserting new revision %s\n" msgstr "insertion de la nouvelle révision %s\n" -#: ../commands.cc:2305 +#: commands.cc:2327 #, c-format msgid "skipping manifest %s, already in database\n" msgstr "" -#: ../commands.cc:2309 +#: commands.cc:2331 #, c-format msgid "inserting manifest delta %s -> %s\n" msgstr "" -#: ../commands.cc:2320 +#: commands.cc:2342 #, c-format msgid "inserting full manifest %s\n" msgstr "" -#: ../commands.cc:2333 +#: commands.cc:2355 #, c-format msgid "skipping file delta %s, already in database\n" msgstr "" -#: ../commands.cc:2339 +#: commands.cc:2361 #, c-format msgid "inserting delta %s -> %s\n" msgstr "" -#: ../commands.cc:2349 ../commands.cc:2366 +#: commands.cc:2371 commands.cc:2388 #, c-format msgid "file '%s' modified during commit, aborting" msgstr "le fichier « %s » a été modifié pendant le commit, interruption" -#: ../commands.cc:2359 +#: commands.cc:2381 #, c-format msgid "inserting full version %s\n" msgstr "" -#: ../commands.cc:2393 +#: commands.cc:2415 #, c-format msgid "committed revision %s\n" msgstr "" -#: ../commands.cc:2399 +#: commands.cc:2421 #, c-format msgid "" "note: this revision creates divergence\n" "note: you may (or may not) wish to run 'monotone merge'" msgstr "" -#: ../commands.cc:2559 +#: commands.cc:2584 msgid "" "show current diffs on stdout.\n" "If one revision is given, the diff between the working directory and\n" @@ -1357,7 +1351,7 @@ "them is given. If no format is specified, unified is used by default." msgstr "" -#: ../commands.cc:2575 +#: commands.cc:2600 #, c-format msgid "" "--diff-args requires --external\n" @@ -1366,62 +1360,62 @@ "--diff-args requiet --external\n" "essayez d'ajouter --external ou de retirer --diff-args ?" -#: ../commands.cc:2609 +#: commands.cc:2634 #, c-format msgid "current revision has no ancestor" msgstr "la révision actuelle n'existe pas" -#: ../commands.cc:2648 +#: commands.cc:2673 #, c-format msgid "no common ancestor for %s and %s" msgstr "pas d'ancêtre commun pour %s et %s" -#: ../commands.cc:2654 +#: commands.cc:2679 #, c-format msgid "concatenating un-committed changeset to composite\n" msgstr "" -#: ../commands.cc:2691 ../commands.cc:2708 +#: commands.cc:2716 commands.cc:2733 msgid "LEFT RIGHT" msgstr "GAUCHE DROITE" -#: ../commands.cc:2691 +#: commands.cc:2716 #, fuzzy msgid "print least common ancestor" msgstr "l'ancêtre commun est %s\n" -#: ../commands.cc:2704 +#: commands.cc:2729 msgid "no common ancestor found" msgstr "aucun ancêtre commun n'a été trouvé" -#: ../commands.cc:2708 +#: commands.cc:2733 msgid "print least common ancestor / dominator" msgstr "" -#: ../commands.cc:2722 +#: commands.cc:2747 #, fuzzy msgid "no common ancestor/dominator found" msgstr "l'ancêtre commun est %s\n" -#: ../commands.cc:2747 +#: commands.cc:2772 #, c-format msgid "updating %s to %s\n" msgstr "mise à jour de %s en %s\n" -#: ../commands.cc:2771 +#: commands.cc:2796 msgid "" "update working copy.\n" "If a revision is given, base the update on that revision. If not,\n" "base the update on the head of the branch (given or implicit)." msgstr "" -#: ../commands.cc:2796 +#: commands.cc:2821 #, c-format msgid "this working directory is a new project; cannot update" msgstr "" "ce dossier de travail est un nouveau projet, impossible de mettre à jour" -#: ../commands.cc:2803 +#: commands.cc:2828 #, c-format msgid "" "your request matches no descendents of the current revision\n" @@ -1429,286 +1423,284 @@ "maybe you want --revision=" msgstr "" -#: ../commands.cc:2808 +#: commands.cc:2833 #, c-format msgid "multiple update candidates:\n" msgstr "plusieurs candidats pour la mise à jour :\n" -#: ../commands.cc:2812 +#: commands.cc:2837 #, c-format msgid "choose one with 'monotone update -r'\n" msgstr "choisissez en un avec « monotone update -r »\n" -#: ../commands.cc:2813 +#: commands.cc:2838 #, c-format msgid "multiple candidates remain after selection" msgstr "" -#: ../commands.cc:2828 +#: commands.cc:2853 #, c-format msgid "already up to date at %s\n" msgstr "déjà à jour en %s\n" -#: ../commands.cc:2832 +#: commands.cc:2857 #, c-format msgid "selected update target %s\n" msgstr "sélection de la cible %s pour la mise à jour\n" -#: ../commands.cc:2844 +#: commands.cc:2869 #, c-format msgid "" "revision %s is not a member of branch %s\n" "try again with explicit --branch\n" msgstr "" -#. working copy has no changes -#: ../commands.cc:2859 +#: commands.cc:2884 #, c-format msgid "updating along chosen edge %s -> %s\n" msgstr "" -#: ../commands.cc:2870 +#: commands.cc:2895 #, c-format msgid "merging working copy with chosen edge %s -> %s\n" msgstr "" -#: ../commands.cc:2919 +#: commands.cc:2944 #, c-format msgid "updated to base revision %s\n" msgstr "mise à jour vers la révision de base %s\n" -#: ../commands.cc:2985 +#: commands.cc:3010 #, fuzzy, c-format msgid "" "common ancestor %s found\n" "trying 3-way merge\n" msgstr "aucun ancêtre commun n'a été trouvé" -#: ../commands.cc:2996 +#: commands.cc:3021 #, c-format msgid "no common ancestor found, synthesizing edges\n" msgstr "" -#: ../commands.cc:3046 +#: commands.cc:3071 #, fuzzy msgid "merge unmerged heads of branch" msgstr "fusionne les" -#: ../commands.cc:3060 +#: commands.cc:3085 #, c-format msgid "branch '%s' is merged\n" msgstr "la branche « %s » est fusionnée\n" -#: ../commands.cc:3066 +#: commands.cc:3091 #, c-format msgid "starting with revision 1 / %d\n" msgstr "" -#: ../commands.cc:3070 +#: commands.cc:3095 #, c-format msgid "merging with revision %d / %d\n" msgstr "" -#. Somewhat redundant, but consistent with output of plain "merge" command. -#: ../commands.cc:3071 ../commands.cc:3072 ../commands.cc:3139 -#: ../commands.cc:3223 ../commands.cc:3224 +#: commands.cc:3096 commands.cc:3097 commands.cc:3164 commands.cc:3248 +#: commands.cc:3249 #, c-format msgid "[source] %s\n" msgstr "" -#: ../commands.cc:3089 ../commands.cc:3176 ../commands.cc:3243 +#: commands.cc:3114 commands.cc:3201 commands.cc:3268 #, c-format msgid "[merged] %s\n" msgstr "" -#: ../commands.cc:3092 +#: commands.cc:3117 #, c-format msgid "note: your working copies have not been updated\n" msgstr "" -#: ../commands.cc:3095 +#: commands.cc:3120 msgid "SOURCE-BRANCH DEST-BRANCH" msgstr "" -#: ../commands.cc:3096 +#: commands.cc:3121 msgid "merge from one branch to another asymmetrically" msgstr "" -#: ../commands.cc:3130 ../commands.cc:3133 +#: commands.cc:3155 commands.cc:3158 #, c-format msgid "branch '%s' is not merged\n" msgstr "la branche « %s » n'est pas fusionnée\n" -#: ../commands.cc:3138 +#: commands.cc:3163 #, c-format msgid "propagating %s -> %s\n" msgstr "" -#: ../commands.cc:3140 +#: commands.cc:3165 #, c-format msgid "[target] %s\n" msgstr "" -#: ../commands.cc:3145 +#: commands.cc:3170 #, c-format msgid "branch '%s' is up-to-date with respect to branch '%s'\n" msgstr "" -#: ../commands.cc:3147 +#: commands.cc:3172 #, c-format msgid "no action taken\n" msgstr "" -#: ../commands.cc:3151 +#: commands.cc:3176 #, c-format msgid "no merge necessary; putting %s in branch '%s'\n" msgstr "" -#: ../commands.cc:3180 +#: commands.cc:3205 msgid "refresh the inodeprint cache" msgstr "" -#: ../commands.cc:3188 +#: commands.cc:3213 msgid "" "LEFT-REVISION RIGHT-REVISION DEST-BRANCH\n" "LEFT-REVISION RIGHT-REVISION COMMON-ANCESTOR DEST-BRANCH" msgstr "" -#: ../commands.cc:3190 +#: commands.cc:3215 msgid "merge two explicitly given revisions, placing result in given branch" msgstr "" -#: ../commands.cc:3205 ../commands.cc:3207 +#: commands.cc:3230 commands.cc:3232 #, c-format msgid "%s is not an ancestor of %s" msgstr "%s n'est pas un ancêtre de %s" -#: ../commands.cc:3216 +#: commands.cc:3241 #, c-format msgid "%s and %s are the same revision, aborting" msgstr "" -#: ../commands.cc:3218 ../commands.cc:3220 +#: commands.cc:3243 commands.cc:3245 #, c-format msgid "%s is already an ancestor of %s" msgstr "" -#: ../commands.cc:3246 +#: commands.cc:3271 msgid "(revision|manifest|file|key) PARTIAL-ID" msgstr "" -#: ../commands.cc:3247 +#: commands.cc:3272 msgid "complete partial id" msgstr "" -#: ../commands.cc:3256 +#: commands.cc:3281 #, c-format msgid "non-hex digits in partial id" msgstr "" -#: ../commands.cc:3304 +#: commands.cc:3329 msgid "revert file(s), dir(s) or entire working copy" msgstr "" -#: ../commands.cc:3342 +#: commands.cc:3367 #, c-format msgid "reverting %s from %s to %s\n" msgstr "" -#: ../commands.cc:3346 +#: commands.cc:3371 #, c-format msgid "no file version %s found in database for %s" msgstr "" -#: ../commands.cc:3363 +#: commands.cc:3388 msgid "RCSFILE..." msgstr "" -#: ../commands.cc:3364 +#: commands.cc:3389 msgid "" "parse versions in RCS files\n" "this command doesn't reconstruct or import revisions.you probably want " "cvs_import" msgstr "" -#: ../commands.cc:3380 +#: commands.cc:3405 msgid "rcs" msgstr "" -#: ../commands.cc:3380 +#: commands.cc:3405 msgid "CVSROOT" msgstr "" -#: ../commands.cc:3380 +#: commands.cc:3405 msgid "import all versions in CVS repository" msgstr "" -#: ../commands.cc:3443 +#: commands.cc:3468 msgid "PATH" msgstr "" -#: ../commands.cc:3444 +#: commands.cc:3469 msgid "print annotated copy of the file from REVISION" msgstr "" -#: ../commands.cc:3461 +#: commands.cc:3486 #, c-format msgid "no revision for file '%s' in database" msgstr "" -#: ../commands.cc:3464 +#: commands.cc:3489 #, c-format msgid "annotate file file_path '%s'\n" msgstr "" -#: ../commands.cc:3473 +#: commands.cc:3498 #, c-format msgid "no such file '%s' in revision '%s'\n" msgstr "aucun fichier « %s » dans la révision « %s »\n" -#: ../commands.cc:3475 +#: commands.cc:3500 #, c-format msgid "annotate for file_id %s\n" msgstr "" -#: ../commands.cc:3480 +#: commands.cc:3505 msgid "[FILE]" msgstr "" -#: ../commands.cc:3481 +#: commands.cc:3506 msgid "" "print history in reverse order (filtering by 'FILE'). If one or more\n" "revisions are given, use them as a starting point." msgstr "" -#: ../commands.cc:3541 +#: commands.cc:3566 #, c-format msgid "revision %s does not exist in db, skipping\n" msgstr "" -#: ../commands.cc:3574 +#: commands.cc:3599 #, c-format msgid "revision '%s' in '%s' maps to '%s' in %s\n" msgstr "" -#: ../commands.cc:3648 +#: commands.cc:3673 msgid "DIRECTORY" msgstr "" -#: ../commands.cc:3648 +#: commands.cc:3673 msgid "setup a new working copy directory" msgstr "" -#: ../commands.cc:3654 +#: commands.cc:3679 #, c-format msgid "need --branch argument for setup" msgstr "" -#: ../commands.cc:3663 +#: commands.cc:3688 msgid "automation" msgstr "automatisation" -#: ../commands.cc:3664 +#: commands.cc:3689 msgid "" "interface_version\n" "heads [BRANCH]\n" @@ -1731,84 +1723,412 @@ "get_revision [ID]\n" msgstr "" -#: ../commands.cc:3683 +#: commands.cc:3708 msgid "automation interface" msgstr "" -#: ../commands.cc:3697 ../commands.cc:3713 +#: commands.cc:3722 commands.cc:3738 msgid "vars" msgstr "variables" -#: ../commands.cc:3697 +#: commands.cc:3722 msgid "DOMAIN NAME VALUE" msgstr "" -#: ../commands.cc:3698 +#: commands.cc:3723 msgid "set the database variable NAME to VALUE, in domain DOMAIN" msgstr "" -#: ../commands.cc:3713 +#: commands.cc:3738 msgid "DOMAIN NAME" msgstr "" -#: ../commands.cc:3714 +#: commands.cc:3739 msgid "remove the database variable NAME in domain DOMAIN" msgstr "" -#: ../commands.cc:3725 +#: commands.cc:3750 #, c-format msgid "no var with name %s in domain %s" msgstr "" -#: ../database.cc:80 +#: commands.cc:3755 +msgid "copy all private keys in the database into the keystore" +msgstr "" + +#: commands.cc:3772 +#, fuzzy, c-format +msgid "Public and private keys for %s don't match" +msgstr "la clef publique ou privée « %s » n'existe pas dans la base de données" + +#: database_check.cc:109 +#, fuzzy, c-format +msgid "checking %d files\n" +msgstr "la vérification de « %s » a échouée" + +#: database_check.cc:111 +msgid "files" +msgstr "" + +#: database_check.cc:116 +#, fuzzy, c-format +msgid "checking file %s\n" +msgstr "importation du fichier « %s »\n" + +#: database_check.cc:134 #, c-format +msgid "checking %d manifests\n" +msgstr "" + +#: database_check.cc:136 rcs_import.cc:1259 +msgid "manifests" +msgstr "" + +#: database_check.cc:141 +#, fuzzy, c-format +msgid "checking manifest %s\n" +msgstr "aucun manifeste « %s »" + +#: database_check.cc:153 +#, fuzzy, c-format +msgid "error parsing manifest %s: %s" +msgstr "erreur lors de la lecture du fichier RCS %s : %s\n" + +#: database_check.cc:190 +#, fuzzy, c-format +msgid "checking %d revisions\n" +msgstr "insertion de la nouvelle révision %s\n" + +#: database_check.cc:192 database_check.cc:380 netsync.cc:3716 +#: rcs_import.cc:1258 +msgid "revisions" +msgstr "révisions" + +#: database_check.cc:197 +#, fuzzy, c-format +msgid "checking revision %s\n" +msgstr "nouvelle révisions %s\n" + +#: database_check.cc:209 +#, fuzzy, c-format +msgid "error parsing revision %s: %s" +msgstr "erreur lors de la lecture du fichier RCS %s : %s\n" + +#: database_check.cc:277 +#, c-format +msgid "checked %d revisions after starting with %d\n" +msgstr "" + +#: database_check.cc:289 +#, c-format +msgid "checking %d ancestry edges\n" +msgstr "" + +#: database_check.cc:291 +msgid "ancestry" +msgstr "" + +#: database_check.cc:322 +#, c-format +msgid "checking %d public keys\n" +msgstr "" + +#: database_check.cc:324 netsync.cc:3720 +msgid "keys" +msgstr "clefs" + +#: database_check.cc:348 +#, fuzzy, c-format +msgid "checking %d revision certs\n" +msgstr "insertion de la nouvelle révision %s\n" + +#: database_check.cc:350 netsync.cc:3718 +msgid "certs" +msgstr "certs" + +#: database_check.cc:378 +#, c-format +msgid "checking local history of %d revisions\n" +msgstr "" + +#: database_check.cc:413 +#, c-format +msgid "file %s missing (%d manifest references)\n" +msgstr "" + +#: database_check.cc:420 +#, c-format +msgid "file %s unreferenced\n" +msgstr "" + +#: database_check.cc:442 +#, c-format +msgid "manifest %s missing (%d revision references)\n" +msgstr "" + +#: database_check.cc:449 +#, c-format +msgid "manifest %s unreferenced\n" +msgstr "" + +#: database_check.cc:455 +#, c-format +msgid "manifest %s incomplete (%d missing files)\n" +msgstr "" + +#: database_check.cc:462 +#, c-format +msgid "manifest %s is not parseable (perhaps with unnormalized paths?)\n" +msgstr "" + +#: database_check.cc:469 +#, c-format +msgid "manifest %s is not in normalized form\n" +msgstr "" + +#: database_check.cc:493 +#, c-format +msgid "revision %s missing (%d revision references; %d cert references)\n" +msgstr "" + +#: database_check.cc:500 +#, c-format +msgid "revision %s incomplete (%d missing manifests)\n" +msgstr "" + +#: database_check.cc:507 +#, c-format +msgid "revision %s incomplete (%d missing revisions)\n" +msgstr "" + +#: database_check.cc:514 +#, c-format +msgid "revision %s incomplete (%d incomplete manifests)\n" +msgstr "" + +#: database_check.cc:521 +#, c-format msgid "" +"revision %s mismatched parents (%d ancestry parents; %d revision refs)\n" +msgstr "" + +#: database_check.cc:530 +#, c-format +msgid "revision %s mismatched children (%d ancestry children; %d parents)\n" +msgstr "" + +#: database_check.cc:542 +#, fuzzy, c-format +msgid "revision %s has bad history (%s)\n" +msgstr "la révision %s est déjà dans la base de données\n" + +#: database_check.cc:549 +#, c-format +msgid "revision %s is not parseable (perhaps with unnormalized paths?)\n" +msgstr "" + +#: database_check.cc:556 +#, fuzzy, c-format +msgid "revision %s is not in normalized form\n" +msgstr "la révision %s n'est pas membre de la branche %s\n" + +#: database_check.cc:573 +#, fuzzy, c-format +msgid "key %s signed %d certs\n" +msgstr "clef et certificat" + +#: database_check.cc:580 +#, c-format +msgid "key %s missing (signed %d certs)\n" +msgstr "" + +#: database_check.cc:613 +#, c-format +msgid "revision %s unchecked signature in %s cert from missing key %s\n" +msgstr "" + +#: database_check.cc:621 +#, c-format +msgid "revision %s bad signature in %s cert from key %s\n" +msgstr "" + +#: database_check.cc:636 +#, c-format +msgid "revision %s missing %s cert\n" +msgstr "" + +#: database_check.cc:645 +#, c-format +msgid "revision %s mismatched certs (%d authors %d dates %d changelogs)\n" +msgstr "" + +#: database_check.cc:717 +#, fuzzy, c-format +msgid "%d missing files\n" +msgstr "importation du fichier « %s »\n" + +#: database_check.cc:719 +#, c-format +msgid "%d unreferenced files\n" +msgstr "" + +#: database_check.cc:722 +#, fuzzy, c-format +msgid "%d missing manifests\n" +msgstr "noeud %d = révision %s = manifeste %s\n" + +#: database_check.cc:724 +#, c-format +msgid "%d unreferenced manifests\n" +msgstr "" + +#: database_check.cc:726 +#, c-format +msgid "%d incomplete manifests\n" +msgstr "" + +#: database_check.cc:728 +#, c-format +msgid "%d manifests not parseable (perhaps with invalid paths)\n" +msgstr "" + +#: database_check.cc:731 +#, c-format +msgid "%d manifests not in normalized form\n" +msgstr "" + +#: database_check.cc:734 +#, fuzzy, c-format +msgid "%d missing revisions\n" +msgstr "insertion de la nouvelle révision %s\n" + +#: database_check.cc:736 +#, fuzzy, c-format +msgid "%d incomplete revisions\n" +msgstr "nouvelle révisions %s\n" + +#: database_check.cc:738 +#, c-format +msgid "%d mismatched parents\n" +msgstr "" + +#: database_check.cc:740 +#, c-format +msgid "%d mismatched children\n" +msgstr "" + +#: database_check.cc:742 +#, c-format +msgid "%d revisions with bad history\n" +msgstr "" + +#: database_check.cc:744 +#, c-format +msgid "%d revisions not parseable (perhaps with invalid paths)\n" +msgstr "" + +#: database_check.cc:747 +#, c-format +msgid "%d revisions not in normalized form\n" +msgstr "" + +#: database_check.cc:750 +#, c-format +msgid "%d missing keys\n" +msgstr "" + +#: database_check.cc:753 +#, c-format +msgid "%d missing certs\n" +msgstr "" + +#: database_check.cc:755 +#, c-format +msgid "%d mismatched certs\n" +msgstr "" + +#: database_check.cc:757 +#, c-format +msgid "%d unchecked signatures due to missing keys\n" +msgstr "" + +#: database_check.cc:759 +#, c-format +msgid "%d bad signatures\n" +msgstr "" + +#: database_check.cc:784 +#, c-format +msgid "" +"check complete: %d files; %d manifests; %d revisions; %d keys; %d certs\n" +msgstr "" + +#: database_check.cc:790 +#, c-format +msgid "total problems detected: %d (%d serious)\n" +msgstr "" + +#: database_check.cc:792 +#, c-format +msgid "serious problems detected" +msgstr "" + +#: database_check.cc:794 +#, c-format +msgid "minor problems detected\n" +msgstr "" + +#: database_check.cc:796 +#, fuzzy, c-format +msgid "database is good\n" +msgstr "base de données" + +#: database.cc:80 +#, c-format +msgid "" "database schemas do not match: wanted %s, got %s. try migrating database" msgstr "" -#: ../database.cc:135 ../database.cc:197 +#: database.cc:135 database.cc:197 #, c-format msgid "database %s does not exist" msgstr "la base de données %s n'existe pas" -#: ../database.cc:136 +#: database.cc:136 #, c-format msgid "%s is a directory, not a database" msgstr "%s est un dossier, pas une base de données" -#: ../database.cc:143 +#: database.cc:143 #, c-format msgid "unable to probe database version in file %s" msgstr "" -#: ../database.cc:150 +#: database.cc:150 #, c-format msgid "database %s is not an sqlite version 3 file, try dump and reload" msgstr "" -#. first log the code so we can find _out_ what the confusing code -#. was... note that code does not uniquely identify the errmsg, unlike -#. errno's. -#: ../database.cc:172 ../database.cc:183 +#: database.cc:172 database.cc:183 #, c-format msgid "sqlite error: %d: %s" msgstr "erreur sqlite : %d : %s" -#: ../database.cc:177 +#: database.cc:177 msgid "make sure database and containing directory are writeable" msgstr "" -#: ../database.cc:198 +#: database.cc:198 #, c-format msgid "database %s is a directory" msgstr "" -#: ../database.cc:224 +#: database.cc:224 #, c-format msgid "could not initialize database: %s: already exists" msgstr "" -#: ../database.cc:229 +#: database.cc:229 #, c-format msgid "" "existing (possibly stale) journal file '%s' has same stem as new database '%" @@ -1816,12 +2136,12 @@ "cancelling database creation" msgstr "" -#: ../database.cc:348 +#: database.cc:348 #, c-format msgid "cannot create %s; it already exists" msgstr "impossible de créer %s car ceci existe déjà" -#: ../database.cc:412 +#: database.cc:412 #, c-format msgid "" "schema version : %s\n" @@ -1862,258 +2182,227 @@ " certificats : %u\n" " total : %u\n" -#: ../database.cc:465 +#: database.cc:465 #, c-format msgid "database schema version: %s" msgstr "version du schéma de la base de données : %s" -#: ../database.cc:545 +#: database.cc:483 +#, fuzzy +msgid "mcerts" +msgstr "certs" + +#: database.cc:484 +#, fuzzy +msgid "pubkeys" +msgstr "clefs" + +#: database.cc:485 +#, fuzzy +msgid "privkeys" +msgstr "clefs" + +#: database.cc:545 #, c-format msgid "statement cache statistics\n" msgstr "statistiques relatives au cache des expressions\n" -#: ../database.cc:546 +#: database.cc:546 #, c-format msgid "prepared %d statements\n" msgstr "%d expressions préparées\n" -#: ../database.cc:551 +#: database.cc:551 #, c-format msgid "%d executions of %s\n" msgstr "%d exécutions de %s\n" -#: ../database.cc:608 +#: database.cc:608 #, c-format msgid "prepared statement %s\n" msgstr "" -#: ../database.cc:612 +#: database.cc:612 #, c-format msgid "multiple statements in query: %s\n" msgstr "" -#: ../database.cc:618 +#: database.cc:618 #, c-format msgid "wanted %d columns got %d in query: %s\n" msgstr "" -#: ../database.cc:624 +#: database.cc:624 #, c-format msgid "binding %d parameters for %s\n" msgstr "" -#: ../database.cc:638 +#: database.cc:638 #, c-format msgid "binding %d with value '%s'\n" msgstr "" -#: ../database.cc:654 +#: database.cc:654 #, c-format msgid "null result in query: %s\n" msgstr "" -#: ../database.cc:672 +#: database.cc:672 #, c-format msgid "wanted %d rows got %s in query: %s\n" msgstr "" -#: ../database.cc:682 +#: database.cc:682 #, c-format msgid "cannot change filename to %s while db is open" msgstr "" -#: ../database.cc:880 +#: database.cc:880 #, c-format msgid "version cache expiring %s\n" msgstr "" -#. ++cache_hits; -#: ../database.cc:902 +#: database.cc:902 #, c-format msgid "version cache hit on %s\n" msgstr "" -#. tricky path -#. we start from the file we want to reconstruct and work *forwards* -#. through the database, until we get to a full data object. we then -#. trace back through the list of edges we followed to get to the data -#. object, applying reverse deltas. -#. -#. the effect of this algorithm is breadth-first search, backwards -#. through the storage graph, to discover a forwards shortest path, and -#. then following that shortest path with delta application. -#. -#. we used to do this with the boost graph library, but it invovled -#. loading too much of the storage graph into memory at any moment. this -#. imperative version only loads the descendents of the reconstruction -#. node, so it much cheaper in terms of memory. -#. -#. we also maintain a cycle-detecting set, just to be safe -#: ../database.cc:947 +#: database.cc:947 #, c-format msgid "reconstructing %s in %s\n" msgstr "" -#: ../database.cc:1001 +#: database.cc:1001 #, c-format msgid "inserting edge: %s <- %s\n" msgstr "" -#: ../database.cc:1005 +#: database.cc:1005 #, c-format msgid "skipping merge edge %s <- %s\n" msgstr "" -#: ../database.cc:1051 +#: database.cc:1051 #, c-format msgid "following delta %s -> %s\n" msgstr "" -#. perform the actual SQL transactions to kill rev rid here -#: ../database.cc:1415 +#: database.cc:1415 #, c-format msgid "Killing revision %s locally\n" msgstr "" -#: ../database.cc:1427 +#: database.cc:1427 #, c-format msgid "Deleting all references to branch %s\n" msgstr "" -#: ../database.cc:1440 +#: database.cc:1440 #, c-format msgid "Deleting all references to tag %s\n" msgstr "" -#: ../database.cc:1590 ../database.cc:1602 +#: database.cc:1561 #, c-format msgid "another key with name '%s' already exists" msgstr "" -#: ../database.cc:2451 +#: database.cc:2410 #, c-format msgid "no database specified" msgstr "aucune base de données n'a été spécifiée" -#: ../database.cc:2462 +#: database.cc:2421 #, c-format msgid "could not open database '%s': %s" msgstr "impossible d'ouvrir la base de données « %s » : %s" -#. Coming into loop we have: -#. i -#. z --pres--> z 0 -#. o --pres--> o 1 -#. a --chng--> a 2 The important thing here is that 'a' in -#. t the LHS matches with ... -#. u -#. v -#. a ... the a on the RHS here. Hence we can -#. q --pres--> q 3 'shift' the entire 'changed' block -#. e --chng--> d 4 upwards, leaving a 'preserved' line -#. g --pres--> g 5 'a'->'a' -#. -#. Want to end up with: -#. i -#. z --pres--> z 0 -#. o --chng--> o 1 -#. a -#. t -#. u -#. v -#. a --pres--> a 2 -#. q --pres--> q 3 -#. e --chng--> d 4 -#. g --pres--> g 5 -#. -#. Now all the 'changed' extents are normalised to the -#. earliest possible position. -#: ../diff_patch.cc:209 +#: diff_patch.cc:209 #, c-format msgid "exchanging preserved extent [%d+%d] with changed extent [%d+%d]\n" msgstr "" -#: ../diff_patch.cc:300 +#: diff_patch.cc:300 #, c-format msgid "conflicting edits: %s %d[%d] '%s' vs. %s %d[%d] '%s'\n" msgstr "" -#: ../diff_patch.cc:328 +#: diff_patch.cc:328 #, c-format msgid "conflicting edits: [%s %d %d] vs. [%s %d %d]\n" msgstr "" -#: ../diff_patch.cc:376 +#: diff_patch.cc:376 #, c-format msgid "calculating left edit script on %d -> %d lines\n" msgstr "" -#: ../diff_patch.cc:384 +#: diff_patch.cc:384 #, c-format msgid "calculating right edit script on %d -> %d lines\n" msgstr "" -#: ../diff_patch.cc:392 +#: diff_patch.cc:392 #, c-format msgid "calculating left extents on %d edits\n" msgstr "" -#: ../diff_patch.cc:397 +#: diff_patch.cc:397 #, c-format msgid "calculating right extents on %d edits\n" msgstr "" -#: ../diff_patch.cc:402 +#: diff_patch.cc:402 #, c-format msgid "normalizing %d right extents\n" msgstr "" -#: ../diff_patch.cc:405 +#: diff_patch.cc:405 #, c-format msgid "normalizing %d left extents\n" msgstr "" -#: ../diff_patch.cc:411 +#: diff_patch.cc:411 #, c-format msgid "conflicting prefixes\n" msgstr "" -#: ../diff_patch.cc:417 +#: diff_patch.cc:417 #, c-format msgid "conflicting suffixes\n" msgstr "" -#: ../diff_patch.cc:421 +#: diff_patch.cc:421 #, c-format msgid "merging %d left, %d right extents\n" msgstr "" -#: ../diff_patch.cc:452 +#: diff_patch.cc:452 #, c-format msgid "conflict detected. no merge.\n" msgstr "" -#: ../diff_patch.cc:472 +#: diff_patch.cc:472 #, c-format msgid "recording successful merge of %s <-> %s into %s\n" msgstr "" -#: ../diff_patch.cc:528 +#: diff_patch.cc:528 #, c-format msgid "trying to merge %s <-> %s (ancestor: %s)\n" msgstr "" -#: ../diff_patch.cc:533 ../diff_patch.cc:638 +#: diff_patch.cc:533 diff_patch.cc:638 #, c-format msgid "files are identical\n" msgstr "les fichiers sont identiques\n" -#: ../diff_patch.cc:575 +#: diff_patch.cc:575 #, c-format msgid "internal 3-way merged ok\n" msgstr "" -#: ../diff_patch.cc:589 +#: diff_patch.cc:589 #, c-format msgid "" "help required for 3-way merge\n" @@ -2128,17 +2417,17 @@ "[ droite] %s\n" "[fusionné] %s\n" -#: ../diff_patch.cc:606 +#: diff_patch.cc:606 #, c-format msgid "lua merge3 hook merged ok\n" msgstr "" -#: ../diff_patch.cc:633 +#: diff_patch.cc:633 #, c-format msgid "trying to merge %s <-> %s\n" msgstr "" -#: ../diff_patch.cc:649 +#: diff_patch.cc:649 #, c-format msgid "" "help required for 2-way merge\n" @@ -2151,37 +2440,37 @@ "[ droite] %s\n" "[fusionné] %s\n" -#: ../diff_patch.cc:663 +#: diff_patch.cc:663 #, c-format msgid "lua merge2 hook merged ok\n" msgstr "" -#: ../diff_patch.cc:694 +#: diff_patch.cc:694 #, c-format msgid "temporarily recording merge of %s <-> %s into %s\n" msgstr "" -#: ../diff_patch.cc:711 +#: diff_patch.cc:711 #, c-format msgid "file '%s' does not exist in working copy" msgstr "le fichier « %s » n'existe pas dans la copie de travail" -#: ../diff_patch.cc:712 +#: diff_patch.cc:712 #, c-format msgid "'%s' in working copy is a directory, not a file" msgstr "" -#: ../diff_patch.cc:716 +#: diff_patch.cc:716 #, c-format msgid "file %s in working copy has id %s, wanted %s" msgstr "" -#: ../file_io.cc:116 +#: file_io.cc:116 #, c-format msgid "expected file '%s', but it is a directory." msgstr "" -#: ../file_io.cc:186 ../file_io.cc:193 +#: file_io.cc:186 file_io.cc:193 #, c-format msgid "" "could not create directory '%s'\n" @@ -2190,7 +2479,7 @@ "impossible de créer le dossier « %s »\n" "car c'est un fichier" -#: ../file_io.cc:188 +#: file_io.cc:188 #, c-format msgid "" "could not create directory '%s'\n" @@ -2199,157 +2488,157 @@ "impossible de créer le dossier « %s »\n" "%s" -#: ../file_io.cc:192 +#: file_io.cc:192 #, c-format msgid "could not create directory '%s'" msgstr "impossible de créer le dossier « %s »" -#: ../file_io.cc:205 +#: file_io.cc:205 #, fuzzy, c-format msgid "failed to create directory '%s' for '%s'" msgstr "impossible de créer le dossier : %s : %s\n" -#: ../file_io.cc:213 +#: file_io.cc:213 #, c-format msgid "file to delete '%s' does not exist" msgstr "le fichier à supprimer « %s » n'existe pas" -#: ../file_io.cc:214 +#: file_io.cc:214 #, fuzzy, c-format msgid "file to delete, '%s', is not a file but a directory" msgstr "le fichier à supprimer « %s » n'existe pas" -#: ../file_io.cc:222 +#: file_io.cc:222 #, fuzzy, c-format msgid "directory to delete, '%s', does not exist" msgstr "le dossier à supprimer « %s » n'existe pas" -#: ../file_io.cc:223 +#: file_io.cc:223 #, fuzzy, c-format msgid "directory to delete, '%s', is a file" msgstr "le dossier à supprimer « %s » n'existe pas" -#: ../file_io.cc:232 +#: file_io.cc:232 #, c-format msgid "rename source file '%s' does not exist" msgstr "" -#: ../file_io.cc:233 +#: file_io.cc:233 #, c-format msgid "rename source file '%s' is a directory -- bug in monotone?" msgstr "" -#: ../file_io.cc:236 ../file_io.cc:249 +#: file_io.cc:236 file_io.cc:249 #, fuzzy, c-format msgid "rename target '%s' already exists" msgstr "le fichier pid « %s » existe déjà" -#: ../file_io.cc:245 +#: file_io.cc:245 #, c-format msgid "rename source dir '%s' does not exist" msgstr "" -#: ../file_io.cc:246 +#: file_io.cc:246 #, c-format msgid "rename source dir '%s' is a file -- bug in monotone?" msgstr "" -#: ../file_io.cc:260 +#: file_io.cc:260 #, fuzzy, c-format msgid "rename source path '%s' does not exist" msgstr "le chemin %s n'existe pas" -#: ../file_io.cc:275 +#: file_io.cc:275 #, c-format msgid "file %s does not exist" msgstr "le fichier %s n'existe pas" -#: ../file_io.cc:276 +#: file_io.cc:276 #, c-format msgid "file %s cannot be read as data; it is a directory" msgstr "" -#: ../file_io.cc:280 +#: file_io.cc:280 #, c-format msgid "cannot open file %s for reading" msgstr "" -#: ../file_io.cc:324 +#: file_io.cc:347 #, c-format msgid "Cannot read standard input multiple times" msgstr "Impossible de lire l'entrée standard plusieurs fois" -#: ../file_io.cc:354 +#: file_io.cc:378 #, c-format msgid "file '%s' cannot be overwritten as data; it is a directory" msgstr "" -#: ../file_io.cc:368 +#: file_io.cc:386 #, c-format msgid "cannot open file %s for writing" msgstr "" -#: ../file_io.cc:375 +#: file_io.cc:393 #, c-format msgid "removing %s failed" msgstr "la suppression de %s a échouée" -#: ../file_io.cc:437 +#: file_io.cc:475 #, c-format msgid "ignoring book keeping entry %s\n" msgstr "" -#: ../file_io.cc:457 +#: file_io.cc:495 #, c-format msgid "caught runtime error %s constructing file path for %s\n" msgstr "" -#: ../file_io.cc:481 +#: file_io.cc:519 #, c-format msgid "no such file or directory: '%s'" msgstr "Aucun fichier ou répertoire de ce type : « %s »" -#: ../keys.cc:42 +#: keys.cc:42 #, c-format msgid "running arc4 process on %d bytes of data\n" msgstr "" -#: ../keys.cc:80 +#: keys.cc:76 #, c-format msgid "got empty passphrase from get_passphrase() hook" msgstr "la phrase de passe obtenue depuis get_passphrase() est vide" -#: ../keys.cc:96 +#: keys.cc:92 #, c-format msgid "empty passphrase not allowed" msgstr "la phrase de passe ne doit pas être vide" -#: ../keys.cc:103 +#: keys.cc:99 #, c-format msgid "confirm passphrase for key ID [%s]: " msgstr "" -#: ../keys.cc:108 +#: keys.cc:104 #, c-format msgid "empty passphrases not allowed, try again\n" msgstr "" -#: ../keys.cc:109 ../keys.cc:116 +#: keys.cc:105 keys.cc:112 #, c-format msgid "too many failed passphrases\n" msgstr "" -#: ../keys.cc:115 +#: keys.cc:111 #, c-format msgid "passphrases do not match, try again\n" msgstr "" -#: ../keys.cc:122 +#: keys.cc:118 #, c-format msgid "no passphrase given" msgstr "" -#: ../keys.cc:184 +#: keys.cc:177 #, c-format msgid "" "generated %d-byte public key\n" @@ -2358,163 +2647,179 @@ "clef publique de %d octets générée\n" "clef privée (chiffrée) de %d octets générée\n" -#: ../keys.cc:207 ../keys.cc:263 +#: keys.cc:193 #, c-format -msgid "building signer from %d-byte decrypted private key\n" +msgid "base64-decoding %d-byte private key\n" msgstr "" -#: ../keys.cc:256 +#: keys.cc:198 +#, fuzzy, c-format +msgid "have %d-byte encrypted private key\n" +msgstr "" +"clef publique de %d octets générée\n" +"clef privée (chiffrée) de %d octets générée\n" + +#: keys.cc:243 #, c-format -msgid "base64-decoding %d-byte private key\n" +msgid "base64-decoding %d-byte old private key\n" msgstr "" -#: ../keys.cc:300 +#: keys.cc:254 #, c-format +msgid "building signer from %d-byte decrypted private key\n" +msgstr "" + +#: keys.cc:353 +#, c-format msgid "produced %d-byte signature\n" msgstr "" -#: ../keys.cc:328 +#: keys.cc:381 #, c-format msgid "building verifier for %d-byte pub key\n" msgstr "" -#. check the text+sig against the key -#: ../keys.cc:350 +#: keys.cc:403 #, c-format msgid "checking %d-byte (%d decoded) signature\n" msgstr "" -#: ../keys.cc:521 +#: keys.cc:529 #, c-format +msgid "no key pair '%s' found in key store or get_priv_key hook" +msgstr "" + +#: keys.cc:540 +#, c-format msgid "passphrase for '%s' is incorrect" msgstr "" -#: ../lua.cc:109 +#: lua.cc:109 #, c-format msgid "lua failure: %s; stack = %s\n" msgstr "" -#: ../lua.cc:115 +#: lua.cc:115 #, c-format msgid "Lua::ok(): failed = %i" msgstr "" -#: ../lua.cc:124 +#: lua.cc:124 #, c-format msgid "lua stack: %s" msgstr "" -#: ../lua.cc:204 +#: lua.cc:204 #, c-format msgid "lua: extracted string = %s" msgstr "" -#: ../lua.cc:217 +#: lua.cc:217 #, c-format msgid "lua: extracted int = %i" msgstr "" -#: ../lua.cc:230 +#: lua.cc:230 #, c-format msgid "lua: extracted double = %i" msgstr "" -#: ../lua.cc:244 +#: lua.cc:244 #, c-format msgid "lua: extracted bool = %i" msgstr "" -#: ../lua.cc:364 +#: lua.cc:364 #, c-format msgid "loading lua hook %s" msgstr "" -#: ../lua.cc:527 +#: lua.cc:527 #, c-format msgid "guess_binary called with an invalid parameter" msgstr "" -#: ../lua.cc:557 +#: lua.cc:557 #, c-format msgid "Include called with an invalid parameter" msgstr "" -#: ../lua.cc:572 +#: lua.cc:572 #, c-format msgid "IncludeDir called with an invalid parameter" msgstr "" -#: ../lua.cc:575 +#: lua.cc:575 #, c-format msgid "Directory '%s' does not exists" msgstr "le dossier « %s » n'existe pas" -#: ../lua.cc:576 +#: lua.cc:576 #, c-format msgid "'%s' is not a directory" msgstr "« %s » n'est pas un dossier" -#: ../lua.cc:595 ../lua.cc:744 +#: lua.cc:595 lua.cc:744 #, c-format msgid "lua error while loading rcfile '%s'" msgstr "" -#: ../lua.cc:741 ../lua.cc:754 +#: lua.cc:741 lua.cc:754 #, c-format msgid "opening rcfile '%s' ...\n" msgstr "ouverture du fichier rc « %s » ...\n" -#: ../lua.cc:745 ../lua.cc:757 +#: lua.cc:745 lua.cc:757 #, c-format msgid "'%s' is ok\n" msgstr "" -#: ../lua.cc:756 +#: lua.cc:756 #, c-format msgid "lua error while loading '%s'" msgstr "" -#: ../lua.cc:761 +#: lua.cc:761 #, c-format msgid "rcfile '%s' does not exist" msgstr "le fichier rc « %s » n'existe pas" -#: ../lua.cc:762 +#: lua.cc:762 #, c-format msgid "skipping nonexistent rcfile '%s'\n" msgstr "" -#: ../lua.cc:1203 +#: lua.cc:1207 #, c-format msgid "calling attr_init_function for %s" msgstr "" -#: ../lua.cc:1207 +#: lua.cc:1211 #, c-format msgid " calling an attr_init_function for %s" msgstr "" -#: ../lua.cc:1220 +#: lua.cc:1224 #, c-format msgid " added attr %s = %s" msgstr "" -#: ../lua.cc:1224 +#: lua.cc:1228 #, c-format msgid " no attr added" msgstr "" -#: ../manifest.cc:55 +#: manifest.cc:55 #, c-format msgid "scanning file %s\n" msgstr "" -#: ../manifest.cc:188 +#: manifest.cc:188 #, c-format msgid "missing %s" msgstr "" -#: ../manifest.cc:201 +#: manifest.cc:201 #, c-format msgid "" "%d missing files\n" @@ -2527,209 +2832,217 @@ "lancer soit « monotone drop FICHIER » pour le supprimer définitivement,\n" "soit « monotone revert FICHIER » pour le restaurer\n" -#: ../merkle_tree.cc:281 +#: merkle_tree.cc:281 #, c-format msgid "node level is %d, exceeds maximum %d" msgstr "" -#: ../merkle_tree.cc:317 +#: merkle_tree.cc:317 #, c-format msgid "mismatched node hash value %s, expected %s" msgstr "" -#: ../monotone.cc:51 +#: monotone.cc:51 msgid "select branch cert for operation" msgstr "" -#: ../monotone.cc:52 +#: monotone.cc:52 msgid "select revision id for operation" msgstr "" -#: ../monotone.cc:53 +#: monotone.cc:53 #, fuzzy msgid "set commit changelog message" msgstr "message du journal vide" -#: ../monotone.cc:54 +#: monotone.cc:54 msgid "set filename containing commit changelog message" msgstr "" -#: ../monotone.cc:55 +#: monotone.cc:55 msgid "override date/time for commit" msgstr "" -#: ../monotone.cc:56 +#: monotone.cc:56 msgid "override author for commit" msgstr "" -#: ../monotone.cc:57 +#: monotone.cc:57 msgid "limit the number of levels of directories to descend" msgstr "" -#: ../monotone.cc:58 +#: monotone.cc:58 msgid "limit the log output to the given number of entries" msgstr "" -#: ../monotone.cc:59 +#: monotone.cc:59 msgid "record process id of server" msgstr "" -#: ../monotone.cc:60 +#: monotone.cc:60 msgid "print a brief version of the normal output" msgstr "" -#: ../monotone.cc:61 +#: monotone.cc:61 msgid "print diffs along with logs" msgstr "" -#: ../monotone.cc:62 +#: monotone.cc:62 msgid "skip merges when printing logs" msgstr "" -#: ../monotone.cc:63 +#: monotone.cc:63 msgid "use the current arguments as the future default" msgstr "" -#: ../monotone.cc:64 -msgid "leave out branches matching a pattern" +#: monotone.cc:64 +msgid "leave out anything described by its argument" msgstr "" -#: ../monotone.cc:65 +#: monotone.cc:65 msgid "use unified diff format" msgstr "utiliser le format diff unifié" -#: ../monotone.cc:66 +#: monotone.cc:66 msgid "use context diff format" msgstr "utiliser le format diff contextuel" -#: ../monotone.cc:67 +#: monotone.cc:67 msgid "use external diff hook for generating diffs" msgstr "" -#: ../monotone.cc:68 +#: monotone.cc:68 msgid "argument to pass external diff hook" msgstr "" -#: ../monotone.cc:69 +#: monotone.cc:69 msgid "use least common ancestor as ancestor for merge" msgstr "" -#: ../monotone.cc:70 +#: monotone.cc:70 msgid "perform the associated file operation" msgstr "" -#: ../monotone.cc:79 +#: monotone.cc:79 msgid "print debug log to stderr while running" msgstr "" -#: ../monotone.cc:80 +#: monotone.cc:80 msgid "file to dump debugging log to, on failure" msgstr "" -#: ../monotone.cc:81 +#: monotone.cc:81 msgid "suppress log and progress messages" msgstr "" -#: ../monotone.cc:82 +#: monotone.cc:82 msgid "display help message" msgstr "afficher le message d'aide" -#: ../monotone.cc:83 +#: monotone.cc:83 msgid "print version number, then exit" msgstr "afficher le numéro de version, puis quitte" -#: ../monotone.cc:84 +#: monotone.cc:84 msgid "print detailed version number, then exit" msgstr "afficher le numéro de version détaillée, puis quitte" -#: ../monotone.cc:85 +#: monotone.cc:85 msgid "insert command line arguments taken from the given file" msgstr "" -#: ../monotone.cc:86 +#: monotone.cc:86 msgid "set ticker style (count|dot|none)" msgstr "" -#: ../monotone.cc:87 +#: monotone.cc:87 msgid "do not load standard lua hooks" msgstr "ne pas charger les hooks standards lua" -#: ../monotone.cc:88 +#: monotone.cc:88 msgid "do not load ~/.monotone/monotonerc or MT/monotonerc lua files" msgstr "" "ne pas charger les fichiers lua ~/.monotone/monotonerc ou MT/monotonerc" -#: ../monotone.cc:89 +#: monotone.cc:89 msgid "load extra rc file" msgstr "charger un fichier rc supplémentaire" -#: ../monotone.cc:90 +#: monotone.cc:90 msgid "set key for signatures" msgstr "" -#: ../monotone.cc:91 +#: monotone.cc:91 msgid "set name of database" msgstr "" -#: ../monotone.cc:92 +#: monotone.cc:92 msgid "limit search for working copy to specified root" msgstr "" -#: ../monotone.cc:93 +#: monotone.cc:93 msgid "verbose completion output" msgstr "" -#: ../monotone.cc:199 +#: monotone.cc:94 +msgid "set location of key store" +msgstr "" + +#: monotone.cc:200 #, c-format msgid "problem parsing arguments from file %s: %s" msgstr "" -#: ../monotone.cc:208 +#: monotone.cc:209 #, c-format msgid "weird error when stuffing arguments read from %s: %s\n" msgstr "" -#: ../monotone.cc:258 +#: monotone.cc:259 #, c-format msgid "command line: %s\n" msgstr "ligne de commande : %s\n" -#: ../monotone.cc:261 +#: monotone.cc:262 #, c-format msgid "set locale: LC_ALL=%s\n" msgstr "paramétrage de la locale : LC_ALL=%s\n" -#: ../monotone.cc:457 +#: monotone.cc:290 +msgid "[OPTION...] command [ARGS...]\n" +msgstr "" + +#: monotone.cc:462 #, c-format msgid "syntax error near the \"%s\" option: %s" msgstr "" -#: ../monotone.cc:496 +#: monotone.cc:501 #, c-format msgid "monotone %s doesn't use the option %s" msgstr "monotone %s n'utilise pas l'option %s" -#: ../monotone.cc:518 +#: monotone.cc:523 #, c-format msgid "Removed 'hidden' from option # %d\n" msgstr "" -#: ../monotone.cc:524 ../monotone.cc:535 +#: monotone.cc:529 monotone.cc:540 #, c-format msgid "Added 'hidden' to option # %d\n" msgstr "" -#: ../monotone.cc:531 +#: monotone.cc:536 #, c-format msgid "Options specific to 'monotone %s':" msgstr "Options spécifiques à « monotone %s » :" -#: ../mt_version.cc:23 +#: mt_version.cc:23 #, c-format msgid "%s (base revision: %s)" msgstr "%s (révision de base : %s)" -#: ../mt_version.cc:34 +#: mt_version.cc:34 #, c-format msgid "" "Running on: %s\n" @@ -2738,27 +3051,27 @@ "En cours d'exécution sur : %s\n" "Changements depuis la révision de base : %s\n" -#: ../netcmd.cc:42 +#: netcmd.cc:42 #, c-format msgid "unknown item type 0x%x for '%s'" msgstr "type d'élément inconnu 0x%x pour « %s »" -#: ../netcmd.cc:89 +#: netcmd.cc:94 #, c-format msgid "protocol version mismatch: wanted '%d' got '%d'" msgstr "" -#: ../netcmd.cc:113 +#: netcmd.cc:119 #, c-format msgid "unknown netcmd code 0x%x" msgstr "code de commande netcmd inconnu 0x%x" -#: ../netcmd.cc:124 +#: netcmd.cc:130 #, c-format msgid "oversized payload of '%d' bytes" msgstr "charge utile surdimensionnée de '%d' octets" -#: ../netcmd.cc:144 +#: netcmd.cc:159 #, c-format msgid "" "bad HMAC checksum (got %s, wanted %s)\n" @@ -2767,369 +3080,356 @@ "mauvaise somme de contrôle HMAC (reçu %s, attendu %s)\n" "ceci suggère que les données ont été corrompues pendant le transit\n" -#: ../netcmd.cc:220 ../netcmd.cc:266 +#: netcmd.cc:235 netcmd.cc:281 #, c-format msgid "unknown role specifier %d" msgstr "" -#: ../netio.hh:38 ../netio.hh:56 +#: netio.hh:38 netio.hh:56 #, c-format msgid "need %d bytes to decode %s at %d, only have %d" msgstr "" "%d octets sont nécessaire pour décoder %s à %d, seulement %d sont disponibles" -#: ../netio.hh:84 ../netio.hh:119 +#: netio.hh:84 netio.hh:119 #, c-format msgid "uleb128 decode for '%s' into %d-byte datum overflowed" msgstr "" -#: ../netio.hh:139 +#: netio.hh:139 #, c-format msgid "ran out of bytes reading uleb128 value for '%s' at pos %d" msgstr "" -#: ../netio.hh:275 +#: netio.hh:275 #, c-format msgid "decoding variable length string of %d bytes for '%s', maximum is %d" msgstr "" -#: ../netio.hh:330 +#: netio.hh:330 #, c-format msgid "expected %s to end at %d, have %d bytes" msgstr "" -#: ../netsync.cc:244 +#: netsync.cc:244 #, c-format msgid "check of '%s' failed" msgstr "la vérification de « %s » a échouée" -#. xgettext: please use short message and try to avoid multibytes chars -#: ../netsync.cc:661 +#: netsync.cc:666 msgid "bytes in" msgstr "octets ⇩" -#. xgettext: please use short message and try to avoid multibytes chars -#: ../netsync.cc:663 +#: netsync.cc:668 msgid "bytes out" msgstr "octets ⇧" -#. xgettext: please use short message and try to avoid multibytes chars -#: ../netsync.cc:667 ../netsync.cc:684 +#: netsync.cc:672 netsync.cc:689 msgid "revs written" msgstr "révs écrites" -#. xgettext: please use short message and try to avoid multibytes chars -#: ../netsync.cc:669 +#: netsync.cc:674 msgid "certs in" msgstr "certs ⇩" -#. xgettext: please use short message and try to avoid multibytes chars -#: ../netsync.cc:671 ../netsync.cc:686 +#: netsync.cc:676 netsync.cc:691 msgid "revs in" msgstr "révs ⇩" -#. xgettext: please use short message and try to avoid multibytes chars -#: ../netsync.cc:676 +#: netsync.cc:681 msgid "certs out" msgstr "certs ⇧" -#. xgettext: please use short message and try to avoid multibytes chars -#: ../netsync.cc:678 ../netsync.cc:688 +#: netsync.cc:683 netsync.cc:693 msgid "revs out" msgstr "révs ⇧" -#. But otherwise, we're ready to go! -#: ../netsync.cc:746 +#: netsync.cc:751 #, c-format msgid "all epochs processed, opening database valve\n" msgstr "" -#: ../netsync.cc:834 +#: netsync.cc:839 #, c-format msgid "dropping outgoing netcmd (because we're in error unwind mode)\n" msgstr "" -#: ../netsync.cc:858 +#: netsync.cc:863 #, c-format msgid "error: %s\n" msgstr "erreur : %s\n" -#: ../netsync.cc:866 +#: netsync.cc:871 #, c-format msgid "analyzing %d entries in manifest\n" msgstr "" -#: ../netsync.cc:910 +#: netsync.cc:915 #, c-format msgid "revision %s is attached via database\n" msgstr "" -#: ../netsync.cc:915 +#: netsync.cc:920 #, c-format msgid "checking attachment of %s in ancestry\n" msgstr "" -#: ../netsync.cc:922 +#: netsync.cc:927 #, c-format msgid "checking attachment of %s in parent %s\n" msgstr "" -#: ../netsync.cc:926 +#: netsync.cc:931 #, c-format msgid "revision %s is attached via parent %s\n" msgstr "" -#: ../netsync.cc:933 +#: netsync.cc:938 #, c-format msgid "decided that revision '%s' is attached\n" msgstr "" -#: ../netsync.cc:935 +#: netsync.cc:940 #, c-format msgid "decided that revision '%s' is not attached\n" msgstr "" -#: ../netsync.cc:1003 +#: netsync.cc:1008 #, c-format msgid "not requesting (in reverse) initial manifest %s as we already have it\n" msgstr "" -#: ../netsync.cc:1006 +#: netsync.cc:1011 #, c-format msgid "requesting (in reverse) initial manifest data %s\n" msgstr "" -#: ../netsync.cc:1016 +#: netsync.cc:1021 #, c-format msgid "" "not requesting (in reverse) manifest delta to %s as we already have it\n" msgstr "" -#: ../netsync.cc:1019 +#: netsync.cc:1024 #, c-format msgid "requesting (in reverse) manifest delta %s -> %s\n" msgstr "" -#: ../netsync.cc:1046 +#: netsync.cc:1051 #, c-format msgid "not requesting (in reverse) initial file %s as we already have it\n" msgstr "" -#: ../netsync.cc:1049 +#: netsync.cc:1054 #, c-format msgid "requesting (in reverse) initial file data %s\n" msgstr "" -#: ../netsync.cc:1059 +#: netsync.cc:1064 #, c-format msgid "not requesting (in reverse) file delta to %s as we already have it\n" msgstr "" -#: ../netsync.cc:1062 +#: netsync.cc:1067 #, c-format msgid "requesting (in reverse) file delta %s -> %s on %s\n" msgstr "" -#: ../netsync.cc:1094 +#: netsync.cc:1099 #, c-format msgid "visiting revision '%s' for forward deltas\n" msgstr "" -#: ../netsync.cc:1122 +#: netsync.cc:1127 #, c-format msgid "not requesting forward manifest delta to '%s' as we already have it\n" msgstr "" -#: ../netsync.cc:1128 +#: netsync.cc:1133 #, c-format msgid "requesting full manifest data %s\n" msgstr "" -#: ../netsync.cc:1133 +#: netsync.cc:1138 #, c-format msgid "requesting forward manifest delta %s -> %s\n" msgstr "" -#: ../netsync.cc:1147 +#: netsync.cc:1152 #, c-format msgid "" "not requesting forward delta %s -> %s on file %s as we already have it\n" msgstr "" -#: ../netsync.cc:1153 +#: netsync.cc:1158 #, c-format msgid "requesting full file data %s\n" msgstr "" -#: ../netsync.cc:1159 +#: netsync.cc:1164 #, c-format msgid "requesting forward delta %s -> %s on file %s\n" msgstr "" -#: ../netsync.cc:1189 +#: netsync.cc:1194 #, c-format msgid "analyzing %d ancestry edges\n" msgstr "" -#: ../netsync.cc:1245 +#: netsync.cc:1250 #, c-format msgid "Dropping branch certs for unwanted branch %s" msgstr "" -#: ../netsync.cc:1300 +#: netsync.cc:1305 #, c-format msgid "isolated %d heads\n" msgstr "" -#: ../netsync.cc:1327 +#: netsync.cc:1332 #, c-format msgid "requesting attached ancestry of revision '%s'\n" msgstr "" -#: ../netsync.cc:1332 +#: netsync.cc:1337 #, c-format msgid "requesting detached ancestry of revision '%s'\n" msgstr "" -#: ../netsync.cc:1366 +#: netsync.cc:1371 #, c-format msgid "read %d bytes from fd %d (peer %s)\n" msgstr "%d octets lu sur le descripteur de fichier %d (pair %s)\n" -#: ../netsync.cc:1369 +#: netsync.cc:1374 #, c-format msgid "in error unwind mode, so throwing them into the bit bucket\n" msgstr "" -#: ../netsync.cc:1401 +#: netsync.cc:1406 #, c-format msgid "wrote %d bytes to fd %d (peer %s)\n" msgstr "%d octets écris sur le descripteur de fichier %d (pair %s)\n" -#. we've flushed our error message, so it's time to get out. -#: ../netsync.cc:1409 +#: netsync.cc:1414 #, c-format msgid "finished flushing output queue in error unwind mode, disconnecting\n" msgstr "" -#: ../netsync.cc:1423 +#: netsync.cc:1428 #, c-format msgid "queueing 'bye' command\n" msgstr "" -#: ../netsync.cc:1433 +#: netsync.cc:1438 #, c-format msgid "queueing 'error' command\n" msgstr "" -#: ../netsync.cc:1446 +#: netsync.cc:1451 #, c-format msgid "queueing 'done' command for %s level %s\n" msgstr "" -#: ../netsync.cc:1522 +#: netsync.cc:1520 #, c-format msgid "queueing request for refinement of %s node '%s', level %d\n" msgstr "" -#: ../netsync.cc:1540 +#: netsync.cc:1538 #, c-format msgid "not queueing request for %s '%s' as we are in pure source role\n" msgstr "" -#: ../netsync.cc:1547 +#: netsync.cc:1545 #, c-format msgid "not queueing request for %s '%s' as we already requested it\n" msgstr "" -#: ../netsync.cc:1552 +#: netsync.cc:1550 #, c-format msgid "queueing request for data of %s item '%s'\n" msgstr "" -#: ../netsync.cc:1576 +#: netsync.cc:1574 #, c-format msgid "" "not queueing request for %s delta '%s' -> '%s' as we are in pure source " "role\n" msgstr "" -#: ../netsync.cc:1583 +#: netsync.cc:1581 #, c-format msgid "" "not queueing request for %s delta '%s' -> '%s' as we already requested the " "target\n" msgstr "" -#: ../netsync.cc:1588 +#: netsync.cc:1586 #, c-format msgid "queueing request for contents of %s delta '%s' -> '%s'\n" msgstr "" -#: ../netsync.cc:1608 +#: netsync.cc:1606 #, c-format msgid "not queueing %s data for '%s' as we are in pure sink role\n" msgstr "" -#: ../netsync.cc:1613 +#: netsync.cc:1611 #, c-format msgid "queueing %d bytes of data for %s item '%s'\n" msgstr "" -#: ../netsync.cc:1647 +#: netsync.cc:1645 #, c-format msgid "not queueing %s delta '%s' -> '%s' as we are in pure sink role\n" msgstr "" -#: ../netsync.cc:1652 +#: netsync.cc:1650 #, c-format msgid "queueing %s delta '%s' -> '%s'\n" msgstr "" -#: ../netsync.cc:1670 +#: netsync.cc:1668 #, c-format msgid "" "not queueing note of nonexistence of %s item '%s' as we are in pure sink " "role\n" msgstr "" -#: ../netsync.cc:1675 +#: netsync.cc:1673 #, c-format msgid "queueing note of nonexistance of %s item '%s'\n" msgstr "" -#: ../netsync.cc:1687 +#: netsync.cc:1685 #, c-format msgid "received 'bye' netcmd\n" msgstr "" -#: ../netsync.cc:1695 +#: netsync.cc:1693 #, fuzzy, c-format msgid "received network error: %s" msgstr "erreur réseau : %s" -#. we received *no* refinements on this level -- or we ran out of -#. levels -- so refinement for this type is finished. -#: ../netsync.cc:1712 +#: netsync.cc:1710 #, c-format msgid "received 'done' for empty %s level %d, marking as complete\n" msgstr "" -#. we *did* receive some refinements on this level, reset to zero and -#. queue an echo of the 'done' marker. -#: ../netsync.cc:1734 +#: netsync.cc:1732 #, c-format msgid "" "received 'done' for %s level %d, which had refinements; sending echo of done " "for level %d\n" msgstr "" -#: ../netsync.cc:1767 +#: netsync.cc:1765 #, c-format msgid "server key has name %s, hash %s\n" msgstr "" -#: ../netsync.cc:1775 +#: netsync.cc:1773 #, c-format msgid "" "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n" @@ -3142,12 +3442,12 @@ "'monotone unset %s %s' overrides this check\n" msgstr "" -#: ../netsync.cc:1785 +#: netsync.cc:1783 #, c-format msgid "server key changed" msgstr "" -#: ../netsync.cc:1790 +#: netsync.cc:1788 #, c-format msgid "" "first time connecting to server %s\n" @@ -3155,1549 +3455,1514 @@ "their key's fingerprint: %s\n" msgstr "" -#: ../netsync.cc:1797 +#: netsync.cc:1795 #, c-format msgid "saving public key for %s to database\n" msgstr "" -#: ../netsync.cc:1804 +#: netsync.cc:1802 #, c-format msgid "received 'hello' netcmd from server '%s' with nonce '%s'\n" msgstr "" -#: ../netsync.cc:1885 +#: netsync.cc:1883 #, c-format msgid "rejected attempt at anonymous connection for write\n" msgstr "" -#: ../netsync.cc:1892 +#: netsync.cc:1890 #, c-format msgid "rejected attempt at anonymous connection while running as sink\n" msgstr "" -#: ../netsync.cc:1909 +#: netsync.cc:1907 #, c-format msgid "anonymous access to branch '%s' denied by server" msgstr "" -#: ../netsync.cc:1914 +#: netsync.cc:1912 #, c-format msgid "allowed anonymous read permission for '%s' excluding '%s'\n" msgstr "" -#: ../netsync.cc:1946 +#: netsync.cc:1944 #, c-format msgid "detected replay attack in auth netcmd\n" msgstr "" -#: ../netsync.cc:1967 +#: netsync.cc:1969 #, c-format msgid "remote public key hash '%s' is unknown\n" msgstr "" -#: ../netsync.cc:1983 +#: netsync.cc:1986 #, c-format msgid "" "denied '%s' read permission for '%s' excluding '%s' while running as pure " "sink\n" msgstr "" -#: ../netsync.cc:1999 +#: netsync.cc:2002 #, c-format msgid "" "denied '%s' read permission for '%s' excluding '%s' because of branch '%s'\n" msgstr "" -#: ../netsync.cc:2001 +#: netsync.cc:2004 #, c-format msgid "access to branch '%s' denied by server" msgstr "accès à la branche « %s » refusé par le serveur" -#. if we're source_and_sink_role, continue even with no branches readable -#. ex: serve --db=empty.db -#: ../netsync.cc:2009 +#: netsync.cc:2012 #, c-format msgid "allowed '%s' read permission for '%s' excluding '%s'\n" msgstr "" -#: ../netsync.cc:2018 +#: netsync.cc:2021 #, c-format msgid "" "denied '%s' write permission for '%s' excluding '%s' while running as pure " "source\n" msgstr "" -#: ../netsync.cc:2026 +#: netsync.cc:2029 #, c-format msgid "denied '%s' write permission for '%s' excluding '%s'\n" msgstr "" -#: ../netsync.cc:2032 +#: netsync.cc:2035 #, c-format msgid "allowed '%s' write permission for '%s' excluding '%s'\n" msgstr "" -#. get our private key and sign back -#: ../netsync.cc:2047 +#: netsync.cc:2050 #, c-format msgid "client signature OK, accepting authentication\n" msgstr "" -#: ../netsync.cc:2069 +#: netsync.cc:2072 #, c-format msgid "bad client signature\n" msgstr "" -#. nb. this->role is our role, the server is in the opposite role -#: ../netsync.cc:2084 +#: netsync.cc:2087 #, c-format msgid "" "received 'confirm' netcmd from server '%s' for pattern '%s' exclude '%s' in %" "s mode\n" msgstr "" -#: ../netsync.cc:2100 +#: netsync.cc:2103 #, c-format msgid "server signature OK, accepting authentication\n" msgstr "" -#: ../netsync.cc:2105 +#: netsync.cc:2108 #, c-format msgid "bad server signature\n" msgstr "" -#: ../netsync.cc:2110 +#: netsync.cc:2113 #, c-format msgid "unknown server key\n" msgstr "" -#: ../netsync.cc:2179 +#: netsync.cc:2182 #, c-format msgid "epoch with hash '%s' does not exist in our database" msgstr "" -#: ../netsync.cc:2189 +#: netsync.cc:2192 #, c-format msgid "public key '%s' is also called '%s'\n" msgstr "" -#: ../netsync.cc:2208 +#: netsync.cc:2211 #, c-format msgid "revision '%s' does not exist in our database" msgstr "" -#: ../netsync.cc:2222 +#: netsync.cc:2225 #, c-format msgid "manifest '%s' does not exist in our database" msgstr "" -#: ../netsync.cc:2236 +#: netsync.cc:2239 #, c-format msgid "file '%s' does not exist in our database" msgstr "" -#: ../netsync.cc:2250 +#: netsync.cc:2253 #, c-format msgid "cert '%s' does not exist in our database" msgstr "" -#: ../netsync.cc:2269 +#: netsync.cc:2272 #, c-format msgid "received 'refine' netcmd on %s node '%s', level %d\n" msgstr "" -#: ../netsync.cc:2274 +#: netsync.cc:2277 #, c-format msgid "no corresponding %s merkle node for prefix '%s', level %d\n" msgstr "" -#. we agree, this slot is empty -#: ../netsync.cc:2284 +#: netsync.cc:2287 #, c-format msgid "" "(#0) they have an empty slot %d (in a %s node '%s', level %d, we do not " "have)\n" msgstr "" -#: ../netsync.cc:2296 +#: netsync.cc:2299 #, c-format msgid "" "(#0) they have a live leaf at slot %d (in a %s node '%s', level %d, we do " "not have)\n" msgstr "" -#: ../netsync.cc:2298 +#: netsync.cc:2301 #, c-format msgid "(#0) requesting their %s leaf %s\n" msgstr "" -#. we cannot ask for what they have, it is dead -#: ../netsync.cc:2305 +#: netsync.cc:2308 #, c-format msgid "" "(#0) they have a dead leaf at slot %d (in a %s node '%s', level %d, we do " "not have)\n" msgstr "" -#. they have a subtree; might as well ask for that -#: ../netsync.cc:2313 +#: netsync.cc:2316 #, c-format msgid "" "(#0) they have a subtree at slot %d (in a %s node '%s', level %d, we do not " "have)\n" msgstr "" -#. we have a corresponding merkle node. there are 16 branches -#. to the following switch condition. it is awful. sorry. -#: ../netsync.cc:2329 +#: netsync.cc:2332 #, c-format msgid "found corresponding %s merkle node for prefix '%s', level %d\n" msgstr "" -#. 1: theirs == empty, ours == empty -#: ../netsync.cc:2343 +#: netsync.cc:2346 #, c-format msgid "" "(#1) they have an empty slot %d in %s node '%s', level %d, and so do we\n" msgstr "" -#. 2: theirs == empty, ours == live -#: ../netsync.cc:2350 +#: netsync.cc:2353 #, c-format msgid "" "(#2) they have an empty slot %d in %s node '%s', level %d, we have a live " "leaf\n" msgstr "" -#. 3: theirs == empty, ours == dead -#: ../netsync.cc:2364 +#: netsync.cc:2367 #, c-format msgid "" "(#3) they have an empty slot %d in %s node '%s', level %d, we have a dead " "leaf\n" msgstr "" -#. 4: theirs == empty, ours == subtree -#: ../netsync.cc:2371 +#: netsync.cc:2374 #, c-format msgid "" "(#4) they have an empty slot %d in %s node '%s', level %d, we have a " "subtree\n" msgstr "" -#. 5: theirs == live, ours == empty -#: ../netsync.cc:2398 +#: netsync.cc:2401 #, c-format msgid "" "(#5) they have a live leaf at slot %d in %s node '%s', level %d, we have " "nothing\n" msgstr "" -#. 6: theirs == live, ours == live -#: ../netsync.cc:2409 +#: netsync.cc:2412 #, c-format msgid "(#6) they have a live leaf at slot %d in %s node '%s', and so do we\n" msgstr "" -#: ../netsync.cc:2419 +#: netsync.cc:2422 #, c-format msgid "(#6) we both have live %s leaf '%s'\n" msgstr "" -#. 7: theirs == live, ours == dead -#: ../netsync.cc:2435 +#: netsync.cc:2438 #, c-format msgid "" "(#7) they have a live leaf at slot %d in %s node %s, level %d, we have a " "dead one\n" msgstr "" -#: ../netsync.cc:2445 +#: netsync.cc:2448 #, c-format msgid "(#7) it's the same %s leaf '%s', but ours is dead\n" msgstr "" -#. 8: theirs == live, ours == subtree -#: ../netsync.cc:2458 +#: netsync.cc:2461 #, c-format msgid "" "(#8) they have a live leaf in slot %d of %s node '%s', level %d, we have a " "subtree\n" msgstr "" -#: ../netsync.cc:2467 +#: netsync.cc:2470 #, c-format msgid "" "(#8) we have a copy of their live leaf '%s' in slot %d of %s node '%s', " "level %d\n" msgstr "" -#: ../netsync.cc:2471 +#: netsync.cc:2474 #, c-format msgid "" "(#8) requesting a copy of their live leaf '%s' in slot %d of %s node '%s', " "level %d\n" msgstr "" -#: ../netsync.cc:2476 +#: netsync.cc:2479 #, c-format msgid "" "(#8) sending our subtree for refinement, in slot %d of %s node '%s', level %" "d\n" msgstr "" -#. 9: theirs == dead, ours == empty -#: ../netsync.cc:2499 +#: netsync.cc:2502 #, c-format msgid "" "(#9) they have a dead leaf at slot %d in %s node '%s', level %d, we have " "nothing\n" msgstr "" -#. 10: theirs == dead, ours == live -#: ../netsync.cc:2506 +#: netsync.cc:2509 #, c-format msgid "" "(#10) they have a dead leaf at slot %d in %s node '%s', level %d, we have a " "live one\n" msgstr "" -#: ../netsync.cc:2516 +#: netsync.cc:2519 #, c-format msgid "(#10) we both have %s leaf %s, theirs is dead\n" msgstr "" -#. 11: theirs == dead, ours == dead -#: ../netsync.cc:2532 +#: netsync.cc:2535 #, c-format msgid "" "(#11) they have a dead leaf at slot %d in %s node '%s', level %d, so do we\n" msgstr "" -#. theirs == dead, ours == subtree -#: ../netsync.cc:2539 +#: netsync.cc:2542 #, c-format msgid "" "(#12) they have a dead leaf in slot %d of %s node '%s', we have a subtree\n" msgstr "" -#. 13: theirs == subtree, ours == empty -#: ../netsync.cc:2562 +#: netsync.cc:2565 #, c-format msgid "" "(#13) they have a subtree at slot %d in %s node '%s', level %d, we have " "nothing\n" msgstr "" -#. 14: theirs == subtree, ours == live -#: ../netsync.cc:2575 +#: netsync.cc:2578 #, c-format msgid "" "(#14) they have a subtree at slot %d in %s node '%s', level %d, we have a " "live leaf\n" msgstr "" -#: ../netsync.cc:2587 +#: netsync.cc:2590 #, c-format msgid "(#14) pushed our leaf '%s' into fake subtree slot %d, level %d\n" msgstr "" -#. 15: theirs == subtree, ours == dead -#: ../netsync.cc:2599 +#: netsync.cc:2602 #, c-format msgid "" "(#15) they have a subtree at slot %d in %s node '%s', level %d, we have a " "dead leaf\n" msgstr "" -#. 16: theirs == subtree, ours == subtree -#: ../netsync.cc:2618 +#: netsync.cc:2621 #, c-format msgid "" "(#16) they have a subtree at slot %d in %s node '%s', level %d, and so do " "we\n" msgstr "" -#: ../netsync.cc:2628 +#: netsync.cc:2631 #, c-format msgid "(#16) we both have %s subtree '%s'\n" msgstr "" -#: ../netsync.cc:2633 +#: netsync.cc:2636 #, c-format msgid "(#16) %s subtrees at slot %d differ, refining ours\n" msgstr "" -#: ../netsync.cc:2660 +#: netsync.cc:2663 #, c-format msgid "received 'send_data' netcmd requesting %s '%s'\n" msgstr "" -#: ../netsync.cc:2688 +#: netsync.cc:2691 #, c-format msgid "received 'send_delta' netcmd requesting %s edge '%s' -> '%s'\n" msgstr "" -#: ../netsync.cc:2742 +#: netsync.cc:2745 #, c-format msgid "delta requested for item type %s\n" msgstr "" -#: ../netsync.cc:2765 +#: netsync.cc:2768 #, c-format msgid "epoch '%s' already exists in our database\n" msgstr "" -#: ../netsync.cc:2772 +#: netsync.cc:2775 #, c-format msgid "received epoch %s for branch %s\n" msgstr "" -#: ../netsync.cc:2779 +#: netsync.cc:2782 #, c-format msgid "branch %s has no epoch; setting epoch to %s\n" msgstr "" -#: ../netsync.cc:2785 +#: netsync.cc:2788 #, c-format msgid "branch %s already has an epoch; checking\n" msgstr "" -#. It is safe to call 'error' here, because if we get here, -#. then the current netcmd packet cannot possibly have -#. written anything to the database. -#: ../netsync.cc:2796 +#: netsync.cc:2799 #, c-format msgid "Mismatched epoch on branch %s. Server has '%s', client has '%s'." msgstr "" -#: ../netsync.cc:2807 +#: netsync.cc:2810 #, c-format msgid "public key '%s' already exists in our database\n" msgstr "" -#: ../netsync.cc:2816 +#: netsync.cc:2819 #, c-format msgid "hash check failed for public key '%s' (%s); wanted '%s' got '%s'" msgstr "" -#: ../netsync.cc:2825 +#: netsync.cc:2828 #, c-format msgid "cert '%s' already exists in our database\n" msgstr "" -#: ../netsync.cc:2833 +#: netsync.cc:2836 #, c-format msgid "hash check failed for revision cert '%s'" msgstr "" -#: ../netsync.cc:2849 +#: netsync.cc:2852 #, c-format msgid "revision '%s' already exists in our database\n" msgstr "la révision « %s » existe déjà dans notre base de données\n" -#: ../netsync.cc:2852 +#: netsync.cc:2855 #, fuzzy, c-format msgid "received revision '%s'\n" msgstr "erreur réseau : %s" -#: ../netsync.cc:2871 +#: netsync.cc:2874 #, c-format msgid "manifest version '%s' already exists in our database\n" msgstr "" -#: ../netsync.cc:2886 +#: netsync.cc:2889 #, c-format msgid "file version '%s' already exists in our database\n" msgstr "" -#: ../netsync.cc:2956 +#: netsync.cc:2959 #, c-format msgid "ignoring delta received for item type %s\n" msgstr "" -#: ../netsync.cc:2970 +#: netsync.cc:2973 #, c-format msgid "received 'nonexistant' netcmd for %s '%s'\n" msgstr "" -#: ../netsync.cc:3047 +#: netsync.cc:2985 +#, fuzzy, c-format +msgid "Received warning from usher: %s" +msgstr "erreur réseau : %s" + +#: netsync.cc:2987 +#, fuzzy, c-format +msgid "Received greeting from usher: %s" +msgstr "erreur réseau : %s" + +#: netsync.cc:2992 #, c-format +msgid "Sent reply." +msgstr "" + +#: netsync.cc:3067 +#, c-format msgid "" "received 'anonymous' netcmd from client for pattern '%s' excluding '%s' in %" "s mode\n" msgstr "" -#: ../netsync.cc:3078 +#: netsync.cc:3098 #, c-format msgid "" "received 'auth(hmac)' netcmd from client '%s' for pattern '%s' exclude '%s' " "in %s mode with nonce1 '%s'\n" msgstr "" -#: ../netsync.cc:3244 +#: netsync.cc:3270 #, c-format msgid "processing %d byte input buffer from peer %s\n" msgstr "" -#: ../netsync.cc:3247 +#: netsync.cc:3273 #, c-format msgid "input buffer for peer %s is overfull after netcmd dispatch\n" msgstr "" -#: ../netsync.cc:3254 ../netsync.cc:3288 ../netsync.cc:3315 +#: netsync.cc:3277 #, c-format +msgid "failed to process '%s' packet" +msgstr "" + +#: netsync.cc:3282 netsync.cc:3316 netsync.cc:3343 +#, c-format msgid "protocol error while processing peer %s: '%s'\n" msgstr "" -#. FIXME: split into labels and convert to ace here. -#: ../netsync.cc:3274 +#: netsync.cc:3302 #, c-format msgid "connecting to %s\n" msgstr "connexion à %s\n" -#: ../netsync.cc:3301 +#: netsync.cc:3329 #, c-format msgid "timed out waiting for I/O with peer %s, disconnecting\n" msgstr "" -#: ../netsync.cc:3323 +#: netsync.cc:3351 #, c-format msgid "read from fd %d (peer %s) closed OK after goodbye\n" msgstr "lecture depuis le fd %d (pair %s) fermée OK après aurevoir\n" -#: ../netsync.cc:3325 +#: netsync.cc:3353 #, c-format msgid "read from fd %d (peer %s) failed, disconnecting\n" msgstr "" -#: ../netsync.cc:3335 +#: netsync.cc:3363 #, c-format msgid "write on fd %d (peer %s) closed OK after goodbye\n" msgstr "" -#: ../netsync.cc:3337 +#: netsync.cc:3365 #, c-format msgid "write on fd %d (peer %s) failed, disconnecting\n" msgstr "" -#: ../netsync.cc:3344 +#: netsync.cc:3372 #, c-format msgid "got OOB data on fd %d (peer %s), disconnecting\n" msgstr "" -#: ../netsync.cc:3353 +#: netsync.cc:3381 #, c-format msgid "terminated exchange with %s\n" msgstr "échange avorté avec %s\n" -#: ../netsync.cc:3361 +#: netsync.cc:3389 #, c-format msgid "successful exchange with %s\n" msgstr "échange réussi avec %s\n" -#: ../netsync.cc:3382 +#: netsync.cc:3410 #, c-format msgid "fd %d is armed\n" msgstr "" -#: ../netsync.cc:3389 +#: netsync.cc:3417 #, c-format msgid "protocol error while processing peer %s: '%s', marking as bad\n" msgstr "" -#: ../netsync.cc:3411 +#: netsync.cc:3439 #, c-format msgid "accepting new connection on %s : %d\n" msgstr "" -#: ../netsync.cc:3417 +#: netsync.cc:3445 #, c-format msgid "accept() returned a dead client\n" msgstr "accept() à renvoyée un client mort\n" -#: ../netsync.cc:3421 +#: netsync.cc:3449 #, c-format msgid "accepted new client connection from %s\n" msgstr "" -#: ../netsync.cc:3448 +#: netsync.cc:3476 #, c-format msgid "protocol error while processing peer %s: '%s', disconnecting\n" msgstr "" -#: ../netsync.cc:3456 +#: netsync.cc:3484 #, c-format msgid "fd %d (peer %s) read failed, disconnecting\n" msgstr "la lecture sur le fd %d (pair %s) a échouée, déconnexion\n" -#: ../netsync.cc:3472 +#: netsync.cc:3500 #, c-format msgid "fd %d (peer %s) write failed, disconnecting\n" msgstr "l'écriture sur le fd %d (pair %s) a échouée, déconnexion\n" -#: ../netsync.cc:3496 +#: netsync.cc:3524 #, c-format msgid "fd %d (peer %s) processing finished, disconnecting\n" msgstr "traitement du fd %d (pair %s) terminé, déconnexion\n" -#: ../netsync.cc:3518 +#: netsync.cc:3546 #, c-format msgid "fd %d (peer %s) has been idle too long, disconnecting\n" msgstr "le fd %d (pair %s) est inactif depuis trop longtemps, déconnexion\n" -#: ../netsync.cc:3524 +#: netsync.cc:3552 #, c-format msgid "fd %d (peer %s) exchanged goodbyes and flushed output, disconnecting\n" msgstr "" -#: ../netsync.cc:3555 +#: netsync.cc:3583 #, c-format msgid "beginning service on %s : %d\n" msgstr "" -#: ../netsync.cc:3569 +#: netsync.cc:3597 #, c-format msgid "session limit %d reached, some connections will be refused\n" msgstr "" -#: ../netsync.cc:3575 +#: netsync.cc:3603 #, c-format msgid "i/o probe with %d armed\n" msgstr "" -#: ../netsync.cc:3585 +#: netsync.cc:3613 #, c-format msgid "timed out waiting for I/O (listening on %s : %d)\n" msgstr "" -#: ../netsync.cc:3601 +#: netsync.cc:3629 #, c-format msgid "got woken up for action on unknown fd %d\n" msgstr "" -#: ../netsync.cc:3616 +#: netsync.cc:3644 #, c-format msgid "got some OOB data on fd %d (peer %s), disconnecting\n" msgstr "" -#: ../netsync.cc:3678 +#: netsync.cc:3706 #, c-format msgid "finding items to synchronize:\n" msgstr "recherche d'éléments à synchroniser :\n" -#: ../netsync.cc:3681 +#: netsync.cc:3709 #, c-format msgid "including branch %s" msgstr "inclusion de la branche %s" -#. xgettext: please use short message and try to avoid multibytes chars -#: ../netsync.cc:3688 -msgid "revisions" -msgstr "révisions" - -#. xgettext: please use short message and try to avoid multibytes chars -#: ../netsync.cc:3690 -msgid "certs" -msgstr "certs" - -#. xgettext: please use short message and try to avoid multibytes chars -#: ../netsync.cc:3692 -msgid "keys" -msgstr "clefs" - -#: ../netsync.cc:3735 +#: netsync.cc:3763 #, c-format msgid "setting epoch on %s to zero\n" msgstr "" -#: ../netsync.cc:3826 ../netsync.cc:3831 +#: netsync.cc:3854 netsync.cc:3859 #, c-format msgid "network error: %s" msgstr "erreur réseau : %s" -#: ../packet.cc:325 +#: packet.cc:325 #, c-format msgid "writing delayed revision data packet for %s\n" msgstr "" -#: ../packet.cc:332 +#: packet.cc:332 #, c-format msgid "discarding revision data packet %s with unmet dependencies\n" msgstr "" -#: ../packet.cc:338 +#: packet.cc:338 #, c-format msgid "writing delayed manifest data packet for %s\n" msgstr "" -#: ../packet.cc:345 +#: packet.cc:345 #, c-format msgid "discarding manifest data packet %s with unmet dependencies\n" msgstr "" -#: ../packet.cc:351 +#: packet.cc:351 #, c-format msgid "writing delayed file data packet for %s\n" msgstr "" -#: ../packet.cc:364 +#: packet.cc:364 #, c-format msgid "writing delayed manifest %s packet for %s -> %s\n" msgstr "" -#: ../packet.cc:377 +#: packet.cc:377 #, c-format msgid "discarding manifest delta packet %s -> %s with unmet dependencies\n" msgstr "" -#: ../packet.cc:384 +#: packet.cc:384 #, c-format msgid "writing delayed file %s packet for %s -> %s\n" msgstr "" -#: ../packet.cc:397 +#: packet.cc:397 #, c-format msgid "discarding file delta packet %s -> %s with unmet dependencies\n" msgstr "" -#: ../packet.cc:404 +#: packet.cc:404 #, c-format msgid "writing delayed revision cert on %s\n" msgstr "" -#: ../packet.cc:411 +#: packet.cc:411 #, c-format msgid "discarding revision cert packet %s with unmet dependencies\n" msgstr "" -#: ../packet.cc:418 +#: packet.cc:418 #, c-format msgid "writing delayed public key %s\n" msgstr "" -#: ../packet.cc:431 +#: packet.cc:431 #, c-format msgid "writing delayed private key %s\n" msgstr "" -#: ../packet.cc:601 +#: packet.cc:601 #, c-format msgid "noting acceptence of revision %s\n" msgstr "" -#: ../packet.cc:614 +#: packet.cc:614 #, c-format msgid "noting acceptence of manifest %s\n" msgstr "" -#: ../packet.cc:627 +#: packet.cc:627 #, c-format msgid "noting acceptence of file %s\n" msgstr "" -#: ../packet.cc:649 +#: packet.cc:649 #, c-format msgid "skipping existing file version %s\n" msgstr "" -#: ../packet.cc:677 +#: packet.cc:677 #, c-format msgid "reconstructed file from delta '%s' -> '%s' has wrong id '%s'\n" msgstr "" -#: ../packet.cc:683 +#: packet.cc:683 #, c-format msgid "delaying file delta %s -> %s for preimage\n" msgstr "" -#: ../packet.cc:693 +#: packet.cc:693 #, c-format msgid "skipping delta to existing file version %s\n" msgstr "" -#: ../packet.cc:721 +#: packet.cc:721 #, c-format msgid "reconstructed file from reverse delta '%s' -> '%s' has wrong id '%s'\n" msgstr "" -#: ../packet.cc:727 +#: packet.cc:727 #, c-format msgid "delaying reverse file delta %s -> %s for preimage\n" msgstr "" -#: ../packet.cc:737 +#: packet.cc:737 #, c-format msgid "skipping reverse delta to existing file version %s\n" msgstr "" -#: ../packet.cc:754 +#: packet.cc:754 #, c-format msgid "skipping existing manifest version %s\n" msgstr "" -#: ../packet.cc:782 +#: packet.cc:782 #, c-format msgid "reconstructed manifest from delta '%s' -> '%s' has wrong id '%s'\n" msgstr "" -#: ../packet.cc:788 +#: packet.cc:788 #, c-format msgid "delaying manifest delta %s -> %s for preimage\n" msgstr "" -#: ../packet.cc:798 +#: packet.cc:798 #, c-format msgid "skipping delta to existing manifest version %s\n" msgstr "" -#: ../packet.cc:826 +#: packet.cc:826 #, c-format msgid "" "reconstructed manifest from reverse delta '%s' -> '%s' has wrong id '%s'\n" msgstr "" -#: ../packet.cc:832 +#: packet.cc:832 #, c-format msgid "delaying manifest reverse delta %s -> %s for preimage\n" msgstr "" -#: ../packet.cc:842 +#: packet.cc:842 #, c-format msgid "skipping reverse delta to existing manifest version %s\n" msgstr "" -#: ../packet.cc:864 +#: packet.cc:864 #, c-format msgid "delaying revision %s for new manifest %s\n" msgstr "" -#: ../packet.cc:878 +#: packet.cc:878 #, c-format msgid "delaying revision %s for old manifest %s\n" msgstr "" -#: ../packet.cc:888 +#: packet.cc:888 #, c-format msgid "delaying revision %s for old revision %s\n" msgstr "" -#: ../packet.cc:901 +#: packet.cc:901 #, c-format msgid "delaying revision %s for old file %s\n" msgstr "" -#: ../packet.cc:911 +#: packet.cc:911 #, c-format msgid "delaying revision %s for new file %s\n" msgstr "" -#: ../packet.cc:929 +#: packet.cc:929 #, c-format msgid "skipping existing revision %s\n" msgstr "" -#: ../packet.cc:947 +#: packet.cc:947 #, c-format msgid "delaying revision cert on %s\n" msgstr "" -#: ../packet.cc:960 +#: packet.cc:960 #, c-format msgid "skipping existing revision cert %s\n" msgstr "" -#: ../packet.cc:974 +#: packet.cc:974 #, c-format msgid "skipping prohibited public key %s\n" msgstr "" -#: ../packet.cc:987 +#: packet.cc:987 #, c-format msgid "key '%s' is not equal to key '%s' in database\n" msgstr "" "la clef « %s » n'est pas égale à la clef « %s » dans la base de données\n" -#: ../packet.cc:988 +#: packet.cc:988 #, c-format msgid "skipping existing public key %s\n" msgstr "" -#: ../packet.cc:1001 +#: packet.cc:1001 #, c-format -msgid "skipping prohibited private key %s\n" +msgid "skipping prohibited key pair %s\n" msgstr "" -#: ../packet.cc:1010 +#: packet.cc:1010 #, c-format -msgid "skipping existing private key %s\n" +msgid "skipping existing key pair %s\n" msgstr "" -#: ../packet.cc:1046 +#: packet.cc:1046 #, c-format msgid "packet valve opened\n" msgstr "" -#: ../packet.cc:1058 +#: packet.cc:1058 #, c-format msgid "wrote %i queued packets\n" msgstr "" -#: ../packet.cc:1307 -#, c-format -msgid "read data packet\n" +#: packet.cc:1311 +#, fuzzy, c-format +msgid "malformed packet" +msgstr "lu %d paquet" + +#: packet.cc:1327 +#, fuzzy, c-format +msgid "read data packet" msgstr "lecture d'un paquet de donnée\n" -#: ../packet.cc:1329 -#, c-format -msgid "read delta packet\n" +#: packet.cc:1347 +#, fuzzy, c-format +msgid "read delta packet" msgstr "lecture d'un paquet delta\n" -#: ../packet.cc:1360 -#, c-format -msgid "read cert packet\n" -msgstr "" +#: packet.cc:1378 +#, fuzzy, c-format +msgid "read cert packet" +msgstr "lecture d'un paquet delta\n" -#: ../packet.cc:1386 -#, c-format -msgid "read key data packet\n" -msgstr "" +#: packet.cc:1398 +#, fuzzy, c-format +msgid "read pubkey data packet" +msgstr "lecture d'un paquet de donnée\n" -#: ../rcs_file.cc:343 +#: packet.cc:1407 +#, fuzzy, c-format +msgid "read keypair data packet" +msgstr "lecture d'un paquet de donnée\n" + +#: packet.cc:1417 +#, fuzzy, c-format +msgid "unknown packet type: '%s'" +msgstr "chemin inconnu « %s »\n" + +#: rcs_file.cc:343 #, c-format msgid "parse failure %d:%d: expecting %s, got %s with value '%s'\n" msgstr "" -#: ../rcs_file.cc:362 +#: rcs_file.cc:362 #, c-format msgid "parse failure %d:%d: expecting word '%s'\n" msgstr "" -#: ../rcs_file.cc:377 +#: rcs_file.cc:377 #, c-format msgid "parse failure %d:%d: expecting word\n" msgstr "" -#: ../rcs_import.cc:247 +#: rcs_import.cc:247 #, c-format msgid "Calculating time of %s\n" msgstr "" -#: ../rcs_import.cc:281 +#: rcs_import.cc:281 #, c-format msgid "version %s -> tag %s\n" msgstr "" -#: ../rcs_import.cc:448 +#: rcs_import.cc:448 #, c-format msgid "skipping identity file edge\n" msgstr "" -#. we already have a way to get to this old version, -#. no need to insert another reconstruction path -#: ../rcs_import.cc:456 ../rcs_import.cc:482 +#: rcs_import.cc:456 rcs_import.cc:482 #, c-format msgid "existing path to %s found, skipping\n" msgstr "" -#: ../rcs_import.cc:474 +#: rcs_import.cc:474 #, c-format msgid "skipping identity manifest edge\n" msgstr "" -#: ../rcs_import.cc:592 +#: rcs_import.cc:592 #, c-format msgid "version %s has %d lines\n" msgstr "" -#: ../rcs_import.cc:605 +#: rcs_import.cc:605 #, c-format msgid "following RCS edge %s -> %s\n" msgstr "" -#: ../rcs_import.cc:608 +#: rcs_import.cc:608 #, c-format msgid "constructed RCS version %s, inserting into database\n" msgstr "" -#: ../rcs_import.cc:651 +#: rcs_import.cc:651 #, c-format msgid "following RCS branch %s = '%s'\n" msgstr "" -#: ../rcs_import.cc:661 +#: rcs_import.cc:661 #, c-format msgid "finished RCS branch %s = '%s'\n" msgstr "" -#: ../rcs_import.cc:682 ../rcs_import.cc:730 +#: rcs_import.cc:682 rcs_import.cc:730 #, c-format msgid "parsing RCS file %s\n" msgstr "analyse du fichier RCS %s\n" -#: ../rcs_import.cc:684 ../rcs_import.cc:733 +#: rcs_import.cc:684 rcs_import.cc:733 #, c-format msgid "parsed RCS file %s OK\n" msgstr "analyse du fichier RCS %s OK\n" -#: ../rcs_import.cc:773 +#: rcs_import.cc:773 #, c-format msgid "importing file '%s'\n" msgstr "importation du fichier « %s »\n" -#: ../rcs_import.cc:845 +#: rcs_import.cc:845 #, c-format msgid "first version in branch %s would be %s\n" msgstr "" -#: ../rcs_import.cc:852 +#: rcs_import.cc:852 #, c-format msgid "file branchpoint for %s at %s\n" msgstr "" -#: ../rcs_import.cc:922 +#: rcs_import.cc:922 #, c-format msgid "error reading RCS file %s: %s\n" msgstr "erreur lors de la lecture du fichier RCS %s : %s\n" -#: ../rcs_import.cc:926 +#: rcs_import.cc:926 #, c-format msgid "skipping non-RCS file %s\n" msgstr "" -#: ../rcs_import.cc:1105 +#: rcs_import.cc:1105 #, c-format msgid "examining next commit [t:%d] [p:%s] [a:%s] [c:%s]\n" msgstr "" -#: ../rcs_import.cc:1118 +#: rcs_import.cc:1118 #, c-format msgid "expiring cluster\n" msgstr "" -#: ../rcs_import.cc:1134 +#: rcs_import.cc:1134 #, c-format msgid "examining cluster %d to see if it touched %d\n" msgstr "" -#: ../rcs_import.cc:1142 +#: rcs_import.cc:1142 #, c-format msgid "found cluster touching %d: [t:%d] [a:%d] [c:%d]\n" msgstr "" -#: ../rcs_import.cc:1150 +#: rcs_import.cc:1150 #, c-format msgid "last modification time is %d\n" msgstr "la date de dernière modification est %d\n" -#: ../rcs_import.cc:1166 +#: rcs_import.cc:1166 #, c-format msgid "picked existing cluster [t:%d] [a:%d] [c:%d]\n" msgstr "" -#: ../rcs_import.cc:1180 +#: rcs_import.cc:1180 #, c-format msgid "building new cluster [t:%d] [a:%d] [c:%d]\n" msgstr "" -#. now we are done this lineage; flush all remaining clusters -#: ../rcs_import.cc:1205 +#: rcs_import.cc:1205 #, c-format msgid "finished branch commits, writing all pending clusters\n" msgstr "" -#: ../rcs_import.cc:1211 +#: rcs_import.cc:1211 #, c-format msgid "finished writing pending clusters\n" msgstr "" -#: ../rcs_import.cc:1223 +#: rcs_import.cc:1223 #, c-format msgid "" "%s appears to be a CVS repository root directory\n" "try importing a module instead, with 'cvs_import %s/" msgstr "" -#: ../rcs_import.cc:1236 +#: rcs_import.cc:1236 #, c-format msgid "need base --branch argument for importing" msgstr "" -#: ../rcs_import.cc:1248 +#: rcs_import.cc:1248 #, c-format msgid "path %s does not exist" msgstr "le chemin %s n'existe pas" -#: ../rcs_import.cc:1249 +#: rcs_import.cc:1249 #, c-format msgid "path %s is not a directory" msgstr "le chemin %s n'est pas un dossier" -#: ../rcs_import.cc:1267 +#: rcs_import.cc:1267 #, c-format msgid "branch %s has %d entries\n" msgstr "" -#: ../rcs_import.cc:1277 +#: rcs_import.cc:1277 #, c-format msgid "trunk has %d entries\n" msgstr "" -#: ../rcs_import.cc:1330 +#: rcs_import.cc:1284 +msgid "tags" +msgstr "" + +#: rcs_import.cc:1330 #, c-format msgid "initial cluster on branch %s has %d live entries\n" msgstr "" -#: ../rcs_import.cc:1337 +#: rcs_import.cc:1337 #, c-format msgid "initial cluster contains %s at %s\n" msgstr "" -#: ../rcs_import.cc:1383 +#: rcs_import.cc:1383 #, c-format msgid "storing manifest '%s' (base %s)\n" msgstr "" -#: ../rcs_import.cc:1388 +#: rcs_import.cc:1388 #, c-format msgid "storing head %s\n" msgstr "" -#: ../rcs_import.cc:1403 +#: rcs_import.cc:1403 #, c-format msgid "skipping delta to null manifest\n" msgstr "" -#: ../rcs_import.cc:1415 +#: rcs_import.cc:1415 #, c-format msgid "skipping cyclical manifest delta %s -> %s\n" msgstr "" -#: ../rcs_import.cc:1421 +#: rcs_import.cc:1421 #, c-format msgid "writing full manifest %s\n" msgstr "" -#: ../rcs_import.cc:1431 +#: rcs_import.cc:1431 #, c-format msgid "storing manifest delta %s -> %s\n" msgstr "" -#: ../rcs_import.cc:1493 +#: rcs_import.cc:1493 #, c-format msgid "adding entry state '%s' on '%s'\n" msgstr "" -#: ../rcs_import.cc:1500 +#: rcs_import.cc:1500 #, c-format msgid "applying state delta on '%s' : '%s' -> '%s'\n" msgstr "" -#: ../rcs_import.cc:1511 +#: rcs_import.cc:1511 #, c-format msgid "deleting entry state '%s' on '%s'\n" msgstr "" -#: ../rcs_import.cc:1530 +#: rcs_import.cc:1530 #, c-format msgid "BEGIN consume_cluster()\n" msgstr "" -#: ../rcs_import.cc:1550 +#: rcs_import.cc:1550 #, c-format msgid "END consume_cluster('%s') (parent '%s')\n" msgstr "" -#: ../revision.cc:126 +#: revision.cc:126 #, c-format msgid "verifying new revisions (this may take a while)\n" msgstr "vérification des nouvelles révisions (ceci peut prendre du temps)\n" -#: ../revision.cc:128 +#: revision.cc:128 #, c-format msgid "Verifying revision %s has sane history (to depth %i)\n" msgstr "" -#: ../revision.cc:166 +#: revision.cc:166 #, c-format msgid "Examining %s -> %s\n" msgstr "" -#: ../revision.cc:243 +#: revision.cc:243 #, c-format msgid "%s and %s have no common ancestor, so done\n" msgstr "" -#: ../revision.cc:249 +#: revision.cc:249 #, c-format msgid "already checked common ancestor, so done\n" msgstr "" -#: ../revision.cc:252 +#: revision.cc:252 #, c-format msgid "%s is a merge; verifying paths to common ancestor %s are sane\n" msgstr "" -#: ../revision.cc:310 +#: revision.cc:310 #, c-format msgid "loading parents for node %d\n" msgstr "" -#: ../revision.cc:332 +#: revision.cc:332 #, c-format msgid "parent %s -> node %d\n" msgstr "parent %s -> noeud %d\n" -#: ../revision.cc:482 +#: revision.cc:482 #, c-format msgid "found %d intersecting nodes\n" msgstr "" -#: ../revision.cc:535 +#: revision.cc:535 #, c-format msgid "searching for common ancestor, left=%s right=%s\n" msgstr "" -#: ../revision.cc:540 +#: revision.cc:540 #, c-format msgid "common ancestor scan [par=%d,anc=%d,dom=%d]\n" msgstr "" -#: ../revision.cc:545 +#: revision.cc:545 #, c-format msgid "found node %d, ancestor of left %s and dominating right %s\n" msgstr "" -#: ../revision.cc:552 +#: revision.cc:552 #, c-format msgid "found node %d, ancestor of right %s and dominating left %s\n" msgstr "" -#: ../revision.cc:589 +#: revision.cc:589 #, c-format msgid "searching for least common ancestor, left=%s right=%s\n" msgstr "" -#: ../revision.cc:593 +#: revision.cc:593 #, c-format msgid "least common ancestor scan [par=%d,anc=%d]\n" msgstr "" -#: ../revision.cc:598 +#: revision.cc:598 #, c-format msgid "found node %d, ancestor of left %s and right %s\n" msgstr "" -#: ../revision.cc:652 +#: revision.cc:652 #, c-format msgid "checking whether %s is an ancestor of %s\n" msgstr "" -#. now stick them in our ordering (if wanted) and remove them from the -#. graph, calculating the new roots as we go -#: ../revision.cc:764 +#: revision.cc:764 #, c-format msgid "new root: %s\n" msgstr "nouvelle racine : %s\n" -#: ../revision.cc:779 +#: revision.cc:779 #, c-format msgid "new leaf: %s\n" msgstr "nouvelle feuille : %s\n" -#: ../revision.cc:921 +#: revision.cc:921 #, c-format msgid "exploring changesets from parents of %s, seeking towards %s\n" msgstr "" -#: ../revision.cc:934 +#: revision.cc:934 #, c-format msgid "considering parent %s of %s\n" msgstr "" -#: ../revision.cc:960 +#: revision.cc:960 #, c-format msgid "revision %s is relevant, composing with edge to %s\n" msgstr "" -#: ../revision.cc:967 +#: revision.cc:967 #, c-format msgid "parent %s of %s is not relevant\n" msgstr "" -#: ../revision.cc:1003 +#: revision.cc:1003 #, c-format msgid "adding parents of %s to subgraph\n" msgstr "" -#: ../revision.cc:1013 +#: revision.cc:1013 #, c-format msgid "found parent %s of %s\n" msgstr "" -#: ../revision.cc:1017 +#: revision.cc:1017 #, c-format msgid "adding parent %s to next frontier\n" msgstr "" -#: ../revision.cc:1032 +#: revision.cc:1032 #, c-format msgid "calculating composite changeset between %s and %s\n" msgstr "" -#: ../revision.cc:1050 +#: revision.cc:1050 #, c-format msgid "calculating changeset from %s to %s\n" msgstr "" -#: ../revision.cc:1054 +#: revision.cc:1054 #, c-format msgid "no common ancestor for %s and %s\n" msgstr "" -#: ../revision.cc:1055 +#: revision.cc:1055 #, c-format msgid "common ancestor is %s\n" msgstr "l'ancêtre commun est %s\n" -#: ../revision.cc:1086 +#: revision.cc:1086 #, c-format msgid "analyzing manifest changes from '%s' -> '%s'\n" msgstr "" -#: ../revision.cc:1099 +#: revision.cc:1099 #, c-format msgid "splitting ancestry for file %s\n" msgstr "" -#: ../revision.cc:1166 +#: revision.cc:1166 #, c-format msgid "noting ancestry from child %d -> parent %d\n" msgstr "" -#: ../revision.cc:1199 +#: revision.cc:1199 #, c-format msgid "setting epoch for %s to %s\n" msgstr "" -#. This method is, as the name suggests, a kluge. It exists because in the -#. 0.17 timeframe, monotone's ancestry graph has several nodes with 3 -#. parents. This isn't, in principle, necessarily a bad thing; having 3 -#. parents is reasonably well defined, I don't know of much code that is -#. dependent on revisions having only 2 parents, etc. But it is a very -#. weird thing, that we would never under any circumstances create today, -#. and it only exists as a side-effect of the pre-changeset days. In the -#. future we may decide to allow 3+-parent revisions; we may decide to -#. disallow it. Right now, I'd rather keep options open. -#. We remove only edges that are "redundant" (i.e., already weird...). -#. These are also something that we currently refuse to produce -- when a -#. node has more than one parent, and one parent is an ancestor of another. -#. These edges, again, only exist because of weirdnesses in the -#. pre-changeset days, and are not particularly meaningful. Again, we may -#. decide in the future to use them for some things, but... -#. FIXME: remove this method eventually, since it is (mildly) destructive on -#. history, and isn't really doing anything that necessarily needs to happen -#. anyway. -#: ../revision.cc:1255 +#: revision.cc:1255 #, c-format msgid "scanning for nodes with 3+ parents\n" msgstr "" -#: ../revision.cc:1296 +#: revision.cc:1296 #, c-format msgid "optimizing out redundant edge %i -> %i\n" msgstr "" -#: ../revision.cc:1323 +#: revision.cc:1323 #, c-format msgid "rebuilding %d nodes\n" msgstr "" -#: ../revision.cc:1360 +#: revision.cc:1360 #, c-format msgid "node %d = manifest %s\n" msgstr "" -#: ../revision.cc:1371 +#: revision.cc:1371 #, c-format msgid "loaded '%s' manifest cert for node %s\n" msgstr "" -#: ../revision.cc:1399 +#: revision.cc:1399 #, c-format msgid "node %d = revision %s = manifest %s\n" msgstr "noeud %d = révision %s = manifeste %s\n" -#: ../revision.cc:1411 +#: revision.cc:1411 #, c-format msgid "loaded '%s' revision cert for node %s\n" msgstr "" -#: ../revision.cc:1435 +#: revision.cc:1435 #, c-format msgid "processing node %d\n" msgstr "" -#: ../revision.cc:1439 +#: revision.cc:1439 #, c-format msgid "node %d already processed, skipping\n" msgstr "" -#: ../revision.cc:1453 +#: revision.cc:1453 #, c-format msgid "node %d is a root node\n" msgstr "" -#: ../revision.cc:1469 ../revision.cc:1552 +#: revision.cc:1469 revision.cc:1552 #, c-format msgid "parent node %d = revision %s\n" msgstr "" -#: ../revision.cc:1531 +#: revision.cc:1531 #, c-format msgid "processing edge from child %d -> parent %d\n" msgstr "" -#: ../revision.cc:1569 +#: revision.cc:1569 #, c-format msgid "mapped node %d to revision %s\n" msgstr "" -#: ../revision.cc:1575 +#: revision.cc:1575 #, c-format msgid "skipping already existing revision %s\n" msgstr "" -#: ../revision.cc:1587 +#: revision.cc:1587 #, c-format msgid "rebuilding revision graph from existing graph\n" msgstr "" -#: ../revision.cc:1620 +#: revision.cc:1620 #, c-format msgid "rebuilding revision graph from manifest certs\n" msgstr "" -#: ../sanity.cc:37 +#: sanity.cc:37 #, c-format msgid "started up on %s\n" msgstr "" -#: ../sanity.cc:53 +#: sanity.cc:53 #, c-format msgid "wrote debugging log to %s" msgstr "" -#: ../sanity.cc:56 +#: sanity.cc:56 #, c-format msgid "failed to write debugging log to %s" msgstr "impossible d'écrire le journal de debogage sur %s" -#: ../sanity.cc:107 +#: sanity.cc:107 #, c-format msgid "fatal: formatter failed on %s:%d: %s" msgstr "" -#: ../sanity.cc:181 +#: sanity.cc:181 msgid "misuse: " msgstr "" -#: ../sanity.cc:192 +#: sanity.cc:192 msgid "error: " msgstr "erreur :" -#: ../sanity.cc:230 +#: sanity.cc:230 #, c-format msgid "ignoring request to give last gasp; already in process of dumping\n" msgstr "" -#: ../sanity.cc:234 +#: sanity.cc:234 #, c-format msgid "saving current work set: %i items" msgstr "" -#: ../sanity.cc:236 +#: sanity.cc:236 #, c-format msgid "Current work set: %i items\n" msgstr "" -#: ../sanity.cc:250 ../sanity.cc:256 +#: sanity.cc:250 sanity.cc:256 #, c-format msgid "ignoring error trigged by saving work set to debug log" msgstr "" -#: ../sanity.cc:260 +#: sanity.cc:260 #, c-format msgid "finished saving work set" msgstr "" -#: ../schema_migration.cc:262 +#: schema_migration.cc:262 #, c-format msgid "database schema %s is unknown; cannot perform migration" msgstr "" "le schéma de la base de données %s est inconnu; impossible d'effectuer la " "migration" -#. We really want 'db migrate' on an up-to-date schema to be a no-op -#. (no vacuum or anything, even), so that automated scripts can fire -#. one off optimistically and not have to worry about getting their -#. administrators to do it by hand. -#: ../schema_migration.cc:267 +#: schema_migration.cc:267 #, c-format msgid "no migration performed; database schema already up-to-date at %s\n" msgstr "" "aucune migration n'a été effectuée; le schéma de la base de données est déjà " "à jour en %s\n" -#: ../transforms.cc:520 +#: transforms.cc:520 #, c-format msgid "converting %d bytes from %s to %s\n" msgstr "conversion de %d octets de %s en %s\n" -#: ../transforms.cc:526 +#: transforms.cc:526 #, c-format msgid "failed to convert string from %s to %s: '%s'" msgstr "impossible de convertir la chaîne de %s en %s : « %s »" -#: ../transforms.cc:651 +#: transforms.cc:651 #, c-format msgid "converting %d bytes from IDNA ACE to UTF-8\n" msgstr "" -#: ../transforms.cc:654 ../transforms.cc:668 +#: transforms.cc:654 transforms.cc:668 #, c-format msgid "error converting %d UTF-8 bytes to IDNA ACE: %s" msgstr "" -#: ../transforms.cc:665 +#: transforms.cc:665 #, c-format msgid "converting %d bytes from UTF-8 to IDNA ACE\n" msgstr "conversion de %d octets d'UTF-8 en IDNA ACE\n" -#: ../transforms.cc:813 +#: transforms.cc:813 #, c-format msgid "doing linesep conversion to %s\n" msgstr "" -#. xgettext: mebibytes (2^20 bytes) -#: ../ui.cc:119 +#: ui.cc:119 #, c-format msgid "%.1f M" msgstr "%.1f Mi" -#. xgettext: kibibytes (2^10 bytes) -#: ../ui.cc:124 +#: ui.cc:124 #, c-format msgid "%.1f k" msgstr "%.1f ki" -#. xgettext: bytes -#: ../ui.cc:133 +#: ui.cc:133 #, c-format msgid "%d" msgstr "%d" -#: ../ui.cc:325 +#: ui.cc:326 #, c-format msgid "" "fatal: %s\n" @@ -4706,111 +4971,111 @@ "and a description of what you were doing to %s.\n" msgstr "" -#: ../ui.cc:368 +#: ui.cc:369 msgid "monotone: " msgstr "" -#: ../update.cc:66 +#: update.cc:66 #, c-format msgid "failed to decode boolean testresult cert value '%s'\n" msgstr "" -#: ../update.cc:78 +#: update.cc:78 #, c-format msgid "Considering update target %s\n" msgstr "" -#: ../update.cc:88 +#: update.cc:88 #, c-format msgid "%s not in branch %s\n" msgstr "%s n'est pas dans la branche %s\n" -#: ../update.cc:97 +#: update.cc:97 #, c-format msgid "%s is acceptable update candidate\n" msgstr "" -#: ../update.cc:102 +#: update.cc:102 #, c-format msgid "%s has unacceptable test results\n" msgstr "" -#: ../update.cc:160 +#: update.cc:160 #, c-format msgid "cannot determine branch for update" msgstr "impossible de déterminer la branche pour la mise à jour" -#: ../vocab.cc:53 +#: vocab.cc:53 #, c-format msgid "hex encoded ID '%s' size != %d" msgstr "" -#: ../vocab.cc:56 +#: vocab.cc:56 #, c-format msgid "bad character '%c' in id name '%s'" msgstr "" -#: ../vocab.cc:69 +#: vocab.cc:69 #, c-format msgid "bad character '%c' in ace string '%s'" msgstr "" -#: ../vocab.cc:83 +#: vocab.cc:83 #, c-format msgid "bad character '%c' in cert name '%s'" msgstr "" -#: ../vocab.cc:96 +#: vocab.cc:96 #, c-format msgid "bad character '%c' in key name '%s'" msgstr "" -#: ../vocab.cc:114 +#: vocab.cc:114 #, c-format msgid "Invalid key length of %d bytes" msgstr "Longueur de clef invalide de %d octets" -#: ../vocab.cc:132 +#: vocab.cc:132 #, c-format msgid "Invalid hmac length of %d bytes" msgstr "Longueur hmac invalide de %d octets" -#: ../work.cc:64 +#: work.cc:64 #, c-format msgid "skipping ignorable file %s\n" msgstr "" -#: ../work.cc:70 +#: work.cc:70 #, c-format msgid "skipping %s, already accounted for in working copy\n" msgstr "" -#: ../work.cc:74 +#: work.cc:74 #, c-format msgid "adding %s to working copy add set\n" msgstr "" -#: ../work.cc:136 +#: work.cc:136 #, c-format msgid "adding attribute '%s' on file %s to %s\n" msgstr "" -#: ../work.cc:203 +#: work.cc:203 #, c-format msgid "invalid path ''" msgstr "" -#: ../work.cc:207 +#: work.cc:207 #, c-format msgid "skipping %s, not currently tracked\n" msgstr "" -#: ../work.cc:211 +#: work.cc:211 #, c-format msgid "adding %s to working copy delete set\n" msgstr "" -#: ../work.cc:215 +#: work.cc:215 #, c-format msgid "" "sorry -- 'drop ' is currently broken.\n" @@ -4819,146 +5084,149 @@ "désolé mais « drop  » est actuellement cassé.\n" "essayez « find %s -type f | monotone drop address@hidden" -#: ../work.cc:227 +#: work.cc:227 #, c-format msgid "dropped attributes for file %s from %s\n" msgstr "" -#: ../work.cc:253 +#: work.cc:253 #, c-format msgid "invalid source path ''" msgstr "" -#: ../work.cc:254 +#: work.cc:254 #, c-format msgid "invalid destination path ''" msgstr "" -#: ../work.cc:265 +#: work.cc:265 #, c-format msgid "%s does not exist in current revision\n" msgstr "" -#: ../work.cc:268 +#: work.cc:268 #, c-format msgid "%s already exists in current revision\n" msgstr "" -#: ../work.cc:270 +#: work.cc:270 #, c-format msgid "adding %s -> %s to working copy rename set\n" msgstr "" -#: ../work.cc:293 +#: work.cc:293 #, c-format msgid "%s has existing attributes in %s; clean them up first" msgstr "" -#: ../work.cc:302 +#: work.cc:302 #, c-format msgid "moving attributes for %s to %s\n" msgstr "" -#: ../work.cc:321 +#: work.cc:321 #, c-format msgid "work path is %s\n" msgstr "" -#: ../work.cc:330 +#: work.cc:330 #, c-format msgid "checking for un-committed work file %s\n" msgstr "" -#: ../work.cc:334 +#: work.cc:334 #, c-format msgid "read rearrangement from %s\n" msgstr "" -#: ../work.cc:338 +#: work.cc:338 #, c-format msgid "no un-committed work file %s\n" msgstr "" -#: ../work.cc:375 +#: work.cc:375 #, c-format msgid "revision path is %s\n" msgstr "" -#: ../work.cc:385 +#: work.cc:385 #, c-format msgid "working copy is corrupt: %s does not exist" msgstr "la copie de travail est corrompue : %s n'existe pas" -#: ../work.cc:386 +#: work.cc:386 #, c-format msgid "working copy is corrupt: %s is a directory" msgstr "" -#: ../work.cc:389 +#: work.cc:389 #, c-format msgid "loading revision id from %s\n" msgstr "" -#: ../work.cc:396 +#: work.cc:396 #, c-format msgid "Problem with working directory: %s is unreadable" msgstr "" -#: ../work.cc:405 +#: work.cc:405 #, c-format msgid "writing revision id to %s\n" msgstr "" -#: ../work.cc:424 +#: work.cc:424 #, c-format msgid "base revision %s does not exist in database\n" msgstr "" -#: ../work.cc:427 +#: work.cc:427 #, c-format msgid "old manifest is %s\n" msgstr "" -#: ../work.cc:430 +#: work.cc:430 #, c-format msgid "base manifest %s does not exist in database\n" msgstr "" -#: ../work.cc:435 +#: work.cc:435 #, c-format msgid "old manifest has %d entries\n" msgstr "" -#: ../work.cc:456 +#: work.cc:456 #, c-format msgid "user log path is %s\n" msgstr "" -#: ../work.cc:505 +#: work.cc:505 #, c-format msgid "options path is %s\n" msgstr "" -#: ../work.cc:552 +#: work.cc:552 #, c-format msgid "local dump path is %s\n" msgstr "" -#: ../work.cc:604 +#: work.cc:604 #, c-format msgid "attribute map path is %s\n" msgstr "" -#: ../xdelta.cc:345 +#: xdelta.cc:345 #, c-format msgid "computing binary delta instructions\n" msgstr "" -#: ../xdelta.cc:347 +#: xdelta.cc:347 #, c-format msgid "computed binary delta instructions\n" msgstr "" +#~ msgid "key '%s' already exists in database" +#~ msgstr "la clef « %s » est déjà dans la base de données" + #~ msgid "" #~ "merge of %s\n" #~ " and %s\n" @@ -4981,9 +5249,6 @@ #~ msgid "public key '%s' not found in database" #~ msgstr "la clef « %s » n'existe pas dans la base de données" -#~ msgid "new revision %s\n" -#~ msgstr "nouvelle révisions %s\n" - #~ msgid "initial path is %s\n" #~ msgstr "le chemin initial est %s\n" ======================================================================== --- sanity.cc d43cf000a18c156b97527e0724635b050159d16d +++ sanity.cc 6a638085b01e1178573585233adc5eb5848b5207 @@ -179,6 +179,7 @@ log(format("%s:%d: usage constraint '%s' violated\n") % file % line % expr, file.c_str(), line); prefix_lines_with(_("misuse: "), explain.str(), message); + gasp(); throw informative_failure(message); } ======================================================================== --- vocab.cc cebf734fb6a83a66665786e2c1486d4934137066 +++ vocab.cc 023a5cc51fde8562c2d21f7b06fb11e0cf68b672 @@ -228,6 +228,9 @@ template class revision; template class manifest; +template void dump(base64 const&, + std::string &); + // the rest is unit tests #ifdef BUILD_UNIT_TESTS ======================================================================== --- vocab.hh f14bf372280ec9b5bc886598249ec518dfa114d3 +++ vocab.hh 06422180e56f9298d0c8c91387d10c7db8283199 @@ -146,11 +146,11 @@ struct keypair { base64 pub; - base64< arc4 > priv; + base64 priv; keypair() {} keypair(base64 const & a, - base64< arc4 > const & b) + base64 const & b) : pub(a), priv(b) {} }; ======================================================================== --- vocab_terms.hh 9abc8225074b278d3b7a57c291ab5d8fd0a98ea6 +++ vocab_terms.hh 64c7b6e84baa98c36e9811817b548ba4adecb8d2 @@ -80,6 +80,7 @@ EXTERN template class arc4; EXTERN template class base64< arc4 >; EXTERN template class base64< rsa_pub_key >; +EXTERN template class base64< rsa_priv_key >; EXTERN template class base64< rsa_sha1_signature >; EXTERN template class hexenc< rsa_sha1_signature >; EXTERN template class base64< cert_value >;