aboutsummaryrefslogtreecommitdiffstats
path: root/tools/testing/selftests/bpf/prog_tests/sockmap_basic.c
blob: 82bfb266741cfaceafa2a407cd2ccc937708c613 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
// SPDX-License-Identifier: GPL-2.0
// Copyright (c) 2020 Cloudflare
#include <error.h>
#include <netinet/tcp.h>
#include <sys/epoll.h>

#include "test_progs.h"
#include "test_skmsg_load_helpers.skel.h"
#include "test_sockmap_update.skel.h"
#include "test_sockmap_invalid_update.skel.h"
#include "test_sockmap_skb_verdict_attach.skel.h"
#include "test_sockmap_progs_query.skel.h"
#include "test_sockmap_pass_prog.skel.h"
#include "test_sockmap_drop_prog.skel.h"
#include "bpf_iter_sockmap.skel.h"

#include "sockmap_helpers.h"

#define TCP_REPAIR		19	/* TCP sock is under repair right now */

#define TCP_REPAIR_ON		1
#define TCP_REPAIR_OFF_NO_WP	-1	/* Turn off without window probes */

static int connected_socket_v4(void)
{
	struct sockaddr_in addr = {
		.sin_family = AF_INET,
		.sin_port = htons(80),
		.sin_addr = { inet_addr("127.0.0.1") },
	};
	socklen_t len = sizeof(addr);
	int s, repair, err;

	s = socket(AF_INET, SOCK_STREAM, 0);
	if (!ASSERT_GE(s, 0, "socket"))
		goto error;

	repair = TCP_REPAIR_ON;
	err = setsockopt(s, SOL_TCP, TCP_REPAIR, &repair, sizeof(repair));
	if (!ASSERT_OK(err, "setsockopt(TCP_REPAIR)"))
		goto error;

	err = connect(s, (struct sockaddr *)&addr, len);
	if (!ASSERT_OK(err, "connect"))
		goto error;

	repair = TCP_REPAIR_OFF_NO_WP;
	err = setsockopt(s, SOL_TCP, TCP_REPAIR, &repair, sizeof(repair));
	if (!ASSERT_OK(err, "setsockopt(TCP_REPAIR)"))
		goto error;

	return s;
error:
	perror(__func__);
	close(s);
	return -1;
}

static void compare_cookies(struct bpf_map *src, struct bpf_map *dst)
{
	__u32 i, max_entries = bpf_map__max_entries(src);
	int err, src_fd, dst_fd;

	src_fd = bpf_map__fd(src);
	dst_fd = bpf_map__fd(dst);

	for (i = 0; i < max_entries; i++) {
		__u64 src_cookie, dst_cookie;

		err = bpf_map_lookup_elem(src_fd, &i, &src_cookie);
		if (err && errno == ENOENT) {
			err = bpf_map_lookup_elem(dst_fd, &i, &dst_cookie);
			ASSERT_ERR(err, "map_lookup_elem(dst)");
			ASSERT_EQ(errno, ENOENT, "map_lookup_elem(dst)");
			continue;
		}
		if (!ASSERT_OK(err, "lookup_elem(src)"))
			continue;

		err = bpf_map_lookup_elem(dst_fd, &i, &dst_cookie);
		if (!ASSERT_OK(err, "lookup_elem(dst)"))
			continue;

		ASSERT_EQ(dst_cookie, src_cookie, "cookie mismatch");
	}
}

/* Create a map, populate it with one socket, and free the map. */
static void test_sockmap_create_update_free(enum bpf_map_type map_type)
{
	const int zero = 0;
	int s, map, err;

	s = connected_socket_v4();
	if (!ASSERT_GE(s, 0, "connected_socket_v4"))
		return;

	map = bpf_map_create(map_type, NULL, sizeof(int), sizeof(int), 1, NULL);
	if (!ASSERT_GE(map, 0, "bpf_map_create"))
		goto out;

	err = bpf_map_update_elem(map, &zero, &s, BPF_NOEXIST);
	if (!ASSERT_OK(err, "bpf_map_update"))
		goto out;

out:
	close(map);
	close(s);
}

static void test_skmsg_helpers(enum bpf_map_type map_type)
{
	struct test_skmsg_load_helpers *skel;
	int err, map, verdict;

	skel = test_skmsg_load_helpers__open_and_load();
	if (!ASSERT_OK_PTR(skel, "test_skmsg_load_helpers__open_and_load"))
		return;

	verdict = bpf_program__fd(skel->progs.prog_msg_verdict);
	map = bpf_map__fd(skel->maps.sock_map);

	err = bpf_prog_attach(verdict, map, BPF_SK_MSG_VERDICT, 0);
	if (!ASSERT_OK(err, "bpf_prog_attach"))
		goto out;

	err = bpf_prog_detach2(verdict, map, BPF_SK_MSG_VERDICT);
	if (!ASSERT_OK(err, "bpf_prog_detach2"))
		goto out;
out:
	test_skmsg_load_helpers__destroy(skel);
}

static void test_skmsg_helpers_with_link(enum bpf_map_type map_type)
{
	struct bpf_program *prog, *prog_clone, *prog_clone2;
	DECLARE_LIBBPF_OPTS(bpf_link_update_opts, opts);
	struct test_skmsg_load_helpers *skel;
	struct bpf_link *link, *link2;
	int err, map;

	skel = test_skmsg_load_helpers__open_and_load();
	if (!ASSERT_OK_PTR(skel, "test_skmsg_load_helpers__open_and_load"))
		return;

	prog = skel->progs.prog_msg_verdict;
	prog_clone = skel->progs.prog_msg_verdict_clone;
	prog_clone2 = skel->progs.prog_msg_verdict_clone2;
	map = bpf_map__fd(skel->maps.sock_map);

	link = bpf_program__attach_sockmap(prog, map);
	if (!ASSERT_OK_PTR(link, "bpf_program__attach_sockmap"))
		goto out;

	/* Fail since bpf_link for the same prog has been created. */
	err = bpf_prog_attach(bpf_program__fd(prog), map, BPF_SK_MSG_VERDICT, 0);
	if (!ASSERT_ERR(err, "bpf_prog_attach"))
		goto out;

	/* Fail since bpf_link for the same prog type has been created. */
	link2 = bpf_program__attach_sockmap(prog_clone, map);
	if (!ASSERT_ERR_PTR(link2, "bpf_program__attach_sockmap")) {
		bpf_link__detach(link2);
		goto out;
	}

	err = bpf_link__update_program(link, prog_clone);
	if (!ASSERT_OK(err, "bpf_link__update_program"))
		goto out;

	/* Fail since a prog with different type attempts to do update. */
	err = bpf_link__update_program(link, skel->progs.prog_skb_verdict);
	if (!ASSERT_ERR(err, "bpf_link__update_program"))
		goto out;

	/* Fail since the old prog does not match the one in the kernel. */
	opts.old_prog_fd = bpf_program__fd(prog_clone2);
	opts.flags = BPF_F_REPLACE;
	err = bpf_link_update(bpf_link__fd(link), bpf_program__fd(prog), &opts);
	if (!ASSERT_ERR(err, "bpf_link_update"))
		goto out;

	opts.old_prog_fd = bpf_program__fd(prog_clone);
	opts.flags = BPF_F_REPLACE;
	err = bpf_link_update(bpf_link__fd(link), bpf_program__fd(prog), &opts);
	if (!ASSERT_OK(err, "bpf_link_update"))
		goto out;
out:
	bpf_link__detach(link);
	test_skmsg_load_helpers__destroy(skel);
}

static void test_sockmap_update(enum bpf_map_type map_type)
{
	int err, prog, src;
	struct test_sockmap_update *skel;
	struct bpf_map *dst_map;
	const __u32 zero = 0;
	char dummy[14] = {0};
	LIBBPF_OPTS(bpf_test_run_opts, topts,
		.data_in = dummy,
		.data_size_in = sizeof(dummy),
		.repeat = 1,
	);
	__s64 sk;

	sk = connected_socket_v4();
	if (!ASSERT_NEQ(sk, -1, "connected_socket_v4"))
		return;

	skel = test_sockmap_update__open_and_load();
	if (!ASSERT_OK_PTR(skel, "open_and_load"))
		goto close_sk;

	prog = bpf_program__fd(skel->progs.copy_sock_map);
	src = bpf_map__fd(skel->maps.src);
	if (map_type == BPF_MAP_TYPE_SOCKMAP)
		dst_map = skel->maps.dst_sock_map;
	else
		dst_map = skel->maps.dst_sock_hash;

	err = bpf_map_update_elem(src, &zero, &sk, BPF_NOEXIST);
	if (!ASSERT_OK(err, "update_elem(src)"))
		goto out;

	err = bpf_prog_test_run_opts(prog, &topts);
	if (!ASSERT_OK(err, "test_run"))
		goto out;
	if (!ASSERT_NEQ(topts.retval, 0, "test_run retval"))
		goto out;

	compare_cookies(skel->maps.src, dst_map);

out:
	test_sockmap_update__destroy(skel);
close_sk:
	close(sk);
}

static void test_sockmap_invalid_update(void)
{
	struct test_sockmap_invalid_update *skel;

	skel = test_sockmap_invalid_update__open_and_load();
	if (!ASSERT_NULL(skel, "open_and_load"))
		test_sockmap_invalid_update__destroy(skel);
}

static void test_sockmap_copy(enum bpf_map_type map_type)
{
	DECLARE_LIBBPF_OPTS(bpf_iter_attach_opts, opts);
	int err, len, src_fd, iter_fd;
	union bpf_iter_link_info linfo = {};
	__u32 i, num_sockets, num_elems;
	struct bpf_iter_sockmap *skel;
	__s64 *sock_fd = NULL;
	struct bpf_link *link;
	struct bpf_map *src;
	char buf[64];

	skel = bpf_iter_sockmap__open_and_load();
	if (!ASSERT_OK_PTR(skel, "bpf_iter_sockmap__open_and_load"))
		return;

	if (map_type == BPF_MAP_TYPE_SOCKMAP) {
		src = skel->maps.sockmap;
		num_elems = bpf_map__max_entries(src);
		num_sockets = num_elems - 1;
	} else {
		src = skel->maps.sockhash;
		num_elems = bpf_map__max_entries(src) - 1;
		num_sockets = num_elems;
	}

	sock_fd = calloc(num_sockets, sizeof(*sock_fd));
	if (!ASSERT_OK_PTR(sock_fd, "calloc(sock_fd)"))
		goto out;

	for (i = 0; i < num_sockets; i++)
		sock_fd[i] = -1;

	src_fd = bpf_map__fd(src);

	for (i = 0; i < num_sockets; i++) {
		sock_fd[i] = connected_socket_v4();
		if (!ASSERT_NEQ(sock_fd[i], -1, "connected_socket_v4"))
			goto out;

		err = bpf_map_update_elem(src_fd, &i, &sock_fd[i], BPF_NOEXIST);
		if (!ASSERT_OK(err, "map_update"))
			goto out;
	}

	linfo.map.map_fd = src_fd;
	opts.link_info = &linfo;
	opts.link_info_len = sizeof(linfo);
	link = bpf_program__attach_iter(skel->progs.copy, &opts);
	if (!ASSERT_OK_PTR(link, "attach_iter"))
		goto out;

	iter_fd = bpf_iter_create(bpf_link__fd(link));
	if (!ASSERT_GE(iter_fd, 0, "create_iter"))
		goto free_link;

	/* do some tests */
	while ((len = read(iter_fd, buf, sizeof(buf))) > 0)
		;
	if (!ASSERT_GE(len, 0, "read"))
		goto close_iter;

	/* test results */
	if (!ASSERT_EQ(skel->bss->elems, num_elems, "elems"))
		goto close_iter;

	if (!ASSERT_EQ(skel->bss->socks, num_sockets, "socks"))
		goto close_iter;

	compare_cookies(src, skel->maps.dst);

close_iter:
	close(iter_fd);
free_link:
	bpf_link__destroy(link);
out:
	for (i = 0; sock_fd && i < num_sockets; i++)
		if (sock_fd[i] >= 0)
			close(sock_fd[i]);
	if (sock_fd)
		free(sock_fd);
	bpf_iter_sockmap__destroy(skel);
}

static void test_sockmap_skb_verdict_attach(enum bpf_attach_type first,
					    enum bpf_attach_type second)
{
	struct test_sockmap_skb_verdict_attach *skel;
	int err, map, verdict;

	skel = test_sockmap_skb_verdict_attach__open_and_load();
	if (!ASSERT_OK_PTR(skel, "open_and_load"))
		return;

	verdict = bpf_program__fd(skel->progs.prog_skb_verdict);
	map = bpf_map__fd(skel->maps.sock_map);

	err = bpf_prog_attach(verdict, map, first, 0);
	if (!ASSERT_OK(err, "bpf_prog_attach"))
		goto out;

	err = bpf_prog_attach(verdict, map, second, 0);
	ASSERT_EQ(err, -EBUSY, "prog_attach_fail");

	err = bpf_prog_detach2(verdict, map, first);
	if (!ASSERT_OK(err, "bpf_prog_detach2"))
		goto out;
out:
	test_sockmap_skb_verdict_attach__destroy(skel);
}

static void test_sockmap_skb_verdict_attach_with_link(void)
{
	struct test_sockmap_skb_verdict_attach *skel;
	struct bpf_program *prog;
	struct bpf_link *link;
	int err, map;

	skel = test_sockmap_skb_verdict_attach__open_and_load();
	if (!ASSERT_OK_PTR(skel, "open_and_load"))
		return;
	prog = skel->progs.prog_skb_verdict;
	map = bpf_map__fd(skel->maps.sock_map);
	link = bpf_program__attach_sockmap(prog, map);
	if (!ASSERT_OK_PTR(link, "bpf_program__attach_sockmap"))
		goto out;

	bpf_link__detach(link);

	err = bpf_prog_attach(bpf_program__fd(prog), map, BPF_SK_SKB_STREAM_VERDICT, 0);
	if (!ASSERT_OK(err, "bpf_prog_attach"))
		goto out;

	/* Fail since attaching with the same prog/map has been done. */
	link = bpf_program__attach_sockmap(prog, map);
	if (!ASSERT_ERR_PTR(link, "bpf_program__attach_sockmap"))
		bpf_link__detach(link);

	err = bpf_prog_detach2(bpf_program__fd(prog), map, BPF_SK_SKB_STREAM_VERDICT);
	if (!ASSERT_OK(err, "bpf_prog_detach2"))
		goto out;
out:
	test_sockmap_skb_verdict_attach__destroy(skel);
}

