aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authort3sserakt <t3ss@posteo.de>2022-04-01 15:08:41 +0200
committert3sserakt <t3ss@posteo.de>2022-04-03 14:29:27 +0200
commit8f5b71e500a10790bf72d42de03e2db4971bf772 (patch)
tree10507356b5df0d2d0ce0b3b60a91dc070ce1001d
parent027177be3bae0c60d530b0b88ed375b082c94d81 (diff)
parente6a0ea8cf388a05856aaedbc5444f266ae47a7ef (diff)
downloadgnunet-8f5b71e500a10790bf72d42de03e2db4971bf772.tar.gz
gnunet-8f5b71e500a10790bf72d42de03e2db4971bf772.zip
Merge branch 'master' of ssh://git.gnunet.org/gnunet
-rw-r--r--ChangeLog42
-rw-r--r--configure.ac7
m---------contrib/gana0
-rwxr-xr-xcontrib/get_version.sh8
-rw-r--r--po/POTFILES.in101
-rw-r--r--po/de.po214
-rw-r--r--po/es.po222
-rw-r--r--po/fr.po210
-rw-r--r--po/it.po210
-rw-r--r--po/sr.po222
-rw-r--r--po/sv.po214
-rw-r--r--po/vi.po214
-rw-r--r--po/zh_CN.po210
-rw-r--r--src/dhtu/Makefile.am9
-rw-r--r--src/fs/test_fs_uri.c2
-rw-r--r--src/fs/test_plugin_block_fs.c3
-rw-r--r--src/gns/gnunet-service-gns_resolver.c19
-rw-r--r--src/gns/plugin_block_gns.c4
-rw-r--r--src/gnsrecord/gnsrecord_crypto.c39
-rw-r--r--src/gnsrecord/gnunet-gnsrecord-tvg.c120
-rw-r--r--src/include/gnunet_crypto_lib.h281
-rw-r--r--src/include/gnunet_messenger_service.h23
-rw-r--r--src/include/gnunet_namestore_plugin.h65
-rw-r--r--src/include/gnunet_namestore_service.h156
-rw-r--r--src/include/gnunet_time_lib.h29
-rw-r--r--src/messenger/plugin_gnsrecord_messenger.c59
-rw-r--r--src/namestore/Makefile.am11
-rw-r--r--src/namestore/gnunet-service-namestore.c183
-rw-r--r--src/namestore/namestore.h10
-rw-r--r--src/namestore/namestore_api.c115
-rw-r--r--src/pq/pq_result_helper.c6
-rw-r--r--src/transport/Makefile.am1
-rw-r--r--src/util/.gitignore1
-rw-r--r--src/util/Makefile.am8
-rw-r--r--src/util/crypto_ecc_gnsrecord.c55
-rw-r--r--src/util/crypto_edx25519.c418
-rw-r--r--src/util/crypto_hkdf.c118
-rw-r--r--src/util/crypto_kdf.c61
-rw-r--r--src/util/crypto_rsa.c28
-rw-r--r--src/util/test_crypto_eddsa.c8
-rw-r--r--src/util/test_crypto_edx25519.c326
-rw-r--r--src/util/time.c30
42 files changed, 2636 insertions, 1426 deletions
diff --git a/ChangeLog b/ChangeLog
index b5596af5c..adb5daf2a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,45 @@
1Tue, 29 Mar 2022 10:11:15 +0200 (a9b18aa64)
2GNS: Do not fail on assertions in block processing - Martin Schanzenbach
3
4Sun, 27 Mar 2022 17:12:52 +0200 (ce38d1f6c)
5Edx25519 implemented - Özgür Kesim
6
7Sun, 27 Mar 2022 12:25:01 +0200 (1e4d62567)
8GNS: Sanitize APIs and align with LSD0001 - Martin Schanzenbach
9
10Sat, 26 Mar 2022 07:17:12 +0100 (e598ffe0a)
11add GNUNET_TIME_absolute_round_down() function - Christian Grothoff
12
13Fri, 25 Mar 2022 11:28:37 -0500 (c93cf9ae1)
14Remove bash-ism from get_version.sh - David Barksdale
15
16Mon, 21 Mar 2022 13:54:28 +0100 (4e95b59a6)
17NAMESTORE: Towards new transaction-based API - Martin Schanzenbach
18
19Mon, 21 Mar 2022 03:37:29 +0100 (ec8a825b0)
20add new approximate time cmp function - Christian Grothoff
21
22Fri, 18 Mar 2022 13:51:02 +0100 (4f3c8d098)
23configure.ac: use lo0 for the 3 listed BSD Systems. - Martin Schanzenbach
24
25Fri, 18 Mar 2022 08:52:01 +0100 (fcbabc6b6)
26GNS: Fix BOX handling in apex - Martin Schanzenbach
27
28Thu, 17 Mar 2022 23:24:19 +0100 (c37f01bc9)
29GNS: Fix BOX service port handling in NBO - Martin Schanzenbach
30
31Wed, 16 Mar 2022 18:53:22 +0100 (68ac68b70)
32NAMESTORE: Add record set blocking API - Martin Schanzenbach
33
34Tue, 15 Mar 2022 08:42:42 +0100 (cfd3db44a)
35NAMESTORE: Prevent storing records under invalid labels - Martin Schanzenbach
36
37Sat, 5 Mar 2022 08:58:51 +0100 (2087b149d)
38FS: Fix segfault in URI handling - Martin Schanzenbach
39
40Fri, 4 Mar 2022 23:40:34 +0100 (343177a0b)
41GNS: Fix including proxy test in make dist. Addresses issue #7182 - Martin Schanzenbach
42
1Fri, 4 Mar 2022 14:17:37 +0100 (0e6b1f4a2) 43Fri, 4 Mar 2022 14:17:37 +0100 (0e6b1f4a2)
2NAMESTORE: Warn use of low relative expiration times - Martin Schanzenbach 44NAMESTORE: Warn use of low relative expiration times - Martin Schanzenbach
3 45
diff --git a/configure.ac b/configure.ac
index 713817168..43d112572 100644
--- a/configure.ac
+++ b/configure.ac
@@ -20,7 +20,7 @@
20# 20#
21# 21#
22AC_PREREQ([2.69]) 22AC_PREREQ([2.69])
23AC_INIT([gnunet], m4_esyscmd_s([contrib/get_version.sh]), [bug-gnunet@gnu.org]) 23AC_INIT([gnunet], m4_esyscmd_s([sh contrib/get_version.sh]), [bug-gnunet@gnu.org])
24 24
25AC_CONFIG_AUX_DIR([build-aux]) 25AC_CONFIG_AUX_DIR([build-aux])
26AC_CONFIG_MACRO_DIRS([m4]) 26AC_CONFIG_MACRO_DIRS([m4])
@@ -128,6 +128,7 @@ AS_CASE(["$host_os"],
128 [*freebsd*], 128 [*freebsd*],
129 [CFLAGS="-D_THREAD_SAFE $CFLAGS" 129 [CFLAGS="-D_THREAD_SAFE $CFLAGS"
130 build_target="freebsd" 130 build_target="freebsd"
131 DEFAULT_INTERFACE="\"lo0\""
131 xbsd="yes" 132 xbsd="yes"
132 LIBPREFIX= 133 LIBPREFIX=
133 DLLDIR=lib 134 DLLDIR=lib
@@ -135,10 +136,11 @@ AS_CASE(["$host_os"],
135 ], 136 ],
136 [*openbsd*], 137 [*openbsd*],
137 [# libc needs to be linked explicitly 138 [# libc needs to be linked explicitly
138 LDFLAGS="$LDFLAGS -Wl -lc" 139 LDFLAGS="$OLD_LDFLAGS -lc"
139 # and PIC has to be enabled 140 # and PIC has to be enabled
140 CFLAGS="-fPIC $CFLAGS" 141 CFLAGS="-fPIC $CFLAGS"
141 build_target="openbsd" 142 build_target="openbsd"
143 DEFAULT_INTERFACE="\"lo0\""
142 xbsd="yes" 144 xbsd="yes"
143 LIBPREFIX= 145 LIBPREFIX=
144 DLLDIR=lib 146 DLLDIR=lib
@@ -146,6 +148,7 @@ AS_CASE(["$host_os"],
146 ], 148 ],
147 [*netbsd*], 149 [*netbsd*],
148 [build_target="netbsd" 150 [build_target="netbsd"
151 DEFAULT_INTERFACE="\"lo0\""
149 xbsd="yes" 152 xbsd="yes"
150 LIBPREFIX= 153 LIBPREFIX=
151 DLLDIR=lib 154 DLLDIR=lib
diff --git a/contrib/gana b/contrib/gana
Subproject 048ad729b3177a5de1726517bc905e6cd7688d0 Subproject 20f2185df6a7cb27cb2a175a300cd822ee8b063
diff --git a/contrib/get_version.sh b/contrib/get_version.sh
index 35eed9f94..2a41ed4d6 100755
--- a/contrib/get_version.sh
+++ b/contrib/get_version.sh
@@ -1,18 +1,18 @@
1#!/bin/bash 1#!/bin/sh
2# Gets the version number from git, or from the contents of .version 2# Gets the version number from git, or from the contents of .version
3VERSION= 3VERSION=
4if test -f ".version" 4if test -f ".version"
5then 5then
6 VERSION=$(cat .version) 6 VERSION=$(cat .version)
7fi 7fi
8if test "x$VERSION" = "x" -a -d "./.git" 8if test -d "./.git"
9then 9then
10 VERSION=$(git describe --tags) 10 VERSION=$(git describe --tags)
11 VERSION=${VERSION:1:${#VERSION}} 11 VERSION=${VERSION#v}
12 echo $VERSION > .version 12 echo $VERSION > .version
13fi 13fi
14if test "x$VERSION" = "x" 14if test "x$VERSION" = "x"
15then 15then
16 VERSION="unknown" 16 VERSION="unknown"
17fi 17fi
18echo -n "$VERSION" 18echo "$VERSION"
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 64df0a13b..b7e7684c6 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -10,13 +10,14 @@ src/arm/arm_monitor_api.c
10src/arm/gnunet-arm.c 10src/arm/gnunet-arm.c
11src/arm/gnunet-service-arm.c 11src/arm/gnunet-service-arm.c
12src/arm/mockup-service.c 12src/arm/mockup-service.c
13src/ats-tool/gnunet-ats.c
13src/ats/ats_api_connectivity.c 14src/ats/ats_api_connectivity.c
14src/ats/ats_api_performance.c 15src/ats/ats_api_performance.c
15src/ats/ats_api_scanner.c 16src/ats/ats_api_scanner.c
16src/ats/ats_api_scheduling.c 17src/ats/ats_api_scheduling.c
17src/ats/gnunet-ats-solver-eval.c 18src/ats/gnunet-ats-solver-eval.c
18src/ats/gnunet-service-ats_addresses.c
19src/ats/gnunet-service-ats.c 19src/ats/gnunet-service-ats.c
20src/ats/gnunet-service-ats_addresses.c
20src/ats/gnunet-service-ats_connectivity.c 21src/ats/gnunet-service-ats_connectivity.c
21src/ats/gnunet-service-ats_normalization.c 22src/ats/gnunet-service-ats_normalization.c
22src/ats/gnunet-service-ats_performance.c 23src/ats/gnunet-service-ats_performance.c
@@ -25,7 +26,6 @@ src/ats/gnunet-service-ats_preferences.c
25src/ats/gnunet-service-ats_reservations.c 26src/ats/gnunet-service-ats_reservations.c
26src/ats/gnunet-service-ats_scheduling.c 27src/ats/gnunet-service-ats_scheduling.c
27src/ats/plugin_ats_proportional.c 28src/ats/plugin_ats_proportional.c
28src/ats-tool/gnunet-ats.c
29src/auction/gnunet-auction-create.c 29src/auction/gnunet-auction-create.c
30src/auction/gnunet-auction-info.c 30src/auction/gnunet-auction-info.c
31src/auction/gnunet-auction-join.c 31src/auction/gnunet-auction-join.c
@@ -43,8 +43,8 @@ src/cadet/cadet_api_list_peers.c
43src/cadet/cadet_api_list_tunnels.c 43src/cadet/cadet_api_list_tunnels.c
44src/cadet/cadet_test_lib.c 44src/cadet/cadet_test_lib.c
45src/cadet/desirability_table.c 45src/cadet/desirability_table.c
46src/cadet/gnunet-cadet.c
47src/cadet/gnunet-cadet-profiler.c 46src/cadet/gnunet-cadet-profiler.c
47src/cadet/gnunet-cadet.c
48src/cadet/gnunet-service-cadet.c 48src/cadet/gnunet-service-cadet.c
49src/cadet/gnunet-service-cadet_channel.c 49src/cadet/gnunet-service-cadet_channel.c
50src/cadet/gnunet-service-cadet_connection.c 50src/cadet/gnunet-service-cadet_connection.c
@@ -60,15 +60,15 @@ src/consensus/gnunet-service-consensus.c
60src/consensus/plugin_block_consensus.c 60src/consensus/plugin_block_consensus.c
61src/conversation/conversation_api.c 61src/conversation/conversation_api.c
62src/conversation/conversation_api_call.c 62src/conversation/conversation_api_call.c
63src/conversation/gnunet-conversation.c
64src/conversation/gnunet-conversation-test.c 63src/conversation/gnunet-conversation-test.c
65src/conversation/gnunet_gst.c 64src/conversation/gnunet-conversation.c
66src/conversation/gnunet_gst_test.c
67src/conversation/gnunet-helper-audio-playback.c
68src/conversation/gnunet-helper-audio-playback-gst.c 65src/conversation/gnunet-helper-audio-playback-gst.c
69src/conversation/gnunet-helper-audio-record.c 66src/conversation/gnunet-helper-audio-playback.c
70src/conversation/gnunet-helper-audio-record-gst.c 67src/conversation/gnunet-helper-audio-record-gst.c
68src/conversation/gnunet-helper-audio-record.c
71src/conversation/gnunet-service-conversation.c 69src/conversation/gnunet-service-conversation.c
70src/conversation/gnunet_gst.c
71src/conversation/gnunet_gst_test.c
72src/conversation/microphone.c 72src/conversation/microphone.c
73src/conversation/plugin_gnsrecord_conversation.c 73src/conversation/plugin_gnsrecord_conversation.c
74src/conversation/speaker.c 74src/conversation/speaker.c
@@ -99,13 +99,13 @@ src/dht/dht_test_lib.c
99src/dht/gnunet-dht-get.c 99src/dht/gnunet-dht-get.c
100src/dht/gnunet-dht-hello.c 100src/dht/gnunet-dht-hello.c
101src/dht/gnunet-dht-monitor.c 101src/dht/gnunet-dht-monitor.c
102src/dht/gnunet_dht_profiler.c
103src/dht/gnunet-dht-put.c 102src/dht/gnunet-dht-put.c
104src/dht/gnunet-service-dht.c 103src/dht/gnunet-service-dht.c
105src/dht/gnunet-service-dht_clients.c 104src/dht/gnunet-service-dht_clients.c
106src/dht/gnunet-service-dht_datacache.c 105src/dht/gnunet-service-dht_datacache.c
107src/dht/gnunet-service-dht_neighbours.c 106src/dht/gnunet-service-dht_neighbours.c
108src/dht/gnunet-service-dht_routing.c 107src/dht/gnunet-service-dht_routing.c
108src/dht/gnunet_dht_profiler.c
109src/dht/plugin_block_dht.c 109src/dht/plugin_block_dht.c
110src/dhtu/plugin_dhtu_gnunet.c 110src/dhtu/plugin_dhtu_gnunet.c
111src/dhtu/plugin_dhtu_ip.c 111src/dhtu/plugin_dhtu_ip.c
@@ -143,8 +143,8 @@ src/fs/gnunet-auto-share.c
143src/fs/gnunet-daemon-fsprofiler.c 143src/fs/gnunet-daemon-fsprofiler.c
144src/fs/gnunet-directory.c 144src/fs/gnunet-directory.c
145src/fs/gnunet-download.c 145src/fs/gnunet-download.c
146src/fs/gnunet-fs.c
147src/fs/gnunet-fs-profiler.c 146src/fs/gnunet-fs-profiler.c
147src/fs/gnunet-fs.c
148src/fs/gnunet-helper-fs-publish.c 148src/fs/gnunet-helper-fs-publish.c
149src/fs/gnunet-publish.c 149src/fs/gnunet-publish.c
150src/fs/gnunet-search.c 150src/fs/gnunet-search.c
@@ -164,9 +164,9 @@ src/gns/gns_tld_api.c
164src/gns/gnunet-bcd.c 164src/gns/gnunet-bcd.c
165src/gns/gnunet-dns2gns.c 165src/gns/gnunet-dns2gns.c
166src/gns/gnunet-gns-benchmark.c 166src/gns/gnunet-gns-benchmark.c
167src/gns/gnunet-gns.c
168src/gns/gnunet-gns-import.c 167src/gns/gnunet-gns-import.c
169src/gns/gnunet-gns-proxy.c 168src/gns/gnunet-gns-proxy.c
169src/gns/gnunet-gns.c
170src/gns/gnunet-service-gns.c 170src/gns/gnunet-service-gns.c
171src/gns/gnunet-service-gns_interceptor.c 171src/gns/gnunet-service-gns_interceptor.c
172src/gns/gnunet-service-gns_resolver.c 172src/gns/gnunet-service-gns_resolver.c
@@ -184,9 +184,9 @@ src/gnsrecord/json_gnsrecord.c
184src/gnsrecord/plugin_gnsrecord_dns.c 184src/gnsrecord/plugin_gnsrecord_dns.c
185src/hello/address.c 185src/hello/address.c
186src/hello/gnunet-hello.c 186src/hello/gnunet-hello.c
187src/hello/hello.c
188src/hello/hello-ng.c 187src/hello/hello-ng.c
189src/hello/hello-uri.c 188src/hello/hello-uri.c
189src/hello/hello.c
190src/hostlist/gnunet-daemon-hostlist.c 190src/hostlist/gnunet-daemon-hostlist.c
191src/hostlist/gnunet-daemon-hostlist_client.c 191src/hostlist/gnunet-daemon-hostlist_client.c
192src/hostlist/gnunet-daemon-hostlist_server.c 192src/hostlist/gnunet-daemon-hostlist_server.c
@@ -202,8 +202,8 @@ src/json/json_helper.c
202src/json/json_mhd.c 202src/json/json_mhd.c
203src/json/json_pack.c 203src/json/json_pack.c
204src/messenger/gnunet-messenger.c 204src/messenger/gnunet-messenger.c
205src/messenger/gnunet-service-messenger_basement.c
206src/messenger/gnunet-service-messenger.c 205src/messenger/gnunet-service-messenger.c
206src/messenger/gnunet-service-messenger_basement.c
207src/messenger/gnunet-service-messenger_ego_store.c 207src/messenger/gnunet-service-messenger_ego_store.c
208src/messenger/gnunet-service-messenger_handle.c 208src/messenger/gnunet-service-messenger_handle.c
209src/messenger/gnunet-service-messenger_list_handles.c 209src/messenger/gnunet-service-messenger_list_handles.c
@@ -243,8 +243,8 @@ src/namecache/namecache_api.c
243src/namecache/plugin_namecache_flat.c 243src/namecache/plugin_namecache_flat.c
244src/namecache/plugin_namecache_postgres.c 244src/namecache/plugin_namecache_postgres.c
245src/namecache/plugin_namecache_sqlite.c 245src/namecache/plugin_namecache_sqlite.c
246src/namestore/gnunet-namestore.c
247src/namestore/gnunet-namestore-fcfsd.c 246src/namestore/gnunet-namestore-fcfsd.c
247src/namestore/gnunet-namestore.c
248src/namestore/gnunet-service-namestore.c 248src/namestore/gnunet-service-namestore.c
249src/namestore/gnunet-zoneimport.c 249src/namestore/gnunet-zoneimport.c
250src/namestore/namestore_api.c 250src/namestore/namestore_api.c
@@ -270,17 +270,17 @@ src/nat/gnunet-service-nat_mini.c
270src/nat/gnunet-service-nat_stun.c 270src/nat/gnunet-service-nat_stun.c
271src/nat/nat_api.c 271src/nat/nat_api.c
272src/nat/nat_api_stun.c 272src/nat/nat_api_stun.c
273src/nse/gnunet-nse.c
274src/nse/gnunet-nse-profiler.c 273src/nse/gnunet-nse-profiler.c
274src/nse/gnunet-nse.c
275src/nse/gnunet-service-nse.c 275src/nse/gnunet-service-nse.c
276src/nse/nse_api.c 276src/nse/nse_api.c
277src/nt/nt.c 277src/nt/nt.c
278src/peerinfo/gnunet-service-peerinfo.c
279src/peerinfo/peerinfo_api.c
280src/peerinfo/peerinfo_api_notify.c
281src/peerinfo-tool/gnunet-peerinfo.c 278src/peerinfo-tool/gnunet-peerinfo.c
282src/peerinfo-tool/gnunet-peerinfo_plugins.c 279src/peerinfo-tool/gnunet-peerinfo_plugins.c
283src/peerinfo-tool/plugin_rest_peerinfo.c 280src/peerinfo-tool/plugin_rest_peerinfo.c
281src/peerinfo/gnunet-service-peerinfo.c
282src/peerinfo/peerinfo_api.c
283src/peerinfo/peerinfo_api_notify.c
284src/peerstore/gnunet-peerstore.c 284src/peerstore/gnunet-peerstore.c
285src/peerstore/gnunet-service-peerstore.c 285src/peerstore/gnunet-service-peerstore.c
286src/peerstore/peerstore_api.c 286src/peerstore/peerstore_api.c
@@ -332,27 +332,27 @@ src/rest/gnunet-rest-server.c
332src/rest/plugin_rest_config.c 332src/rest/plugin_rest_config.c
333src/rest/plugin_rest_copying.c 333src/rest/plugin_rest_copying.c
334src/rest/rest.c 334src/rest/rest.c
335src/revocation/gnunet-revocation.c
336src/revocation/gnunet-revocation-tvg.c 335src/revocation/gnunet-revocation-tvg.c
336src/revocation/gnunet-revocation.c
337src/revocation/gnunet-service-revocation.c 337src/revocation/gnunet-service-revocation.c
338src/revocation/plugin_block_revocation.c 338src/revocation/plugin_block_revocation.c
339src/revocation/revocation_api.c 339src/revocation/revocation_api.c
340src/rps/gnunet-rps.c
341src/rps/gnunet-rps-profiler.c 340src/rps/gnunet-rps-profiler.c
341src/rps/gnunet-rps.c
342src/rps/gnunet-service-rps.c 342src/rps/gnunet-service-rps.c
343src/rps/gnunet-service-rps_custommap.c 343src/rps/gnunet-service-rps_custommap.c
344src/rps/gnunet-service-rps_sampler.c 344src/rps/gnunet-service-rps_sampler.c
345src/rps/gnunet-service-rps_sampler_elem.c 345src/rps/gnunet-service-rps_sampler_elem.c
346src/rps/gnunet-service-rps_view.c 346src/rps/gnunet-service-rps_view.c
347src/rps/rps_api.c
348src/rps/rps-sampler_client.c 347src/rps/rps-sampler_client.c
349src/rps/rps-sampler_common.c 348src/rps/rps-sampler_common.c
350src/rps/rps-test_util.c 349src/rps/rps-test_util.c
350src/rps/rps_api.c
351src/scalarproduct/gnunet-scalarproduct.c 351src/scalarproduct/gnunet-scalarproduct.c
352src/scalarproduct/gnunet-service-scalarproduct_alice.c
353src/scalarproduct/gnunet-service-scalarproduct_bob.c
354src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c 352src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c
355src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c 353src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c
354src/scalarproduct/gnunet-service-scalarproduct_alice.c
355src/scalarproduct/gnunet-service-scalarproduct_bob.c
356src/scalarproduct/scalarproduct_api.c 356src/scalarproduct/scalarproduct_api.c
357src/secretsharing/gnunet-secretsharing-profiler.c 357src/secretsharing/gnunet-secretsharing-profiler.c
358src/secretsharing/gnunet-service-secretsharing.c 358src/secretsharing/gnunet-service-secretsharing.c
@@ -366,12 +366,12 @@ src/set/gnunet-set-ibf-profiler.c
366src/set/gnunet-set-profiler.c 366src/set/gnunet-set-profiler.c
367src/set/ibf.c 367src/set/ibf.c
368src/set/ibf_sim.c 368src/set/ibf_sim.c
369src/set/plugin_block_set_test.c
370src/set/set_api.c
369src/seti/gnunet-service-seti.c 371src/seti/gnunet-service-seti.c
370src/seti/gnunet-seti-profiler.c 372src/seti/gnunet-seti-profiler.c
371src/seti/plugin_block_seti_test.c 373src/seti/plugin_block_seti_test.c
372src/seti/seti_api.c 374src/seti/seti_api.c
373src/set/plugin_block_set_test.c
374src/set/set_api.c
375src/setu/gnunet-service-setu.c 375src/setu/gnunet-service-setu.c
376src/setu/gnunet-service-setu_strata_estimator.c 376src/setu/gnunet-service-setu_strata_estimator.c
377src/setu/gnunet-setu-ibf-profiler.c 377src/setu/gnunet-setu-ibf-profiler.c
@@ -390,15 +390,16 @@ src/statistics/gnunet-statistics.c
390src/statistics/statistics_api.c 390src/statistics/statistics_api.c
391src/template/gnunet-service-template.c 391src/template/gnunet-service-template.c
392src/template/gnunet-template.c 392src/template/gnunet-template.c
393src/testbed-logger/gnunet-service-testbed-logger.c
394src/testbed-logger/testbed_logger_api.c
393src/testbed/generate-underlay-topology.c 395src/testbed/generate-underlay-topology.c
394src/testbed/gnunet-daemon-latency-logger.c 396src/testbed/gnunet-daemon-latency-logger.c
395src/testbed/gnunet-daemon-testbed-blacklist.c 397src/testbed/gnunet-daemon-testbed-blacklist.c
396src/testbed/gnunet-daemon-testbed-underlay.c 398src/testbed/gnunet-daemon-testbed-underlay.c
397src/testbed/gnunet-helper-testbed.c 399src/testbed/gnunet-helper-testbed.c
398src/testbed/gnunet_mpi_test.c
399src/testbed/gnunet-service-test-barriers.c 400src/testbed/gnunet-service-test-barriers.c
400src/testbed/gnunet-service-testbed_barriers.c
401src/testbed/gnunet-service-testbed.c 401src/testbed/gnunet-service-testbed.c
402src/testbed/gnunet-service-testbed_barriers.c
402src/testbed/gnunet-service-testbed_cache.c 403src/testbed/gnunet-service-testbed_cache.c
403src/testbed/gnunet-service-testbed_connectionpool.c 404src/testbed/gnunet-service-testbed_connectionpool.c
404src/testbed/gnunet-service-testbed_cpustatus.c 405src/testbed/gnunet-service-testbed_cpustatus.c
@@ -407,23 +408,23 @@ src/testbed/gnunet-service-testbed_meminfo.c
407src/testbed/gnunet-service-testbed_oc.c 408src/testbed/gnunet-service-testbed_oc.c
408src/testbed/gnunet-service-testbed_peers.c 409src/testbed/gnunet-service-testbed_peers.c
409src/testbed/gnunet-testbed-profiler.c 410src/testbed/gnunet-testbed-profiler.c
410src/testbed-logger/gnunet-service-testbed-logger.c 411src/testbed/gnunet_mpi_test.c
411src/testbed-logger/testbed_logger_api.c
412src/testbed/testbed_api_barriers.c
413src/testbed/testbed_api.c 412src/testbed/testbed_api.c
413src/testbed/testbed_api_barriers.c
414src/testbed/testbed_api_hosts.c 414src/testbed/testbed_api_hosts.c
415src/testbed/testbed_api_operations.c 415src/testbed/testbed_api_operations.c
416src/testbed/testbed_api_peers.c 416src/testbed/testbed_api_peers.c
417src/testbed/testbed_api_sd.c 417src/testbed/testbed_api_sd.c
418src/testbed/testbed_api_services.c 418src/testbed/testbed_api_services.c
419src/testbed/testbed_api_statistics.c 419src/testbed/testbed_api_statistics.c
420src/testbed/testbed_api_testbed.c
421src/testbed/testbed_api_test.c 420src/testbed/testbed_api_test.c
421src/testbed/testbed_api_testbed.c
422src/testbed/testbed_api_topology.c 422src/testbed/testbed_api_topology.c
423src/testbed/testbed_api_underlay.c 423src/testbed/testbed_api_underlay.c
424src/testing/gnunet-cmds-helper.c 424src/testing/gnunet-cmds-helper.c
425src/testing/gnunet-testing.c 425src/testing/gnunet-testing.c
426src/testing/list-keys.c 426src/testing/list-keys.c
427src/testing/testing.c
427src/testing/testing_api_cmd_batch.c 428src/testing/testing_api_cmd_batch.c
428src/testing/testing_api_cmd_block_until_external_trigger.c 429src/testing/testing_api_cmd_block_until_external_trigger.c
429src/testing/testing_api_cmd_end.c 430src/testing/testing_api_cmd_end.c
@@ -439,41 +440,51 @@ src/testing/testing_api_cmd_system_create.c
439src/testing/testing_api_cmd_system_destroy.c 440src/testing/testing_api_cmd_system_destroy.c
440src/testing/testing_api_loop.c 441src/testing/testing_api_loop.c
441src/testing/testing_api_traits.c 442src/testing/testing_api_traits.c
442src/testing/testing.c
443src/topology/friends.c 443src/topology/friends.c
444src/topology/gnunet-daemon-topology.c 444src/topology/gnunet-daemon-topology.c
445src/transport/gnunet-communicator-tcp.c 445src/transport/gnunet-communicator-tcp.c
446src/transport/gnunet-communicator-udp.c 446src/transport/gnunet-communicator-udp.c
447src/transport/gnunet-communicator-unix.c 447src/transport/gnunet-communicator-unix.c
448src/transport/gnunet-helper-transport-bluetooth.c 448src/transport/gnunet-helper-transport-bluetooth.c
449src/transport/gnunet-helper-transport-wlan.c
450src/transport/gnunet-helper-transport-wlan-dummy.c 449src/transport/gnunet-helper-transport-wlan-dummy.c
450src/transport/gnunet-helper-transport-wlan.c
451src/transport/gnunet-service-tng.c 451src/transport/gnunet-service-tng.c
452src/transport/gnunet-service-transport_ats.c
453src/transport/gnunet-service-transport.c 452src/transport/gnunet-service-transport.c
453src/transport/gnunet-service-transport_ats.c
454src/transport/gnunet-service-transport_hello.c 454src/transport/gnunet-service-transport_hello.c
455src/transport/gnunet-service-transport_manipulation.c 455src/transport/gnunet-service-transport_manipulation.c
456src/transport/gnunet-service-transport_neighbours.c 456src/transport/gnunet-service-transport_neighbours.c
457src/transport/gnunet-service-transport_plugins.c 457src/transport/gnunet-service-transport_plugins.c
458src/transport/gnunet-service-transport_validation.c 458src/transport/gnunet-service-transport_validation.c
459src/transport/gnunet-transport.c
460src/transport/gnunet-transport-profiler.c 459src/transport/gnunet-transport-profiler.c
461src/transport/gnunet-transport-wlan-receiver.c 460src/transport/gnunet-transport-wlan-receiver.c
462src/transport/gnunet-transport-wlan-sender.c 461src/transport/gnunet-transport-wlan-sender.c
462src/transport/gnunet-transport.c
463src/transport/plugin_transport_http_client.c 463src/transport/plugin_transport_http_client.c
464src/transport/plugin_transport_http_common.c 464src/transport/plugin_transport_http_common.c
465src/transport/plugin_transport_http_server.c 465src/transport/plugin_transport_http_server.c
466src/transport/plugin_transport_smtp.c 466src/transport/plugin_transport_smtp.c
467src/transport/plugin_transport_tcp.c 467src/transport/plugin_transport_tcp.c
468src/transport/plugin_transport_template.c 468src/transport/plugin_transport_template.c
469src/transport/plugin_transport_udp_broadcasting.c
470src/transport/plugin_transport_udp.c 469src/transport/plugin_transport_udp.c
470src/transport/plugin_transport_udp_broadcasting.c
471src/transport/plugin_transport_unix.c 471src/transport/plugin_transport_unix.c
472src/transport/plugin_transport_wlan.c 472src/transport/plugin_transport_wlan.c
473src/transport/tcp_connection_legacy.c 473src/transport/tcp_connection_legacy.c
474src/transport/tcp_server_legacy.c 474src/transport/tcp_server_legacy.c
475src/transport/tcp_server_mst_legacy.c 475src/transport/tcp_server_mst_legacy.c
476src/transport/tcp_service_legacy.c 476src/transport/tcp_service_legacy.c
477src/transport/transport-testing-communicator.c
478src/transport/transport-testing-filenames.c
479src/transport/transport-testing-filenames2.c
480src/transport/transport-testing-loggers.c
481src/transport/transport-testing-loggers2.c
482src/transport/transport-testing-main.c
483src/transport/transport-testing-main2.c
484src/transport/transport-testing-send.c
485src/transport/transport-testing-send2.c
486src/transport/transport-testing.c
487src/transport/transport-testing2.c
477src/transport/transport_api2_application.c 488src/transport/transport_api2_application.c
478src/transport/transport_api2_communication.c 489src/transport/transport_api2_communication.c
479src/transport/transport_api2_core.c 490src/transport/transport_api2_core.c
@@ -492,17 +503,6 @@ src/transport/transport_api_monitor_peers.c
492src/transport/transport_api_monitor_plugins.c 503src/transport/transport_api_monitor_plugins.c
493src/transport/transport_api_offer_hello.c 504src/transport/transport_api_offer_hello.c
494src/transport/transport_api_traits.c 505src/transport/transport_api_traits.c
495src/transport/transport-testing2.c
496src/transport/transport-testing.c
497src/transport/transport-testing-communicator.c
498src/transport/transport-testing-filenames2.c
499src/transport/transport-testing-filenames.c
500src/transport/transport-testing-loggers2.c
501src/transport/transport-testing-loggers.c
502src/transport/transport-testing-main2.c
503src/transport/transport-testing-main.c
504src/transport/transport-testing-send2.c
505src/transport/transport-testing-send.c
506src/util/bandwidth.c 506src/util/bandwidth.c
507src/util/benchmark.c 507src/util/benchmark.c
508src/util/bio.c 508src/util/bio.c
@@ -518,8 +518,8 @@ src/util/consttime_memcmp.c
518src/util/container_bloomfilter.c 518src/util/container_bloomfilter.c
519src/util/container_heap.c 519src/util/container_heap.c
520src/util/container_meta_data.c 520src/util/container_meta_data.c
521src/util/container_multihashmap32.c
522src/util/container_multihashmap.c 521src/util/container_multihashmap.c
522src/util/container_multihashmap32.c
523src/util/container_multipeermap.c 523src/util/container_multipeermap.c
524src/util/container_multishortmap.c 524src/util/container_multishortmap.c
525src/util/container_multiuuidmap.c 525src/util/container_multiuuidmap.c
@@ -530,6 +530,7 @@ src/util/crypto_ecc.c
530src/util/crypto_ecc_dlog.c 530src/util/crypto_ecc_dlog.c
531src/util/crypto_ecc_gnsrecord.c 531src/util/crypto_ecc_gnsrecord.c
532src/util/crypto_ecc_setup.c 532src/util/crypto_ecc_setup.c
533src/util/crypto_edx25519.c
533src/util/crypto_hash.c 534src/util/crypto_hash.c
534src/util/crypto_hash_file.c 535src/util/crypto_hash_file.c
535src/util/crypto_hkdf.c 536src/util/crypto_hkdf.c
@@ -546,8 +547,8 @@ src/util/dnsstub.c
546src/util/getopt.c 547src/util/getopt.c
547src/util/getopt_helpers.c 548src/util/getopt_helpers.c
548src/util/gnunet-base32.c 549src/util/gnunet-base32.c
549src/util/gnunet-config.c
550src/util/gnunet-config-diff.c 550src/util/gnunet-config-diff.c
551src/util/gnunet-config.c
551src/util/gnunet-crypto-tvg.c 552src/util/gnunet-crypto-tvg.c
552src/util/gnunet-ecc.c 553src/util/gnunet-ecc.c
553src/util/gnunet-qr.c 554src/util/gnunet-qr.c
@@ -585,8 +586,8 @@ src/vpn/gnunet-helper-vpn.c
585src/vpn/gnunet-service-vpn.c 586src/vpn/gnunet-service-vpn.c
586src/vpn/gnunet-vpn.c 587src/vpn/gnunet-vpn.c
587src/vpn/vpn_api.c 588src/vpn/vpn_api.c
588src/zonemaster/gnunet-service-zonemaster.c
589src/zonemaster/gnunet-service-zonemaster-monitor.c 589src/zonemaster/gnunet-service-zonemaster-monitor.c
590src/zonemaster/gnunet-service-zonemaster.c
590src/fs/fs_api.h 591src/fs/fs_api.h
591src/include/gnunet_json_lib.h 592src/include/gnunet_json_lib.h
592src/testbed/testbed_api.h 593src/testbed/testbed_api.h
diff --git a/po/de.po b/po/de.po
index a30b16bc2..b81215608 100644
--- a/po/de.po
+++ b/po/de.po
@@ -10,7 +10,7 @@ msgid ""
10msgstr "" 10msgstr ""
11"Project-Id-Version: gnunet 0.10.1\n" 11"Project-Id-Version: gnunet 0.10.1\n"
12"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n" 12"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
13"POT-Creation-Date: 2022-03-04 22:23+0100\n" 13"POT-Creation-Date: 2022-04-01 08:42+0200\n"
14"PO-Revision-Date: 2015-03-08 16:16+0100\n" 14"PO-Revision-Date: 2015-03-08 16:16+0100\n"
15"Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com>\n" 15"Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com>\n"
16"Language-Team: German <translation-team-de@lists.sourceforge.net>\n" 16"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
@@ -21,7 +21,7 @@ msgstr ""
21"Plural-Forms: nplurals=2; plural=(n != 1);\n" 21"Plural-Forms: nplurals=2; plural=(n != 1);\n"
22"X-Generator: Poedit 1.7.4\n" 22"X-Generator: Poedit 1.7.4\n"
23 23
24#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1254 24#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1245
25#, fuzzy, c-format 25#, fuzzy, c-format
26msgid "Ego `%s' not known to identity service\n" 26msgid "Ego `%s' not known to identity service\n"
27msgstr "`%s': unbekannter Dienst: %s\n" 27msgstr "`%s': unbekannter Dienst: %s\n"
@@ -2103,21 +2103,6 @@ msgstr ""
2103msgid "Measure quality and performance of the DHT service." 2103msgid "Measure quality and performance of the DHT service."
2104msgstr "" 2104msgstr ""
2105 2105
2106#: src/dht/plugin_block_dht.c:404
2107#, fuzzy, c-format
2108msgid "Block not of type %u\n"
2109msgstr "Kein Transport des Typs %d bekannt.\n"
2110
2111#: src/dht/plugin_block_dht.c:413
2112#, c-format
2113msgid "Size mismatch for block with type %u\n"
2114msgstr ""
2115
2116#: src/dht/plugin_block_dht.c:424
2117#, c-format
2118msgid "Block of type %u is malformed\n"
2119msgstr ""
2120
2121#: src/dns/gnunet-dns-monitor.c:371 src/dns/gnunet-dns-monitor.c:376 2106#: src/dns/gnunet-dns-monitor.c:371 src/dns/gnunet-dns-monitor.c:376
2122msgid "only monitor DNS queries" 2107msgid "only monitor DNS queries"
2123msgstr "" 2108msgstr ""
@@ -2850,20 +2835,20 @@ msgstr ""
2850msgid "LOC URI malformed (signature failed validation)" 2835msgid "LOC URI malformed (signature failed validation)"
2851msgstr "" 2836msgstr ""
2852 2837
2853#: src/fs/fs_uri.c:652 2838#: src/fs/fs_uri.c:653
2854#, fuzzy 2839#, fuzzy
2855msgid "invalid argument" 2840msgid "invalid argument"
2856msgstr "Ungültiges Argument »%s«\n" 2841msgstr "Ungültiges Argument »%s«\n"
2857 2842
2858#: src/fs/fs_uri.c:671 2843#: src/fs/fs_uri.c:673
2859msgid "Unrecognized URI type" 2844msgid "Unrecognized URI type"
2860msgstr "" 2845msgstr ""
2861 2846
2862#: src/fs/fs_uri.c:1075 src/fs/fs_uri.c:1102 2847#: src/fs/fs_uri.c:1077 src/fs/fs_uri.c:1104
2863msgid "No keywords specified!\n" 2848msgid "No keywords specified!\n"
2864msgstr "Keine Schlüsselwörter angegeben!\n" 2849msgstr "Keine Schlüsselwörter angegeben!\n"
2865 2850
2866#: src/fs/fs_uri.c:1108 2851#: src/fs/fs_uri.c:1110
2867msgid "Number of double-quotes not balanced!\n" 2852msgid "Number of double-quotes not balanced!\n"
2868msgstr "" 2853msgstr ""
2869 2854
@@ -3606,99 +3591,99 @@ msgstr "# dht Anfragen weitergeleitet"
3606msgid "# query plan entries" 3591msgid "# query plan entries"
3607msgstr "" 3592msgstr ""
3608 3593
3609#: src/fs/gnunet-service-fs_pr.c:329 3594#: src/fs/gnunet-service-fs_pr.c:330
3610#, fuzzy 3595#, fuzzy
3611msgid "# Pending requests created" 3596msgid "# Pending requests created"
3612msgstr "# dht Anfragen weitergeleitet" 3597msgstr "# dht Anfragen weitergeleitet"
3613 3598
3614#: src/fs/gnunet-service-fs_pr.c:421 src/fs/gnunet-service-fs_pr.c:658 3599#: src/fs/gnunet-service-fs_pr.c:422 src/fs/gnunet-service-fs_pr.c:662
3615#, fuzzy 3600#, fuzzy
3616msgid "# Pending requests active" 3601msgid "# Pending requests active"
3617msgstr "# Client Trace-Anfragen empfangen" 3602msgstr "# Client Trace-Anfragen empfangen"
3618 3603
3619#: src/fs/gnunet-service-fs_pr.c:838 3604#: src/fs/gnunet-service-fs_pr.c:837
3620#, fuzzy 3605#, fuzzy
3621msgid "# replies received and matched" 3606msgid "# replies received and matched"
3622msgstr "# Bytes empfangen über TCP" 3607msgstr "# Bytes empfangen über TCP"
3623 3608
3624#: src/fs/gnunet-service-fs_pr.c:916 3609#: src/fs/gnunet-service-fs_pr.c:911
3625msgid "# results found locally" 3610msgid "# results found locally"
3626msgstr "" 3611msgstr ""
3627 3612
3628#: src/fs/gnunet-service-fs_pr.c:1050 3613#: src/fs/gnunet-service-fs_pr.c:1045
3629msgid "# Datastore `PUT' failures" 3614msgid "# Datastore `PUT' failures"
3630msgstr "" 3615msgstr ""
3631 3616
3632#: src/fs/gnunet-service-fs_pr.c:1079 3617#: src/fs/gnunet-service-fs_pr.c:1074
3633#, fuzzy 3618#, fuzzy
3634msgid "# storage requests dropped due to high load" 3619msgid "# storage requests dropped due to high load"
3635msgstr "# Knotenankündigungen empfangen" 3620msgstr "# Knotenankündigungen empfangen"
3636 3621
3637#: src/fs/gnunet-service-fs_pr.c:1118 3622#: src/fs/gnunet-service-fs_pr.c:1113
3638#, fuzzy 3623#, fuzzy
3639msgid "# Replies received from DHT" 3624msgid "# Replies received from DHT"
3640msgstr "# Bytes empfangen über HTTP" 3625msgstr "# Bytes empfangen über HTTP"
3641 3626
3642#: src/fs/gnunet-service-fs_pr.c:1259 3627#: src/fs/gnunet-service-fs_pr.c:1268
3643#, fuzzy 3628#, fuzzy
3644msgid "# Replies received from CADET" 3629msgid "# Replies received from CADET"
3645msgstr "# Bytes empfangen über HTTP" 3630msgstr "# Bytes empfangen über HTTP"
3646 3631
3647#: src/fs/gnunet-service-fs_pr.c:1313 3632#: src/fs/gnunet-service-fs_pr.c:1323
3648#, c-format 3633#, c-format
3649msgid "Datastore lookup already took %s!\n" 3634msgid "Datastore lookup already took %s!\n"
3650msgstr "" 3635msgstr ""
3651 3636
3652#: src/fs/gnunet-service-fs_pr.c:1334 3637#: src/fs/gnunet-service-fs_pr.c:1344
3653#, c-format 3638#, c-format
3654msgid "On-demand lookup already took %s!\n" 3639msgid "On-demand lookup already took %s!\n"
3655msgstr "" 3640msgstr ""
3656 3641
3657#: src/fs/gnunet-service-fs_pr.c:1401 3642#: src/fs/gnunet-service-fs_pr.c:1411
3658msgid "# requested DBLOCK or IBLOCK not found" 3643msgid "# requested DBLOCK or IBLOCK not found"
3659msgstr "" 3644msgstr ""
3660 3645
3661#: src/fs/gnunet-service-fs_pr.c:1463 3646#: src/fs/gnunet-service-fs_pr.c:1473
3662msgid "# Datastore lookups concluded (error queueing)" 3647msgid "# Datastore lookups concluded (error queueing)"
3663msgstr "" 3648msgstr ""
3664 3649
3665#: src/fs/gnunet-service-fs_pr.c:1518 3650#: src/fs/gnunet-service-fs_pr.c:1528
3666msgid "# Datastore lookups concluded (no results)" 3651msgid "# Datastore lookups concluded (no results)"
3667msgstr "" 3652msgstr ""
3668 3653
3669#: src/fs/gnunet-service-fs_pr.c:1533 3654#: src/fs/gnunet-service-fs_pr.c:1543
3670msgid "# Datastore lookups concluded (seen all)" 3655msgid "# Datastore lookups concluded (seen all)"
3671msgstr "" 3656msgstr ""
3672 3657
3673#: src/fs/gnunet-service-fs_pr.c:1556 3658#: src/fs/gnunet-service-fs_pr.c:1566
3674msgid "# Datastore lookups aborted (more than MAX_RESULTS)" 3659msgid "# Datastore lookups aborted (more than MAX_RESULTS)"
3675msgstr "" 3660msgstr ""
3676 3661
3677#: src/fs/gnunet-service-fs_pr.c:1573 3662#: src/fs/gnunet-service-fs_pr.c:1583
3678msgid "# on-demand blocks matched requests" 3663msgid "# on-demand blocks matched requests"
3679msgstr "" 3664msgstr ""
3680 3665
3681#: src/fs/gnunet-service-fs_pr.c:1594 3666#: src/fs/gnunet-service-fs_pr.c:1604
3682msgid "# on-demand lookups performed successfully" 3667msgid "# on-demand lookups performed successfully"
3683msgstr "" 3668msgstr ""
3684 3669
3685#: src/fs/gnunet-service-fs_pr.c:1600 3670#: src/fs/gnunet-service-fs_pr.c:1610
3686msgid "# on-demand lookups failed" 3671msgid "# on-demand lookups failed"
3687msgstr "" 3672msgstr ""
3688 3673
3689#: src/fs/gnunet-service-fs_pr.c:1641 3674#: src/fs/gnunet-service-fs_pr.c:1656
3690msgid "# Datastore lookups concluded (found last result)" 3675msgid "# Datastore lookups concluded (found last result)"
3691msgstr "" 3676msgstr ""
3692 3677
3693#: src/fs/gnunet-service-fs_pr.c:1654 3678#: src/fs/gnunet-service-fs_pr.c:1669
3694msgid "# Datastore lookups concluded (load too high)" 3679msgid "# Datastore lookups concluded (load too high)"
3695msgstr "" 3680msgstr ""
3696 3681
3697#: src/fs/gnunet-service-fs_pr.c:1705 3682#: src/fs/gnunet-service-fs_pr.c:1720
3698msgid "# Datastore lookups initiated" 3683msgid "# Datastore lookups initiated"
3699msgstr "" 3684msgstr ""
3700 3685
3701#: src/fs/gnunet-service-fs_pr.c:1755 3686#: src/fs/gnunet-service-fs_pr.c:1784
3702#, fuzzy 3687#, fuzzy
3703msgid "# GAP PUT messages received" 3688msgid "# GAP PUT messages received"
3704msgstr "# verschlüsselter PONG Nachrichten empfangen" 3689msgstr "# verschlüsselter PONG Nachrichten empfangen"
@@ -4016,65 +4001,65 @@ msgstr "Fehler beim Konvertieren von Parametern in URI!\n"
4016msgid "Failed to connect to the DNS service!\n" 4001msgid "Failed to connect to the DNS service!\n"
4017msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n" 4002msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
4018 4003
4019#: src/gns/gnunet-service-gns_resolver.c:659 4004#: src/gns/gnunet-service-gns_resolver.c:672
4020#, c-format 4005#, c-format
4021msgid "Protocol `%s' unknown, skipping labels.\n" 4006msgid "Protocol `%s' unknown, skipping labels.\n"
4022msgstr "" 4007msgstr ""
4023 4008
4024#: src/gns/gnunet-service-gns_resolver.c:671 4009#: src/gns/gnunet-service-gns_resolver.c:684
4025#, c-format 4010#, c-format
4026msgid "Service `%s' unknown for protocol `%s', trying as number.\n" 4011msgid "Service `%s' unknown for protocol `%s', trying as number.\n"
4027msgstr "" 4012msgstr ""
4028 4013
4029#: src/gns/gnunet-service-gns_resolver.c:677 4014#: src/gns/gnunet-service-gns_resolver.c:690
4030#, fuzzy, c-format 4015#, fuzzy, c-format
4031msgid "Service `%s' not a port, skipping service labels.\n" 4016msgid "Service `%s' not a port, skipping service labels.\n"
4032msgstr "Kommando `%s' wurde nicht gefunden!\n" 4017msgstr "Kommando `%s' wurde nicht gefunden!\n"
4033 4018
4034#: src/gns/gnunet-service-gns_resolver.c:891 4019#: src/gns/gnunet-service-gns_resolver.c:904
4035#, fuzzy 4020#, fuzzy
4036msgid "Failed to parse DNS response\n" 4021msgid "Failed to parse DNS response\n"
4037msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n" 4022msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n"
4038 4023
4039#: src/gns/gnunet-service-gns_resolver.c:1082 4024#: src/gns/gnunet-service-gns_resolver.c:1095
4040#, c-format 4025#, c-format
4041msgid "Skipping record of unsupported type %d\n" 4026msgid "Skipping record of unsupported type %d\n"
4042msgstr "" 4027msgstr ""
4043 4028
4044#: src/gns/gnunet-service-gns_resolver.c:1859 4029#: src/gns/gnunet-service-gns_resolver.c:1872
4045#, c-format 4030#, c-format
4046msgid "Name `%s' cannot be converted to IDNA." 4031msgid "Name `%s' cannot be converted to IDNA."
4047msgstr "" 4032msgstr ""
4048 4033
4049#: src/gns/gnunet-service-gns_resolver.c:1874 4034#: src/gns/gnunet-service-gns_resolver.c:1887
4050#, c-format 4035#, c-format
4051msgid "GNS lookup resulted in DNS name that is too long (`%s')\n" 4036msgid "GNS lookup resulted in DNS name that is too long (`%s')\n"
4052msgstr "" 4037msgstr ""
4053 4038
4054#: src/gns/gnunet-service-gns_resolver.c:1914 4039#: src/gns/gnunet-service-gns_resolver.c:1927
4055#, fuzzy, c-format 4040#, fuzzy, c-format
4056msgid "GNS lookup failed (zero records found for `%s')\n" 4041msgid "GNS lookup failed (zero records found for `%s')\n"
4057msgstr "Dienst `%s' konnte nicht ordentlich entladen werden!\n" 4042msgstr "Dienst `%s' konnte nicht ordentlich entladen werden!\n"
4058 4043
4059#: src/gns/gnunet-service-gns_resolver.c:2312 4044#: src/gns/gnunet-service-gns_resolver.c:2329
4060msgid "Unable to process critical delegation record\n" 4045msgid "Unable to process critical delegation record\n"
4061msgstr "" 4046msgstr ""
4062 4047
4063#: src/gns/gnunet-service-gns_resolver.c:2317 4048#: src/gns/gnunet-service-gns_resolver.c:2334
4064msgid "GNS lookup recursion failed (no delegation record found)\n" 4049msgid "GNS lookup recursion failed (no delegation record found)\n"
4065msgstr "" 4050msgstr ""
4066 4051
4067#: src/gns/gnunet-service-gns_resolver.c:2340 4052#: src/gns/gnunet-service-gns_resolver.c:2357
4068#, fuzzy, c-format 4053#, fuzzy, c-format
4069msgid "Failed to cache GNS resolution: %s\n" 4054msgid "Failed to cache GNS resolution: %s\n"
4070msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n" 4055msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
4071 4056
4072#: src/gns/gnunet-service-gns_resolver.c:2505 4057#: src/gns/gnunet-service-gns_resolver.c:2522
4073#, c-format 4058#, c-format
4074msgid "GNS namecache returned empty result for `%s'\n" 4059msgid "GNS namecache returned empty result for `%s'\n"
4075msgstr "" 4060msgstr ""
4076 4061
4077#: src/gns/gnunet-service-gns_resolver.c:2652 4062#: src/gns/gnunet-service-gns_resolver.c:2669
4078#, c-format 4063#, c-format
4079msgid "Zone %s was revoked, resolution fails\n" 4064msgid "Zone %s was revoked, resolution fails\n"
4080msgstr "" 4065msgstr ""
@@ -4117,31 +4102,39 @@ msgstr "Fehler beim Speichern der Konfigurationsdatei `%s':"
4117msgid "Gns REST API initialized\n" 4102msgid "Gns REST API initialized\n"
4118msgstr " Verbindung fehlgeschlagen\n" 4103msgstr " Verbindung fehlgeschlagen\n"
4119 4104
4120#: src/gnsrecord/gnsrecord_misc.c:448 4105#: src/gnsrecord/gnsrecord_misc.c:52
4106msgid "Label is NULL which is not allowed\n"
4107msgstr ""
4108
4109#: src/gnsrecord/gnsrecord_misc.c:57
4110msgid "Label contains `.' which is not allowed\n"
4111msgstr ""
4112
4113#: src/gnsrecord/gnsrecord_misc.c:464
4121msgid "Zone delegation record not allowed in apex." 4114msgid "Zone delegation record not allowed in apex."
4122msgstr "" 4115msgstr ""
4123 4116
4124#: src/gnsrecord/gnsrecord_misc.c:456 4117#: src/gnsrecord/gnsrecord_misc.c:472
4125msgid "Zone delegation record set contains mutually exclusive records." 4118msgid "Zone delegation record set contains mutually exclusive records."
4126msgstr "" 4119msgstr ""
4127 4120
4128#: src/gnsrecord/gnsrecord_misc.c:466 4121#: src/gnsrecord/gnsrecord_misc.c:482
4129msgid "Multiple REDIRECT records." 4122msgid "Multiple REDIRECT records."
4130msgstr "" 4123msgstr ""
4131 4124
4132#: src/gnsrecord/gnsrecord_misc.c:475 src/gnsrecord/gnsrecord_misc.c:501 4125#: src/gnsrecord/gnsrecord_misc.c:491 src/gnsrecord/gnsrecord_misc.c:517
4133msgid "Redirection record set conains mutually exclusive records." 4126msgid "Redirection record set conains mutually exclusive records."
4134msgstr "" 4127msgstr ""
4135 4128
4136#: src/gnsrecord/gnsrecord_misc.c:482 4129#: src/gnsrecord/gnsrecord_misc.c:498
4137msgid "Redirection records not allowed in apex." 4130msgid "Redirection records not allowed in apex."
4138msgstr "" 4131msgstr ""
4139 4132
4140#: src/gnsrecord/gnsrecord_misc.c:493 4133#: src/gnsrecord/gnsrecord_misc.c:509
4141msgid "Redirection records not allowed in apex.." 4134msgid "Redirection records not allowed in apex.."
4142msgstr "" 4135msgstr ""
4143 4136
4144#: src/gnsrecord/gnsrecord_misc.c:515 4137#: src/gnsrecord/gnsrecord_misc.c:531
4145msgid "Mutually exclusive records." 4138msgid "Mutually exclusive records."
4146msgstr "" 4139msgstr ""
4147 4140
@@ -4713,12 +4706,18 @@ msgstr ""
4713msgid "Failed to parse JSON in option `%s': %s (%s)\n" 4706msgid "Failed to parse JSON in option `%s': %s (%s)\n"
4714msgstr "Datei wurde als `%s' gespeichert.\n" 4707msgstr "Datei wurde als `%s' gespeichert.\n"
4715 4708
4716#: src/messenger/plugin_gnsrecord_messenger.c:118 4709#: src/messenger/plugin_gnsrecord_messenger.c:136
4717#: src/messenger/plugin_gnsrecord_messenger.c:133 4710#: src/messenger/plugin_gnsrecord_messenger.c:151
4718#, fuzzy, c-format 4711#, fuzzy, c-format
4719msgid "Unable to parse MESSENGER_ROOM_ENTRY record `%s'\n" 4712msgid "Unable to parse MESSENGER_ROOM_ENTRY record `%s'\n"
4720msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n" 4713msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n"
4721 4714
4715#: src/messenger/plugin_gnsrecord_messenger.c:172
4716#: src/messenger/plugin_gnsrecord_messenger.c:187
4717#, fuzzy, c-format
4718msgid "Unable to parse MESSENGER_ROOM_DETAILS record `%s'\n"
4719msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n"
4720
4722#: src/my/my.c:196 src/my/my.c:215 4721#: src/my/my.c:196 src/my/my.c:215
4723#, fuzzy, c-format 4722#, fuzzy, c-format
4724msgid "%s failed at %s:%d with error: %s\n" 4723msgid "%s failed at %s:%d with error: %s\n"
@@ -4759,7 +4758,7 @@ msgstr "Ungültiger Parameter: `%s'\n"
4759msgid "You must specify a name\n" 4758msgid "You must specify a name\n"
4760msgstr "Sie müssen einen Empfänger angeben!\n" 4759msgstr "Sie müssen einen Empfänger angeben!\n"
4761 4760
4762#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1591 4761#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1582
4763msgid "name of the record to add/delete/display" 4762msgid "name of the record to add/delete/display"
4764msgstr "" 4763msgstr ""
4765 4764
@@ -4768,7 +4767,7 @@ msgstr ""
4768msgid "specifies the public key of the zone to look in" 4767msgid "specifies the public key of the zone to look in"
4769msgstr "Die Priorität des Inhalts angeben" 4768msgstr "Die Priorität des Inhalts angeben"
4770 4769
4771#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1652 4770#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1643
4772#, fuzzy 4771#, fuzzy
4773msgid "GNUnet zone manipulation tool" 4772msgid "GNUnet zone manipulation tool"
4774msgstr "GNUnet Konfiguration" 4773msgstr "GNUnet Konfiguration"
@@ -5017,12 +5016,7 @@ msgstr ""
5017msgid "Invalid URI `%s'\n" 5016msgid "Invalid URI `%s'\n"
5018msgstr "Ungültiger Parameter: `%s'\n" 5017msgstr "Ungültiger Parameter: `%s'\n"
5019 5018
5020#: src/namestore/gnunet-namestore.c:1242 5019#: src/namestore/gnunet-namestore.c:1283
5021#, c-format
5022msgid "Label `%s' contains `.' which is not allowed\n"
5023msgstr ""
5024
5025#: src/namestore/gnunet-namestore.c:1292
5026#, c-format 5020#, c-format
5027msgid "" 5021msgid ""
5028"No default identity configured for `namestore' subsystem\n" 5022"No default identity configured for `namestore' subsystem\n"
@@ -5030,99 +5024,99 @@ msgid ""
5030"Run gnunet-identity -d to get a list of choices for $NAME\n" 5024"Run gnunet-identity -d to get a list of choices for $NAME\n"
5031msgstr "" 5025msgstr ""
5032 5026
5033#: src/namestore/gnunet-namestore.c:1357 5027#: src/namestore/gnunet-namestore.c:1348
5034#, c-format 5028#, c-format
5035msgid "Superfluous command line arguments (starting with `%s') ignored\n" 5029msgid "Superfluous command line arguments (starting with `%s') ignored\n"
5036msgstr "" 5030msgstr ""
5037 5031
5038#: src/namestore/gnunet-namestore.c:1386 5032#: src/namestore/gnunet-namestore.c:1377
5039#, fuzzy, c-format 5033#, fuzzy, c-format
5040msgid "Cannot connect to identity service\n" 5034msgid "Cannot connect to identity service\n"
5041msgstr "Verbindung zu %u.%u.%u.%u:%u fehlgeschlagen: %s\n" 5035msgstr "Verbindung zu %u.%u.%u.%u:%u fehlgeschlagen: %s\n"
5042 5036
5043#: src/namestore/gnunet-namestore.c:1433 5037#: src/namestore/gnunet-namestore.c:1424
5044msgid "Empty record line argument is not allowed.\n" 5038msgid "Empty record line argument is not allowed.\n"
5045msgstr "" 5039msgstr ""
5046 5040
5047#: src/namestore/gnunet-namestore.c:1445 5041#: src/namestore/gnunet-namestore.c:1436
5048#, c-format 5042#, c-format
5049msgid "Invalid expiration time `%s' (must be without unit)\n" 5043msgid "Invalid expiration time `%s' (must be without unit)\n"
5050msgstr "" 5044msgstr ""
5051 5045
5052#: src/namestore/gnunet-namestore.c:1457 src/namestore/gnunet-namestore.c:1473 5046#: src/namestore/gnunet-namestore.c:1448 src/namestore/gnunet-namestore.c:1464
5053#: src/namestore/gnunet-namestore.c:1490 5047#: src/namestore/gnunet-namestore.c:1481
5054#, fuzzy, c-format 5048#, fuzzy, c-format
5055msgid "Missing entries in record line `%s'.\n" 5049msgid "Missing entries in record line `%s'.\n"
5056msgstr "Anwendung `%s' konnte nicht initialisiert werden.\n" 5050msgstr "Anwendung `%s' konnte nicht initialisiert werden.\n"
5057 5051
5058#: src/namestore/gnunet-namestore.c:1465 5052#: src/namestore/gnunet-namestore.c:1456
5059#, fuzzy, c-format 5053#, fuzzy, c-format
5060msgid "Unknown record type `%s'\n" 5054msgid "Unknown record type `%s'\n"
5061msgstr "Unbekannter Befehl »%s«\n" 5055msgstr "Unbekannter Befehl »%s«\n"
5062 5056
5063#: src/namestore/gnunet-namestore.c:1503 5057#: src/namestore/gnunet-namestore.c:1494
5064#, fuzzy, c-format 5058#, fuzzy, c-format
5065msgid "Invalid record data for type %s: `%s'.\n" 5059msgid "Invalid record data for type %s: `%s'.\n"
5066msgstr "Ungültiges Format für IP: »%s«\n" 5060msgstr "Ungültiges Format für IP: »%s«\n"
5067 5061
5068#: src/namestore/gnunet-namestore.c:1560 5062#: src/namestore/gnunet-namestore.c:1551
5069msgid "add record" 5063msgid "add record"
5070msgstr "" 5064msgstr ""
5071 5065
5072#: src/namestore/gnunet-namestore.c:1563 5066#: src/namestore/gnunet-namestore.c:1554
5073msgid "delete record" 5067msgid "delete record"
5074msgstr "" 5068msgstr ""
5075 5069
5076#: src/namestore/gnunet-namestore.c:1567 5070#: src/namestore/gnunet-namestore.c:1558
5077msgid "display records" 5071msgid "display records"
5078msgstr "" 5072msgstr ""
5079 5073
5080#: src/namestore/gnunet-namestore.c:1574 5074#: src/namestore/gnunet-namestore.c:1565
5081msgid "" 5075msgid ""
5082"expiration time for record to use (for adding only), \"never\" is possible" 5076"expiration time for record to use (for adding only), \"never\" is possible"
5083msgstr "" 5077msgstr ""
5084 5078
5085#: src/namestore/gnunet-namestore.c:1580 5079#: src/namestore/gnunet-namestore.c:1571
5086msgid "set the desired nick name for the zone" 5080msgid "set the desired nick name for the zone"
5087msgstr "" 5081msgstr ""
5088 5082
5089#: src/namestore/gnunet-namestore.c:1585 5083#: src/namestore/gnunet-namestore.c:1576
5090msgid "monitor changes in the namestore" 5084msgid "monitor changes in the namestore"
5091msgstr "" 5085msgstr ""
5092 5086
5093#: src/namestore/gnunet-namestore.c:1597 5087#: src/namestore/gnunet-namestore.c:1588
5094msgid "determine our name for the given PKEY" 5088msgid "determine our name for the given PKEY"
5095msgstr "" 5089msgstr ""
5096 5090
5097#: src/namestore/gnunet-namestore.c:1604 5091#: src/namestore/gnunet-namestore.c:1595
5098msgid "" 5092msgid ""
5099"set record set to values given by (possibly multiple) RECORDLINES; can be " 5093"set record set to values given by (possibly multiple) RECORDLINES; can be "
5100"specified multiple times" 5094"specified multiple times"
5101msgstr "" 5095msgstr ""
5102 5096
5103#: src/namestore/gnunet-namestore.c:1610 5097#: src/namestore/gnunet-namestore.c:1601
5104msgid "type of the record to add/delete/display" 5098msgid "type of the record to add/delete/display"
5105msgstr "" 5099msgstr ""
5106 5100
5107#: src/namestore/gnunet-namestore.c:1615 5101#: src/namestore/gnunet-namestore.c:1606
5108msgid "URI to import into our zone" 5102msgid "URI to import into our zone"
5109msgstr "" 5103msgstr ""
5110 5104
5111#: src/namestore/gnunet-namestore.c:1621 5105#: src/namestore/gnunet-namestore.c:1612
5112msgid "value of the record to add/delete" 5106msgid "value of the record to add/delete"
5113msgstr "" 5107msgstr ""
5114 5108
5115#: src/namestore/gnunet-namestore.c:1625 5109#: src/namestore/gnunet-namestore.c:1616
5116msgid "create or list public record" 5110msgid "create or list public record"
5117msgstr "" 5111msgstr ""
5118 5112
5119#: src/namestore/gnunet-namestore.c:1631 5113#: src/namestore/gnunet-namestore.c:1622
5120msgid "" 5114msgid ""
5121"create shadow record (only valid if all other records of the same type have " 5115"create shadow record (only valid if all other records of the same type have "
5122"expired" 5116"expired"
5123msgstr "" 5117msgstr ""
5124 5118
5125#: src/namestore/gnunet-namestore.c:1637 5119#: src/namestore/gnunet-namestore.c:1628
5126msgid "name of the ego controlling the zone" 5120msgid "name of the ego controlling the zone"
5127msgstr "" 5121msgstr ""
5128 5122
@@ -5131,7 +5125,17 @@ msgstr ""
5131msgid "Failed to replicate block in namecache: %s\n" 5125msgid "Failed to replicate block in namecache: %s\n"
5132msgstr "" 5126msgstr ""
5133 5127
5134#: src/namestore/gnunet-service-namestore.c:1668 5128#: src/namestore/gnunet-service-namestore.c:1559
5129#, fuzzy
5130msgid "Error normalizing name."
5131msgstr "Fehler beim Anlegen des Tunnels\n"
5132
5133#: src/namestore/gnunet-service-namestore.c:1582
5134#, fuzzy
5135msgid "Error deserializing records."
5136msgstr "=\tFehler beim Lesen des Verzeichnisses.\n"
5137
5138#: src/namestore/gnunet-service-namestore.c:1691
5135#, fuzzy 5139#, fuzzy
5136msgid "Store failed" 5140msgid "Store failed"
5137msgstr "Verbindung fehlgeschlagen: %s\n" 5141msgstr "Verbindung fehlgeschlagen: %s\n"
@@ -6880,8 +6884,8 @@ msgid "GNUnet topology control"
6880msgstr "" 6884msgstr ""
6881 6885
6882#: src/transport/gnunet-communicator-tcp.c:3338 6886#: src/transport/gnunet-communicator-tcp.c:3338
6883#: src/transport/gnunet-communicator-udp.c:3856 6887#: src/transport/gnunet-communicator-udp.c:3867
6884#: src/transport/gnunet-service-tng.c:10623 6888#: src/transport/gnunet-service-tng.c:10926
6885#: src/transport/gnunet-service-transport.c:2627 6889#: src/transport/gnunet-service-transport.c:2627
6886msgid "Transport service is lacking key configuration settings. Exiting.\n" 6890msgid "Transport service is lacking key configuration settings. Exiting.\n"
6887msgstr "" 6891msgstr ""
@@ -6890,7 +6894,7 @@ msgstr ""
6890msgid "GNUnet TCP communicator" 6894msgid "GNUnet TCP communicator"
6891msgstr "" 6895msgstr ""
6892 6896
6893#: src/transport/gnunet-communicator-udp.c:3931 6897#: src/transport/gnunet-communicator-udp.c:3942
6894msgid "GNUnet UDP communicator" 6898msgid "GNUnet UDP communicator"
6895msgstr "" 6899msgstr ""
6896 6900
@@ -8261,12 +8265,12 @@ msgid "libgcrypt has not the expected version (version %s is required).\n"
8261msgstr "" 8265msgstr ""
8262"libgcrypt hat nicht die erwartete Version (Version %s wird vorausgesetzt).\n" 8266"libgcrypt hat nicht die erwartete Version (Version %s wird vorausgesetzt).\n"
8263 8267
8264#: src/util/crypto_rsa.c:901 8268#: src/util/crypto_rsa.c:907
8265#, fuzzy, c-format 8269#, fuzzy, c-format
8266msgid "RSA signing failed at %s:%d: %s\n" 8270msgid "RSA signing failed at %s:%d: %s\n"
8267msgstr "`%s' schlug fehl bei %s:%d mit dem Fehler: `%s'.\n" 8271msgstr "`%s' schlug fehl bei %s:%d mit dem Fehler: `%s'.\n"
8268 8272
8269#: src/util/crypto_rsa.c:1201 8273#: src/util/crypto_rsa.c:1207
8270#, fuzzy, c-format 8274#, fuzzy, c-format
8271msgid "RSA signature verification failed at %s:%d: %s\n" 8275msgid "RSA signature verification failed at %s:%d: %s\n"
8272msgstr "RSA Signaturüberprüfung fehlgeschlagen bei %s:%d: %s\n" 8276msgstr "RSA Signaturüberprüfung fehlgeschlagen bei %s:%d: %s\n"
@@ -8946,12 +8950,12 @@ msgstr "Falsches Format `%s' für Netzmaske: %s\n"
8946msgid "Wrong format `%s' for network\n" 8950msgid "Wrong format `%s' for network\n"
8947msgstr "Falsches Format `%s' für Netzwerk: %s\n" 8951msgstr "Falsches Format `%s' für Netzwerk: %s\n"
8948 8952
8949#: src/util/time.c:870 src/util/time.c:898 8953#: src/util/time.c:900 src/util/time.c:928
8950#, c-format 8954#, c-format
8951msgid "Failed to map `%s', cannot assure monotonic time!\n" 8955msgid "Failed to map `%s', cannot assure monotonic time!\n"
8952msgstr "" 8956msgstr ""
8953 8957
8954#: src/util/time.c:906 8958#: src/util/time.c:936
8955#, c-format 8959#, c-format
8956msgid "" 8960msgid ""
8957"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n" 8961"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"
@@ -9137,6 +9141,10 @@ msgstr "Tunnel über VPN einrichten."
9137msgid "Failed to connect to the namestore!\n" 9141msgid "Failed to connect to the namestore!\n"
9138msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n" 9142msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
9139 9143
9144#, fuzzy, c-format
9145#~ msgid "Block not of type %u\n"
9146#~ msgstr "Kein Transport des Typs %d bekannt.\n"
9147
9140#~ msgid "# items stored" 9148#~ msgid "# items stored"
9141#~ msgstr "# gespeicherte Objekte" 9149#~ msgstr "# gespeicherte Objekte"
9142 9150
diff --git a/po/es.po b/po/es.po
index 27a21fc63..cf7e0b79d 100644
--- a/po/es.po
+++ b/po/es.po
@@ -8,7 +8,7 @@ msgid ""
8msgstr "" 8msgstr ""
9"Project-Id-Version: gnunet 0.9.5a\n" 9"Project-Id-Version: gnunet 0.9.5a\n"
10"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n" 10"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
11"POT-Creation-Date: 2022-03-04 22:23+0100\n" 11"POT-Creation-Date: 2022-04-01 08:42+0200\n"
12"PO-Revision-Date: 2013-02-23 17:50+0100\n" 12"PO-Revision-Date: 2013-02-23 17:50+0100\n"
13"Last-Translator: Miguel Ángel Arruga Vivas <rosen644835@gmail.com>\n" 13"Last-Translator: Miguel Ángel Arruga Vivas <rosen644835@gmail.com>\n"
14"Language-Team: Spanish <es@li.org>\n" 14"Language-Team: Spanish <es@li.org>\n"
@@ -18,7 +18,7 @@ msgstr ""
18"Content-Transfer-Encoding: 8bit\n" 18"Content-Transfer-Encoding: 8bit\n"
19"Plural-Forms: nplurals=2; plural=(n != 1);\n" 19"Plural-Forms: nplurals=2; plural=(n != 1);\n"
20 20
21#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1254 21#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1245
22#, fuzzy, c-format 22#, fuzzy, c-format
23msgid "Ego `%s' not known to identity service\n" 23msgid "Ego `%s' not known to identity service\n"
24msgstr "'%s': servicio desconocido: %s\n" 24msgstr "'%s': servicio desconocido: %s\n"
@@ -2194,21 +2194,6 @@ msgstr ""
2194msgid "Measure quality and performance of the DHT service." 2194msgid "Measure quality and performance of the DHT service."
2195msgstr "Medir la calidad y rendimiento del servicio NSE." 2195msgstr "Medir la calidad y rendimiento del servicio NSE."
2196 2196
2197#: src/dht/plugin_block_dht.c:404
2198#, c-format
2199msgid "Block not of type %u\n"
2200msgstr "El bloque no es del tipo %u\n"
2201
2202#: src/dht/plugin_block_dht.c:413
2203#, fuzzy, c-format
2204msgid "Size mismatch for block with type %u\n"
2205msgstr "Discrepancias de tamaños para el bloque\n"
2206
2207#: src/dht/plugin_block_dht.c:424
2208#, c-format
2209msgid "Block of type %u is malformed\n"
2210msgstr "El bloque del tipo %u está mal formado\n"
2211
2212#: src/dns/gnunet-dns-monitor.c:371 src/dns/gnunet-dns-monitor.c:376 2197#: src/dns/gnunet-dns-monitor.c:371 src/dns/gnunet-dns-monitor.c:376
2213msgid "only monitor DNS queries" 2198msgid "only monitor DNS queries"
2214msgstr "sólo monitorizar consultas DNS" 2199msgstr "sólo monitorizar consultas DNS"
@@ -2972,20 +2957,20 @@ msgstr "URI SKS mal formada (no se encuentra el tiempo de expiración)"
2972msgid "LOC URI malformed (signature failed validation)" 2957msgid "LOC URI malformed (signature failed validation)"
2973msgstr "URI SKS mal formada (se produjo un fallo al validar la firma)" 2958msgstr "URI SKS mal formada (se produjo un fallo al validar la firma)"
2974 2959
2975#: src/fs/fs_uri.c:652 2960#: src/fs/fs_uri.c:653
2976#, fuzzy 2961#, fuzzy
2977msgid "invalid argument" 2962msgid "invalid argument"
2978msgstr "Parámetro no válido «%s»\n" 2963msgstr "Parámetro no válido «%s»\n"
2979 2964
2980#: src/fs/fs_uri.c:671 2965#: src/fs/fs_uri.c:673
2981msgid "Unrecognized URI type" 2966msgid "Unrecognized URI type"
2982msgstr "Tipo de URI no reconocido" 2967msgstr "Tipo de URI no reconocido"
2983 2968
2984#: src/fs/fs_uri.c:1075 src/fs/fs_uri.c:1102 2969#: src/fs/fs_uri.c:1077 src/fs/fs_uri.c:1104
2985msgid "No keywords specified!\n" 2970msgid "No keywords specified!\n"
2986msgstr "¡Ninguna palabra clave especificada!\n" 2971msgstr "¡Ninguna palabra clave especificada!\n"
2987 2972
2988#: src/fs/fs_uri.c:1108 2973#: src/fs/fs_uri.c:1110
2989msgid "Number of double-quotes not balanced!\n" 2974msgid "Number of double-quotes not balanced!\n"
2990msgstr "¡Número de comillas dobles no balanceado!\n" 2975msgstr "¡Número de comillas dobles no balanceado!\n"
2991 2976
@@ -3740,95 +3725,95 @@ msgstr "# peticiones refrescadas"
3740msgid "# query plan entries" 3725msgid "# query plan entries"
3741msgstr "# entradas de planes de búsqueda" 3726msgstr "# entradas de planes de búsqueda"
3742 3727
3743#: src/fs/gnunet-service-fs_pr.c:329 3728#: src/fs/gnunet-service-fs_pr.c:330
3744msgid "# Pending requests created" 3729msgid "# Pending requests created"
3745msgstr "# Peticiones pendientes creadas" 3730msgstr "# Peticiones pendientes creadas"
3746 3731
3747#: src/fs/gnunet-service-fs_pr.c:421 src/fs/gnunet-service-fs_pr.c:658 3732#: src/fs/gnunet-service-fs_pr.c:422 src/fs/gnunet-service-fs_pr.c:662
3748msgid "# Pending requests active" 3733msgid "# Pending requests active"
3749msgstr "# Peticiones pendientes activas" 3734msgstr "# Peticiones pendientes activas"
3750 3735
3751#: src/fs/gnunet-service-fs_pr.c:838 3736#: src/fs/gnunet-service-fs_pr.c:837
3752msgid "# replies received and matched" 3737msgid "# replies received and matched"
3753msgstr "# respuestas recibidas y asociadas" 3738msgstr "# respuestas recibidas y asociadas"
3754 3739
3755#: src/fs/gnunet-service-fs_pr.c:916 3740#: src/fs/gnunet-service-fs_pr.c:911
3756msgid "# results found locally" 3741msgid "# results found locally"
3757msgstr "# resultados hallados localmente" 3742msgstr "# resultados hallados localmente"
3758 3743
3759#: src/fs/gnunet-service-fs_pr.c:1050 3744#: src/fs/gnunet-service-fs_pr.c:1045
3760msgid "# Datastore `PUT' failures" 3745msgid "# Datastore `PUT' failures"
3761msgstr "# «PUT» en el almacén de datos fallidos" 3746msgstr "# «PUT» en el almacén de datos fallidos"
3762 3747
3763#: src/fs/gnunet-service-fs_pr.c:1079 3748#: src/fs/gnunet-service-fs_pr.c:1074
3764msgid "# storage requests dropped due to high load" 3749msgid "# storage requests dropped due to high load"
3765msgstr "# peticiones de almacenamiento omitidas debido a alta carga" 3750msgstr "# peticiones de almacenamiento omitidas debido a alta carga"
3766 3751
3767#: src/fs/gnunet-service-fs_pr.c:1118 3752#: src/fs/gnunet-service-fs_pr.c:1113
3768msgid "# Replies received from DHT" 3753msgid "# Replies received from DHT"
3769msgstr "# Respuestas recibidas de la DHT" 3754msgstr "# Respuestas recibidas de la DHT"
3770 3755
3771#: src/fs/gnunet-service-fs_pr.c:1259 3756#: src/fs/gnunet-service-fs_pr.c:1268
3772#, fuzzy 3757#, fuzzy
3773msgid "# Replies received from CADET" 3758msgid "# Replies received from CADET"
3774msgstr "# Respuestas recibidas de la DHT" 3759msgstr "# Respuestas recibidas de la DHT"
3775 3760
3776#: src/fs/gnunet-service-fs_pr.c:1313 3761#: src/fs/gnunet-service-fs_pr.c:1323
3777#, c-format 3762#, c-format
3778msgid "Datastore lookup already took %s!\n" 3763msgid "Datastore lookup already took %s!\n"
3779msgstr "¡La búsqueda en el almacén de datos toma %s!\n" 3764msgstr "¡La búsqueda en el almacén de datos toma %s!\n"
3780 3765
3781#: src/fs/gnunet-service-fs_pr.c:1334 3766#: src/fs/gnunet-service-fs_pr.c:1344
3782#, c-format 3767#, c-format
3783msgid "On-demand lookup already took %s!\n" 3768msgid "On-demand lookup already took %s!\n"
3784msgstr "¡La búsqueda en bajo demanda toma %s!\n" 3769msgstr "¡La búsqueda en bajo demanda toma %s!\n"
3785 3770
3786#: src/fs/gnunet-service-fs_pr.c:1401 3771#: src/fs/gnunet-service-fs_pr.c:1411
3787msgid "# requested DBLOCK or IBLOCK not found" 3772msgid "# requested DBLOCK or IBLOCK not found"
3788msgstr "# «DBLOCK» o «IBLOCK» pedido no encontrado" 3773msgstr "# «DBLOCK» o «IBLOCK» pedido no encontrado"
3789 3774
3790#: src/fs/gnunet-service-fs_pr.c:1463 3775#: src/fs/gnunet-service-fs_pr.c:1473
3791msgid "# Datastore lookups concluded (error queueing)" 3776msgid "# Datastore lookups concluded (error queueing)"
3792msgstr "# Búsquedas en el almacén de datos finalizadas (error encolando)" 3777msgstr "# Búsquedas en el almacén de datos finalizadas (error encolando)"
3793 3778
3794#: src/fs/gnunet-service-fs_pr.c:1518 3779#: src/fs/gnunet-service-fs_pr.c:1528
3795msgid "# Datastore lookups concluded (no results)" 3780msgid "# Datastore lookups concluded (no results)"
3796msgstr "# Búsquedas en el almacén de datos finalizadas (sin resultados)" 3781msgstr "# Búsquedas en el almacén de datos finalizadas (sin resultados)"
3797 3782
3798#: src/fs/gnunet-service-fs_pr.c:1533 3783#: src/fs/gnunet-service-fs_pr.c:1543
3799msgid "# Datastore lookups concluded (seen all)" 3784msgid "# Datastore lookups concluded (seen all)"
3800msgstr "# Búsquedas en el almacén de datos finalizadas (vistos todos)" 3785msgstr "# Búsquedas en el almacén de datos finalizadas (vistos todos)"
3801 3786
3802#: src/fs/gnunet-service-fs_pr.c:1556 3787#: src/fs/gnunet-service-fs_pr.c:1566
3803msgid "# Datastore lookups aborted (more than MAX_RESULTS)" 3788msgid "# Datastore lookups aborted (more than MAX_RESULTS)"
3804msgstr "# Búsquedas en el almacén de datos finalizadas (más de «MAX_RESULTS»)" 3789msgstr "# Búsquedas en el almacén de datos finalizadas (más de «MAX_RESULTS»)"
3805 3790
3806#: src/fs/gnunet-service-fs_pr.c:1573 3791#: src/fs/gnunet-service-fs_pr.c:1583
3807msgid "# on-demand blocks matched requests" 3792msgid "# on-demand blocks matched requests"
3808msgstr "# peticiones asociadas de bloques bajo demanda" 3793msgstr "# peticiones asociadas de bloques bajo demanda"
3809 3794
3810#: src/fs/gnunet-service-fs_pr.c:1594 3795#: src/fs/gnunet-service-fs_pr.c:1604
3811msgid "# on-demand lookups performed successfully" 3796msgid "# on-demand lookups performed successfully"
3812msgstr "# búsquedas satisfactorias de bloques bajo demanda" 3797msgstr "# búsquedas satisfactorias de bloques bajo demanda"
3813 3798
3814#: src/fs/gnunet-service-fs_pr.c:1600 3799#: src/fs/gnunet-service-fs_pr.c:1610
3815msgid "# on-demand lookups failed" 3800msgid "# on-demand lookups failed"
3816msgstr "# búsquedas fallidas de bloques bajo demanda" 3801msgstr "# búsquedas fallidas de bloques bajo demanda"
3817 3802
3818#: src/fs/gnunet-service-fs_pr.c:1641 3803#: src/fs/gnunet-service-fs_pr.c:1656
3819msgid "# Datastore lookups concluded (found last result)" 3804msgid "# Datastore lookups concluded (found last result)"
3820msgstr "" 3805msgstr ""
3821"# Búsquedas en el almacén de datos finalizadas (encontrado último resultado)" 3806"# Búsquedas en el almacén de datos finalizadas (encontrado último resultado)"
3822 3807
3823#: src/fs/gnunet-service-fs_pr.c:1654 3808#: src/fs/gnunet-service-fs_pr.c:1669
3824msgid "# Datastore lookups concluded (load too high)" 3809msgid "# Datastore lookups concluded (load too high)"
3825msgstr "# Búsquedas en el almacén de datos finalizadas (carga demasiado alta)" 3810msgstr "# Búsquedas en el almacén de datos finalizadas (carga demasiado alta)"
3826 3811
3827#: src/fs/gnunet-service-fs_pr.c:1705 3812#: src/fs/gnunet-service-fs_pr.c:1720
3828msgid "# Datastore lookups initiated" 3813msgid "# Datastore lookups initiated"
3829msgstr "# Búsquedas en el almacén de datos iniciadas" 3814msgstr "# Búsquedas en el almacén de datos iniciadas"
3830 3815
3831#: src/fs/gnunet-service-fs_pr.c:1755 3816#: src/fs/gnunet-service-fs_pr.c:1784
3832msgid "# GAP PUT messages received" 3817msgid "# GAP PUT messages received"
3833msgstr "# Mensajes «GAP PUT» recibidos" 3818msgstr "# Mensajes «GAP PUT» recibidos"
3834 3819
@@ -4145,65 +4130,65 @@ msgstr "¡Se produjo un error al convertir los argumentos a una URI!\n"
4145msgid "Failed to connect to the DNS service!\n" 4130msgid "Failed to connect to the DNS service!\n"
4146msgstr "¡Se produjo un fallo al conectar con el servicio GNS!\n" 4131msgstr "¡Se produjo un fallo al conectar con el servicio GNS!\n"
4147 4132
4148#: src/gns/gnunet-service-gns_resolver.c:659 4133#: src/gns/gnunet-service-gns_resolver.c:672
4149#, fuzzy, c-format 4134#, fuzzy, c-format
4150msgid "Protocol `%s' unknown, skipping labels.\n" 4135msgid "Protocol `%s' unknown, skipping labels.\n"
4151msgstr "Módulo «%s» no encontrado\n" 4136msgstr "Módulo «%s» no encontrado\n"
4152 4137
4153#: src/gns/gnunet-service-gns_resolver.c:671 4138#: src/gns/gnunet-service-gns_resolver.c:684
4154#, c-format 4139#, c-format
4155msgid "Service `%s' unknown for protocol `%s', trying as number.\n" 4140msgid "Service `%s' unknown for protocol `%s', trying as number.\n"
4156msgstr "" 4141msgstr ""
4157 4142
4158#: src/gns/gnunet-service-gns_resolver.c:677 4143#: src/gns/gnunet-service-gns_resolver.c:690
4159#, fuzzy, c-format 4144#, fuzzy, c-format
4160msgid "Service `%s' not a port, skipping service labels.\n" 4145msgid "Service `%s' not a port, skipping service labels.\n"
4161msgstr "Módulo «%s» no encontrado\n" 4146msgstr "Módulo «%s» no encontrado\n"
4162 4147
4163#: src/gns/gnunet-service-gns_resolver.c:891 4148#: src/gns/gnunet-service-gns_resolver.c:904
4164#, fuzzy 4149#, fuzzy
4165msgid "Failed to parse DNS response\n" 4150msgid "Failed to parse DNS response\n"
4166msgstr "Se produjo un fallo al procesar la petición DNS. Omitiendo.\n" 4151msgstr "Se produjo un fallo al procesar la petición DNS. Omitiendo.\n"
4167 4152
4168#: src/gns/gnunet-service-gns_resolver.c:1082 4153#: src/gns/gnunet-service-gns_resolver.c:1095
4169#, c-format 4154#, c-format
4170msgid "Skipping record of unsupported type %d\n" 4155msgid "Skipping record of unsupported type %d\n"
4171msgstr "" 4156msgstr ""
4172 4157
4173#: src/gns/gnunet-service-gns_resolver.c:1859 4158#: src/gns/gnunet-service-gns_resolver.c:1872
4174#, c-format 4159#, c-format
4175msgid "Name `%s' cannot be converted to IDNA." 4160msgid "Name `%s' cannot be converted to IDNA."
4176msgstr "" 4161msgstr ""
4177 4162
4178#: src/gns/gnunet-service-gns_resolver.c:1874 4163#: src/gns/gnunet-service-gns_resolver.c:1887
4179#, c-format 4164#, c-format
4180msgid "GNS lookup resulted in DNS name that is too long (`%s')\n" 4165msgid "GNS lookup resulted in DNS name that is too long (`%s')\n"
4181msgstr "" 4166msgstr ""
4182 4167
4183#: src/gns/gnunet-service-gns_resolver.c:1914 4168#: src/gns/gnunet-service-gns_resolver.c:1927
4184#, fuzzy, c-format 4169#, fuzzy, c-format
4185msgid "GNS lookup failed (zero records found for `%s')\n" 4170msgid "GNS lookup failed (zero records found for `%s')\n"
4186msgstr "No se han encontrado ficheros en «%s»\n" 4171msgstr "No se han encontrado ficheros en «%s»\n"
4187 4172
4188#: src/gns/gnunet-service-gns_resolver.c:2312 4173#: src/gns/gnunet-service-gns_resolver.c:2329
4189msgid "Unable to process critical delegation record\n" 4174msgid "Unable to process critical delegation record\n"
4190msgstr "" 4175msgstr ""
4191 4176
4192#: src/gns/gnunet-service-gns_resolver.c:2317 4177#: src/gns/gnunet-service-gns_resolver.c:2334
4193msgid "GNS lookup recursion failed (no delegation record found)\n" 4178msgid "GNS lookup recursion failed (no delegation record found)\n"
4194msgstr "" 4179msgstr ""
4195 4180
4196#: src/gns/gnunet-service-gns_resolver.c:2340 4181#: src/gns/gnunet-service-gns_resolver.c:2357
4197#, fuzzy, c-format 4182#, fuzzy, c-format
4198msgid "Failed to cache GNS resolution: %s\n" 4183msgid "Failed to cache GNS resolution: %s\n"
4199msgstr "Se produjo un fallo al mandar la petición DNS a %s\n" 4184msgstr "Se produjo un fallo al mandar la petición DNS a %s\n"
4200 4185
4201#: src/gns/gnunet-service-gns_resolver.c:2505 4186#: src/gns/gnunet-service-gns_resolver.c:2522
4202#, c-format 4187#, c-format
4203msgid "GNS namecache returned empty result for `%s'\n" 4188msgid "GNS namecache returned empty result for `%s'\n"
4204msgstr "" 4189msgstr ""
4205 4190
4206#: src/gns/gnunet-service-gns_resolver.c:2652 4191#: src/gns/gnunet-service-gns_resolver.c:2669
4207#, c-format 4192#, c-format
4208msgid "Zone %s was revoked, resolution fails\n" 4193msgid "Zone %s was revoked, resolution fails\n"
4209msgstr "" 4194msgstr ""
@@ -4248,31 +4233,39 @@ msgstr "No se pudo procesar la cadena de registro VPN «%s»\n"
4248msgid "Gns REST API initialized\n" 4233msgid "Gns REST API initialized\n"
4249msgstr "Conexión fallida\n" 4234msgstr "Conexión fallida\n"
4250 4235
4251#: src/gnsrecord/gnsrecord_misc.c:448 4236#: src/gnsrecord/gnsrecord_misc.c:52
4237msgid "Label is NULL which is not allowed\n"
4238msgstr ""
4239
4240#: src/gnsrecord/gnsrecord_misc.c:57
4241msgid "Label contains `.' which is not allowed\n"
4242msgstr ""
4243
4244#: src/gnsrecord/gnsrecord_misc.c:464
4252msgid "Zone delegation record not allowed in apex." 4245msgid "Zone delegation record not allowed in apex."
4253msgstr "" 4246msgstr ""
4254 4247
4255#: src/gnsrecord/gnsrecord_misc.c:456 4248#: src/gnsrecord/gnsrecord_misc.c:472
4256msgid "Zone delegation record set contains mutually exclusive records." 4249msgid "Zone delegation record set contains mutually exclusive records."
4257msgstr "" 4250msgstr ""
4258 4251
4259#: src/gnsrecord/gnsrecord_misc.c:466 4252#: src/gnsrecord/gnsrecord_misc.c:482
4260msgid "Multiple REDIRECT records." 4253msgid "Multiple REDIRECT records."
4261msgstr "" 4254msgstr ""
4262 4255
4263#: src/gnsrecord/gnsrecord_misc.c:475 src/gnsrecord/gnsrecord_misc.c:501 4256#: src/gnsrecord/gnsrecord_misc.c:491 src/gnsrecord/gnsrecord_misc.c:517
4264msgid "Redirection record set conains mutually exclusive records." 4257msgid "Redirection record set conains mutually exclusive records."
4265msgstr "" 4258msgstr ""
4266 4259
4267#: src/gnsrecord/gnsrecord_misc.c:482 4260#: src/gnsrecord/gnsrecord_misc.c:498
4268msgid "Redirection records not allowed in apex." 4261msgid "Redirection records not allowed in apex."
4269msgstr "" 4262msgstr ""
4270 4263
4271#: src/gnsrecord/gnsrecord_misc.c:493 4264#: src/gnsrecord/gnsrecord_misc.c:509
4272msgid "Redirection records not allowed in apex.." 4265msgid "Redirection records not allowed in apex.."
4273msgstr "" 4266msgstr ""
4274 4267
4275#: src/gnsrecord/gnsrecord_misc.c:515 4268#: src/gnsrecord/gnsrecord_misc.c:531
4276msgid "Mutually exclusive records." 4269msgid "Mutually exclusive records."
4277msgstr "" 4270msgstr ""
4278 4271
@@ -4883,12 +4876,18 @@ msgstr "Conexión fallida\n"
4883msgid "Failed to parse JSON in option `%s': %s (%s)\n" 4876msgid "Failed to parse JSON in option `%s': %s (%s)\n"
4884msgstr "Se produjo un fallo al procesar «HELLO» en el fichero «%s»\n" 4877msgstr "Se produjo un fallo al procesar «HELLO» en el fichero «%s»\n"
4885 4878
4886#: src/messenger/plugin_gnsrecord_messenger.c:118 4879#: src/messenger/plugin_gnsrecord_messenger.c:136
4887#: src/messenger/plugin_gnsrecord_messenger.c:133 4880#: src/messenger/plugin_gnsrecord_messenger.c:151
4888#, fuzzy, c-format 4881#, fuzzy, c-format
4889msgid "Unable to parse MESSENGER_ROOM_ENTRY record `%s'\n" 4882msgid "Unable to parse MESSENGER_ROOM_ENTRY record `%s'\n"
4890msgstr "No se pudo procesar el registro SOA «%s»\n" 4883msgstr "No se pudo procesar el registro SOA «%s»\n"
4891 4884
4885#: src/messenger/plugin_gnsrecord_messenger.c:172
4886#: src/messenger/plugin_gnsrecord_messenger.c:187
4887#, fuzzy, c-format
4888msgid "Unable to parse MESSENGER_ROOM_DETAILS record `%s'\n"
4889msgstr "No se pudo procesar el registro SOA «%s»\n"
4890
4892#: src/my/my.c:196 src/my/my.c:215 4891#: src/my/my.c:196 src/my/my.c:215
4893#, fuzzy, c-format 4892#, fuzzy, c-format
4894msgid "%s failed at %s:%d with error: %s\n" 4893msgid "%s failed at %s:%d with error: %s\n"
@@ -4929,7 +4928,7 @@ msgstr "Parámetro no válido «%s»\n"
4929msgid "You must specify a name\n" 4928msgid "You must specify a name\n"
4930msgstr "¡Debes especificar un receptor!\n" 4929msgstr "¡Debes especificar un receptor!\n"
4931 4930
4932#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1591 4931#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1582
4933msgid "name of the record to add/delete/display" 4932msgid "name of the record to add/delete/display"
4934msgstr "nombre del registro a añadir/borrar/mostrar" 4933msgstr "nombre del registro a añadir/borrar/mostrar"
4935 4934
@@ -4938,7 +4937,7 @@ msgstr "nombre del registro a añadir/borrar/mostrar"
4938msgid "specifies the public key of the zone to look in" 4937msgid "specifies the public key of the zone to look in"
4939msgstr "Especificar el tipo del registro a buscar" 4938msgstr "Especificar el tipo del registro a buscar"
4940 4939
4941#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1652 4940#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1643
4942msgid "GNUnet zone manipulation tool" 4941msgid "GNUnet zone manipulation tool"
4943msgstr "Herramienta de manipulación de zona de GNUnet" 4942msgstr "Herramienta de manipulación de zona de GNUnet"
4944 4943
@@ -5191,12 +5190,7 @@ msgstr "Parámetro no válido «%s»\n"
5191msgid "Invalid URI `%s'\n" 5190msgid "Invalid URI `%s'\n"
5192msgstr "URI no válida: «%s»\n" 5191msgstr "URI no válida: «%s»\n"
5193 5192
5194#: src/namestore/gnunet-namestore.c:1242 5193#: src/namestore/gnunet-namestore.c:1283
5195#, c-format
5196msgid "Label `%s' contains `.' which is not allowed\n"
5197msgstr ""
5198
5199#: src/namestore/gnunet-namestore.c:1292
5200#, c-format 5194#, c-format
5201msgid "" 5195msgid ""
5202"No default identity configured for `namestore' subsystem\n" 5196"No default identity configured for `namestore' subsystem\n"
@@ -5204,104 +5198,104 @@ msgid ""
5204"Run gnunet-identity -d to get a list of choices for $NAME\n" 5198"Run gnunet-identity -d to get a list of choices for $NAME\n"
5205msgstr "" 5199msgstr ""
5206 5200
5207#: src/namestore/gnunet-namestore.c:1357 5201#: src/namestore/gnunet-namestore.c:1348
5208#, fuzzy, c-format 5202#, fuzzy, c-format
5209msgid "Superfluous command line arguments (starting with `%s') ignored\n" 5203msgid "Superfluous command line arguments (starting with `%s') ignored\n"
5210msgstr "Argumentos superfluos (ignorados).\n" 5204msgstr "Argumentos superfluos (ignorados).\n"
5211 5205
5212#: src/namestore/gnunet-namestore.c:1386 5206#: src/namestore/gnunet-namestore.c:1377
5213#, fuzzy, c-format 5207#, fuzzy, c-format
5214msgid "Cannot connect to identity service\n" 5208msgid "Cannot connect to identity service\n"
5215msgstr "¡No se pudo conectar al servicio %s!\n" 5209msgstr "¡No se pudo conectar al servicio %s!\n"
5216 5210
5217#: src/namestore/gnunet-namestore.c:1433 5211#: src/namestore/gnunet-namestore.c:1424
5218msgid "Empty record line argument is not allowed.\n" 5212msgid "Empty record line argument is not allowed.\n"
5219msgstr "" 5213msgstr ""
5220 5214
5221#: src/namestore/gnunet-namestore.c:1445 5215#: src/namestore/gnunet-namestore.c:1436
5222#, c-format 5216#, c-format
5223msgid "Invalid expiration time `%s' (must be without unit)\n" 5217msgid "Invalid expiration time `%s' (must be without unit)\n"
5224msgstr "" 5218msgstr ""
5225 5219
5226#: src/namestore/gnunet-namestore.c:1457 src/namestore/gnunet-namestore.c:1473 5220#: src/namestore/gnunet-namestore.c:1448 src/namestore/gnunet-namestore.c:1464
5227#: src/namestore/gnunet-namestore.c:1490 5221#: src/namestore/gnunet-namestore.c:1481
5228#, fuzzy, c-format 5222#, fuzzy, c-format
5229msgid "Missing entries in record line `%s'.\n" 5223msgid "Missing entries in record line `%s'.\n"
5230msgstr "Se produjo un fallo al cargar el módulo del transporte para «%s»\n" 5224msgstr "Se produjo un fallo al cargar el módulo del transporte para «%s»\n"
5231 5225
5232#: src/namestore/gnunet-namestore.c:1465 5226#: src/namestore/gnunet-namestore.c:1456
5233#, fuzzy, c-format 5227#, fuzzy, c-format
5234msgid "Unknown record type `%s'\n" 5228msgid "Unknown record type `%s'\n"
5235msgstr "Comando desconocido «%s»\n" 5229msgstr "Comando desconocido «%s»\n"
5236 5230
5237#: src/namestore/gnunet-namestore.c:1503 5231#: src/namestore/gnunet-namestore.c:1494
5238#, fuzzy, c-format 5232#, fuzzy, c-format
5239msgid "Invalid record data for type %s: `%s'.\n" 5233msgid "Invalid record data for type %s: `%s'.\n"
5240msgstr "Formato no válido para la IP: «%s»\n" 5234msgstr "Formato no válido para la IP: «%s»\n"
5241 5235
5242#: src/namestore/gnunet-namestore.c:1560 5236#: src/namestore/gnunet-namestore.c:1551
5243msgid "add record" 5237msgid "add record"
5244msgstr "añadir registro" 5238msgstr "añadir registro"
5245 5239
5246#: src/namestore/gnunet-namestore.c:1563 5240#: src/namestore/gnunet-namestore.c:1554
5247msgid "delete record" 5241msgid "delete record"
5248msgstr "borrar registro" 5242msgstr "borrar registro"
5249 5243
5250#: src/namestore/gnunet-namestore.c:1567 5244#: src/namestore/gnunet-namestore.c:1558
5251msgid "display records" 5245msgid "display records"
5252msgstr "mostrar registros" 5246msgstr "mostrar registros"
5253 5247
5254#: src/namestore/gnunet-namestore.c:1574 5248#: src/namestore/gnunet-namestore.c:1565
5255msgid "" 5249msgid ""
5256"expiration time for record to use (for adding only), \"never\" is possible" 5250"expiration time for record to use (for adding only), \"never\" is possible"
5257msgstr "" 5251msgstr ""
5258"tiempo de expiración del registro a usar (únicamente para añadir), nunca " 5252"tiempo de expiración del registro a usar (únicamente para añadir), nunca "
5259"(\"never\") es posible" 5253"(\"never\") es posible"
5260 5254
5261#: src/namestore/gnunet-namestore.c:1580 5255#: src/namestore/gnunet-namestore.c:1571
5262#, fuzzy 5256#, fuzzy
5263msgid "set the desired nick name for the zone" 5257msgid "set the desired nick name for the zone"
5264msgstr "establece el nivel LEVEL deseado de replicación" 5258msgstr "establece el nivel LEVEL deseado de replicación"
5265 5259
5266#: src/namestore/gnunet-namestore.c:1585 5260#: src/namestore/gnunet-namestore.c:1576
5267#, fuzzy 5261#, fuzzy
5268msgid "monitor changes in the namestore" 5262msgid "monitor changes in the namestore"
5269msgstr "¡Se produjo un fallo al conectar con el almacén de nombres!\n" 5263msgstr "¡Se produjo un fallo al conectar con el almacén de nombres!\n"
5270 5264
5271#: src/namestore/gnunet-namestore.c:1597 5265#: src/namestore/gnunet-namestore.c:1588
5272#, fuzzy 5266#, fuzzy
5273msgid "determine our name for the given PKEY" 5267msgid "determine our name for the given PKEY"
5274msgstr "establece las preferencias para el par dado" 5268msgstr "establece las preferencias para el par dado"
5275 5269
5276#: src/namestore/gnunet-namestore.c:1604 5270#: src/namestore/gnunet-namestore.c:1595
5277msgid "" 5271msgid ""
5278"set record set to values given by (possibly multiple) RECORDLINES; can be " 5272"set record set to values given by (possibly multiple) RECORDLINES; can be "
5279"specified multiple times" 5273"specified multiple times"
5280msgstr "" 5274msgstr ""
5281 5275
5282#: src/namestore/gnunet-namestore.c:1610 5276#: src/namestore/gnunet-namestore.c:1601
5283msgid "type of the record to add/delete/display" 5277msgid "type of the record to add/delete/display"
5284msgstr "tipo del registro a añadir/borrar/mostrar" 5278msgstr "tipo del registro a añadir/borrar/mostrar"
5285 5279
5286#: src/namestore/gnunet-namestore.c:1615 5280#: src/namestore/gnunet-namestore.c:1606
5287msgid "URI to import into our zone" 5281msgid "URI to import into our zone"
5288msgstr "URI a importar a nuestra zona" 5282msgstr "URI a importar a nuestra zona"
5289 5283
5290#: src/namestore/gnunet-namestore.c:1621 5284#: src/namestore/gnunet-namestore.c:1612
5291msgid "value of the record to add/delete" 5285msgid "value of the record to add/delete"
5292msgstr "valor del registro a añadir/borrar" 5286msgstr "valor del registro a añadir/borrar"
5293 5287
5294#: src/namestore/gnunet-namestore.c:1625 5288#: src/namestore/gnunet-namestore.c:1616
5295msgid "create or list public record" 5289msgid "create or list public record"
5296msgstr "crear o listar registros públicos" 5290msgstr "crear o listar registros públicos"
5297 5291
5298#: src/namestore/gnunet-namestore.c:1631 5292#: src/namestore/gnunet-namestore.c:1622
5299msgid "" 5293msgid ""
5300"create shadow record (only valid if all other records of the same type have " 5294"create shadow record (only valid if all other records of the same type have "
5301"expired" 5295"expired"
5302msgstr "" 5296msgstr ""
5303 5297
5304#: src/namestore/gnunet-namestore.c:1637 5298#: src/namestore/gnunet-namestore.c:1628
5305#, fuzzy 5299#, fuzzy
5306msgid "name of the ego controlling the zone" 5300msgid "name of the ego controlling the zone"
5307msgstr "nombre de la sección a la que acceder" 5301msgstr "nombre de la sección a la que acceder"
@@ -5311,7 +5305,17 @@ msgstr "nombre de la sección a la que acceder"
5311msgid "Failed to replicate block in namecache: %s\n" 5305msgid "Failed to replicate block in namecache: %s\n"
5312msgstr "Se produjo un fallo al crear el espacio de nombres «%s»\n" 5306msgstr "Se produjo un fallo al crear el espacio de nombres «%s»\n"
5313 5307
5314#: src/namestore/gnunet-service-namestore.c:1668 5308#: src/namestore/gnunet-service-namestore.c:1559
5309#, fuzzy
5310msgid "Error normalizing name."
5311msgstr "Error creando el túnel\n"
5312
5313#: src/namestore/gnunet-service-namestore.c:1582
5314#, fuzzy
5315msgid "Error deserializing records."
5316msgstr "Error interno escaneando directorio.\n"
5317
5318#: src/namestore/gnunet-service-namestore.c:1691
5315#, fuzzy 5319#, fuzzy
5316msgid "Store failed" 5320msgid "Store failed"
5317msgstr "«gnunet-ecc» falló" 5321msgstr "«gnunet-ecc» falló"
@@ -7123,8 +7127,8 @@ msgid "GNUnet topology control"
7123msgstr "" 7127msgstr ""
7124 7128
7125#: src/transport/gnunet-communicator-tcp.c:3338 7129#: src/transport/gnunet-communicator-tcp.c:3338
7126#: src/transport/gnunet-communicator-udp.c:3856 7130#: src/transport/gnunet-communicator-udp.c:3867
7127#: src/transport/gnunet-service-tng.c:10623 7131#: src/transport/gnunet-service-tng.c:10926
7128#: src/transport/gnunet-service-transport.c:2627 7132#: src/transport/gnunet-service-transport.c:2627
7129#, fuzzy 7133#, fuzzy
7130msgid "Transport service is lacking key configuration settings. Exiting.\n" 7134msgid "Transport service is lacking key configuration settings. Exiting.\n"
@@ -7137,7 +7141,7 @@ msgstr ""
7137msgid "GNUnet TCP communicator" 7141msgid "GNUnet TCP communicator"
7138msgstr "Configurador Gtk de GNUnet" 7142msgstr "Configurador Gtk de GNUnet"
7139 7143
7140#: src/transport/gnunet-communicator-udp.c:3931 7144#: src/transport/gnunet-communicator-udp.c:3942
7141#, fuzzy 7145#, fuzzy
7142msgid "GNUnet UDP communicator" 7146msgid "GNUnet UDP communicator"
7143msgstr "Configurador Gtk de GNUnet" 7147msgstr "Configurador Gtk de GNUnet"
@@ -8574,12 +8578,12 @@ msgstr "No se pudo acceder a la clave de máquina.\n"
8574msgid "libgcrypt has not the expected version (version %s is required).\n" 8578msgid "libgcrypt has not the expected version (version %s is required).\n"
8575msgstr "libgcrypt no tiene la versión esperada (se necesita la versión %s).\n" 8579msgstr "libgcrypt no tiene la versión esperada (se necesita la versión %s).\n"
8576 8580
8577#: src/util/crypto_rsa.c:901 8581#: src/util/crypto_rsa.c:907
8578#, fuzzy, c-format 8582#, fuzzy, c-format
8579msgid "RSA signing failed at %s:%d: %s\n" 8583msgid "RSA signing failed at %s:%d: %s\n"
8580msgstr "El firmado ECC falló en %s:%d: %s\n" 8584msgstr "El firmado ECC falló en %s:%d: %s\n"
8581 8585
8582#: src/util/crypto_rsa.c:1201 8586#: src/util/crypto_rsa.c:1207
8583#, c-format 8587#, c-format
8584msgid "RSA signature verification failed at %s:%d: %s\n" 8588msgid "RSA signature verification failed at %s:%d: %s\n"
8585msgstr "La verificación de la firma RSA fallo en %s:%d: %s\n" 8589msgstr "La verificación de la firma RSA fallo en %s:%d: %s\n"
@@ -9278,14 +9282,14 @@ msgstr "Formato «%s» erroneo para máscara de red\n"
9278msgid "Wrong format `%s' for network\n" 9282msgid "Wrong format `%s' for network\n"
9279msgstr "Formato «%s» erroneo para red\n" 9283msgstr "Formato «%s» erroneo para red\n"
9280 9284
9281#: src/util/time.c:870 src/util/time.c:898 9285#: src/util/time.c:900 src/util/time.c:928
9282#, fuzzy, c-format 9286#, fuzzy, c-format
9283msgid "Failed to map `%s', cannot assure monotonic time!\n" 9287msgid "Failed to map `%s', cannot assure monotonic time!\n"
9284msgstr "" 9288msgstr ""
9285"Se produjo un fallo al recuperar el espacio de nombres «%s», no se pudo " 9289"Se produjo un fallo al recuperar el espacio de nombres «%s», no se pudo "
9286"retomar la operación de publicación.\n" 9290"retomar la operación de publicación.\n"
9287 9291
9288#: src/util/time.c:906 9292#: src/util/time.c:936
9289#, c-format 9293#, c-format
9290msgid "" 9294msgid ""
9291"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n" 9295"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"
@@ -9472,6 +9476,18 @@ msgstr "Configurar túneles vía VPN."
9472msgid "Failed to connect to the namestore!\n" 9476msgid "Failed to connect to the namestore!\n"
9473msgstr "¡Se produjo un fallo al conectar con el almacén de nombres!\n" 9477msgstr "¡Se produjo un fallo al conectar con el almacén de nombres!\n"
9474 9478
9479#, c-format
9480#~ msgid "Block not of type %u\n"
9481#~ msgstr "El bloque no es del tipo %u\n"
9482
9483#, fuzzy, c-format
9484#~ msgid "Size mismatch for block with type %u\n"
9485#~ msgstr "Discrepancias de tamaños para el bloque\n"
9486
9487#, c-format
9488#~ msgid "Block of type %u is malformed\n"
9489#~ msgstr "El bloque del tipo %u está mal formado\n"
9490
9475#~ msgid "# items stored" 9491#~ msgid "# items stored"
9476#~ msgstr "# elementos almacenados" 9492#~ msgstr "# elementos almacenados"
9477 9493
diff --git a/po/fr.po b/po/fr.po
index f8d8afeed..2602072af 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -7,7 +7,7 @@ msgid ""
7msgstr "" 7msgstr ""
8"Project-Id-Version: gnunet 0.10.1\n" 8"Project-Id-Version: gnunet 0.10.1\n"
9"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n" 9"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
10"POT-Creation-Date: 2022-03-04 22:23+0100\n" 10"POT-Creation-Date: 2022-04-01 08:42+0200\n"
11"PO-Revision-Date: 2021-11-21 00:53+0100\n" 11"PO-Revision-Date: 2021-11-21 00:53+0100\n"
12"Last-Translator: Stéphane Aulery <lkppo@free.fr>\n" 12"Last-Translator: Stéphane Aulery <lkppo@free.fr>\n"
13"Language-Team: French <traduc@traduc.org>\n" 13"Language-Team: French <traduc@traduc.org>\n"
@@ -17,7 +17,7 @@ msgstr ""
17"Content-Transfer-Encoding: 8bit\n" 17"Content-Transfer-Encoding: 8bit\n"
18"X-Bugs: Report translation errors to the Language-Team address.\n" 18"X-Bugs: Report translation errors to the Language-Team address.\n"
19 19
20#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1254 20#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1245
21#, c-format 21#, c-format
22msgid "Ego `%s' not known to identity service\n" 22msgid "Ego `%s' not known to identity service\n"
23msgstr "" 23msgstr ""
@@ -2045,21 +2045,6 @@ msgstr ""
2045msgid "Measure quality and performance of the DHT service." 2045msgid "Measure quality and performance of the DHT service."
2046msgstr "" 2046msgstr ""
2047 2047
2048#: src/dht/plugin_block_dht.c:404
2049#, c-format
2050msgid "Block not of type %u\n"
2051msgstr ""
2052
2053#: src/dht/plugin_block_dht.c:413
2054#, c-format
2055msgid "Size mismatch for block with type %u\n"
2056msgstr ""
2057
2058#: src/dht/plugin_block_dht.c:424
2059#, c-format
2060msgid "Block of type %u is malformed\n"
2061msgstr ""
2062
2063#: src/dns/gnunet-dns-monitor.c:371 src/dns/gnunet-dns-monitor.c:376 2048#: src/dns/gnunet-dns-monitor.c:371 src/dns/gnunet-dns-monitor.c:376
2064msgid "only monitor DNS queries" 2049msgid "only monitor DNS queries"
2065msgstr "" 2050msgstr ""
@@ -2746,20 +2731,20 @@ msgstr ""
2746msgid "LOC URI malformed (signature failed validation)" 2731msgid "LOC URI malformed (signature failed validation)"
2747msgstr "" 2732msgstr ""
2748 2733
2749#: src/fs/fs_uri.c:652 2734#: src/fs/fs_uri.c:653
2750#, fuzzy 2735#, fuzzy
2751msgid "invalid argument" 2736msgid "invalid argument"
2752msgstr "Argument invalide « %s »\n" 2737msgstr "Argument invalide « %s »\n"
2753 2738
2754#: src/fs/fs_uri.c:671 2739#: src/fs/fs_uri.c:673
2755msgid "Unrecognized URI type" 2740msgid "Unrecognized URI type"
2756msgstr "Type d’URI non reconnu" 2741msgstr "Type d’URI non reconnu"
2757 2742
2758#: src/fs/fs_uri.c:1075 src/fs/fs_uri.c:1102 2743#: src/fs/fs_uri.c:1077 src/fs/fs_uri.c:1104
2759msgid "No keywords specified!\n" 2744msgid "No keywords specified!\n"
2760msgstr "" 2745msgstr ""
2761 2746
2762#: src/fs/fs_uri.c:1108 2747#: src/fs/fs_uri.c:1110
2763msgid "Number of double-quotes not balanced!\n" 2748msgid "Number of double-quotes not balanced!\n"
2764msgstr "" 2749msgstr ""
2765 2750
@@ -3457,93 +3442,93 @@ msgstr ""
3457msgid "# query plan entries" 3442msgid "# query plan entries"
3458msgstr "" 3443msgstr ""
3459 3444
3460#: src/fs/gnunet-service-fs_pr.c:329 3445#: src/fs/gnunet-service-fs_pr.c:330
3461msgid "# Pending requests created" 3446msgid "# Pending requests created"
3462msgstr "" 3447msgstr ""
3463 3448
3464#: src/fs/gnunet-service-fs_pr.c:421 src/fs/gnunet-service-fs_pr.c:658 3449#: src/fs/gnunet-service-fs_pr.c:422 src/fs/gnunet-service-fs_pr.c:662
3465msgid "# Pending requests active" 3450msgid "# Pending requests active"
3466msgstr "" 3451msgstr ""
3467 3452
3468#: src/fs/gnunet-service-fs_pr.c:838 3453#: src/fs/gnunet-service-fs_pr.c:837
3469msgid "# replies received and matched" 3454msgid "# replies received and matched"
3470msgstr "" 3455msgstr ""
3471 3456
3472#: src/fs/gnunet-service-fs_pr.c:916 3457#: src/fs/gnunet-service-fs_pr.c:911
3473msgid "# results found locally" 3458msgid "# results found locally"
3474msgstr "" 3459msgstr ""
3475 3460
3476#: src/fs/gnunet-service-fs_pr.c:1050 3461#: src/fs/gnunet-service-fs_pr.c:1045
3477msgid "# Datastore `PUT' failures" 3462msgid "# Datastore `PUT' failures"
3478msgstr "" 3463msgstr ""
3479 3464
3480#: src/fs/gnunet-service-fs_pr.c:1079 3465#: src/fs/gnunet-service-fs_pr.c:1074
3481msgid "# storage requests dropped due to high load" 3466msgid "# storage requests dropped due to high load"
3482msgstr "" 3467msgstr ""
3483 3468
3484#: src/fs/gnunet-service-fs_pr.c:1118 3469#: src/fs/gnunet-service-fs_pr.c:1113
3485msgid "# Replies received from DHT" 3470msgid "# Replies received from DHT"
3486msgstr "" 3471msgstr ""
3487 3472
3488#: src/fs/gnunet-service-fs_pr.c:1259 3473#: src/fs/gnunet-service-fs_pr.c:1268
3489msgid "# Replies received from CADET" 3474msgid "# Replies received from CADET"
3490msgstr "" 3475msgstr ""
3491 3476
3492#: src/fs/gnunet-service-fs_pr.c:1313 3477#: src/fs/gnunet-service-fs_pr.c:1323
3493#, c-format 3478#, c-format
3494msgid "Datastore lookup already took %s!\n" 3479msgid "Datastore lookup already took %s!\n"
3495msgstr "" 3480msgstr ""
3496 3481
3497#: src/fs/gnunet-service-fs_pr.c:1334 3482#: src/fs/gnunet-service-fs_pr.c:1344
3498#, c-format 3483#, c-format
3499msgid "On-demand lookup already took %s!\n" 3484msgid "On-demand lookup already took %s!\n"
3500msgstr "" 3485msgstr ""
3501 3486
3502#: src/fs/gnunet-service-fs_pr.c:1401 3487#: src/fs/gnunet-service-fs_pr.c:1411
3503msgid "# requested DBLOCK or IBLOCK not found" 3488msgid "# requested DBLOCK or IBLOCK not found"
3504msgstr "" 3489msgstr ""
3505 3490
3506#: src/fs/gnunet-service-fs_pr.c:1463 3491#: src/fs/gnunet-service-fs_pr.c:1473
3507msgid "# Datastore lookups concluded (error queueing)" 3492msgid "# Datastore lookups concluded (error queueing)"
3508msgstr "" 3493msgstr ""
3509 3494
3510#: src/fs/gnunet-service-fs_pr.c:1518 3495#: src/fs/gnunet-service-fs_pr.c:1528
3511msgid "# Datastore lookups concluded (no results)" 3496msgid "# Datastore lookups concluded (no results)"
3512msgstr "" 3497msgstr ""
3513 3498
3514#: src/fs/gnunet-service-fs_pr.c:1533 3499#: src/fs/gnunet-service-fs_pr.c:1543
3515msgid "# Datastore lookups concluded (seen all)" 3500msgid "# Datastore lookups concluded (seen all)"
3516msgstr "" 3501msgstr ""
3517 3502
3518#: src/fs/gnunet-service-fs_pr.c:1556 3503#: src/fs/gnunet-service-fs_pr.c:1566
3519msgid "# Datastore lookups aborted (more than MAX_RESULTS)" 3504msgid "# Datastore lookups aborted (more than MAX_RESULTS)"
3520msgstr "" 3505msgstr ""
3521 3506
3522#: src/fs/gnunet-service-fs_pr.c:1573 3507#: src/fs/gnunet-service-fs_pr.c:1583
3523msgid "# on-demand blocks matched requests" 3508msgid "# on-demand blocks matched requests"
3524msgstr "" 3509msgstr ""
3525 3510
3526#: src/fs/gnunet-service-fs_pr.c:1594 3511#: src/fs/gnunet-service-fs_pr.c:1604
3527msgid "# on-demand lookups performed successfully" 3512msgid "# on-demand lookups performed successfully"
3528msgstr "" 3513msgstr ""
3529 3514
3530#: src/fs/gnunet-service-fs_pr.c:1600 3515#: src/fs/gnunet-service-fs_pr.c:1610
3531msgid "# on-demand lookups failed" 3516msgid "# on-demand lookups failed"
3532msgstr "" 3517msgstr ""
3533 3518
3534#: src/fs/gnunet-service-fs_pr.c:1641 3519#: src/fs/gnunet-service-fs_pr.c:1656
3535msgid "# Datastore lookups concluded (found last result)" 3520msgid "# Datastore lookups concluded (found last result)"
3536msgstr "" 3521msgstr ""
3537 3522
3538#: src/fs/gnunet-service-fs_pr.c:1654 3523#: src/fs/gnunet-service-fs_pr.c:1669
3539msgid "# Datastore lookups concluded (load too high)" 3524msgid "# Datastore lookups concluded (load too high)"
3540msgstr "" 3525msgstr ""
3541 3526
3542#: src/fs/gnunet-service-fs_pr.c:1705 3527#: src/fs/gnunet-service-fs_pr.c:1720
3543msgid "# Datastore lookups initiated" 3528msgid "# Datastore lookups initiated"
3544msgstr "" 3529msgstr ""
3545 3530
3546#: src/fs/gnunet-service-fs_pr.c:1755 3531#: src/fs/gnunet-service-fs_pr.c:1784
3547msgid "# GAP PUT messages received" 3532msgid "# GAP PUT messages received"
3548msgstr "" 3533msgstr ""
3549 3534
@@ -3844,64 +3829,64 @@ msgstr ""
3844msgid "Failed to connect to the DNS service!\n" 3829msgid "Failed to connect to the DNS service!\n"
3845msgstr "" 3830msgstr ""
3846 3831
3847#: src/gns/gnunet-service-gns_resolver.c:659 3832#: src/gns/gnunet-service-gns_resolver.c:672
3848#, c-format 3833#, c-format
3849msgid "Protocol `%s' unknown, skipping labels.\n" 3834msgid "Protocol `%s' unknown, skipping labels.\n"
3850msgstr "" 3835msgstr ""
3851 3836
3852#: src/gns/gnunet-service-gns_resolver.c:671 3837#: src/gns/gnunet-service-gns_resolver.c:684
3853#, c-format 3838#, c-format
3854msgid "Service `%s' unknown for protocol `%s', trying as number.\n" 3839msgid "Service `%s' unknown for protocol `%s', trying as number.\n"
3855msgstr "" 3840msgstr ""
3856 3841
3857#: src/gns/gnunet-service-gns_resolver.c:677 3842#: src/gns/gnunet-service-gns_resolver.c:690
3858#, c-format 3843#, c-format
3859msgid "Service `%s' not a port, skipping service labels.\n" 3844msgid "Service `%s' not a port, skipping service labels.\n"
3860msgstr "" 3845msgstr ""
3861 3846
3862#: src/gns/gnunet-service-gns_resolver.c:891 3847#: src/gns/gnunet-service-gns_resolver.c:904
3863msgid "Failed to parse DNS response\n" 3848msgid "Failed to parse DNS response\n"
3864msgstr "" 3849msgstr ""
3865 3850
3866#: src/gns/gnunet-service-gns_resolver.c:1082 3851#: src/gns/gnunet-service-gns_resolver.c:1095
3867#, c-format 3852#, c-format
3868msgid "Skipping record of unsupported type %d\n" 3853msgid "Skipping record of unsupported type %d\n"
3869msgstr "" 3854msgstr ""
3870 3855
3871#: src/gns/gnunet-service-gns_resolver.c:1859 3856#: src/gns/gnunet-service-gns_resolver.c:1872
3872#, c-format 3857#, c-format
3873msgid "Name `%s' cannot be converted to IDNA." 3858msgid "Name `%s' cannot be converted to IDNA."
3874msgstr "" 3859msgstr ""
3875 3860
3876#: src/gns/gnunet-service-gns_resolver.c:1874 3861#: src/gns/gnunet-service-gns_resolver.c:1887
3877#, c-format 3862#, c-format
3878msgid "GNS lookup resulted in DNS name that is too long (`%s')\n" 3863msgid "GNS lookup resulted in DNS name that is too long (`%s')\n"
3879msgstr "" 3864msgstr ""
3880 3865
3881#: src/gns/gnunet-service-gns_resolver.c:1914 3866#: src/gns/gnunet-service-gns_resolver.c:1927
3882#, c-format 3867#, c-format
3883msgid "GNS lookup failed (zero records found for `%s')\n" 3868msgid "GNS lookup failed (zero records found for `%s')\n"
3884msgstr "" 3869msgstr ""
3885 3870
3886#: src/gns/gnunet-service-gns_resolver.c:2312 3871#: src/gns/gnunet-service-gns_resolver.c:2329
3887msgid "Unable to process critical delegation record\n" 3872msgid "Unable to process critical delegation record\n"
3888msgstr "" 3873msgstr ""
3889 3874
3890#: src/gns/gnunet-service-gns_resolver.c:2317 3875#: src/gns/gnunet-service-gns_resolver.c:2334
3891msgid "GNS lookup recursion failed (no delegation record found)\n" 3876msgid "GNS lookup recursion failed (no delegation record found)\n"
3892msgstr "" 3877msgstr ""
3893 3878
3894#: src/gns/gnunet-service-gns_resolver.c:2340 3879#: src/gns/gnunet-service-gns_resolver.c:2357
3895#, c-format 3880#, c-format
3896msgid "Failed to cache GNS resolution: %s\n" 3881msgid "Failed to cache GNS resolution: %s\n"
3897msgstr "" 3882msgstr ""
3898 3883
3899#: src/gns/gnunet-service-gns_resolver.c:2505 3884#: src/gns/gnunet-service-gns_resolver.c:2522
3900#, c-format 3885#, c-format
3901msgid "GNS namecache returned empty result for `%s'\n" 3886msgid "GNS namecache returned empty result for `%s'\n"
3902msgstr "" 3887msgstr ""
3903 3888
3904#: src/gns/gnunet-service-gns_resolver.c:2652 3889#: src/gns/gnunet-service-gns_resolver.c:2669
3905#, c-format 3890#, c-format
3906msgid "Zone %s was revoked, resolution fails\n" 3891msgid "Zone %s was revoked, resolution fails\n"
3907msgstr "" 3892msgstr ""
@@ -3943,31 +3928,39 @@ msgstr ""
3943msgid "Gns REST API initialized\n" 3928msgid "Gns REST API initialized\n"
3944msgstr "" 3929msgstr ""
3945 3930
3946#: src/gnsrecord/gnsrecord_misc.c:448 3931#: src/gnsrecord/gnsrecord_misc.c:52
3932msgid "Label is NULL which is not allowed\n"
3933msgstr ""
3934
3935#: src/gnsrecord/gnsrecord_misc.c:57
3936msgid "Label contains `.' which is not allowed\n"
3937msgstr ""
3938
3939#: src/gnsrecord/gnsrecord_misc.c:464
3947msgid "Zone delegation record not allowed in apex." 3940msgid "Zone delegation record not allowed in apex."
3948msgstr "" 3941msgstr ""
3949 3942
3950#: src/gnsrecord/gnsrecord_misc.c:456 3943#: src/gnsrecord/gnsrecord_misc.c:472
3951msgid "Zone delegation record set contains mutually exclusive records." 3944msgid "Zone delegation record set contains mutually exclusive records."
3952msgstr "" 3945msgstr ""
3953 3946
3954#: src/gnsrecord/gnsrecord_misc.c:466 3947#: src/gnsrecord/gnsrecord_misc.c:482
3955msgid "Multiple REDIRECT records." 3948msgid "Multiple REDIRECT records."
3956msgstr "" 3949msgstr ""
3957 3950
3958#: src/gnsrecord/gnsrecord_misc.c:475 src/gnsrecord/gnsrecord_misc.c:501 3951#: src/gnsrecord/gnsrecord_misc.c:491 src/gnsrecord/gnsrecord_misc.c:517
3959msgid "Redirection record set conains mutually exclusive records." 3952msgid "Redirection record set conains mutually exclusive records."
3960msgstr "" 3953msgstr ""
3961 3954
3962#: src/gnsrecord/gnsrecord_misc.c:482 3955#: src/gnsrecord/gnsrecord_misc.c:498
3963msgid "Redirection records not allowed in apex." 3956msgid "Redirection records not allowed in apex."
3964msgstr "" 3957msgstr ""
3965 3958
3966#: src/gnsrecord/gnsrecord_misc.c:493 3959#: src/gnsrecord/gnsrecord_misc.c:509
3967msgid "Redirection records not allowed in apex.." 3960msgid "Redirection records not allowed in apex.."
3968msgstr "" 3961msgstr ""
3969 3962
3970#: src/gnsrecord/gnsrecord_misc.c:515 3963#: src/gnsrecord/gnsrecord_misc.c:531
3971msgid "Mutually exclusive records." 3964msgid "Mutually exclusive records."
3972msgstr "" 3965msgstr ""
3973 3966
@@ -4527,12 +4520,18 @@ msgstr ""
4527msgid "Failed to parse JSON in option `%s': %s (%s)\n" 4520msgid "Failed to parse JSON in option `%s': %s (%s)\n"
4528msgstr "Résolution de « %s » échouée : %s\n" 4521msgstr "Résolution de « %s » échouée : %s\n"
4529 4522
4530#: src/messenger/plugin_gnsrecord_messenger.c:118 4523#: src/messenger/plugin_gnsrecord_messenger.c:136
4531#: src/messenger/plugin_gnsrecord_messenger.c:133 4524#: src/messenger/plugin_gnsrecord_messenger.c:151
4532#, c-format 4525#, c-format
4533msgid "Unable to parse MESSENGER_ROOM_ENTRY record `%s'\n" 4526msgid "Unable to parse MESSENGER_ROOM_ENTRY record `%s'\n"
4534msgstr "" 4527msgstr ""
4535 4528
4529#: src/messenger/plugin_gnsrecord_messenger.c:172
4530#: src/messenger/plugin_gnsrecord_messenger.c:187
4531#, c-format
4532msgid "Unable to parse MESSENGER_ROOM_DETAILS record `%s'\n"
4533msgstr ""
4534
4536#: src/my/my.c:196 src/my/my.c:215 4535#: src/my/my.c:196 src/my/my.c:215
4537#, c-format 4536#, c-format
4538msgid "%s failed at %s:%d with error: %s\n" 4537msgid "%s failed at %s:%d with error: %s\n"
@@ -4573,7 +4572,7 @@ msgstr "fornat invalide : « %s »\n"
4573msgid "You must specify a name\n" 4572msgid "You must specify a name\n"
4574msgstr "" 4573msgstr ""
4575 4574
4576#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1591 4575#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1582
4577msgid "name of the record to add/delete/display" 4576msgid "name of the record to add/delete/display"
4578msgstr "" 4577msgstr ""
4579 4578
@@ -4581,7 +4580,7 @@ msgstr ""
4581msgid "specifies the public key of the zone to look in" 4580msgid "specifies the public key of the zone to look in"
4582msgstr "" 4581msgstr ""
4583 4582
4584#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1652 4583#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1643
4585msgid "GNUnet zone manipulation tool" 4584msgid "GNUnet zone manipulation tool"
4586msgstr "" 4585msgstr ""
4587 4586
@@ -4823,12 +4822,7 @@ msgstr ""
4823msgid "Invalid URI `%s'\n" 4822msgid "Invalid URI `%s'\n"
4824msgstr "URI invalide « %s »\n" 4823msgstr "URI invalide « %s »\n"
4825 4824
4826#: src/namestore/gnunet-namestore.c:1242 4825#: src/namestore/gnunet-namestore.c:1283
4827#, c-format
4828msgid "Label `%s' contains `.' which is not allowed\n"
4829msgstr ""
4830
4831#: src/namestore/gnunet-namestore.c:1292
4832#, c-format 4826#, c-format
4833msgid "" 4827msgid ""
4834"No default identity configured for `namestore' subsystem\n" 4828"No default identity configured for `namestore' subsystem\n"
@@ -4836,99 +4830,99 @@ msgid ""
4836"Run gnunet-identity -d to get a list of choices for $NAME\n" 4830"Run gnunet-identity -d to get a list of choices for $NAME\n"
4837msgstr "" 4831msgstr ""
4838 4832
4839#: src/namestore/gnunet-namestore.c:1357 4833#: src/namestore/gnunet-namestore.c:1348
4840#, c-format 4834#, c-format
4841msgid "Superfluous command line arguments (starting with `%s') ignored\n" 4835msgid "Superfluous command line arguments (starting with `%s') ignored\n"
4842msgstr "" 4836msgstr ""
4843 4837
4844#: src/namestore/gnunet-namestore.c:1386 4838#: src/namestore/gnunet-namestore.c:1377
4845#, c-format 4839#, c-format
4846msgid "Cannot connect to identity service\n" 4840msgid "Cannot connect to identity service\n"
4847msgstr "" 4841msgstr ""
4848 4842
4849#: src/namestore/gnunet-namestore.c:1433 4843#: src/namestore/gnunet-namestore.c:1424
4850msgid "Empty record line argument is not allowed.\n" 4844msgid "Empty record line argument is not allowed.\n"
4851msgstr "" 4845msgstr ""
4852 4846
4853#: src/namestore/gnunet-namestore.c:1445 4847#: src/namestore/gnunet-namestore.c:1436
4854#, c-format 4848#, c-format
4855msgid "Invalid expiration time `%s' (must be without unit)\n" 4849msgid "Invalid expiration time `%s' (must be without unit)\n"
4856msgstr "" 4850msgstr ""
4857 4851
4858#: src/namestore/gnunet-namestore.c:1457 src/namestore/gnunet-namestore.c:1473 4852#: src/namestore/gnunet-namestore.c:1448 src/namestore/gnunet-namestore.c:1464
4859#: src/namestore/gnunet-namestore.c:1490 4853#: src/namestore/gnunet-namestore.c:1481
4860#, c-format 4854#, c-format
4861msgid "Missing entries in record line `%s'.\n" 4855msgid "Missing entries in record line `%s'.\n"
4862msgstr "" 4856msgstr ""
4863 4857
4864#: src/namestore/gnunet-namestore.c:1465 4858#: src/namestore/gnunet-namestore.c:1456
4865#, fuzzy, c-format 4859#, fuzzy, c-format
4866msgid "Unknown record type `%s'\n" 4860msgid "Unknown record type `%s'\n"
4867msgstr "Commande « %s » inconnue\n" 4861msgstr "Commande « %s » inconnue\n"
4868 4862
4869#: src/namestore/gnunet-namestore.c:1503 4863#: src/namestore/gnunet-namestore.c:1494
4870#, fuzzy, c-format 4864#, fuzzy, c-format
4871msgid "Invalid record data for type %s: `%s'.\n" 4865msgid "Invalid record data for type %s: `%s'.\n"
4872msgstr "fornat invalide : « %s »\n" 4866msgstr "fornat invalide : « %s »\n"
4873 4867
4874#: src/namestore/gnunet-namestore.c:1560 4868#: src/namestore/gnunet-namestore.c:1551
4875msgid "add record" 4869msgid "add record"
4876msgstr "ajouter un enregistrement" 4870msgstr "ajouter un enregistrement"
4877 4871
4878#: src/namestore/gnunet-namestore.c:1563 4872#: src/namestore/gnunet-namestore.c:1554
4879msgid "delete record" 4873msgid "delete record"
4880msgstr "suprimer un enregistrement" 4874msgstr "suprimer un enregistrement"
4881 4875
4882#: src/namestore/gnunet-namestore.c:1567 4876#: src/namestore/gnunet-namestore.c:1558
4883msgid "display records" 4877msgid "display records"
4884msgstr "afficher les enregistrements" 4878msgstr "afficher les enregistrements"
4885 4879
4886#: src/namestore/gnunet-namestore.c:1574 4880#: src/namestore/gnunet-namestore.c:1565
4887msgid "" 4881msgid ""
4888"expiration time for record to use (for adding only), \"never\" is possible" 4882"expiration time for record to use (for adding only), \"never\" is possible"
4889msgstr "" 4883msgstr ""
4890 4884
4891#: src/namestore/gnunet-namestore.c:1580 4885#: src/namestore/gnunet-namestore.c:1571
4892msgid "set the desired nick name for the zone" 4886msgid "set the desired nick name for the zone"
4893msgstr "" 4887msgstr ""
4894 4888
4895#: src/namestore/gnunet-namestore.c:1585 4889#: src/namestore/gnunet-namestore.c:1576
4896msgid "monitor changes in the namestore" 4890msgid "monitor changes in the namestore"
4897msgstr "" 4891msgstr ""
4898 4892
4899#: src/namestore/gnunet-namestore.c:1597 4893#: src/namestore/gnunet-namestore.c:1588
4900msgid "determine our name for the given PKEY" 4894msgid "determine our name for the given PKEY"
4901msgstr "" 4895msgstr ""
4902 4896
4903#: src/namestore/gnunet-namestore.c:1604 4897#: src/namestore/gnunet-namestore.c:1595
4904msgid "" 4898msgid ""
4905"set record set to values given by (possibly multiple) RECORDLINES; can be " 4899"set record set to values given by (possibly multiple) RECORDLINES; can be "
4906"specified multiple times" 4900"specified multiple times"
4907msgstr "" 4901msgstr ""
4908 4902
4909#: src/namestore/gnunet-namestore.c:1610 4903#: src/namestore/gnunet-namestore.c:1601
4910msgid "type of the record to add/delete/display" 4904msgid "type of the record to add/delete/display"
4911msgstr "" 4905msgstr ""
4912 4906
4913#: src/namestore/gnunet-namestore.c:1615 4907#: src/namestore/gnunet-namestore.c:1606
4914msgid "URI to import into our zone" 4908msgid "URI to import into our zone"
4915msgstr "" 4909msgstr ""
4916 4910
4917#: src/namestore/gnunet-namestore.c:1621 4911#: src/namestore/gnunet-namestore.c:1612
4918msgid "value of the record to add/delete" 4912msgid "value of the record to add/delete"
4919msgstr "" 4913msgstr ""
4920 4914
4921#: src/namestore/gnunet-namestore.c:1625 4915#: src/namestore/gnunet-namestore.c:1616
4922msgid "create or list public record" 4916msgid "create or list public record"
4923msgstr "" 4917msgstr ""
4924 4918
4925#: src/namestore/gnunet-namestore.c:1631 4919#: src/namestore/gnunet-namestore.c:1622
4926msgid "" 4920msgid ""
4927"create shadow record (only valid if all other records of the same type have " 4921"create shadow record (only valid if all other records of the same type have "
4928"expired" 4922"expired"
4929msgstr "" 4923msgstr ""
4930 4924
4931#: src/namestore/gnunet-namestore.c:1637 4925#: src/namestore/gnunet-namestore.c:1628
4932msgid "name of the ego controlling the zone" 4926msgid "name of the ego controlling the zone"
4933msgstr "" 4927msgstr ""
4934 4928
@@ -4937,7 +4931,17 @@ msgstr ""
4937msgid "Failed to replicate block in namecache: %s\n" 4931msgid "Failed to replicate block in namecache: %s\n"
4938msgstr "" 4932msgstr ""
4939 4933
4940#: src/namestore/gnunet-service-namestore.c:1668 4934#: src/namestore/gnunet-service-namestore.c:1559
4935#, fuzzy
4936msgid "Error normalizing name."
4937msgstr "Erreur de création du tunnel\n"
4938
4939#: src/namestore/gnunet-service-namestore.c:1582
4940#, fuzzy
4941msgid "Error deserializing records."
4942msgstr "Erreur de création du tunnel\n"
4943
4944#: src/namestore/gnunet-service-namestore.c:1691
4941#, fuzzy 4945#, fuzzy
4942msgid "Store failed" 4946msgid "Store failed"
4943msgstr "pa_stream_new() échoué : %s\n" 4947msgstr "pa_stream_new() échoué : %s\n"
@@ -6630,8 +6634,8 @@ msgid "GNUnet topology control"
6630msgstr "" 6634msgstr ""
6631 6635
6632#: src/transport/gnunet-communicator-tcp.c:3338 6636#: src/transport/gnunet-communicator-tcp.c:3338
6633#: src/transport/gnunet-communicator-udp.c:3856 6637#: src/transport/gnunet-communicator-udp.c:3867
6634#: src/transport/gnunet-service-tng.c:10623 6638#: src/transport/gnunet-service-tng.c:10926
6635#: src/transport/gnunet-service-transport.c:2627 6639#: src/transport/gnunet-service-transport.c:2627
6636msgid "Transport service is lacking key configuration settings. Exiting.\n" 6640msgid "Transport service is lacking key configuration settings. Exiting.\n"
6637msgstr "" 6641msgstr ""
@@ -6640,7 +6644,7 @@ msgstr ""
6640msgid "GNUnet TCP communicator" 6644msgid "GNUnet TCP communicator"
6641msgstr "" 6645msgstr ""
6642 6646
6643#: src/transport/gnunet-communicator-udp.c:3931 6647#: src/transport/gnunet-communicator-udp.c:3942
6644msgid "GNUnet UDP communicator" 6648msgid "GNUnet UDP communicator"
6645msgstr "" 6649msgstr ""
6646 6650
@@ -7960,12 +7964,12 @@ msgstr ""
7960msgid "libgcrypt has not the expected version (version %s is required).\n" 7964msgid "libgcrypt has not the expected version (version %s is required).\n"
7961msgstr "" 7965msgstr ""
7962 7966
7963#: src/util/crypto_rsa.c:901 7967#: src/util/crypto_rsa.c:907
7964#, c-format 7968#, c-format
7965msgid "RSA signing failed at %s:%d: %s\n" 7969msgid "RSA signing failed at %s:%d: %s\n"
7966msgstr "" 7970msgstr ""
7967 7971
7968#: src/util/crypto_rsa.c:1201 7972#: src/util/crypto_rsa.c:1207
7969#, c-format 7973#, c-format
7970msgid "RSA signature verification failed at %s:%d: %s\n" 7974msgid "RSA signature verification failed at %s:%d: %s\n"
7971msgstr "" 7975msgstr ""
@@ -8633,12 +8637,12 @@ msgstr ""
8633msgid "Wrong format `%s' for network\n" 8637msgid "Wrong format `%s' for network\n"
8634msgstr "" 8638msgstr ""
8635 8639
8636#: src/util/time.c:870 src/util/time.c:898 8640#: src/util/time.c:900 src/util/time.c:928
8637#, c-format 8641#, c-format
8638msgid "Failed to map `%s', cannot assure monotonic time!\n" 8642msgid "Failed to map `%s', cannot assure monotonic time!\n"
8639msgstr "" 8643msgstr ""
8640 8644
8641#: src/util/time.c:906 8645#: src/util/time.c:936
8642#, c-format 8646#, c-format
8643msgid "" 8647msgid ""
8644"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n" 8648"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"
diff --git a/po/it.po b/po/it.po
index b97c40faa..eb6e6a7d2 100644
--- a/po/it.po
+++ b/po/it.po
@@ -8,7 +8,7 @@ msgid ""
8msgstr "" 8msgstr ""
9"Project-Id-Version: gnunet 0.10.1\n" 9"Project-Id-Version: gnunet 0.10.1\n"
10"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n" 10"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
11"POT-Creation-Date: 2022-03-04 22:23+0100\n" 11"POT-Creation-Date: 2022-04-01 08:42+0200\n"
12"PO-Revision-Date: 2019-10-16 11:00+0200\n" 12"PO-Revision-Date: 2019-10-16 11:00+0200\n"
13"Last-Translator: Sebastiano Pistore <sebastianopistore.info@protonmail.ch>\n" 13"Last-Translator: Sebastiano Pistore <sebastianopistore.info@protonmail.ch>\n"
14"Language-Team: Italian <tp@lists.linux.it>\n" 14"Language-Team: Italian <tp@lists.linux.it>\n"
@@ -20,7 +20,7 @@ msgstr ""
20"X-Generator: Poedit 2.2.3\n" 20"X-Generator: Poedit 2.2.3\n"
21"Plural-Forms: nplurals=2; plural=(n != 1);\n" 21"Plural-Forms: nplurals=2; plural=(n != 1);\n"
22 22
23#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1254 23#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1245
24#, c-format 24#, c-format
25msgid "Ego `%s' not known to identity service\n" 25msgid "Ego `%s' not known to identity service\n"
26msgstr "" 26msgstr ""
@@ -2048,21 +2048,6 @@ msgstr ""
2048msgid "Measure quality and performance of the DHT service." 2048msgid "Measure quality and performance of the DHT service."
2049msgstr "" 2049msgstr ""
2050 2050
2051#: src/dht/plugin_block_dht.c:404
2052#, c-format
2053msgid "Block not of type %u\n"
2054msgstr ""
2055
2056#: src/dht/plugin_block_dht.c:413
2057#, c-format
2058msgid "Size mismatch for block with type %u\n"
2059msgstr ""
2060
2061#: src/dht/plugin_block_dht.c:424
2062#, c-format
2063msgid "Block of type %u is malformed\n"
2064msgstr ""
2065
2066#: src/dns/gnunet-dns-monitor.c:371 src/dns/gnunet-dns-monitor.c:376 2051#: src/dns/gnunet-dns-monitor.c:371 src/dns/gnunet-dns-monitor.c:376
2067msgid "only monitor DNS queries" 2052msgid "only monitor DNS queries"
2068msgstr "" 2053msgstr ""
@@ -2760,19 +2745,19 @@ msgstr ""
2760msgid "LOC URI malformed (signature failed validation)" 2745msgid "LOC URI malformed (signature failed validation)"
2761msgstr "" 2746msgstr ""
2762 2747
2763#: src/fs/fs_uri.c:652 2748#: src/fs/fs_uri.c:653
2764msgid "invalid argument" 2749msgid "invalid argument"
2765msgstr "argomento non valido" 2750msgstr "argomento non valido"
2766 2751
2767#: src/fs/fs_uri.c:671 2752#: src/fs/fs_uri.c:673
2768msgid "Unrecognized URI type" 2753msgid "Unrecognized URI type"
2769msgstr "" 2754msgstr ""
2770 2755
2771#: src/fs/fs_uri.c:1075 src/fs/fs_uri.c:1102 2756#: src/fs/fs_uri.c:1077 src/fs/fs_uri.c:1104
2772msgid "No keywords specified!\n" 2757msgid "No keywords specified!\n"
2773msgstr "" 2758msgstr ""
2774 2759
2775#: src/fs/fs_uri.c:1108 2760#: src/fs/fs_uri.c:1110
2776msgid "Number of double-quotes not balanced!\n" 2761msgid "Number of double-quotes not balanced!\n"
2777msgstr "" 2762msgstr ""
2778 2763
@@ -3479,93 +3464,93 @@ msgstr ""
3479msgid "# query plan entries" 3464msgid "# query plan entries"
3480msgstr "" 3465msgstr ""
3481 3466
3482#: src/fs/gnunet-service-fs_pr.c:329 3467#: src/fs/gnunet-service-fs_pr.c:330
3483msgid "# Pending requests created" 3468msgid "# Pending requests created"
3484msgstr "" 3469msgstr ""
3485 3470
3486#: src/fs/gnunet-service-fs_pr.c:421 src/fs/gnunet-service-fs_pr.c:658 3471#: src/fs/gnunet-service-fs_pr.c:422 src/fs/gnunet-service-fs_pr.c:662
3487msgid "# Pending requests active" 3472msgid "# Pending requests active"
3488msgstr "" 3473msgstr ""
3489 3474
3490#: src/fs/gnunet-service-fs_pr.c:838 3475#: src/fs/gnunet-service-fs_pr.c:837
3491msgid "# replies received and matched" 3476msgid "# replies received and matched"
3492msgstr "" 3477msgstr ""
3493 3478
3494#: src/fs/gnunet-service-fs_pr.c:916 3479#: src/fs/gnunet-service-fs_pr.c:911
3495msgid "# results found locally" 3480msgid "# results found locally"
3496msgstr "" 3481msgstr ""
3497 3482
3498#: src/fs/gnunet-service-fs_pr.c:1050 3483#: src/fs/gnunet-service-fs_pr.c:1045
3499msgid "# Datastore `PUT' failures" 3484msgid "# Datastore `PUT' failures"
3500msgstr "" 3485msgstr ""
3501 3486
3502#: src/fs/gnunet-service-fs_pr.c:1079 3487#: src/fs/gnunet-service-fs_pr.c:1074
3503msgid "# storage requests dropped due to high load" 3488msgid "# storage requests dropped due to high load"
3504msgstr "" 3489msgstr ""
3505 3490
3506#: src/fs/gnunet-service-fs_pr.c:1118 3491#: src/fs/gnunet-service-fs_pr.c:1113
3507msgid "# Replies received from DHT" 3492msgid "# Replies received from DHT"
3508msgstr "" 3493msgstr ""
3509 3494
3510#: src/fs/gnunet-service-fs_pr.c:1259 3495#: src/fs/gnunet-service-fs_pr.c:1268
3511msgid "# Replies received from CADET" 3496msgid "# Replies received from CADET"
3512msgstr "" 3497msgstr ""
3513 3498
3514#: src/fs/gnunet-service-fs_pr.c:1313 3499#: src/fs/gnunet-service-fs_pr.c:1323
3515#, c-format 3500#, c-format
3516msgid "Datastore lookup already took %s!\n" 3501msgid "Datastore lookup already took %s!\n"
3517msgstr "" 3502msgstr ""
3518 3503
3519#: src/fs/gnunet-service-fs_pr.c:1334 3504#: src/fs/gnunet-service-fs_pr.c:1344
3520#, c-format 3505#, c-format
3521msgid "On-demand lookup already took %s!\n" 3506msgid "On-demand lookup already took %s!\n"
3522msgstr "" 3507msgstr ""
3523 3508
3524#: src/fs/gnunet-service-fs_pr.c:1401 3509#: src/fs/gnunet-service-fs_pr.c:1411
3525msgid "# requested DBLOCK or IBLOCK not found" 3510msgid "# requested DBLOCK or IBLOCK not found"
3526msgstr "" 3511msgstr ""
3527 3512
3528#: src/fs/gnunet-service-fs_pr.c:1463 3513#: src/fs/gnunet-service-fs_pr.c:1473
3529msgid "# Datastore lookups concluded (error queueing)" 3514msgid "# Datastore lookups concluded (error queueing)"
3530msgstr "" 3515msgstr ""
3531 3516
3532#: src/fs/gnunet-service-fs_pr.c:1518 3517#: src/fs/gnunet-service-fs_pr.c:1528
3533msgid "# Datastore lookups concluded (no results)" 3518msgid "# Datastore lookups concluded (no results)"
3534msgstr "" 3519msgstr ""
3535 3520
3536#: src/fs/gnunet-service-fs_pr.c:1533 3521#: src/fs/gnunet-service-fs_pr.c:1543
3537msgid "# Datastore lookups concluded (seen all)" 3522msgid "# Datastore lookups concluded (seen all)"
3538msgstr "" 3523msgstr ""
3539 3524
3540#: src/fs/gnunet-service-fs_pr.c:1556 3525#: src/fs/gnunet-service-fs_pr.c:1566
3541msgid "# Datastore lookups aborted (more than MAX_RESULTS)" 3526msgid "# Datastore lookups aborted (more than MAX_RESULTS)"
3542msgstr "" 3527msgstr ""
3543 3528
3544#: src/fs/gnunet-service-fs_pr.c:1573 3529#: src/fs/gnunet-service-fs_pr.c:1583
3545msgid "# on-demand blocks matched requests" 3530msgid "# on-demand blocks matched requests"
3546msgstr "" 3531msgstr ""
3547 3532
3548#: src/fs/gnunet-service-fs_pr.c:1594 3533#: src/fs/gnunet-service-fs_pr.c:1604
3549msgid "# on-demand lookups performed successfully" 3534msgid "# on-demand lookups performed successfully"
3550msgstr "" 3535msgstr ""
3551 3536
3552#: src/fs/gnunet-service-fs_pr.c:1600 3537#: src/fs/gnunet-service-fs_pr.c:1610
3553msgid "# on-demand lookups failed" 3538msgid "# on-demand lookups failed"
3554msgstr "" 3539msgstr ""
3555 3540
3556#: src/fs/gnunet-service-fs_pr.c:1641 3541#: src/fs/gnunet-service-fs_pr.c:1656
3557msgid "# Datastore lookups concluded (found last result)" 3542msgid "# Datastore lookups concluded (found last result)"
3558msgstr "" 3543msgstr ""
3559 3544
3560#: src/fs/gnunet-service-fs_pr.c:1654 3545#: src/fs/gnunet-service-fs_pr.c:1669
3561msgid "# Datastore lookups concluded (load too high)" 3546msgid "# Datastore lookups concluded (load too high)"
3562msgstr "" 3547msgstr ""
3563 3548
3564#: src/fs/gnunet-service-fs_pr.c:1705 3549#: src/fs/gnunet-service-fs_pr.c:1720
3565msgid "# Datastore lookups initiated" 3550msgid "# Datastore lookups initiated"
3566msgstr "" 3551msgstr ""
3567 3552
3568#: src/fs/gnunet-service-fs_pr.c:1755 3553#: src/fs/gnunet-service-fs_pr.c:1784
3569msgid "# GAP PUT messages received" 3554msgid "# GAP PUT messages received"
3570msgstr "" 3555msgstr ""
3571 3556
@@ -3868,64 +3853,64 @@ msgstr ""
3868msgid "Failed to connect to the DNS service!\n" 3853msgid "Failed to connect to the DNS service!\n"
3869msgstr "" 3854msgstr ""
3870 3855
3871#: src/gns/gnunet-service-gns_resolver.c:659 3856#: src/gns/gnunet-service-gns_resolver.c:672
3872#, c-format 3857#, c-format
3873msgid "Protocol `%s' unknown, skipping labels.\n" 3858msgid "Protocol `%s' unknown, skipping labels.\n"
3874msgstr "" 3859msgstr ""
3875 3860
3876#: src/gns/gnunet-service-gns_resolver.c:671 3861#: src/gns/gnunet-service-gns_resolver.c:684
3877#, c-format 3862#, c-format
3878msgid "Service `%s' unknown for protocol `%s', trying as number.\n" 3863msgid "Service `%s' unknown for protocol `%s', trying as number.\n"
3879msgstr "" 3864msgstr ""
3880 3865
3881#: src/gns/gnunet-service-gns_resolver.c:677 3866#: src/gns/gnunet-service-gns_resolver.c:690
3882#, c-format 3867#, c-format
3883msgid "Service `%s' not a port, skipping service labels.\n" 3868msgid "Service `%s' not a port, skipping service labels.\n"
3884msgstr "" 3869msgstr ""
3885 3870
3886#: src/gns/gnunet-service-gns_resolver.c:891 3871#: src/gns/gnunet-service-gns_resolver.c:904
3887msgid "Failed to parse DNS response\n" 3872msgid "Failed to parse DNS response\n"
3888msgstr "" 3873msgstr ""
3889 3874
3890#: src/gns/gnunet-service-gns_resolver.c:1082 3875#: src/gns/gnunet-service-gns_resolver.c:1095
3891#, c-format 3876#, c-format
3892msgid "Skipping record of unsupported type %d\n" 3877msgid "Skipping record of unsupported type %d\n"
3893msgstr "" 3878msgstr ""
3894 3879
3895#: src/gns/gnunet-service-gns_resolver.c:1859 3880#: src/gns/gnunet-service-gns_resolver.c:1872
3896#, c-format 3881#, c-format
3897msgid "Name `%s' cannot be converted to IDNA." 3882msgid "Name `%s' cannot be converted to IDNA."
3898msgstr "" 3883msgstr ""
3899 3884
3900#: src/gns/gnunet-service-gns_resolver.c:1874 3885#: src/gns/gnunet-service-gns_resolver.c:1887
3901#, c-format 3886#, c-format
3902msgid "GNS lookup resulted in DNS name that is too long (`%s')\n" 3887msgid "GNS lookup resulted in DNS name that is too long (`%s')\n"
3903msgstr "" 3888msgstr ""
3904 3889
3905#: src/gns/gnunet-service-gns_resolver.c:1914 3890#: src/gns/gnunet-service-gns_resolver.c:1927
3906#, c-format 3891#, c-format
3907msgid "GNS lookup failed (zero records found for `%s')\n" 3892msgid "GNS lookup failed (zero records found for `%s')\n"
3908msgstr "" 3893msgstr ""
3909 3894
3910#: src/gns/gnunet-service-gns_resolver.c:2312 3895#: src/gns/gnunet-service-gns_resolver.c:2329
3911msgid "Unable to process critical delegation record\n" 3896msgid "Unable to process critical delegation record\n"
3912msgstr "" 3897msgstr ""
3913 3898
3914#: src/gns/gnunet-service-gns_resolver.c:2317 3899#: src/gns/gnunet-service-gns_resolver.c:2334
3915msgid "GNS lookup recursion failed (no delegation record found)\n" 3900msgid "GNS lookup recursion failed (no delegation record found)\n"
3916msgstr "" 3901msgstr ""
3917 3902
3918#: src/gns/gnunet-service-gns_resolver.c:2340 3903#: src/gns/gnunet-service-gns_resolver.c:2357
3919#, c-format 3904#, c-format
3920msgid "Failed to cache GNS resolution: %s\n" 3905msgid "Failed to cache GNS resolution: %s\n"
3921msgstr "" 3906msgstr ""
3922 3907
3923#: src/gns/gnunet-service-gns_resolver.c:2505 3908#: src/gns/gnunet-service-gns_resolver.c:2522
3924#, c-format 3909#, c-format
3925msgid "GNS namecache returned empty result for `%s'\n" 3910msgid "GNS namecache returned empty result for `%s'\n"
3926msgstr "" 3911msgstr ""
3927 3912
3928#: src/gns/gnunet-service-gns_resolver.c:2652 3913#: src/gns/gnunet-service-gns_resolver.c:2669
3929#, c-format 3914#, c-format
3930msgid "Zone %s was revoked, resolution fails\n" 3915msgid "Zone %s was revoked, resolution fails\n"
3931msgstr "" 3916msgstr ""
@@ -3967,31 +3952,39 @@ msgstr "Impossibile avviare il servizio ' %s'\n"
3967msgid "Gns REST API initialized\n" 3952msgid "Gns REST API initialized\n"
3968msgstr "" 3953msgstr ""
3969 3954
3970#: src/gnsrecord/gnsrecord_misc.c:448 3955#: src/gnsrecord/gnsrecord_misc.c:52
3956msgid "Label is NULL which is not allowed\n"
3957msgstr ""
3958
3959#: src/gnsrecord/gnsrecord_misc.c:57
3960msgid "Label contains `.' which is not allowed\n"
3961msgstr ""
3962
3963#: src/gnsrecord/gnsrecord_misc.c:464
3971msgid "Zone delegation record not allowed in apex." 3964msgid "Zone delegation record not allowed in apex."
3972msgstr "" 3965msgstr ""
3973 3966
3974#: src/gnsrecord/gnsrecord_misc.c:456 3967#: src/gnsrecord/gnsrecord_misc.c:472
3975msgid "Zone delegation record set contains mutually exclusive records." 3968msgid "Zone delegation record set contains mutually exclusive records."
3976msgstr "" 3969msgstr ""
3977 3970
3978#: src/gnsrecord/gnsrecord_misc.c:466 3971#: src/gnsrecord/gnsrecord_misc.c:482
3979msgid "Multiple REDIRECT records." 3972msgid "Multiple REDIRECT records."
3980msgstr "" 3973msgstr ""
3981 3974
3982#: src/gnsrecord/gnsrecord_misc.c:475 src/gnsrecord/gnsrecord_misc.c:501 3975#: src/gnsrecord/gnsrecord_misc.c:491 src/gnsrecord/gnsrecord_misc.c:517
3983msgid "Redirection record set conains mutually exclusive records." 3976msgid "Redirection record set conains mutually exclusive records."
3984msgstr "" 3977msgstr ""
3985 3978
3986#: src/gnsrecord/gnsrecord_misc.c:482 3979#: src/gnsrecord/gnsrecord_misc.c:498
3987msgid "Redirection records not allowed in apex." 3980msgid "Redirection records not allowed in apex."
3988msgstr "" 3981msgstr ""
3989 3982
3990#: src/gnsrecord/gnsrecord_misc.c:493 3983#: src/gnsrecord/gnsrecord_misc.c:509
3991msgid "Redirection records not allowed in apex.." 3984msgid "Redirection records not allowed in apex.."
3992msgstr "" 3985msgstr ""
3993 3986
3994#: src/gnsrecord/gnsrecord_misc.c:515 3987#: src/gnsrecord/gnsrecord_misc.c:531
3995msgid "Mutually exclusive records." 3988msgid "Mutually exclusive records."
3996msgstr "" 3989msgstr ""
3997 3990
@@ -4552,12 +4545,18 @@ msgstr ""
4552msgid "Failed to parse JSON in option `%s': %s (%s)\n" 4545msgid "Failed to parse JSON in option `%s': %s (%s)\n"
4553msgstr "Impossibile avviare il servizio ' %s'\n" 4546msgstr "Impossibile avviare il servizio ' %s'\n"
4554 4547
4555#: src/messenger/plugin_gnsrecord_messenger.c:118 4548#: src/messenger/plugin_gnsrecord_messenger.c:136
4556#: src/messenger/plugin_gnsrecord_messenger.c:133 4549#: src/messenger/plugin_gnsrecord_messenger.c:151
4557#, fuzzy, c-format 4550#, fuzzy, c-format
4558msgid "Unable to parse MESSENGER_ROOM_ENTRY record `%s'\n" 4551msgid "Unable to parse MESSENGER_ROOM_ENTRY record `%s'\n"
4559msgstr "Impossibile avviare il servizio ' %s'\n" 4552msgstr "Impossibile avviare il servizio ' %s'\n"
4560 4553
4554#: src/messenger/plugin_gnsrecord_messenger.c:172
4555#: src/messenger/plugin_gnsrecord_messenger.c:187
4556#, fuzzy, c-format
4557msgid "Unable to parse MESSENGER_ROOM_DETAILS record `%s'\n"
4558msgstr "Impossibile avviare il servizio ' %s'\n"
4559
4561#: src/my/my.c:196 src/my/my.c:215 4560#: src/my/my.c:196 src/my/my.c:215
4562#, c-format 4561#, c-format
4563msgid "%s failed at %s:%d with error: %s\n" 4562msgid "%s failed at %s:%d with error: %s\n"
@@ -4598,7 +4597,7 @@ msgstr "# messaggi PONG ricevuti"
4598msgid "You must specify a name\n" 4597msgid "You must specify a name\n"
4599msgstr "È necessario specificare un nome\n" 4598msgstr "È necessario specificare un nome\n"
4600 4599
4601#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1591 4600#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1582
4602msgid "name of the record to add/delete/display" 4601msgid "name of the record to add/delete/display"
4603msgstr "" 4602msgstr ""
4604 4603
@@ -4606,7 +4605,7 @@ msgstr ""
4606msgid "specifies the public key of the zone to look in" 4605msgid "specifies the public key of the zone to look in"
4607msgstr "" 4606msgstr ""
4608 4607
4609#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1652 4608#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1643
4610msgid "GNUnet zone manipulation tool" 4609msgid "GNUnet zone manipulation tool"
4611msgstr "" 4610msgstr ""
4612 4611
@@ -4849,12 +4848,7 @@ msgstr ""
4849msgid "Invalid URI `%s'\n" 4848msgid "Invalid URI `%s'\n"
4850msgstr "" 4849msgstr ""
4851 4850
4852#: src/namestore/gnunet-namestore.c:1242 4851#: src/namestore/gnunet-namestore.c:1283
4853#, c-format
4854msgid "Label `%s' contains `.' which is not allowed\n"
4855msgstr ""
4856
4857#: src/namestore/gnunet-namestore.c:1292
4858#, c-format 4852#, c-format
4859msgid "" 4853msgid ""
4860"No default identity configured for `namestore' subsystem\n" 4854"No default identity configured for `namestore' subsystem\n"
@@ -4862,99 +4856,99 @@ msgid ""
4862"Run gnunet-identity -d to get a list of choices for $NAME\n" 4856"Run gnunet-identity -d to get a list of choices for $NAME\n"
4863msgstr "" 4857msgstr ""
4864 4858
4865#: src/namestore/gnunet-namestore.c:1357 4859#: src/namestore/gnunet-namestore.c:1348
4866#, c-format 4860#, c-format
4867msgid "Superfluous command line arguments (starting with `%s') ignored\n" 4861msgid "Superfluous command line arguments (starting with `%s') ignored\n"
4868msgstr "" 4862msgstr ""
4869 4863
4870#: src/namestore/gnunet-namestore.c:1386 4864#: src/namestore/gnunet-namestore.c:1377
4871#, c-format 4865#, c-format
4872msgid "Cannot connect to identity service\n" 4866msgid "Cannot connect to identity service\n"
4873msgstr "" 4867msgstr ""
4874 4868
4875#: src/namestore/gnunet-namestore.c:1433 4869#: src/namestore/gnunet-namestore.c:1424
4876msgid "Empty record line argument is not allowed.\n" 4870msgid "Empty record line argument is not allowed.\n"
4877msgstr "" 4871msgstr ""
4878 4872
4879#: src/namestore/gnunet-namestore.c:1445 4873#: src/namestore/gnunet-namestore.c:1436
4880#, c-format 4874#, c-format
4881msgid "Invalid expiration time `%s' (must be without unit)\n" 4875msgid "Invalid expiration time `%s' (must be without unit)\n"
4882msgstr "" 4876msgstr ""
4883 4877
4884#: src/namestore/gnunet-namestore.c:1457 src/namestore/gnunet-namestore.c:1473 4878#: src/namestore/gnunet-namestore.c:1448 src/namestore/gnunet-namestore.c:1464
4885#: src/namestore/gnunet-namestore.c:1490 4879#: src/namestore/gnunet-namestore.c:1481
4886#, c-format 4880#, c-format
4887msgid "Missing entries in record line `%s'.\n" 4881msgid "Missing entries in record line `%s'.\n"
4888msgstr "" 4882msgstr ""
4889 4883
4890#: src/namestore/gnunet-namestore.c:1465 4884#: src/namestore/gnunet-namestore.c:1456
4891#, fuzzy, c-format 4885#, fuzzy, c-format
4892msgid "Unknown record type `%s'\n" 4886msgid "Unknown record type `%s'\n"
4893msgstr "Comando `%s' sconosciuto.\n" 4887msgstr "Comando `%s' sconosciuto.\n"
4894 4888
4895#: src/namestore/gnunet-namestore.c:1503 4889#: src/namestore/gnunet-namestore.c:1494
4896#, fuzzy, c-format 4890#, fuzzy, c-format
4897msgid "Invalid record data for type %s: `%s'.\n" 4891msgid "Invalid record data for type %s: `%s'.\n"
4898msgstr "Indirizzo IPv6 non valido: `%s'\n" 4892msgstr "Indirizzo IPv6 non valido: `%s'\n"
4899 4893
4900#: src/namestore/gnunet-namestore.c:1560 4894#: src/namestore/gnunet-namestore.c:1551
4901msgid "add record" 4895msgid "add record"
4902msgstr "" 4896msgstr ""
4903 4897
4904#: src/namestore/gnunet-namestore.c:1563 4898#: src/namestore/gnunet-namestore.c:1554
4905msgid "delete record" 4899msgid "delete record"
4906msgstr "" 4900msgstr ""
4907 4901
4908#: src/namestore/gnunet-namestore.c:1567 4902#: src/namestore/gnunet-namestore.c:1558
4909msgid "display records" 4903msgid "display records"
4910msgstr "" 4904msgstr ""
4911 4905
4912#: src/namestore/gnunet-namestore.c:1574 4906#: src/namestore/gnunet-namestore.c:1565
4913msgid "" 4907msgid ""
4914"expiration time for record to use (for adding only), \"never\" is possible" 4908"expiration time for record to use (for adding only), \"never\" is possible"
4915msgstr "" 4909msgstr ""
4916 4910
4917#: src/namestore/gnunet-namestore.c:1580 4911#: src/namestore/gnunet-namestore.c:1571
4918msgid "set the desired nick name for the zone" 4912msgid "set the desired nick name for the zone"
4919msgstr "" 4913msgstr ""
4920 4914
4921#: src/namestore/gnunet-namestore.c:1585 4915#: src/namestore/gnunet-namestore.c:1576
4922msgid "monitor changes in the namestore" 4916msgid "monitor changes in the namestore"
4923msgstr "" 4917msgstr ""
4924 4918
4925#: src/namestore/gnunet-namestore.c:1597 4919#: src/namestore/gnunet-namestore.c:1588
4926msgid "determine our name for the given PKEY" 4920msgid "determine our name for the given PKEY"
4927msgstr "" 4921msgstr ""
4928 4922
4929#: src/namestore/gnunet-namestore.c:1604 4923#: src/namestore/gnunet-namestore.c:1595
4930msgid "" 4924msgid ""
4931"set record set to values given by (possibly multiple) RECORDLINES; can be " 4925"set record set to values given by (possibly multiple) RECORDLINES; can be "
4932"specified multiple times" 4926"specified multiple times"
4933msgstr "" 4927msgstr ""
4934 4928
4935#: src/namestore/gnunet-namestore.c:1610 4929#: src/namestore/gnunet-namestore.c:1601
4936msgid "type of the record to add/delete/display" 4930msgid "type of the record to add/delete/display"
4937msgstr "" 4931msgstr ""
4938 4932
4939#: src/namestore/gnunet-namestore.c:1615 4933#: src/namestore/gnunet-namestore.c:1606
4940msgid "URI to import into our zone" 4934msgid "URI to import into our zone"
4941msgstr "" 4935msgstr ""
4942 4936
4943#: src/namestore/gnunet-namestore.c:1621 4937#: src/namestore/gnunet-namestore.c:1612
4944msgid "value of the record to add/delete" 4938msgid "value of the record to add/delete"
4945msgstr "" 4939msgstr ""
4946 4940
4947#: src/namestore/gnunet-namestore.c:1625 4941#: src/namestore/gnunet-namestore.c:1616
4948msgid "create or list public record" 4942msgid "create or list public record"
4949msgstr "" 4943msgstr ""
4950 4944
4951#: src/namestore/gnunet-namestore.c:1631 4945#: src/namestore/gnunet-namestore.c:1622
4952msgid "" 4946msgid ""
4953"create shadow record (only valid if all other records of the same type have " 4947"create shadow record (only valid if all other records of the same type have "
4954"expired" 4948"expired"
4955msgstr "" 4949msgstr ""
4956 4950
4957#: src/namestore/gnunet-namestore.c:1637 4951#: src/namestore/gnunet-namestore.c:1628
4958msgid "name of the ego controlling the zone" 4952msgid "name of the ego controlling the zone"
4959msgstr "" 4953msgstr ""
4960 4954
@@ -4963,7 +4957,17 @@ msgstr ""
4963msgid "Failed to replicate block in namecache: %s\n" 4957msgid "Failed to replicate block in namecache: %s\n"
4964msgstr "" 4958msgstr ""
4965 4959
4966#: src/namestore/gnunet-service-namestore.c:1668 4960#: src/namestore/gnunet-service-namestore.c:1559
4961#, fuzzy
4962msgid "Error normalizing name."
4963msgstr "Errore durante la scrittura di `%s'.\n"
4964
4965#: src/namestore/gnunet-service-namestore.c:1582
4966#, fuzzy
4967msgid "Error deserializing records."
4968msgstr "Errore interno."
4969
4970#: src/namestore/gnunet-service-namestore.c:1691
4967msgid "Store failed" 4971msgid "Store failed"
4968msgstr "" 4972msgstr ""
4969 4973
@@ -6659,8 +6663,8 @@ msgid "GNUnet topology control"
6659msgstr "" 6663msgstr ""
6660 6664
6661#: src/transport/gnunet-communicator-tcp.c:3338 6665#: src/transport/gnunet-communicator-tcp.c:3338
6662#: src/transport/gnunet-communicator-udp.c:3856 6666#: src/transport/gnunet-communicator-udp.c:3867
6663#: src/transport/gnunet-service-tng.c:10623 6667#: src/transport/gnunet-service-tng.c:10926
6664#: src/transport/gnunet-service-transport.c:2627 6668#: src/transport/gnunet-service-transport.c:2627
6665msgid "Transport service is lacking key configuration settings. Exiting.\n" 6669msgid "Transport service is lacking key configuration settings. Exiting.\n"
6666msgstr "" 6670msgstr ""
@@ -6669,7 +6673,7 @@ msgstr ""
6669msgid "GNUnet TCP communicator" 6673msgid "GNUnet TCP communicator"
6670msgstr "" 6674msgstr ""
6671 6675
6672#: src/transport/gnunet-communicator-udp.c:3931 6676#: src/transport/gnunet-communicator-udp.c:3942
6673msgid "GNUnet UDP communicator" 6677msgid "GNUnet UDP communicator"
6674msgstr "" 6678msgstr ""
6675 6679
@@ -8011,12 +8015,12 @@ msgstr ""
8011msgid "libgcrypt has not the expected version (version %s is required).\n" 8015msgid "libgcrypt has not the expected version (version %s is required).\n"
8012msgstr "" 8016msgstr ""
8013 8017
8014#: src/util/crypto_rsa.c:901 8018#: src/util/crypto_rsa.c:907
8015#, c-format 8019#, c-format
8016msgid "RSA signing failed at %s:%d: %s\n" 8020msgid "RSA signing failed at %s:%d: %s\n"
8017msgstr "" 8021msgstr ""
8018 8022
8019#: src/util/crypto_rsa.c:1201 8023#: src/util/crypto_rsa.c:1207
8020#, c-format 8024#, c-format
8021msgid "RSA signature verification failed at %s:%d: %s\n" 8025msgid "RSA signature verification failed at %s:%d: %s\n"
8022msgstr "" 8026msgstr ""
@@ -8685,12 +8689,12 @@ msgstr ""
8685msgid "Wrong format `%s' for network\n" 8689msgid "Wrong format `%s' for network\n"
8686msgstr "" 8690msgstr ""
8687 8691
8688#: src/util/time.c:870 src/util/time.c:898 8692#: src/util/time.c:900 src/util/time.c:928
8689#, c-format 8693#, c-format
8690msgid "Failed to map `%s', cannot assure monotonic time!\n" 8694msgid "Failed to map `%s', cannot assure monotonic time!\n"
8691msgstr "" 8695msgstr ""
8692 8696
8693#: src/util/time.c:906 8697#: src/util/time.c:936
8694#, c-format 8698#, c-format
8695msgid "" 8699msgid ""
8696"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n" 8700"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"
diff --git a/po/sr.po b/po/sr.po
index 47494eeff..f767e95fe 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -6,7 +6,7 @@ msgid ""
6msgstr "" 6msgstr ""
7"Project-Id-Version: gnunet-0.10.1\n" 7"Project-Id-Version: gnunet-0.10.1\n"
8"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n" 8"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
9"POT-Creation-Date: 2022-03-04 22:23+0100\n" 9"POT-Creation-Date: 2022-04-01 08:42+0200\n"
10"PO-Revision-Date: 2020-10-23 18:39+0200\n" 10"PO-Revision-Date: 2020-10-23 18:39+0200\n"
11"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n" 11"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
12"Language-Team: Serbian <(nothing)>\n" 12"Language-Team: Serbian <(nothing)>\n"
@@ -18,7 +18,7 @@ msgstr ""
18"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" 18"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
19"X-Bugs: Report translation errors to the Language-Team address.\n" 19"X-Bugs: Report translation errors to the Language-Team address.\n"
20 20
21#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1254 21#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1245
22#, c-format 22#, c-format
23msgid "Ego `%s' not known to identity service\n" 23msgid "Ego `%s' not known to identity service\n"
24msgstr "Его „%s“ није познат услузи идентитета\n" 24msgstr "Его „%s“ није познат услузи идентитета\n"
@@ -2131,21 +2131,6 @@ msgstr ""
2131msgid "Measure quality and performance of the DHT service." 2131msgid "Measure quality and performance of the DHT service."
2132msgstr "Мери квалитет и учинковитост НСЕ услуге." 2132msgstr "Мери квалитет и учинковитост НСЕ услуге."
2133 2133
2134#: src/dht/plugin_block_dht.c:404
2135#, c-format
2136msgid "Block not of type %u\n"
2137msgstr "Блок није врсте %u\n"
2138
2139#: src/dht/plugin_block_dht.c:413
2140#, fuzzy, c-format
2141msgid "Size mismatch for block with type %u\n"
2142msgstr "Величин не одговара за блок\n"
2143
2144#: src/dht/plugin_block_dht.c:424
2145#, c-format
2146msgid "Block of type %u is malformed\n"
2147msgstr "Блок врсте %u је лош\n"
2148
2149#: src/dns/gnunet-dns-monitor.c:371 src/dns/gnunet-dns-monitor.c:376 2134#: src/dns/gnunet-dns-monitor.c:371 src/dns/gnunet-dns-monitor.c:376
2150msgid "only monitor DNS queries" 2135msgid "only monitor DNS queries"
2151msgstr "само надгледа ДНС упите" 2136msgstr "само надгледа ДНС упите"
@@ -2880,20 +2865,20 @@ msgstr "SKS УРИ је лоше (не могу да обрадим време
2880msgid "LOC URI malformed (signature failed validation)" 2865msgid "LOC URI malformed (signature failed validation)"
2881msgstr "SKS УРИ је лоше (потврђивање потписа није успело)" 2866msgstr "SKS УРИ је лоше (потврђивање потписа није успело)"
2882 2867
2883#: src/fs/fs_uri.c:652 2868#: src/fs/fs_uri.c:653
2884#, fuzzy 2869#, fuzzy
2885msgid "invalid argument" 2870msgid "invalid argument"
2886msgstr "Неисправан аргумент „%s“\n" 2871msgstr "Неисправан аргумент „%s“\n"
2887 2872
2888#: src/fs/fs_uri.c:671 2873#: src/fs/fs_uri.c:673
2889msgid "Unrecognized URI type" 2874msgid "Unrecognized URI type"
2890msgstr "Непозната УРИ врста" 2875msgstr "Непозната УРИ врста"
2891 2876
2892#: src/fs/fs_uri.c:1075 src/fs/fs_uri.c:1102 2877#: src/fs/fs_uri.c:1077 src/fs/fs_uri.c:1104
2893msgid "No keywords specified!\n" 2878msgid "No keywords specified!\n"
2894msgstr "Нису наведене речи кључа!\n" 2879msgstr "Нису наведене речи кључа!\n"
2895 2880
2896#: src/fs/fs_uri.c:1108 2881#: src/fs/fs_uri.c:1110
2897msgid "Number of double-quotes not balanced!\n" 2882msgid "Number of double-quotes not balanced!\n"
2898msgstr "Број двоструких квота које нису уравнотежене!\n" 2883msgstr "Број двоструких квота које нису уравнотежене!\n"
2899 2884
@@ -3634,94 +3619,94 @@ msgstr "# захтеви су освежени"
3634msgid "# query plan entries" 3619msgid "# query plan entries"
3635msgstr "# пропитује обичне уносе" 3620msgstr "# пропитује обичне уносе"
3636 3621
3637#: src/fs/gnunet-service-fs_pr.c:329 3622#: src/fs/gnunet-service-fs_pr.c:330
3638msgid "# Pending requests created" 3623msgid "# Pending requests created"
3639msgstr "# Захтеви на чекању су створени" 3624msgstr "# Захтеви на чекању су створени"
3640 3625
3641#: src/fs/gnunet-service-fs_pr.c:421 src/fs/gnunet-service-fs_pr.c:658 3626#: src/fs/gnunet-service-fs_pr.c:422 src/fs/gnunet-service-fs_pr.c:662
3642msgid "# Pending requests active" 3627msgid "# Pending requests active"
3643msgstr "# Захтеви на чекању су активни" 3628msgstr "# Захтеви на чекању су активни"
3644 3629
3645#: src/fs/gnunet-service-fs_pr.c:838 3630#: src/fs/gnunet-service-fs_pr.c:837
3646msgid "# replies received and matched" 3631msgid "# replies received and matched"
3647msgstr "# одговори су примљени и подударени" 3632msgstr "# одговори су примљени и подударени"
3648 3633
3649#: src/fs/gnunet-service-fs_pr.c:916 3634#: src/fs/gnunet-service-fs_pr.c:911
3650msgid "# results found locally" 3635msgid "# results found locally"
3651msgstr "# резултати су пронађени локално" 3636msgstr "# резултати су пронађени локално"
3652 3637
3653#: src/fs/gnunet-service-fs_pr.c:1050 3638#: src/fs/gnunet-service-fs_pr.c:1045
3654msgid "# Datastore `PUT' failures" 3639msgid "# Datastore `PUT' failures"
3655msgstr "# Неуспеси „СТАВИ“ смештаја података" 3640msgstr "# Неуспеси „СТАВИ“ смештаја података"
3656 3641
3657#: src/fs/gnunet-service-fs_pr.c:1079 3642#: src/fs/gnunet-service-fs_pr.c:1074
3658msgid "# storage requests dropped due to high load" 3643msgid "# storage requests dropped due to high load"
3659msgstr "# захтеви смештаја су одбачени услед високог утовара" 3644msgstr "# захтеви смештаја су одбачени услед високог утовара"
3660 3645
3661#: src/fs/gnunet-service-fs_pr.c:1118 3646#: src/fs/gnunet-service-fs_pr.c:1113
3662msgid "# Replies received from DHT" 3647msgid "# Replies received from DHT"
3663msgstr "# Одговори су примљени од DHT-а" 3648msgstr "# Одговори су примљени од DHT-а"
3664 3649
3665#: src/fs/gnunet-service-fs_pr.c:1259 3650#: src/fs/gnunet-service-fs_pr.c:1268
3666#, fuzzy 3651#, fuzzy
3667msgid "# Replies received from CADET" 3652msgid "# Replies received from CADET"
3668msgstr "# Одговори су примљени од DHT-а" 3653msgstr "# Одговори су примљени од DHT-а"
3669 3654
3670#: src/fs/gnunet-service-fs_pr.c:1313 3655#: src/fs/gnunet-service-fs_pr.c:1323
3671#, c-format 3656#, c-format
3672msgid "Datastore lookup already took %s!\n" 3657msgid "Datastore lookup already took %s!\n"
3673msgstr "Претрага смештаја података је већ узела „%s“!\n" 3658msgstr "Претрага смештаја података је већ узела „%s“!\n"
3674 3659
3675#: src/fs/gnunet-service-fs_pr.c:1334 3660#: src/fs/gnunet-service-fs_pr.c:1344
3676#, c-format 3661#, c-format
3677msgid "On-demand lookup already took %s!\n" 3662msgid "On-demand lookup already took %s!\n"
3678msgstr "Претрага на-захтев је већ узела „%s“!\n" 3663msgstr "Претрага на-захтев је већ узела „%s“!\n"
3679 3664
3680#: src/fs/gnunet-service-fs_pr.c:1401 3665#: src/fs/gnunet-service-fs_pr.c:1411
3681msgid "# requested DBLOCK or IBLOCK not found" 3666msgid "# requested DBLOCK or IBLOCK not found"
3682msgstr "# захтевани DBLOCK или IBLOCK нису нађени" 3667msgstr "# захтевани DBLOCK или IBLOCK нису нађени"
3683 3668
3684#: src/fs/gnunet-service-fs_pr.c:1463 3669#: src/fs/gnunet-service-fs_pr.c:1473
3685msgid "# Datastore lookups concluded (error queueing)" 3670msgid "# Datastore lookups concluded (error queueing)"
3686msgstr "# Претраге смештаја података су закључене (грешка стављања у ред)" 3671msgstr "# Претраге смештаја података су закључене (грешка стављања у ред)"
3687 3672
3688#: src/fs/gnunet-service-fs_pr.c:1518 3673#: src/fs/gnunet-service-fs_pr.c:1528
3689msgid "# Datastore lookups concluded (no results)" 3674msgid "# Datastore lookups concluded (no results)"
3690msgstr "# Претраге смештаја података су закључене (нема резултата)" 3675msgstr "# Претраге смештаја података су закључене (нема резултата)"
3691 3676
3692#: src/fs/gnunet-service-fs_pr.c:1533 3677#: src/fs/gnunet-service-fs_pr.c:1543
3693msgid "# Datastore lookups concluded (seen all)" 3678msgid "# Datastore lookups concluded (seen all)"
3694msgstr "# Претраге смештаја података су закључене (видех све)" 3679msgstr "# Претраге смештаја података су закључене (видех све)"
3695 3680
3696#: src/fs/gnunet-service-fs_pr.c:1556 3681#: src/fs/gnunet-service-fs_pr.c:1566
3697msgid "# Datastore lookups aborted (more than MAX_RESULTS)" 3682msgid "# Datastore lookups aborted (more than MAX_RESULTS)"
3698msgstr "# Претраге смештаја података су прекинуте (више од „MAX_RESULTS“)" 3683msgstr "# Претраге смештаја података су прекинуте (више од „MAX_RESULTS“)"
3699 3684
3700#: src/fs/gnunet-service-fs_pr.c:1573 3685#: src/fs/gnunet-service-fs_pr.c:1583
3701msgid "# on-demand blocks matched requests" 3686msgid "# on-demand blocks matched requests"
3702msgstr "# блокови на-захтев одговарају захтевима" 3687msgstr "# блокови на-захтев одговарају захтевима"
3703 3688
3704#: src/fs/gnunet-service-fs_pr.c:1594 3689#: src/fs/gnunet-service-fs_pr.c:1604
3705msgid "# on-demand lookups performed successfully" 3690msgid "# on-demand lookups performed successfully"
3706msgstr "# претраге на-захтев су обављене успешно" 3691msgstr "# претраге на-захтев су обављене успешно"
3707 3692
3708#: src/fs/gnunet-service-fs_pr.c:1600 3693#: src/fs/gnunet-service-fs_pr.c:1610
3709msgid "# on-demand lookups failed" 3694msgid "# on-demand lookups failed"
3710msgstr "# претраге на-захтев нису успеле" 3695msgstr "# претраге на-захтев нису успеле"
3711 3696
3712#: src/fs/gnunet-service-fs_pr.c:1641 3697#: src/fs/gnunet-service-fs_pr.c:1656
3713msgid "# Datastore lookups concluded (found last result)" 3698msgid "# Datastore lookups concluded (found last result)"
3714msgstr "# Претраге смештаја података су закључене (нађох последњи резултат)" 3699msgstr "# Претраге смештаја података су закључене (нађох последњи резултат)"
3715 3700
3716#: src/fs/gnunet-service-fs_pr.c:1654 3701#: src/fs/gnunet-service-fs_pr.c:1669
3717msgid "# Datastore lookups concluded (load too high)" 3702msgid "# Datastore lookups concluded (load too high)"
3718msgstr "# Претраге смештаја података су закључене (утовар је превелик)" 3703msgstr "# Претраге смештаја података су закључене (утовар је превелик)"
3719 3704
3720#: src/fs/gnunet-service-fs_pr.c:1705 3705#: src/fs/gnunet-service-fs_pr.c:1720
3721msgid "# Datastore lookups initiated" 3706msgid "# Datastore lookups initiated"
3722msgstr "# Претраге смештаја података су покренуте" 3707msgstr "# Претраге смештаја података су покренуте"
3723 3708
3724#: src/fs/gnunet-service-fs_pr.c:1755 3709#: src/fs/gnunet-service-fs_pr.c:1784
3725msgid "# GAP PUT messages received" 3710msgid "# GAP PUT messages received"
3726msgstr "# поруке ЈАЗ СТАВИ су примљене" 3711msgstr "# поруке ЈАЗ СТАВИ су примљене"
3727 3712
@@ -4033,64 +4018,64 @@ msgstr "Грешка претварања ГНС одговора у ДНС од
4033msgid "Failed to connect to the DNS service!\n" 4018msgid "Failed to connect to the DNS service!\n"
4034msgstr "Нисам успео да се повежем са ДНС услугом!\n" 4019msgstr "Нисам успео да се повежем са ДНС услугом!\n"
4035 4020
4036#: src/gns/gnunet-service-gns_resolver.c:659 4021#: src/gns/gnunet-service-gns_resolver.c:672
4037#, c-format 4022#, c-format
4038msgid "Protocol `%s' unknown, skipping labels.\n" 4023msgid "Protocol `%s' unknown, skipping labels.\n"
4039msgstr "" 4024msgstr ""
4040 4025
4041#: src/gns/gnunet-service-gns_resolver.c:671 4026#: src/gns/gnunet-service-gns_resolver.c:684
4042#, c-format 4027#, c-format
4043msgid "Service `%s' unknown for protocol `%s', trying as number.\n" 4028msgid "Service `%s' unknown for protocol `%s', trying as number.\n"
4044msgstr "" 4029msgstr ""
4045 4030
4046#: src/gns/gnunet-service-gns_resolver.c:677 4031#: src/gns/gnunet-service-gns_resolver.c:690
4047#, c-format 4032#, c-format
4048msgid "Service `%s' not a port, skipping service labels.\n" 4033msgid "Service `%s' not a port, skipping service labels.\n"
4049msgstr "" 4034msgstr ""
4050 4035
4051#: src/gns/gnunet-service-gns_resolver.c:891 4036#: src/gns/gnunet-service-gns_resolver.c:904
4052msgid "Failed to parse DNS response\n" 4037msgid "Failed to parse DNS response\n"
4053msgstr "Нисам успео да обрадим ДНС одговор\n" 4038msgstr "Нисам успео да обрадим ДНС одговор\n"
4054 4039
4055#: src/gns/gnunet-service-gns_resolver.c:1082 4040#: src/gns/gnunet-service-gns_resolver.c:1095
4056#, c-format 4041#, c-format
4057msgid "Skipping record of unsupported type %d\n" 4042msgid "Skipping record of unsupported type %d\n"
4058msgstr "Прескачем запис неподржане врсте %d\n" 4043msgstr "Прескачем запис неподржане врсте %d\n"
4059 4044
4060#: src/gns/gnunet-service-gns_resolver.c:1859 4045#: src/gns/gnunet-service-gns_resolver.c:1872
4061#, c-format 4046#, c-format
4062msgid "Name `%s' cannot be converted to IDNA." 4047msgid "Name `%s' cannot be converted to IDNA."
4063msgstr "" 4048msgstr ""
4064 4049
4065#: src/gns/gnunet-service-gns_resolver.c:1874 4050#: src/gns/gnunet-service-gns_resolver.c:1887
4066#, c-format 4051#, c-format
4067msgid "GNS lookup resulted in DNS name that is too long (`%s')\n" 4052msgid "GNS lookup resulted in DNS name that is too long (`%s')\n"
4068msgstr "ГНС претраживање је резултирало ДНС називом који је предуг („%s“)\n" 4053msgstr "ГНС претраживање је резултирало ДНС називом који је предуг („%s“)\n"
4069 4054
4070#: src/gns/gnunet-service-gns_resolver.c:1914 4055#: src/gns/gnunet-service-gns_resolver.c:1927
4071#, fuzzy, c-format 4056#, fuzzy, c-format
4072msgid "GNS lookup failed (zero records found for `%s')\n" 4057msgid "GNS lookup failed (zero records found for `%s')\n"
4073msgstr "Дубачење ГНС претраге није успело (нисам нашао запис изасланства)\n" 4058msgstr "Дубачење ГНС претраге није успело (нисам нашао запис изасланства)\n"
4074 4059
4075#: src/gns/gnunet-service-gns_resolver.c:2312 4060#: src/gns/gnunet-service-gns_resolver.c:2329
4076msgid "Unable to process critical delegation record\n" 4061msgid "Unable to process critical delegation record\n"
4077msgstr "" 4062msgstr ""
4078 4063
4079#: src/gns/gnunet-service-gns_resolver.c:2317 4064#: src/gns/gnunet-service-gns_resolver.c:2334
4080msgid "GNS lookup recursion failed (no delegation record found)\n" 4065msgid "GNS lookup recursion failed (no delegation record found)\n"
4081msgstr "Дубачење ГНС претраге није успело (нисам нашао запис изасланства)\n" 4066msgstr "Дубачење ГНС претраге није успело (нисам нашао запис изасланства)\n"
4082 4067
4083#: src/gns/gnunet-service-gns_resolver.c:2340 4068#: src/gns/gnunet-service-gns_resolver.c:2357
4084#, c-format 4069#, c-format
4085msgid "Failed to cache GNS resolution: %s\n" 4070msgid "Failed to cache GNS resolution: %s\n"
4086msgstr "Нисам успео да сместим у оставу ГНС резолуцију: %s\n" 4071msgstr "Нисам успео да сместим у оставу ГНС резолуцију: %s\n"
4087 4072
4088#: src/gns/gnunet-service-gns_resolver.c:2505 4073#: src/gns/gnunet-service-gns_resolver.c:2522
4089#, fuzzy, c-format 4074#, fuzzy, c-format
4090msgid "GNS namecache returned empty result for `%s'\n" 4075msgid "GNS namecache returned empty result for `%s'\n"
4091msgstr "АТС је вратио резултате за %u адресе\n" 4076msgstr "АТС је вратио резултате за %u адресе\n"
4092 4077
4093#: src/gns/gnunet-service-gns_resolver.c:2652 4078#: src/gns/gnunet-service-gns_resolver.c:2669
4094#, c-format 4079#, c-format
4095msgid "Zone %s was revoked, resolution fails\n" 4080msgid "Zone %s was revoked, resolution fails\n"
4096msgstr "Зона %s је опозвана, резолуција није успела\n" 4081msgstr "Зона %s је опозвана, резолуција није успела\n"
@@ -4133,31 +4118,39 @@ msgstr "Не могу да обрадим ниску ВПН записа „%s
4133msgid "Gns REST API initialized\n" 4118msgid "Gns REST API initialized\n"
4134msgstr "Меш је покренут\n" 4119msgstr "Меш је покренут\n"
4135 4120
4136#: src/gnsrecord/gnsrecord_misc.c:448 4121#: src/gnsrecord/gnsrecord_misc.c:52
4122msgid "Label is NULL which is not allowed\n"
4123msgstr ""
4124
4125#: src/gnsrecord/gnsrecord_misc.c:57
4126msgid "Label contains `.' which is not allowed\n"
4127msgstr ""
4128
4129#: src/gnsrecord/gnsrecord_misc.c:464
4137msgid "Zone delegation record not allowed in apex." 4130msgid "Zone delegation record not allowed in apex."
4138msgstr "" 4131msgstr ""
4139 4132
4140#: src/gnsrecord/gnsrecord_misc.c:456 4133#: src/gnsrecord/gnsrecord_misc.c:472
4141msgid "Zone delegation record set contains mutually exclusive records." 4134msgid "Zone delegation record set contains mutually exclusive records."
4142msgstr "" 4135msgstr ""
4143 4136
4144#: src/gnsrecord/gnsrecord_misc.c:466 4137#: src/gnsrecord/gnsrecord_misc.c:482
4145msgid "Multiple REDIRECT records." 4138msgid "Multiple REDIRECT records."
4146msgstr "" 4139msgstr ""
4147 4140
4148#: src/gnsrecord/gnsrecord_misc.c:475 src/gnsrecord/gnsrecord_misc.c:501 4141#: src/gnsrecord/gnsrecord_misc.c:491 src/gnsrecord/gnsrecord_misc.c:517
4149msgid "Redirection record set conains mutually exclusive records." 4142msgid "Redirection record set conains mutually exclusive records."
4150msgstr "" 4143msgstr ""
4151 4144
4152#: src/gnsrecord/gnsrecord_misc.c:482 4145#: src/gnsrecord/gnsrecord_misc.c:498
4153msgid "Redirection records not allowed in apex." 4146msgid "Redirection records not allowed in apex."
4154msgstr "" 4147msgstr ""
4155 4148
4156#: src/gnsrecord/gnsrecord_misc.c:493 4149#: src/gnsrecord/gnsrecord_misc.c:509
4157msgid "Redirection records not allowed in apex.." 4150msgid "Redirection records not allowed in apex.."
4158msgstr "" 4151msgstr ""
4159 4152
4160#: src/gnsrecord/gnsrecord_misc.c:515 4153#: src/gnsrecord/gnsrecord_misc.c:531
4161msgid "Mutually exclusive records." 4154msgid "Mutually exclusive records."
4162msgstr "" 4155msgstr ""
4163 4156
@@ -4740,12 +4733,18 @@ msgstr ""
4740msgid "Failed to parse JSON in option `%s': %s (%s)\n" 4733msgid "Failed to parse JSON in option `%s': %s (%s)\n"
4741msgstr "Нисам успео да обрадим „HELLO“ у датотеци „%s“: %s\n" 4734msgstr "Нисам успео да обрадим „HELLO“ у датотеци „%s“: %s\n"
4742 4735
4743#: src/messenger/plugin_gnsrecord_messenger.c:118 4736#: src/messenger/plugin_gnsrecord_messenger.c:136
4744#: src/messenger/plugin_gnsrecord_messenger.c:133 4737#: src/messenger/plugin_gnsrecord_messenger.c:151
4745#, fuzzy, c-format 4738#, fuzzy, c-format
4746msgid "Unable to parse MESSENGER_ROOM_ENTRY record `%s'\n" 4739msgid "Unable to parse MESSENGER_ROOM_ENTRY record `%s'\n"
4747msgstr "Не могу да обрадим „SOA“ запис „%s“\n" 4740msgstr "Не могу да обрадим „SOA“ запис „%s“\n"
4748 4741
4742#: src/messenger/plugin_gnsrecord_messenger.c:172
4743#: src/messenger/plugin_gnsrecord_messenger.c:187
4744#, fuzzy, c-format
4745msgid "Unable to parse MESSENGER_ROOM_DETAILS record `%s'\n"
4746msgstr "Не могу да обрадим „SOA“ запис „%s“\n"
4747
4749#: src/my/my.c:196 src/my/my.c:215 4748#: src/my/my.c:196 src/my/my.c:215
4750#, fuzzy, c-format 4749#, fuzzy, c-format
4751msgid "%s failed at %s:%d with error: %s\n" 4750msgid "%s failed at %s:%d with error: %s\n"
@@ -4786,7 +4785,7 @@ msgstr "Неисправан јавни кључ за обратну претр
4786msgid "You must specify a name\n" 4785msgid "You must specify a name\n"
4787msgstr "Морате навести назив\n" 4786msgstr "Морате навести назив\n"
4788 4787
4789#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1591 4788#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1582
4790msgid "name of the record to add/delete/display" 4789msgid "name of the record to add/delete/display"
4791msgstr "назив записа за додавање/брисање/приказ" 4790msgstr "назив записа за додавање/брисање/приказ"
4792 4791
@@ -4795,7 +4794,7 @@ msgstr "назив записа за додавање/брисање/прика
4795msgid "specifies the public key of the zone to look in" 4794msgid "specifies the public key of the zone to look in"
4796msgstr "наводи јавни кључ зоне за претраживање" 4795msgstr "наводи јавни кључ зоне за претраживање"
4797 4796
4798#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1652 4797#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1643
4799msgid "GNUnet zone manipulation tool" 4798msgid "GNUnet zone manipulation tool"
4800msgstr "Алат манипуслисања ГНУнет зоном" 4799msgstr "Алат манипуслисања ГНУнет зоном"
4801 4800
@@ -5042,12 +5041,7 @@ msgstr "Неисправан јавни кључ за обратну претр
5042msgid "Invalid URI `%s'\n" 5041msgid "Invalid URI `%s'\n"
5043msgstr "Неисправан УРИ „%s“\n" 5042msgstr "Неисправан УРИ „%s“\n"
5044 5043
5045#: src/namestore/gnunet-namestore.c:1242 5044#: src/namestore/gnunet-namestore.c:1283
5046#, c-format
5047msgid "Label `%s' contains `.' which is not allowed\n"
5048msgstr ""
5049
5050#: src/namestore/gnunet-namestore.c:1292
5051#, c-format 5045#, c-format
5052msgid "" 5046msgid ""
5053"No default identity configured for `namestore' subsystem\n" 5047"No default identity configured for `namestore' subsystem\n"
@@ -5055,100 +5049,100 @@ msgid ""
5055"Run gnunet-identity -d to get a list of choices for $NAME\n" 5049"Run gnunet-identity -d to get a list of choices for $NAME\n"
5056msgstr "" 5050msgstr ""
5057 5051
5058#: src/namestore/gnunet-namestore.c:1357 5052#: src/namestore/gnunet-namestore.c:1348
5059#, c-format 5053#, c-format
5060msgid "Superfluous command line arguments (starting with `%s') ignored\n" 5054msgid "Superfluous command line arguments (starting with `%s') ignored\n"
5061msgstr "" 5055msgstr ""
5062 5056
5063#: src/namestore/gnunet-namestore.c:1386 5057#: src/namestore/gnunet-namestore.c:1377
5064#, c-format 5058#, c-format
5065msgid "Cannot connect to identity service\n" 5059msgid "Cannot connect to identity service\n"
5066msgstr "Не могу да се повежем са услугом идентитета\n" 5060msgstr "Не могу да се повежем са услугом идентитета\n"
5067 5061
5068#: src/namestore/gnunet-namestore.c:1433 5062#: src/namestore/gnunet-namestore.c:1424
5069msgid "Empty record line argument is not allowed.\n" 5063msgid "Empty record line argument is not allowed.\n"
5070msgstr "" 5064msgstr ""
5071 5065
5072#: src/namestore/gnunet-namestore.c:1445 5066#: src/namestore/gnunet-namestore.c:1436
5073#, c-format 5067#, c-format
5074msgid "Invalid expiration time `%s' (must be without unit)\n" 5068msgid "Invalid expiration time `%s' (must be without unit)\n"
5075msgstr "" 5069msgstr ""
5076 5070
5077#: src/namestore/gnunet-namestore.c:1457 src/namestore/gnunet-namestore.c:1473 5071#: src/namestore/gnunet-namestore.c:1448 src/namestore/gnunet-namestore.c:1464
5078#: src/namestore/gnunet-namestore.c:1490 5072#: src/namestore/gnunet-namestore.c:1481
5079#, fuzzy, c-format 5073#, fuzzy, c-format
5080msgid "Missing entries in record line `%s'.\n" 5074msgid "Missing entries in record line `%s'.\n"
5081msgstr "Недостаје функција „%s“ у прикључку преноса за „%s“\n" 5075msgstr "Недостаје функција „%s“ у прикључку преноса за „%s“\n"
5082 5076
5083#: src/namestore/gnunet-namestore.c:1465 5077#: src/namestore/gnunet-namestore.c:1456
5084#, fuzzy, c-format 5078#, fuzzy, c-format
5085msgid "Unknown record type `%s'\n" 5079msgid "Unknown record type `%s'\n"
5086msgstr "Непозната наредба „%s“\n" 5080msgstr "Непозната наредба „%s“\n"
5087 5081
5088#: src/namestore/gnunet-namestore.c:1503 5082#: src/namestore/gnunet-namestore.c:1494
5089#, fuzzy, c-format 5083#, fuzzy, c-format
5090msgid "Invalid record data for type %s: `%s'.\n" 5084msgid "Invalid record data for type %s: `%s'.\n"
5091msgstr "Неисправан формат за ИП: „%s“\n" 5085msgstr "Неисправан формат за ИП: „%s“\n"
5092 5086
5093#: src/namestore/gnunet-namestore.c:1560 5087#: src/namestore/gnunet-namestore.c:1551
5094msgid "add record" 5088msgid "add record"
5095msgstr "додаје запис" 5089msgstr "додаје запис"
5096 5090
5097#: src/namestore/gnunet-namestore.c:1563 5091#: src/namestore/gnunet-namestore.c:1554
5098msgid "delete record" 5092msgid "delete record"
5099msgstr "брише запис" 5093msgstr "брише запис"
5100 5094
5101#: src/namestore/gnunet-namestore.c:1567 5095#: src/namestore/gnunet-namestore.c:1558
5102msgid "display records" 5096msgid "display records"
5103msgstr "приказује записе" 5097msgstr "приказује записе"
5104 5098
5105#: src/namestore/gnunet-namestore.c:1574 5099#: src/namestore/gnunet-namestore.c:1565
5106msgid "" 5100msgid ""
5107"expiration time for record to use (for adding only), \"never\" is possible" 5101"expiration time for record to use (for adding only), \"never\" is possible"
5108msgstr "време истека записа за коришћење (само за додавање), „never“ је могуће" 5102msgstr "време истека записа за коришћење (само за додавање), „never“ је могуће"
5109 5103
5110#: src/namestore/gnunet-namestore.c:1580 5104#: src/namestore/gnunet-namestore.c:1571
5111msgid "set the desired nick name for the zone" 5105msgid "set the desired nick name for the zone"
5112msgstr "поставља жељени назив надимка за зону" 5106msgstr "поставља жељени назив надимка за зону"
5113 5107
5114#: src/namestore/gnunet-namestore.c:1585 5108#: src/namestore/gnunet-namestore.c:1576
5115msgid "monitor changes in the namestore" 5109msgid "monitor changes in the namestore"
5116msgstr "прати измене у смештају назива" 5110msgstr "прати измене у смештају назива"
5117 5111
5118#: src/namestore/gnunet-namestore.c:1597 5112#: src/namestore/gnunet-namestore.c:1588
5119msgid "determine our name for the given PKEY" 5113msgid "determine our name for the given PKEY"
5120msgstr "одређује наш назив за дати „PKEY“" 5114msgstr "одређује наш назив за дати „PKEY“"
5121 5115
5122#: src/namestore/gnunet-namestore.c:1604 5116#: src/namestore/gnunet-namestore.c:1595
5123msgid "" 5117msgid ""
5124"set record set to values given by (possibly multiple) RECORDLINES; can be " 5118"set record set to values given by (possibly multiple) RECORDLINES; can be "
5125"specified multiple times" 5119"specified multiple times"
5126msgstr "" 5120msgstr ""
5127 5121
5128#: src/namestore/gnunet-namestore.c:1610 5122#: src/namestore/gnunet-namestore.c:1601
5129msgid "type of the record to add/delete/display" 5123msgid "type of the record to add/delete/display"
5130msgstr "врста записа за додавање/брисање/приказ" 5124msgstr "врста записа за додавање/брисање/приказ"
5131 5125
5132#: src/namestore/gnunet-namestore.c:1615 5126#: src/namestore/gnunet-namestore.c:1606
5133msgid "URI to import into our zone" 5127msgid "URI to import into our zone"
5134msgstr "УРИ за увоз у нашу зону" 5128msgstr "УРИ за увоз у нашу зону"
5135 5129
5136#: src/namestore/gnunet-namestore.c:1621 5130#: src/namestore/gnunet-namestore.c:1612
5137msgid "value of the record to add/delete" 5131msgid "value of the record to add/delete"
5138msgstr "вредност записа за додавање/брисање" 5132msgstr "вредност записа за додавање/брисање"
5139 5133
5140#: src/namestore/gnunet-namestore.c:1625 5134#: src/namestore/gnunet-namestore.c:1616
5141msgid "create or list public record" 5135msgid "create or list public record"
5142msgstr "ствара или исписује јавни запис" 5136msgstr "ствара или исписује јавни запис"
5143 5137
5144#: src/namestore/gnunet-namestore.c:1631 5138#: src/namestore/gnunet-namestore.c:1622
5145msgid "" 5139msgid ""
5146"create shadow record (only valid if all other records of the same type have " 5140"create shadow record (only valid if all other records of the same type have "
5147"expired" 5141"expired"
5148msgstr "" 5142msgstr ""
5149"прави сеновити запис (важи само ако су сви остали записи исте врсте истекли" 5143"прави сеновити запис (важи само ако су сви остали записи исте врсте истекли"
5150 5144
5151#: src/namestore/gnunet-namestore.c:1637 5145#: src/namestore/gnunet-namestore.c:1628
5152msgid "name of the ego controlling the zone" 5146msgid "name of the ego controlling the zone"
5153msgstr "назив егоа који контролише зону" 5147msgstr "назив егоа који контролише зону"
5154 5148
@@ -5157,7 +5151,17 @@ msgstr "назив егоа који контролише зону"
5157msgid "Failed to replicate block in namecache: %s\n" 5151msgid "Failed to replicate block in namecache: %s\n"
5158msgstr "Нисам успео да реплицирам блок у остави назива: %s\n" 5152msgstr "Нисам успео да реплицирам блок у остави назива: %s\n"
5159 5153
5160#: src/namestore/gnunet-service-namestore.c:1668 5154#: src/namestore/gnunet-service-namestore.c:1559
5155#, fuzzy
5156msgid "Error normalizing name."
5157msgstr "Грешка стварања тунела\n"
5158
5159#: src/namestore/gnunet-service-namestore.c:1582
5160#, fuzzy
5161msgid "Error deserializing records."
5162msgstr "Унутрашња грешка скенирања директоријума.\n"
5163
5164#: src/namestore/gnunet-service-namestore.c:1691
5161#, fuzzy 5165#, fuzzy
5162msgid "Store failed" 5166msgid "Store failed"
5163msgstr "# Неуспеси „СТАВИ“ смештаја података" 5167msgstr "# Неуспеси „СТАВИ“ смештаја података"
@@ -6953,8 +6957,8 @@ msgid "GNUnet topology control"
6953msgstr "" 6957msgstr ""
6954 6958
6955#: src/transport/gnunet-communicator-tcp.c:3338 6959#: src/transport/gnunet-communicator-tcp.c:3338
6956#: src/transport/gnunet-communicator-udp.c:3856 6960#: src/transport/gnunet-communicator-udp.c:3867
6957#: src/transport/gnunet-service-tng.c:10623 6961#: src/transport/gnunet-service-tng.c:10926
6958#: src/transport/gnunet-service-transport.c:2627 6962#: src/transport/gnunet-service-transport.c:2627
6959msgid "Transport service is lacking key configuration settings. Exiting.\n" 6963msgid "Transport service is lacking key configuration settings. Exiting.\n"
6960msgstr "Услузи преноса недостају поставке подешавања кључа. Излазим.\n" 6964msgstr "Услузи преноса недостају поставке подешавања кључа. Излазим.\n"
@@ -6963,7 +6967,7 @@ msgstr "Услузи преноса недостају поставке поде
6963msgid "GNUnet TCP communicator" 6967msgid "GNUnet TCP communicator"
6964msgstr "" 6968msgstr ""
6965 6969
6966#: src/transport/gnunet-communicator-udp.c:3931 6970#: src/transport/gnunet-communicator-udp.c:3942
6967msgid "GNUnet UDP communicator" 6971msgid "GNUnet UDP communicator"
6968msgstr "" 6972msgstr ""
6969 6973
@@ -8370,12 +8374,12 @@ msgstr "Не могу да учитам лични кључ парњака\n"
8370msgid "libgcrypt has not the expected version (version %s is required).\n" 8374msgid "libgcrypt has not the expected version (version %s is required).\n"
8371msgstr "„libgcrypt“ није очекиваног издања (издање %s је потребно).\n" 8375msgstr "„libgcrypt“ није очекиваног издања (издање %s је потребно).\n"
8372 8376
8373#: src/util/crypto_rsa.c:901 8377#: src/util/crypto_rsa.c:907
8374#, fuzzy, c-format 8378#, fuzzy, c-format
8375msgid "RSA signing failed at %s:%d: %s\n" 8379msgid "RSA signing failed at %s:%d: %s\n"
8376msgstr "„EdDSA“ потписивање није успело на %s:%d: %s\n" 8380msgstr "„EdDSA“ потписивање није успело на %s:%d: %s\n"
8377 8381
8378#: src/util/crypto_rsa.c:1201 8382#: src/util/crypto_rsa.c:1207
8379#, fuzzy, c-format 8383#, fuzzy, c-format
8380msgid "RSA signature verification failed at %s:%d: %s\n" 8384msgid "RSA signature verification failed at %s:%d: %s\n"
8381msgstr "Провера „ECDSA“ потписа није успела на %s:%d: %s\n" 8385msgstr "Провера „ECDSA“ потписа није успела на %s:%d: %s\n"
@@ -9063,12 +9067,12 @@ msgstr "Погрешан формат „%s“ за мрежну маску\n"
9063msgid "Wrong format `%s' for network\n" 9067msgid "Wrong format `%s' for network\n"
9064msgstr "Погрешан формат „%s“ за мрежу\n" 9068msgstr "Погрешан формат „%s“ за мрежу\n"
9065 9069
9066#: src/util/time.c:870 src/util/time.c:898 9070#: src/util/time.c:900 src/util/time.c:928
9067#, c-format 9071#, c-format
9068msgid "Failed to map `%s', cannot assure monotonic time!\n" 9072msgid "Failed to map `%s', cannot assure monotonic time!\n"
9069msgstr "" 9073msgstr ""
9070 9074
9071#: src/util/time.c:906 9075#: src/util/time.c:936
9072#, c-format 9076#, c-format
9073msgid "" 9077msgid ""
9074"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n" 9078"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"
@@ -9249,6 +9253,18 @@ msgstr "Поставља тунеле путем ВПН-а."
9249msgid "Failed to connect to the namestore!\n" 9253msgid "Failed to connect to the namestore!\n"
9250msgstr "Нисам успео да се повежем са смештајем назива!\n" 9254msgstr "Нисам успео да се повежем са смештајем назива!\n"
9251 9255
9256#, c-format
9257#~ msgid "Block not of type %u\n"
9258#~ msgstr "Блок није врсте %u\n"
9259
9260#, fuzzy, c-format
9261#~ msgid "Size mismatch for block with type %u\n"
9262#~ msgstr "Величин не одговара за блок\n"
9263
9264#, c-format
9265#~ msgid "Block of type %u is malformed\n"
9266#~ msgstr "Блок врсте %u је лош\n"
9267
9252#~ msgid "# items stored" 9268#~ msgid "# items stored"
9253#~ msgstr "# ставке су смештене" 9269#~ msgstr "# ставке су смештене"
9254 9270
diff --git a/po/sv.po b/po/sv.po
index d6dcda9e2..9795d9bf9 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -7,7 +7,7 @@ msgid ""
7msgstr "" 7msgstr ""
8"Project-Id-Version: GNUnet 0.7.0b\n" 8"Project-Id-Version: GNUnet 0.7.0b\n"
9"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n" 9"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
10"POT-Creation-Date: 2022-03-04 22:23+0100\n" 10"POT-Creation-Date: 2022-04-01 08:42+0200\n"
11"PO-Revision-Date: 2006-01-21 17:16+0100\n" 11"PO-Revision-Date: 2006-01-21 17:16+0100\n"
12"Last-Translator: Daniel Nylander <po@danielnylander.se>\n" 12"Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
13"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" 13"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
@@ -16,7 +16,7 @@ msgstr ""
16"Content-Type: text/plain; charset=UTF-8\n" 16"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n" 17"Content-Transfer-Encoding: 8bit\n"
18 18
19#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1254 19#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1245
20#, fuzzy, c-format 20#, fuzzy, c-format
21msgid "Ego `%s' not known to identity service\n" 21msgid "Ego `%s' not known to identity service\n"
22msgstr "\"%s\": okänd tjänst: %s\n" 22msgstr "\"%s\": okänd tjänst: %s\n"
@@ -2135,21 +2135,6 @@ msgstr ""
2135msgid "Measure quality and performance of the DHT service." 2135msgid "Measure quality and performance of the DHT service."
2136msgstr "Kan inte tillgå tjänsten" 2136msgstr "Kan inte tillgå tjänsten"
2137 2137
2138#: src/dht/plugin_block_dht.c:404
2139#, fuzzy, c-format
2140msgid "Block not of type %u\n"
2141msgstr "Ingen transport av typ %d är känd.\n"
2142
2143#: src/dht/plugin_block_dht.c:413
2144#, c-format
2145msgid "Size mismatch for block with type %u\n"
2146msgstr ""
2147
2148#: src/dht/plugin_block_dht.c:424
2149#, c-format
2150msgid "Block of type %u is malformed\n"
2151msgstr ""
2152
2153#: src/dns/gnunet-dns-monitor.c:371 src/dns/gnunet-dns-monitor.c:376 2138#: src/dns/gnunet-dns-monitor.c:371 src/dns/gnunet-dns-monitor.c:376
2154msgid "only monitor DNS queries" 2139msgid "only monitor DNS queries"
2155msgstr "" 2140msgstr ""
@@ -2882,20 +2867,20 @@ msgstr ""
2882msgid "LOC URI malformed (signature failed validation)" 2867msgid "LOC URI malformed (signature failed validation)"
2883msgstr "" 2868msgstr ""
2884 2869
2885#: src/fs/fs_uri.c:652 2870#: src/fs/fs_uri.c:653
2886#, fuzzy 2871#, fuzzy
2887msgid "invalid argument" 2872msgid "invalid argument"
2888msgstr "Ogiltigt argument: \"%s\"\n" 2873msgstr "Ogiltigt argument: \"%s\"\n"
2889 2874
2890#: src/fs/fs_uri.c:671 2875#: src/fs/fs_uri.c:673
2891msgid "Unrecognized URI type" 2876msgid "Unrecognized URI type"
2892msgstr "" 2877msgstr ""
2893 2878
2894#: src/fs/fs_uri.c:1075 src/fs/fs_uri.c:1102 2879#: src/fs/fs_uri.c:1077 src/fs/fs_uri.c:1104
2895msgid "No keywords specified!\n" 2880msgid "No keywords specified!\n"
2896msgstr "Inga nyckelord angivna!\n" 2881msgstr "Inga nyckelord angivna!\n"
2897 2882
2898#: src/fs/fs_uri.c:1108 2883#: src/fs/fs_uri.c:1110
2899msgid "Number of double-quotes not balanced!\n" 2884msgid "Number of double-quotes not balanced!\n"
2900msgstr "" 2885msgstr ""
2901 2886
@@ -3627,98 +3612,98 @@ msgstr "# byte mottogs via TCP"
3627msgid "# query plan entries" 3612msgid "# query plan entries"
3628msgstr "" 3613msgstr ""
3629 3614
3630#: src/fs/gnunet-service-fs_pr.c:329 3615#: src/fs/gnunet-service-fs_pr.c:330
3631#, fuzzy 3616#, fuzzy
3632msgid "# Pending requests created" 3617msgid "# Pending requests created"
3633msgstr "# byte mottogs via TCP" 3618msgstr "# byte mottogs via TCP"
3634 3619
3635#: src/fs/gnunet-service-fs_pr.c:421 src/fs/gnunet-service-fs_pr.c:658 3620#: src/fs/gnunet-service-fs_pr.c:422 src/fs/gnunet-service-fs_pr.c:662
3636msgid "# Pending requests active" 3621msgid "# Pending requests active"
3637msgstr "" 3622msgstr ""
3638 3623
3639#: src/fs/gnunet-service-fs_pr.c:838 3624#: src/fs/gnunet-service-fs_pr.c:837
3640#, fuzzy 3625#, fuzzy
3641msgid "# replies received and matched" 3626msgid "# replies received and matched"
3642msgstr "# byte mottagna av typen %d" 3627msgstr "# byte mottagna av typen %d"
3643 3628
3644#: src/fs/gnunet-service-fs_pr.c:916 3629#: src/fs/gnunet-service-fs_pr.c:911
3645msgid "# results found locally" 3630msgid "# results found locally"
3646msgstr "" 3631msgstr ""
3647 3632
3648#: src/fs/gnunet-service-fs_pr.c:1050 3633#: src/fs/gnunet-service-fs_pr.c:1045
3649msgid "# Datastore `PUT' failures" 3634msgid "# Datastore `PUT' failures"
3650msgstr "" 3635msgstr ""
3651 3636
3652#: src/fs/gnunet-service-fs_pr.c:1079 3637#: src/fs/gnunet-service-fs_pr.c:1074
3653#, fuzzy 3638#, fuzzy
3654msgid "# storage requests dropped due to high load" 3639msgid "# storage requests dropped due to high load"
3655msgstr "Nätverksannonsering avstängd i konfigurationen!\n" 3640msgstr "Nätverksannonsering avstängd i konfigurationen!\n"
3656 3641
3657#: src/fs/gnunet-service-fs_pr.c:1118 3642#: src/fs/gnunet-service-fs_pr.c:1113
3658#, fuzzy 3643#, fuzzy
3659msgid "# Replies received from DHT" 3644msgid "# Replies received from DHT"
3660msgstr "# byte mottagna via HTTP" 3645msgstr "# byte mottagna via HTTP"
3661 3646
3662#: src/fs/gnunet-service-fs_pr.c:1259 3647#: src/fs/gnunet-service-fs_pr.c:1268
3663#, fuzzy 3648#, fuzzy
3664msgid "# Replies received from CADET" 3649msgid "# Replies received from CADET"
3665msgstr "# byte mottagna via HTTP" 3650msgstr "# byte mottagna via HTTP"
3666 3651
3667#: src/fs/gnunet-service-fs_pr.c:1313 3652#: src/fs/gnunet-service-fs_pr.c:1323
3668#, c-format 3653#, c-format
3669msgid "Datastore lookup already took %s!\n" 3654msgid "Datastore lookup already took %s!\n"
3670msgstr "" 3655msgstr ""
3671 3656
3672#: src/fs/gnunet-service-fs_pr.c:1334 3657#: src/fs/gnunet-service-fs_pr.c:1344
3673#, c-format 3658#, c-format
3674msgid "On-demand lookup already took %s!\n" 3659msgid "On-demand lookup already took %s!\n"
3675msgstr "" 3660msgstr ""
3676 3661
3677#: src/fs/gnunet-service-fs_pr.c:1401 3662#: src/fs/gnunet-service-fs_pr.c:1411
3678msgid "# requested DBLOCK or IBLOCK not found" 3663msgid "# requested DBLOCK or IBLOCK not found"
3679msgstr "" 3664msgstr ""
3680 3665
3681#: src/fs/gnunet-service-fs_pr.c:1463 3666#: src/fs/gnunet-service-fs_pr.c:1473
3682msgid "# Datastore lookups concluded (error queueing)" 3667msgid "# Datastore lookups concluded (error queueing)"
3683msgstr "" 3668msgstr ""
3684 3669
3685#: src/fs/gnunet-service-fs_pr.c:1518 3670#: src/fs/gnunet-service-fs_pr.c:1528
3686msgid "# Datastore lookups concluded (no results)" 3671msgid "# Datastore lookups concluded (no results)"
3687msgstr "" 3672msgstr ""
3688 3673
3689#: src/fs/gnunet-service-fs_pr.c:1533 3674#: src/fs/gnunet-service-fs_pr.c:1543
3690msgid "# Datastore lookups concluded (seen all)" 3675msgid "# Datastore lookups concluded (seen all)"
3691msgstr "" 3676msgstr ""
3692 3677
3693#: src/fs/gnunet-service-fs_pr.c:1556 3678#: src/fs/gnunet-service-fs_pr.c:1566
3694msgid "# Datastore lookups aborted (more than MAX_RESULTS)" 3679msgid "# Datastore lookups aborted (more than MAX_RESULTS)"
3695msgstr "" 3680msgstr ""
3696 3681
3697#: src/fs/gnunet-service-fs_pr.c:1573 3682#: src/fs/gnunet-service-fs_pr.c:1583
3698msgid "# on-demand blocks matched requests" 3683msgid "# on-demand blocks matched requests"
3699msgstr "" 3684msgstr ""
3700 3685
3701#: src/fs/gnunet-service-fs_pr.c:1594 3686#: src/fs/gnunet-service-fs_pr.c:1604
3702msgid "# on-demand lookups performed successfully" 3687msgid "# on-demand lookups performed successfully"
3703msgstr "" 3688msgstr ""
3704 3689
3705#: src/fs/gnunet-service-fs_pr.c:1600 3690#: src/fs/gnunet-service-fs_pr.c:1610
3706msgid "# on-demand lookups failed" 3691msgid "# on-demand lookups failed"
3707msgstr "" 3692msgstr ""
3708 3693
3709#: src/fs/gnunet-service-fs_pr.c:1641 3694#: src/fs/gnunet-service-fs_pr.c:1656
3710msgid "# Datastore lookups concluded (found last result)" 3695msgid "# Datastore lookups concluded (found last result)"
3711msgstr "" 3696msgstr ""
3712 3697
3713#: src/fs/gnunet-service-fs_pr.c:1654 3698#: src/fs/gnunet-service-fs_pr.c:1669
3714msgid "# Datastore lookups concluded (load too high)" 3699msgid "# Datastore lookups concluded (load too high)"
3715msgstr "" 3700msgstr ""
3716 3701
3717#: src/fs/gnunet-service-fs_pr.c:1705 3702#: src/fs/gnunet-service-fs_pr.c:1720
3718msgid "# Datastore lookups initiated" 3703msgid "# Datastore lookups initiated"
3719msgstr "" 3704msgstr ""
3720 3705
3721#: src/fs/gnunet-service-fs_pr.c:1755 3706#: src/fs/gnunet-service-fs_pr.c:1784
3722#, fuzzy 3707#, fuzzy
3723msgid "# GAP PUT messages received" 3708msgid "# GAP PUT messages received"
3724msgstr "# krypterade PONG-meddelanden mottagna" 3709msgstr "# krypterade PONG-meddelanden mottagna"
@@ -4036,65 +4021,65 @@ msgstr ""
4036msgid "Failed to connect to the DNS service!\n" 4021msgid "Failed to connect to the DNS service!\n"
4037msgstr "Misslyckades att ansluta till gnunetd.\n" 4022msgstr "Misslyckades att ansluta till gnunetd.\n"
4038 4023
4039#: src/gns/gnunet-service-gns_resolver.c:659 4024#: src/gns/gnunet-service-gns_resolver.c:672
4040#, c-format 4025#, c-format
4041msgid "Protocol `%s' unknown, skipping labels.\n" 4026msgid "Protocol `%s' unknown, skipping labels.\n"
4042msgstr "" 4027msgstr ""
4043 4028
4044#: src/gns/gnunet-service-gns_resolver.c:671 4029#: src/gns/gnunet-service-gns_resolver.c:684
4045#, c-format 4030#, c-format
4046msgid "Service `%s' unknown for protocol `%s', trying as number.\n" 4031msgid "Service `%s' unknown for protocol `%s', trying as number.\n"
4047msgstr "" 4032msgstr ""
4048 4033
4049#: src/gns/gnunet-service-gns_resolver.c:677 4034#: src/gns/gnunet-service-gns_resolver.c:690
4050#, c-format 4035#, c-format
4051msgid "Service `%s' not a port, skipping service labels.\n" 4036msgid "Service `%s' not a port, skipping service labels.\n"
4052msgstr "" 4037msgstr ""
4053 4038
4054#: src/gns/gnunet-service-gns_resolver.c:891 4039#: src/gns/gnunet-service-gns_resolver.c:904
4055#, fuzzy 4040#, fuzzy
4056msgid "Failed to parse DNS response\n" 4041msgid "Failed to parse DNS response\n"
4057msgstr "Misslyckades att skicka HTTP-begäran till värd \"%s\": %s\n" 4042msgstr "Misslyckades att skicka HTTP-begäran till värd \"%s\": %s\n"
4058 4043
4059#: src/gns/gnunet-service-gns_resolver.c:1082 4044#: src/gns/gnunet-service-gns_resolver.c:1095
4060#, c-format 4045#, c-format
4061msgid "Skipping record of unsupported type %d\n" 4046msgid "Skipping record of unsupported type %d\n"
4062msgstr "" 4047msgstr ""
4063 4048
4064#: src/gns/gnunet-service-gns_resolver.c:1859 4049#: src/gns/gnunet-service-gns_resolver.c:1872
4065#, c-format 4050#, c-format
4066msgid "Name `%s' cannot be converted to IDNA." 4051msgid "Name `%s' cannot be converted to IDNA."
4067msgstr "" 4052msgstr ""
4068 4053
4069#: src/gns/gnunet-service-gns_resolver.c:1874 4054#: src/gns/gnunet-service-gns_resolver.c:1887
4070#, c-format 4055#, c-format
4071msgid "GNS lookup resulted in DNS name that is too long (`%s')\n" 4056msgid "GNS lookup resulted in DNS name that is too long (`%s')\n"
4072msgstr "" 4057msgstr ""
4073 4058
4074#: src/gns/gnunet-service-gns_resolver.c:1914 4059#: src/gns/gnunet-service-gns_resolver.c:1927
4075#, fuzzy, c-format 4060#, fuzzy, c-format
4076msgid "GNS lookup failed (zero records found for `%s')\n" 4061msgid "GNS lookup failed (zero records found for `%s')\n"
4077msgstr "%d filer hittades i katalog.\n" 4062msgstr "%d filer hittades i katalog.\n"
4078 4063
4079#: src/gns/gnunet-service-gns_resolver.c:2312 4064#: src/gns/gnunet-service-gns_resolver.c:2329
4080msgid "Unable to process critical delegation record\n" 4065msgid "Unable to process critical delegation record\n"
4081msgstr "" 4066msgstr ""
4082 4067
4083#: src/gns/gnunet-service-gns_resolver.c:2317 4068#: src/gns/gnunet-service-gns_resolver.c:2334
4084msgid "GNS lookup recursion failed (no delegation record found)\n" 4069msgid "GNS lookup recursion failed (no delegation record found)\n"
4085msgstr "" 4070msgstr ""
4086 4071
4087#: src/gns/gnunet-service-gns_resolver.c:2340 4072#: src/gns/gnunet-service-gns_resolver.c:2357
4088#, fuzzy, c-format 4073#, fuzzy, c-format
4089msgid "Failed to cache GNS resolution: %s\n" 4074msgid "Failed to cache GNS resolution: %s\n"
4090msgstr "Misslyckades att skicka HTTP-begäran till värd \"%s\": %s\n" 4075msgstr "Misslyckades att skicka HTTP-begäran till värd \"%s\": %s\n"
4091 4076
4092#: src/gns/gnunet-service-gns_resolver.c:2505 4077#: src/gns/gnunet-service-gns_resolver.c:2522
4093#, c-format 4078#, c-format
4094msgid "GNS namecache returned empty result for `%s'\n" 4079msgid "GNS namecache returned empty result for `%s'\n"
4095msgstr "" 4080msgstr ""
4096 4081
4097#: src/gns/gnunet-service-gns_resolver.c:2652 4082#: src/gns/gnunet-service-gns_resolver.c:2669
4098#, c-format 4083#, c-format
4099msgid "Zone %s was revoked, resolution fails\n" 4084msgid "Zone %s was revoked, resolution fails\n"
4100msgstr "" 4085msgstr ""
@@ -4137,31 +4122,39 @@ msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
4137msgid "Gns REST API initialized\n" 4122msgid "Gns REST API initialized\n"
4138msgstr " Anslutning misslyckades\n" 4123msgstr " Anslutning misslyckades\n"
4139 4124
4140#: src/gnsrecord/gnsrecord_misc.c:448 4125#: src/gnsrecord/gnsrecord_misc.c:52
4126msgid "Label is NULL which is not allowed\n"
4127msgstr ""
4128
4129#: src/gnsrecord/gnsrecord_misc.c:57
4130msgid "Label contains `.' which is not allowed\n"
4131msgstr ""
4132
4133#: src/gnsrecord/gnsrecord_misc.c:464
4141msgid "Zone delegation record not allowed in apex." 4134msgid "Zone delegation record not allowed in apex."
4142msgstr "" 4135msgstr ""
4143 4136
4144#: src/gnsrecord/gnsrecord_misc.c:456 4137#: src/gnsrecord/gnsrecord_misc.c:472
4145msgid "Zone delegation record set contains mutually exclusive records." 4138msgid "Zone delegation record set contains mutually exclusive records."
4146msgstr "" 4139msgstr ""
4147 4140
4148#: src/gnsrecord/gnsrecord_misc.c:466 4141#: src/gnsrecord/gnsrecord_misc.c:482
4149msgid "Multiple REDIRECT records." 4142msgid "Multiple REDIRECT records."
4150msgstr "" 4143msgstr ""
4151 4144
4152#: src/gnsrecord/gnsrecord_misc.c:475 src/gnsrecord/gnsrecord_misc.c:501 4145#: src/gnsrecord/gnsrecord_misc.c:491 src/gnsrecord/gnsrecord_misc.c:517
4153msgid "Redirection record set conains mutually exclusive records." 4146msgid "Redirection record set conains mutually exclusive records."
4154msgstr "" 4147msgstr ""
4155 4148
4156#: src/gnsrecord/gnsrecord_misc.c:482 4149#: src/gnsrecord/gnsrecord_misc.c:498
4157msgid "Redirection records not allowed in apex." 4150msgid "Redirection records not allowed in apex."
4158msgstr "" 4151msgstr ""
4159 4152
4160#: src/gnsrecord/gnsrecord_misc.c:493 4153#: src/gnsrecord/gnsrecord_misc.c:509
4161msgid "Redirection records not allowed in apex.." 4154msgid "Redirection records not allowed in apex.."
4162msgstr "" 4155msgstr ""
4163 4156
4164#: src/gnsrecord/gnsrecord_misc.c:515 4157#: src/gnsrecord/gnsrecord_misc.c:531
4165msgid "Mutually exclusive records." 4158msgid "Mutually exclusive records."
4166msgstr "" 4159msgstr ""
4167 4160
@@ -4732,12 +4725,18 @@ msgstr " Anslutning misslyckades\n"
4732msgid "Failed to parse JSON in option `%s': %s (%s)\n" 4725msgid "Failed to parse JSON in option `%s': %s (%s)\n"
4733msgstr "Misslyckades att läsa kompislista från \"%s\"\n" 4726msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
4734 4727
4735#: src/messenger/plugin_gnsrecord_messenger.c:118 4728#: src/messenger/plugin_gnsrecord_messenger.c:136
4736#: src/messenger/plugin_gnsrecord_messenger.c:133 4729#: src/messenger/plugin_gnsrecord_messenger.c:151
4737#, fuzzy, c-format 4730#, fuzzy, c-format
4738msgid "Unable to parse MESSENGER_ROOM_ENTRY record `%s'\n" 4731msgid "Unable to parse MESSENGER_ROOM_ENTRY record `%s'\n"
4739msgstr "Misslyckades att läsa kompislista från \"%s\"\n" 4732msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
4740 4733
4734#: src/messenger/plugin_gnsrecord_messenger.c:172
4735#: src/messenger/plugin_gnsrecord_messenger.c:187
4736#, fuzzy, c-format
4737msgid "Unable to parse MESSENGER_ROOM_DETAILS record `%s'\n"
4738msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
4739
4741#: src/my/my.c:196 src/my/my.c:215 4740#: src/my/my.c:196 src/my/my.c:215
4742#, fuzzy, c-format 4741#, fuzzy, c-format
4743msgid "%s failed at %s:%d with error: %s\n" 4742msgid "%s failed at %s:%d with error: %s\n"
@@ -4778,7 +4777,7 @@ msgstr "Ogiltigt argument: \"%s\"\n"
4778msgid "You must specify a name\n" 4777msgid "You must specify a name\n"
4779msgstr "Du måste ange en mottagare!\n" 4778msgstr "Du måste ange en mottagare!\n"
4780 4779
4781#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1591 4780#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1582
4782msgid "name of the record to add/delete/display" 4781msgid "name of the record to add/delete/display"
4783msgstr "" 4782msgstr ""
4784 4783
@@ -4787,7 +4786,7 @@ msgstr ""
4787msgid "specifies the public key of the zone to look in" 4786msgid "specifies the public key of the zone to look in"
4788msgstr "ange prioritet för innehållet" 4787msgstr "ange prioritet för innehållet"
4789 4788
4790#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1652 4789#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1643
4791#, fuzzy 4790#, fuzzy
4792msgid "GNUnet zone manipulation tool" 4791msgid "GNUnet zone manipulation tool"
4793msgstr "GNUnet-konfiguration" 4792msgstr "GNUnet-konfiguration"
@@ -5042,12 +5041,7 @@ msgstr "Ogiltigt argument: \"%s\"\n"
5042msgid "Invalid URI `%s'\n" 5041msgid "Invalid URI `%s'\n"
5043msgstr "Ogiltiga argument: " 5042msgstr "Ogiltiga argument: "
5044 5043
5045#: src/namestore/gnunet-namestore.c:1242 5044#: src/namestore/gnunet-namestore.c:1283
5046#, c-format
5047msgid "Label `%s' contains `.' which is not allowed\n"
5048msgstr ""
5049
5050#: src/namestore/gnunet-namestore.c:1292
5051#, c-format 5045#, c-format
5052msgid "" 5046msgid ""
5053"No default identity configured for `namestore' subsystem\n" 5047"No default identity configured for `namestore' subsystem\n"
@@ -5055,102 +5049,102 @@ msgid ""
5055"Run gnunet-identity -d to get a list of choices for $NAME\n" 5049"Run gnunet-identity -d to get a list of choices for $NAME\n"
5056msgstr "" 5050msgstr ""
5057 5051
5058#: src/namestore/gnunet-namestore.c:1357 5052#: src/namestore/gnunet-namestore.c:1348
5059#, fuzzy, c-format 5053#, fuzzy, c-format
5060msgid "Superfluous command line arguments (starting with `%s') ignored\n" 5054msgid "Superfluous command line arguments (starting with `%s') ignored\n"
5061msgstr "Onödiga argument (ignorerade).\n" 5055msgstr "Onödiga argument (ignorerade).\n"
5062 5056
5063#: src/namestore/gnunet-namestore.c:1386 5057#: src/namestore/gnunet-namestore.c:1377
5064#, fuzzy, c-format 5058#, fuzzy, c-format
5065msgid "Cannot connect to identity service\n" 5059msgid "Cannot connect to identity service\n"
5066msgstr "Kunde inte ansluta till gnunetd.\n" 5060msgstr "Kunde inte ansluta till gnunetd.\n"
5067 5061
5068#: src/namestore/gnunet-namestore.c:1433 5062#: src/namestore/gnunet-namestore.c:1424
5069msgid "Empty record line argument is not allowed.\n" 5063msgid "Empty record line argument is not allowed.\n"
5070msgstr "" 5064msgstr ""
5071 5065
5072#: src/namestore/gnunet-namestore.c:1445 5066#: src/namestore/gnunet-namestore.c:1436
5073#, c-format 5067#, c-format
5074msgid "Invalid expiration time `%s' (must be without unit)\n" 5068msgid "Invalid expiration time `%s' (must be without unit)\n"
5075msgstr "" 5069msgstr ""
5076 5070
5077#: src/namestore/gnunet-namestore.c:1457 src/namestore/gnunet-namestore.c:1473 5071#: src/namestore/gnunet-namestore.c:1448 src/namestore/gnunet-namestore.c:1464
5078#: src/namestore/gnunet-namestore.c:1490 5072#: src/namestore/gnunet-namestore.c:1481
5079#, fuzzy, c-format 5073#, fuzzy, c-format
5080msgid "Missing entries in record line `%s'.\n" 5074msgid "Missing entries in record line `%s'.\n"
5081msgstr "Kunde inte slå upp \"%s\": %s\n" 5075msgstr "Kunde inte slå upp \"%s\": %s\n"
5082 5076
5083#: src/namestore/gnunet-namestore.c:1465 5077#: src/namestore/gnunet-namestore.c:1456
5084#, fuzzy, c-format 5078#, fuzzy, c-format
5085msgid "Unknown record type `%s'\n" 5079msgid "Unknown record type `%s'\n"
5086msgstr "Okänd operation \"%s\"\n" 5080msgstr "Okänd operation \"%s\"\n"
5087 5081
5088#: src/namestore/gnunet-namestore.c:1503 5082#: src/namestore/gnunet-namestore.c:1494
5089#, fuzzy, c-format 5083#, fuzzy, c-format
5090msgid "Invalid record data for type %s: `%s'.\n" 5084msgid "Invalid record data for type %s: `%s'.\n"
5091msgstr "Ogiltigt format för IP: \"%s\"\n" 5085msgstr "Ogiltigt format för IP: \"%s\"\n"
5092 5086
5093#: src/namestore/gnunet-namestore.c:1560 5087#: src/namestore/gnunet-namestore.c:1551
5094msgid "add record" 5088msgid "add record"
5095msgstr "" 5089msgstr ""
5096 5090
5097#: src/namestore/gnunet-namestore.c:1563 5091#: src/namestore/gnunet-namestore.c:1554
5098msgid "delete record" 5092msgid "delete record"
5099msgstr "" 5093msgstr ""
5100 5094
5101#: src/namestore/gnunet-namestore.c:1567 5095#: src/namestore/gnunet-namestore.c:1558
5102msgid "display records" 5096msgid "display records"
5103msgstr "" 5097msgstr ""
5104 5098
5105#: src/namestore/gnunet-namestore.c:1574 5099#: src/namestore/gnunet-namestore.c:1565
5106msgid "" 5100msgid ""
5107"expiration time for record to use (for adding only), \"never\" is possible" 5101"expiration time for record to use (for adding only), \"never\" is possible"
5108msgstr "" 5102msgstr ""
5109 5103
5110#: src/namestore/gnunet-namestore.c:1580 5104#: src/namestore/gnunet-namestore.c:1571
5111#, fuzzy 5105#, fuzzy
5112msgid "set the desired nick name for the zone" 5106msgid "set the desired nick name for the zone"
5113msgstr "Skriv ut information om GNUnets motparter." 5107msgstr "Skriv ut information om GNUnets motparter."
5114 5108
5115#: src/namestore/gnunet-namestore.c:1585 5109#: src/namestore/gnunet-namestore.c:1576
5116#, fuzzy 5110#, fuzzy
5117msgid "monitor changes in the namestore" 5111msgid "monitor changes in the namestore"
5118msgstr "Misslyckades att ansluta till gnunetd.\n" 5112msgstr "Misslyckades att ansluta till gnunetd.\n"
5119 5113
5120#: src/namestore/gnunet-namestore.c:1597 5114#: src/namestore/gnunet-namestore.c:1588
5121#, fuzzy 5115#, fuzzy
5122msgid "determine our name for the given PKEY" 5116msgid "determine our name for the given PKEY"
5123msgstr "Skriv ut information om GNUnets motparter." 5117msgstr "Skriv ut information om GNUnets motparter."
5124 5118
5125#: src/namestore/gnunet-namestore.c:1604 5119#: src/namestore/gnunet-namestore.c:1595
5126msgid "" 5120msgid ""
5127"set record set to values given by (possibly multiple) RECORDLINES; can be " 5121"set record set to values given by (possibly multiple) RECORDLINES; can be "
5128"specified multiple times" 5122"specified multiple times"
5129msgstr "" 5123msgstr ""
5130 5124
5131#: src/namestore/gnunet-namestore.c:1610 5125#: src/namestore/gnunet-namestore.c:1601
5132msgid "type of the record to add/delete/display" 5126msgid "type of the record to add/delete/display"
5133msgstr "" 5127msgstr ""
5134 5128
5135#: src/namestore/gnunet-namestore.c:1615 5129#: src/namestore/gnunet-namestore.c:1606
5136msgid "URI to import into our zone" 5130msgid "URI to import into our zone"
5137msgstr "" 5131msgstr ""
5138 5132
5139#: src/namestore/gnunet-namestore.c:1621 5133#: src/namestore/gnunet-namestore.c:1612
5140msgid "value of the record to add/delete" 5134msgid "value of the record to add/delete"
5141msgstr "" 5135msgstr ""
5142 5136
5143#: src/namestore/gnunet-namestore.c:1625 5137#: src/namestore/gnunet-namestore.c:1616
5144msgid "create or list public record" 5138msgid "create or list public record"
5145msgstr "" 5139msgstr ""
5146 5140
5147#: src/namestore/gnunet-namestore.c:1631 5141#: src/namestore/gnunet-namestore.c:1622
5148msgid "" 5142msgid ""
5149"create shadow record (only valid if all other records of the same type have " 5143"create shadow record (only valid if all other records of the same type have "
5150"expired" 5144"expired"
5151msgstr "" 5145msgstr ""
5152 5146
5153#: src/namestore/gnunet-namestore.c:1637 5147#: src/namestore/gnunet-namestore.c:1628
5154#, fuzzy 5148#, fuzzy
5155msgid "name of the ego controlling the zone" 5149msgid "name of the ego controlling the zone"
5156msgstr "Visa värde av alternativet" 5150msgstr "Visa värde av alternativet"
@@ -5160,7 +5154,17 @@ msgstr "Visa värde av alternativet"
5160msgid "Failed to replicate block in namecache: %s\n" 5154msgid "Failed to replicate block in namecache: %s\n"
5161msgstr "Misslyckades att läsa kompislista från \"%s\"\n" 5155msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
5162 5156
5163#: src/namestore/gnunet-service-namestore.c:1668 5157#: src/namestore/gnunet-service-namestore.c:1559
5158#, fuzzy
5159msgid "Error normalizing name."
5160msgstr "Klar med skapandet av värdnyckel.\n"
5161
5162#: src/namestore/gnunet-service-namestore.c:1582
5163#, fuzzy
5164msgid "Error deserializing records."
5165msgstr "=\tFel vid läsning av katalog.\n"
5166
5167#: src/namestore/gnunet-service-namestore.c:1691
5164#, fuzzy 5168#, fuzzy
5165msgid "Store failed" 5169msgid "Store failed"
5166msgstr "gnunet-update misslyckades!" 5170msgstr "gnunet-update misslyckades!"
@@ -6929,8 +6933,8 @@ msgid "GNUnet topology control"
6929msgstr "" 6933msgstr ""
6930 6934
6931#: src/transport/gnunet-communicator-tcp.c:3338 6935#: src/transport/gnunet-communicator-tcp.c:3338
6932#: src/transport/gnunet-communicator-udp.c:3856 6936#: src/transport/gnunet-communicator-udp.c:3867
6933#: src/transport/gnunet-service-tng.c:10623 6937#: src/transport/gnunet-service-tng.c:10926
6934#: src/transport/gnunet-service-transport.c:2627 6938#: src/transport/gnunet-service-transport.c:2627
6935#, fuzzy 6939#, fuzzy
6936msgid "Transport service is lacking key configuration settings. Exiting.\n" 6940msgid "Transport service is lacking key configuration settings. Exiting.\n"
@@ -6940,7 +6944,7 @@ msgstr "GNUnet-konfiguration"
6940msgid "GNUnet TCP communicator" 6944msgid "GNUnet TCP communicator"
6941msgstr "" 6945msgstr ""
6942 6946
6943#: src/transport/gnunet-communicator-udp.c:3931 6947#: src/transport/gnunet-communicator-udp.c:3942
6944msgid "GNUnet UDP communicator" 6948msgid "GNUnet UDP communicator"
6945msgstr "" 6949msgstr ""
6946 6950
@@ -8350,12 +8354,12 @@ msgstr "Kunde inte tolka konfigurationsfil \"%s\".\n"
8350msgid "libgcrypt has not the expected version (version %s is required).\n" 8354msgid "libgcrypt has not the expected version (version %s is required).\n"
8351msgstr "libgcrypt har inte den förväntande versionen (version %s krävs).\n" 8355msgstr "libgcrypt har inte den förväntande versionen (version %s krävs).\n"
8352 8356
8353#: src/util/crypto_rsa.c:901 8357#: src/util/crypto_rsa.c:907
8354#, fuzzy, c-format 8358#, fuzzy, c-format
8355msgid "RSA signing failed at %s:%d: %s\n" 8359msgid "RSA signing failed at %s:%d: %s\n"
8356msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n" 8360msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n"
8357 8361
8358#: src/util/crypto_rsa.c:1201 8362#: src/util/crypto_rsa.c:1207
8359#, fuzzy, c-format 8363#, fuzzy, c-format
8360msgid "RSA signature verification failed at %s:%d: %s\n" 8364msgid "RSA signature verification failed at %s:%d: %s\n"
8361msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n" 8365msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n"
@@ -9031,12 +9035,12 @@ msgstr "Fel format \"%s\" för nätmask: %s\n"
9031msgid "Wrong format `%s' for network\n" 9035msgid "Wrong format `%s' for network\n"
9032msgstr "Fel format \"%s\" för nätverk: %s\n" 9036msgstr "Fel format \"%s\" för nätverk: %s\n"
9033 9037
9034#: src/util/time.c:870 src/util/time.c:898 9038#: src/util/time.c:900 src/util/time.c:928
9035#, c-format 9039#, c-format
9036msgid "Failed to map `%s', cannot assure monotonic time!\n" 9040msgid "Failed to map `%s', cannot assure monotonic time!\n"
9037msgstr "" 9041msgstr ""
9038 9042
9039#: src/util/time.c:906 9043#: src/util/time.c:936
9040#, c-format 9044#, c-format
9041msgid "" 9045msgid ""
9042"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n" 9046"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"
@@ -9226,6 +9230,10 @@ msgstr ""
9226msgid "Failed to connect to the namestore!\n" 9230msgid "Failed to connect to the namestore!\n"
9227msgstr "Misslyckades att ansluta till gnunetd.\n" 9231msgstr "Misslyckades att ansluta till gnunetd.\n"
9228 9232
9233#, fuzzy, c-format
9234#~ msgid "Block not of type %u\n"
9235#~ msgstr "Ingen transport av typ %d är känd.\n"
9236
9229#, fuzzy 9237#, fuzzy
9230#~ msgid "# items stored" 9238#~ msgid "# items stored"
9231#~ msgstr "# byte krypterade" 9239#~ msgstr "# byte krypterade"
diff --git a/po/vi.po b/po/vi.po
index 7d8ac0adf..13773f583 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -8,7 +8,7 @@ msgid ""
8msgstr "" 8msgstr ""
9"Project-Id-Version: gnunet 0.8.0a\n" 9"Project-Id-Version: gnunet 0.8.0a\n"
10"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n" 10"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
11"POT-Creation-Date: 2022-03-04 22:23+0100\n" 11"POT-Creation-Date: 2022-04-01 08:42+0200\n"
12"PO-Revision-Date: 2008-09-10 22:05+0930\n" 12"PO-Revision-Date: 2008-09-10 22:05+0930\n"
13"Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n" 13"Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
14"Language-Team: Vietnamese <vi-VN@googlegroups.com>\n" 14"Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
@@ -19,7 +19,7 @@ msgstr ""
19"Plural-Forms: nplurals=1; plural=0;\n" 19"Plural-Forms: nplurals=1; plural=0;\n"
20"X-Generator: LocFactoryEditor 1.7b3\n" 20"X-Generator: LocFactoryEditor 1.7b3\n"
21 21
22#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1254 22#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1245
23#, c-format 23#, c-format
24msgid "Ego `%s' not known to identity service\n" 24msgid "Ego `%s' not known to identity service\n"
25msgstr "" 25msgstr ""
@@ -2156,21 +2156,6 @@ msgstr ""
2156msgid "Measure quality and performance of the DHT service." 2156msgid "Measure quality and performance of the DHT service."
2157msgstr "Không thể truy cập đến dịch vụ" 2157msgstr "Không thể truy cập đến dịch vụ"
2158 2158
2159#: src/dht/plugin_block_dht.c:404
2160#, fuzzy, c-format
2161msgid "Block not of type %u\n"
2162msgstr "Không biết truyền tải nào kiểu %d.\n"
2163
2164#: src/dht/plugin_block_dht.c:413
2165#, c-format
2166msgid "Size mismatch for block with type %u\n"
2167msgstr ""
2168
2169#: src/dht/plugin_block_dht.c:424
2170#, c-format
2171msgid "Block of type %u is malformed\n"
2172msgstr ""
2173
2174#: src/dns/gnunet-dns-monitor.c:371 src/dns/gnunet-dns-monitor.c:376 2159#: src/dns/gnunet-dns-monitor.c:371 src/dns/gnunet-dns-monitor.c:376
2175msgid "only monitor DNS queries" 2160msgid "only monitor DNS queries"
2176msgstr "" 2161msgstr ""
@@ -2901,20 +2886,20 @@ msgstr ""
2901msgid "LOC URI malformed (signature failed validation)" 2886msgid "LOC URI malformed (signature failed validation)"
2902msgstr "" 2887msgstr ""
2903 2888
2904#: src/fs/fs_uri.c:652 2889#: src/fs/fs_uri.c:653
2905#, fuzzy 2890#, fuzzy
2906msgid "invalid argument" 2891msgid "invalid argument"
2907msgstr "Đối số không hợp lệ cho « %s ».\n" 2892msgstr "Đối số không hợp lệ cho « %s ».\n"
2908 2893
2909#: src/fs/fs_uri.c:671 2894#: src/fs/fs_uri.c:673
2910msgid "Unrecognized URI type" 2895msgid "Unrecognized URI type"
2911msgstr "" 2896msgstr ""
2912 2897
2913#: src/fs/fs_uri.c:1075 src/fs/fs_uri.c:1102 2898#: src/fs/fs_uri.c:1077 src/fs/fs_uri.c:1104
2914msgid "No keywords specified!\n" 2899msgid "No keywords specified!\n"
2915msgstr "Chưa ghi rõ từ khoá.\n" 2900msgstr "Chưa ghi rõ từ khoá.\n"
2916 2901
2917#: src/fs/fs_uri.c:1108 2902#: src/fs/fs_uri.c:1110
2918msgid "Number of double-quotes not balanced!\n" 2903msgid "Number of double-quotes not balanced!\n"
2919msgstr "Có dấu nháy kép thừa hay thiếu.\n" 2904msgstr "Có dấu nháy kép thừa hay thiếu.\n"
2920 2905
@@ -3671,100 +3656,100 @@ msgstr "# các yêu cầu get (lấy) dht được nhận"
3671msgid "# query plan entries" 3656msgid "# query plan entries"
3672msgstr "" 3657msgstr ""
3673 3658
3674#: src/fs/gnunet-service-fs_pr.c:329 3659#: src/fs/gnunet-service-fs_pr.c:330
3675#, fuzzy 3660#, fuzzy
3676msgid "# Pending requests created" 3661msgid "# Pending requests created"
3677msgstr "# các yêu cầu get (lấy) dht được nhận" 3662msgstr "# các yêu cầu get (lấy) dht được nhận"
3678 3663
3679#: src/fs/gnunet-service-fs_pr.c:421 src/fs/gnunet-service-fs_pr.c:658 3664#: src/fs/gnunet-service-fs_pr.c:422 src/fs/gnunet-service-fs_pr.c:662
3680#, fuzzy 3665#, fuzzy
3681msgid "# Pending requests active" 3666msgid "# Pending requests active"
3682msgstr "# các yêu cầu get (lấy) dht được nhận" 3667msgstr "# các yêu cầu get (lấy) dht được nhận"
3683 3668
3684#: src/fs/gnunet-service-fs_pr.c:838 3669#: src/fs/gnunet-service-fs_pr.c:837
3685#, fuzzy 3670#, fuzzy
3686msgid "# replies received and matched" 3671msgid "# replies received and matched"
3687msgstr "# các byte kiểu %d được nhận" 3672msgstr "# các byte kiểu %d được nhận"
3688 3673
3689#: src/fs/gnunet-service-fs_pr.c:916 3674#: src/fs/gnunet-service-fs_pr.c:911
3690#, fuzzy 3675#, fuzzy
3691msgid "# results found locally" 3676msgid "# results found locally"
3692msgstr "# nội dung lỗ hổng được tìm cục bộ" 3677msgstr "# nội dung lỗ hổng được tìm cục bộ"
3693 3678
3694#: src/fs/gnunet-service-fs_pr.c:1050 3679#: src/fs/gnunet-service-fs_pr.c:1045
3695msgid "# Datastore `PUT' failures" 3680msgid "# Datastore `PUT' failures"
3696msgstr "" 3681msgstr ""
3697 3682
3698#: src/fs/gnunet-service-fs_pr.c:1079 3683#: src/fs/gnunet-service-fs_pr.c:1074
3699#, fuzzy 3684#, fuzzy
3700msgid "# storage requests dropped due to high load" 3685msgid "# storage requests dropped due to high load"
3701msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải" 3686msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải"
3702 3687
3703#: src/fs/gnunet-service-fs_pr.c:1118 3688#: src/fs/gnunet-service-fs_pr.c:1113
3704#, fuzzy 3689#, fuzzy
3705msgid "# Replies received from DHT" 3690msgid "# Replies received from DHT"
3706msgstr "# các byte đã nhận qua HTTP" 3691msgstr "# các byte đã nhận qua HTTP"
3707 3692
3708#: src/fs/gnunet-service-fs_pr.c:1259 3693#: src/fs/gnunet-service-fs_pr.c:1268
3709#, fuzzy 3694#, fuzzy
3710msgid "# Replies received from CADET" 3695msgid "# Replies received from CADET"
3711msgstr "# các byte đã nhận qua HTTP" 3696msgstr "# các byte đã nhận qua HTTP"
3712 3697
3713#: src/fs/gnunet-service-fs_pr.c:1313 3698#: src/fs/gnunet-service-fs_pr.c:1323
3714#, c-format 3699#, c-format
3715msgid "Datastore lookup already took %s!\n" 3700msgid "Datastore lookup already took %s!\n"
3716msgstr "" 3701msgstr ""
3717 3702
3718#: src/fs/gnunet-service-fs_pr.c:1334 3703#: src/fs/gnunet-service-fs_pr.c:1344
3719#, c-format 3704#, c-format
3720msgid "On-demand lookup already took %s!\n" 3705msgid "On-demand lookup already took %s!\n"
3721msgstr "" 3706msgstr ""
3722 3707
3723#: src/fs/gnunet-service-fs_pr.c:1401 3708#: src/fs/gnunet-service-fs_pr.c:1411
3724msgid "# requested DBLOCK or IBLOCK not found" 3709msgid "# requested DBLOCK or IBLOCK not found"
3725msgstr "" 3710msgstr ""
3726 3711
3727#: src/fs/gnunet-service-fs_pr.c:1463 3712#: src/fs/gnunet-service-fs_pr.c:1473
3728msgid "# Datastore lookups concluded (error queueing)" 3713msgid "# Datastore lookups concluded (error queueing)"
3729msgstr "" 3714msgstr ""
3730 3715
3731#: src/fs/gnunet-service-fs_pr.c:1518 3716#: src/fs/gnunet-service-fs_pr.c:1528
3732msgid "# Datastore lookups concluded (no results)" 3717msgid "# Datastore lookups concluded (no results)"
3733msgstr "" 3718msgstr ""
3734 3719
3735#: src/fs/gnunet-service-fs_pr.c:1533 3720#: src/fs/gnunet-service-fs_pr.c:1543
3736msgid "# Datastore lookups concluded (seen all)" 3721msgid "# Datastore lookups concluded (seen all)"
3737msgstr "" 3722msgstr ""
3738 3723
3739#: src/fs/gnunet-service-fs_pr.c:1556 3724#: src/fs/gnunet-service-fs_pr.c:1566
3740msgid "# Datastore lookups aborted (more than MAX_RESULTS)" 3725msgid "# Datastore lookups aborted (more than MAX_RESULTS)"
3741msgstr "" 3726msgstr ""
3742 3727
3743#: src/fs/gnunet-service-fs_pr.c:1573 3728#: src/fs/gnunet-service-fs_pr.c:1583
3744msgid "# on-demand blocks matched requests" 3729msgid "# on-demand blocks matched requests"
3745msgstr "" 3730msgstr ""
3746 3731
3747#: src/fs/gnunet-service-fs_pr.c:1594 3732#: src/fs/gnunet-service-fs_pr.c:1604
3748msgid "# on-demand lookups performed successfully" 3733msgid "# on-demand lookups performed successfully"
3749msgstr "" 3734msgstr ""
3750 3735
3751#: src/fs/gnunet-service-fs_pr.c:1600 3736#: src/fs/gnunet-service-fs_pr.c:1610
3752msgid "# on-demand lookups failed" 3737msgid "# on-demand lookups failed"
3753msgstr "" 3738msgstr ""
3754 3739
3755#: src/fs/gnunet-service-fs_pr.c:1641 3740#: src/fs/gnunet-service-fs_pr.c:1656
3756msgid "# Datastore lookups concluded (found last result)" 3741msgid "# Datastore lookups concluded (found last result)"
3757msgstr "" 3742msgstr ""
3758 3743
3759#: src/fs/gnunet-service-fs_pr.c:1654 3744#: src/fs/gnunet-service-fs_pr.c:1669
3760msgid "# Datastore lookups concluded (load too high)" 3745msgid "# Datastore lookups concluded (load too high)"
3761msgstr "" 3746msgstr ""
3762 3747
3763#: src/fs/gnunet-service-fs_pr.c:1705 3748#: src/fs/gnunet-service-fs_pr.c:1720
3764msgid "# Datastore lookups initiated" 3749msgid "# Datastore lookups initiated"
3765msgstr "" 3750msgstr ""
3766 3751
3767#: src/fs/gnunet-service-fs_pr.c:1755 3752#: src/fs/gnunet-service-fs_pr.c:1784
3768#, fuzzy 3753#, fuzzy
3769msgid "# GAP PUT messages received" 3754msgid "# GAP PUT messages received"
3770msgstr "# các thông báo PONG đã mật mã được nhận" 3755msgstr "# các thông báo PONG đã mật mã được nhận"
@@ -4083,65 +4068,65 @@ msgstr "Gặp lỗi khi chuyển đổi các đối số sang URI.\n"
4083msgid "Failed to connect to the DNS service!\n" 4068msgid "Failed to connect to the DNS service!\n"
4084msgstr "Lỗi kết nối đến gnunetd.\n" 4069msgstr "Lỗi kết nối đến gnunetd.\n"
4085 4070
4086#: src/gns/gnunet-service-gns_resolver.c:659 4071#: src/gns/gnunet-service-gns_resolver.c:672
4087#, c-format 4072#, c-format
4088msgid "Protocol `%s' unknown, skipping labels.\n" 4073msgid "Protocol `%s' unknown, skipping labels.\n"
4089msgstr "" 4074msgstr ""
4090 4075
4091#: src/gns/gnunet-service-gns_resolver.c:671 4076#: src/gns/gnunet-service-gns_resolver.c:684
4092#, c-format 4077#, c-format
4093msgid "Service `%s' unknown for protocol `%s', trying as number.\n" 4078msgid "Service `%s' unknown for protocol `%s', trying as number.\n"
4094msgstr "" 4079msgstr ""
4095 4080
4096#: src/gns/gnunet-service-gns_resolver.c:677 4081#: src/gns/gnunet-service-gns_resolver.c:690
4097#, c-format 4082#, c-format
4098msgid "Service `%s' not a port, skipping service labels.\n" 4083msgid "Service `%s' not a port, skipping service labels.\n"
4099msgstr "" 4084msgstr ""
4100 4085
4101#: src/gns/gnunet-service-gns_resolver.c:891 4086#: src/gns/gnunet-service-gns_resolver.c:904
4102#, fuzzy 4087#, fuzzy
4103msgid "Failed to parse DNS response\n" 4088msgid "Failed to parse DNS response\n"
4104msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n" 4089msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
4105 4090
4106#: src/gns/gnunet-service-gns_resolver.c:1082 4091#: src/gns/gnunet-service-gns_resolver.c:1095
4107#, c-format 4092#, c-format
4108msgid "Skipping record of unsupported type %d\n" 4093msgid "Skipping record of unsupported type %d\n"
4109msgstr "" 4094msgstr ""
4110 4095
4111#: src/gns/gnunet-service-gns_resolver.c:1859 4096#: src/gns/gnunet-service-gns_resolver.c:1872
4112#, c-format 4097#, c-format
4113msgid "Name `%s' cannot be converted to IDNA." 4098msgid "Name `%s' cannot be converted to IDNA."
4114msgstr "" 4099msgstr ""
4115 4100
4116#: src/gns/gnunet-service-gns_resolver.c:1874 4101#: src/gns/gnunet-service-gns_resolver.c:1887
4117#, c-format 4102#, c-format
4118msgid "GNS lookup resulted in DNS name that is too long (`%s')\n" 4103msgid "GNS lookup resulted in DNS name that is too long (`%s')\n"
4119msgstr "" 4104msgstr ""
4120 4105
4121#: src/gns/gnunet-service-gns_resolver.c:1914 4106#: src/gns/gnunet-service-gns_resolver.c:1927
4122#, fuzzy, c-format 4107#, fuzzy, c-format
4123msgid "GNS lookup failed (zero records found for `%s')\n" 4108msgid "GNS lookup failed (zero records found for `%s')\n"
4124msgstr "Vẫn còn không tìm thấy đồng đẳng trong « %s ».\n" 4109msgstr "Vẫn còn không tìm thấy đồng đẳng trong « %s ».\n"
4125 4110
4126#: src/gns/gnunet-service-gns_resolver.c:2312 4111#: src/gns/gnunet-service-gns_resolver.c:2329
4127msgid "Unable to process critical delegation record\n" 4112msgid "Unable to process critical delegation record\n"
4128msgstr "" 4113msgstr ""
4129 4114
4130#: src/gns/gnunet-service-gns_resolver.c:2317 4115#: src/gns/gnunet-service-gns_resolver.c:2334
4131msgid "GNS lookup recursion failed (no delegation record found)\n" 4116msgid "GNS lookup recursion failed (no delegation record found)\n"
4132msgstr "" 4117msgstr ""
4133 4118
4134#: src/gns/gnunet-service-gns_resolver.c:2340 4119#: src/gns/gnunet-service-gns_resolver.c:2357
4135#, fuzzy, c-format 4120#, fuzzy, c-format
4136msgid "Failed to cache GNS resolution: %s\n" 4121msgid "Failed to cache GNS resolution: %s\n"
4137msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n" 4122msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
4138 4123
4139#: src/gns/gnunet-service-gns_resolver.c:2505 4124#: src/gns/gnunet-service-gns_resolver.c:2522
4140#, c-format 4125#, c-format
4141msgid "GNS namecache returned empty result for `%s'\n" 4126msgid "GNS namecache returned empty result for `%s'\n"
4142msgstr "" 4127msgstr ""
4143 4128
4144#: src/gns/gnunet-service-gns_resolver.c:2652 4129#: src/gns/gnunet-service-gns_resolver.c:2669
4145#, c-format 4130#, c-format
4146msgid "Zone %s was revoked, resolution fails\n" 4131msgid "Zone %s was revoked, resolution fails\n"
4147msgstr "" 4132msgstr ""
@@ -4184,31 +4169,39 @@ msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
4184msgid "Gns REST API initialized\n" 4169msgid "Gns REST API initialized\n"
4185msgstr "Lỗi sơ khởi lõi.\n" 4170msgstr "Lỗi sơ khởi lõi.\n"
4186 4171
4187#: src/gnsrecord/gnsrecord_misc.c:448 4172#: src/gnsrecord/gnsrecord_misc.c:52
4173msgid "Label is NULL which is not allowed\n"
4174msgstr ""
4175
4176#: src/gnsrecord/gnsrecord_misc.c:57
4177msgid "Label contains `.' which is not allowed\n"
4178msgstr ""
4179
4180#: src/gnsrecord/gnsrecord_misc.c:464
4188msgid "Zone delegation record not allowed in apex." 4181msgid "Zone delegation record not allowed in apex."
4189msgstr "" 4182msgstr ""
4190 4183
4191#: src/gnsrecord/gnsrecord_misc.c:456 4184#: src/gnsrecord/gnsrecord_misc.c:472
4192msgid "Zone delegation record set contains mutually exclusive records." 4185msgid "Zone delegation record set contains mutually exclusive records."
4193msgstr "" 4186msgstr ""
4194 4187
4195#: src/gnsrecord/gnsrecord_misc.c:466 4188#: src/gnsrecord/gnsrecord_misc.c:482
4196msgid "Multiple REDIRECT records." 4189msgid "Multiple REDIRECT records."
4197msgstr "" 4190msgstr ""
4198 4191
4199#: src/gnsrecord/gnsrecord_misc.c:475 src/gnsrecord/gnsrecord_misc.c:501 4192#: src/gnsrecord/gnsrecord_misc.c:491 src/gnsrecord/gnsrecord_misc.c:517
4200msgid "Redirection record set conains mutually exclusive records." 4193msgid "Redirection record set conains mutually exclusive records."
4201msgstr "" 4194msgstr ""
4202 4195
4203#: src/gnsrecord/gnsrecord_misc.c:482 4196#: src/gnsrecord/gnsrecord_misc.c:498
4204msgid "Redirection records not allowed in apex." 4197msgid "Redirection records not allowed in apex."
4205msgstr "" 4198msgstr ""
4206 4199
4207#: src/gnsrecord/gnsrecord_misc.c:493 4200#: src/gnsrecord/gnsrecord_misc.c:509
4208msgid "Redirection records not allowed in apex.." 4201msgid "Redirection records not allowed in apex.."
4209msgstr "" 4202msgstr ""
4210 4203
4211#: src/gnsrecord/gnsrecord_misc.c:515 4204#: src/gnsrecord/gnsrecord_misc.c:531
4212msgid "Mutually exclusive records." 4205msgid "Mutually exclusive records."
4213msgstr "" 4206msgstr ""
4214 4207
@@ -4792,12 +4785,18 @@ msgstr "Lỗi sơ khởi lõi.\n"
4792msgid "Failed to parse JSON in option `%s': %s (%s)\n" 4785msgid "Failed to parse JSON in option `%s': %s (%s)\n"
4793msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" 4786msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
4794 4787
4795#: src/messenger/plugin_gnsrecord_messenger.c:118 4788#: src/messenger/plugin_gnsrecord_messenger.c:136
4796#: src/messenger/plugin_gnsrecord_messenger.c:133 4789#: src/messenger/plugin_gnsrecord_messenger.c:151
4797#, fuzzy, c-format 4790#, fuzzy, c-format
4798msgid "Unable to parse MESSENGER_ROOM_ENTRY record `%s'\n" 4791msgid "Unable to parse MESSENGER_ROOM_ENTRY record `%s'\n"
4799msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" 4792msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
4800 4793
4794#: src/messenger/plugin_gnsrecord_messenger.c:172
4795#: src/messenger/plugin_gnsrecord_messenger.c:187
4796#, fuzzy, c-format
4797msgid "Unable to parse MESSENGER_ROOM_DETAILS record `%s'\n"
4798msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
4799
4801#: src/my/my.c:196 src/my/my.c:215 4800#: src/my/my.c:196 src/my/my.c:215
4802#, fuzzy, c-format 4801#, fuzzy, c-format
4803msgid "%s failed at %s:%d with error: %s\n" 4802msgid "%s failed at %s:%d with error: %s\n"
@@ -4838,7 +4837,7 @@ msgstr "Đối số không hợp lệ cho « %s ».\n"
4838msgid "You must specify a name\n" 4837msgid "You must specify a name\n"
4839msgstr "Phải ghi rõ tên hiệu\n" 4838msgstr "Phải ghi rõ tên hiệu\n"
4840 4839
4841#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1591 4840#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1582
4842msgid "name of the record to add/delete/display" 4841msgid "name of the record to add/delete/display"
4843msgstr "" 4842msgstr ""
4844 4843
@@ -4847,7 +4846,7 @@ msgstr ""
4847msgid "specifies the public key of the zone to look in" 4846msgid "specifies the public key of the zone to look in"
4848msgstr "xác định mức ưu tiên của nội dung" 4847msgstr "xác định mức ưu tiên của nội dung"
4849 4848
4850#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1652 4849#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1643
4851#, fuzzy 4850#, fuzzy
4852msgid "GNUnet zone manipulation tool" 4851msgid "GNUnet zone manipulation tool"
4853msgstr "Cấu hình GNUnet" 4852msgstr "Cấu hình GNUnet"
@@ -5097,12 +5096,7 @@ msgstr "Đối số không hợp lệ cho « %s ».\n"
5097msgid "Invalid URI `%s'\n" 5096msgid "Invalid URI `%s'\n"
5098msgstr "Dữ liệu nhập không hợp lệ.\n" 5097msgstr "Dữ liệu nhập không hợp lệ.\n"
5099 5098
5100#: src/namestore/gnunet-namestore.c:1242 5099#: src/namestore/gnunet-namestore.c:1283
5101#, c-format
5102msgid "Label `%s' contains `.' which is not allowed\n"
5103msgstr ""
5104
5105#: src/namestore/gnunet-namestore.c:1292
5106#, c-format 5100#, c-format
5107msgid "" 5101msgid ""
5108"No default identity configured for `namestore' subsystem\n" 5102"No default identity configured for `namestore' subsystem\n"
@@ -5110,102 +5104,102 @@ msgid ""
5110"Run gnunet-identity -d to get a list of choices for $NAME\n" 5104"Run gnunet-identity -d to get a list of choices for $NAME\n"
5111msgstr "" 5105msgstr ""
5112 5106
5113#: src/namestore/gnunet-namestore.c:1357 5107#: src/namestore/gnunet-namestore.c:1348
5114#, c-format 5108#, c-format
5115msgid "Superfluous command line arguments (starting with `%s') ignored\n" 5109msgid "Superfluous command line arguments (starting with `%s') ignored\n"
5116msgstr "" 5110msgstr ""
5117 5111
5118#: src/namestore/gnunet-namestore.c:1386 5112#: src/namestore/gnunet-namestore.c:1377
5119#, fuzzy, c-format 5113#, fuzzy, c-format
5120msgid "Cannot connect to identity service\n" 5114msgid "Cannot connect to identity service\n"
5121msgstr "Không thể kết nối tới %s:%u: %s\n" 5115msgstr "Không thể kết nối tới %s:%u: %s\n"
5122 5116
5123#: src/namestore/gnunet-namestore.c:1433 5117#: src/namestore/gnunet-namestore.c:1424
5124msgid "Empty record line argument is not allowed.\n" 5118msgid "Empty record line argument is not allowed.\n"
5125msgstr "" 5119msgstr ""
5126 5120
5127#: src/namestore/gnunet-namestore.c:1445 5121#: src/namestore/gnunet-namestore.c:1436
5128#, c-format 5122#, c-format
5129msgid "Invalid expiration time `%s' (must be without unit)\n" 5123msgid "Invalid expiration time `%s' (must be without unit)\n"
5130msgstr "" 5124msgstr ""
5131 5125
5132#: src/namestore/gnunet-namestore.c:1457 src/namestore/gnunet-namestore.c:1473 5126#: src/namestore/gnunet-namestore.c:1448 src/namestore/gnunet-namestore.c:1464
5133#: src/namestore/gnunet-namestore.c:1490 5127#: src/namestore/gnunet-namestore.c:1481
5134#, fuzzy, c-format 5128#, fuzzy, c-format
5135msgid "Missing entries in record line `%s'.\n" 5129msgid "Missing entries in record line `%s'.\n"
5136msgstr "Không thể nạp phần bổ sung truyền tải « %s »\n" 5130msgstr "Không thể nạp phần bổ sung truyền tải « %s »\n"
5137 5131
5138#: src/namestore/gnunet-namestore.c:1465 5132#: src/namestore/gnunet-namestore.c:1456
5139#, fuzzy, c-format 5133#, fuzzy, c-format
5140msgid "Unknown record type `%s'\n" 5134msgid "Unknown record type `%s'\n"
5141msgstr "Không rõ câu lệnh « %s ».\n" 5135msgstr "Không rõ câu lệnh « %s ».\n"
5142 5136
5143#: src/namestore/gnunet-namestore.c:1503 5137#: src/namestore/gnunet-namestore.c:1494
5144#, fuzzy, c-format 5138#, fuzzy, c-format
5145msgid "Invalid record data for type %s: `%s'.\n" 5139msgid "Invalid record data for type %s: `%s'.\n"
5146msgstr "Địa chỉ IP định dạng sai: %s\n" 5140msgstr "Địa chỉ IP định dạng sai: %s\n"
5147 5141
5148#: src/namestore/gnunet-namestore.c:1560 5142#: src/namestore/gnunet-namestore.c:1551
5149msgid "add record" 5143msgid "add record"
5150msgstr "" 5144msgstr ""
5151 5145
5152#: src/namestore/gnunet-namestore.c:1563 5146#: src/namestore/gnunet-namestore.c:1554
5153msgid "delete record" 5147msgid "delete record"
5154msgstr "" 5148msgstr ""
5155 5149
5156#: src/namestore/gnunet-namestore.c:1567 5150#: src/namestore/gnunet-namestore.c:1558
5157msgid "display records" 5151msgid "display records"
5158msgstr "" 5152msgstr ""
5159 5153
5160#: src/namestore/gnunet-namestore.c:1574 5154#: src/namestore/gnunet-namestore.c:1565
5161msgid "" 5155msgid ""
5162"expiration time for record to use (for adding only), \"never\" is possible" 5156"expiration time for record to use (for adding only), \"never\" is possible"
5163msgstr "" 5157msgstr ""
5164 5158
5165#: src/namestore/gnunet-namestore.c:1580 5159#: src/namestore/gnunet-namestore.c:1571
5166#, fuzzy 5160#, fuzzy
5167msgid "set the desired nick name for the zone" 5161msgid "set the desired nick name for the zone"
5168msgstr "In ra thông tin về các đồng đẳng GNUnet." 5162msgstr "In ra thông tin về các đồng đẳng GNUnet."
5169 5163
5170#: src/namestore/gnunet-namestore.c:1585 5164#: src/namestore/gnunet-namestore.c:1576
5171#, fuzzy 5165#, fuzzy
5172msgid "monitor changes in the namestore" 5166msgid "monitor changes in the namestore"
5173msgstr "Không kết nối được đến trình nền gnunetd." 5167msgstr "Không kết nối được đến trình nền gnunetd."
5174 5168
5175#: src/namestore/gnunet-namestore.c:1597 5169#: src/namestore/gnunet-namestore.c:1588
5176#, fuzzy 5170#, fuzzy
5177msgid "determine our name for the given PKEY" 5171msgid "determine our name for the given PKEY"
5178msgstr "In ra thông tin về các đồng đẳng GNUnet." 5172msgstr "In ra thông tin về các đồng đẳng GNUnet."
5179 5173
5180#: src/namestore/gnunet-namestore.c:1604 5174#: src/namestore/gnunet-namestore.c:1595
5181msgid "" 5175msgid ""
5182"set record set to values given by (possibly multiple) RECORDLINES; can be " 5176"set record set to values given by (possibly multiple) RECORDLINES; can be "
5183"specified multiple times" 5177"specified multiple times"
5184msgstr "" 5178msgstr ""
5185 5179
5186#: src/namestore/gnunet-namestore.c:1610 5180#: src/namestore/gnunet-namestore.c:1601
5187msgid "type of the record to add/delete/display" 5181msgid "type of the record to add/delete/display"
5188msgstr "" 5182msgstr ""
5189 5183
5190#: src/namestore/gnunet-namestore.c:1615 5184#: src/namestore/gnunet-namestore.c:1606
5191msgid "URI to import into our zone" 5185msgid "URI to import into our zone"
5192msgstr "" 5186msgstr ""
5193 5187
5194#: src/namestore/gnunet-namestore.c:1621 5188#: src/namestore/gnunet-namestore.c:1612
5195msgid "value of the record to add/delete" 5189msgid "value of the record to add/delete"
5196msgstr "" 5190msgstr ""
5197 5191
5198#: src/namestore/gnunet-namestore.c:1625 5192#: src/namestore/gnunet-namestore.c:1616
5199msgid "create or list public record" 5193msgid "create or list public record"
5200msgstr "" 5194msgstr ""
5201 5195
5202#: src/namestore/gnunet-namestore.c:1631 5196#: src/namestore/gnunet-namestore.c:1622
5203msgid "" 5197msgid ""
5204"create shadow record (only valid if all other records of the same type have " 5198"create shadow record (only valid if all other records of the same type have "
5205"expired" 5199"expired"
5206msgstr "" 5200msgstr ""
5207 5201
5208#: src/namestore/gnunet-namestore.c:1637 5202#: src/namestore/gnunet-namestore.c:1628
5209msgid "name of the ego controlling the zone" 5203msgid "name of the ego controlling the zone"
5210msgstr "" 5204msgstr ""
5211 5205
@@ -5214,7 +5208,17 @@ msgstr ""
5214msgid "Failed to replicate block in namecache: %s\n" 5208msgid "Failed to replicate block in namecache: %s\n"
5215msgstr "Lỗi cập nhật dữ liệu cho mô-đun « %s »\n" 5209msgstr "Lỗi cập nhật dữ liệu cho mô-đun « %s »\n"
5216 5210
5217#: src/namestore/gnunet-service-namestore.c:1668 5211#: src/namestore/gnunet-service-namestore.c:1559
5212#, fuzzy
5213msgid "Error normalizing name."
5214msgstr "Hoàn thành tạo khoá.\n"
5215
5216#: src/namestore/gnunet-service-namestore.c:1582
5217#, fuzzy
5218msgid "Error deserializing records."
5219msgstr "=\tLỗi đọc thư mục.\n"
5220
5221#: src/namestore/gnunet-service-namestore.c:1691
5218#, fuzzy 5222#, fuzzy
5219msgid "Store failed" 5223msgid "Store failed"
5220msgstr "Kho dữ liệu đầy.\n" 5224msgstr "Kho dữ liệu đầy.\n"
@@ -6990,8 +6994,8 @@ msgid "GNUnet topology control"
6990msgstr "" 6994msgstr ""
6991 6995
6992#: src/transport/gnunet-communicator-tcp.c:3338 6996#: src/transport/gnunet-communicator-tcp.c:3338
6993#: src/transport/gnunet-communicator-udp.c:3856 6997#: src/transport/gnunet-communicator-udp.c:3867
6994#: src/transport/gnunet-service-tng.c:10623 6998#: src/transport/gnunet-service-tng.c:10926
6995#: src/transport/gnunet-service-transport.c:2627 6999#: src/transport/gnunet-service-transport.c:2627
6996#, fuzzy 7000#, fuzzy
6997msgid "Transport service is lacking key configuration settings. Exiting.\n" 7001msgid "Transport service is lacking key configuration settings. Exiting.\n"
@@ -7001,7 +7005,7 @@ msgstr "Lưu cấu hình ngay bây giờ không?"
7001msgid "GNUnet TCP communicator" 7005msgid "GNUnet TCP communicator"
7002msgstr "" 7006msgstr ""
7003 7007
7004#: src/transport/gnunet-communicator-udp.c:3931 7008#: src/transport/gnunet-communicator-udp.c:3942
7005msgid "GNUnet UDP communicator" 7009msgid "GNUnet UDP communicator"
7006msgstr "" 7010msgstr ""
7007 7011
@@ -8408,12 +8412,12 @@ msgstr "Không thể truy cập đến tập tin gnunet-directory « %s »\n"
8408msgid "libgcrypt has not the expected version (version %s is required).\n" 8412msgid "libgcrypt has not the expected version (version %s is required).\n"
8409msgstr "libgcrypt không có phiên bản mong đợi (yêu cầu phiên bản %s).\n" 8413msgstr "libgcrypt không có phiên bản mong đợi (yêu cầu phiên bản %s).\n"
8410 8414
8411#: src/util/crypto_rsa.c:901 8415#: src/util/crypto_rsa.c:907
8412#, fuzzy, c-format 8416#, fuzzy, c-format
8413msgid "RSA signing failed at %s:%d: %s\n" 8417msgid "RSA signing failed at %s:%d: %s\n"
8414msgstr "%s bị lỗi tại %s:%d: « %s »\n" 8418msgstr "%s bị lỗi tại %s:%d: « %s »\n"
8415 8419
8416#: src/util/crypto_rsa.c:1201 8420#: src/util/crypto_rsa.c:1207
8417#, c-format 8421#, c-format
8418msgid "RSA signature verification failed at %s:%d: %s\n" 8422msgid "RSA signature verification failed at %s:%d: %s\n"
8419msgstr "Lỗi thẩm tra chữ ký RSA tại %s:%d: %s\n" 8423msgstr "Lỗi thẩm tra chữ ký RSA tại %s:%d: %s\n"
@@ -9089,12 +9093,12 @@ msgstr "Mặt nạ mạng có định dạng sai « %s »: %s\n"
9089msgid "Wrong format `%s' for network\n" 9093msgid "Wrong format `%s' for network\n"
9090msgstr "Mạng có định dạng sai « %s »: %s\n" 9094msgstr "Mạng có định dạng sai « %s »: %s\n"
9091 9095
9092#: src/util/time.c:870 src/util/time.c:898 9096#: src/util/time.c:900 src/util/time.c:928
9093#, c-format 9097#, c-format
9094msgid "Failed to map `%s', cannot assure monotonic time!\n" 9098msgid "Failed to map `%s', cannot assure monotonic time!\n"
9095msgstr "" 9099msgstr ""
9096 9100
9097#: src/util/time.c:906 9101#: src/util/time.c:936
9098#, c-format 9102#, c-format
9099msgid "" 9103msgid ""
9100"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n" 9104"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"
@@ -9284,6 +9288,10 @@ msgstr ""
9284msgid "Failed to connect to the namestore!\n" 9288msgid "Failed to connect to the namestore!\n"
9285msgstr "Không kết nối được đến trình nền gnunetd." 9289msgstr "Không kết nối được đến trình nền gnunetd."
9286 9290
9291#, fuzzy, c-format
9292#~ msgid "Block not of type %u\n"
9293#~ msgstr "Không biết truyền tải nào kiểu %d.\n"
9294
9287#, fuzzy 9295#, fuzzy
9288#~ msgid "# items stored" 9296#~ msgid "# items stored"
9289#~ msgstr "# các byte trong kho dữ liệu" 9297#~ msgstr "# các byte trong kho dữ liệu"
diff --git a/po/zh_CN.po b/po/zh_CN.po
index dedd6914a..b04d0adf9 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -7,7 +7,7 @@ msgid ""
7msgstr "" 7msgstr ""
8"Project-Id-Version: gnunet-0.8.1\n" 8"Project-Id-Version: gnunet-0.8.1\n"
9"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n" 9"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
10"POT-Creation-Date: 2022-03-04 22:23+0100\n" 10"POT-Creation-Date: 2022-04-01 08:42+0200\n"
11"PO-Revision-Date: 2011-07-09 12:12+0800\n" 11"PO-Revision-Date: 2011-07-09 12:12+0800\n"
12"Last-Translator: Wylmer Wang <wantinghard@gmail.com>\n" 12"Last-Translator: Wylmer Wang <wantinghard@gmail.com>\n"
13"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n" 13"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
@@ -16,7 +16,7 @@ msgstr ""
16"Content-Type: text/plain; charset=UTF-8\n" 16"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n" 17"Content-Transfer-Encoding: 8bit\n"
18 18
19#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1254 19#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1245
20#, c-format 20#, c-format
21msgid "Ego `%s' not known to identity service\n" 21msgid "Ego `%s' not known to identity service\n"
22msgstr "" 22msgstr ""
@@ -2081,21 +2081,6 @@ msgstr ""
2081msgid "Measure quality and performance of the DHT service." 2081msgid "Measure quality and performance of the DHT service."
2082msgstr "无法访问该服务" 2082msgstr "无法访问该服务"
2083 2083
2084#: src/dht/plugin_block_dht.c:404
2085#, c-format
2086msgid "Block not of type %u\n"
2087msgstr ""
2088
2089#: src/dht/plugin_block_dht.c:413
2090#, c-format
2091msgid "Size mismatch for block with type %u\n"
2092msgstr ""
2093
2094#: src/dht/plugin_block_dht.c:424
2095#, c-format
2096msgid "Block of type %u is malformed\n"
2097msgstr ""
2098
2099#: src/dns/gnunet-dns-monitor.c:371 src/dns/gnunet-dns-monitor.c:376 2084#: src/dns/gnunet-dns-monitor.c:371 src/dns/gnunet-dns-monitor.c:376
2100msgid "only monitor DNS queries" 2085msgid "only monitor DNS queries"
2101msgstr "" 2086msgstr ""
@@ -2798,20 +2783,20 @@ msgstr ""
2798msgid "LOC URI malformed (signature failed validation)" 2783msgid "LOC URI malformed (signature failed validation)"
2799msgstr "" 2784msgstr ""
2800 2785
2801#: src/fs/fs_uri.c:652 2786#: src/fs/fs_uri.c:653
2802#, fuzzy 2787#, fuzzy
2803msgid "invalid argument" 2788msgid "invalid argument"
2804msgstr "“%s”的参数无效。\n" 2789msgstr "“%s”的参数无效。\n"
2805 2790
2806#: src/fs/fs_uri.c:671 2791#: src/fs/fs_uri.c:673
2807msgid "Unrecognized URI type" 2792msgid "Unrecognized URI type"
2808msgstr "" 2793msgstr ""
2809 2794
2810#: src/fs/fs_uri.c:1075 src/fs/fs_uri.c:1102 2795#: src/fs/fs_uri.c:1077 src/fs/fs_uri.c:1104
2811msgid "No keywords specified!\n" 2796msgid "No keywords specified!\n"
2812msgstr "" 2797msgstr ""
2813 2798
2814#: src/fs/fs_uri.c:1108 2799#: src/fs/fs_uri.c:1110
2815msgid "Number of double-quotes not balanced!\n" 2800msgid "Number of double-quotes not balanced!\n"
2816msgstr "" 2801msgstr ""
2817 2802
@@ -3521,93 +3506,93 @@ msgstr ""
3521msgid "# query plan entries" 3506msgid "# query plan entries"
3522msgstr "" 3507msgstr ""
3523 3508
3524#: src/fs/gnunet-service-fs_pr.c:329 3509#: src/fs/gnunet-service-fs_pr.c:330
3525msgid "# Pending requests created" 3510msgid "# Pending requests created"
3526msgstr "" 3511msgstr ""
3527 3512
3528#: src/fs/gnunet-service-fs_pr.c:421 src/fs/gnunet-service-fs_pr.c:658 3513#: src/fs/gnunet-service-fs_pr.c:422 src/fs/gnunet-service-fs_pr.c:662
3529msgid "# Pending requests active" 3514msgid "# Pending requests active"
3530msgstr "" 3515msgstr ""
3531 3516
3532#: src/fs/gnunet-service-fs_pr.c:838 3517#: src/fs/gnunet-service-fs_pr.c:837
3533msgid "# replies received and matched" 3518msgid "# replies received and matched"
3534msgstr "" 3519msgstr ""
3535 3520
3536#: src/fs/gnunet-service-fs_pr.c:916 3521#: src/fs/gnunet-service-fs_pr.c:911
3537msgid "# results found locally" 3522msgid "# results found locally"
3538msgstr "" 3523msgstr ""
3539 3524
3540#: src/fs/gnunet-service-fs_pr.c:1050 3525#: src/fs/gnunet-service-fs_pr.c:1045
3541msgid "# Datastore `PUT' failures" 3526msgid "# Datastore `PUT' failures"
3542msgstr "" 3527msgstr ""
3543 3528
3544#: src/fs/gnunet-service-fs_pr.c:1079 3529#: src/fs/gnunet-service-fs_pr.c:1074
3545msgid "# storage requests dropped due to high load" 3530msgid "# storage requests dropped due to high load"
3546msgstr "" 3531msgstr ""
3547 3532
3548#: src/fs/gnunet-service-fs_pr.c:1118 3533#: src/fs/gnunet-service-fs_pr.c:1113
3549msgid "# Replies received from DHT" 3534msgid "# Replies received from DHT"
3550msgstr "" 3535msgstr ""
3551 3536
3552#: src/fs/gnunet-service-fs_pr.c:1259 3537#: src/fs/gnunet-service-fs_pr.c:1268
3553msgid "# Replies received from CADET" 3538msgid "# Replies received from CADET"
3554msgstr "" 3539msgstr ""
3555 3540
3556#: src/fs/gnunet-service-fs_pr.c:1313 3541#: src/fs/gnunet-service-fs_pr.c:1323
3557#, c-format 3542#, c-format
3558msgid "Datastore lookup already took %s!\n" 3543msgid "Datastore lookup already took %s!\n"
3559msgstr "" 3544msgstr ""
3560 3545
3561#: src/fs/gnunet-service-fs_pr.c:1334 3546#: src/fs/gnunet-service-fs_pr.c:1344
3562#, c-format 3547#, c-format
3563msgid "On-demand lookup already took %s!\n" 3548msgid "On-demand lookup already took %s!\n"
3564msgstr "" 3549msgstr ""
3565 3550
3566#: src/fs/gnunet-service-fs_pr.c:1401 3551#: src/fs/gnunet-service-fs_pr.c:1411
3567msgid "# requested DBLOCK or IBLOCK not found" 3552msgid "# requested DBLOCK or IBLOCK not found"
3568msgstr "" 3553msgstr ""
3569 3554
3570#: src/fs/gnunet-service-fs_pr.c:1463 3555#: src/fs/gnunet-service-fs_pr.c:1473
3571msgid "# Datastore lookups concluded (error queueing)" 3556msgid "# Datastore lookups concluded (error queueing)"
3572msgstr "" 3557msgstr ""
3573 3558
3574#: src/fs/gnunet-service-fs_pr.c:1518 3559#: src/fs/gnunet-service-fs_pr.c:1528
3575msgid "# Datastore lookups concluded (no results)" 3560msgid "# Datastore lookups concluded (no results)"
3576msgstr "" 3561msgstr ""
3577 3562
3578#: src/fs/gnunet-service-fs_pr.c:1533 3563#: src/fs/gnunet-service-fs_pr.c:1543
3579msgid "# Datastore lookups concluded (seen all)" 3564msgid "# Datastore lookups concluded (seen all)"
3580msgstr "" 3565msgstr ""
3581 3566
3582#: src/fs/gnunet-service-fs_pr.c:1556 3567#: src/fs/gnunet-service-fs_pr.c:1566
3583msgid "# Datastore lookups aborted (more than MAX_RESULTS)" 3568msgid "# Datastore lookups aborted (more than MAX_RESULTS)"
3584msgstr "" 3569msgstr ""
3585 3570
3586#: src/fs/gnunet-service-fs_pr.c:1573 3571#: src/fs/gnunet-service-fs_pr.c:1583
3587msgid "# on-demand blocks matched requests" 3572msgid "# on-demand blocks matched requests"
3588msgstr "" 3573msgstr ""
3589 3574
3590#: src/fs/gnunet-service-fs_pr.c:1594 3575#: src/fs/gnunet-service-fs_pr.c:1604
3591msgid "# on-demand lookups performed successfully" 3576msgid "# on-demand lookups performed successfully"
3592msgstr "" 3577msgstr ""
3593 3578
3594#: src/fs/gnunet-service-fs_pr.c:1600 3579#: src/fs/gnunet-service-fs_pr.c:1610
3595msgid "# on-demand lookups failed" 3580msgid "# on-demand lookups failed"
3596msgstr "" 3581msgstr ""
3597 3582
3598#: src/fs/gnunet-service-fs_pr.c:1641 3583#: src/fs/gnunet-service-fs_pr.c:1656
3599msgid "# Datastore lookups concluded (found last result)" 3584msgid "# Datastore lookups concluded (found last result)"
3600msgstr "" 3585msgstr ""
3601 3586
3602#: src/fs/gnunet-service-fs_pr.c:1654 3587#: src/fs/gnunet-service-fs_pr.c:1669
3603msgid "# Datastore lookups concluded (load too high)" 3588msgid "# Datastore lookups concluded (load too high)"
3604msgstr "" 3589msgstr ""
3605 3590
3606#: src/fs/gnunet-service-fs_pr.c:1705 3591#: src/fs/gnunet-service-fs_pr.c:1720
3607msgid "# Datastore lookups initiated" 3592msgid "# Datastore lookups initiated"
3608msgstr "" 3593msgstr ""
3609 3594
3610#: src/fs/gnunet-service-fs_pr.c:1755 3595#: src/fs/gnunet-service-fs_pr.c:1784
3611msgid "# GAP PUT messages received" 3596msgid "# GAP PUT messages received"
3612msgstr "" 3597msgstr ""
3613 3598
@@ -3917,65 +3902,65 @@ msgstr ""
3917msgid "Failed to connect to the DNS service!\n" 3902msgid "Failed to connect to the DNS service!\n"
3918msgstr "初始化“%s”服务失败。\n" 3903msgstr "初始化“%s”服务失败。\n"
3919 3904
3920#: src/gns/gnunet-service-gns_resolver.c:659 3905#: src/gns/gnunet-service-gns_resolver.c:672
3921#, c-format 3906#, c-format
3922msgid "Protocol `%s' unknown, skipping labels.\n" 3907msgid "Protocol `%s' unknown, skipping labels.\n"
3923msgstr "" 3908msgstr ""
3924 3909
3925#: src/gns/gnunet-service-gns_resolver.c:671 3910#: src/gns/gnunet-service-gns_resolver.c:684
3926#, c-format 3911#, c-format
3927msgid "Service `%s' unknown for protocol `%s', trying as number.\n" 3912msgid "Service `%s' unknown for protocol `%s', trying as number.\n"
3928msgstr "" 3913msgstr ""
3929 3914
3930#: src/gns/gnunet-service-gns_resolver.c:677 3915#: src/gns/gnunet-service-gns_resolver.c:690
3931#, c-format 3916#, c-format
3932msgid "Service `%s' not a port, skipping service labels.\n" 3917msgid "Service `%s' not a port, skipping service labels.\n"
3933msgstr "" 3918msgstr ""
3934 3919
3935#: src/gns/gnunet-service-gns_resolver.c:891 3920#: src/gns/gnunet-service-gns_resolver.c:904
3936#, fuzzy 3921#, fuzzy
3937msgid "Failed to parse DNS response\n" 3922msgid "Failed to parse DNS response\n"
3938msgstr "打开日志文件“%s”失败:%s\n" 3923msgstr "打开日志文件“%s”失败:%s\n"
3939 3924
3940#: src/gns/gnunet-service-gns_resolver.c:1082 3925#: src/gns/gnunet-service-gns_resolver.c:1095
3941#, c-format 3926#, c-format
3942msgid "Skipping record of unsupported type %d\n" 3927msgid "Skipping record of unsupported type %d\n"
3943msgstr "" 3928msgstr ""
3944 3929
3945#: src/gns/gnunet-service-gns_resolver.c:1859 3930#: src/gns/gnunet-service-gns_resolver.c:1872
3946#, c-format 3931#, c-format
3947msgid "Name `%s' cannot be converted to IDNA." 3932msgid "Name `%s' cannot be converted to IDNA."
3948msgstr "" 3933msgstr ""
3949 3934
3950#: src/gns/gnunet-service-gns_resolver.c:1874 3935#: src/gns/gnunet-service-gns_resolver.c:1887
3951#, c-format 3936#, c-format
3952msgid "GNS lookup resulted in DNS name that is too long (`%s')\n" 3937msgid "GNS lookup resulted in DNS name that is too long (`%s')\n"
3953msgstr "" 3938msgstr ""
3954 3939
3955#: src/gns/gnunet-service-gns_resolver.c:1914 3940#: src/gns/gnunet-service-gns_resolver.c:1927
3956#, fuzzy, c-format 3941#, fuzzy, c-format
3957msgid "GNS lookup failed (zero records found for `%s')\n" 3942msgid "GNS lookup failed (zero records found for `%s')\n"
3958msgstr "运行 %s失败:%s %d\n" 3943msgstr "运行 %s失败:%s %d\n"
3959 3944
3960#: src/gns/gnunet-service-gns_resolver.c:2312 3945#: src/gns/gnunet-service-gns_resolver.c:2329
3961msgid "Unable to process critical delegation record\n" 3946msgid "Unable to process critical delegation record\n"
3962msgstr "" 3947msgstr ""
3963 3948
3964#: src/gns/gnunet-service-gns_resolver.c:2317 3949#: src/gns/gnunet-service-gns_resolver.c:2334
3965msgid "GNS lookup recursion failed (no delegation record found)\n" 3950msgid "GNS lookup recursion failed (no delegation record found)\n"
3966msgstr "" 3951msgstr ""
3967 3952
3968#: src/gns/gnunet-service-gns_resolver.c:2340 3953#: src/gns/gnunet-service-gns_resolver.c:2357
3969#, fuzzy, c-format 3954#, fuzzy, c-format
3970msgid "Failed to cache GNS resolution: %s\n" 3955msgid "Failed to cache GNS resolution: %s\n"
3971msgstr "打开日志文件“%s”失败:%s\n" 3956msgstr "打开日志文件“%s”失败:%s\n"
3972 3957
3973#: src/gns/gnunet-service-gns_resolver.c:2505 3958#: src/gns/gnunet-service-gns_resolver.c:2522
3974#, c-format 3959#, c-format
3975msgid "GNS namecache returned empty result for `%s'\n" 3960msgid "GNS namecache returned empty result for `%s'\n"
3976msgstr "" 3961msgstr ""
3977 3962
3978#: src/gns/gnunet-service-gns_resolver.c:2652 3963#: src/gns/gnunet-service-gns_resolver.c:2669
3979#, c-format 3964#, c-format
3980msgid "Zone %s was revoked, resolution fails\n" 3965msgid "Zone %s was revoked, resolution fails\n"
3981msgstr "" 3966msgstr ""
@@ -4017,31 +4002,39 @@ msgstr "解析配置文件“%s”失败\n"
4017msgid "Gns REST API initialized\n" 4002msgid "Gns REST API initialized\n"
4018msgstr "" 4003msgstr ""
4019 4004
4020#: src/gnsrecord/gnsrecord_misc.c:448 4005#: src/gnsrecord/gnsrecord_misc.c:52
4006msgid "Label is NULL which is not allowed\n"
4007msgstr ""
4008
4009#: src/gnsrecord/gnsrecord_misc.c:57
4010msgid "Label contains `.' which is not allowed\n"
4011msgstr ""
4012
4013#: src/gnsrecord/gnsrecord_misc.c:464
4021msgid "Zone delegation record not allowed in apex." 4014msgid "Zone delegation record not allowed in apex."
4022msgstr "" 4015msgstr ""
4023 4016
4024#: src/gnsrecord/gnsrecord_misc.c:456 4017#: src/gnsrecord/gnsrecord_misc.c:472
4025msgid "Zone delegation record set contains mutually exclusive records." 4018msgid "Zone delegation record set contains mutually exclusive records."
4026msgstr "" 4019msgstr ""
4027 4020
4028#: src/gnsrecord/gnsrecord_misc.c:466 4021#: src/gnsrecord/gnsrecord_misc.c:482
4029msgid "Multiple REDIRECT records." 4022msgid "Multiple REDIRECT records."
4030msgstr "" 4023msgstr ""
4031 4024
4032#: src/gnsrecord/gnsrecord_misc.c:475 src/gnsrecord/gnsrecord_misc.c:501 4025#: src/gnsrecord/gnsrecord_misc.c:491 src/gnsrecord/gnsrecord_misc.c:517
4033msgid "Redirection record set conains mutually exclusive records." 4026msgid "Redirection record set conains mutually exclusive records."
4034msgstr "" 4027msgstr ""
4035 4028
4036#: src/gnsrecord/gnsrecord_misc.c:482 4029#: src/gnsrecord/gnsrecord_misc.c:498
4037msgid "Redirection records not allowed in apex." 4030msgid "Redirection records not allowed in apex."
4038msgstr "" 4031msgstr ""
4039 4032
4040#: src/gnsrecord/gnsrecord_misc.c:493 4033#: src/gnsrecord/gnsrecord_misc.c:509
4041msgid "Redirection records not allowed in apex.." 4034msgid "Redirection records not allowed in apex.."
4042msgstr "" 4035msgstr ""
4043 4036
4044#: src/gnsrecord/gnsrecord_misc.c:515 4037#: src/gnsrecord/gnsrecord_misc.c:531
4045msgid "Mutually exclusive records." 4038msgid "Mutually exclusive records."
4046msgstr "" 4039msgstr ""
4047 4040
@@ -4606,12 +4599,18 @@ msgstr ""
4606msgid "Failed to parse JSON in option `%s': %s (%s)\n" 4599msgid "Failed to parse JSON in option `%s': %s (%s)\n"
4607msgstr "解析配置文件“%s”失败\n" 4600msgstr "解析配置文件“%s”失败\n"
4608 4601
4609#: src/messenger/plugin_gnsrecord_messenger.c:118 4602#: src/messenger/plugin_gnsrecord_messenger.c:136
4610#: src/messenger/plugin_gnsrecord_messenger.c:133 4603#: src/messenger/plugin_gnsrecord_messenger.c:151
4611#, fuzzy, c-format 4604#, fuzzy, c-format
4612msgid "Unable to parse MESSENGER_ROOM_ENTRY record `%s'\n" 4605msgid "Unable to parse MESSENGER_ROOM_ENTRY record `%s'\n"
4613msgstr "解析配置文件“%s”失败\n" 4606msgstr "解析配置文件“%s”失败\n"
4614 4607
4608#: src/messenger/plugin_gnsrecord_messenger.c:172
4609#: src/messenger/plugin_gnsrecord_messenger.c:187
4610#, fuzzy, c-format
4611msgid "Unable to parse MESSENGER_ROOM_DETAILS record `%s'\n"
4612msgstr "解析配置文件“%s”失败\n"
4613
4615#: src/my/my.c:196 src/my/my.c:215 4614#: src/my/my.c:196 src/my/my.c:215
4616#, fuzzy, c-format 4615#, fuzzy, c-format
4617msgid "%s failed at %s:%d with error: %s\n" 4616msgid "%s failed at %s:%d with error: %s\n"
@@ -4652,7 +4651,7 @@ msgstr "“%s”的参数无效。\n"
4652msgid "You must specify a name\n" 4651msgid "You must specify a name\n"
4653msgstr "您必须指定一个接收方!\n" 4652msgstr "您必须指定一个接收方!\n"
4654 4653
4655#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1591 4654#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1582
4656msgid "name of the record to add/delete/display" 4655msgid "name of the record to add/delete/display"
4657msgstr "" 4656msgstr ""
4658 4657
@@ -4660,7 +4659,7 @@ msgstr ""
4660msgid "specifies the public key of the zone to look in" 4659msgid "specifies the public key of the zone to look in"
4661msgstr "" 4660msgstr ""
4662 4661
4663#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1652 4662#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1643
4664#, fuzzy 4663#, fuzzy
4665msgid "GNUnet zone manipulation tool" 4664msgid "GNUnet zone manipulation tool"
4666msgstr "GNUnet 配置" 4665msgstr "GNUnet 配置"
@@ -4910,12 +4909,7 @@ msgstr "“%s”的参数无效。\n"
4910msgid "Invalid URI `%s'\n" 4909msgid "Invalid URI `%s'\n"
4911msgstr "无效条目。\n" 4910msgstr "无效条目。\n"
4912 4911
4913#: src/namestore/gnunet-namestore.c:1242 4912#: src/namestore/gnunet-namestore.c:1283
4914#, c-format
4915msgid "Label `%s' contains `.' which is not allowed\n"
4916msgstr ""
4917
4918#: src/namestore/gnunet-namestore.c:1292
4919#, c-format 4913#, c-format
4920msgid "" 4914msgid ""
4921"No default identity configured for `namestore' subsystem\n" 4915"No default identity configured for `namestore' subsystem\n"
@@ -4923,102 +4917,102 @@ msgid ""
4923"Run gnunet-identity -d to get a list of choices for $NAME\n" 4917"Run gnunet-identity -d to get a list of choices for $NAME\n"
4924msgstr "" 4918msgstr ""
4925 4919
4926#: src/namestore/gnunet-namestore.c:1357 4920#: src/namestore/gnunet-namestore.c:1348
4927#, c-format 4921#, c-format
4928msgid "Superfluous command line arguments (starting with `%s') ignored\n" 4922msgid "Superfluous command line arguments (starting with `%s') ignored\n"
4929msgstr "" 4923msgstr ""
4930 4924
4931#: src/namestore/gnunet-namestore.c:1386 4925#: src/namestore/gnunet-namestore.c:1377
4932#, fuzzy, c-format 4926#, fuzzy, c-format
4933msgid "Cannot connect to identity service\n" 4927msgid "Cannot connect to identity service\n"
4934msgstr "无法连接到 %s:%u:%s\n" 4928msgstr "无法连接到 %s:%u:%s\n"
4935 4929
4936#: src/namestore/gnunet-namestore.c:1433 4930#: src/namestore/gnunet-namestore.c:1424
4937msgid "Empty record line argument is not allowed.\n" 4931msgid "Empty record line argument is not allowed.\n"
4938msgstr "" 4932msgstr ""
4939 4933
4940#: src/namestore/gnunet-namestore.c:1445 4934#: src/namestore/gnunet-namestore.c:1436
4941#, c-format 4935#, c-format
4942msgid "Invalid expiration time `%s' (must be without unit)\n" 4936msgid "Invalid expiration time `%s' (must be without unit)\n"
4943msgstr "" 4937msgstr ""
4944 4938
4945#: src/namestore/gnunet-namestore.c:1457 src/namestore/gnunet-namestore.c:1473 4939#: src/namestore/gnunet-namestore.c:1448 src/namestore/gnunet-namestore.c:1464
4946#: src/namestore/gnunet-namestore.c:1490 4940#: src/namestore/gnunet-namestore.c:1481
4947#, fuzzy, c-format 4941#, fuzzy, c-format
4948msgid "Missing entries in record line `%s'.\n" 4942msgid "Missing entries in record line `%s'.\n"
4949msgstr "解析配置文件“%s”失败\n" 4943msgstr "解析配置文件“%s”失败\n"
4950 4944
4951#: src/namestore/gnunet-namestore.c:1465 4945#: src/namestore/gnunet-namestore.c:1456
4952#, fuzzy, c-format 4946#, fuzzy, c-format
4953msgid "Unknown record type `%s'\n" 4947msgid "Unknown record type `%s'\n"
4954msgstr "未知的命令“%s”。\n" 4948msgstr "未知的命令“%s”。\n"
4955 4949
4956#: src/namestore/gnunet-namestore.c:1503 4950#: src/namestore/gnunet-namestore.c:1494
4957#, fuzzy, c-format 4951#, fuzzy, c-format
4958msgid "Invalid record data for type %s: `%s'.\n" 4952msgid "Invalid record data for type %s: `%s'.\n"
4959msgstr "IP 格式无效:“%s”\n" 4953msgstr "IP 格式无效:“%s”\n"
4960 4954
4961#: src/namestore/gnunet-namestore.c:1560 4955#: src/namestore/gnunet-namestore.c:1551
4962msgid "add record" 4956msgid "add record"
4963msgstr "" 4957msgstr ""
4964 4958
4965#: src/namestore/gnunet-namestore.c:1563 4959#: src/namestore/gnunet-namestore.c:1554
4966msgid "delete record" 4960msgid "delete record"
4967msgstr "" 4961msgstr ""
4968 4962
4969#: src/namestore/gnunet-namestore.c:1567 4963#: src/namestore/gnunet-namestore.c:1558
4970msgid "display records" 4964msgid "display records"
4971msgstr "" 4965msgstr ""
4972 4966
4973#: src/namestore/gnunet-namestore.c:1574 4967#: src/namestore/gnunet-namestore.c:1565
4974msgid "" 4968msgid ""
4975"expiration time for record to use (for adding only), \"never\" is possible" 4969"expiration time for record to use (for adding only), \"never\" is possible"
4976msgstr "" 4970msgstr ""
4977 4971
4978#: src/namestore/gnunet-namestore.c:1580 4972#: src/namestore/gnunet-namestore.c:1571
4979#, fuzzy 4973#, fuzzy
4980msgid "set the desired nick name for the zone" 4974msgid "set the desired nick name for the zone"
4981msgstr "无法获取有关用户“%s”的信息:%s\n" 4975msgstr "无法获取有关用户“%s”的信息:%s\n"
4982 4976
4983#: src/namestore/gnunet-namestore.c:1585 4977#: src/namestore/gnunet-namestore.c:1576
4984#, fuzzy 4978#, fuzzy
4985msgid "monitor changes in the namestore" 4979msgid "monitor changes in the namestore"
4986msgstr "初始化“%s”服务失败。\n" 4980msgstr "初始化“%s”服务失败。\n"
4987 4981
4988#: src/namestore/gnunet-namestore.c:1597 4982#: src/namestore/gnunet-namestore.c:1588
4989#, fuzzy 4983#, fuzzy
4990msgid "determine our name for the given PKEY" 4984msgid "determine our name for the given PKEY"
4991msgstr "无法获取有关用户“%s”的信息:%s\n" 4985msgstr "无法获取有关用户“%s”的信息:%s\n"
4992 4986
4993#: src/namestore/gnunet-namestore.c:1604 4987#: src/namestore/gnunet-namestore.c:1595
4994msgid "" 4988msgid ""
4995"set record set to values given by (possibly multiple) RECORDLINES; can be " 4989"set record set to values given by (possibly multiple) RECORDLINES; can be "
4996"specified multiple times" 4990"specified multiple times"
4997msgstr "" 4991msgstr ""
4998 4992
4999#: src/namestore/gnunet-namestore.c:1610 4993#: src/namestore/gnunet-namestore.c:1601
5000msgid "type of the record to add/delete/display" 4994msgid "type of the record to add/delete/display"
5001msgstr "" 4995msgstr ""
5002 4996
5003#: src/namestore/gnunet-namestore.c:1615 4997#: src/namestore/gnunet-namestore.c:1606
5004msgid "URI to import into our zone" 4998msgid "URI to import into our zone"
5005msgstr "" 4999msgstr ""
5006 5000
5007#: src/namestore/gnunet-namestore.c:1621 5001#: src/namestore/gnunet-namestore.c:1612
5008msgid "value of the record to add/delete" 5002msgid "value of the record to add/delete"
5009msgstr "" 5003msgstr ""
5010 5004
5011#: src/namestore/gnunet-namestore.c:1625 5005#: src/namestore/gnunet-namestore.c:1616
5012msgid "create or list public record" 5006msgid "create or list public record"
5013msgstr "" 5007msgstr ""
5014 5008
5015#: src/namestore/gnunet-namestore.c:1631 5009#: src/namestore/gnunet-namestore.c:1622
5016msgid "" 5010msgid ""
5017"create shadow record (only valid if all other records of the same type have " 5011"create shadow record (only valid if all other records of the same type have "
5018"expired" 5012"expired"
5019msgstr "" 5013msgstr ""
5020 5014
5021#: src/namestore/gnunet-namestore.c:1637 5015#: src/namestore/gnunet-namestore.c:1628
5022msgid "name of the ego controlling the zone" 5016msgid "name of the ego controlling the zone"
5023msgstr "" 5017msgstr ""
5024 5018
@@ -5027,7 +5021,17 @@ msgstr ""
5027msgid "Failed to replicate block in namecache: %s\n" 5021msgid "Failed to replicate block in namecache: %s\n"
5028msgstr "发送消息失败。\n" 5022msgstr "发送消息失败。\n"
5029 5023
5030#: src/namestore/gnunet-service-namestore.c:1668 5024#: src/namestore/gnunet-service-namestore.c:1559
5025#, fuzzy
5026msgid "Error normalizing name."
5027msgstr "创建用户出错"
5028
5029#: src/namestore/gnunet-service-namestore.c:1582
5030#, fuzzy
5031msgid "Error deserializing records."
5032msgstr "未知错误。\n"
5033
5034#: src/namestore/gnunet-service-namestore.c:1691
5031#, fuzzy 5035#, fuzzy
5032msgid "Store failed" 5036msgid "Store failed"
5033msgstr "“%s”已连接到“%s”。\n" 5037msgstr "“%s”已连接到“%s”。\n"
@@ -6769,8 +6773,8 @@ msgid "GNUnet topology control"
6769msgstr "" 6773msgstr ""
6770 6774
6771#: src/transport/gnunet-communicator-tcp.c:3338 6775#: src/transport/gnunet-communicator-tcp.c:3338
6772#: src/transport/gnunet-communicator-udp.c:3856 6776#: src/transport/gnunet-communicator-udp.c:3867
6773#: src/transport/gnunet-service-tng.c:10623 6777#: src/transport/gnunet-service-tng.c:10926
6774#: src/transport/gnunet-service-transport.c:2627 6778#: src/transport/gnunet-service-transport.c:2627
6775#, fuzzy 6779#, fuzzy
6776msgid "Transport service is lacking key configuration settings. Exiting.\n" 6780msgid "Transport service is lacking key configuration settings. Exiting.\n"
@@ -6780,7 +6784,7 @@ msgstr "立即保存配置?"
6780msgid "GNUnet TCP communicator" 6784msgid "GNUnet TCP communicator"
6781msgstr "" 6785msgstr ""
6782 6786
6783#: src/transport/gnunet-communicator-udp.c:3931 6787#: src/transport/gnunet-communicator-udp.c:3942
6784msgid "GNUnet UDP communicator" 6788msgid "GNUnet UDP communicator"
6785msgstr "" 6789msgstr ""
6786 6790
@@ -8130,12 +8134,12 @@ msgstr "找不到接口“%s”的一个 IP 地址。\n"
8130msgid "libgcrypt has not the expected version (version %s is required).\n" 8134msgid "libgcrypt has not the expected version (version %s is required).\n"
8131msgstr "libgcrypt 的版本不符合预期(要求版本 %s)。\n" 8135msgstr "libgcrypt 的版本不符合预期(要求版本 %s)。\n"
8132 8136
8133#: src/util/crypto_rsa.c:901 8137#: src/util/crypto_rsa.c:907
8134#, fuzzy, c-format 8138#, fuzzy, c-format
8135msgid "RSA signing failed at %s:%d: %s\n" 8139msgid "RSA signing failed at %s:%d: %s\n"
8136msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n" 8140msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n"
8137 8141
8138#: src/util/crypto_rsa.c:1201 8142#: src/util/crypto_rsa.c:1207
8139#, fuzzy, c-format 8143#, fuzzy, c-format
8140msgid "RSA signature verification failed at %s:%d: %s\n" 8144msgid "RSA signature verification failed at %s:%d: %s\n"
8141msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n" 8145msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n"
@@ -8806,12 +8810,12 @@ msgstr "网络掩码的格式“%s”错误\n"
8806msgid "Wrong format `%s' for network\n" 8810msgid "Wrong format `%s' for network\n"
8807msgstr "网络的格式“%s”错误\n" 8811msgstr "网络的格式“%s”错误\n"
8808 8812
8809#: src/util/time.c:870 src/util/time.c:898 8813#: src/util/time.c:900 src/util/time.c:928
8810#, c-format 8814#, c-format
8811msgid "Failed to map `%s', cannot assure monotonic time!\n" 8815msgid "Failed to map `%s', cannot assure monotonic time!\n"
8812msgstr "" 8816msgstr ""
8813 8817
8814#: src/util/time.c:906 8818#: src/util/time.c:936
8815#, c-format 8819#, c-format
8816msgid "" 8820msgid ""
8817"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n" 8821"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"
diff --git a/src/dhtu/Makefile.am b/src/dhtu/Makefile.am
index ebffa9ecf..4d210b71f 100644
--- a/src/dhtu/Makefile.am
+++ b/src/dhtu/Makefile.am
@@ -13,10 +13,11 @@ endif
13pkgcfg_DATA = \ 13pkgcfg_DATA = \
14 dhtu.conf 14 dhtu.conf
15 15
16
17plugin_LTLIBRARIES = \ 16plugin_LTLIBRARIES = \
18 libgnunet_plugin_dhtu_gnunet.la \ 17 libgnunet_plugin_dhtu_gnunet.la
19 libgnunet_plugin_dhtu_ip.la 18
19if !OPENBSD
20plugin_LTLIBRARIES += libgnunet_plugin_dhtu_ip.la
20 21
21libgnunet_plugin_dhtu_ip_la_SOURCES = \ 22libgnunet_plugin_dhtu_ip_la_SOURCES = \
22 plugin_dhtu_ip.c 23 plugin_dhtu_ip.c
@@ -26,7 +27,7 @@ libgnunet_plugin_dhtu_ip_la_LIBADD = \
26 $(LTLIBINTL) 27 $(LTLIBINTL)
27libgnunet_plugin_dhtu_ip_la_LDFLAGS = \ 28libgnunet_plugin_dhtu_ip_la_LDFLAGS = \
28 $(GN_PLUGIN_LDFLAGS) 29 $(GN_PLUGIN_LDFLAGS)
29 30endif
30 31
31 32
32libgnunet_plugin_dhtu_gnunet_la_SOURCES = \ 33libgnunet_plugin_dhtu_gnunet_la_SOURCES = \
diff --git a/src/fs/test_fs_uri.c b/src/fs/test_fs_uri.c
index 30eafab9a..aac7b1b97 100644
--- a/src/fs/test_fs_uri.c
+++ b/src/fs/test_fs_uri.c
@@ -80,7 +80,7 @@ testLocation ()
80 char *uric; 80 char *uric;
81 struct GNUNET_FS_Uri *uri2; 81 struct GNUNET_FS_Uri *uri2;
82 struct GNUNET_FS_Uri *baseURI; 82 struct GNUNET_FS_Uri *baseURI;
83 char *emsg; 83 char *emsg = NULL;
84 struct GNUNET_CRYPTO_EddsaPrivateKey pk; 84 struct GNUNET_CRYPTO_EddsaPrivateKey pk;
85 85
86 baseURI = 86 baseURI =
diff --git a/src/fs/test_plugin_block_fs.c b/src/fs/test_plugin_block_fs.c
index 727cc37c2..f15d10b17 100644
--- a/src/fs/test_plugin_block_fs.c
+++ b/src/fs/test_plugin_block_fs.c
@@ -43,7 +43,6 @@ test_fs (struct GNUNET_BLOCK_Context *ctx)
43 if (GNUNET_OK != 43 if (GNUNET_OK !=
44 GNUNET_BLOCK_check_block (ctx, 44 GNUNET_BLOCK_check_block (ctx,
45 GNUNET_BLOCK_TYPE_FS_DBLOCK, 45 GNUNET_BLOCK_TYPE_FS_DBLOCK,
46 &key,
47 block, 46 block,
48 sizeof(block))) 47 sizeof(block)))
49 return 2; 48 return 2;
@@ -54,7 +53,7 @@ test_fs (struct GNUNET_BLOCK_Context *ctx)
54 NULL, 0)) 53 NULL, 0))
55 return 4; 54 return 4;
56 GNUNET_log_skip (1, GNUNET_NO); 55 GNUNET_log_skip (1, GNUNET_NO);
57 if (GNUNET_BLOCK_EVALUATION_REQUEST_INVALID != 56 if (GNUNET_NO !=
58 GNUNET_BLOCK_check_query (ctx, 57 GNUNET_BLOCK_check_query (ctx,
59 GNUNET_BLOCK_TYPE_FS_DBLOCK, 58 GNUNET_BLOCK_TYPE_FS_DBLOCK,
60 &key, 59 &key,
diff --git a/src/gns/gnunet-service-gns_resolver.c b/src/gns/gnunet-service-gns_resolver.c
index 72b228f33..9d26e1777 100644
--- a/src/gns/gnunet-service-gns_resolver.c
+++ b/src/gns/gnunet-service-gns_resolver.c
@@ -623,6 +623,19 @@ resolver_lookup_get_next_label (struct GNS_ResolverHandle *rh)
623 rp = rh->name; 623 rp = rh->name;
624 rh->name_resolution_pos = 0; 624 rh->name_resolution_pos = 0;
625 } 625 }
626 else if (('_' == dot[1]) &&
627 ('_' == rh->name[0]) &&
628 (dot == memchr (rh->name, (int) '.', rh->name_resolution_pos)))
629 {
630 /**
631 * Do not advance a label. This seems to be a name only consisting
632 * of a BOX indicator (_443,_tcp).
633 * Which means, it is a BOX under the empty label.
634 * leaving name_resolution_pos as is and returning empty label.
635 */
636 rp = GNUNET_GNS_EMPTY_LABEL_AT;
637 len = strlen (GNUNET_GNS_EMPTY_LABEL_AT);
638 }
626 else 639 else
627 { 640 {
628 /* advance by one label */ 641 /* advance by one label */
@@ -683,7 +696,7 @@ resolver_lookup_get_next_label (struct GNS_ResolverHandle *rh)
683 } 696 }
684 else 697 else
685 { 698 {
686 rh->service = se->s_port; 699 rh->service = ntohs (se->s_port);
687 } 700 }
688 rh->protocol = pe->p_proto; 701 rh->protocol = pe->p_proto;
689 GNUNET_free (proto_name); 702 GNUNET_free (proto_name);
@@ -2237,6 +2250,10 @@ handle_gns_resolution_result (void *cls,
2237 const struct GNUNET_GNSRECORD_BoxRecord *box; 2250 const struct GNUNET_GNSRECORD_BoxRecord *box;
2238 2251
2239 box = rd[i].data; 2252 box = rd[i].data;
2253 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
2254 "Got BOX record, checking if parameters match... %u/%u vs %u/%u\n",
2255 ntohs (box->protocol), ntohs (box->service),
2256 rh->protocol, rh->service);
2240 if ((ntohs (box->protocol) == rh->protocol) && 2257 if ((ntohs (box->protocol) == rh->protocol) &&
2241 (ntohs (box->service) == rh->service)) 2258 (ntohs (box->service) == rh->service))
2242 { 2259 {
diff --git a/src/gns/plugin_block_gns.c b/src/gns/plugin_block_gns.c
index fd9c99cb4..ffca16b6f 100644
--- a/src/gns/plugin_block_gns.c
+++ b/src/gns/plugin_block_gns.c
@@ -181,7 +181,7 @@ block_plugin_gns_check_block (void *cls,
181 size_t block_size) 181 size_t block_size)
182{ 182{
183 const struct GNUNET_GNSRECORD_Block *gblock; 183 const struct GNUNET_GNSRECORD_Block *gblock;
184 184
185 if (GNUNET_BLOCK_TYPE_GNS_NAMERECORD != type) 185 if (GNUNET_BLOCK_TYPE_GNS_NAMERECORD != type)
186 { 186 {
187 GNUNET_break (0); 187 GNUNET_break (0);
@@ -243,7 +243,7 @@ block_plugin_gns_check_reply (void *cls,
243 return GNUNET_BLOCK_REPLY_TYPE_NOT_SUPPORTED; 243 return GNUNET_BLOCK_REPLY_TYPE_NOT_SUPPORTED;
244 } 244 }
245 GNUNET_assert (reply_block_size >= sizeof(struct GNUNET_GNSRECORD_Block)); 245 GNUNET_assert (reply_block_size >= sizeof(struct GNUNET_GNSRECORD_Block));
246 GNUNET_assert (GNUNET_GNSRECORD_block_get_size (block) > reply_block_size); 246 GNUNET_assert (reply_block_size >= GNUNET_GNSRECORD_block_get_size (block));
247 GNUNET_CRYPTO_hash (reply_block, 247 GNUNET_CRYPTO_hash (reply_block,
248 reply_block_size, 248 reply_block_size,
249 &chash); 249 &chash);
diff --git a/src/gnsrecord/gnsrecord_crypto.c b/src/gnsrecord/gnsrecord_crypto.c
index ff92911de..b5e8be82b 100644
--- a/src/gnsrecord/gnsrecord_crypto.c
+++ b/src/gnsrecord/gnsrecord_crypto.c
@@ -219,7 +219,6 @@ block_create_ecdsa (const struct GNUNET_CRYPTO_EcdsaPrivateKey *key,
219 rd); 219 rd);
220 struct GNUNET_GNSRECORD_EcdsaBlock *ecblock; 220 struct GNUNET_GNSRECORD_EcdsaBlock *ecblock;
221 struct GNRBlockPS *gnr_block; 221 struct GNRBlockPS *gnr_block;
222 struct GNUNET_CRYPTO_EcdsaPrivateKey *dkey;
223 unsigned char ctr[GNUNET_CRYPTO_AES_KEY_LENGTH / 2]; 222 unsigned char ctr[GNUNET_CRYPTO_AES_KEY_LENGTH / 2];
224 unsigned char skey[GNUNET_CRYPTO_AES_KEY_LENGTH]; 223 unsigned char skey[GNUNET_CRYPTO_AES_KEY_LENGTH];
225 struct GNUNET_GNSRECORD_Data rdc[GNUNET_NZL (rd_count)]; 224 struct GNUNET_GNSRECORD_Data rdc[GNUNET_NZL (rd_count)];
@@ -270,11 +269,10 @@ block_create_ecdsa (const struct GNUNET_CRYPTO_EcdsaPrivateKey *key,
270 gnr_block->expiration_time = GNUNET_TIME_absolute_hton (expire); 269 gnr_block->expiration_time = GNUNET_TIME_absolute_hton (expire);
271 ecblock->expiration_time = gnr_block->expiration_time; 270 ecblock->expiration_time = gnr_block->expiration_time;
272 /* encrypt and sign */ 271 /* encrypt and sign */
273 dkey = GNUNET_CRYPTO_ecdsa_private_key_derive (key, 272 GNUNET_CRYPTO_ecdsa_public_key_derive (pkey,
274 label, 273 label,
275 "gns"); 274 "gns",
276 GNUNET_CRYPTO_ecdsa_key_get_public (dkey, 275 &ecblock->derived_key);
277 &ecblock->derived_key);
278 GNR_derive_block_aes_key (ctr, 276 GNR_derive_block_aes_key (ctr,
279 skey, 277 skey,
280 label, 278 label,
@@ -289,18 +287,18 @@ block_create_ecdsa (const struct GNUNET_CRYPTO_EcdsaPrivateKey *key,
289 GNUNET_memcpy (&gnr_block[1], &ecblock[1], payload_len); 287 GNUNET_memcpy (&gnr_block[1], &ecblock[1], payload_len);
290 } 288 }
291 if (GNUNET_OK != 289 if (GNUNET_OK !=
292 GNUNET_CRYPTO_ecdsa_sign_ (dkey, 290 GNUNET_CRYPTO_ecdsa_sign_derived (key,
293 &gnr_block->purpose, 291 label,
294 &ecblock->signature)) 292 "gns",
293 &gnr_block->purpose,
294 &ecblock->signature))
295 { 295 {
296 GNUNET_break (0); 296 GNUNET_break (0);
297 GNUNET_free (*block); 297 GNUNET_free (*block);
298 GNUNET_free (dkey);
299 GNUNET_free (gnr_block); 298 GNUNET_free (gnr_block);
300 return GNUNET_SYSERR; 299 return GNUNET_SYSERR;
301 } 300 }
302 GNUNET_free (gnr_block); 301 GNUNET_free (gnr_block);
303 GNUNET_free (dkey);
304 return GNUNET_OK; 302 return GNUNET_OK;
305} 303}
306 304
@@ -344,7 +342,6 @@ block_create_eddsa (const struct GNUNET_CRYPTO_EddsaPrivateKey *key,
344 rd); 342 rd);
345 struct GNUNET_GNSRECORD_EddsaBlock *edblock; 343 struct GNUNET_GNSRECORD_EddsaBlock *edblock;
346 struct GNRBlockPS *gnr_block; 344 struct GNRBlockPS *gnr_block;
347 struct GNUNET_CRYPTO_EddsaPrivateScalar dkey;
348 unsigned char nonce[crypto_secretbox_NONCEBYTES]; 345 unsigned char nonce[crypto_secretbox_NONCEBYTES];
349 unsigned char skey[crypto_secretbox_KEYBYTES]; 346 unsigned char skey[crypto_secretbox_KEYBYTES];
350 struct GNUNET_GNSRECORD_Data rdc[GNUNET_NZL (rd_count)]; 347 struct GNUNET_GNSRECORD_Data rdc[GNUNET_NZL (rd_count)];
@@ -402,12 +399,10 @@ block_create_eddsa (const struct GNUNET_CRYPTO_EddsaPrivateKey *key,
402 gnr_block->expiration_time = GNUNET_TIME_absolute_hton (expire); 399 gnr_block->expiration_time = GNUNET_TIME_absolute_hton (expire);
403 edblock->expiration_time = gnr_block->expiration_time; 400 edblock->expiration_time = gnr_block->expiration_time;
404 /* encrypt and sign */ 401 /* encrypt and sign */
405 GNUNET_CRYPTO_eddsa_private_key_derive (key, 402 GNUNET_CRYPTO_eddsa_public_key_derive (pkey,
406 label, 403 label,
407 "gns", 404 "gns",
408 &dkey); 405 &edblock->derived_key);
409 GNUNET_CRYPTO_eddsa_key_get_public_from_scalar (&dkey,
410 &edblock->derived_key);
411 GNR_derive_block_xsalsa_key (nonce, 406 GNR_derive_block_xsalsa_key (nonce,
412 skey, 407 skey,
413 label, 408 label,
@@ -422,9 +417,11 @@ block_create_eddsa (const struct GNUNET_CRYPTO_EddsaPrivateKey *key,
422 GNUNET_memcpy (&gnr_block[1], &edblock[1], 417 GNUNET_memcpy (&gnr_block[1], &edblock[1],
423 payload_len + crypto_secretbox_MACBYTES); 418 payload_len + crypto_secretbox_MACBYTES);
424 419
425 GNUNET_CRYPTO_eddsa_sign_with_scalar (&dkey, 420 GNUNET_CRYPTO_eddsa_sign_derived (key,
426 &gnr_block->purpose, 421 label,
427 &edblock->signature); 422 "gns",
423 &gnr_block->purpose,
424 &edblock->signature);
428 } 425 }
429 return GNUNET_OK; 426 return GNUNET_OK;
430} 427}
diff --git a/src/gnsrecord/gnunet-gnsrecord-tvg.c b/src/gnsrecord/gnunet-gnsrecord-tvg.c
index 87de32066..7fef6f8e7 100644
--- a/src/gnsrecord/gnunet-gnsrecord-tvg.c
+++ b/src/gnsrecord/gnunet-gnsrecord-tvg.c
@@ -96,20 +96,22 @@ static void
96print_record (const struct GNUNET_GNSRECORD_Data *rd) 96print_record (const struct GNUNET_GNSRECORD_Data *rd)
97{ 97{
98 uint16_t flags = htons (rd->flags); 98 uint16_t flags = htons (rd->flags);
99 fprintf (stdout, 99 uint64_t abs_nbo = GNUNET_htonll (rd->expiration_time);
100 "EXPIRATION: %" PRIu64 "\n", rd->expiration_time); 100 uint16_t size_nbo = htons (rd->data_size);
101 fprintf (stdout, 101 uint32_t type_nbo = htonl (rd->record_type);
102 "DATA_SIZE: %zu\n", rd->data_size); 102 printf ("EXPIRATION:\n");
103 fprintf (stdout, 103 print_bytes (&abs_nbo, sizeof (abs_nbo), 8);
104 "TYPE: %d\n", rd->record_type); 104 printf ("\nDATA_SIZE:\n");
105 fprintf (stdout, 105 print_bytes (&size_nbo, sizeof (size_nbo), 8);
106 "FLAGS: "); 106 printf ("\nTYPE:\n");
107 print_bytes(&type_nbo, sizeof (type_nbo), 8);
108 printf ("\nFLAGS: ");
107 print_bytes ((void*) &flags, sizeof (flags), 8); 109 print_bytes ((void*) &flags, sizeof (flags), 8);
108 printf ("\n"); 110 printf ("\n");
109 fprintf (stdout, 111 fprintf (stdout,
110 "DATA:\n"); 112 "DATA:\n");
111 print_bytes ((char*) rd->data, rd->data_size, 8); 113 print_bytes ((char*) rd->data, rd->data_size, 8);
112 fprintf (stdout, "\n"); 114 printf ("\n");
113} 115}
114 116
115 117
@@ -133,6 +135,7 @@ run_pkey (struct GNUNET_GNSRECORD_Data *rd, int rd_count, const char *label)
133 struct GNUNET_IDENTITY_PublicKey pkey_data; 135 struct GNUNET_IDENTITY_PublicKey pkey_data;
134 struct GNUNET_HashCode query; 136 struct GNUNET_HashCode query;
135 char *rdata; 137 char *rdata;
138 char *conv_lbl;
136 size_t rdata_size; 139 size_t rdata_size;
137 char ztld[128]; 140 char ztld[128];
138 unsigned char ctr[GNUNET_CRYPTO_AES_KEY_LENGTH / 2]; 141 unsigned char ctr[GNUNET_CRYPTO_AES_KEY_LENGTH / 2];
@@ -146,34 +149,37 @@ run_pkey (struct GNUNET_GNSRECORD_Data *rd, int rd_count, const char *label)
146 149
147 GNUNET_IDENTITY_key_get_public (&id_priv, 150 GNUNET_IDENTITY_key_get_public (&id_priv,
148 &id_pub); 151 &id_pub);
149 fprintf (stdout, 152 printf ("Zone private key (d, big-endian):\n");
150 "Zone private key (d, big-endian):\n");
151 print_bytes_ (&id_priv.ecdsa_key, 153 print_bytes_ (&id_priv.ecdsa_key,
152 sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey), 8, 1); 154 sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey), 8, 1);
153 fprintf (stdout, "\n"); 155 printf ("\n");
154 fprintf (stdout, "Zone identifier (ztype|zkey):\n"); 156 printf ("Zone identifier (ztype|zkey):\n");
155 GNUNET_assert (0 < GNUNET_IDENTITY_key_get_length (&id_pub)); 157 GNUNET_assert (0 < GNUNET_IDENTITY_key_get_length (&id_pub));
156 print_bytes (&id_pub, GNUNET_IDENTITY_key_get_length (&id_pub), 8); 158 print_bytes (&id_pub, GNUNET_IDENTITY_key_get_length (&id_pub), 8);
157 GNUNET_STRINGS_data_to_string (&id_pub, 159 GNUNET_STRINGS_data_to_string (&id_pub,
158 GNUNET_IDENTITY_key_get_length (&id_pub), 160 GNUNET_IDENTITY_key_get_length (&id_pub),
159 ztld, 161 ztld,
160 sizeof (ztld)); 162 sizeof (ztld));
161 fprintf (stdout, "\n"); 163 printf ("\n");
162 fprintf (stdout, "zTLD:\n"); 164 printf ("zTLD:\n");
163 fprintf (stdout, "%s\n", ztld); 165 printf ("%s\n", ztld);
164 fprintf (stdout, "\n"); 166 printf ("\n");
165 167
166 pkey_data_p.type = htonl (GNUNET_GNSRECORD_TYPE_PKEY); 168 pkey_data_p.type = htonl (GNUNET_GNSRECORD_TYPE_PKEY);
167 GNUNET_CRYPTO_ecdsa_key_create (&pkey_data_p.ecdsa_key); 169 GNUNET_CRYPTO_ecdsa_key_create (&pkey_data_p.ecdsa_key);
168 GNUNET_IDENTITY_key_get_public (&pkey_data_p, 170 GNUNET_IDENTITY_key_get_public (&pkey_data_p,
169 &pkey_data); 171 &pkey_data);
170 fprintf (stdout, 172 conv_lbl = GNUNET_GNSRECORD_string_normalize (label);
171 "Label: %s\nRRCOUNT: %d\n\n", label, rd_count); 173 printf ("Label:\n");
174 print_bytes (conv_lbl, strlen (conv_lbl), 8);
175 GNUNET_free (conv_lbl);
176 printf ("\nNumber of records (integer): %d\n\n", rd_count);
172 177
173 for (int i = 0; i < rd_count; i++) 178 for (int i = 0; i < rd_count; i++)
174 { 179 {
175 fprintf (stdout, "Record #%d\n", i); 180 printf ("Record #%d := (\n", i);
176 print_record (&rd[i]); 181 print_record (&rd[i]);
182 printf (")\n\n");
177 } 183 }
178 184
179 rdata_size = GNUNET_GNSRECORD_records_get_size (rd_count, 185 rdata_size = GNUNET_GNSRECORD_records_get_size (rd_count,
@@ -183,11 +189,11 @@ run_pkey (struct GNUNET_GNSRECORD_Data *rd, int rd_count, const char *label)
183 rd, 189 rd,
184 (size_t) rdata_size, 190 (size_t) rdata_size,
185 rdata); 191 rdata);
186 fprintf (stdout, "RDATA:\n"); 192 printf ("RDATA:\n");
187 print_bytes (rdata, 193 print_bytes (rdata,
188 (size_t) rdata_size, 194 (size_t) rdata_size,
189 8); 195 8);
190 fprintf (stdout, "\n"); 196 printf ("\n");
191 expire = GNUNET_GNSRECORD_record_get_expiration_time (rd_count, rd, 197 expire = GNUNET_GNSRECORD_record_get_expiration_time (rd_count, rd,
192 GNUNET_TIME_UNIT_ZERO_ABS); 198 GNUNET_TIME_UNIT_ZERO_ABS);
193 GNR_derive_block_aes_key (ctr, 199 GNR_derive_block_aes_key (ctr,
@@ -197,18 +203,18 @@ run_pkey (struct GNUNET_GNSRECORD_Data *rd, int rd_count, const char *label)
197 expire).abs_value_us__, 203 expire).abs_value_us__,
198 &id_pub.ecdsa_key); 204 &id_pub.ecdsa_key);
199 205
200 fprintf (stdout, "Encryption NONCE|EXPIRATION|BLOCK COUNTER:\n"); 206 printf ("Encryption NONCE|EXPIRATION|BLOCK COUNTER:\n");
201 print_bytes (ctr, sizeof (ctr), 8); 207 print_bytes (ctr, sizeof (ctr), 8);
202 fprintf (stdout, "\n"); 208 printf ("\n");
203 fprintf (stdout, "Encryption key (K):\n"); 209 printf ("Encryption key (K):\n");
204 print_bytes (skey, sizeof (skey), 8); 210 print_bytes (skey, sizeof (skey), 8);
205 fprintf (stdout, "\n"); 211 printf ("\n");
206 GNUNET_GNSRECORD_query_from_public_key (&id_pub, 212 GNUNET_GNSRECORD_query_from_public_key (&id_pub,
207 label, 213 label,
208 &query); 214 &query);
209 fprintf (stdout, "Storage key (q):\n"); 215 printf ("Storage key (q):\n");
210 print_bytes (&query, sizeof (query), 8); 216 print_bytes (&query, sizeof (query), 8);
211 fprintf (stdout, "\n"); 217 printf ("\n");
212 GNUNET_assert (GNUNET_OK == GNUNET_GNSRECORD_block_create (&id_priv, 218 GNUNET_assert (GNUNET_OK == GNUNET_GNSRECORD_block_create (&id_priv,
213 expire, 219 expire,
214 label, 220 label,
@@ -219,12 +225,12 @@ run_pkey (struct GNUNET_GNSRECORD_Data *rd, int rd_count, const char *label)
219 GNUNET_GNSRECORD_Block); 225 GNUNET_GNSRECORD_Block);
220 226
221 bdata = (char*) &(&rrblock->ecdsa_block)[1]; 227 bdata = (char*) &(&rrblock->ecdsa_block)[1];
222 fprintf (stdout, "BDATA:\n"); 228 printf ("BDATA:\n");
223 print_bytes (bdata, bdata_size, 8); 229 print_bytes (bdata, bdata_size, 8);
224 fprintf (stdout, "\n"); 230 printf ("\n");
225 fprintf (stdout, "RRBLOCK:\n"); 231 printf ("RRBLOCK:\n");
226 print_bytes (rrblock, ntohl (rrblock->size), 8); 232 print_bytes (rrblock, ntohl (rrblock->size), 8);
227 fprintf (stdout, "\n"); 233 printf ("\n");
228 GNUNET_free (rdata); 234 GNUNET_free (rdata);
229} 235}
230 236
@@ -249,6 +255,7 @@ run_edkey (struct GNUNET_GNSRECORD_Data *rd, int rd_count, const char*label)
249 struct GNUNET_IDENTITY_PublicKey pkey_data; 255 struct GNUNET_IDENTITY_PublicKey pkey_data;
250 struct GNUNET_HashCode query; 256 struct GNUNET_HashCode query;
251 char *rdata; 257 char *rdata;
258 char *conv_lbl;
252 size_t rdata_size; 259 size_t rdata_size;
253 260
254 char ztld[128]; 261 char ztld[128];
@@ -271,30 +278,35 @@ run_edkey (struct GNUNET_GNSRECORD_Data *rd, int rd_count, const char*label)
271 "Zone private key (d):\n"); 278 "Zone private key (d):\n");
272 print_bytes (&id_priv.eddsa_key, sizeof (struct 279 print_bytes (&id_priv.eddsa_key, sizeof (struct
273 GNUNET_CRYPTO_EddsaPrivateKey), 8); 280 GNUNET_CRYPTO_EddsaPrivateKey), 8);
274 fprintf (stdout, "\n"); 281 printf ("\n");
275 fprintf (stdout, "Zone identifier (ztype|zkey):\n"); 282 printf ("Zone identifier (ztype|zkey):\n");
276 GNUNET_assert (0 < GNUNET_IDENTITY_key_get_length (&id_pub)); 283 GNUNET_assert (0 < GNUNET_IDENTITY_key_get_length (&id_pub));
277 print_bytes (&id_pub, GNUNET_IDENTITY_key_get_length (&id_pub), 8); 284 print_bytes (&id_pub, GNUNET_IDENTITY_key_get_length (&id_pub), 8);
278 GNUNET_STRINGS_data_to_string (&id_pub, 285 GNUNET_STRINGS_data_to_string (&id_pub,
279 GNUNET_IDENTITY_key_get_length (&id_pub), 286 GNUNET_IDENTITY_key_get_length (&id_pub),
280 ztld, 287 ztld,
281 sizeof (ztld)); 288 sizeof (ztld));
282 fprintf (stdout, "\n"); 289 printf ("\n");
283 fprintf (stdout, "zTLD:\n"); 290 printf ("zTLD:\n");
284 fprintf (stdout, "%s\n", ztld); 291 printf ("%s\n", ztld);
285 fprintf (stdout, "\n"); 292 printf ("\n");
286 293
287 pkey_data_p.type = htonl (GNUNET_GNSRECORD_TYPE_EDKEY); 294 pkey_data_p.type = htonl (GNUNET_GNSRECORD_TYPE_EDKEY);
288 GNUNET_CRYPTO_eddsa_key_create (&pkey_data_p.eddsa_key); 295 GNUNET_CRYPTO_eddsa_key_create (&pkey_data_p.eddsa_key);
289 GNUNET_IDENTITY_key_get_public (&pkey_data_p, 296 GNUNET_IDENTITY_key_get_public (&pkey_data_p,
290 &pkey_data); 297 &pkey_data);
298 conv_lbl = GNUNET_GNSRECORD_string_normalize (label);
299 printf ("Label:\n");
300 print_bytes (conv_lbl, strlen (conv_lbl), 8);
301 GNUNET_free (conv_lbl);
291 fprintf (stdout, 302 fprintf (stdout,
292 "Label: %s\nRRCOUNT: %d\n\n", label, rd_count); 303 "\nNumber of records (integer): %d\n\n", rd_count);
293 304
294 for (int i = 0; i < rd_count; i++) 305 for (int i = 0; i < rd_count; i++)
295 { 306 {
296 fprintf (stdout, "Record #%d\n", i); 307 printf ("Record #%d := (\n", i);
297 print_record (&rd[i]); 308 print_record (&rd[i]);
309 printf (")\n\n");
298 } 310 }
299 311
300 rdata_size = GNUNET_GNSRECORD_records_get_size (rd_count, 312 rdata_size = GNUNET_GNSRECORD_records_get_size (rd_count,
@@ -308,29 +320,29 @@ run_edkey (struct GNUNET_GNSRECORD_Data *rd, int rd_count, const char*label)
308 rd, 320 rd,
309 (size_t) rdata_size, 321 (size_t) rdata_size,
310 rdata); 322 rdata);
311 fprintf (stdout, "RDATA:\n"); 323 printf ("RDATA:\n");
312 print_bytes (rdata, 324 print_bytes (rdata,
313 (size_t) rdata_size, 325 (size_t) rdata_size,
314 8); 326 8);
315 fprintf (stdout, "\n"); 327 printf ("\n");
316 GNR_derive_block_xsalsa_key (nonce, 328 GNR_derive_block_xsalsa_key (nonce,
317 skey, 329 skey,
318 label, 330 label,
319 GNUNET_TIME_absolute_hton ( 331 GNUNET_TIME_absolute_hton (
320 expire).abs_value_us__, 332 expire).abs_value_us__,
321 &id_pub.eddsa_key); 333 &id_pub.eddsa_key);
322 fprintf (stdout, "Encryption NONCE|EXPIRATION:\n"); 334 printf ("Encryption NONCE|EXPIRATION:\n");
323 print_bytes (nonce, sizeof (nonce), 8); 335 print_bytes (nonce, sizeof (nonce), 8);
324 fprintf (stdout, "\n"); 336 printf ("\n");
325 fprintf (stdout, "Encryption key (K):\n"); 337 printf ("Encryption key (K):\n");
326 print_bytes (skey, sizeof (skey), 8); 338 print_bytes (skey, sizeof (skey), 8);
327 fprintf (stdout, "\n"); 339 printf ("\n");
328 GNUNET_GNSRECORD_query_from_public_key (&id_pub, 340 GNUNET_GNSRECORD_query_from_public_key (&id_pub,
329 label, 341 label,
330 &query); 342 &query);
331 fprintf (stdout, "Storage key (q):\n"); 343 printf ("Storage key (q):\n");
332 print_bytes (&query, sizeof (query), 8); 344 print_bytes (&query, sizeof (query), 8);
333 fprintf (stdout, "\n"); 345 printf ("\n");
334 346
335 GNUNET_assert (GNUNET_OK == GNUNET_GNSRECORD_block_create (&id_priv, 347 GNUNET_assert (GNUNET_OK == GNUNET_GNSRECORD_block_create (&id_priv,
336 expire, 348 expire,
@@ -342,12 +354,12 @@ run_edkey (struct GNUNET_GNSRECORD_Data *rd, int rd_count, const char*label)
342 GNUNET_GNSRECORD_Block); 354 GNUNET_GNSRECORD_Block);
343 355
344 bdata = (char*) &(&rrblock->eddsa_block)[1]; 356 bdata = (char*) &(&rrblock->eddsa_block)[1];
345 fprintf (stdout, "BDATA:\n"); 357 printf ("BDATA:\n");
346 print_bytes (bdata, bdata_size, 8); 358 print_bytes (bdata, bdata_size, 8);
347 fprintf (stdout, "\n"); 359 printf ("\n");
348 fprintf (stdout, "RRBLOCK:\n"); 360 printf ("RRBLOCK:\n");
349 print_bytes (rrblock, ntohl (rrblock->size), 8); 361 print_bytes (rrblock, ntohl (rrblock->size), 8);
350 fprintf (stdout, "\n"); 362 printf ("\n");
351 GNUNET_free (rdata); 363 GNUNET_free (rdata);
352} 364}
353 365
@@ -424,9 +436,9 @@ run (void *cls,
424 | GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION; 436 | GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION;
425 437
426 run_pkey (&rd_pkey, 1, "testdelegation"); 438 run_pkey (&rd_pkey, 1, "testdelegation");
427 run_pkey (rd, 3, "namesystem"); 439 run_pkey (rd, 3, "\u5929\u4e0b\u7121\u6575");
428 run_edkey (&rd_pkey, 1, "testdelegation"); 440 run_edkey (&rd_pkey, 1, "testdelegation");
429 run_edkey (rd, 3, "namesystem"); 441 run_edkey (rd, 3, "\u5929\u4e0b\u7121\u6575");
430} 442}
431 443
432 444
diff --git a/src/include/gnunet_crypto_lib.h b/src/include/gnunet_crypto_lib.h
index 72d783148..582a58861 100644
--- a/src/include/gnunet_crypto_lib.h
+++ b/src/include/gnunet_crypto_lib.h
@@ -287,6 +287,59 @@ struct GNUNET_CRYPTO_EddsaPrivateScalar
287 unsigned char s[512 / 8]; 287 unsigned char s[512 / 8];
288}; 288};
289 289
290/**
291 * Private ECC key material encoded for transmission. To be used only for
292 * Edx25519 signatures. An inital key corresponds to data from the key
293 * expansion and clamping in the EdDSA key generation.
294 */
295struct GNUNET_CRYPTO_Edx25519PrivateKey
296{
297 /**
298 * a is a value mod n, where n has at most 256 bits. It is the first half of
299 * the seed-expansion of EdDSA and will be clamped.
300 */
301 unsigned char a[256 / 8];
302
303 /**
304 * b consists of 32 bytes which where originally the lower 32bytes of the key
305 * expansion. Subsequent calls to derive_private will change this value, too.
306 */
307 unsigned char b[256 / 8];
308};
309
310
311/**
312 * Public ECC key (always for curve Ed25519) encoded in a format suitable for
313 * network transmission and Edx25519 (same as EdDSA) signatures. Refer to
314 * section 5.1.3 of rfc8032, for a thorough explanation of how this value maps
315 * to the x- and y-coordinates.
316 */
317struct GNUNET_CRYPTO_Edx25519PublicKey
318{
319 /**
320 * Point Q consists of a y-value mod p (256 bits); the x-value is
321 * always positive. The point is stored in Ed25519 standard
322 * compact format.
323 */
324 unsigned char q_y[256 / 8];
325};
326
327/**
328 * @brief an ECC signature using Edx25519 (same as in EdDSA).
329 */
330struct GNUNET_CRYPTO_Edx25519Signature
331{
332 /**
333 * R value.
334 */
335 unsigned char r[256 / 8];
336
337 /**
338 * S value.
339 */
340 unsigned char s[256 / 8];
341};
342
290 343
291/** 344/**
292 * @brief type for session keys 345 * @brief type for session keys
@@ -1279,6 +1332,17 @@ GNUNET_CRYPTO_eddsa_key_get_public (
1279 const struct GNUNET_CRYPTO_EddsaPrivateKey *priv, 1332 const struct GNUNET_CRYPTO_EddsaPrivateKey *priv,
1280 struct GNUNET_CRYPTO_EddsaPublicKey *pub); 1333 struct GNUNET_CRYPTO_EddsaPublicKey *pub);
1281 1334
1335/**
1336 * @ingroup crypto
1337 * Extract the public key for the given private key.
1338 *
1339 * @param priv the private key
1340 * @param pub where to write the public key
1341 */
1342void
1343GNUNET_CRYPTO_edx25519_key_get_public (
1344 const struct GNUNET_CRYPTO_Edx25519PrivateKey *priv,
1345 struct GNUNET_CRYPTO_Edx25519PublicKey *pub);
1282 1346
1283/** 1347/**
1284 * @ingroup crypto 1348 * @ingroup crypto
@@ -1465,6 +1529,30 @@ GNUNET_CRYPTO_eddsa_key_create (struct GNUNET_CRYPTO_EddsaPrivateKey *pk);
1465 1529
1466/** 1530/**
1467 * @ingroup crypto 1531 * @ingroup crypto
1532 * Create a new private key.
1533 *
1534 * @param[out] pk private key to initialize
1535 */
1536void
1537GNUNET_CRYPTO_edx25519_key_create (struct GNUNET_CRYPTO_Edx25519PrivateKey *pk);
1538
1539/**
1540 * @ingroup crypto
1541 * Create a new private key for Edx25519 from a given seed. After expanding
1542 * the seed, the first half of the key will be clamped according to EdDSA.
1543 *
1544 * @param seed seed input
1545 * @param seedsize size of the seed in bytes
1546 * @param[out] pk private key to initialize
1547 */
1548void
1549GNUNET_CRYPTO_edx25519_key_create_from_seed (
1550 const void *seed,
1551 size_t seedsize,
1552 struct GNUNET_CRYPTO_Edx25519PrivateKey *pk);
1553
1554/**
1555 * @ingroup crypto
1468 * Create a new private key. Clear with #GNUNET_CRYPTO_ecdhe_key_clear(). 1556 * Create a new private key. Clear with #GNUNET_CRYPTO_ecdhe_key_clear().
1469 * 1557 *
1470 * @param[out] pk set to fresh private key; 1558 * @param[out] pk set to fresh private key;
@@ -1492,6 +1580,14 @@ GNUNET_CRYPTO_eddsa_key_clear (struct GNUNET_CRYPTO_EddsaPrivateKey *pk);
1492void 1580void
1493GNUNET_CRYPTO_ecdsa_key_clear (struct GNUNET_CRYPTO_EcdsaPrivateKey *pk); 1581GNUNET_CRYPTO_ecdsa_key_clear (struct GNUNET_CRYPTO_EcdsaPrivateKey *pk);
1494 1582
1583/**
1584 * @ingroup crypto
1585 * Clear memory that was used to store a private key.
1586 *
1587 * @param pk location of the key
1588 */
1589void
1590GNUNET_CRYPTO_edx25519_key_clear (struct GNUNET_CRYPTO_Edx25519PrivateKey *pk);
1495 1591
1496/** 1592/**
1497 * @ingroup crypto 1593 * @ingroup crypto
@@ -1874,6 +1970,53 @@ GNUNET_CRYPTO_ecdsa_sign_ (
1874 sig)); \ 1970 sig)); \
1875} while (0) 1971} while (0)
1876 1972
1973/**
1974 * @ingroup crypto
1975 * @brief Edx25519 sign a given block.
1976 *
1977 * The @a purpose data is the beginning of the data of which the signature is
1978 * to be created. The `size` field in @a purpose must correctly indicate the
1979 * number of bytes of the data structure, including its header. If possible,
1980 * use #GNUNET_CRYPTO_edx25519_sign() instead of this function (only if @a
1981 * validate is not fixed-size, you must use this function directly).
1982 *
1983 * @param priv private key to use for the signing
1984 * @param purpose what to sign (size, purpose)
1985 * @param[out] sig where to write the signature
1986 * @return #GNUNET_SYSERR on error, #GNUNET_OK on success
1987 */
1988enum GNUNET_GenericReturnValue
1989GNUNET_CRYPTO_edx25519_sign_ (
1990 const struct GNUNET_CRYPTO_Edx25519PrivateKey *priv,
1991 const struct GNUNET_CRYPTO_EccSignaturePurpose *purpose,
1992 struct GNUNET_CRYPTO_Edx25519Signature *sig);
1993
1994
1995/**
1996 * @ingroup crypto
1997 * @brief Edx25519 sign a given block. The resulting signature is compatible
1998 * with EdDSA.
1999 *
2000 * The @a ps data must be a fixed-size struct for which the signature is to be
2001 * created. The `size` field in @a ps->purpose must correctly indicate the
2002 * number of bytes of the data structure, including its header.
2003 *
2004 * @param priv private key to use for the signing
2005 * @param ps packed struct with what to sign, MUST begin with a purpose
2006 * @param[out] sig where to write the signature
2007 */
2008#define GNUNET_CRYPTO_edx25519_sign(priv,ps,sig) do { \
2009 /* check size is set correctly */ \
2010 GNUNET_assert (ntohl ((ps)->purpose.size) == sizeof (*(ps))); \
2011 /* check 'ps' begins with the purpose */ \
2012 GNUNET_static_assert (((void*) (ps)) == \
2013 ((void*) &(ps)->purpose)); \
2014 GNUNET_assert (GNUNET_OK == \
2015 GNUNET_CRYPTO_edx25519_sign_ (priv, \
2016 &(ps)->purpose, \
2017 sig)); \
2018} while (0)
2019
1877 2020
1878/** 2021/**
1879 * @ingroup crypto 2022 * @ingroup crypto
@@ -1917,7 +2060,7 @@ GNUNET_CRYPTO_eddsa_verify_ (
1917 */ 2060 */
1918#define GNUNET_CRYPTO_eddsa_verify(purp,ps,sig,pub) ({ \ 2061#define GNUNET_CRYPTO_eddsa_verify(purp,ps,sig,pub) ({ \
1919 /* check size is set correctly */ \ 2062 /* check size is set correctly */ \
1920 GNUNET_assert (ntohl ((ps)->purpose.size) == sizeof (*(ps))); \ 2063 GNUNET_assert (ntohl ((ps)->purpose.size) == sizeof (*(ps))); \
1921 /* check 'ps' begins with the purpose */ \ 2064 /* check 'ps' begins with the purpose */ \
1922 GNUNET_static_assert (((void*) (ps)) == \ 2065 GNUNET_static_assert (((void*) (ps)) == \
1923 ((void*) &(ps)->purpose)); \ 2066 ((void*) &(ps)->purpose)); \
@@ -1927,7 +2070,6 @@ GNUNET_CRYPTO_eddsa_verify_ (
1927 pub); \ 2070 pub); \
1928 }) 2071 })
1929 2072
1930
1931/** 2073/**
1932 * @ingroup crypto 2074 * @ingroup crypto
1933 * @brief Verify ECDSA signature. 2075 * @brief Verify ECDSA signature.
@@ -1982,6 +2124,58 @@ GNUNET_CRYPTO_ecdsa_verify_ (
1982 2124
1983/** 2125/**
1984 * @ingroup crypto 2126 * @ingroup crypto
2127 * @brief Verify Edx25519 signature.
2128 *
2129 * The @a validate data is the beginning of the data of which the signature
2130 * is to be verified. The `size` field in @a validate must correctly indicate
2131 * the number of bytes of the data structure, including its header. If @a
2132 * purpose does not match the purpose given in @a validate (the latter must be
2133 * in big endian), signature verification fails. If possible, use
2134 * #GNUNET_CRYPTO_edx25519_verify() instead of this function (only if @a
2135 * validate is not fixed-size, you must use this function directly).
2136 *
2137 * @param purpose what is the purpose that the signature should have?
2138 * @param validate block to validate (size, purpose, data)
2139 * @param sig signature that is being validated
2140 * @param pub public key of the signer
2141 * @returns #GNUNET_OK if ok, #GNUNET_SYSERR if invalid
2142 */
2143enum GNUNET_GenericReturnValue
2144GNUNET_CRYPTO_edx25519_verify_ (
2145 uint32_t purpose,
2146 const struct GNUNET_CRYPTO_EccSignaturePurpose *validate,
2147 const struct GNUNET_CRYPTO_Edx25519Signature *sig,
2148 const struct GNUNET_CRYPTO_Edx25519PublicKey *pub);
2149
2150
2151/**
2152 * @ingroup crypto
2153 * @brief Verify Edx25519 signature.
2154 *
2155 * The @a ps data must be a fixed-size struct for which the signature is to be
2156 * created. The `size` field in @a ps->purpose must correctly indicate the
2157 * number of bytes of the data structure, including its header.
2158 *
2159 * @param purp purpose of the signature, must match 'ps->purpose.purpose'
2160 * (except in host byte order)
2161 * @param priv private key to use for the signing
2162 * @param ps packed struct with what to sign, MUST begin with a purpose
2163 * @param sig where to write the signature
2164 */
2165#define GNUNET_CRYPTO_edx25519_verify(purp,ps,sig,pub) ({ \
2166 /* check size is set correctly */ \
2167 GNUNET_assert (ntohl ((ps)->purpose.size) == sizeof (*(ps))); \
2168 /* check 'ps' begins with the purpose */ \
2169 GNUNET_static_assert (((void*) (ps)) == \
2170 ((void*) &(ps)->purpose)); \
2171 GNUNET_CRYPTO_edx25519_verify_ (purp, \
2172 &(ps)->purpose, \
2173 sig, \
2174 pub); \
2175 })
2176
2177/**
2178 * @ingroup crypto
1985 * Derive a private key from a given private key and a label. 2179 * Derive a private key from a given private key and a label.
1986 * Essentially calculates a private key 'h = H(l,P) * d mod n' 2180 * Essentially calculates a private key 'h = H(l,P) * d mod n'
1987 * where n is the size of the ECC group and P is the public 2181 * where n is the size of the ECC group and P is the public
@@ -2018,6 +2212,26 @@ GNUNET_CRYPTO_ecdsa_public_key_derive (
2018 const char *context, 2212 const char *context,
2019 struct GNUNET_CRYPTO_EcdsaPublicKey *result); 2213 struct GNUNET_CRYPTO_EcdsaPublicKey *result);
2020 2214
2215/**
2216 * This is a signature function for ECDSA which takes a
2217 * private key, derives/blinds it and signs the message.
2218 *
2219 * @param pkey original private key
2220 * @param label label to use for key deriviation
2221 * @param context additional context to use for HKDF of 'h';
2222 * typically the name of the subsystem/application
2223 * @param purp the signature purpose
2224 * @param sig the resulting signature
2225 * @return GNUNET_OK on success
2226 */
2227enum GNUNET_GenericReturnValue
2228GNUNET_CRYPTO_ecdsa_sign_derived (
2229 const struct GNUNET_CRYPTO_EcdsaPrivateKey *pkey,
2230 const char *label,
2231 const char *context,
2232 const struct GNUNET_CRYPTO_EccSignaturePurpose *purpose,
2233 struct GNUNET_CRYPTO_EcdsaSignature *sig);
2234
2021 2235
2022/** 2236/**
2023 * @ingroup crypto 2237 * @ingroup crypto
@@ -2063,23 +2277,23 @@ GNUNET_CRYPTO_eddsa_public_key_derive (
2063 2277
2064 2278
2065/** 2279/**
2066 * This is a signature function for EdDSA which takes the 2280 * This is a signature function for EdDSA which takes a
2067 * secret scalar sk instead of the private seed which is 2281 * private key and derives it using the label and context
2068 * usually the case for crypto APIs. We require this functionality 2282 * before signing.
2069 * in order to use derived private keys for signatures we
2070 * cannot calculate the inverse of a sk to find the seed
2071 * efficiently.
2072 * 2283 *
2073 * The resulting signature is a standard EdDSA signature 2284 * @param pkey original private key
2074 * which can be verified using the usual APIs. 2285 * @param label label to use for key deriviation
2075 * 2286 * @param context additional context to use for HKDF of 'h';
2076 * @param sk the secret scalar 2287 * typically the name of the subsystem/application
2077 * @param purp the signature purpose 2288 * @param purp the signature purpose
2078 * @param sig the resulting signature 2289 * @param sig the resulting signature
2290 * @return GNUNET_OK on success
2079 */ 2291 */
2080void 2292enum GNUNET_GenericReturnValue
2081GNUNET_CRYPTO_eddsa_sign_with_scalar ( 2293GNUNET_CRYPTO_eddsa_sign_derived (
2082 const struct GNUNET_CRYPTO_EddsaPrivateScalar *priv, 2294 const struct GNUNET_CRYPTO_EddsaPrivateKey *pkey,
2295 const char *label,
2296 const char *context,
2083 const struct GNUNET_CRYPTO_EccSignaturePurpose *purpose, 2297 const struct GNUNET_CRYPTO_EccSignaturePurpose *purpose,
2084 struct GNUNET_CRYPTO_EddsaSignature *sig); 2298 struct GNUNET_CRYPTO_EddsaSignature *sig);
2085 2299
@@ -2095,6 +2309,43 @@ GNUNET_CRYPTO_eddsa_key_get_public_from_scalar (
2095 const struct GNUNET_CRYPTO_EddsaPrivateScalar *s, 2309 const struct GNUNET_CRYPTO_EddsaPrivateScalar *s,
2096 struct GNUNET_CRYPTO_EddsaPublicKey *pkey); 2310 struct GNUNET_CRYPTO_EddsaPublicKey *pkey);
2097 2311
2312/**
2313 * @ingroup crypto
2314 * Derive a private scalar from a given private key and a label.
2315 * Essentially calculates a private key 'h = H(l,P) * d mod n'
2316 * where n is the size of the ECC group and P is the public
2317 * key associated with the private key 'd'.
2318 *
2319 * @param priv original private key
2320 * @param seed input seed
2321 * @param seedsize size of the seed
2322 * @param result derived private key
2323 */
2324void
2325GNUNET_CRYPTO_edx25519_private_key_derive (
2326 const struct GNUNET_CRYPTO_Edx25519PrivateKey *priv,
2327 const void *seed,
2328 size_t seedsize,
2329 struct GNUNET_CRYPTO_Edx25519PrivateKey *result);
2330
2331
2332/**
2333 * @ingroup crypto
2334 * Derive a public key from a given public key and a label.
2335 * Essentially calculates a public key 'V = H(l,P) * P'.
2336 *
2337 * @param pub original public key
2338 * @param seed input seed
2339 * @param seedsize size of the seed
2340 * @param result where to write the derived public key
2341 */
2342void
2343GNUNET_CRYPTO_edx25519_public_key_derive (
2344 const struct GNUNET_CRYPTO_Edx25519PublicKey *pub,
2345 const void *seed,
2346 size_t seedsize,
2347 struct GNUNET_CRYPTO_Edx25519PublicKey *result);
2348
2098 2349
2099/** 2350/**
2100 * Output the given MPI value to the given buffer in network 2351 * Output the given MPI value to the given buffer in network
diff --git a/src/include/gnunet_messenger_service.h b/src/include/gnunet_messenger_service.h
index 96d48b411..f8bbc7398 100644
--- a/src/include/gnunet_messenger_service.h
+++ b/src/include/gnunet_messenger_service.h
@@ -1,6 +1,6 @@
1/* 1/*
2 This file is part of GNUnet. 2 This file is part of GNUnet.
3 Copyright (C) 2020--2021 GNUnet e.V. 3 Copyright (C) 2020--2022 GNUnet e.V.
4 4
5 GNUnet is free software: you can redistribute it and/or modify it 5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published 6 under the terms of the GNU Affero General Public License as published
@@ -96,6 +96,27 @@ struct GNUNET_MESSENGER_RoomEntryRecord
96 96
97GNUNET_NETWORK_STRUCT_END 97GNUNET_NETWORK_STRUCT_END
98 98
99GNUNET_NETWORK_STRUCT_BEGIN
100
101/**
102 * A room details record specifies a custom name for a given room and
103 * some additional space for flags.
104 */
105struct GNUNET_MESSENGER_RoomDetailsRecord
106{
107 /**
108 * The custom name for the room.
109 */
110 char name [256];
111
112 /**
113 * The flags of the room.
114 */
115 uint32_t flags;
116};
117
118GNUNET_NETWORK_STRUCT_END
119
99/** 120/**
100 * Enum for the different supported kinds of messages 121 * Enum for the different supported kinds of messages
101 */ 122 */
diff --git a/src/include/gnunet_namestore_plugin.h b/src/include/gnunet_namestore_plugin.h
index 9cc8abc6e..3dca5a853 100644
--- a/src/include/gnunet_namestore_plugin.h
+++ b/src/include/gnunet_namestore_plugin.h
@@ -150,6 +150,71 @@ struct GNUNET_NAMESTORE_PluginFunctions
150 const struct GNUNET_IDENTITY_PublicKey *value_zone, 150 const struct GNUNET_IDENTITY_PublicKey *value_zone,
151 GNUNET_NAMESTORE_RecordIterator iter, 151 GNUNET_NAMESTORE_RecordIterator iter,
152 void *iter_cls); 152 void *iter_cls);
153
154 /** Transaction-based API draft **/
155
156 /**
157 * Start a transaction in the database
158 *
159 * @param cls closure (internal context for the plugin)
160 * @return #GNUNET_OK on success, #GNUNET_NO if there were no results, #GNUNET_SYSERR on error
161 */
162 enum GNUNET_GenericReturnValue
163 (*transaction_begin) (void *cls);
164
165 /**
166 * Abort a transaction in the database
167 *
168 * @param cls closure (internal context for the plugin)
169 * @return #GNUNET_OK on success, #GNUNET_NO if there were no results, #GNUNET_SYSERR on error
170 */
171 enum GNUNET_GenericReturnValue
172 (*transaction_abort) (void *cls);
173
174 /**
175 * Commit a transaction in the database
176 *
177 * @param cls closure (internal context for the plugin)
178 * @return #GNUNET_OK on success, #GNUNET_NO if there were no results, #GNUNET_SYSERR on error
179 */
180 enum GNUNET_GenericReturnValue
181 (*transaction_commit) (void *cls);
182
183 /**
184 * Replace a record in the datastore for which we are the authority.
185 * Removes any existing record in the same zone with the same name.
186 *
187 * @param cls closure (internal context for the plugin)
188 * @param zone private key of the zone
189 * @param label name of the record in the zone
190 * @param rd_count number of entries in @a rd array, 0 to delete all records
191 * @param rd array of records with data to store
192 * @return #GNUNET_OK on success, else #GNUNET_SYSERR
193 */
194 int
195 (*replace_records) (void *cls,
196 const struct GNUNET_IDENTITY_PrivateKey *zone,
197 const char *label,
198 unsigned int rd_count,
199 const struct GNUNET_GNSRECORD_Data *rd);
200
201 /**
202 * Lookup records in the datastore for which we are the authority.
203 *
204 * @param cls closure (internal context for the plugin)
205 * @param zone private key of the zone
206 * @param label name of the record in the zone
207 * @param iter function to call with the result
208 * @param iter_cls closure for @a iter
209 * @return #GNUNET_OK on success, #GNUNET_NO for no results, else #GNUNET_SYSERR
210 */
211 int
212 (*select_records) (void *cls,
213 const struct GNUNET_IDENTITY_PrivateKey *zone,
214 const char *label,
215 GNUNET_NAMESTORE_RecordIterator iter,
216 void *iter_cls);
217
153}; 218};
154 219
155 220
diff --git a/src/include/gnunet_namestore_service.h b/src/include/gnunet_namestore_service.h
index 619b81aed..86572803f 100644
--- a/src/include/gnunet_namestore_service.h
+++ b/src/include/gnunet_namestore_service.h
@@ -212,61 +212,6 @@ GNUNET_NAMESTORE_records_lookup (struct GNUNET_NAMESTORE_Handle *h,
212 212
213 213
214/** 214/**
215 * Open a record set for editing.
216 * Retrieves an exclusive lock on this set.
217 * Must be commited using @a GNUNET_NAMESTORE_records_commit
218 *
219 * @param h handle to the namestore
220 * @param pkey private key of the zone
221 * @param label name that is being mapped
222 * @param error_cb function to call on error (i.e. disconnect or unable to get lock)
223 * the handle is afterwards invalid
224 * @param error_cb_cls closure for @a error_cb
225 * @param rm function to call with the result (with 0 records if we don't have that label)
226 * @param rm_cls closure for @a rm
227 * @return handle to abort the request
228 */
229struct GNUNET_NAMESTORE_QueueEntry *
230GNUNET_NAMESTORE_records_open (struct GNUNET_NAMESTORE_Handle *h,
231 const struct
232 GNUNET_IDENTITY_PrivateKey *pkey,
233 const char *label,
234 GNUNET_SCHEDULER_TaskCallback error_cb,
235 void *error_cb_cls,
236 GNUNET_NAMESTORE_RecordMonitor rm,
237 void *rm_cls);
238
239/**
240 * Commit the record set to the namestore.
241 * Releases the lock on the record set.
242 * Use an empty array to
243 * remove all records under the given name.
244 *
245 * The continuation is called after the value has been stored in the
246 * database. Monitors may be notified asynchronously (basically with
247 * a buffer). However, if any monitor is consistently too slow to
248 * keep up with the changes, calling @a cont will be delayed until the
249 * monitors do keep up.
250 *
251 * @param h handle to the namestore
252 * @param pkey private key of the zone
253 * @param label name that is being mapped
254 * @param rd_count number of records in the 'rd' array
255 * @param rd array of records with data to store
256 * @param cont continuation to call when done
257 * @param cont_cls closure for @a cont
258 * @return handle to abort the request
259 */
260struct GNUNET_NAMESTORE_QueueEntry *
261GNUNET_NAMESTORE_records_commit (struct GNUNET_NAMESTORE_Handle *h,
262 const struct GNUNET_IDENTITY_PrivateKey *pkey,
263 const char *label,
264 unsigned int rd_count,
265 const struct GNUNET_GNSRECORD_Data *rd,
266 GNUNET_NAMESTORE_ContinuationWithStatus cont,
267 void *cont_cls);
268
269/**
270 * Look for an existing PKEY delegation record for a given public key. 215 * Look for an existing PKEY delegation record for a given public key.
271 * Returns at most one result to the processor. 216 * Returns at most one result to the processor.
272 * 217 *
@@ -448,6 +393,107 @@ void
448GNUNET_NAMESTORE_zone_monitor_stop (struct GNUNET_NAMESTORE_ZoneMonitor *zm); 393GNUNET_NAMESTORE_zone_monitor_stop (struct GNUNET_NAMESTORE_ZoneMonitor *zm);
449 394
450 395
396/**
397 * New API draft. Experimental
398 */
399
400/**
401 * Begin a namestore transaction.
402 *
403 * @param h handle to the namestore
404 * @param error_cb function to call on error (i.e. disconnect or unable to get lock)
405 * the handle is afterwards invalid
406 * @param error_cb_cls closure for @a error_cb
407 * @return handle to abort the request
408 */
409struct GNUNET_NAMESTORE_QueueEntry *
410GNUNET_NAMESTORE_transaction_begin (struct GNUNET_NAMESTORE_Handle *h,
411 GNUNET_SCHEDULER_TaskCallback error_cb,
412 void *error_cb_cls);
413
414/**
415 * Begin rollback all actions in a transaction.
416 * Reverts all actions performed since #GNUNET_NAMESTORE_transaction_begin
417 *
418 * @param h handle to the namestore
419 * @param error_cb function to call on error (i.e. disconnect or unable to get lock)
420 * the handle is afterwards invalid
421 * @param error_cb_cls closure for @a error_cb
422 * @return handle to abort the request
423 */
424struct GNUNET_NAMESTORE_QueueEntry *
425GNUNET_NAMESTORE_transaction_abort (struct GNUNET_NAMESTORE_Handle *h,
426 GNUNET_SCHEDULER_TaskCallback error_cb,
427 void *error_cb_cls);
428/**
429 * Commit a namestore transaction.
430 * Saves all actions performed since #GNUNET_NAMESTORE_transaction_begin
431 *
432 * @param h handle to the namestore
433 * @param error_cb function to call on error (i.e. disconnect or unable to get lock)
434 * the handle is afterwards invalid
435 * @param error_cb_cls closure for @a error_cb
436 * @return handle to abort the request
437 */
438struct GNUNET_NAMESTORE_QueueEntry *
439GNUNET_NAMESTORE_transaction_commit (struct GNUNET_NAMESTORE_Handle *h,
440 GNUNET_SCHEDULER_TaskCallback error_cb,
441 void *error_cb_cls);
442
443/**
444 * Lookup an item in the namestore.
445 *
446 * @param h handle to the namestore
447 * @param pkey private key of the zone
448 * @param label name that is being mapped
449 * @param error_cb function to call on error (i.e. disconnect)
450 * the handle is afterwards invalid
451 * @param error_cb_cls closure for @a error_cb
452 * @param rm function to call with the result (with 0 records if we don't have that label);
453 * the handle is afterwards invalid
454 * @param rm_cls closure for @a rm
455 * @return handle to abort the request
456 */
457struct GNUNET_NAMESTORE_QueueEntry *
458GNUNET_NAMESTORE_records_select (struct GNUNET_NAMESTORE_Handle *h,
459 const struct
460 GNUNET_IDENTITY_PrivateKey *pkey,
461 const char *label,
462 GNUNET_SCHEDULER_TaskCallback error_cb,
463 void *error_cb_cls,
464 GNUNET_NAMESTORE_RecordMonitor rm,
465 void *rm_cls);
466
467
468/**
469 * Creates, deletes or updates an item in the namestore.
470 * If the item is already present, it is replaced with the new record set.
471 * Use an empty array to remove all records under the given name.
472 *
473 * The continuation is called after the value has been stored in the
474 * database. Monitors may be notified asynchronously (basically with
475 * a buffer). However, if any monitor is consistently too slow to
476 * keep up with the changes, calling @a cont will be delayed until the
477 * monitors do keep up.
478 *
479 * @param h handle to the namestore
480 * @param pkey private key of the zone
481 * @param label name that is being mapped
482 * @param rd_count number of records in the 'rd' array
483 * @param rd array of records with data to store
484 * @param cont continuation to call when done
485 * @param cont_cls closure for @a cont
486 * @return handle to abort the request
487 */
488struct GNUNET_NAMESTORE_QueueEntry *
489GNUNET_NAMESTORE_records_replace (struct GNUNET_NAMESTORE_Handle *h,
490 const struct GNUNET_IDENTITY_PrivateKey *pkey,
491 const char *label,
492 unsigned int rd_count,
493 const struct GNUNET_GNSRECORD_Data *rd,
494 GNUNET_NAMESTORE_ContinuationWithStatus cont,
495 void *cont_cls);
496
451#if 0 /* keep Emacsens' auto-indent happy */ 497#if 0 /* keep Emacsens' auto-indent happy */
452{ 498{
453#endif 499#endif
diff --git a/src/include/gnunet_time_lib.h b/src/include/gnunet_time_lib.h
index 96413c3cc..d59eb984d 100644
--- a/src/include/gnunet_time_lib.h
+++ b/src/include/gnunet_time_lib.h
@@ -1,6 +1,6 @@
1/* 1/*
2 This file is part of GNUnet. 2 This file is part of GNUnet.
3 Copyright (C) 2001-2013 GNUnet e.V. 3 Copyright (C) 2001-2022 GNUnet e.V.
4 4
5 GNUnet is free software: you can redistribute it and/or modify it 5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published 6 under the terms of the GNU Affero General Public License as published
@@ -482,6 +482,18 @@ GNUNET_TIME_absolute_max (struct GNUNET_TIME_Absolute t1,
482 482
483 483
484/** 484/**
485 * Round down absolute time @a at to multiple of @a rt.
486 *
487 * @param at absolute time to round
488 * @param rt multiple to round to (non-zero)
489 * @return rounded time
490 */
491struct GNUNET_TIME_Absolute
492GNUNET_TIME_absolute_round_down (struct GNUNET_TIME_Absolute at,
493 struct GNUNET_TIME_Relative rt);
494
495
496/**
485 * Return the maximum of two timestamps. 497 * Return the maximum of two timestamps.
486 * 498 *
487 * @param t1 first timestamp 499 * @param t1 first timestamp
@@ -517,6 +529,21 @@ GNUNET_TIME_absolute_get_remaining (struct GNUNET_TIME_Absolute future);
517 529
518 530
519/** 531/**
532 * Test if @a a1 and @a a2 are equal within a margin of
533 * error of @a t.
534 *
535 * @param a1 time to compare
536 * @param a2 time to compare
537 * @param t tolerance to apply
538 * @return true if "|a1-a2|<=t" holds.
539 */
540bool
541GNUNET_TIME_absolute_approx_eq (struct GNUNET_TIME_Absolute a1,
542 struct GNUNET_TIME_Absolute a2,
543 struct GNUNET_TIME_Relative t);
544
545
546/**
520 * Calculate the estimate time of arrival/completion 547 * Calculate the estimate time of arrival/completion
521 * for an operation. 548 * for an operation.
522 * 549 *
diff --git a/src/messenger/plugin_gnsrecord_messenger.c b/src/messenger/plugin_gnsrecord_messenger.c
index 2219f0bde..e09a0330d 100644
--- a/src/messenger/plugin_gnsrecord_messenger.c
+++ b/src/messenger/plugin_gnsrecord_messenger.c
@@ -1,6 +1,6 @@
1/* 1/*
2 This file is part of GNUnet. 2 This file is part of GNUnet.
3 Copyright (C) 2021 GNUnet e.V. 3 Copyright (C) 2021--2022 GNUnet e.V.
4 4
5 GNUnet is free software: you can redistribute it and/or modify it 5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published 6 under the terms of the GNU Affero General Public License as published
@@ -63,12 +63,30 @@ messenger_value_to_string (void *cls,
63 char *key = GNUNET_STRINGS_data_to_string_alloc (&(record->key), sizeof(struct GNUNET_HashCode)); 63 char *key = GNUNET_STRINGS_data_to_string_alloc (&(record->key), sizeof(struct GNUNET_HashCode));
64 64
65 char *ret; 65 char *ret;
66 GNUNET_asprintf (&ret, "%s-%s", door, key); 66 GNUNET_asprintf (&ret, "%s-%s", key, door);
67 GNUNET_free (key); 67 GNUNET_free (key);
68 GNUNET_free (door); 68 GNUNET_free (door);
69 return ret; 69 return ret;
70 } 70 }
71 case GNUNET_GNSRECORD_TYPE_MESSENGER_ROOM_DETAILS:
72 {
73 if (data_size != sizeof(struct GNUNET_MESSENGER_RoomDetailsRecord))
74 {
75 GNUNET_break_op (0);
76 return NULL;
77 }
78
79 const struct GNUNET_MESSENGER_RoomDetailsRecord *record = data;
71 80
81 char *name = GNUNET_strndup(record->name, 256);
82 char *flags = GNUNET_STRINGS_data_to_string_alloc (&(record->flags), sizeof(uint32_t));
83
84 char *ret;
85 GNUNET_asprintf (&ret, "%s-%s", flags, name);
86 GNUNET_free (flags);
87 GNUNET_free (name);
88 return ret;
89 }
72 default: 90 default:
73 return NULL; 91 return NULL;
74 } 92 }
@@ -141,7 +159,43 @@ messenger_string_to_value (void *cls,
141 *data_size = sizeof(struct GNUNET_MESSENGER_RoomEntryRecord); 159 *data_size = sizeof(struct GNUNET_MESSENGER_RoomEntryRecord);
142 return GNUNET_OK; 160 return GNUNET_OK;
143 } 161 }
162 case GNUNET_GNSRECORD_TYPE_MESSENGER_ROOM_DETAILS:
163 {
164 char flags [7];
165 const char *dash;
166
167 if ((NULL == (dash = strchr (s, '-'))) ||
168 (1 != sscanf (s, "%7s-", flags)) ||
169 (strlen (dash + 1) > 256))
170 {
171 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
172 _ ("Unable to parse MESSENGER_ROOM_DETAILS record `%s'\n"),
173 s);
174 return GNUNET_SYSERR;
175 }
176
177 struct GNUNET_MESSENGER_RoomDetailsRecord *record = GNUNET_new (
178 struct GNUNET_MESSENGER_RoomDetailsRecord
179 );
180
181 if (GNUNET_OK != GNUNET_STRINGS_string_to_data (flags,
182 strlen (flags),
183 &(record->flags),
184 sizeof(uint32_t)))
185 {
186 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
187 _ ("Unable to parse MESSENGER_ROOM_DETAILS record `%s'\n"),
188 s);
189 GNUNET_free (record);
190 return GNUNET_SYSERR;
191 }
144 192
193 GNUNET_memcpy(record->name, dash + 1, strlen(dash + 1));
194
195 *data = record;
196 *data_size = sizeof(struct GNUNET_MESSENGER_RoomDetailsRecord);
197 return GNUNET_OK;
198 }
145 default: 199 default:
146 return GNUNET_SYSERR; 200 return GNUNET_SYSERR;
147 } 201 }
@@ -158,6 +212,7 @@ static struct
158 uint32_t number; 212 uint32_t number;
159} name_map[] = { 213} name_map[] = {
160 { "MESSENGER_ROOM_ENTRY", GNUNET_GNSRECORD_TYPE_MESSENGER_ROOM_ENTRY }, 214 { "MESSENGER_ROOM_ENTRY", GNUNET_GNSRECORD_TYPE_MESSENGER_ROOM_ENTRY },
215 { "MESSENGER_ROOM_DETAILS", GNUNET_GNSRECORD_TYPE_MESSENGER_ROOM_DETAILS },
161 { NULL, UINT32_MAX } 216 { NULL, UINT32_MAX }
162}; 217};
163 218
diff --git a/src/namestore/Makefile.am b/src/namestore/Makefile.am
index 2441b864a..51708dd67 100644
--- a/src/namestore/Makefile.am
+++ b/src/namestore/Makefile.am
@@ -39,7 +39,6 @@ if HAVE_SQLITE
39SQLITE_PLUGIN = libgnunet_plugin_namestore_sqlite.la 39SQLITE_PLUGIN = libgnunet_plugin_namestore_sqlite.la
40SQLITE_TESTS = test_plugin_namestore_sqlite \ 40SQLITE_TESTS = test_plugin_namestore_sqlite \
41 test_namestore_api_store_sqlite \ 41 test_namestore_api_store_sqlite \
42 test_namestore_api_store_locking_sqlite \
43 test_namestore_api_store_update_sqlite \ 42 test_namestore_api_store_update_sqlite \
44 test_namestore_api_zone_iteration_sqlite \ 43 test_namestore_api_zone_iteration_sqlite \
45 test_namestore_api_remove_sqlite \ 44 test_namestore_api_remove_sqlite \
@@ -250,16 +249,6 @@ test_namestore_api_store_sqlite_LDADD = \
250 $(top_builddir)/src/identity/libgnunetidentity.la \ 249 $(top_builddir)/src/identity/libgnunetidentity.la \
251 libgnunetnamestore.la 250 libgnunetnamestore.la
252 251
253test_namestore_api_store_locking_sqlite_SOURCES = \
254 test_namestore_api_store_locking.c
255test_namestore_api_store_locking_sqlite_LDADD = \
256 $(top_builddir)/src/testing/libgnunettesting.la \
257 $(top_builddir)/src/util/libgnunetutil.la \
258 $(top_builddir)/src/gnsrecord/libgnunetgnsrecord.la \
259 $(top_builddir)/src/identity/libgnunetidentity.la \
260 libgnunetnamestore.la
261
262
263test_namestore_api_store_postgres_SOURCES = \ 252test_namestore_api_store_postgres_SOURCES = \
264 test_namestore_api_store.c 253 test_namestore_api_store.c
265test_namestore_api_store_postgres_LDADD = \ 254test_namestore_api_store_postgres_LDADD = \
diff --git a/src/namestore/gnunet-service-namestore.c b/src/namestore/gnunet-service-namestore.c
index d735822fb..95260ff9c 100644
--- a/src/namestore/gnunet-service-namestore.c
+++ b/src/namestore/gnunet-service-namestore.c
@@ -122,24 +122,6 @@ struct ZoneIteration
122}; 122};
123 123
124/** 124/**
125 * Lock on a record set
126 */
127struct RecordsLock
128{
129 /* DLL */
130 struct RecordsLock *prev;
131
132 /* DLL */
133 struct RecordsLock *next;
134
135 /* Hash of the locked label */
136 struct GNUNET_HashCode label_hash;
137
138 /* Client locking the zone */
139 struct NamestoreClient *client;
140};
141
142/**
143 * A namestore client 125 * A namestore client
144 */ 126 */
145struct NamestoreClient 127struct NamestoreClient
@@ -411,16 +393,6 @@ static struct StoreActivity *sa_head;
411static struct StoreActivity *sa_tail; 393static struct StoreActivity *sa_tail;
412 394
413/** 395/**
414 * Head of the DLL of record set locks
415 */
416static struct RecordsLock *locks_head;
417
418/**
419 * Tail of the DLL of record set locks
420 */
421static struct RecordsLock *locks_tail;
422
423/**
424 * Notification context shared by all monitors. 396 * Notification context shared by all monitors.
425 */ 397 */
426static struct GNUNET_NotificationContext *monitor_nc; 398static struct GNUNET_NotificationContext *monitor_nc;
@@ -447,7 +419,6 @@ static void
447cleanup_task (void *cls) 419cleanup_task (void *cls)
448{ 420{
449 struct CacheOperation *cop; 421 struct CacheOperation *cop;
450 struct RecordsLock *lock;
451 422
452 (void) cls; 423 (void) cls;
453 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Stopping namestore service\n"); 424 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Stopping namestore service\n");
@@ -459,13 +430,6 @@ cleanup_task (void *cls)
459 GNUNET_CONTAINER_DLL_remove (cop_head, cop_tail, cop); 430 GNUNET_CONTAINER_DLL_remove (cop_head, cop_tail, cop);
460 GNUNET_free (cop); 431 GNUNET_free (cop);
461 } 432 }
462 while (NULL != (lock = locks_head))
463 {
464 GNUNET_CONTAINER_DLL_remove (locks_head,
465 locks_tail,
466 lock);
467 GNUNET_free (lock);
468 }
469 433
470 if (NULL != namecache) 434 if (NULL != namecache)
471 { 435 {
@@ -1154,7 +1118,6 @@ client_disconnect_cb (void *cls,
1154 struct NamestoreClient *nc = app_ctx; 1118 struct NamestoreClient *nc = app_ctx;
1155 struct ZoneIteration *no; 1119 struct ZoneIteration *no;
1156 struct CacheOperation *cop; 1120 struct CacheOperation *cop;
1157 struct RecordsLock *lock;
1158 1121
1159 (void) cls; 1122 (void) cls;
1160 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Client %p disconnected\n", client); 1123 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Client %p disconnected\n", client);
@@ -1205,15 +1168,6 @@ client_disconnect_cb (void *cls,
1205 for (cop = cop_head; NULL != cop; cop = cop->next) 1168 for (cop = cop_head; NULL != cop; cop = cop->next)
1206 if (nc == cop->nc) 1169 if (nc == cop->nc)
1207 cop->nc = NULL; 1170 cop->nc = NULL;
1208 for (lock = locks_head; NULL != lock; lock = lock->next)
1209 {
1210 if (nc != lock->client)
1211 continue;
1212 GNUNET_CONTAINER_DLL_remove (locks_head,
1213 locks_tail,
1214 lock);
1215 GNUNET_free (lock);
1216 }
1217 GNUNET_free (nc); 1171 GNUNET_free (nc);
1218} 1172}
1219 1173
@@ -1407,105 +1361,6 @@ check_record_lookup (void *cls, const struct LabelLookupMessage *ll_msg)
1407 return GNUNET_OK; 1361 return GNUNET_OK;
1408} 1362}
1409 1363
1410static void
1411calculate_lock_hash (const char *label,
1412 const struct GNUNET_IDENTITY_PrivateKey *zone,
1413 struct GNUNET_HashCode *result)
1414{
1415 struct GNUNET_HashContext *hctx;
1416
1417 hctx = GNUNET_CRYPTO_hash_context_start ();
1418 GNUNET_CRYPTO_hash_context_read (hctx, label, strlen (label));
1419 GNUNET_CRYPTO_hash_context_read (hctx, zone,
1420 sizeof (*zone));
1421 GNUNET_CRYPTO_hash_context_finish (hctx, result);
1422}
1423
1424/**
1425 * Release a lock on a record set.
1426 * Does nothing if lock not held.
1427 *
1428 * @param label the label of the record set
1429 * @param zone the zone
1430 * @param nc the client releasing the lock
1431 */
1432static void
1433NST_label_lock_release (const char *label,
1434 const struct GNUNET_IDENTITY_PrivateKey *zone,
1435 const struct NamestoreClient *nc)
1436{
1437 struct GNUNET_HashCode label_hash;
1438 struct RecordsLock *lock;
1439
1440 calculate_lock_hash (label, zone, &label_hash);
1441 for (lock = locks_head; NULL != lock; lock = lock->next)
1442 if (0 == memcmp (&label_hash, &lock->label_hash, sizeof (label_hash)))
1443 break;
1444 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
1445 "Record locked: %s\n", (NULL == lock) ? "No" : "Yes");
1446 if (NULL == lock)
1447 return;
1448 if (lock->client != nc)
1449 {
1450 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
1451 "Lock is held by other client on `%s'\n", label);
1452 return;
1453 }
1454 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
1455 "Unocking %s\n", GNUNET_h2s (&label_hash));
1456 GNUNET_CONTAINER_DLL_remove (locks_head,
1457 locks_tail,
1458 lock);
1459 GNUNET_free (lock);
1460}
1461
1462/**
1463 * Get/set a lock on a record set.
1464 * May be called multiple times but will
1465 * not aquire additional locks.
1466 *
1467 * @param the label of the record set
1468 * @param the zone
1469 * @param the client doing the locking
1470 * @return GNUNET_YES if lock retrieved or set already.
1471 */
1472static enum GNUNET_GenericReturnValue
1473NST_label_lock (const char *label,
1474 const struct GNUNET_IDENTITY_PrivateKey *zone,
1475 struct NamestoreClient *nc)
1476{
1477 struct GNUNET_HashCode label_hash;
1478 struct RecordsLock *lock;
1479
1480 calculate_lock_hash (label, zone, &label_hash);
1481 for (lock = locks_head; NULL != lock; lock = lock->next)
1482 if (0 == memcmp (&label_hash, &lock->label_hash, sizeof (label_hash)))
1483 break;
1484 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
1485 "Record locked: %s\n", (NULL == lock) ? "No" : "Yes");
1486 if (NULL != lock)
1487 {
1488 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
1489 "Client holds lock: %s\n", (lock->client != nc) ? "No" : "Yes");
1490 if (lock->client != nc)
1491 {
1492 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
1493 "Lock is held by other client on `%s'\n", label);
1494 return GNUNET_NO;
1495 }
1496 return GNUNET_YES;
1497 }
1498 lock = GNUNET_new (struct RecordsLock);
1499 lock->client = nc;
1500 memcpy (&lock->label_hash, &label_hash, sizeof (label_hash));
1501 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
1502 "Locking %s\n", GNUNET_h2s (&label_hash));
1503 GNUNET_CONTAINER_DLL_insert (locks_head,
1504 locks_tail,
1505 lock);
1506 return GNUNET_YES;
1507}
1508
1509 1364
1510/** 1365/**
1511 * Handles a #GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_LOOKUP message 1366 * Handles a #GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_LOOKUP message
@@ -1520,7 +1375,6 @@ handle_record_lookup (void *cls, const struct LabelLookupMessage *ll_msg)
1520 struct GNUNET_MQ_Envelope *env; 1375 struct GNUNET_MQ_Envelope *env;
1521 struct LabelLookupResponseMessage *llr_msg; 1376 struct LabelLookupResponseMessage *llr_msg;
1522 struct RecordLookupContext rlc; 1377 struct RecordLookupContext rlc;
1523 struct RecordsLock *lock;
1524 struct GNUNET_HashCode label_hash; 1378 struct GNUNET_HashCode label_hash;
1525 const char *name_tmp; 1379 const char *name_tmp;
1526 char *res_name; 1380 char *res_name;
@@ -1544,28 +1398,6 @@ handle_record_lookup (void *cls, const struct LabelLookupMessage *ll_msg)
1544 return; 1398 return;
1545 } 1399 }
1546 name_len = strlen (conv_name) + 1; 1400 name_len = strlen (conv_name) + 1;
1547 if (GNUNET_YES == ntohl (ll_msg->locking))
1548 {
1549 if (GNUNET_NO == NST_label_lock (conv_name, &ll_msg->zone, nc))
1550 {
1551 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
1552 "Lock is held by other client on `%s'\n", conv_name);
1553 env =
1554 GNUNET_MQ_msg_extra (llr_msg,
1555 name_len,
1556 GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_LOOKUP_RESPONSE);
1557 llr_msg->gns_header.r_id = ll_msg->gns_header.r_id;
1558 llr_msg->private_key = ll_msg->zone;
1559 llr_msg->name_len = htons (name_len);
1560 llr_msg->rd_count = htons (0);
1561 llr_msg->rd_len = htons (0);
1562 llr_msg->found = htons (GNUNET_SYSERR);
1563 GNUNET_memcpy (&llr_msg[1], conv_name, name_len);
1564 GNUNET_MQ_send (nc->mq, env);
1565 GNUNET_free (conv_name);
1566 return;
1567 }
1568 }
1569 rlc.label = conv_name; 1401 rlc.label = conv_name;
1570 rlc.found = GNUNET_NO; 1402 rlc.found = GNUNET_NO;
1571 rlc.res_rd_count = 0; 1403 rlc.res_rd_count = 0;
@@ -1699,7 +1531,6 @@ handle_record_store (void *cls, const struct RecordStoreMessage *rp_msg)
1699 unsigned int rd_count; 1531 unsigned int rd_count;
1700 int res; 1532 int res;
1701 struct StoreActivity *sa; 1533 struct StoreActivity *sa;
1702 struct RecordsLock *lock;
1703 struct GNUNET_HashCode label_hash; 1534 struct GNUNET_HashCode label_hash;
1704 struct GNUNET_TIME_Absolute existing_block_exp; 1535 struct GNUNET_TIME_Absolute existing_block_exp;
1705 struct GNUNET_TIME_Absolute new_block_exp; 1536 struct GNUNET_TIME_Absolute new_block_exp;
@@ -1753,20 +1584,6 @@ handle_record_store (void *cls, const struct RecordStoreMessage *rp_msg)
1753 GNUNET_SERVICE_client_continue (nc->client); 1584 GNUNET_SERVICE_client_continue (nc->client);
1754 return; 1585 return;
1755 } 1586 }
1756 if (GNUNET_YES == ntohl (rp_msg->locking))
1757 {
1758 if (GNUNET_NO == NST_label_lock (conv_name, &rp_msg->private_key, nc))
1759 {
1760 send_store_response (nc, GNUNET_SYSERR, _ ("Record set locked."), rid);
1761 GNUNET_SERVICE_client_continue (nc->client);
1762 GNUNET_free (conv_name);
1763 return;
1764 }
1765 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
1766 "Client has lock on `%s', continuing.\n", conv_name);
1767 if (GNUNET_YES == ntohl (rp_msg->locking))
1768 NST_label_lock_release (conv_name, &rp_msg->private_key, nc);
1769 }
1770 1587
1771 GNUNET_STATISTICS_update (statistics, 1588 GNUNET_STATISTICS_update (statistics,
1772 "Well-formed store requests received", 1589 "Well-formed store requests received",
diff --git a/src/namestore/namestore.h b/src/namestore/namestore.h
index 0f3ffa837..583ec1e68 100644
--- a/src/namestore/namestore.h
+++ b/src/namestore/namestore.h
@@ -68,11 +68,6 @@ struct RecordStoreMessage
68 struct GNUNET_TIME_AbsoluteNBO expire; 68 struct GNUNET_TIME_AbsoluteNBO expire;
69 69
70 /** 70 /**
71 * Unock the label with this request.
72 */
73 uint32_t locking GNUNET_PACKED;
74
75 /**
76 * Name length 71 * Name length
77 */ 72 */
78 uint16_t name_len GNUNET_PACKED; 73 uint16_t name_len GNUNET_PACKED;
@@ -151,11 +146,6 @@ struct LabelLookupMessage
151 uint32_t label_len GNUNET_PACKED; 146 uint32_t label_len GNUNET_PACKED;
152 147
153 /** 148 /**
154 * Lock the label with this lookup
155 */
156 uint32_t locking GNUNET_PACKED;
157
158 /**
159 * The private key of the zone to look up in 149 * The private key of the zone to look up in
160 */ 150 */
161 struct GNUNET_IDENTITY_PrivateKey zone; 151 struct GNUNET_IDENTITY_PrivateKey zone;
diff --git a/src/namestore/namestore_api.c b/src/namestore/namestore_api.c
index a7380bbde..73f985803 100644
--- a/src/namestore/namestore_api.c
+++ b/src/namestore/namestore_api.c
@@ -411,7 +411,7 @@ handle_record_store_response (void *cls,
411 return; 411 return;
412 if (NULL != qe->cont) 412 if (NULL != qe->cont)
413 qe->cont (qe->cont_cls, res, 413 qe->cont (qe->cont_cls, res,
414 (GNUNET_OK == res) ? NULL : emsg); 414 (GNUNET_OK == res) ? NULL : emsg);
415 free_qe (qe); 415 free_qe (qe);
416} 416}
417 417
@@ -482,7 +482,7 @@ handle_lookup_result (void *cls, const struct LabelLookupResponseMessage *msg)
482 int16_t found = (int16_t) ntohs (msg->found); 482 int16_t found = (int16_t) ntohs (msg->found);
483 483
484 LOG (GNUNET_ERROR_TYPE_DEBUG, "Received RECORD_LOOKUP_RESULT (found=%i)\n", 484 LOG (GNUNET_ERROR_TYPE_DEBUG, "Received RECORD_LOOKUP_RESULT (found=%i)\n",
485 found); 485 found);
486 qe = find_qe (h, ntohl (msg->gns_header.r_id)); 486 qe = find_qe (h, ntohl (msg->gns_header.r_id));
487 if (NULL == qe) 487 if (NULL == qe)
488 return; 488 return;
@@ -820,9 +820,9 @@ reconnect (struct GNUNET_NAMESTORE_Handle *h)
820{ 820{
821 struct GNUNET_MQ_MessageHandler handlers[] = 821 struct GNUNET_MQ_MessageHandler handlers[] =
822 { GNUNET_MQ_hd_var_size (record_store_response, 822 { GNUNET_MQ_hd_var_size (record_store_response,
823 GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_STORE_RESPONSE, 823 GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_STORE_RESPONSE,
824 struct RecordStoreResponseMessage, 824 struct RecordStoreResponseMessage,
825 h), 825 h),
826 GNUNET_MQ_hd_var_size (zone_to_name_response, 826 GNUNET_MQ_hd_var_size (zone_to_name_response,
827 GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_TO_NAME_RESPONSE, 827 GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_TO_NAME_RESPONSE,
828 struct ZoneToNameResponseMessage, 828 struct ZoneToNameResponseMessage,
@@ -1013,16 +1013,16 @@ warn_delay (void *cls)
1013 GNUNET_NAMESTORE_cancel (qe); 1013 GNUNET_NAMESTORE_cancel (qe);
1014} 1014}
1015 1015
1016
1016struct GNUNET_NAMESTORE_QueueEntry * 1017struct GNUNET_NAMESTORE_QueueEntry *
1017records_store_ ( 1018GNUNET_NAMESTORE_records_store (
1018 struct GNUNET_NAMESTORE_Handle *h, 1019 struct GNUNET_NAMESTORE_Handle *h,
1019 const struct GNUNET_IDENTITY_PrivateKey *pkey, 1020 const struct GNUNET_IDENTITY_PrivateKey *pkey,
1020 const char *label, 1021 const char *label,
1021 unsigned int rd_count, 1022 unsigned int rd_count,
1022 const struct GNUNET_GNSRECORD_Data *rd, 1023 const struct GNUNET_GNSRECORD_Data *rd,
1023 GNUNET_NAMESTORE_ContinuationWithStatus cont, 1024 GNUNET_NAMESTORE_ContinuationWithStatus cont,
1024 void *cont_cls, 1025 void *cont_cls)
1025 int locking)
1026{ 1026{
1027 struct GNUNET_NAMESTORE_QueueEntry *qe; 1027 struct GNUNET_NAMESTORE_QueueEntry *qe;
1028 struct GNUNET_MQ_Envelope *env; 1028 struct GNUNET_MQ_Envelope *env;
@@ -1067,9 +1067,8 @@ records_store_ (
1067 msg->name_len = htons (name_len); 1067 msg->name_len = htons (name_len);
1068 msg->rd_count = htons (rd_count); 1068 msg->rd_count = htons (rd_count);
1069 msg->rd_len = htons (rd_ser_len); 1069 msg->rd_len = htons (rd_ser_len);
1070 msg->reserved = ntohs(0); 1070 msg->reserved = ntohs (0);
1071 msg->private_key = *pkey; 1071 msg->private_key = *pkey;
1072 msg->locking = htonl (locking);
1073 1072
1074 name_tmp = (char *) &msg[1]; 1073 name_tmp = (char *) &msg[1];
1075 GNUNET_memcpy (name_tmp, label, name_len); 1074 GNUNET_memcpy (name_tmp, label, name_len);
@@ -1101,22 +1100,11 @@ records_store_ (
1101 return qe; 1100 return qe;
1102} 1101}
1103 1102
1103/**
1104 * TODO: Experimental API will replace API above.
1105 */
1104struct GNUNET_NAMESTORE_QueueEntry * 1106struct GNUNET_NAMESTORE_QueueEntry *
1105GNUNET_NAMESTORE_records_store ( 1107GNUNET_NAMESTORE_records_replace (
1106 struct GNUNET_NAMESTORE_Handle *h,
1107 const struct GNUNET_IDENTITY_PrivateKey *pkey,
1108 const char *label,
1109 unsigned int rd_count,
1110 const struct GNUNET_GNSRECORD_Data *rd,
1111 GNUNET_NAMESTORE_ContinuationWithStatus cont,
1112 void *cont_cls)
1113{
1114 return records_store_ (h, pkey, label,
1115 rd_count, rd, cont, cont_cls, GNUNET_NO);
1116}
1117
1118struct GNUNET_NAMESTORE_QueueEntry *
1119GNUNET_NAMESTORE_records_commit (
1120 struct GNUNET_NAMESTORE_Handle *h, 1108 struct GNUNET_NAMESTORE_Handle *h,
1121 const struct GNUNET_IDENTITY_PrivateKey *pkey, 1109 const struct GNUNET_IDENTITY_PrivateKey *pkey,
1122 const char *label, 1110 const char *label,
@@ -1125,21 +1113,19 @@ GNUNET_NAMESTORE_records_commit (
1125 GNUNET_NAMESTORE_ContinuationWithStatus cont, 1113 GNUNET_NAMESTORE_ContinuationWithStatus cont,
1126 void *cont_cls) 1114 void *cont_cls)
1127{ 1115{
1128 return records_store_ (h, pkey, label, 1116 return GNUNET_NAMESTORE_records_store (h, pkey, label, rd_count, rd,
1129 rd_count, rd, cont, cont_cls, GNUNET_YES); 1117 cont, cont_cls);
1130} 1118}
1131 1119
1132
1133struct GNUNET_NAMESTORE_QueueEntry * 1120struct GNUNET_NAMESTORE_QueueEntry *
1134records_lookup_ ( 1121GNUNET_NAMESTORE_records_lookup (
1135 struct GNUNET_NAMESTORE_Handle *h, 1122 struct GNUNET_NAMESTORE_Handle *h,
1136 const struct GNUNET_IDENTITY_PrivateKey *pkey, 1123 const struct GNUNET_IDENTITY_PrivateKey *pkey,
1137 const char *label, 1124 const char *label,
1138 GNUNET_SCHEDULER_TaskCallback error_cb, 1125 GNUNET_SCHEDULER_TaskCallback error_cb,
1139 void *error_cb_cls, 1126 void *error_cb_cls,
1140 GNUNET_NAMESTORE_RecordMonitor rm, 1127 GNUNET_NAMESTORE_RecordMonitor rm,
1141 void *rm_cls, 1128 void *rm_cls)
1142 int locking)
1143{ 1129{
1144 struct GNUNET_NAMESTORE_QueueEntry *qe; 1130 struct GNUNET_NAMESTORE_QueueEntry *qe;
1145 struct GNUNET_MQ_Envelope *env; 1131 struct GNUNET_MQ_Envelope *env;
@@ -1167,7 +1153,6 @@ records_lookup_ (
1167 msg->gns_header.r_id = htonl (qe->op_id); 1153 msg->gns_header.r_id = htonl (qe->op_id);
1168 msg->zone = *pkey; 1154 msg->zone = *pkey;
1169 msg->label_len = htonl (label_len); 1155 msg->label_len = htonl (label_len);
1170 msg->locking = htonl (locking);
1171 GNUNET_memcpy (&msg[1], label, label_len); 1156 GNUNET_memcpy (&msg[1], label, label_len);
1172 if (NULL == h->mq) 1157 if (NULL == h->mq)
1173 qe->env = env; 1158 qe->env = env;
@@ -1176,22 +1161,12 @@ records_lookup_ (
1176 return qe; 1161 return qe;
1177} 1162}
1178 1163
1179struct GNUNET_NAMESTORE_QueueEntry *
1180GNUNET_NAMESTORE_records_lookup (
1181 struct GNUNET_NAMESTORE_Handle *h,
1182 const struct GNUNET_IDENTITY_PrivateKey *pkey,
1183 const char *label,
1184 GNUNET_SCHEDULER_TaskCallback error_cb,
1185 void *error_cb_cls,
1186 GNUNET_NAMESTORE_RecordMonitor rm,
1187 void *rm_cls)
1188{
1189 return records_lookup_ (h, pkey, label,
1190 error_cb, error_cb_cls, rm, rm_cls, GNUNET_NO);
1191}
1192 1164
1165/**
1166 * TODO experimental API. Will replace old API above.
1167 */
1193struct GNUNET_NAMESTORE_QueueEntry * 1168struct GNUNET_NAMESTORE_QueueEntry *
1194GNUNET_NAMESTORE_records_open ( 1169GNUNET_NAMESTORE_records_select (
1195 struct GNUNET_NAMESTORE_Handle *h, 1170 struct GNUNET_NAMESTORE_Handle *h,
1196 const struct GNUNET_IDENTITY_PrivateKey *pkey, 1171 const struct GNUNET_IDENTITY_PrivateKey *pkey,
1197 const char *label, 1172 const char *label,
@@ -1200,8 +1175,9 @@ GNUNET_NAMESTORE_records_open (
1200 GNUNET_NAMESTORE_RecordMonitor rm, 1175 GNUNET_NAMESTORE_RecordMonitor rm,
1201 void *rm_cls) 1176 void *rm_cls)
1202{ 1177{
1203 return records_lookup_ (h, pkey, label, 1178 return GNUNET_NAMESTORE_records_lookup (h, pkey, label,
1204 error_cb, error_cb_cls, rm, rm_cls, GNUNET_YES); 1179 error_cb, error_cb_cls,
1180 rm, rm_cls);
1205} 1181}
1206 1182
1207struct GNUNET_NAMESTORE_QueueEntry * 1183struct GNUNET_NAMESTORE_QueueEntry *
@@ -1364,5 +1340,48 @@ GNUNET_NAMESTORE_cancel (struct GNUNET_NAMESTORE_QueueEntry *qe)
1364 free_qe (qe); 1340 free_qe (qe);
1365} 1341}
1366 1342
1343/**
1344 * New API draft. Experimental
1345 */
1346
1347struct GNUNET_NAMESTORE_QueueEntry *
1348GNUNET_NAMESTORE_transaction_begin (struct GNUNET_NAMESTORE_Handle *h,
1349 GNUNET_SCHEDULER_TaskCallback error_cb,
1350 void *error_cb_cls)
1351{
1352 GNUNET_break (0);
1353 return NULL;
1354}
1355
1356
1357struct GNUNET_NAMESTORE_QueueEntry *
1358GNUNET_NAMESTORE_transaction_abort (struct GNUNET_NAMESTORE_Handle *h,
1359 GNUNET_SCHEDULER_TaskCallback error_cb,
1360 void *error_cb_cls)
1361{
1362 GNUNET_break (0);
1363 return NULL;
1364}
1365
1366
1367/**
1368 * Commit a namestore transaction.
1369 * Saves all actions performed since #GNUNET_NAMESTORE_transaction_begin
1370 *
1371 * @param h handle to the namestore
1372 * @param error_cb function to call on error (i.e. disconnect or unable to get lock)
1373 * the handle is afterwards invalid
1374 * @param error_cb_cls closure for @a error_cb
1375 * @return handle to abort the request
1376 */
1377struct GNUNET_NAMESTORE_QueueEntry *
1378GNUNET_NAMESTORE_transaction_commit (struct GNUNET_NAMESTORE_Handle *h,
1379 GNUNET_SCHEDULER_TaskCallback error_cb,
1380 void *error_cb_cls)
1381{
1382 GNUNET_break (0);
1383 return NULL;
1384}
1385
1367 1386
1368/* end of namestore_api.c */ 1387/* end of namestore_api.c */
diff --git a/src/pq/pq_result_helper.c b/src/pq/pq_result_helper.c
index 2c11f5202..f3d246c36 100644
--- a/src/pq/pq_result_helper.c
+++ b/src/pq/pq_result_helper.c
@@ -1086,6 +1086,12 @@ extract_uint64 (void *cls,
1086 fnum)) 1086 fnum))
1087 { 1087 {
1088 GNUNET_break (0); 1088 GNUNET_break (0);
1089 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
1090 "Got length %u for field `%s'\n",
1091 PQgetlength (result,
1092 row,
1093 fnum),
1094 fname);
1089 return GNUNET_SYSERR; 1095 return GNUNET_SYSERR;
1090 } 1096 }
1091 res = (uint64_t *) PQgetvalue (result, 1097 res = (uint64_t *) PQgetvalue (result,
diff --git a/src/transport/Makefile.am b/src/transport/Makefile.am
index 69b05fb13..2b09ccf63 100644
--- a/src/transport/Makefile.am
+++ b/src/transport/Makefile.am
@@ -1528,6 +1528,7 @@ test_transport_simple_send_string.sh \
1528test_transport_simple_send.sh \ 1528test_transport_simple_send.sh \
1529test_transport_simple_send_broadcast.sh \ 1529test_transport_simple_send_broadcast.sh \
1530test_transport_udp_backchannel.sh \ 1530test_transport_udp_backchannel.sh \
1531test_transport_simple_send_dv_circle.sh \
1531gnunet-transport-certificate-creation.in \ 1532gnunet-transport-certificate-creation.in \
1532communicator-unix.conf \ 1533communicator-unix.conf \
1533test_plugin_hostkey \ 1534test_plugin_hostkey \
diff --git a/src/util/.gitignore b/src/util/.gitignore
index 51eab71db..0e3449fed 100644
--- a/src/util/.gitignore
+++ b/src/util/.gitignore
@@ -36,6 +36,7 @@ test_crypto_ecdh_eddsa
36test_crypto_ecdhe 36test_crypto_ecdhe
37test_crypto_ecdsa 37test_crypto_ecdsa
38test_crypto_eddsa 38test_crypto_eddsa
39test_crypto_edx25519
39test_crypto_hash 40test_crypto_hash
40test_crypto_hash_context 41test_crypto_hash_context
41test_crypto_hkdf 42test_crypto_hkdf
diff --git a/src/util/Makefile.am b/src/util/Makefile.am
index 406d42b1e..9cb7da15b 100644
--- a/src/util/Makefile.am
+++ b/src/util/Makefile.am
@@ -66,6 +66,7 @@ libgnunetutil_la_SOURCES = \
66 crypto_ecc_gnsrecord.c \ 66 crypto_ecc_gnsrecord.c \
67 $(DLOG) \ 67 $(DLOG) \
68 crypto_ecc_setup.c \ 68 crypto_ecc_setup.c \
69 crypto_edx25519.c \
69 crypto_hash.c \ 70 crypto_hash.c \
70 crypto_hash_file.c \ 71 crypto_hash_file.c \
71 crypto_hkdf.c \ 72 crypto_hkdf.c \
@@ -297,6 +298,7 @@ check_PROGRAMS = \
297 test_crypto_ecdhe \ 298 test_crypto_ecdhe \
298 test_crypto_ecdh_eddsa \ 299 test_crypto_ecdh_eddsa \
299 test_crypto_ecdh_ecdsa \ 300 test_crypto_ecdh_ecdsa \
301 test_crypto_edx25519 \
300 $(DLOG_TEST) \ 302 $(DLOG_TEST) \
301 test_crypto_hash \ 303 test_crypto_hash \
302 test_crypto_hash_context \ 304 test_crypto_hash_context \
@@ -470,6 +472,12 @@ test_crypto_eddsa_LDADD = \
470 libgnunetutil.la \ 472 libgnunetutil.la \
471 $(LIBGCRYPT_LIBS) 473 $(LIBGCRYPT_LIBS)
472 474
475test_crypto_edx25519_SOURCES = \
476 test_crypto_edx25519.c
477test_crypto_edx25519_LDADD = \
478 libgnunetutil.la \
479 $(LIBGCRYPT_LIBS)
480
473test_crypto_ecc_dlog_SOURCES = \ 481test_crypto_ecc_dlog_SOURCES = \
474 test_crypto_ecc_dlog.c 482 test_crypto_ecc_dlog.c
475test_crypto_ecc_dlog_LDADD = \ 483test_crypto_ecc_dlog_LDADD = \
diff --git a/src/util/crypto_ecc_gnsrecord.c b/src/util/crypto_ecc_gnsrecord.c
index ce41a4699..0ee0570c0 100644
--- a/src/util/crypto_ecc_gnsrecord.c
+++ b/src/util/crypto_ecc_gnsrecord.c
@@ -68,28 +68,15 @@ derive_h (const void *pub,
68} 68}
69 69
70 70
71/** 71enum GNUNET_GenericReturnValue
72 * This is a signature function for EdDSA which takes the 72GNUNET_CRYPTO_eddsa_sign_derived (
73 * secret scalar sk instead of the private seed which is 73 const struct GNUNET_CRYPTO_EddsaPrivateKey *pkey,
74 * usually the case for crypto APIs. We require this functionality 74 const char *label,
75 * in order to use derived private keys for signatures we 75 const char *context,
76 * cannot calculate the inverse of a sk to find the seed
77 * efficiently.
78 *
79 * The resulting signature is a standard EdDSA signature
80 * which can be verified using the usual APIs.
81 *
82 * @param sk the secret scalar
83 * @param purp the signature purpose
84 * @param sig the resulting signature
85 */
86void
87GNUNET_CRYPTO_eddsa_sign_with_scalar (
88 const struct GNUNET_CRYPTO_EddsaPrivateScalar *priv,
89 const struct GNUNET_CRYPTO_EccSignaturePurpose *purpose, 76 const struct GNUNET_CRYPTO_EccSignaturePurpose *purpose,
90 struct GNUNET_CRYPTO_EddsaSignature *sig) 77 struct GNUNET_CRYPTO_EddsaSignature *sig)
91{ 78{
92 79 struct GNUNET_CRYPTO_EddsaPrivateScalar priv;
93 crypto_hash_sha512_state hs; 80 crypto_hash_sha512_state hs;
94 unsigned char sk[64]; 81 unsigned char sk[64];
95 unsigned char r[64]; 82 unsigned char r[64];
@@ -98,6 +85,14 @@ GNUNET_CRYPTO_eddsa_sign_with_scalar (
98 unsigned char zk[32]; 85 unsigned char zk[32];
99 unsigned char tmp[32]; 86 unsigned char tmp[32];
100 87
88 /**
89 * Derive the private key
90 */
91 GNUNET_CRYPTO_eddsa_private_key_derive (pkey,
92 label,
93 context,
94 &priv);
95
101 crypto_hash_sha512_init (&hs); 96 crypto_hash_sha512_init (&hs);
102 97
103 /** 98 /**
@@ -108,7 +103,7 @@ GNUNET_CRYPTO_eddsa_sign_with_scalar (
108 * sk[0..31] = h * SHA512 (d)[0..31] 103 * sk[0..31] = h * SHA512 (d)[0..31]
109 * sk[32..63] = SHA512 (d)[32..63] 104 * sk[32..63] = SHA512 (d)[32..63]
110 */ 105 */
111 memcpy (sk, priv->s, 64); 106 memcpy (sk, priv.s, 64);
112 107
113 /** 108 /**
114 * Calculate the derived zone key zk' from the 109 * Calculate the derived zone key zk' from the
@@ -172,8 +167,28 @@ GNUNET_CRYPTO_eddsa_sign_with_scalar (
172 sodium_memzero (sk, sizeof (sk)); 167 sodium_memzero (sk, sizeof (sk));
173 sodium_memzero (r, sizeof (r)); 168 sodium_memzero (r, sizeof (r));
174 sodium_memzero (r_mod, sizeof (r_mod)); 169 sodium_memzero (r_mod, sizeof (r_mod));
170 return GNUNET_OK;
175} 171}
176 172
173enum GNUNET_GenericReturnValue
174GNUNET_CRYPTO_ecdsa_sign_derived (
175 const struct GNUNET_CRYPTO_EcdsaPrivateKey *priv,
176 const char *label,
177 const char *context,
178 const struct GNUNET_CRYPTO_EccSignaturePurpose *purpose,
179 struct GNUNET_CRYPTO_EcdsaSignature *sig)
180{
181 struct GNUNET_CRYPTO_EcdsaPrivateKey *key;
182 enum GNUNET_GenericReturnValue res;
183 key = GNUNET_CRYPTO_ecdsa_private_key_derive (priv,
184 label,
185 context);
186 res = GNUNET_CRYPTO_ecdsa_sign_ (key,
187 purpose,
188 sig);
189 GNUNET_free (key);
190 return res;
191}
177 192
178struct GNUNET_CRYPTO_EcdsaPrivateKey * 193struct GNUNET_CRYPTO_EcdsaPrivateKey *
179GNUNET_CRYPTO_ecdsa_private_key_derive ( 194GNUNET_CRYPTO_ecdsa_private_key_derive (
diff --git a/src/util/crypto_edx25519.c b/src/util/crypto_edx25519.c
new file mode 100644
index 000000000..26b45407e
--- /dev/null
+++ b/src/util/crypto_edx25519.c
@@ -0,0 +1,418 @@
1/*
2 This file is part of GNUnet.
3 Copyright (C) 2022 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20
21/**
22 * @file util/crypto_edx25519.c
23 * @brief An variant of EdDSA which allows for iterative derivation of key pairs.
24 * @author Özgür Kesim
25 * @author Christian Grothoff
26 * @author Florian Dold
27 * @author Martin Schanzenbach
28 */
29#include "platform.h"
30#include <gcrypt.h>
31#include <sodium.h>
32#include "gnunet_crypto_lib.h"
33#include "gnunet_strings_lib.h"
34
35#define CURVE "Ed25519"
36
37void
38GNUNET_CRYPTO_edx25519_key_clear (struct GNUNET_CRYPTO_Edx25519PrivateKey *pk)
39{
40 memset (pk, 0, sizeof(struct GNUNET_CRYPTO_Edx25519PrivateKey));
41}
42
43
44void
45GNUNET_CRYPTO_edx25519_key_create_from_seed (
46 const void *seed,
47 size_t seedsize,
48 struct GNUNET_CRYPTO_Edx25519PrivateKey *pk)
49{
50
51 GNUNET_static_assert (sizeof(*pk) == sizeof(struct GNUNET_HashCode));
52 GNUNET_CRYPTO_hash (seed,
53 seedsize,
54 (struct GNUNET_HashCode *) pk);
55
56 /* Clamp the first half of the key. The second half is used in the signature
57 * process. */
58 pk->a[0] &= 248;
59 pk->a[31] &= 127;
60 pk->a[31] |= 64;
61}
62
63
64void
65GNUNET_CRYPTO_edx25519_key_create (
66 struct GNUNET_CRYPTO_Edx25519PrivateKey *pk)
67{
68 char seed[256 / 8];
69 GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_NONCE,
70 seed,
71 sizeof (seed));
72 GNUNET_CRYPTO_edx25519_key_create_from_seed (seed,
73 sizeof(seed),
74 pk);
75}
76
77
78void
79GNUNET_CRYPTO_edx25519_key_get_public (
80 const struct GNUNET_CRYPTO_Edx25519PrivateKey *priv,
81 struct GNUNET_CRYPTO_Edx25519PublicKey *pub)
82{
83 crypto_scalarmult_ed25519_base_noclamp (pub->q_y,
84 priv->a);
85}
86
87
88/**
89 * This function operates the basically same way as the signature function for
90 * EdDSA. But instead of expanding a private seed (which is usually the case
91 * for crypto APIs) and using the resulting scalars, it takes the scalars
92 * directly from Edx25519PrivateKey. We require this functionality in order to
93 * use derived private keys for signatures.
94 *
95 * The resulting signature is a standard EdDSA signature
96 * which can be verified using the usual APIs.
97 *
98 * @param priv the private key (containing two scalars .a and .b)
99 * @param purp the signature purpose
100 * @param sig the resulting signature
101 */
102enum GNUNET_GenericReturnValue
103GNUNET_CRYPTO_edx25519_sign_ (
104 const struct GNUNET_CRYPTO_Edx25519PrivateKey *priv,
105 const struct GNUNET_CRYPTO_EccSignaturePurpose *purpose,
106 struct GNUNET_CRYPTO_Edx25519Signature *sig)
107{
108
109 crypto_hash_sha512_state hs;
110 unsigned char r[64];
111 unsigned char hram[64];
112 unsigned char P[32];
113 unsigned char r_mod[64];
114 unsigned char R[32];
115 unsigned char tmp[32];
116
117 crypto_hash_sha512_init (&hs);
118
119 /**
120 * Calculate the public key P from the private scalar in the key.
121 */
122 crypto_scalarmult_ed25519_base_noclamp (P,
123 priv->a);
124
125 /**
126 * Calculate r:
127 * r = SHA512 (b ∥ M)
128 * where M is our message (purpose).
129 */
130 crypto_hash_sha512_update (&hs,
131 priv->b,
132 sizeof(priv->b));
133 crypto_hash_sha512_update (&hs,
134 (uint8_t*) purpose,
135 ntohl (purpose->size));
136 crypto_hash_sha512_final (&hs,
137 r);
138
139 /**
140 * Temporarily put P into S
141 */
142 memcpy (sig->s, P, 32);
143
144 /**
145 * Reduce the scalar value r
146 */
147 crypto_core_ed25519_scalar_reduce (r_mod, r);
148
149 /**
150 * Calculate R := r * G of the signature
151 */
152 crypto_scalarmult_ed25519_base_noclamp (R, r_mod);
153 memcpy (sig->r, R, sizeof (R));
154
155 /**
156 * Calculate
157 * hram := SHA512 (R ∥ P ∥ M)
158 */
159 crypto_hash_sha512_init (&hs);
160 crypto_hash_sha512_update (&hs, (uint8_t*) sig, 64);
161 crypto_hash_sha512_update (&hs, (uint8_t*) purpose,
162 ntohl (purpose->size));
163 crypto_hash_sha512_final (&hs, hram);
164
165 /**
166 * Reduce the resulting scalar value
167 */
168 unsigned char hram_mod[64];
169 crypto_core_ed25519_scalar_reduce (hram_mod, hram);
170
171 /**
172 * Calculate
173 * S := r + hram * s mod L
174 */
175 crypto_core_ed25519_scalar_mul (tmp, hram_mod, priv->a);
176 crypto_core_ed25519_scalar_add (sig->s, tmp, r_mod);
177
178 sodium_memzero (r, sizeof (r));
179 sodium_memzero (r_mod, sizeof (r_mod));
180
181 return GNUNET_OK;
182}
183
184
185enum GNUNET_GenericReturnValue
186GNUNET_CRYPTO_edx25519_verify_ (
187 uint32_t purpose,
188 const struct GNUNET_CRYPTO_EccSignaturePurpose *validate,
189 const struct GNUNET_CRYPTO_Edx25519Signature *sig,
190 const struct GNUNET_CRYPTO_Edx25519PublicKey *pub)
191{
192 const unsigned char *m = (const void *) validate;
193 size_t mlen = ntohl (validate->size);
194 const unsigned char *s = (const void *) sig;
195
196 int res;
197
198 if (purpose != ntohl (validate->purpose))
199 return GNUNET_SYSERR; /* purpose mismatch */
200
201 res = crypto_sign_verify_detached (s, m, mlen, pub->q_y);
202 return (res == 0) ? GNUNET_OK : GNUNET_SYSERR;
203}
204
205
206/**
207 * Derive the 'h' value for key derivation, where
208 * 'h = H(P ∥ seed) mod n' and 'n' is the size of the cyclic subroup.
209 *
210 * @param pub public key for deriviation
211 * @param seed seed for key the deriviation
212 * @param seedsize the size of the seed
213 * @param n The value for the modulus 'n'
214 * @param[out] phc if not NULL, the output of H() will be written into
215 * return h_mod_n (allocated by this function)
216 */
217static gcry_mpi_t
218derive_h_mod_n (
219 const struct GNUNET_CRYPTO_Edx25519PublicKey *pub,
220 const void *seed,
221 size_t seedsize,
222 const gcry_mpi_t n,
223 struct GNUNET_HashCode *phc)
224{
225 static const char *const salt = "edx2559-derivation";
226 struct GNUNET_HashCode hc;
227 gcry_mpi_t h;
228 gcry_mpi_t h_mod_n;
229
230 if (NULL == phc)
231 phc = &hc;
232
233 GNUNET_CRYPTO_kdf (phc, sizeof(*phc),
234 salt, strlen (salt),
235 pub, sizeof(*pub),
236 seed, seedsize,
237 NULL, 0);
238
239 /* calculate h_mod_n = h % n */
240 GNUNET_CRYPTO_mpi_scan_unsigned (&h,
241 (unsigned char *) phc,
242 sizeof(*phc));
243 h_mod_n = gcry_mpi_new (256);
244 gcry_mpi_mod (h_mod_n, h, n);
245
246#ifdef CHECK_RARE_CASES
247 /**
248 * Note that the following cases would be problematic:
249 * 1.) h == 0 mod n
250 * 2.) h == 1 mod n
251 * 3.) [h] * P == E
252 * We assume that the probalities for these cases to occur are neglegible.
253 */
254 GNUNET_assert (! gcry_mpi_cmp_ui (h_mod_n, 0));
255 GNUNET_assert (! gcry_mpi_cmp_ui (h_mod_n, 1));
256#endif
257
258 gcry_mpi_release(h);
259 return h_mod_n;
260}
261
262
263void
264GNUNET_CRYPTO_edx25519_private_key_derive (
265 const struct GNUNET_CRYPTO_Edx25519PrivateKey *priv,
266 const void *seed,
267 size_t seedsize,
268 struct GNUNET_CRYPTO_Edx25519PrivateKey *result)
269{
270 struct GNUNET_CRYPTO_Edx25519PublicKey pub;
271 struct GNUNET_HashCode hc;
272 uint8_t a[32];
273 gcry_ctx_t ctx;
274 gcry_mpi_t h_mod_n;
275 gcry_mpi_t x;
276 gcry_mpi_t n;
277 gcry_mpi_t a1;
278 gcry_mpi_t a2;
279 gcry_mpi_t ap; // a'
280
281 GNUNET_CRYPTO_edx25519_key_get_public (priv, &pub);
282
283 /**
284 * Libsodium does not offer an API with arbitrary arithmetic.
285 * Hence we have to use libgcrypt here.
286 */
287 GNUNET_assert (0 == gcry_mpi_ec_new (&ctx, NULL, "Ed25519"));
288
289 /**
290 * Get our modulo
291 */
292 n = gcry_mpi_ec_get_mpi ("n", ctx, 1);
293 GNUNET_assert (NULL != n);
294
295 /**
296 * Get h mod n
297 */
298 h_mod_n = derive_h_mod_n (&pub,
299 seed,
300 seedsize,
301 n,
302 &hc);
303
304 /* Convert priv->a scalar to big endian for libgcrypt */
305 for (size_t i = 0; i < 32; i++)
306 a[i] = priv->a[31 - i];
307
308 /**
309 * dc now contains the private scalar "a".
310 * We carefully remove the clamping and derive a'.
311 * Calculate:
312 * a1 := a / 8
313 * a2 := h * a1 mod n
314 * a' := a2 * 8 mod n
315 */
316 GNUNET_CRYPTO_mpi_scan_unsigned (&x, a, sizeof(a)); // a
317 a1 = gcry_mpi_new (256);
318 gcry_mpi_t eight = gcry_mpi_set_ui (NULL, 8);
319 gcry_mpi_div (a1, NULL, x, eight, 0); // a1 := a / 8
320 a2 = gcry_mpi_new (256);
321 gcry_mpi_mulm (a2, h_mod_n, a1, n); // a2 := h * a1 mod n
322 ap = gcry_mpi_new (256);
323 gcry_mpi_mul (ap, a2, eight); // a' := a2 * 8
324
325#ifdef CHECK_RARE_CASES
326 /* The likelihood for a' == 0 or a' == 1 is neglegible */
327 GNUNET_assert (! gcry_mpi_cmp_ui (ap, 0));
328 GNUNET_assert (! gcry_mpi_cmp_ui (ap, 1));
329#endif
330
331 gcry_mpi_release (h_mod_n);
332 gcry_mpi_release (eight);
333 gcry_mpi_release (x);
334 gcry_mpi_release (n);
335 gcry_mpi_release (a1);
336 gcry_mpi_release (a2);
337 gcry_ctx_release (ctx);
338 GNUNET_CRYPTO_mpi_print_unsigned (a, sizeof(a), ap);
339 gcry_mpi_release (ap);
340
341 /**
342 * We hash the derived "h" parameter with the other half of the expanded
343 * private key (that is: priv->b). This ensures that for signature
344 * generation, the "R" is derived from the same derivation path as "h" and is
345 * not reused.
346 */
347 {
348 crypto_hash_sha256_state hs;
349 crypto_hash_sha256_init (&hs);
350 crypto_hash_sha256_update (&hs, priv->b, sizeof(priv->b));
351 crypto_hash_sha256_update (&hs, (unsigned char*) &hc, sizeof (hc));
352 crypto_hash_sha256_final (&hs, result->b);
353 }
354
355 /* Convert to little endian for libsodium */
356 for (size_t i = 0; i < 32; i++)
357 result->a[i] = a[31 - i];
358
359 sodium_memzero (a, sizeof(a));
360}
361
362
363void
364GNUNET_CRYPTO_edx25519_public_key_derive (
365 const struct GNUNET_CRYPTO_Edx25519PublicKey *pub,
366 const void *seed,
367 size_t seedsize,
368 struct GNUNET_CRYPTO_Edx25519PublicKey *result)
369{
370 gcry_ctx_t ctx;
371 gcry_mpi_t q_y;
372 gcry_mpi_t n;
373 gcry_mpi_t h_mod_n;
374 gcry_mpi_point_t q;
375 gcry_mpi_point_t v;
376
377 GNUNET_assert (0 == gcry_mpi_ec_new (&ctx, NULL, "Ed25519"));
378
379 /* obtain point 'q' from original public key. The provided 'q' is
380 compressed thus we first store it in the context and then get it
381 back as a (decompresssed) point. */
382 q_y = gcry_mpi_set_opaque_copy (NULL,
383 pub->q_y,
384 8 * sizeof(pub->q_y));
385 GNUNET_assert (NULL != q_y);
386 GNUNET_assert (0 == gcry_mpi_ec_set_mpi ("q", q_y, ctx));
387 gcry_mpi_release (q_y);
388 q = gcry_mpi_ec_get_point ("q", ctx, 0);
389 GNUNET_assert (q);
390
391 /**
392 * Get h mod n
393 */
394 n = gcry_mpi_ec_get_mpi ("n", ctx, 1);
395 GNUNET_assert (NULL != n);
396 GNUNET_assert (NULL != pub);
397 h_mod_n = derive_h_mod_n (pub,
398 seed,
399 seedsize,
400 n,
401 NULL /* We don't need hc here */);
402
403 /* calculate v = h_mod_n * q */
404 v = gcry_mpi_point_new (0);
405 gcry_mpi_ec_mul (v, h_mod_n, q, ctx);
406 gcry_mpi_release (h_mod_n);
407 gcry_mpi_release (n);
408 gcry_mpi_point_release (q);
409
410 /* convert point 'v' to public key that we return */
411 GNUNET_assert (0 == gcry_mpi_ec_set_point ("q", v, ctx));
412 gcry_mpi_point_release (v);
413 q_y = gcry_mpi_ec_get_mpi ("q@eddsa", ctx, 0);
414 GNUNET_assert (q_y);
415 GNUNET_CRYPTO_mpi_print_unsigned (result->q_y, sizeof(result->q_y), q_y);
416 gcry_mpi_release (q_y);
417 gcry_ctx_release (ctx);
418}
diff --git a/src/util/crypto_hkdf.c b/src/util/crypto_hkdf.c
index 4e4496819..838e37d8d 100644
--- a/src/util/crypto_hkdf.c
+++ b/src/util/crypto_hkdf.c
@@ -74,16 +74,21 @@
74 * @return HMAC, freed by caller via gcry_md_close/_reset 74 * @return HMAC, freed by caller via gcry_md_close/_reset
75 */ 75 */
76static const void * 76static const void *
77doHMAC (gcry_md_hd_t mac, const void *key, size_t key_len, const void *buf, 77doHMAC (gcry_md_hd_t mac,
78 const void *key,
79 size_t key_len,
80 const void *buf,
78 size_t buf_len) 81 size_t buf_len)
79{ 82{
80 if (GPG_ERR_NO_ERROR != gcry_md_setkey (mac, key, key_len)) 83 if (GPG_ERR_NO_ERROR !=
84 gcry_md_setkey (mac, key, key_len))
81 { 85 {
82 GNUNET_break (0); 86 GNUNET_break (0);
83 return NULL; 87 return NULL;
84 } 88 }
85 gcry_md_write (mac, buf, buf_len); 89 gcry_md_write (mac,
86 90 buf,
91 buf_len);
87 return (const void *) gcry_md_read (mac, 0); 92 return (const void *) gcry_md_read (mac, 0);
88} 93}
89 94
@@ -98,9 +103,13 @@ doHMAC (gcry_md_hd_t mac, const void *key, size_t key_len, const void *buf,
98 * @param prk result buffer (allocated by caller; at least gcry_md_dlen() bytes) 103 * @param prk result buffer (allocated by caller; at least gcry_md_dlen() bytes)
99 * @return #GNUNET_YES on success 104 * @return #GNUNET_YES on success
100 */ 105 */
101static int 106static enum GNUNET_GenericReturnValue
102getPRK (gcry_md_hd_t mac, const void *xts, size_t xts_len, const void *skm, 107getPRK (gcry_md_hd_t mac,
103 size_t skm_len, void *prk) 108 const void *xts,
109 size_t xts_len,
110 const void *skm,
111 size_t skm_len,
112 void *prk)
104{ 113{
105 const void *ret; 114 const void *ret;
106 size_t dlen; 115 size_t dlen;
@@ -114,9 +123,10 @@ getPRK (gcry_md_hd_t mac, const void *xts, size_t xts_len, const void *skm,
114 * salt - optional salt value (a non-secret random value); 123 * salt - optional salt value (a non-secret random value);
115 * if not provided, it is set to a string of HashLen zeros. */ 124 * if not provided, it is set to a string of HashLen zeros. */
116 125
117 if (xts_len == 0) 126 if (0 == xts_len)
118 { 127 {
119 char zero_salt[dlen]; 128 char zero_salt[dlen];
129
120 memset (zero_salt, 0, dlen); 130 memset (zero_salt, 0, dlen);
121 ret = doHMAC (mac, zero_salt, dlen, skm, skm_len); 131 ret = doHMAC (mac, zero_salt, dlen, skm, skm_len);
122 } 132 }
@@ -124,22 +134,23 @@ getPRK (gcry_md_hd_t mac, const void *xts, size_t xts_len, const void *skm,
124 { 134 {
125 ret = doHMAC (mac, xts, xts_len, skm, skm_len); 135 ret = doHMAC (mac, xts, xts_len, skm, skm_len);
126 } 136 }
127 if (ret == NULL) 137 if (NULL == ret)
128 return GNUNET_SYSERR; 138 return GNUNET_SYSERR;
129 GNUNET_memcpy (prk, ret, dlen); 139 GNUNET_memcpy (prk,
130 140 ret,
141 dlen);
131 return GNUNET_YES; 142 return GNUNET_YES;
132} 143}
133 144
134 145
135#if DEBUG_HKDF 146#if DEBUG_HKDF
136static void 147static void
137dump (const char *src, const void *p, unsigned int l) 148dump (const char *src,
149 const void *p,
150 unsigned int l)
138{ 151{
139 unsigned int i;
140
141 printf ("\n%s: ", src); 152 printf ("\n%s: ", src);
142 for (i = 0; i < l; i++) 153 for (unsigned int i = 0; i < l; i++)
143 { 154 {
144 printf ("%2x", (int) ((const unsigned char *) p)[i]); 155 printf ("%2x", (int) ((const unsigned char *) p)[i]);
145 } 156 }
@@ -150,23 +161,16 @@ dump (const char *src, const void *p, unsigned int l)
150#endif 161#endif
151 162
152 163
153/** 164enum GNUNET_GenericReturnValue
154 * @brief Derive key 165GNUNET_CRYPTO_hkdf_v (void *result,
155 * @param result buffer for the derived key, allocated by caller 166 size_t out_len,
156 * @param out_len desired length of the derived key 167 int xtr_algo,
157 * @param xtr_algo hash algorithm for the extraction phase, GCRY_MD_... 168 int prf_algo,
158 * @param prf_algo hash algorithm for the expansion phase, GCRY_MD_... 169 const void *xts,
159 * @param xts salt 170 size_t xts_len,
160 * @param xts_len length of @a xts 171 const void *skm,
161 * @param skm source key material 172 size_t skm_len,
162 * @param skm_len length of @a skm 173 va_list argp)
163 * @param argp va_list of void * & size_t pairs for context chunks
164 * @return #GNUNET_YES on success
165 */
166int
167GNUNET_CRYPTO_hkdf_v (void *result, size_t out_len, int xtr_algo, int prf_algo,
168 const void *xts, size_t xts_len, const void *skm,
169 size_t skm_len, va_list argp)
170{ 174{
171 gcry_md_hd_t xtr; 175 gcry_md_hd_t xtr;
172 gcry_md_hd_t prf; 176 gcry_md_hd_t prf;
@@ -186,10 +190,14 @@ GNUNET_CRYPTO_hkdf_v (void *result, size_t out_len, int xtr_algo, int prf_algo,
186 if (0 == k) 190 if (0 == k)
187 return GNUNET_SYSERR; 191 return GNUNET_SYSERR;
188 if (GPG_ERR_NO_ERROR != 192 if (GPG_ERR_NO_ERROR !=
189 gcry_md_open (&xtr, xtr_algo, GCRY_MD_FLAG_HMAC)) 193 gcry_md_open (&xtr,
194 xtr_algo,
195 GCRY_MD_FLAG_HMAC))
190 return GNUNET_SYSERR; 196 return GNUNET_SYSERR;
191 if (GPG_ERR_NO_ERROR != 197 if (GPG_ERR_NO_ERROR !=
192 gcry_md_open (&prf, prf_algo, GCRY_MD_FLAG_HMAC)) 198 gcry_md_open (&prf,
199 prf_algo,
200 GCRY_MD_FLAG_HMAC))
193 { 201 {
194 gcry_md_close (xtr); 202 gcry_md_close (xtr);
195 return GNUNET_SYSERR; 203 return GNUNET_SYSERR;
@@ -221,7 +229,8 @@ GNUNET_CRYPTO_hkdf_v (void *result, size_t out_len, int xtr_algo, int prf_algo,
221 } 229 }
222 230
223 memset (result, 0, out_len); 231 memset (result, 0, out_len);
224 if (getPRK (xtr, xts, xts_len, skm, skm_len, prk) != GNUNET_YES) 232 if (GNUNET_YES !=
233 getPRK (xtr, xts, xts_len, skm, skm_len, prk))
225 goto hkdf_error; 234 goto hkdf_error;
226#if DEBUG_HKDF 235#if DEBUG_HKDF
227 dump ("PRK", prk, xtr_len); 236 dump ("PRK", prk, xtr_len);
@@ -276,7 +285,7 @@ GNUNET_CRYPTO_hkdf_v (void *result, size_t out_len, int xtr_algo, int prf_algo,
276 dump ("K(i+1)", plain, plain_len); 285 dump ("K(i+1)", plain, plain_len);
277#endif 286#endif
278 hc = doHMAC (prf, prk, xtr_len, plain, plain_len); 287 hc = doHMAC (prf, prk, xtr_len, plain, plain_len);
279 if (hc == NULL) 288 if (NULL == hc)
280 { 289 {
281 GNUNET_free (plain); 290 GNUNET_free (plain);
282 goto hkdf_error; 291 goto hkdf_error;
@@ -327,32 +336,31 @@ hkdf_ok:
327} 336}
328 337
329 338
330/** 339enum GNUNET_GenericReturnValue
331 * @brief Derive key 340GNUNET_CRYPTO_hkdf (void *result,
332 * @param result buffer for the derived key, allocated by caller 341 size_t out_len,
333 * @param out_len desired length of the derived key 342 int xtr_algo,
334 * @param xtr_algo hash algorithm for the extraction phase, GCRY_MD_... 343 int prf_algo,
335 * @param prf_algo hash algorithm for the expansion phase, GCRY_MD_... 344 const void *xts,
336 * @param xts salt 345 size_t xts_len,
337 * @param xts_len length of @a xts 346 const void *skm,
338 * @param skm source key material
339 * @param skm_len length of @a skm
340 * @return #GNUNET_YES on success
341 */
342int
343GNUNET_CRYPTO_hkdf (void *result, size_t out_len, int xtr_algo, int prf_algo,
344 const void *xts, size_t xts_len, const void *skm,
345 size_t skm_len, ...) 347 size_t skm_len, ...)
346{ 348{
347 va_list argp; 349 va_list argp;
348 int ret; 350 enum GNUNET_GenericReturnValue ret;
349 351
350 va_start (argp, skm_len); 352 va_start (argp, skm_len);
351 ret = 353 ret =
352 GNUNET_CRYPTO_hkdf_v (result, out_len, xtr_algo, prf_algo, xts, xts_len, 354 GNUNET_CRYPTO_hkdf_v (result,
353 skm, skm_len, argp); 355 out_len,
356 xtr_algo,
357 prf_algo,
358 xts,
359 xts_len,
360 skm,
361 skm_len,
362 argp);
354 va_end (argp); 363 va_end (argp);
355
356 return ret; 364 return ret;
357} 365}
358 366
diff --git a/src/util/crypto_kdf.c b/src/util/crypto_kdf.c
index 0dc734549..f577e0f7a 100644
--- a/src/util/crypto_kdf.c
+++ b/src/util/crypto_kdf.c
@@ -32,18 +32,8 @@
32 32
33#define LOG(kind, ...) GNUNET_log_from (kind, "util-crypto-kdf", __VA_ARGS__) 33#define LOG(kind, ...) GNUNET_log_from (kind, "util-crypto-kdf", __VA_ARGS__)
34 34
35/** 35
36 * @brief Derive key 36enum GNUNET_GenericReturnValue
37 * @param result buffer for the derived key, allocated by caller
38 * @param out_len desired length of the derived key
39 * @param xts salt
40 * @param xts_len length of @a xts
41 * @param skm source key material
42 * @param skm_len length of @a skm
43 * @param argp va_list of void * & size_t pairs for context chunks
44 * @return #GNUNET_YES on success
45 */
46int
47GNUNET_CRYPTO_kdf_v (void *result, 37GNUNET_CRYPTO_kdf_v (void *result,
48 size_t out_len, 38 size_t out_len,
49 const void *xts, 39 const void *xts,
@@ -62,7 +52,7 @@ GNUNET_CRYPTO_kdf_v (void *result,
62 * hash function." 52 * hash function."
63 * 53 *
64 * http://eprint.iacr.org/2010/264 54 * http://eprint.iacr.org/2010/264
65 */// 55 */
66 return GNUNET_CRYPTO_hkdf_v (result, 56 return GNUNET_CRYPTO_hkdf_v (result,
67 out_len, 57 out_len,
68 GCRY_MD_SHA512, 58 GCRY_MD_SHA512,
@@ -75,18 +65,7 @@ GNUNET_CRYPTO_kdf_v (void *result,
75} 65}
76 66
77 67
78/** 68enum GNUNET_GenericReturnValue
79 * @brief Derive key
80 * @param result buffer for the derived key, allocated by caller
81 * @param out_len desired length of the derived key
82 * @param xts salt
83 * @param xts_len length of @a xts
84 * @param skm source key material
85 * @param skm_len length of @a skm
86 * @param ... void * & size_t pairs for context chunks
87 * @return #GNUNET_YES on success
88 */
89int
90GNUNET_CRYPTO_kdf (void *result, 69GNUNET_CRYPTO_kdf (void *result,
91 size_t out_len, 70 size_t out_len,
92 const void *xts, 71 const void *xts,
@@ -111,18 +90,6 @@ GNUNET_CRYPTO_kdf (void *result,
111} 90}
112 91
113 92
114/**
115 * Deterministically generate a pseudo-random number uniformly from the
116 * integers modulo a libgcrypt mpi.
117 *
118 * @param[out] r MPI value set to the FDH
119 * @param n MPI to work modulo
120 * @param xts salt
121 * @param xts_len length of @a xts
122 * @param skm source key material
123 * @param skm_len length of @a skm
124 * @param ctx context string
125 */
126void 93void
127GNUNET_CRYPTO_kdf_mod_mpi (gcry_mpi_t *r, 94GNUNET_CRYPTO_kdf_mod_mpi (gcry_mpi_t *r,
128 gcry_mpi_t n, 95 gcry_mpi_t n,
@@ -137,32 +104,34 @@ GNUNET_CRYPTO_kdf_mod_mpi (gcry_mpi_t *r,
137 104
138 nbits = gcry_mpi_get_nbits (n); 105 nbits = gcry_mpi_get_nbits (n);
139 /* GNUNET_assert (nbits > 512); */ 106 /* GNUNET_assert (nbits > 512); */
140
141 ctr = 0; 107 ctr = 0;
142 while (1) 108 while (1)
143 { 109 {
144 /* Ain't clear if n is always divisible by 8 */ 110 /* Ain't clear if n is always divisible by 8 */
145 uint8_t buf[ (nbits - 1) / 8 + 1 ]; 111 size_t bsize = (nbits - 1) / 8 + 1;
112 uint8_t buf[bsize];
146 uint16_t ctr_nbo = htons (ctr); 113 uint16_t ctr_nbo = htons (ctr);
147 114
148 rc = GNUNET_CRYPTO_kdf (buf, 115 rc = GNUNET_CRYPTO_kdf (buf,
149 sizeof(buf), 116 bsize,
150 xts, xts_len, 117 xts, xts_len,
151 skm, skm_len, 118 skm, skm_len,
152 ctx, strlen (ctx), 119 ctx, strlen (ctx),
153 &ctr_nbo, sizeof(ctr_nbo), 120 &ctr_nbo, sizeof(ctr_nbo),
154 NULL, 0); 121 NULL, 0);
155 GNUNET_assert (GNUNET_YES == rc); 122 GNUNET_assert (GNUNET_YES == rc);
156
157 rc = gcry_mpi_scan (r, 123 rc = gcry_mpi_scan (r,
158 GCRYMPI_FMT_USG, 124 GCRYMPI_FMT_USG,
159 (const unsigned char *) buf, 125 (const unsigned char *) buf,
160 sizeof(buf), 126 bsize,
161 &rsize); 127 &rsize);
162 GNUNET_assert (0 == rc); /* Allocation error? */ 128 GNUNET_assert (GPG_ERR_NO_ERROR == rc); /* Allocation error? */
163 129 GNUNET_assert (rsize == bsize);
164 gcry_mpi_clear_highbit (*r, nbits); 130 gcry_mpi_clear_highbit (*r,
165 GNUNET_assert (0 == gcry_mpi_test_bit (*r, nbits)); 131 nbits);
132 GNUNET_assert (0 ==
133 gcry_mpi_test_bit (*r,
134 nbits));
166 ++ctr; 135 ++ctr;
167 /* We reject this FDH if either *r > n and retry with another ctr */ 136 /* We reject this FDH if either *r > n and retry with another ctr */
168 if (0 > gcry_mpi_cmp (*r, n)) 137 if (0 > gcry_mpi_cmp (*r, n))
diff --git a/src/util/crypto_rsa.c b/src/util/crypto_rsa.c
index 43e6eedac..4b8e5a5ce 100644
--- a/src/util/crypto_rsa.c
+++ b/src/util/crypto_rsa.c
@@ -497,7 +497,8 @@ GNUNET_CRYPTO_rsa_public_key_decode (const char *buf,
497 * @return True if gcd(r,n) = 1, False means RSA key is malicious 497 * @return True if gcd(r,n) = 1, False means RSA key is malicious
498 */ 498 */
499static int 499static int
500rsa_gcd_validate (gcry_mpi_t r, gcry_mpi_t n) 500rsa_gcd_validate (gcry_mpi_t r,
501 gcry_mpi_t n)
501{ 502{
502 gcry_mpi_t g; 503 gcry_mpi_t g;
503 int t; 504 int t;
@@ -520,29 +521,34 @@ static struct RsaBlindingKey *
520rsa_blinding_key_derive (const struct GNUNET_CRYPTO_RsaPublicKey *pkey, 521rsa_blinding_key_derive (const struct GNUNET_CRYPTO_RsaPublicKey *pkey,
521 const struct GNUNET_CRYPTO_RsaBlindingKeySecret *bks) 522 const struct GNUNET_CRYPTO_RsaBlindingKeySecret *bks)
522{ 523{
523 char *xts = "Blinding KDF extractor HMAC key"; /* Trusts bks' randomness more */ 524 const char *xts = "Blinding KDF extractor HMAC key"; /* Trusts bks' randomness more */
524 struct RsaBlindingKey *blind; 525 struct RsaBlindingKey *blind;
525 gcry_mpi_t n; 526 gcry_mpi_t n;
526 527
527 blind = GNUNET_new (struct RsaBlindingKey); 528 blind = GNUNET_new (struct RsaBlindingKey);
528 GNUNET_assert (NULL != blind);
529 529
530 /* Extract the composite n from the RSA public key */ 530 /* Extract the composite n from the RSA public key */
531 GNUNET_assert (0 == key_from_sexp (&n, pkey->sexp, "rsa", "n")); 531 GNUNET_assert (0 ==
532 key_from_sexp (&n,
533 pkey->sexp,
534 "rsa",
535 "n"));
532 /* Assert that it at least looks like an RSA key */ 536 /* Assert that it at least looks like an RSA key */
533 GNUNET_assert (0 == gcry_mpi_get_flag (n, GCRYMPI_FLAG_OPAQUE)); 537 GNUNET_assert (0 ==
534 538 gcry_mpi_get_flag (n,
539 GCRYMPI_FLAG_OPAQUE));
535 GNUNET_CRYPTO_kdf_mod_mpi (&blind->r, 540 GNUNET_CRYPTO_kdf_mod_mpi (&blind->r,
536 n, 541 n,
537 xts, strlen (xts), 542 xts, strlen (xts),
538 bks, sizeof(*bks), 543 bks, sizeof(*bks),
539 "Blinding KDF"); 544 "Blinding KDF");
540 if (0 == rsa_gcd_validate (blind->r, n)) 545 if (0 == rsa_gcd_validate (blind->r,
546 n))
541 { 547 {
548 gcry_mpi_release (blind->r);
542 GNUNET_free (blind); 549 GNUNET_free (blind);
543 blind = NULL; 550 blind = NULL;
544 } 551 }
545
546 gcry_mpi_release (n); 552 gcry_mpi_release (n);
547 return blind; 553 return blind;
548} 554}
@@ -760,8 +766,9 @@ rsa_full_domain_hash (const struct GNUNET_CRYPTO_RsaPublicKey *pkey,
760 /* We key with the public denomination key as a homage to RSA-PSS by * 766 /* We key with the public denomination key as a homage to RSA-PSS by *
761 * Mihir Bellare and Phillip Rogaway. Doing this lowers the degree * 767 * Mihir Bellare and Phillip Rogaway. Doing this lowers the degree *
762 * of the hypothetical polyomial-time attack on RSA-KTI created by a * 768 * of the hypothetical polyomial-time attack on RSA-KTI created by a *
763 * polynomial-time one-more forgary attack. Yey seeding! */ 769 * polynomial-time one-more forgary attack. Yey seeding! */
764 xts_len = GNUNET_CRYPTO_rsa_public_key_encode (pkey, &xts); 770 xts_len = GNUNET_CRYPTO_rsa_public_key_encode (pkey,
771 &xts);
765 772
766 GNUNET_CRYPTO_kdf_mod_mpi (&r, 773 GNUNET_CRYPTO_kdf_mod_mpi (&r,
767 n, 774 n,
@@ -769,7 +776,6 @@ rsa_full_domain_hash (const struct GNUNET_CRYPTO_RsaPublicKey *pkey,
769 hash, sizeof(*hash), 776 hash, sizeof(*hash),
770 "RSA-FDA FTpsW!"); 777 "RSA-FDA FTpsW!");
771 GNUNET_free (xts); 778 GNUNET_free (xts);
772
773 ok = rsa_gcd_validate (r, n); 779 ok = rsa_gcd_validate (r, n);
774 gcry_mpi_release (n); 780 gcry_mpi_release (n);
775 if (ok) 781 if (ok)
diff --git a/src/util/test_crypto_eddsa.c b/src/util/test_crypto_eddsa.c
index 459619ff2..e9573a307 100644
--- a/src/util/test_crypto_eddsa.c
+++ b/src/util/test_crypto_eddsa.c
@@ -130,9 +130,11 @@ testDeriveSignVerify (void)
130 return GNUNET_SYSERR; 130 return GNUNET_SYSERR;
131 } 131 }
132 132
133 GNUNET_CRYPTO_eddsa_sign_with_scalar (&dpriv, 133 GNUNET_CRYPTO_eddsa_sign_derived (&key,
134 &purp, 134 "test-derive",
135 &sig); 135 "test-CTX",
136 &purp,
137 &sig);
136 if (GNUNET_SYSERR == 138 if (GNUNET_SYSERR ==
137 GNUNET_CRYPTO_eddsa_verify_ (GNUNET_SIGNATURE_PURPOSE_TEST, 139 GNUNET_CRYPTO_eddsa_verify_ (GNUNET_SIGNATURE_PURPOSE_TEST,
138 &purp, 140 &purp,
diff --git a/src/util/test_crypto_edx25519.c b/src/util/test_crypto_edx25519.c
new file mode 100644
index 000000000..ead6f0bb9
--- /dev/null
+++ b/src/util/test_crypto_edx25519.c
@@ -0,0 +1,326 @@
1/*
2 This file is part of GNUnet.
3 Copyright (C) 2022 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19
20 */
21/**
22 * @file util/test_crypto_edx25519.c
23 * @brief testcase for ECC public key crypto for edx25519
24 * @author Özgür Kesim
25 */
26#include "platform.h"
27#include "gnunet_util_lib.h"
28#include "gnunet_signatures.h"
29#include <gcrypt.h>
30
31#define ITER 25
32
33#define KEYFILE "/tmp/test-gnunet-crypto-edx25519.key"
34
35#define PERF GNUNET_YES
36
37
38static struct GNUNET_CRYPTO_Edx25519PrivateKey key;
39
40
41static int
42testSignVerify (void)
43{
44 struct GNUNET_CRYPTO_Edx25519Signature sig;
45 struct GNUNET_CRYPTO_EccSignaturePurpose purp;
46 struct GNUNET_CRYPTO_Edx25519PublicKey pkey;
47 struct GNUNET_TIME_Absolute start;
48 int ok = GNUNET_OK;
49
50 fprintf (stderr, "%s", "W");
51 GNUNET_CRYPTO_edx25519_key_get_public (&key,
52 &pkey);
53 start = GNUNET_TIME_absolute_get ();
54 purp.size = htonl (sizeof(struct GNUNET_CRYPTO_EccSignaturePurpose));
55 purp.purpose = htonl (GNUNET_SIGNATURE_PURPOSE_TEST);
56
57 for (unsigned int i = 0; i < ITER; i++)
58 {
59 fprintf (stderr, "%s", "."); fflush (stderr);
60 if (GNUNET_SYSERR == GNUNET_CRYPTO_edx25519_sign_ (&key,
61 &purp,
62 &sig))
63 {
64 fprintf (stderr,
65 "GNUNET_CRYPTO_edx25519_sign returned SYSERR\n");
66 ok = GNUNET_SYSERR;
67 continue;
68 }
69 if (GNUNET_SYSERR ==
70 GNUNET_CRYPTO_edx25519_verify_ (GNUNET_SIGNATURE_PURPOSE_TEST,
71 &purp,
72 &sig,
73 &pkey))
74 {
75 fprintf (stderr,
76 "GNUNET_CRYPTO_edx25519_verify failed!\n");
77 ok = GNUNET_SYSERR;
78 continue;
79 }
80 if (GNUNET_SYSERR !=
81 GNUNET_CRYPTO_edx25519_verify_ (
82 GNUNET_SIGNATURE_PURPOSE_TRANSPORT_PONG_OWN,
83 &purp,
84 &sig,
85 &pkey))
86 {
87 fprintf (stderr,
88 "GNUNET_CRYPTO_edx25519_verify failed to fail!\n");
89 ok = GNUNET_SYSERR;
90 continue;
91 }
92 }
93 fprintf (stderr, "\n");
94 printf ("%d EdDSA sign/verify operations %s\n",
95 ITER,
96 GNUNET_STRINGS_relative_time_to_string (
97 GNUNET_TIME_absolute_get_duration (start),
98 GNUNET_YES));
99 return ok;
100}
101
102
103static int
104testDeriveSignVerify (void)
105{
106 struct GNUNET_CRYPTO_EccSignaturePurpose purp;
107 struct GNUNET_CRYPTO_Edx25519Signature sig;
108 struct GNUNET_CRYPTO_Edx25519PrivateKey dkey;
109 struct GNUNET_CRYPTO_Edx25519PublicKey pub;
110 struct GNUNET_CRYPTO_Edx25519PublicKey dpub;
111 struct GNUNET_CRYPTO_Edx25519PublicKey dpub2;
112
113 GNUNET_CRYPTO_edx25519_key_get_public (&key, &pub);
114 GNUNET_CRYPTO_edx25519_private_key_derive (&key,
115 "test-derive",
116 sizeof("test-derive"),
117 &dkey);
118 GNUNET_CRYPTO_edx25519_public_key_derive (&pub,
119 "test-derive",
120 sizeof("test-derive"),
121 &dpub);
122 GNUNET_CRYPTO_edx25519_key_get_public (&dkey, &dpub2);
123
124 if (0 != GNUNET_memcmp (&dpub.q_y, &dpub2.q_y))
125 {
126 fprintf (stderr, "key deriviation failed\n");
127 return GNUNET_SYSERR;
128 }
129
130 purp.size = htonl (sizeof(struct GNUNET_CRYPTO_EccSignaturePurpose));
131 purp.purpose = htonl (GNUNET_SIGNATURE_PURPOSE_TEST);
132
133 GNUNET_CRYPTO_edx25519_sign_ (&dkey,
134 &purp,
135 &sig);
136
137 if (GNUNET_SYSERR ==
138 GNUNET_CRYPTO_edx25519_verify_ (GNUNET_SIGNATURE_PURPOSE_TEST,
139 &purp,
140 &sig,
141 &dpub))
142 {
143 fprintf (stderr,
144 "GNUNET_CRYPTO_edx25519_verify failed after derivation!\n");
145 return GNUNET_SYSERR;
146 }
147
148 if (GNUNET_SYSERR !=
149 GNUNET_CRYPTO_edx25519_verify_ (GNUNET_SIGNATURE_PURPOSE_TEST,
150 &purp,
151 &sig,
152 &pub))
153 {
154 fprintf (stderr,
155 "GNUNET_CRYPTO_edx25519_verify failed to fail after derivation!\n");
156 return GNUNET_SYSERR;
157 }
158
159 if (GNUNET_SYSERR !=
160 GNUNET_CRYPTO_edx25519_verify_ (
161 GNUNET_SIGNATURE_PURPOSE_TRANSPORT_PONG_OWN,
162 &purp,
163 &sig,
164 &dpub))
165 {
166 fprintf (stderr,
167 "GNUNET_CRYPTO_edx25519_verify failed to fail after derivation!\n");
168 return GNUNET_SYSERR;
169 }
170 return GNUNET_OK;
171}
172
173
174#if PERF
175static int
176testSignPerformance ()
177{
178 struct GNUNET_CRYPTO_EccSignaturePurpose purp;
179 struct GNUNET_CRYPTO_Edx25519Signature sig;
180 struct GNUNET_CRYPTO_Edx25519PublicKey pkey;
181 struct GNUNET_TIME_Absolute start;
182 int ok = GNUNET_OK;
183
184 purp.size = htonl (sizeof(struct GNUNET_CRYPTO_EccSignaturePurpose));
185 purp.purpose = htonl (GNUNET_SIGNATURE_PURPOSE_TEST);
186 fprintf (stderr, "%s", "W");
187 GNUNET_CRYPTO_edx25519_key_get_public (&key,
188 &pkey);
189 start = GNUNET_TIME_absolute_get ();
190 for (unsigned int i = 0; i < ITER; i++)
191 {
192 fprintf (stderr, "%s", ".");
193 fflush (stderr);
194 if (GNUNET_SYSERR ==
195 GNUNET_CRYPTO_edx25519_sign_ (&key,
196 &purp,
197 &sig))
198 {
199 fprintf (stderr, "%s", "GNUNET_CRYPTO_edx25519_sign returned SYSERR\n");
200 ok = GNUNET_SYSERR;
201 continue;
202 }
203 }
204 fprintf (stderr, "\n");
205 printf ("%d EdDSA sign operations %s\n",
206 ITER,
207 GNUNET_STRINGS_relative_time_to_string (
208 GNUNET_TIME_absolute_get_duration (start),
209 GNUNET_YES));
210 return ok;
211}
212
213
214#endif
215
216
217#if 0 /* not implemented */
218static int
219testCreateFromFile (void)
220{
221 struct GNUNET_CRYPTO_Edx25519PublicKey p1;
222 struct GNUNET_CRYPTO_Edx25519PublicKey p2;
223
224 /* do_create == GNUNET_YES and non-existing file MUST return GNUNET_YES */
225 GNUNET_assert (0 == unlink (KEYFILE) || ENOENT == errno);
226 GNUNET_assert (GNUNET_YES ==
227 GNUNET_CRYPTO_edx25519_key_from_file (KEYFILE,
228 GNUNET_YES,
229 &key));
230 GNUNET_CRYPTO_edx25519_key_get_public (&key,
231 &p1);
232
233 /* do_create == GNUNET_YES and _existing_ file MUST return GNUNET_NO */
234 GNUNET_assert (GNUNET_NO ==
235 GNUNET_CRYPTO_edx25519_key_from_file (KEYFILE,
236 GNUNET_YES,
237 &key));
238 GNUNET_CRYPTO_edx25519_key_get_public (&key,
239 &p2);
240 GNUNET_assert (0 ==
241 GNUNET_memcmp (&p1,
242 &p2));
243
244 /* do_create == GNUNET_NO and non-existing file MUST return GNUNET_SYSERR */
245 GNUNET_assert (0 == unlink (KEYFILE));
246 GNUNET_assert (GNUNET_SYSERR ==
247 GNUNET_CRYPTO_edx25519_key_from_file (KEYFILE,
248 GNUNET_NO,
249 &key));
250 return GNUNET_OK;
251}
252
253
254#endif
255
256
257static void
258perf_keygen (void)
259{
260 struct GNUNET_TIME_Absolute start;
261 struct GNUNET_CRYPTO_Edx25519PrivateKey pk;
262
263 fprintf (stderr, "%s", "W");
264 start = GNUNET_TIME_absolute_get ();
265 for (unsigned int i = 0; i < 10; i++)
266 {
267 fprintf (stderr, ".");
268 fflush (stderr);
269 GNUNET_CRYPTO_edx25519_key_create (&pk);
270 }
271 fprintf (stderr, "\n");
272 printf ("10 EdDSA keys created in %s\n",
273 GNUNET_STRINGS_relative_time_to_string (
274 GNUNET_TIME_absolute_get_duration (start), GNUNET_YES));
275}
276
277
278int
279main (int argc, char *argv[])
280{
281 int failure_count = 0;
282
283 if (! gcry_check_version ("1.6.0"))
284 {
285 fprintf (stderr,
286 "libgcrypt has not the expected version (version %s is required).\n",
287 "1.6.0");
288 return 0;
289 }
290 if (getenv ("GNUNET_GCRYPT_DEBUG"))
291 gcry_control (GCRYCTL_SET_DEBUG_FLAGS, 1u, 0);
292 GNUNET_log_setup ("test-crypto-edx25519",
293 "WARNING",
294 NULL);
295 GNUNET_CRYPTO_edx25519_key_create (&key);
296 if (GNUNET_OK != testDeriveSignVerify ())
297 {
298 failure_count++;
299 fprintf (stderr,
300 "\n\n%d TESTS FAILED!\n\n", failure_count);
301 return -1;
302 }
303#if PERF
304 if (GNUNET_OK != testSignPerformance ())
305 failure_count++;
306#endif
307 if (GNUNET_OK != testSignVerify ())
308 failure_count++;
309#if 0 /* not implemented */
310 if (GNUNET_OK != testCreateFromFile ())
311 failure_count++;
312#endif
313 perf_keygen ();
314
315 if (0 != failure_count)
316 {
317 fprintf (stderr,
318 "\n\n%d TESTS FAILED!\n\n",
319 failure_count);
320 return -1;
321 }
322 return 0;
323}
324
325
326/* end of test_crypto_edx25519.c */
diff --git a/src/util/time.c b/src/util/time.c
index 68a6937a0..cf072aebf 100644
--- a/src/util/time.c
+++ b/src/util/time.c
@@ -58,6 +58,22 @@ GNUNET_TIME_get_offset ()
58} 58}
59 59
60 60
61bool
62GNUNET_TIME_absolute_approx_eq (struct GNUNET_TIME_Absolute a1,
63 struct GNUNET_TIME_Absolute a2,
64 struct GNUNET_TIME_Relative t)
65{
66 struct GNUNET_TIME_Relative delta;
67
68 delta = GNUNET_TIME_relative_min (
69 GNUNET_TIME_absolute_get_difference (a1, a2),
70 GNUNET_TIME_absolute_get_difference (a2, a1));
71 return GNUNET_TIME_relative_cmp (delta,
72 <=,
73 t);
74}
75
76
61struct GNUNET_TIME_Timestamp 77struct GNUNET_TIME_Timestamp
62GNUNET_TIME_absolute_to_timestamp (struct GNUNET_TIME_Absolute at) 78GNUNET_TIME_absolute_to_timestamp (struct GNUNET_TIME_Absolute at)
63{ 79{
@@ -370,6 +386,20 @@ GNUNET_TIME_timestamp_min (struct GNUNET_TIME_Timestamp t1,
370} 386}
371 387
372 388
389struct GNUNET_TIME_Absolute
390GNUNET_TIME_absolute_round_down (struct GNUNET_TIME_Absolute at,
391 struct GNUNET_TIME_Relative rt)
392{
393 struct GNUNET_TIME_Absolute ret;
394
395 GNUNET_assert (! GNUNET_TIME_relative_is_zero (rt));
396 ret.abs_value_us
397 = at.abs_value_us
398 - at.abs_value_us % rt.rel_value_us;
399 return ret;
400}
401
402
373struct GNUNET_TIME_Relative 403struct GNUNET_TIME_Relative
374GNUNET_TIME_absolute_get_remaining (struct GNUNET_TIME_Absolute future) 404GNUNET_TIME_absolute_get_remaining (struct GNUNET_TIME_Absolute future)
375{ 405{