static __u32 query_prog_id(int prog_fd)
{
	struct bpf_prog_info info = {};
	__u32 info_len = sizeof(info);
	int err;

	err = bpf_prog_get_info_by_fd(prog_fd, &info, &info_len);
	if (!ASSERT_OK(err, "bpf_prog_get_info_by_fd") ||
	    !ASSERT_EQ(info_len, sizeof(info), "bpf_prog_get_info_by_fd"))
		return 0;

	return info.id;
}

static void test_sockmap_progs_query(enum bpf_attach_type attach_type)
{
	struct test_sockmap_progs_query *skel;
	int err, map_fd, verdict_fd;
	__u32 attach_flags = 0;
	__u32 prog_ids[3] = {};
	__u32 prog_cnt = 3;

	skel = test_sockmap_progs_query__open_and_load();
	if (!ASSERT_OK_PTR(skel, "test_sockmap_progs_query__open_and_load"))
		return;

	map_fd = bpf_map__fd(skel->maps.sock_map);

	if (attach_type == BPF_SK_MSG_VERDICT)
		verdict_fd = bpf_program__fd(skel->progs.prog_skmsg_verdict);
	else
		verdict_fd = bpf_program__fd(skel->progs.prog_skb_verdict);

	err = bpf_prog_query(map_fd, attach_type, 0 /* query flags */,
			     &attach_flags, prog_ids, &prog_cnt);
	ASSERT_OK(err, "bpf_prog_query failed");
	ASSERT_EQ(attach_flags,  0, "wrong attach_flags on query");
	ASSERT_EQ(prog_cnt, 0, "wrong program count on query");

	err = bpf_prog_attach(verdict_fd, map_fd, attach_type, 0);
	if (!ASSERT_OK(err, "bpf_prog_attach failed"))
		goto out;

	prog_cnt = 1;
	err = bpf_prog_query(map_fd, attach_type, 0 /* query flags */,
			     &attach_flags, prog_ids, &prog_cnt);
	ASSERT_OK(err, "bpf_prog_query failed");
	ASSERT_EQ(attach_flags, 0, "wrong attach_flags on query");
	ASSERT_EQ(prog_cnt, 1, "wrong program count on query");
	ASSERT_EQ(prog_ids[0], query_prog_id(verdict_fd),
		  "wrong prog_ids on query");

	bpf_prog_detach2(verdict_fd, map_fd, attach_type);
out:
	test_sockmap_progs_query__destroy(skel);
}

#define MAX_EVENTS 10
static void test_sockmap_skb_verdict_shutdown(void)
{
	int n, err, map, verdict, c1 = -1, p1 = -1;
	struct epoll_event ev, events[MAX_EVENTS];
	struct test_sockmap_pass_prog *skel;
	int zero = 0;
	int epollfd;
	char b;

	skel = test_sockmap_pass_prog__open_and_load();
	if (!ASSERT_OK_PTR(skel, "open_and_load"))
		return;

	verdict = bpf_program__fd(skel->progs.prog_skb_verdict);
	map = bpf_map__fd(skel->maps.sock_map_rx);

	err = bpf_prog_attach(verdict, map, BPF_SK_SKB_STREAM_VERDICT, 0);
	if (!ASSERT_OK(err, "bpf_prog_attach"))
		goto out;

	err = create_pair(AF_INET, SOCK_STREAM, &c1, &p1);
	if (err < 0)
		goto out;

	err = bpf_map_update_elem(map, &zero, &c1, BPF_NOEXIST);
	if (err < 0)
		goto out_close;

	shutdown(p1, SHUT_WR);

	ev.events = EPOLLIN;
	ev.data.fd = c1;

	epollfd = epoll_create1(0);
	if (!ASSERT_GT(epollfd, -1, "epoll_create(0)"))
		goto out_close;
	err = epoll_ctl(epollfd, EPOLL_CTL_ADD, c1, &ev);
	if (!ASSERT_OK(err, "epoll_ctl(EPOLL_CTL_ADD)"))
		goto out_close;
	err = epoll_wait(epollfd, events, MAX_EVENTS, -1);
	if (!ASSERT_EQ(err, 1, "epoll_wait(fd)"))
		goto out_close;

	n = recv(c1, &b, 1, SOCK_NONBLOCK);
	ASSERT_EQ(n, 0, "recv_timeout(fin)");
out_close:
	close(c1);
	close(p1);
out:
	test_sockmap_pass_prog__destroy(skel);
}

static void test_sockmap_skb_verdict_fionread(bool pass_prog)
{
	int err, map, verdict, c0 = -1, c1 = -1, p0 = -1, p1 = -1;
	int expected, zero = 0, sent, recvd, avail;
	struct test_sockmap_pass_prog *pass = NULL;
	struct test_sockmap_drop_prog *drop = NULL;
	char buf[256] = "0123456789";

	if (pass_prog) {
		pass = test_sockmap_pass_prog__open_and_load();
		if (!ASSERT_OK_PTR(pass, "open_and_load"))
			return;
		verdict = bpf_program__fd(pass->progs.prog_skb_verdict);
		map = bpf_map__fd(pass->maps.sock_map_rx);
		expected = sizeof(buf);
	} else {
		drop = test_sockmap_drop_prog__open_and_load();
		if (!ASSERT_OK_PTR(drop, "open_and_load"))
			return;
		verdict = bpf_program__fd(drop->progs.prog_skb_verdict);
		map = bpf_map__fd(drop->maps.sock_map_rx);
		/* On drop data is consumed immediately and copied_seq inc'd */
		expected = 0;
	}


	err = bpf_prog_attach(verdict, map, BPF_SK_SKB_STREAM_VERDICT, 0);
	if (!ASSERT_OK(err, "bpf_prog_attach"))
		goto out;

	err = create_socket_pairs(AF_INET, SOCK_STREAM, &c0, &c1, &p0, &p1);
	if (!ASSERT_OK(err, "create_socket_pairs()"))
		goto out;

	err = bpf_map_update_elem(map, &zero, &c1, BPF_NOEXIST);
	if (!ASSERT_OK(err, "bpf_map_update_elem(c1)"))
		goto out_close;

	sent = xsend(p1, &buf, sizeof(buf), 0);
	ASSERT_EQ(sent, sizeof(buf), "xsend(p0)");
	err = ioctl(c1, FIONREAD, &avail);
	ASSERT_OK(err, "ioctl(FIONREAD) error");
	ASSERT_EQ(avail, expected, "ioctl(FIONREAD)");
	/* On DROP test there will be no data to read */
	if (pass_prog) {
		recvd = recv_timeout(c1, &buf, sizeof(buf), SOCK_NONBLOCK, IO_TIMEOUT_SEC);
		ASSERT_EQ(recvd, sizeof(buf), "recv_timeout(c0)");
	}

out_close:
	close(c0);
	close(p0);
	close(c1);
	close(p1);
out:
	if (pass_prog)
		test_sockmap_pass_prog__destroy(pass);
	else
		test_sockmap_drop_prog__destroy(drop);
}

static void test_sockmap_skb_verdict_peek_helper(int map)
{
	int err, c1, p1, zero = 0, sent, recvd, avail;
	char snd[256] = "0123456789";
	char rcv[256] = "0";

	err = create_pair(AF_INET, SOCK_STREAM, &c1, &p1);
	if (!ASSERT_OK(err, "create_pair()"))
		return;

	err = bpf_map_update_elem(map, &zero, &c1, BPF_NOEXIST);
	if (!ASSERT_OK(err, "bpf_map_update_elem(c1)"))
		goto out_close;

	sent = xsend(p1, snd, sizeof(snd), 0);
	ASSERT_EQ(sent, sizeof(snd), "xsend(p1)");
	recvd = recv(c1, rcv, sizeof(rcv), MSG_PEEK);
	ASSERT_EQ(recvd, sizeof(rcv), "recv(c1)");
	err = ioctl(c1, FIONREAD, &avail);
	ASSERT_OK(err, "ioctl(FIONREAD) error");
	ASSERT_EQ(avail, sizeof(snd), "after peek ioctl(FIONREAD)");
	recvd = recv(c1, rcv, sizeof(rcv), 0);
	ASSERT_EQ(recvd, sizeof(rcv), "recv(p0)");
	err = ioctl(c1, FIONREAD, &avail);
	ASSERT_OK(err, "ioctl(FIONREAD) error");
	ASSERT_EQ(avail, 0, "after read ioctl(FIONREAD)");

out_close:
	close(c1);
	close(p1);
}

static void test_sockmap_skb_verdict_peek(void)
{
	struct test_sockmap_pass_prog *pass;
	int err, map, verdict;

	pass = test_sockmap_pass_prog__open_and_load();
	if (!ASSERT_OK_PTR(pass, "open_and_load"))
		return;
	verdict = bpf_program__fd(pass->progs.prog_skb_verdict);
	map = bpf_map__fd(pass->maps.sock_map_rx);

	err = bpf_prog_attach(verdict, map, BPF_SK_SKB_STREAM_VERDICT, 0);
	if (!ASSERT_OK(err, "bpf_prog_attach"))
		goto out;

	test_sockmap_skb_verdict_peek_helper(map);

out:
	test_sockmap_pass_prog__destroy(pass);
}

static void test_sockmap_skb_verdict_peek_with_link(void)
{
	struct test_sockmap_pass_prog *pass;
	struct bpf_program *prog;
	struct bpf_link *link;
	int err, map;

	pass = test_sockmap_pass_prog__open_and_load();
	if (!ASSERT_OK_PTR(pass, "open_and_load"))
		return;
	prog = pass->progs.prog_skb_verdict;
	map = bpf_map__fd(pass->maps.sock_map_rx);
	link = bpf_program__attach_sockmap(prog, map);
	if (!ASSERT_OK_PTR(link, "bpf_program__attach_sockmap"))
		goto out;

	err = bpf_link__update_program(link, pass->progs.prog_skb_verdict_clone);
	if (!ASSERT_OK(err, "bpf_link__update_program"))
		goto out;

	/* Fail since a prog with different attach type attempts to do update. */
	err = bpf_link__update_program(link, pass->progs.prog_skb_parser);
	if (!ASSERT_ERR(err, "bpf_link__update_program"))
		goto out;

	test_sockmap_skb_verdict_peek_helper(map);
	ASSERT_EQ(pass->bss->clone_called, 1, "clone_called");
out:
	bpf_link__detach(link);
	test_sockmap_pass_prog__destroy(pass);
}

static void test_sockmap_unconnected_unix(void)
{
	int err, map, stream = 0, dgram = 0, zero = 0;
	struct test_sockmap_pass_prog *skel;

	skel = test_sockmap_pass_prog__open_and_load();
	if (!ASSERT_OK_PTR(skel, "open_and_load"))
		return;

	map = bpf_map__fd(skel->maps.sock_map_rx);

	stream = xsocket(AF_UNIX, SOCK_STREAM, 0);
	if (stream < 0)
		return;

	dgram = xsocket(AF_UNIX, SOCK_DGRAM, 0);
	if (dgram < 0) {
		close(stream);
		return;
	}

	err = bpf_map_update_elem(map, &zero, &stream, BPF_ANY);
	ASSERT_ERR(err, "bpf_map_update_elem(stream)");

	err = bpf_map_update_elem(map, &zero, &dgram, BPF_ANY);
	ASSERT_OK(err, "bpf_map_update_elem(dgram)");

	close(stream);
	close(dgram);
}

static void test_sockmap_many_socket(void)
{
	struct test_sockmap_pass_prog *skel;
	int stream[2], dgram, udp, tcp;
	int i, err, map, entry = 0;

	skel = test_sockmap_pass_prog__open_and_load();
	if (!ASSERT_OK_PTR(skel, "open_and_load"))
		return;

	map = bpf_map__fd(skel->maps.sock_map_rx);

	dgram = xsocket(AF_UNIX, SOCK_DGRAM, 0);
	if (dgram < 0) {
		test_sockmap_pass_prog__destroy(skel);
		return;
	}

	tcp = connected_socket_v4();
	if (!ASSERT_GE(tcp, 0, "connected_socket_v4")) {
		close(dgram);
		test_sockmap_pass_prog__destroy(skel);
		return;
	}

	udp = xsocket(AF_INET, SOCK_DGRAM | SOCK_NONBLOCK, 0);
	if (udp < 0) {
		close(dgram);
		close(tcp);
		test_sockmap_pass_prog__destroy(skel);
		return;
	}

	err = socketpair(AF_UNIX, SOCK_STREAM, 0, stream);
	ASSERT_OK(err, "socketpair(af_unix, sock_stream)");
	if (err)
		goto out;

	for (i = 0; i < 2; i++, entry++) {
		err = bpf_map_update_elem(map, &entry, &stream[0], BPF_ANY);
		ASSERT_OK(err, "bpf_map_update_elem(stream)");
	}
	for (i = 0; i < 2; i++, entry++) {
		err = bpf_map_update_elem(map, &entry, &dgram, BPF_ANY);
		ASSERT_OK(err, "bpf_map_update_elem(dgram)");
	}
	for (i = 0; i < 2; i++, entry++) {
		err = bpf_map_update_elem(map, &entry, &udp, BPF_ANY);
		ASSERT_OK(err, "bpf_map_update_elem(udp)");
	}
	for (i = 0; i < 2; i++, entry++) {
		err = bpf_map_update_elem(map, &entry, &tcp, BPF_ANY);
		ASSERT_OK(err, "bpf_map_update_elem(tcp)");
	}
	for (entry--; entry >= 0; entry--) {
		err = bpf_map_delete_elem(map, &entry);
		ASSERT_OK(err, "bpf_map_delete_elem(entry)");
	}

	close(stream[0]);
	close(stream[1]);
out:
	close(dgram);
	close(tcp);
	close(udp);
	test_sockmap_pass_prog__destroy(skel);
}

static void test_sockmap_many_maps(void)
{
	struct test_sockmap_pass_prog *skel;
	int stream[2], dgram, udp, tcp;
	int i, err, map[2], entry = 0;

	skel = test_sockmap_pass_prog__open_and_load();
	if (!ASSERT_OK_PTR(skel, "open_and_load"))
		return;

	map[0] = bpf_map__fd(skel->maps.sock_map_rx);
	map[1] = bpf_map__fd(skel->maps.sock_map_tx);

	dgram = xsocket(AF_UNIX, SOCK_DGRAM, 0);
	if (dgram < 0) {
		test_sockmap_pass_prog__destroy(skel);
		return;
	}

	tcp = connected_socket_v4();
	if (!ASSERT_GE(tcp, 0, "connected_socket_v4")) {
		close(dgram);
		test_sockmap_pass_prog__destroy(skel);
		return;
	}

	udp = xsocket(AF_INET, SOCK_DGRAM | SOCK_NONBLOCK, 0);
	if (udp < 0) {
		close(dgram);
		close(tcp);
		test_sockmap_pass_prog__destroy(skel);
		return;
	}

	err = socketpair(AF_UNIX, SOCK_STREAM, 0, stream);
	ASSERT_OK(err, "socketpair(af_unix, sock_stream)");
	if (err)
		goto out;

	for (i = 0; i < 2; i++, entry++) {
		err = bpf_map_update_elem(map[i], &entry, &stream[0], BPF_ANY);
		ASSERT_OK(err, "bpf_map_update_elem(stream)");
	}
	for (i = 0; i < 2; i++, entry++) {
		err = bpf_map_update_elem(map[i], &entry, &dgram, BPF_ANY);
		ASSERT_OK(err, "bpf_map_update_elem(dgram)");
	}
	for (i = 0; i < 2; i++, entry++) {
		err = bpf_map_update_elem(map[i], &entry, &udp, BPF_ANY);
		ASSERT_OK(err, "bpf_map_update_elem(udp)");
	}
	for (i = 0; i < 2; i++, entry++) {
		err = bpf_map_update_elem(map[i], &entry, &tcp, BPF_ANY);
		ASSERT_OK(err, "bpf_map_update_elem(tcp)");
	}
	for (entry--; entry >= 0; entry--) {
		err = bpf_map_delete_elem(map[1], &entry);
		entry--;
		ASSERT_OK(err, "bpf_map_delete_elem(entry)");
		err = bpf_map_delete_elem(map[0], &entry);
		ASSERT_OK(err, "bpf_map_delete_elem(entry)");
	}

	close(stream[0]);
	close(stream[1]);
out:
	close(dgram);
	close(tcp);
	close(udp);
	test_sockmap_pass_prog__destroy(skel);
}

static void test_sockmap_same_sock(void)
{
	struct test_sockmap_pass_prog *skel;
	int stream[2], dgram, udp, tcp;
	int i, err, map, zero = 0;

	skel = test_sockmap_pass_prog__open_and_load();
	if (!ASSERT_OK_PTR(skel, "open_and_load"))
		return;

	map = bpf_map__fd(skel->maps.sock_map_rx);

	dgram = xsocket(AF_UNIX, SOCK_DGRAM, 0);
	if (dgram < 0) {
		test_sockmap_pass_prog__destroy(skel);
		return;
	}

	tcp = connected_socket_v4();
	if (!ASSERT_GE(tcp, 0, "connected_socket_v4")) {
		close(dgram);
		test_sockmap_pass_prog__destroy(skel);
		return;
	}

	udp = xsocket(AF_INET, SOCK_DGRAM | SOCK_NONBLOCK, 0);
	if (udp < 0) {
		close(dgram);
		close(tcp);
		test_sockmap_pass_prog__destroy(skel);
		return;
	}

	err = socketpair(AF_UNIX, SOCK_STREAM, 0, stream);
	ASSERT_OK(err, "socketpair(af_unix, sock_stream)");
	if (err)
		goto out;

	for (i = 0; i < 2; i++) {
		err = bpf_map_update_elem(map, &zero, &stream[0], BPF_ANY);
		ASSERT_OK(err, "bpf_map_update_elem(stream)");
	}
	for (i = 0; i < 2; i++) {
		err = bpf_map_update_elem(map, &zero, &dgram, BPF_ANY);
		ASSERT_OK(err, "bpf_map_update_elem(dgram)");
	}
	for (i = 0; i < 2; i++) {
		err = bpf_map_update_elem(map, &zero, &udp, BPF_ANY);
		ASSERT_OK(err, "bpf_map_update_elem(udp)");
	}
	for (i = 0; i < 2; i++) {
		err = bpf_map_update_elem(map, &zero, &tcp, BPF_ANY);
		ASSERT_OK(err, "bpf_map_update_elem(tcp)");
	}

	err = bpf_map_delete_elem(map, &zero);
	ASSERT_OK(err, "bpf_map_delete_elem(entry)");

	close(stream[0]);
	close(stream[1]);
out:
	close(dgram);
	close(tcp);
	close(udp);
	test_sockmap_pass_prog__destroy(skel);
}

void test_sockmap_basic(void)
{
	if (test__start_subtest("sockmap create_update_free"))
		test_sockmap_create_update_free(BPF_MAP_TYPE_SOCKMAP);
	if (test__start_subtest("sockhash create_update_free"))
		test_sockmap_create_update_free(BPF_MAP_TYPE_SOCKHASH);
	if (test__start_subtest("sockmap sk_msg load helpers"))
		test_skmsg_helpers(BPF_MAP_TYPE_SOCKMAP);
	if (test__start_subtest("sockhash sk_msg load helpers"))
		test_skmsg_helpers(BPF_MAP_TYPE_SOCKHASH);
	if (test__start_subtest("sockmap update"))
		test_sockmap_update(BPF_MAP_TYPE_SOCKMAP);
	if (test__start_subtest("sockhash update"))
		test_sockmap_update(BPF_MAP_TYPE_SOCKHASH);
	if (test__start_subtest("sockmap update in unsafe context"))
		test_sockmap_invalid_update();
	if (test__start_subtest("sockmap copy"))
		test_sockmap_copy(BPF_MAP_TYPE_SOCKMAP);
	if (test__start_subtest("sockhash copy"))
		test_sockmap_copy(BPF_MAP_TYPE_SOCKHASH);
	if (test__start_subtest("sockmap skb_verdict attach")) {
		test_sockmap_skb_verdict_attach(BPF_SK_SKB_VERDICT,
						BPF_SK_SKB_STREAM_VERDICT);
		test_sockmap_skb_verdict_attach(BPF_SK_SKB_STREAM_VERDICT,
						BPF_SK_SKB_VERDICT);
	}
	if (test__start_subtest("sockmap skb_verdict attach_with_link"))
		test_sockmap_skb_verdict_attach_with_link();
	if (test__start_subtest("sockmap msg_verdict progs query"))
		test_sockmap_progs_query(BPF_SK_MSG_VERDICT);
	if (test__start_subtest("sockmap stream_parser progs query"))
		test_sockmap_progs_query(BPF_SK_SKB_STREAM_PARSER);
	if (test__start_subtest("sockmap stream_verdict progs query"))
		test_sockmap_progs_query(BPF_SK_SKB_STREAM_VERDICT);
	if (test__start_subtest("sockmap skb_verdict progs query"))
		test_sockmap_progs_query(BPF_SK_SKB_VERDICT);
	if (test__start_subtest("sockmap skb_verdict shutdown"))
		test_sockmap_skb_verdict_shutdown();
	if (test__start_subtest("sockmap skb_verdict fionread"))
		test_sockmap_skb_verdict_fionread(true);
	if (test__start_subtest("sockmap skb_verdict fionread on drop"))
		test_sockmap_skb_verdict_fionread(false);
	if (test__start_subtest("sockmap skb_verdict msg_f_peek"))
		test_sockmap_skb_verdict_peek();
	if (test__start_subtest("sockmap skb_verdict msg_f_peek with link"))
		test_sockmap_skb_verdict_peek_with_link();
	if (test__start_subtest("sockmap unconnected af_unix"))
		test_sockmap_unconnected_unix();
	if (test__start_subtest("sockmap one socket to many map entries"))
		test_sockmap_many_socket();
	if (test__start_subtest("sockmap one socket to many maps"))
		test_sockmap_many_maps();
	if (test__start_subtest("sockmap same socket replace"))
		test_sockmap_same_sock();
	if (test__start_subtest("sockmap sk_msg attach sockmap helpers with link"))
		test_skmsg_helpers_with_link(BPF_MAP_TYPE_SOCKMAP);
	if (test__start_subtest("sockhash sk_msg attach sockhash helpers with link"))
		test_skmsg_helpers_with_link(BPF_MAP_TYPE_SOCKHASH);
}
quot;--encrypt [nom du fichier]" #: g10/g10.c:925 msgid "--sign [filename]" msgstr "--sign [nom du fichier]" #: g10/g10.c:938 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [nom du fichier]" #: g10/g10.c:952 msgid "--clearsign [filename]" msgstr "--clearsign [nom du fichier]" #: g10/g10.c:964 msgid "--decrypt [filename]" msgstr "--decrypt [nom du fichier]" #: g10/g10.c:973 msgid "--edit-key username [commands]" msgstr "--edit-key utilisateur [commandes]" #: g10/g10.c:987 msgid "--delete-secret-key username" msgstr "--delete-secret-key utilisateur" #: g10/g10.c:990 msgid "--delete-key username" msgstr "--delete-key utilisateur" #: g10/encode.c:231 g10/g10.c:1013 g10/sign.c:311 #, c-format msgid "can't open %s: %s\n" msgstr "ne peut ouvrir %s: %s\n" #: g10/g10.c:1024 msgid "-k[v][v][v][c] [userid] [keyring]" msgstr "-k[v][v][v][c] [utilisateur] [porte-cl�s]" #: g10/g10.c:1083 #, c-format msgid "dearmoring failed: %s\n" msgstr "suppression d'armure non r�ussie : %s\n" #: g10/g10.c:1091 #, c-format msgid "enarmoring failed: %s\n" msgstr "construction d'armure non r�ussie : %s \n" #: g10/g10.c:1157 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "algorithme de hachage `%s' invalide\n" #: g10/g10.c:1232 msgid "[filename]" msgstr "[nom du fichier]" #: g10/g10.c:1236 msgid "Go ahead and type your message ...\n" msgstr "Continuez et tapez votre message...\n" #: g10/decrypt.c:59 g10/g10.c:1239 g10/verify.c:66 #, c-format msgid "can't open `%s'\n" msgstr "ne peut ouvrir `%s'\n" #: g10/armor.c:296 #, c-format msgid "armor: %s\n" msgstr "armure : %s\n" #: g10/armor.c:319 msgid "invalid armor header: " msgstr "en-t�te d'armure invalide : " #: g10/armor.c:326 msgid "armor header: " msgstr "en-t�te d'armure : " #: g10/armor.c:337 msgid "invalid clearsig header\n" msgstr "en-t�te de signature claire invalide\n" #: g10/armor.c:389 msgid "nested clear text signatures\n" msgstr "signatures en texte clair imbriqu�es\n" #: g10/armor.c:500 msgid "invalid dash escaped line: " msgstr "ligne de traits d'�chappement invalide : " #: g10/armor.c:512 msgid "unexpected armor:" msgstr "armure inattendue :" #: g10/armor.c:629 #, c-format msgid "invalid radix64 character %02x skipped\n" msgstr "caract�re %02x invalide en base 64 ignor�\n" #: g10/armor.c:672 msgid "premature eof (no CRC)\n" msgstr "fin de fichier pr�matur�e (pas de CRC)\n" #: g10/armor.c:706 msgid "premature eof (in CRC)\n" msgstr "fin de fichier pr�matur�e (dans le CRC)\n" #: g10/armor.c:710 msgid "malformed CRC\n" msgstr "CRC malform�\n" #: g10/armor.c:714 #, c-format msgid "CRC error; %06lx - %06lx\n" msgstr "Erreur de CRC ; %06lx - %06lx\n" #: g10/armor.c:731 msgid "premature eof (in Trailer)\n" msgstr "fin de fichier pr�matur�e (dans la remorque)\n" #: g10/armor.c:735 msgid "error in trailer line\n" msgstr "erreur dans la ligne de remorque\n" #: g10/armor.c:1001 msgid "no valid OpenPGP data found.\n" msgstr "aucune donn�e OpenPGP valide n'a �t� trouv�e.\n" #: g10/armor.c:1005 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "armure invalide : ligne plus longue que %d caract�res\n" #: g10/armor.c:1009 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "caract�re cit�-imprimable (quoted-printable) dans l'armure provenant\n" "certainement d'un agent de transfert de messages bogu�\n" #: g10/pkclist.c:137 #, c-format msgid "" "No trust value assigned to %lu:\n" "%4u%c/%08lX %s \"" msgstr "" "Pas de confiance d�finie pour %lu :\n" "%4u%c/%08lX %s \"" #: g10/pkclist.c:147 msgid "" "Please decide how far you trust this user to correctly\n" "verify other users' keys (by looking at passports,\n" "checking fingerprints from different sources...)?\n" "\n" " 1 = Don't know\n" " 2 = I do NOT trust\n" " 3 = I trust marginally\n" " 4 = I trust fully\n" " s = please show me more information\n" msgstr "" "� quel point avez-vous confiance en cet utilisateur pour v�rifier " "correctement\n" "les cl�s des autres utilisateurs (vous pouvez v�rifier son passeport, " "v�rifier\n" "les empreintes de diverses sources...) ?\n" "\n" " 1 = je ne sais pas\n" " 2 = je ne lui fais pas confiance\n" " 3 = je le crois marginalement\n" " 4 = je le crois totalement\n" " s = montrez-moi plus d'informations\n" #: g10/pkclist.c:156 msgid " m = back to the main menu\n" msgstr " m = retour au menu principal\n" #: g10/pkclist.c:158 msgid " q = quit\n" msgstr " q = quitter\n" #. a string with valid answers #: g10/pkclist.c:163 msgid "sSmMqQ" msgstr "sSmMqQ" #: g10/pkclist.c:167 msgid "Your decision? " msgstr "Votre d�cision ? " #: g10/pkclist.c:187 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Certificats conduisant vers une cl� � confiance ultime :\n" #: g10/pkclist.c:254 msgid "" "Could not find a valid trust path to the key. Let's see whether we\n" "can assign some missing owner trust values.\n" "\n" msgstr "" "N'a pas pu trouver un chemin de confiance valide jusqu'� la cl�. Voyons si\n" "nous ne pouvons pas assigner quelques indices de confiance manquants.\n" #: g10/pkclist.c:260 msgid "" "No path leading to one of our keys found.\n" "\n" msgstr "" "Aucun chemin menant vers une de nos cl�s n'a �t� trouv�.\n" "\n" #: g10/pkclist.c:262 msgid "" "No certificates with undefined trust found.\n" "\n" msgstr "" "Aucun certificat � confiance ind�finie n'a �t� trouv�.\n" "\n" #: g10/pkclist.c:264 msgid "" "No trust values changed.\n" "\n" msgstr "" "Pas d'indice de confiance chang�.\n" "\n" #: g10/pkclist.c:281 #, c-format msgid "key %08lX: key has been revoked!\n" msgstr "cl� %08lX : la cl� a �t� r�voqu�e !\n" #: g10/pkclist.c:287 g10/pkclist.c:297 g10/pkclist.c:403 msgid "Use this key anyway? " msgstr "Utiliser cette cl� quand-m�me ? " #: g10/pkclist.c:291 #, c-format msgid "key %08lX: subkey has been revoked!\n" msgstr "cl� %08lX : la sous-cl� a �t� r�voqu�e !\n" #: g10/pkclist.c:321 #, c-format msgid "%08lX: key has expired\n" msgstr "%08lX : la cl� a expir�\n" #: g10/pkclist.c:327 #, c-format msgid "%08lX: no info to calculate a trust probability\n" msgstr "%08lX : pas d'information pour calculer une probabilit� de confiance\n" #: g10/pkclist.c:341 #, c-format msgid "%08lX: We do NOT trust this key\n" msgstr "%08lX : Nous ne faisons PAS confiance � cette cl�\n" #: g10/pkclist.c:347 #, c-format msgid "" "%08lX: It is not sure that this key really belongs to the owner\n" "but it is accepted anyway\n" msgstr "" "%08lX : Il n'est pas s�r que cette cl� appartient vraiment � son " "propri�taire\n" "mais elle est quand m�me accept�e\n" #: g10/pkclist.c:353 msgid "This key probably belongs to the owner\n" msgstr "Cette cl� appartient probablement � son propri�taire\n" #: g10/pkclist.c:358 msgid "This key belongs to us\n" msgstr "Cette cl� nous appartient\n" #: g10/pkclist.c:398 msgid "" "It is NOT certain that the key belongs to its owner.\n" "If you *really* know what you are doing, you may answer\n" "the next question with yes\n" "\n" msgstr "" "Il n'est pas certain que la cl� appartient � sos propri�taire.\n" "Si vous savez *vraiment* ce que vous faites, vous pouvez r�pondre\n" "oui � la prochaine question\n" "\n" #: g10/pkclist.c:411 g10/pkclist.c:433 msgid "WARNING: Using untrusted key!\n" msgstr "ATTENTION : Utilisation d'une cl� sans confiance !\n" #: g10/pkclist.c:454 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "ATTENTION : Cette cl� � �t� r�voqu�e par son propri�taire !\n" #: g10/pkclist.c:455 msgid " This could mean that the signature is forgery.\n" msgstr " Cela pourrait signifier que la signature est fausse.\n" #: g10/pkclist.c:459 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "ATTENTION : Cette sous-cl� � �t� r�voqu�e par son propri�taire !\n" #: g10/pkclist.c:480 msgid "Note: This key has expired!\n" msgstr "Note : Cette cl� a expir� !\n" #: g10/pkclist.c:487 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "" "ATTENTION : Cette cl� n'est pas certifi�e avec une signature de confiance !\n" #: g10/pkclist.c:489 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr " Rien ne dit que la signature appartient � son propri�taire.\n" #: g10/pkclist.c:505 msgid "WARNING: We do NOT trust this key!\n" msgstr "ATTENTION : Nous ne faisons PAS confiance � cette cl� !\n" #: g10/pkclist.c:506 msgid " The signature is probably a FORGERY.\n" msgstr " La signature est certainement FAUSSE.\n" #: g10/pkclist.c:513 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "ATTENTION : Les signatures de cette cl� n'ont pas une confiance suffisante " "!\n" #: g10/pkclist.c:516 msgid " It is not certain that the signature belongs to the owner.\n" msgstr "" " Il n'est pas s�r que la signature appartient � son propri�taire.\n" #: g10/pkclist.c:569 g10/pkclist.c:582 g10/pkclist.c:645 g10/pkclist.c:673 #, c-format msgid "%s: skipped: %s\n" msgstr "%s : ignor� : %s\n" #: g10/pkclist.c:591 msgid "" "You did not specify a user ID. (you may use \"-r\")\n" "\n" msgstr "" "Vous n'avez pas sp�cifi� de nom d'utilisateur. (vous pouvez utiliser " "\"-r\")\n" "\n" #: g10/pkclist.c:596 msgid "Enter the user ID: " msgstr "Entrez le nom d'utilisateur : " #: g10/pkclist.c:607 msgid "No such user ID.\n" msgstr "Pas de tel utilisateur.\n" #: g10/pkclist.c:653 #, c-format msgid "%s: error checking key: %s\n" msgstr "%s : erreur pendant la v�rification de la cl� : %s\n" #: g10/pkclist.c:679 msgid "no valid addressees\n" msgstr "pas de destinataire valide\n" # g10/keygen.c:123 ??? #: g10/keygen.c:122 msgid "writing self signature\n" msgstr "�criture de l'auto-signature\n" # g10/keygen.c:161 ??? #: g10/keygen.c:160 msgid "writing key binding signature\n" msgstr "�criture de la signature de liaison\n" #: g10/keygen.c:386 msgid "Please select what kind of key you want:\n" msgstr "S�lectionnez le type de cl� d�sir� :\n" #: g10/keygen.c:388 #, c-format msgid " (%d) DSA and ElGamal (default)\n" msgstr " (%d) DSA et ElGamal (d�faut)\n" #: g10/keygen.c:389 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (signature seule)\n" #: g10/keygen.c:391 #, c-format msgid " (%d) ElGamal (encrypt only)\n" msgstr " (%d) ElGamal (chiffrement seul)\n" #: g10/keygen.c:392 #, c-format msgid " (%d) ElGamal (sign and encrypt)\n" msgstr " (%d) ElGamal (signature et chiffrement)\n" #: g10/keygen.c:394 #, c-format msgid " (%d) ElGamal in a v3 packet\n" msgstr " (%d) ElGamal dans un paquet v3\n" #: g10/keygen.c:399 msgid "Your selection? " msgstr "Votre choix ? " #: g10/keygen.c:409 msgid "Do you really want to create a sign and encrypt key? " msgstr "Voulez-vous vraiment cr�er une cl� de signature et de chiffrement ? " #: g10/keygen.c:430 msgid "Invalid selection.\n" msgstr "Choix invalide.\n" #: g10/keygen.c:442 #, c-format msgid "" "About to generate a new %s keypair.\n" " minimum keysize is 768 bits\n" " default keysize is 1024 bits\n" " highest suggested keysize is 2048 bits\n" msgstr "" "Pr�paration � la g�n�ration d'une nouvelle paire de cl�s %s.\n" " la taille minimale est 768 bits\n" " la taille par d�faut est 1024 bits\n" " la taille maximale conseill�e est 2048 bits\n" #: g10/keygen.c:449 msgid "What keysize do you want? (1024) " msgstr "Quelle taille de cl� d�sirez-vous ? (1024) " #: g10/keygen.c:454 msgid "DSA only allows keysizes from 512 to 1024\n" msgstr "DSA permet seulement des tailles comprises entre 512 et 1024\n" #: g10/keygen.c:456 msgid "keysize too small; 768 is smallest value allowed.\n" msgstr "taille trop petite ; 768 est la plus petite valeur permise.\n" #. It is ridiculous and an annoyance to use larger key sizes! #. * GnuPG can handle much larger sizes; but it takes an eternity #. * to create such a key (but less than the time the Sirius #. * Computer Corporation needs to process one of the usual #. * complaints) and {de,en}cryption although needs some time. #. * So, before you complain about this limitation, I suggest that #. * you start a discussion with Marvin about this theme and then #. * do whatever you want. #: g10/keygen.c:466 #, c-format msgid "keysize too large; %d is largest value allowed.\n" msgstr "taille trop importante ; %d est la plus grande valeur permise.\n" #: g10/keygen.c:471 msgid "" "Keysizes larger than 2048 are not suggested because\n" "computations take REALLY long!\n" msgstr "" "Les tailles sup�rieures � 2048 ne sont pas conseill�es car\n" "les calculs prennent VRAIMENT beaucoup de temps !\n" #: g10/keygen.c:474 msgid "Are you sure that you want this keysize? " msgstr "Etes-vous s�r de vouloir cette taille ? " #: g10/keygen.c:475 msgid "" "Okay, but keep in mind that your monitor and keyboard radiation is also very " "vulnerable to attacks!\n" msgstr "" "D'accord, mais n'oubliez pas que les radiations de votre �cran et de votre\n" "clavier sont aussi tr�s vuln�rables aux attaques !\n" #: g10/keygen.c:483 msgid "Do you really need such a large keysize? " msgstr "Avez-vous r�ellement besoin d'une taille aussi grande ? " #: g10/keygen.c:489 #, c-format msgid "Requested keysize is %u bits\n" msgstr "La taille demand�e est %u bits\n" #: g10/keygen.c:492 g10/keygen.c:496 #, c-format msgid "rounded up to %u bits\n" msgstr "arrondie � %u bits\n" #: g10/keygen.c:509 msgid "" "Please specify how long the key should be valid.\n" " 0 = key does not expire\n" " <n> = key expires in n days\n" " <n>w = key expires in n weeks\n" " <n>m = key expires in n months\n" " <n>y = key expires in n years\n" msgstr "" "Sp�cifiez combien de temps cette cl� devrait �tre valide.\n" " 0 = la cl� n'expire pas\n" " <n> = la cl� expire dans n jours\n" " <n>w = la cl� expire dans n semaines\n" " <n>m = la cl� expire dans n mois\n" " <n>y = la cl� expire dans n ans\n" #: g10/keygen.c:524 msgid "Key is valid for? (0) " msgstr "La cl� est valide pour ? (0) " #: g10/keygen.c:535 msgid "invalid value\n" msgstr "valeur invalide\n" #: g10/keygen.c:540 msgid "Key does not expire at all\n" msgstr "La cl� n'expire pas du tout\n" #. print the date when the key expires #: g10/keygen.c:546 #, c-format msgid "Key expires at %s\n" msgstr "La cl� expire le %s\n" #: g10/keygen.c:552 msgid "Is this correct (y/n)? " msgstr "Est-ce correct (o/n) ? " #: g10/keygen.c:595 msgid "" "\n" "You need a User-ID to identify your key; the software constructs the user " "id\n" "from Real Name, Comment and Email Address in this form:\n" " \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n" "\n" msgstr "" "\n" "Vous avez besoin d'un nom d'utilisateur pour identifier votre cl� ; le\n" "programme le construit � partir du nom r�el, d'un commentaire et d'une\n" "adresse e-mail de cette mani�re:\n" " � Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de> �\n" "\n" #: g10/keygen.c:606 msgid "Real name: " msgstr "Nom r�el : " #: g10/keygen.c:610 msgid "Invalid character in name\n" msgstr "Caract�re invalide dans le nom\n" #: g10/keygen.c:612 msgid "Name may not start with a digit\n" msgstr "Le nom ne doit pas commencer par un chiffre\n" #: g10/keygen.c:614 msgid "Name must be at least 5 characters long\n" msgstr "Le nom doit faire au moins 5 caract�res de long\n" #: g10/keygen.c:622 msgid "Email address: " msgstr "Adresse e-mail : " #: g10/keygen.c:633 msgid "Not a valid email address\n" msgstr "Ce n'est pas une adresse e-mail valide\n" #: g10/keygen.c:641 msgid "Comment: " msgstr "Commentaire : " #: g10/keygen.c:647 msgid "Invalid character in comment\n" msgstr "Caract�re invalide dans le commentaire\n" #: g10/keygen.c:669 #, c-format msgid "You are using the `%s' character set.\n" msgstr "Vous utilisez le jeu de caract�res '%s'.\n" #: g10/keygen.c:675 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" "Vous avez s�lectionn� ce nom d'utilisateur :\n" " \"%s\"\n" "\n" #: g10/keygen.c:678 msgid "NnCcEeOoQq" msgstr "NnCcEeOoQq" #: g10/keygen.c:688 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "Changer le (N)om, le (C)ommentaire, l'(E)-mail ou (O)K/(Q)uitter? " #: g10/keygen.c:740 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" "Vous avez besoin d'un mot de passe pour prot�ger votre cl� secr�te.\n" "\n" #: g10/keyedit.c:433 g10/keygen.c:748 msgid "passphrase not correctly repeated; try again.\n" msgstr "le mot de passe n'a pas �t� r�p�t� � l'identique ; recommencez.\n" #: g10/keygen.c:754 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "I will do it anyway. You can change your passphrase at any time,\n" "using this program with the option \"--edit-key\".\n" "\n" msgstr "" "Vous ne voulez pas de mot de passe - c'est s�rement une *mauvaise* id�e !\n" "Je l'accepte quand-m�me. Vous pouvez changer votre mot de passe quand vous\n" "le d�sirez, en utilisant ce programme avec l'option � --edit-key �.\n" "\n" #: g10/keygen.c:775 msgid "" "We need to generate a lot of random bytes. It is a good idea to perform\n" "some other action (type on the keyboard, move the mouse, utilize the\n" "disks) during the prime generation; this gives the random number\n" "generator a better chance to gain enough entropy.\n" msgstr "" "Un grand nombre d'octets al�atoires doit �tre g�n�r�. Vous devriez faire\n" "autre-chose (taper au clavier, d�placer la souris, utiliser les disques)\n" "pendant la g�n�ration de nombres premiers ; cela donne au g�n�rateur de\n" "nombres al�atoires une meilleure chance d'avoir assez d'entropie.\n" #: g10/keygen.c:845 msgid "Key generation can only be used in interactive mode\n" msgstr "La g�n�ration de cl� ne peut �tre faite qu'en mode interactif\n" #: g10/keygen.c:853 msgid "DSA keypair will have 1024 bits.\n" msgstr "La paire de cl�s DSA fera 1024 bits.\n" #: g10/keygen.c:859 msgid "Key generation cancelled.\n" msgstr "La g�n�ration a �t� annul�e.\n" #: g10/keygen.c:869 #, c-format msgid "writing public certificate to `%s'\n" msgstr "�criture d'un certificat public � `%s'\n" #: g10/keygen.c:870 #, c-format msgid "writing secret certificate to `%s'\n" msgstr "�criture d'un certificat secret � `%s'\n" #: g10/keygen.c:947 msgid "public and secret key created and signed.\n" msgstr "les cl�s publique et secr�te ont �t� cr��es et sign�es.\n" #: g10/keygen.c:949 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a secondary key for this purpose.\n" msgstr "" "Notez que cette cl� ne peut �tre utilis�e pour chiffrer. Vous pouvez\n" "utiliser la commande � --edit-key � pour g�n�rer une cl� secondaire �\n" "cette fin.\n" #: g10/keygen.c:963 g10/keygen.c:1062 #, c-format msgid "Key generation failed: %s\n" msgstr "La g�n�ration de cl� a �chou� : %s\n" # on s'amuse comme on peut... #: g10/keygen.c:1007 g10/sig-check.c:300 g10/sign.c:52 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "" "la cl� a �t� cr��e %lu seconde dans le futur (discontinuit� temporelle ou\n" "probl�me d'horloge)\n" #: g10/keygen.c:1009 g10/sig-check.c:302 g10/sign.c:54 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" msgstr "" "la cl� a �t� cr��e %lu secondes dans le futur (discontinuit� temporelle ou\n" "probl�me d'horloge\n" #: g10/keygen.c:1040 msgid "Really create? " msgstr "Cr�er vraiment ? " #: g10/encode.c:91 g10/openfile.c:88 g10/openfile.c:176 g10/tdbio.c:467 #: g10/tdbio.c:528 #, c-format msgid "%s: can't open: %s\n" msgstr "%s : ne peut ouvrir : %s\n" #: g10/encode.c:113 #, c-format msgid "error creating passphrase: %s\n" msgstr "erreur pendant la cr�ation du mot de passe : %s\n" #: g10/encode.c:167 g10/encode.c:287 #, c-format msgid "%s: WARNING: empty file\n" msgstr "%s : ATTENTION : fichier vide\n" #: g10/encode.c:237 #, c-format msgid "reading from `%s'\n" msgstr "lecture de `%s'\n" #: g10/encode.c:417 #, c-format msgid "%s/%s encrypted for: %s\n" msgstr "%s/%s chiffr� pour : %s\n" #: g10/export.c:147 #, c-format msgid "%s: user not found: %s\n" msgstr "%s : utilisateur non trouv� : %s\n" #: g10/export.c:156 #, c-format msgid "certificate read problem: %s\n" msgstr "probl�me lors de lecture du certificat : %s\n" #: g10/export.c:165 #, c-format msgid "key %08lX: not a rfc2440 key - skipped\n" msgstr "cl� %08lX : ce n'est pas une cl� rfc2440 - ignor�e\n" #: g10/export.c:203 msgid "WARNING: nothing exported\n" msgstr "ATTENTION : rien n'a �t� export�\n" #: g10/getkey.c:206 msgid "too many entries in pk cache - disabled\n" msgstr "trop d'entr�es dans le cache pk - d�sactiv�\n" #: g10/getkey.c:345 msgid "too many entries in unk cache - disabled\n" msgstr "trop d'entr�es dans le cache unk - d�sactiv�\n" #: g10/getkey.c:1535 g10/getkey.c:1591 #, c-format msgid "using secondary key %08lX instead of primary key %08lX\n" msgstr "" "utilisation de la cl� secondaire %08lX � la place de la cl�\n" "principale %08lX\n" #: g10/import.c:116 #, c-format msgid "can't open `%s': %s\n" msgstr "impossible d'ouvrir `%s': %s\n" #: g10/import.c:160 #, c-format msgid "skipping block of type %d\n" msgstr "ne prend pas en compte le bloc de type %d\n" #: g10/import.c:167 g10/trustdb.c:2560 g10/trustdb.c:2668 #, c-format msgid "%lu keys so far processed\n" msgstr "%lu cl�s trait�es jusqu'ici\n" #: g10/import.c:172 #, c-format msgid "error reading `%s': %s\n" msgstr "erreur pendant la lecture de `%s' : %s\n" #: g10/import.c:175 #, c-format msgid "Total number processed: %lu\n" msgstr " Quantit� totale trait�e : %lu\n" #: g10/import.c:177 #, c-format msgid " w/o user IDs: %lu\n" msgstr " sans nom d'utilisateur : %lu\n" #: g10/import.c:179 #, c-format msgid " imported: %lu" msgstr " import�e : %lu" #: g10/import.c:185 #, c-format msgid " unchanged: %lu\n" msgstr " inchang�e : %lu\n" #: g10/import.c:187 #, c-format msgid " new user IDs: %lu\n" msgstr " nouveaux noms d'utilisateurs : %lu\n" #: g10/import.c:189 #, c-format msgid " new subkeys: %lu\n" msgstr " nouvelles sous-cl�s : %lu\n" #: g10/import.c:191 #, c-format msgid " new signatures: %lu\n" msgstr " nouvelles signatures : %lu\n" #: g10/import.c:193 #, c-format msgid " new key revocations: %lu\n" msgstr " nouvelles r�vocations de cl�s : %lu\n" #: g10/import.c:195 #, c-format msgid " secret keys read: %lu\n" msgstr " cl�s secr�tes lues : %lu\n" #: g10/import.c:197 #, c-format msgid " secret keys imported: %lu\n" msgstr " cl�s secr�tes import�es : %lu\n" #: g10/import.c:199 #, c-format msgid " secret keys unchanged: %lu\n" msgstr " cl�s secr�tes inchang�es : %lu\n" #: g10/import.c:342 g10/import.c:529 #, c-format msgid "key %08lX: no user id\n" msgstr "cl� %08lX : pas de nom d'utilisateur\n" #: g10/import.c:353 #, c-format msgid "key %08lX: no valid user ids\n" msgstr "cl� %08lX : pas de nom d'utilisateur valide\n" #: g10/import.c:355 msgid "this may be caused by a missing self-signature\n" msgstr "cela peut provenir d'une auto-signature manquante\n" #: g10/import.c:366 g10/import.c:596 #, c-format msgid "key %08lX: public key not found: %s\n" msgstr "cl� %08lX : cl� publique pas trouv�e: %s\n" #: g10/import.c:372 msgid "no default public keyring\n" msgstr "pas de porte-cl�s public par d�faut\n" #: g10/import.c:376 g10/openfile.c:117 g10/sign.c:215 g10/sign.c:501 #, c-format msgid "writing to `%s'\n" msgstr "�criture de `%s'\n" #: g10/import.c:379 g10/import.c:435 msgid "can't lock keyring `%': %s\n" msgstr "ne peut verrouiller le porte-cl�s `%' : %s\n" #: g10/import.c:382 msgid "error writing keyring `%': %s\n" msgstr "erreur durant la lecture du porte-cl�s `%' : %s\n" #: g10/import.c:387 #, c-format msgid "key %08lX: public key imported\n" msgstr "cl� %08lX : cl� publique import�e\n" #: g10/import.c:399 #, c-format msgid "key %08lX: doesn't match our copy\n" msgstr "cl� %08lX : ne ressemble pas � notre copie\n" #: g10/import.c:411 g10/import.c:604 #, c-format msgid "key %08lX: can't locate original keyblock: %s\n" msgstr "cl� %08lX : ne peut trouver le bloc de cl�s original : %s\n" #: g10/import.c:417 g10/import.c:610 #, c-format msgid "key %08lX: can't read original keyblock: %s\n" msgstr "cl� %08lX : ne peut lire le bloc de cl�s original : %s\n" #: g10/import.c:438 g10/import.c:547 g10/import.c:648 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "erreur durant l'�criture du porte-cl�s `%s' : %s\n" #: g10/import.c:444 #, c-format msgid "key %08lX: 1 new user-id\n" msgstr "cl� %08lX : un nouvel utilisateur\n" #: g10/import.c:447 #, c-format msgid "key %08lX: %d new user-ids\n" msgstr "cl� %08lX : %d nouveaux utilisateurs\n" #: g10/import.c:450 #, c-format msgid "key %08lX: 1 new signature\n" msgstr "cl� %08lX : une nouvelle signature\n" #: g10/import.c:453 #, c-format msgid "key %08lX: %d new signatures\n" msgstr "cl� %08lX : %d nouvelles signatures\n" #: g10/import.c:456 #, c-format msgid "key %08lX: 1 new subkey\n" msgstr "cl� %08lX : une nouvelle sous-cl�\n" #: g10/import.c:459 #, c-format msgid "key %08lX: %d new subkeys\n" msgstr "cl� %08lX : %d nouvelles sous-cl�s\n" #: g10/import.c:469 #, c-format msgid "key %08lX: not changed\n" msgstr "cl� %08lX : n'a pas chang�\n" #: g10/import.c:544 g10/import.c:645 #, c-format msgid "can't lock keyring `%s': %s\n" msgstr "ne peut verrouiller le porte-cl�s `%s' : %s\n" #: g10/import.c:552 #, c-format msgid "key %08lX: secret key imported\n" msgstr "cl� %08lX : cl� secr�te import�e\n" #. we can't merge secret keys #: g10/import.c:556 #, c-format msgid "key %08lX: already in secret keyring\n" msgstr "cl� %08lX : d�j� dans le porte-cl�s secret\n" #: g10/import.c:561 #, c-format msgid "key %08lX: secret key not found: %s\n" msgstr "cl� %08lX : cl� secr�te pas trouv�e: %s\n" #: g10/import.c:590 #, c-format msgid "key %08lX: no public key - can't apply revocation certificate\n" msgstr "" "cl� %08lX : pas de cl� publique - ne peut appliquer le certificat de\n" "r�vocation\n" #: g10/import.c:621 #, c-format msgid "key %08lX: invalid revocation certificate: %s - rejected\n" msgstr "cl� %08lX : certificat de r�vocation invalide : %s - rejet�\n" #: g10/import.c:653 #, c-format msgid "key %08lX: revocation certificate imported\n" msgstr "cl� %08lX : certificat de r�vocation import�\n" #: g10/import.c:686 #, c-format msgid "key %08lX: no user-id for signature\n" msgstr "cl� %08lX : pas d'utilisateur pour la signature\n" #: g10/import.c:693 g10/import.c:717 #, c-format msgid "key %08lX: unsupported public key algorithm\n" msgstr "cl� %08lX : algorithme de cl� publique non support�\n" #: g10/import.c:694 #, c-format msgid "key %08lX: invalid self-signature\n" msgstr "cl� %08lX : auto-signature invalide\n" #: g10/import.c:709 #, c-format msgid "key %08lX: no subkey for key binding\n" msgstr "cl� %08lX : pas de sous-cl� pour relier la cl�\n" #: g10/import.c:718 #, c-format msgid "key %08lX: invalid subkey binding\n" msgstr "cl� %08lX : liaison avec la sous-cl� invalide\n" #: g10/import.c:750 #, c-format msgid "key %08lX: skipped userid '" msgstr "cl� %08lX : utilisateur non pris en compte '" #: g10/import.c:773 #, c-format msgid "key %08lX: skipped subkey\n" msgstr "cl� %08lX : sous-cl� non prise en compte\n" #. here we violate the rfc a bit by still allowing #. * to import non-exportable signature when we have the #. * the secret key used to create this signature - it #. * seems that this makes sense #: g10/import.c:798 #, c-format msgid "key %08lX: non exportable signature (class %02x) - skipped\n" msgstr "cl� %08lX : signature non exportable (classe %02x) - ignor�e\n" #: g10/import.c:807 #, c-format msgid "key %08lX: revocation certificate at wrong place - skipped\n" msgstr "cl� %08lX : certificat de r�vocation au mauvais endroit - ignor�e\n" #: g10/import.c:815 #, c-format msgid "key %08lX: invalid revocation certificate: %s - skipped\n" msgstr "cl� %08lX : certificat de r�vocation invalide : %s - ignor�e\n" #: g10/import.c:915 #, c-format msgid "key %08lX: duplicated user ID detected - merged\n" msgstr "cl� %08lX: nom d'utilisateur doublon fusionn�\n" #: g10/import.c:966 #, c-format msgid "key %08lX: revocation certificate added\n" msgstr "cl� %08lX : certificat de r�vocation ajout�\n" #: g10/import.c:1079 g10/import.c:1134 #, c-format msgid "key %08lX: our copy has no self-signature\n" msgstr "cl� %08lX : notre copie n'a pas d'auto-signature\n" #: g10/keyedit.c:91 #, c-format msgid "%s: user not found\n" msgstr "%s : utilisateur non trouv�\n" #: g10/keyedit.c:177 msgid "[revocation]" msgstr "[r�vocation]" #: g10/keyedit.c:178 msgid "[self-signature]" msgstr "[auto-signature]" #: g10/keyedit.c:196 msgid "1 bad signature\n" msgstr "une mauvaise signature\n" #: g10/keyedit.c:198 #, c-format msgid "%d bad signatures\n" msgstr "%d mauvaises signatures\n" #: g10/keyedit.c:200 msgid "1 signature not checked due to a missing key\n" msgstr "une signature non v�rifi�e � cause d'une cl� manquante\n" #: g10/keyedit.c:202 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d signatures non v�rifi�es � cause de cl�s manquantes\n" #: g10/keyedit.c:204 msgid "1 signature not checked due to an error\n" msgstr "une signature non v�rifi�e � cause d'une erreur\n" #: g10/keyedit.c:206 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d signatures non v�rifi�es � cause d'erreurs\n" #: g10/keyedit.c:208 msgid "1 user id without valid self-signature detected\n" msgstr "un nom d'utilisateur sans auto-signature valide d�tect�\n" #: g10/keyedit.c:210 #, c-format msgid "%d user ids without valid self-signatures detected\n" msgstr "%d nom d'utilisateurs sans auto-signature valide d�tect�\n" #. Fixme: see whether there is a revocation in which #. * case we should allow to sign it again. #: g10/keyedit.c:290 #, c-format msgid "Already signed by key %08lX\n" msgstr "D�j� sign� par la cl� %08lX\n" #: g10/keyedit.c:298 #, c-format msgid "Nothing to sign with key %08lX\n" msgstr "Rien � signer avec la cl� %08lX\n" #: g10/keyedit.c:307 msgid "" "Are you really sure that you want to sign this key\n" "with your key: \"" msgstr "" "Etes-vous vraiment s�r(e) que vous voulez signer cette cl�\n" "avec la v�tre : \"" #: g10/keyedit.c:316 msgid "" "The signature will be marked as non-exportable.\n" "\n" msgstr "" "La signature sera marqu�e comme non-exportable.\n" "\n" #: g10/keyedit.c:321 msgid "Really sign? " msgstr "Signer r�ellement ? " #: g10/keyedit.c:347 g10/keyedit.c:1688 g10/keyedit.c:1737 g10/sign.c:75 #, c-format msgid "signing failed: %s\n" msgstr "la signature a �chou� : %s\n" #: g10/keyedit.c:400 msgid "This key is not protected.\n" msgstr "Cette cl� n'est pas prot�g�e.\n" #: g10/keyedit.c:403 msgid "Key is protected.\n" msgstr "La cl� est prot�g�e.\n" #: g10/keyedit.c:420 #, c-format msgid "Can't edit this key: %s\n" msgstr "Ne peut �diter cette cl� : %s\n" #: g10/keyedit.c:425 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "Entrez le nouveau mot de passe pour cette cl� secr�te.\n" #: g10/keyedit.c:437 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" "Vous ne voulez pas de mot de passe - cela est certainement une\n" "*mauvaise* id�e\n" "\n" #: g10/keyedit.c:440 msgid "Do you really want to do this? " msgstr "Voulez-vous vraiment faire cela? " #: g10/keyedit.c:501 msgid "moving a key signature to the correct place\n" msgstr "replacer la signature d'une cl� � l'endroit correct\n" #: g10/keyedit.c:537 msgid "quit" msgstr "quitter" #: g10/keyedit.c:537 msgid "quit this menu" msgstr "quitter ce menu" #: g10/keyedit.c:538 msgid "q" msgstr "q" #: g10/keyedit.c:539 msgid "save" msgstr "enregistrer" #: g10/keyedit.c:539 msgid "save and quit" msgstr "enregistrer et quitter" # FIXMOI : si je mets aide �a va demander de taper "aide"... #: g10/keyedit.c:540 msgid "help" msgstr "help" #: g10/keyedit.c:540 msgid "show this help" msgstr "afficher cette aide" # g10/keyedit.c:556 ??? #: g10/keyedit.c:542 msgid "fpr" msgstr "fpr" #: g10/keyedit.c:542 msgid "show fingerprint" msgstr "afficher l'empreinte" #: g10/keyedit.c:543 msgid "list" msgstr "lister" #: g10/keyedit.c:543 msgid "list key and user ids" msgstr "lister la cl� et les noms d'utilisateurs" #: g10/keyedit.c:544 msgid "l" msgstr "l" #: g10/keyedit.c:545 msgid "uid" msgstr "uid" #: g10/keyedit.c:545 msgid "select user id N" msgstr "s�lectionner le nom d'utilisateur N" #: g10/keyedit.c:546 msgid "key" msgstr "cl�" #: g10/keyedit.c:546 msgid "select secondary key N" msgstr "s�lectionner la cl� secondaire N" #: g10/keyedit.c:547 msgid "check" msgstr "v�rifier" #: g10/keyedit.c:547 msgid "list signatures" msgstr "lister les signatures" #: g10/keyedit.c:548 msgid "c" msgstr "c" #: g10/keyedit.c:549 msgid "sign" msgstr "signer" #: g10/keyedit.c:549 msgid "sign the key" msgstr "signer la cl�" #: g10/keyedit.c:550 msgid "s" msgstr "s" #: g10/keyedit.c:551 msgid "lsign" msgstr "lsigner" #: g10/keyedit.c:551 msgid "sign the key locally" msgstr "signer la cl� localement" #: g10/keyedit.c:552 msgid "debug" msgstr "d�boguer" #: g10/keyedit.c:553 msgid "adduid" msgstr "aj.ut" #: g10/keyedit.c:553 msgid "add a user id" msgstr "ajouter un utilisateur" #: g10/keyedit.c:554 msgid "deluid" msgstr "suppr.ut" #: g10/keyedit.c:554 msgid "delete user id" msgstr "enlever un utilisateur" #: g10/keyedit.c:555 msgid "addkey" msgstr "aj.cl�" #: g10/keyedit.c:555 msgid "add a secondary key" msgstr "ajouter une cl� secondaire" #: g10/keyedit.c:556 msgid "delkey" msgstr "suppr.cl�" #: g10/keyedit.c:556 msgid "delete a secondary key" msgstr "enlever une cl� secondaire" #: g10/keyedit.c:557 msgid "expire" msgstr "expire" #: g10/keyedit.c:557 msgid "change the expire date" msgstr "changer la date d'expiration" #: g10/keyedit.c:558 msgid "toggle" msgstr "changer" #: g10/keyedit.c:558 msgid "toggle between secret and public key listing" msgstr "passer de la liste des cl�s secr�tes aux cl�s priv�es et inversement" #: g10/keyedit.c:560 msgid "t" msgstr "t" #: g10/keyedit.c:561 msgid "pref" msgstr "pr�f" #: g10/keyedit.c:561 msgid "list preferences" msgstr "lister les pr�f�rences" #: g10/keyedit.c:562 msgid "passwd" msgstr "mot.pas" #: g10/keyedit.c:562 msgid "change the passphrase" msgstr "changer le mot de passe" #: g10/keyedit.c:563 msgid "trust" msgstr "confi." #: g10/keyedit.c:563 msgid "change the ownertrust" msgstr "changer la confiance" #: g10/keyedit.c:564 msgid "revsig" msgstr "revsig" # #: g10/keyedit.c:564 msgid "revoke signatures" msgstr "r�voquer les signatures" #: g10/keyedit.c:565 msgid "revkey" msgstr "revcl�" #: g10/keyedit.c:565 msgid "revoke a secondary key" msgstr "r�voquer une cl� secondaire" #: g10/keyedit.c:584 msgid "can't do that in batchmode\n" msgstr "impossible de faire cela en mode automatique\n" #. check that they match #. FIXME: check that they both match #: g10/keyedit.c:613 msgid "Secret key is available.\n" msgstr "La cl� secr�te est disponible.\n" #: g10/keyedit.c:642 msgid "Command> " msgstr "Commande> " #: g10/keyedit.c:669 msgid "Need the secret key to do this.\n" msgstr "Il faut la cl� secr�te pour faire cela.\n" #: g10/keyedit.c:691 msgid "Save changes? " msgstr "Enregistrer les changements? " #: g10/keyedit.c:694 msgid "Quit without saving? " msgstr "Quitter sans enregistrer? " #: g10/keyedit.c:704 #, c-format msgid "update failed: %s\n" msgstr "la mise � jour a �chou� : %s\n" #: g10/keyedit.c:711 #, c-format msgid "update secret failed: %s\n" msgstr "la mise � jour de la cl� secr�te a �chou� : %s\n" #: g10/keyedit.c:718 msgid "Key not changed so no update needed.\n" msgstr "La cl� n'a pas chang� donc la mise � jour est inutile.\n" #: g10/keyedit.c:721 g10/keyedit.c:780 #, c-format msgid "update of trustdb failed: %s\n" msgstr "la mise � jour de la base de confiance a �chou� : %s\n" #: g10/keyedit.c:754 msgid "Really sign all user ids? " msgstr "Signer vraiment tous les utilisateurs ? " #: g10/keyedit.c:755 msgid "Hint: Select the user ids to sign\n" msgstr "Aide : S�lectionner les utilisateurs � signer\n" #: g10/keyedit.c:791 msgid "You must select at least one user id.\n" msgstr "Vous devez s�lectionner au moins un utilisateur.\n" #: g10/keyedit.c:793 msgid "You can't delete the last user id!\n" msgstr "Vous ne pouvez pas supprimer le dernier utilisateur !\n" #: g10/keyedit.c:796 msgid "Really remove all selected user ids? " msgstr "Enlever r�ellement tous les utilisateurs s�lectionn�s ? " #: g10/keyedit.c:797 msgid "Really remove this user id? " msgstr "Enlever r�ellement cet utilisateur ? " #: g10/keyedit.c:820 g10/keyedit.c:842 msgid "You must select at least one key.\n" msgstr "Vous devez s�lectionner au moins une cl�.\n" #: g10/keyedit.c:824 msgid "Do you really want to delete the selected keys? " msgstr "Voulez-vous vraiment supprimer les cl�s s�lectionn�es ? " #: g10/keyedit.c:825 msgid "Do you really want to delete this key? " msgstr "Voulez-vous vraiment supprimer cette cl� ? " #: g10/keyedit.c:846 msgid "Do you really want to revoke the selected keys? " msgstr "Voulez-vous vraiment r�voquer les cl�s s�lectionn�es ? " #: g10/keyedit.c:847 msgid "Do you really want to revoke this key? " msgstr "Voulez-vous vraiment r�voquer cette cl� ? " #: g10/keyedit.c:901 msgid "Invalid command (try \"help\")\n" msgstr "Commande invalide (essayez � help �)\n" #: g10/keyedit.c:1293 msgid "Please remove selections from the secret keys.\n" msgstr "Enlevez les s�lections des cl�s secr�tes.\n" #: g10/keyedit.c:1299 msgid "Please select at most one secondary key.\n" msgstr "Vous devez s�lectionner au plus une cl� secondaire.\n" #: g10/keyedit.c:1303 msgid "Changing exiration time for a secondary key.\n" msgstr "Changer la date d'expiration d'une cl� secondaire.\n" #: g10/keyedit.c:1305 msgid "Changing exiration time for the primary key.\n" msgstr "Changer la date d'expiration de la cl� principale.\n" #: g10/keyedit.c:1346 msgid "You can't change the expiration date of a v3 key\n" msgstr "Vous ne pouvez pas changer la date d'expiration d'une cl� v3\n" #: g10/keyedit.c:1362 msgid "No corresponding signature in secret ring\n" msgstr "Pas de signature correspondante dans le porte-cl�s secret\n" #: g10/keyedit.c:1422 #, c-format msgid "No user id with index %d\n" msgstr "Pas d'utilisateur avec l'index %d\n" #: g10/keyedit.c:1468 #, c-format msgid "No secondary key with index %d\n" msgstr "Pas de cl� secondaire avec l'index %d\n" #: g10/keyedit.c:1566 msgid "user ID: \"" msgstr "nom d'utilisateur : � " #: g10/keyedit.c:1569 #, c-format msgid "" "\"\n" "signed with your key %08lX at %s\n" msgstr "" " �\n" "sign� avec votre cl� %08lX � %s\n" #: g10/keyedit.c:1573 msgid "Create a revocation certificate for this signature? (y/N)" msgstr "G�n�rer un certificat de r�vocation pour cette signature ? (o/N)" #: g10/keyedit.c:1653 msgid "Really create the revocation certificates? (y/N)" msgstr "Faut-il vraiment g�n�rer les certificats de r�vocation ? (o/N)" #: g10/keyedit.c:1676 msgid "no secret key\n" msgstr "pas de cl� secr�te\n" #: g10/mainproc.c:184 #, c-format msgid "public key is %08lX\n" msgstr "la cl� publique est %08lX\n" #: g10/mainproc.c:212 msgid "public key encrypted data: good DEK\n" msgstr "donn�es chiffr�es avec la cl� publique : bonne cl� de chiffrement\n" #. fixme: defer this message until we have parsed all packets of #. * this type - do this by building a list of keys with their stati #. * and store it with the context. do_proc_packets can then use #. * this list to display some information #: g10/mainproc.c:219 #, c-format msgid "public key decryption failed: %s\n" msgstr "le d�chiffrement de la cl� publique a �chou� : %s\n" #: g10/mainproc.c:247 msgid "decryption okay\n" msgstr "le d�chiffrement a r�ussi\n" #: g10/mainproc.c:252 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "ATTENTION: le message chiffr� a �t� manipul� !\n" #: g10/mainproc.c:257 #, c-format msgid "decryption failed: %s\n" msgstr "le d�chiffrement a �chou� : %s\n" #: g10/mainproc.c:275 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "NOTE : l'exp�diteur a demand� � pour vos yeux seulement �\n" #: g10/mainproc.c:277 #, c-format msgid "original file name='%.*s'\n" msgstr "nom de fichier original : '%.*s'\n" #: g10/mainproc.c:890 msgid "signature verification suppressed\n" msgstr "v�rification de signature supprim�e\n" #: g10/mainproc.c:896 #, c-format msgid "Signature made %.*s using %s key ID %08lX\n" msgstr "Signature faite %.*s avec une cl� %s ID %08lX\n" #. just in case that we have no userid #: g10/mainproc.c:922 g10/mainproc.c:933 msgid "BAD signature from \"" msgstr "MAUVAISE signature de \"" #: g10/mainproc.c:923 g10/mainproc.c:934 msgid "Good signature from \"" msgstr "Bonne signature de \"" #: g10/mainproc.c:925 msgid " aka \"" msgstr " alias \"" #: g10/mainproc.c:975 #, c-format msgid "Can't check signature: %s\n" msgstr "Ne peut v�rifier la signature : %s\n" #: g10/mainproc.c:1056 msgid "old style (PGP 2.x) signature\n" msgstr "signature d'un ancien style (PGP 2.x)\n" #: g10/mainproc.c:1061 msgid "invalid root packet detected in proc_tree()\n" msgstr "paquet racine invalide d�tect� dans proc_tree()\n" #: g10/misc.c:93 #, c-format msgid "can't disable core dumps: %s\n" msgstr "ne peut emp�cher la g�n�ration de fichiers core : %s\n" #: g10/misc.c:96 msgid "WARNING: program may create a core file!\n" msgstr "ATTENTION : Le programme peut cr�er un fichier � core � !\n" #: g10/misc.c:203 msgid "Experimental algorithms should not be used!\n" msgstr "Les algorithmes exp�rimentaux ne devraient pas �tre utilis�s !\n" #: g10/misc.c:217 msgid "" "RSA keys are deprecated; please consider creating a new key and use this key " "in the future\n" msgstr "" "Les cl�s RSA sont d�conseill�es : consid�rez cr�er une nouvelle cl�\n" "et l'utiliser dans l'avenir\n" #: g10/misc.c:239 msgid "this cipher algorithm is depreciated; please use a more standard one!\n" msgstr "" "Cet algorithme de chiffrement est d�conseill� ; utilisez-en un\n" "plus standard !\n" #: g10/parse-packet.c:112 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "ne peut g�rer l'algorithme � cl� publique %d\n" #: g10/parse-packet.c:872 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "un sous-paquet de type %d poss�de un bit critique\n" #: g10/passphrase.c:157 msgid "" "\n" "You need a passphrase to unlock the secret key for\n" "user: \"" msgstr "" "\n" "Vous avez besoin d'un mot de passe pour d�verrouiller la cl� secr�te pour\n" "l'utilisateur: \"" #: g10/passphrase.c:166 #, c-format msgid "%u-bit %s key, ID %08lX, created %s" msgstr "cl� de %u bits %s, ID %08lX, cr��e le %s" #: g10/passphrase.c:171 #, c-format msgid " (main key ID %08lX)" msgstr " (ID cl� principale %08lX)" #: g10/passphrase.c:190 msgid "Enter passphrase: " msgstr "Entrez le mot de passe : " #: g10/passphrase.c:194 msgid "Repeat passphrase: " msgstr "R�p�tez le mot de passe : " #: g10/plaintext.c:63 msgid "data not saved; use option \"--output\" to save it\n" msgstr "" "donn�es non enregistr�es ; utilisez l'option \"--output\" pour\n" "les enregistrer\n" #: g10/plaintext.c:208 msgid "Please enter name of data file: " msgstr "Entrez le nom d'un fichier de donn�es : " #: g10/plaintext.c:229 msgid "reading stdin ...\n" msgstr "lecture de l'entr�e standard...\n" #: g10/plaintext.c:302 #, c-format msgid "can't open signed data `%s'\n" msgstr "ne peut ouvir les donn�es sign�es `%s'\n" #: g10/pubkey-enc.c:79 #, c-format msgid "anonymous receiver; trying secret key %08lX ...\n" msgstr "destinataire anonyme ; essai de la cl� secr�te %08lX ...\n" #: g10/pubkey-enc.c:85 msgid "okay, we are the anonymous recipient.\n" msgstr "d'accord, nous sommes le r�cipient anonyme.\n" #: g10/pubkey-enc.c:137 msgid "old encoding of the DEK is not supported\n" msgstr "l'ancien codage de la cl� de chiffrement (DEK) n'est pas support�\n" #: g10/pubkey-enc.c:191 #, c-format msgid "NOTE: cipher algorithm %d not found in preferences\n" msgstr "" "NOTE : l'algorithme de chiffrement %d n'a pas �t� trouv� dans les " "pr�f�rences\n" #: g10/seckey-cert.c:55 #, c-format msgid "protection algorithm %d is not supported\n" msgstr "l'algorithme de protection %d n'est pas support�\n" #: g10/seckey-cert.c:171 msgid "Invalid passphrase; please try again ...\n" msgstr "Mot de passe invalide ; r�essayez...\n" #: g10/seckey-cert.c:227 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "ATTENTION : Cl� faible d�tect�e - changez encore le mot de passe.\n" #: g10/sig-check.c:187 msgid "assuming bad MDC due to an unknown critical bit\n" msgstr "le sceau (MDC) est suppos� �tre faux car un bit critique est inconnu\n" #: g10/sig-check.c:283 msgid "" "this is a PGP generated ElGamal key which is NOT secure for signatures!\n" msgstr "" "Ceci est une cl� ElGamal g�n�r�e par PGP qui n'est PAS s�re pour les\n" "signatures !\n" #: g10/sig-check.c:291 #, c-format msgid "public key is %lu second newer than the signature\n" msgstr "la cl� publique est plus r�cente de %lu seconde que la signature\n" #: g10/sig-check.c:292 #, c-format msgid "public key is %lu seconds newer than the signature\n" msgstr "la cl� publique est plus r�cente de %lu secondes que la signature\n" #: g10/sig-check.c:308 #, c-format msgid "NOTE: signature key expired %s\n" msgstr "NOTE : la cl� de signature a expir� le %s\n" #: g10/sig-check.c:365 msgid "assuming bad signature due to an unknown critical bit\n" msgstr "" "la signature est suppos�e �tre fausse car un bit critique est\n" "inconnu\n" #: g10/sign.c:79 #, c-format msgid "%s signature from: %s\n" msgstr "Signature %s de : %s\n" #: g10/sign.c:210 g10/sign.c:496 #, c-format msgid "can't create %s: %s\n" msgstr "ne peut cr�er %s : %s\n" #: g10/sign.c:306 msgid "signing:" msgstr "signature :" #: g10/sign.c:346 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "ATTENTION : `%s' est un fichier vide\n" #: g10/textfilter.c:128 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "ne peut pas traiter les ligne plus longues que %d caract�res\n" #: g10/textfilter.c:197 #, c-format msgid "input line longer than %d characters\n" msgstr "la ligne d'entr�e est plus longue que %d caract�res\n" #: g10/tdbio.c:116 g10/tdbio.c:1505 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "enregistrement de base de confiance %lu : lseek a �chou� : %s\n" #: g10/tdbio.c:122 g10/tdbio.c:1512 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "" "enregistrement de la base de confiance %lu : l'�criture a �chou� (n=%d) : " "%s\n" #: g10/tdbio.c:232 msgid "trustdb transaction too large\n" msgstr "transaction de base de confiance trop volumineuse\n" #: g10/tdbio.c:424 #, c-format msgid "%s: can't access: %s\n" msgstr "%s : ne peut acc�der : %s\n" #: g10/ringedit.c:296 g10/tdbio.c:444 #, c-format msgid "%s: can't create directory: %s\n" msgstr "%s : ne peut cr�er le r�pertoire : %s\n" #: g10/ringedit.c:302 g10/tdbio.c:447 #, c-format msgid "%s: directory created\n" msgstr "%s : r�pertoire cr��\n" #: g10/tdbio.c:451 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s : le r�pertoire n'existe pas !\n" #: g10/openfile.c:113 g10/openfile.c:183 g10/ringedit.c:1344 g10/tdbio.c:457 #, c-format msgid "%s: can't create: %s\n" msgstr "%s : ne peut cr�er : %s\n" #: g10/tdbio.c:472 g10/tdbio.c:521 #, c-format msgid "%s: can't create lock\n" msgstr "%s : ne peut cr�er de verrouillage\n" #: g10/tdbio.c:486 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s : n'a pas pu cr�er un enregistrement de version : %s" #: g10/tdbio.c:490 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s : base de confiance invalide cr��e\n" #: g10/tdbio.c:493 #, c-format msgid "%s: trustdb created\n" msgstr "%s : base de confiance cr��e\n" #: g10/tdbio.c:530 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s : base de confiance invalide\n" #: g10/tdbio.c:563 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s : la cr�ation de la table de hachage a �chou� : %s\n" #: g10/tdbio.c:571 #, c-format msgid "%s: error updating version record: %s\n" msgstr "" "%s : erreur pendant la mise � jour de l'enregistrement de version : %s\n" #: g10/tdbio.c:587 g10/tdbio.c:626 g10/tdbio.c:648 g10/tdbio.c:678 #: g10/tdbio.c:703 g10/tdbio.c:1438 g10/tdbio.c:1465 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s : erreur pendant la lecture de l'enregistrement de version : %s\n" #: g10/tdbio.c:600 g10/tdbio.c:659 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s : erreur pendant l'�criture de l'enregistrement de version : %s\n" #: g10/tdbio.c:1132 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "base de confiance : � lseek() � a �chou� : %s\n" #: g10/tdbio.c:1140 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "base de confiance : la lecture a �chou� (n=%d) : %s\n" #: g10/tdbio.c:1161 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s : ce n'est pas un fichier de base de confiance\n" #: g10/tdbio.c:1177 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s : enregistrement de version avec un num�ro %lu\n" #: g10/tdbio.c:1182 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s : version %d du fichier invalide\n" #: g10/tdbio.c:1471 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s : erreur pendant la lecture de l'enregistrement libre : %s\n" #: g10/tdbio.c:1479 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "" "%s : erreur pendant l'�criture de l'enregistrement de\n" "r�pertoire : %s\n" #: g10/tdbio.c:1489 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s : n'a pu mettre un enregistrement � z�ro : %s\n" #: g10/tdbio.c:1519 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s : n'a pas pu ajouter un enregistrement : %s\n" #: g10/tdbio.c:1630 msgid "The trustdb is corrupted; please run \"gpgm --fix-trustdb\".\n" msgstr "" "La base de confiance est corrompue ; ex�cutez � gpgm --fix-trustdb �.\n" #: g10/trustdb.c:163 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "" "enregistrement de confiance %lu, type de requ�te %d : la lecture a �chou� : " "%s\n" #: g10/trustdb.c:178 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "enregistrement de confiance %lu, type %d : l'�criture a �chou� : %s\n" #: g10/trustdb.c:192 #, c-format msgid "trust record %lu: delete failed: %s\n" msgstr "enregistrement de confiance %lu : la suppression a �chou� : %s\n" #: g10/trustdb.c:206 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "base de confiance : la synchronisation a �chou� : %s\n" #: g10/trustdb.c:386 #, c-format msgid "error reading dir record for LID %lu: %s\n" msgstr "" "erreur pendant la lecture de l'enregistrement de r�pertoire pour\n" "le LID %lu : %s\n" #: g10/trustdb.c:393 #, c-format msgid "lid %lu: expected dir record, got type %d\n" msgstr "lid %lu : enregistrement de r�pertoire attendu, a re�u le type %d\n" #: g10/trustdb.c:398 #, c-format msgid "no primary key for LID %lu\n" msgstr "pas de cl� principale pour le LID %lu\n" #: g10/trustdb.c:403 #, c-format msgid "error reading primary key for LID %lu: %s\n" msgstr "erreur pendant la lecture de la cl� principale pour le LID %lu : %s\n" #: g10/trustdb.c:442 #, c-format msgid "get_dir_record: search_record failed: %s\n" msgstr "get_dir_record : search_record a �chou� : %s\n" #: g10/trustdb.c:510 #, c-format msgid "NOTE: secret key %08lX is NOT protected.\n" msgstr "NOTE : la cl� secr�te %08lX n'est PAS prot�g�e.\n" #: g10/trustdb.c:518 #, c-format msgid "key %08lX: secret key without public key - skipped\n" msgstr "cl� %08lX : cl� secr�te sans cl� publique - non prise en compte\n" #: g10/trustdb.c:525 #, c-format msgid "key %08lX: secret and public key don't match\n" msgstr "cl� %08lX : les cl�s secr�te et publique ne correspondent pas\n" #: g10/trustdb.c:535 #, c-format msgid "key %08lX: can't put it into the trustdb\n" msgstr "cl� %08lX : ne peut �tre mise dans la base de confiance\n" #: g10/trustdb.c:541 #, c-format msgid "key %08lX: query record failed\n" msgstr "cl� %08lX : l'enregistrement de requ�te a �chou�\n" #: g10/trustdb.c:550 #, c-format msgid "key %08lX: already in trusted key table\n" msgstr "cl� %08lX : d�j� dans la table des cl�s certifi�es\n" #: g10/trustdb.c:553 #, c-format msgid "key %08lX: accepted as trusted key.\n" msgstr "cl� %08lX : accept�e comme cl� certifi�e.\n" #: g10/trustdb.c:561 #, c-format msgid "enumerate secret keys failed: %s\n" msgstr "l'�num�ration des cl�s secr�tes a �chou� : %s\n" #: g10/trustdb.c:851 #, c-format msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but marked as checked\n" msgstr "" "NOTE : l'enregistrement de signature %lu[%d] est dans la liste d'aide\n" "de %lu mais marqu� comme v�rifi�\n" #: g10/trustdb.c:855 #, c-format msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but not marked\n" msgstr "" "NOTE : l'enregistrement de signature %lu[%d] est dans la liste d'aide\n" "de %lu mais n'est pas marqu�\n" #. we need the dir record #: g10/trustdb.c:862 #, c-format msgid "sig rec %lu[%d] in hintlist of %lu does not point to a dir record\n" msgstr "" "l'enregistrement de signature %lu[%d] dans la liste d'aide de %lu\n" "ne pointe pas vers un enregistrement de r�pertoire\n" #: g10/trustdb.c:868 #, c-format msgid "lid %lu: no primary key\n" msgstr "lid %lu : pas de cl� primaire\n" #: g10/trustdb.c:901 #, c-format msgid "lid %lu: user id not found in keyblock\n" msgstr "lid %lu : utilisateur non trouv� dans le bloc de cl�s\n" #: g10/trustdb.c:905 #, c-format msgid "lid %lu: user id without signature\n" msgstr "lid %lu : utilisateur sans signature\n" #: g10/trustdb.c:912 #, c-format msgid "lid %lu: self-signature in hintlist\n" msgstr "lid %lu : auto-signature dans la liste d'aide\n" #: g10/trustdb.c:923 g10/trustdb.c:1675 g10/trustdb.c:1766 msgid "Valid certificate revocation" msgstr "Certificat de r�vocation valide" #: g10/trustdb.c:924 g10/trustdb.c:1676 g10/trustdb.c:1767 msgid "Good certificate" msgstr "Bon certificat" #: g10/trustdb.c:933 msgid "very strange: no public key\n" msgstr "tr�s �trange : pas de cl� publique\n" #: g10/trustdb.c:982 #, c-format msgid "hintlist %lu[%d] of %lu does not point to a dir record\n" msgstr "" "la liste d'aide de %lu[%d] de %lu ne pointe pas vers un enregistrement\n" "de r�pertoire\n" #: g10/trustdb.c:988 #, c-format msgid "lid %lu does not have a key\n" msgstr "la lid %lu n'a pas de cl�\n" #: g10/trustdb.c:998 #, c-format msgid "lid %lu: can't get keyblock: %s\n" msgstr "lid %lu: ne peut obtenir le bloc de cl�s: %s\n" #: g10/trustdb.c:1055 g10/trustdb.c:2030 #, c-format msgid "tdbio_search_dir failed: %s\n" msgstr "tdbio_search_dir a �chou� : %s\n" #: g10/trustdb.c:1210 #, c-format msgid "key %08lX.%lu: Good subkey binding\n" msgstr "cl� %08lX.%lu : bonne liaison avec la sous-cl�\n" #: g10/trustdb.c:1216 g10/trustdb.c:1259 #, c-format msgid "key %08lX.%lu: Invalid subkey binding: %s\n" msgstr "cl� %08lX.%lu : liaison avec la sous-cl� invalide : %s\n" #: g10/trustdb.c:1232 #, c-format msgid "key %08lX.%lu: Valid key revocation\n" msgstr "cl� %08lX.%lu : r�vocation de cl� valide\n" #: g10/trustdb.c:1238 #, c-format msgid "key %08lX.%lu: Invalid key revocation: %s\n" msgstr "cl� %08lX.%lu : r�vocation de sous-cl� invalide : %s\n" #: g10/trustdb.c:1253 #, c-format msgid "key %08lX.%lu: Valid subkey revocation\n" msgstr "cl� %08lX.%lu : r�vocation de sous-cl� valide\n" #: g10/trustdb.c:1360 msgid "Good self-signature" msgstr "Bonne auto-signature" #: g10/trustdb.c:1371 msgid "Invalid self-signature" msgstr "Auto-signature invalide" #: g10/trustdb.c:1403 msgid "Valid user ID revocation skipped due to a newer self signature\n" msgstr "" "La r�vocation valide de nom d'utilisateur a �t� ignor�e car l'auto-\n" "signature est plus r�cente\n" #: g10/trustdb.c:1410 msgid "Valid user ID revocation\n" msgstr "R�vocation de nom d'utilisateur valide\n" #: g10/trustdb.c:1417 msgid "Invalid user ID revocation" msgstr "R�vocation de nom d'utilisateur invalide" #: g10/trustdb.c:1512 msgid "Too many preferences" msgstr "Trop de pr�f�rences" #: g10/trustdb.c:1526 msgid "Too many preference items" msgstr "Trop d'items de pr�f�rence" #: g10/trustdb.c:1549 g10/trustdb.c:3075 g10/trustdb.c:3105 msgid "WARNING: can't yet handle long pref records\n" msgstr "" "ATTENTION : les enregistrements de pr�f�rences longs ne sont pas encore\n" "support�s\n" #: g10/trustdb.c:1654 msgid "duplicated certificate - deleted" msgstr "certificat dupliqu� - supprim�" #: g10/trustdb.c:1692 msgid "public key not anymore available" msgstr "la cl� secr�te n'est plus disponible" #: g10/trustdb.c:1702 g10/trustdb.c:1791 msgid "Invalid certificate revocation" msgstr "R�vocation de certificat invalide" #: g10/trustdb.c:1703 g10/trustdb.c:1792 msgid "Invalid certificate" msgstr "Certificat invalide" #: g10/trustdb.c:1720 #, c-format msgid "uid %08lX.%lu/%02X%02X: has shadow dir %lu but is not yet marked.\n" msgstr "" "uid %08lX.%lu/%02X%02X : poss�de une ombre %lu mais n'est pas encore\n" "marqu�.\n" #: g10/trustdb.c:1734 #, c-format msgid "sig record %lu[%d] points to wrong record.\n" msgstr "" "l'enregistrement de signature %lu[%d] pointe vers le mauvais\n" "enregistrement de r�pertoire\n" #. that should never happen #: g10/trustdb.c:2007 #, c-format msgid "insert_trust_record: keyblock not found: %s\n" msgstr "insert_trust_record : bloc de cl�s non trouv� : %s\n" #: g10/trustdb.c:2408 msgid "Ooops, no keys\n" msgstr "Ooops, pas de cl�\n" #: g10/trustdb.c:2412 msgid "Ooops, no user ids\n" msgstr "Ooops, pas de nom d'utilisateur\n" #: g10/trustdb.c:2529 #, c-format msgid "lid ?: insert failed: %s\n" msgstr "lid ? : l'insertion a �chou� : %s\n" #: g10/trustdb.c:2534 #, c-format msgid "lid %lu: insert failed: %s\n" msgstr "lid %lu : l'insertion a �chou� : %s\n" #: g10/trustdb.c:2540 #, c-format msgid "lid %lu: inserted\n" msgstr "lid %lu : ins�r�\n" #: g10/trustdb.c:2545 g10/trustdb.c:2654 #, c-format msgid "lid %lu: update failed: %s\n" msgstr "lid %lu : la mise � jour a �chou�: %s\n" #: g10/trustdb.c:2551 g10/trustdb.c:2660 #, c-format msgid "lid %lu: updated\n" msgstr "lid %lu : mis � jour\n" #: g10/trustdb.c:2556 g10/trustdb.c:2664 #, c-format msgid "lid %lu: okay\n" msgstr "lid %lu : OK\n" #: g10/trustdb.c:2562 g10/trustdb.c:2671 #, c-format msgid "%lu keys processed\n" msgstr "%lu cl�s trait�es\n" #: g10/trustdb.c:2564 g10/trustdb.c:2675 #, c-format msgid "\t%lu keys with errors\n" msgstr "\t%lu cl�s avec erreurs\n" #: g10/trustdb.c:2566 g10/trustdb.c:2677 #, c-format msgid "\t%lu keys updated\n" msgstr "\t%lu cl�s mises � jour\n" #: g10/trustdb.c:2568 #, c-format msgid "\t%lu keys inserted\n" msgstr "\t%lu cl�s ins�r�es\n" #: g10/trustdb.c:2571 #, c-format msgid "enumerate keyblocks failed: %s\n" msgstr "l'�num�ration des blocs de cl�s a �chou� : %s\n" #: g10/trustdb.c:2598 #, c-format msgid "%s: keyblock read problem: %s\n" msgstr "%s : probl�me de lecture du bloc de cl�s : %s\n" #: g10/trustdb.c:2612 #, c-format msgid "%s: update failed: %s\n" msgstr "%s : la mise � jour a �chou� : %s\n" #: g10/trustdb.c:2615 #, c-format msgid "%s: updated\n" msgstr "%s : mis � jour\n" #: g10/trustdb.c:2617 #, c-format msgid "%s: okay\n" msgstr "%s : OK\n" #: g10/trustdb.c:2632 #, c-format msgid "lid %lu: dir record w/o key - skipped\n" msgstr "lid %lu : enregistrement de r�pertoire sans cl� - ignor�\n" #: g10/trustdb.c:2645 #, c-format msgid "lid %lu: keyblock not found: %s\n" msgstr "lid %lu : le bloc de cl�s n'a pas �t� trouv� : %s\n" #: g10/trustdb.c:2673 #, c-format msgid "\t%lu keys skipped\n" msgstr "\t%lu cl�s ignor�es\n" #: g10/trustdb.c:2743 #, c-format msgid "check_trust: search dir record failed: %s\n" msgstr "" "check_trust : la recherche d'enregistrement de r�pertoire a �chou� : %s\n" #: g10/trustdb.c:2750 #, c-format msgid "key %08lX: insert trust record failed: %s\n" msgstr "cl� %08lX : l'insertion d'enregistrement de confiance a �chou� : %s\n" #: g10/trustdb.c:2754 #, c-format msgid "key %08lX.%lu: inserted into trustdb\n" msgstr "cl� %08lX.%lu : ins�r�e dans la base de confiance\n" #: g10/trustdb.c:2762 #, c-format msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" msgstr "" "cl� %08lX.%lu : cr��e dans le futur (voyage temporel ou\n" "probl�me d'horloge)\n" #: g10/trustdb.c:2769 #, c-format msgid "key %08lX.%lu: expired at %s\n" msgstr "cl� %08lX.%lu : a expir� le %s\n" #: g10/trustdb.c:2777 #, c-format msgid "key %08lX.%lu: trust check failed: %s\n" msgstr "cl� %08lX.%lu : la v�rification de confiance a �chou�: %s\n" #: g10/trustdb.c:2881 #, c-format msgid "user '%s' not found: %s\n" msgstr "l'utilisateur '%s' n'a pas �t� trouv� : %s\n" #: g10/trustdb.c:2883 #, c-format msgid "problem finding '%s' in trustdb: %s\n" msgstr "probl�me de recherche de '%s' dans la base de confiance : %s\n" #: g10/trustdb.c:2886 #, c-format msgid "user '%s' not in trustdb - inserting\n" msgstr "l'utilisateur '%s' n'est pas dans la base de confiance - insertion\n" #: g10/trustdb.c:2889 #, c-format msgid "failed to put '%s' into trustdb: %s\n" msgstr "n'a pas pu ins�rer '%s' dans la base de confiance : %s\n" #: g10/ringedit.c:316 #, c-format msgid "%s: can't create keyring: %s\n" msgstr "%s : ne peut cr�er le porte-cl�s : %s\n" #: g10/ringedit.c:333 g10/ringedit.c:1349 #, c-format msgid "%s: keyring created\n" msgstr "%s : porte-cl�s cr��\n" #: g10/ringedit.c:1526 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "" "ATTENTION : 2 fichiers avec des informations confidentielles existent.\n" #: g10/ringedit.c:1527 #, c-format msgid "%s is the unchanged one\n" msgstr "%s est le fichier original\n" #: g10/ringedit.c:1528 #, c-format msgid "%s is the new one\n" msgstr "%s est le nouveau\n" #: g10/ringedit.c:1529 msgid "Please fix this possible security flaw\n" msgstr "R�parez ce probl�me de s�curit� possible\n" #: g10/skclist.c:88 g10/skclist.c:125 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "" "la cl� n'est pas marqu�e comme non-s�re ; on ne peut pas l'utiliser avec le\n" "pseudo-g�n�rateur de nombres al�atiores !\n" #: g10/skclist.c:113 #, c-format msgid "skipped `%s': %s\n" msgstr "`%s' a �t� ignor� : %s\n" #: g10/skclist.c:119 #, c-format msgid "" "skipped `%s': this is a PGP generated ElGamal key which is not secure for " "signatures!\n" msgstr "" "`%s' a �t� ignor�e : c'est une cl� ElGamal g�n�r�e par PGP qui n'est pas\n" "s�re pour les signatures !\n" #. do not overwrite #: g10/openfile.c:65 #, c-format msgid "File `%s' exists. " msgstr "Le fichier `%s' existe. " #: g10/openfile.c:67 msgid "Overwrite (y/N)? " msgstr "R��crire (o/N)? " #: g10/openfile.c:92 msgid "writing to stdout\n" msgstr "�criture vers la sortie standard\n" #: g10/openfile.c:149 #, c-format msgid "assuming signed data in `%s'\n" msgstr "les donn�es sign�es sont suppos�es �tre dans `%s'\n" #: g10/openfile.c:199 #, c-format msgid "%s: new options file created\n" msgstr "%s : nouveau fichier d'options cr��\n" #: g10/encr-data.c:66 #, c-format msgid "%s encrypted data\n" msgstr "donn�es chiffr�es avec %s\n" #: g10/encr-data.c:68 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "chiffr� avec l'algorithme inconnu %d\n" #: g10/encr-data.c:85 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "ATTENTION : Le message a �t� chiffr� avec une cl� faible pendant le\n" "chiffrement sym�trique.\n" #: g10/seskey.c:52 msgid "weak key created - retrying\n" msgstr "cl� faible g�n�r�e - nouvel essai\n" #: g10/seskey.c:57 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "ne peut �viter une cl� faible pour le chiffrement sym�trique :\n" "%d essais ont eu lieu !\n" #. begin of list #: g10/helptext.c:48 msgid "edit_ownertrust.value" msgstr "" "C'est � vous d'assigner une valeur ici ; cette valeur ne sera jamais\n" "envoy�e � une tierce personne. Nous en avons besoin pour cr�er le r�seau de\n" "confiance (web-of-trust) ; cela n'a rien � voir avec le r�seau des\n" "certificats (cr�� implicitement)" #: g10/helptext.c:54 msgid "revoked_key.override" msgstr "" "Si vous voulez utiliser cette cl� r�voqu�e quand-m�me, r�pondez � oui �." #: g10/helptext.c:58 msgid "untrusted_key.override" msgstr "" "Si vous voulez utiliser cette cl� peu s�re quand-m�me, r�pondez � oui �." #: g10/helptext.c:62 msgid "pklist.user_id.enter" msgstr "Entrez l'adresse de la personne � qui vous voulez envoyer le message." #: g10/helptext.c:66 msgid "keygen.algo" msgstr "" "S�lectionnez l'algorithme � utiliser.\n" "DSA (alias DSS) est l'algorithme de signatures �lectroniques qui ne peut\n" "�tre utilis� que pour les signatures. C'est l'algorithme recommand� car\n" "la v�rification des signatures DSA est beaucoup plus rapide que celle des\n" "signatures ElGamal.\n" "ElGamal est un algorithme pouvant � la fois �tre utilis� pour les\n" "signatures et le chiffrement. OpenPGP en distingue deux sortes :\n" "l'une destin�e uniquement au chiffrement et l'autre pouvant aussi bien\n" "servir aux signatures ; elles sont en fait identiques mais certains\n" "param�tres doivent �tre sp�cialement choisis pour que la cl� g�n�re des\n" "signatures sures : ce programme est capable de le faire mais les autres\n" "impl�mentaions de OpenPGP ne sont pas oblig�es d'accepter cette forme de\n" "cl�.\n" "La premi�re cl� (cl� principale) doit toujours �tre capable de signer ;\n" "c'est pourquoi la cl� ElGamal de chiffrement seul est alors d�sactiv�e." #: g10/helptext.c:82 msgid "keygen.algo.elg_se" msgstr "" "Bien que ces cl�s soient d�finies dans la RFC2440 elles ne sont pas\n" "conseill�es car tous les programmes ne les supportent pas et les signatures\n" "cr��es avec elles sont plut�t longues et tr�s lentes � v�rifier." #: g10/helptext.c:89 msgid "keygen.size" msgstr "Entrez la taille de la cl�" #: g10/helptext.c:93 msgid "keygen.size.huge.okay" msgstr "R�pondez � oui � ou � non �" #: g10/helptext.c:98 msgid "keygen.size.large.okay" msgstr "R�pondez � oui � ou � non �" #: g10/helptext.c:103 msgid "keygen.valid" msgstr "Entrez la valeur demand�e" #: g10/helptext.c:107 msgid "keygen.valid.okay" msgstr "R�pondez � oui � ou � non �" #: g10/helptext.c:112 msgid "keygen.name" msgstr "Entrez le nom du propri�taire de la cl�" #: g10/helptext.c:117 msgid "keygen.email" msgstr "Entrez une adresse e-mail optionnelle mais hautement recommand�e" #: g10/helptext.c:121 msgid "keygen.comment" msgstr "Entrez un commentaire optionnel" #: g10/helptext.c:126 msgid "keygen.userid.cmd" msgstr "" "N pour changer le nom.\n" "C pour changer le commentaire.\n" "E pour changer l'adresse e-mail.\n" "O pour continuer � g�n�rer la cl�.\n" "Q pour arr�ter de g�n�rer de cl�." #: g10/helptext.c:135 msgid "keygen.sub.okay" msgstr "R�pondez � oui � (ou simplement � o �) pour g�n�rer la sous-cl�" #: g10/helptext.c:139 msgid "sign_uid.okay" msgstr "R�pondez � oui � ou � non �" #: g10/helptext.c:144 msgid "change_passwd.empty.okay" msgstr "R�pondez � oui � ou � non �" #: g10/helptext.c:149 msgid "keyedit.cmd" msgstr "Entrez � help � pour voir la liste des commandes." #: g10/helptext.c:153 msgid "keyedit.save.okay" msgstr "R�pondez � oui � ou � non �" #: g10/helptext.c:158 msgid "keyedit.cancel.okay" msgstr "R�pondez � oui � ou � non �" #: g10/helptext.c:162 msgid "keyedit.sign_all.okay" msgstr "R�pondez � oui � si vous voulez signer TOUS les noms d'utilisateurs" #: g10/helptext.c:166 msgid "keyedit.remove.uid.okay" msgstr "" "R�pondez � oui � si vous voulez vraiment supprimer ce nom\n" "d'utilisateur. Tous les certificats seront alors perdus en m�me temps !" #: g10/helptext.c:171 msgid "keyedit.remove.subkey.okay" msgstr "Entrez � oui � s'il faut vraiment supprimer la sous-cl�" #: g10/helptext.c:175 msgid "passphrase.enter" msgstr "" "Entrez le mot de passe ; c'est une phrase secr�te \n" " Blurb, blurb,.... " #: g10/helptext.c:182 msgid "passphrase.repeat" msgstr "" "R�p�tez le dernier mot de passe, pour �tre s�r de ce que vous avez tap�." #: g10/helptext.c:186 msgid "detached_signature.filename" msgstr "Donnez le nom du fichier auquel la signature se rapporte" #: g10/helptext.c:190 msgid "openfile.overwrite.okay" msgstr "Entrez � oui � s'il faut vraiment r��crire le fichier" #: g10/helptext.c:204 msgid "No help available" msgstr "Pas d'aide disponible" #: g10/helptext.c:216 #, c-format msgid "No help available for `%s'" msgstr "Pas d'aide disponible pour `%s'"