summaryrefslogtreecommitdiff
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)
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 @@
+Tue, 29 Mar 2022 10:11:15 +0200 (a9b18aa64)
+GNS: Do not fail on assertions in block processing - Martin Schanzenbach
+
+Sun, 27 Mar 2022 17:12:52 +0200 (ce38d1f6c)
+Edx25519 implemented - Özgür Kesim
+
+Sun, 27 Mar 2022 12:25:01 +0200 (1e4d62567)
+GNS: Sanitize APIs and align with LSD0001 - Martin Schanzenbach
+
+Sat, 26 Mar 2022 07:17:12 +0100 (e598ffe0a)
+add GNUNET_TIME_absolute_round_down() function - Christian Grothoff
+
+Fri, 25 Mar 2022 11:28:37 -0500 (c93cf9ae1)
+Remove bash-ism from get_version.sh - David Barksdale
+
+Mon, 21 Mar 2022 13:54:28 +0100 (4e95b59a6)
+NAMESTORE: Towards new transaction-based API - Martin Schanzenbach
+
+Mon, 21 Mar 2022 03:37:29 +0100 (ec8a825b0)
+add new approximate time cmp function - Christian Grothoff
+
+Fri, 18 Mar 2022 13:51:02 +0100 (4f3c8d098)
+configure.ac: use lo0 for the 3 listed BSD Systems. - Martin Schanzenbach
+
+Fri, 18 Mar 2022 08:52:01 +0100 (fcbabc6b6)
+GNS: Fix BOX handling in apex - Martin Schanzenbach
+
+Thu, 17 Mar 2022 23:24:19 +0100 (c37f01bc9)
+GNS: Fix BOX service port handling in NBO - Martin Schanzenbach
+
+Wed, 16 Mar 2022 18:53:22 +0100 (68ac68b70)
+NAMESTORE: Add record set blocking API - Martin Schanzenbach
+
+Tue, 15 Mar 2022 08:42:42 +0100 (cfd3db44a)
+NAMESTORE: Prevent storing records under invalid labels - Martin Schanzenbach
+
+Sat, 5 Mar 2022 08:58:51 +0100 (2087b149d)
+FS: Fix segfault in URI handling - Martin Schanzenbach
+
+Fri, 4 Mar 2022 23:40:34 +0100 (343177a0b)
+GNS: Fix including proxy test in make dist. Addresses issue #7182 - Martin Schanzenbach
+
Fri, 4 Mar 2022 14:17:37 +0100 (0e6b1f4a2)
NAMESTORE: Warn use of low relative expiration times - Martin Schanzenbach
diff --git a/configure.ac b/configure.ac
index 713817168..43d112572 100644
--- a/configure.ac
+++ b/configure.ac
@@ -20,7 +20,7 @@
#
#
AC_PREREQ([2.69])
-AC_INIT([gnunet], m4_esyscmd_s([contrib/get_version.sh]), [bug-gnunet@gnu.org])
+AC_INIT([gnunet], m4_esyscmd_s([sh contrib/get_version.sh]), [bug-gnunet@gnu.org])
AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_MACRO_DIRS([m4])
@@ -128,6 +128,7 @@ AS_CASE(["$host_os"],
[*freebsd*],
[CFLAGS="-D_THREAD_SAFE $CFLAGS"
build_target="freebsd"
+ DEFAULT_INTERFACE="\"lo0\""
xbsd="yes"
LIBPREFIX=
DLLDIR=lib
@@ -135,10 +136,11 @@ AS_CASE(["$host_os"],
],
[*openbsd*],
[# libc needs to be linked explicitly
- LDFLAGS="$LDFLAGS -Wl -lc"
+ LDFLAGS="$OLD_LDFLAGS -lc"
# and PIC has to be enabled
CFLAGS="-fPIC $CFLAGS"
build_target="openbsd"
+ DEFAULT_INTERFACE="\"lo0\""
xbsd="yes"
LIBPREFIX=
DLLDIR=lib
@@ -146,6 +148,7 @@ AS_CASE(["$host_os"],
],
[*netbsd*],
[build_target="netbsd"
+ DEFAULT_INTERFACE="\"lo0\""
xbsd="yes"
LIBPREFIX=
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 @@
-#!/bin/bash
+#!/bin/sh
# Gets the version number from git, or from the contents of .version
VERSION=
if test -f ".version"
then
VERSION=$(cat .version)
fi
-if test "x$VERSION" = "x" -a -d "./.git"
+if test -d "./.git"
then
VERSION=$(git describe --tags)
- VERSION=${VERSION:1:${#VERSION}}
+ VERSION=${VERSION#v}
echo $VERSION > .version
fi
if test "x$VERSION" = "x"
then
VERSION="unknown"
fi
-echo -n "$VERSION"
+echo "$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
src/arm/gnunet-arm.c
src/arm/gnunet-service-arm.c
src/arm/mockup-service.c
+src/ats-tool/gnunet-ats.c
src/ats/ats_api_connectivity.c
src/ats/ats_api_performance.c
src/ats/ats_api_scanner.c
src/ats/ats_api_scheduling.c
src/ats/gnunet-ats-solver-eval.c
-src/ats/gnunet-service-ats_addresses.c
src/ats/gnunet-service-ats.c
+src/ats/gnunet-service-ats_addresses.c
src/ats/gnunet-service-ats_connectivity.c
src/ats/gnunet-service-ats_normalization.c
src/ats/gnunet-service-ats_performance.c
@@ -25,7 +26,6 @@ src/ats/gnunet-service-ats_preferences.c
src/ats/gnunet-service-ats_reservations.c
src/ats/gnunet-service-ats_scheduling.c
src/ats/plugin_ats_proportional.c
-src/ats-tool/gnunet-ats.c
src/auction/gnunet-auction-create.c
src/auction/gnunet-auction-info.c
src/auction/gnunet-auction-join.c
@@ -43,8 +43,8 @@ src/cadet/cadet_api_list_peers.c
src/cadet/cadet_api_list_tunnels.c
src/cadet/cadet_test_lib.c
src/cadet/desirability_table.c
-src/cadet/gnunet-cadet.c
src/cadet/gnunet-cadet-profiler.c
+src/cadet/gnunet-cadet.c
src/cadet/gnunet-service-cadet.c
src/cadet/gnunet-service-cadet_channel.c
src/cadet/gnunet-service-cadet_connection.c
@@ -60,15 +60,15 @@ src/consensus/gnunet-service-consensus.c
src/consensus/plugin_block_consensus.c
src/conversation/conversation_api.c
src/conversation/conversation_api_call.c
-src/conversation/gnunet-conversation.c
src/conversation/gnunet-conversation-test.c
-src/conversation/gnunet_gst.c
-src/conversation/gnunet_gst_test.c
-src/conversation/gnunet-helper-audio-playback.c
+src/conversation/gnunet-conversation.c
src/conversation/gnunet-helper-audio-playback-gst.c
-src/conversation/gnunet-helper-audio-record.c
+src/conversation/gnunet-helper-audio-playback.c
src/conversation/gnunet-helper-audio-record-gst.c
+src/conversation/gnunet-helper-audio-record.c
src/conversation/gnunet-service-conversation.c
+src/conversation/gnunet_gst.c
+src/conversation/gnunet_gst_test.c
src/conversation/microphone.c
src/conversation/plugin_gnsrecord_conversation.c
src/conversation/speaker.c
@@ -99,13 +99,13 @@ src/dht/dht_test_lib.c
src/dht/gnunet-dht-get.c
src/dht/gnunet-dht-hello.c
src/dht/gnunet-dht-monitor.c
-src/dht/gnunet_dht_profiler.c
src/dht/gnunet-dht-put.c
src/dht/gnunet-service-dht.c
src/dht/gnunet-service-dht_clients.c
src/dht/gnunet-service-dht_datacache.c
src/dht/gnunet-service-dht_neighbours.c
src/dht/gnunet-service-dht_routing.c
+src/dht/gnunet_dht_profiler.c
src/dht/plugin_block_dht.c
src/dhtu/plugin_dhtu_gnunet.c
src/dhtu/plugin_dhtu_ip.c
@@ -143,8 +143,8 @@ src/fs/gnunet-auto-share.c
src/fs/gnunet-daemon-fsprofiler.c
src/fs/gnunet-directory.c
src/fs/gnunet-download.c
-src/fs/gnunet-fs.c
src/fs/gnunet-fs-profiler.c
+src/fs/gnunet-fs.c
src/fs/gnunet-helper-fs-publish.c
src/fs/gnunet-publish.c
src/fs/gnunet-search.c
@@ -164,9 +164,9 @@ src/gns/gns_tld_api.c
src/gns/gnunet-bcd.c
src/gns/gnunet-dns2gns.c
src/gns/gnunet-gns-benchmark.c
-src/gns/gnunet-gns.c
src/gns/gnunet-gns-import.c
src/gns/gnunet-gns-proxy.c
+src/gns/gnunet-gns.c
src/gns/gnunet-service-gns.c
src/gns/gnunet-service-gns_interceptor.c
src/gns/gnunet-service-gns_resolver.c
@@ -184,9 +184,9 @@ src/gnsrecord/json_gnsrecord.c
src/gnsrecord/plugin_gnsrecord_dns.c
src/hello/address.c
src/hello/gnunet-hello.c
-src/hello/hello.c
src/hello/hello-ng.c
src/hello/hello-uri.c
+src/hello/hello.c
src/hostlist/gnunet-daemon-hostlist.c
src/hostlist/gnunet-daemon-hostlist_client.c
src/hostlist/gnunet-daemon-hostlist_server.c
@@ -202,8 +202,8 @@ src/json/json_helper.c
src/json/json_mhd.c
src/json/json_pack.c
src/messenger/gnunet-messenger.c
-src/messenger/gnunet-service-messenger_basement.c
src/messenger/gnunet-service-messenger.c
+src/messenger/gnunet-service-messenger_basement.c
src/messenger/gnunet-service-messenger_ego_store.c
src/messenger/gnunet-service-messenger_handle.c
src/messenger/gnunet-service-messenger_list_handles.c
@@ -243,8 +243,8 @@ src/namecache/namecache_api.c
src/namecache/plugin_namecache_flat.c
src/namecache/plugin_namecache_postgres.c
src/namecache/plugin_namecache_sqlite.c
-src/namestore/gnunet-namestore.c
src/namestore/gnunet-namestore-fcfsd.c
+src/namestore/gnunet-namestore.c
src/namestore/gnunet-service-namestore.c
src/namestore/gnunet-zoneimport.c
src/namestore/namestore_api.c
@@ -270,17 +270,17 @@ src/nat/gnunet-service-nat_mini.c
src/nat/gnunet-service-nat_stun.c
src/nat/nat_api.c
src/nat/nat_api_stun.c
-src/nse/gnunet-nse.c
src/nse/gnunet-nse-profiler.c
+src/nse/gnunet-nse.c
src/nse/gnunet-service-nse.c
src/nse/nse_api.c
src/nt/nt.c
-src/peerinfo/gnunet-service-peerinfo.c
-src/peerinfo/peerinfo_api.c
-src/peerinfo/peerinfo_api_notify.c
src/peerinfo-tool/gnunet-peerinfo.c
src/peerinfo-tool/gnunet-peerinfo_plugins.c
src/peerinfo-tool/plugin_rest_peerinfo.c
+src/peerinfo/gnunet-service-peerinfo.c
+src/peerinfo/peerinfo_api.c
+src/peerinfo/peerinfo_api_notify.c
src/peerstore/gnunet-peerstore.c
src/peerstore/gnunet-service-peerstore.c
src/peerstore/peerstore_api.c
@@ -332,27 +332,27 @@ src/rest/gnunet-rest-server.c
src/rest/plugin_rest_config.c
src/rest/plugin_rest_copying.c
src/rest/rest.c
-src/revocation/gnunet-revocation.c
src/revocation/gnunet-revocation-tvg.c
+src/revocation/gnunet-revocation.c
src/revocation/gnunet-service-revocation.c
src/revocation/plugin_block_revocation.c
src/revocation/revocation_api.c
-src/rps/gnunet-rps.c
src/rps/gnunet-rps-profiler.c
+src/rps/gnunet-rps.c
src/rps/gnunet-service-rps.c
src/rps/gnunet-service-rps_custommap.c
src/rps/gnunet-service-rps_sampler.c
src/rps/gnunet-service-rps_sampler_elem.c
src/rps/gnunet-service-rps_view.c
-src/rps/rps_api.c
src/rps/rps-sampler_client.c
src/rps/rps-sampler_common.c
src/rps/rps-test_util.c
+src/rps/rps_api.c
src/scalarproduct/gnunet-scalarproduct.c
-src/scalarproduct/gnunet-service-scalarproduct_alice.c
-src/scalarproduct/gnunet-service-scalarproduct_bob.c
src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c
src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c
+src/scalarproduct/gnunet-service-scalarproduct_alice.c
+src/scalarproduct/gnunet-service-scalarproduct_bob.c
src/scalarproduct/scalarproduct_api.c
src/secretsharing/gnunet-secretsharing-profiler.c
src/secretsharing/gnunet-service-secretsharing.c
@@ -366,12 +366,12 @@ src/set/gnunet-set-ibf-profiler.c
src/set/gnunet-set-profiler.c
src/set/ibf.c
src/set/ibf_sim.c
+src/set/plugin_block_set_test.c
+src/set/set_api.c
src/seti/gnunet-service-seti.c
src/seti/gnunet-seti-profiler.c
src/seti/plugin_block_seti_test.c
src/seti/seti_api.c
-src/set/plugin_block_set_test.c
-src/set/set_api.c
src/setu/gnunet-service-setu.c
src/setu/gnunet-service-setu_strata_estimator.c
src/setu/gnunet-setu-ibf-profiler.c
@@ -390,15 +390,16 @@ src/statistics/gnunet-statistics.c
src/statistics/statistics_api.c
src/template/gnunet-service-template.c
src/template/gnunet-template.c
+src/testbed-logger/gnunet-service-testbed-logger.c
+src/testbed-logger/testbed_logger_api.c
src/testbed/generate-underlay-topology.c
src/testbed/gnunet-daemon-latency-logger.c
src/testbed/gnunet-daemon-testbed-blacklist.c
src/testbed/gnunet-daemon-testbed-underlay.c
src/testbed/gnunet-helper-testbed.c
-src/testbed/gnunet_mpi_test.c
src/testbed/gnunet-service-test-barriers.c
-src/testbed/gnunet-service-testbed_barriers.c
src/testbed/gnunet-service-testbed.c
+src/testbed/gnunet-service-testbed_barriers.c
src/testbed/gnunet-service-testbed_cache.c
src/testbed/gnunet-service-testbed_connectionpool.c
src/testbed/gnunet-service-testbed_cpustatus.c
@@ -407,23 +408,23 @@ src/testbed/gnunet-service-testbed_meminfo.c
src/testbed/gnunet-service-testbed_oc.c
src/testbed/gnunet-service-testbed_peers.c
src/testbed/gnunet-testbed-profiler.c
-src/testbed-logger/gnunet-service-testbed-logger.c
-src/testbed-logger/testbed_logger_api.c
-src/testbed/testbed_api_barriers.c
+src/testbed/gnunet_mpi_test.c
src/testbed/testbed_api.c
+src/testbed/testbed_api_barriers.c
src/testbed/testbed_api_hosts.c
src/testbed/testbed_api_operations.c
src/testbed/testbed_api_peers.c
src/testbed/testbed_api_sd.c
src/testbed/testbed_api_services.c
src/testbed/testbed_api_statistics.c
-src/testbed/testbed_api_testbed.c
src/testbed/testbed_api_test.c
+src/testbed/testbed_api_testbed.c
src/testbed/testbed_api_topology.c
src/testbed/testbed_api_underlay.c
src/testing/gnunet-cmds-helper.c
src/testing/gnunet-testing.c
src/testing/list-keys.c
+src/testing/testing.c
src/testing/testing_api_cmd_batch.c
src/testing/testing_api_cmd_block_until_external_trigger.c
src/testing/testing_api_cmd_end.c
@@ -439,41 +440,51 @@ src/testing/testing_api_cmd_system_create.c
src/testing/testing_api_cmd_system_destroy.c
src/testing/testing_api_loop.c
src/testing/testing_api_traits.c
-src/testing/testing.c
src/topology/friends.c
src/topology/gnunet-daemon-topology.c
src/transport/gnunet-communicator-tcp.c
src/transport/gnunet-communicator-udp.c
src/transport/gnunet-communicator-unix.c
src/transport/gnunet-helper-transport-bluetooth.c
-src/transport/gnunet-helper-transport-wlan.c
src/transport/gnunet-helper-transport-wlan-dummy.c
+src/transport/gnunet-helper-transport-wlan.c
src/transport/gnunet-service-tng.c
-src/transport/gnunet-service-transport_ats.c
src/transport/gnunet-service-transport.c
+src/transport/gnunet-service-transport_ats.c
src/transport/gnunet-service-transport_hello.c
src/transport/gnunet-service-transport_manipulation.c
src/transport/gnunet-service-transport_neighbours.c
src/transport/gnunet-service-transport_plugins.c
src/transport/gnunet-service-transport_validation.c
-src/transport/gnunet-transport.c
src/transport/gnunet-transport-profiler.c
src/transport/gnunet-transport-wlan-receiver.c
src/transport/gnunet-transport-wlan-sender.c
+src/transport/gnunet-transport.c
src/transport/plugin_transport_http_client.c
src/transport/plugin_transport_http_common.c
src/transport/plugin_transport_http_server.c
src/transport/plugin_transport_smtp.c
src/transport/plugin_transport_tcp.c
src/transport/plugin_transport_template.c
-src/transport/plugin_transport_udp_broadcasting.c
src/transport/plugin_transport_udp.c
+src/transport/plugin_transport_udp_broadcasting.c
src/transport/plugin_transport_unix.c
src/transport/plugin_transport_wlan.c
src/transport/tcp_connection_legacy.c
src/transport/tcp_server_legacy.c
src/transport/tcp_server_mst_legacy.c
src/transport/tcp_service_legacy.c
+src/transport/transport-testing-communicator.c
+src/transport/transport-testing-filenames.c
+src/transport/transport-testing-filenames2.c
+src/transport/transport-testing-loggers.c
+src/transport/transport-testing-loggers2.c
+src/transport/transport-testing-main.c
+src/transport/transport-testing-main2.c
+src/transport/transport-testing-send.c
+src/transport/transport-testing-send2.c
+src/transport/transport-testing.c
+src/transport/transport-testing2.c
src/transport/transport_api2_application.c
src/transport/transport_api2_communication.c
src/transport/transport_api2_core.c
@@ -492,17 +503,6 @@ src/transport/transport_api_monitor_peers.c
src/transport/transport_api_monitor_plugins.c
src/transport/transport_api_offer_hello.c
src/transport/transport_api_traits.c
-src/transport/transport-testing2.c
-src/transport/transport-testing.c
-src/transport/transport-testing-communicator.c
-src/transport/transport-testing-filenames2.c
-src/transport/transport-testing-filenames.c
-src/transport/transport-testing-loggers2.c
-src/transport/transport-testing-loggers.c
-src/transport/transport-testing-main2.c
-src/transport/transport-testing-main.c
-src/transport/transport-testing-send2.c
-src/transport/transport-testing-send.c
src/util/bandwidth.c
src/util/benchmark.c
src/util/bio.c
@@ -518,8 +518,8 @@ src/util/consttime_memcmp.c
src/util/container_bloomfilter.c
src/util/container_heap.c
src/util/container_meta_data.c
-src/util/container_multihashmap32.c
src/util/container_multihashmap.c
+src/util/container_multihashmap32.c
src/util/container_multipeermap.c
src/util/container_multishortmap.c
src/util/container_multiuuidmap.c
@@ -530,6 +530,7 @@ src/util/crypto_ecc.c
src/util/crypto_ecc_dlog.c
src/util/crypto_ecc_gnsrecord.c
src/util/crypto_ecc_setup.c
+src/util/crypto_edx25519.c
src/util/crypto_hash.c
src/util/crypto_hash_file.c
src/util/crypto_hkdf.c
@@ -546,8 +547,8 @@ src/util/dnsstub.c
src/util/getopt.c
src/util/getopt_helpers.c
src/util/gnunet-base32.c
-src/util/gnunet-config.c
src/util/gnunet-config-diff.c
+src/util/gnunet-config.c
src/util/gnunet-crypto-tvg.c
src/util/gnunet-ecc.c
src/util/gnunet-qr.c
@@ -585,8 +586,8 @@ src/vpn/gnunet-helper-vpn.c
src/vpn/gnunet-service-vpn.c
src/vpn/gnunet-vpn.c
src/vpn/vpn_api.c
-src/zonemaster/gnunet-service-zonemaster.c
src/zonemaster/gnunet-service-zonemaster-monitor.c
+src/zonemaster/gnunet-service-zonemaster.c
src/fs/fs_api.h
src/include/gnunet_json_lib.h
src/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 ""
msgstr ""
"Project-Id-Version: gnunet 0.10.1\n"
"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
-"POT-Creation-Date: 2022-03-04 22:23+0100\n"
+"POT-Creation-Date: 2022-04-01 08:42+0200\n"
"PO-Revision-Date: 2015-03-08 16:16+0100\n"
"Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com>\n"
"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
@@ -21,7 +21,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 1.7.4\n"
-#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1254
+#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1245
#, fuzzy, c-format
msgid "Ego `%s' not known to identity service\n"
msgstr "`%s': unbekannter Dienst: %s\n"
@@ -2103,21 +2103,6 @@ msgstr ""
msgid "Measure quality and performance of the DHT service."
msgstr ""
-#: src/dht/plugin_block_dht.c:404
-#, fuzzy, c-format
-msgid "Block not of type %u\n"
-msgstr "Kein Transport des Typs %d bekannt.\n"
-
-#: src/dht/plugin_block_dht.c:413
-#, c-format
-msgid "Size mismatch for block with type %u\n"
-msgstr ""
-
-#: src/dht/plugin_block_dht.c:424
-#, c-format
-msgid "Block of type %u is malformed\n"
-msgstr ""
-
#: src/dns/gnunet-dns-monitor.c:371 src/dns/gnunet-dns-monitor.c:376
msgid "only monitor DNS queries"
msgstr ""
@@ -2850,20 +2835,20 @@ msgstr ""
msgid "LOC URI malformed (signature failed validation)"
msgstr ""
-#: src/fs/fs_uri.c:652
+#: src/fs/fs_uri.c:653
#, fuzzy
msgid "invalid argument"
msgstr "Ungültiges Argument »%s«\n"
-#: src/fs/fs_uri.c:671
+#: src/fs/fs_uri.c:673
msgid "Unrecognized URI type"
msgstr ""
-#: src/fs/fs_uri.c:1075 src/fs/fs_uri.c:1102
+#: src/fs/fs_uri.c:1077 src/fs/fs_uri.c:1104
msgid "No keywords specified!\n"
msgstr "Keine Schlüsselwörter angegeben!\n"
-#: src/fs/fs_uri.c:1108
+#: src/fs/fs_uri.c:1110
msgid "Number of double-quotes not balanced!\n"
msgstr ""
@@ -3606,99 +3591,99 @@ msgstr "# dht Anfragen weitergeleitet"
msgid "# query plan entries"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:329
+#: src/fs/gnunet-service-fs_pr.c:330
#, fuzzy
msgid "# Pending requests created"
msgstr "# dht Anfragen weitergeleitet"
-#: src/fs/gnunet-service-fs_pr.c:421 src/fs/gnunet-service-fs_pr.c:658
+#: src/fs/gnunet-service-fs_pr.c:422 src/fs/gnunet-service-fs_pr.c:662
#, fuzzy
msgid "# Pending requests active"
msgstr "# Client Trace-Anfragen empfangen"
-#: src/fs/gnunet-service-fs_pr.c:838
+#: src/fs/gnunet-service-fs_pr.c:837
#, fuzzy
msgid "# replies received and matched"
msgstr "# Bytes empfangen über TCP"
-#: src/fs/gnunet-service-fs_pr.c:916
+#: src/fs/gnunet-service-fs_pr.c:911
msgid "# results found locally"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1050
+#: src/fs/gnunet-service-fs_pr.c:1045
msgid "# Datastore `PUT' failures"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1079
+#: src/fs/gnunet-service-fs_pr.c:1074
#, fuzzy
msgid "# storage requests dropped due to high load"
msgstr "# Knotenankündigungen empfangen"
-#: src/fs/gnunet-service-fs_pr.c:1118
+#: src/fs/gnunet-service-fs_pr.c:1113
#, fuzzy
msgid "# Replies received from DHT"
msgstr "# Bytes empfangen über HTTP"
-#: src/fs/gnunet-service-fs_pr.c:1259
+#: src/fs/gnunet-service-fs_pr.c:1268
#, fuzzy
msgid "# Replies received from CADET"
msgstr "# Bytes empfangen über HTTP"
-#: src/fs/gnunet-service-fs_pr.c:1313
+#: src/fs/gnunet-service-fs_pr.c:1323
#, c-format
msgid "Datastore lookup already took %s!\n"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1334
+#: src/fs/gnunet-service-fs_pr.c:1344
#, c-format
msgid "On-demand lookup already took %s!\n"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1401
+#: src/fs/gnunet-service-fs_pr.c:1411
msgid "# requested DBLOCK or IBLOCK not found"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1463
+#: src/fs/gnunet-service-fs_pr.c:1473
msgid "# Datastore lookups concluded (error queueing)"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1518
+#: src/fs/gnunet-service-fs_pr.c:1528
msgid "# Datastore lookups concluded (no results)"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1533
+#: src/fs/gnunet-service-fs_pr.c:1543
msgid "# Datastore lookups concluded (seen all)"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1556
+#: src/fs/gnunet-service-fs_pr.c:1566
msgid "# Datastore lookups aborted (more than MAX_RESULTS)"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1573
+#: src/fs/gnunet-service-fs_pr.c:1583
msgid "# on-demand blocks matched requests"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1594
+#: src/fs/gnunet-service-fs_pr.c:1604
msgid "# on-demand lookups performed successfully"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1600
+#: src/fs/gnunet-service-fs_pr.c:1610
msgid "# on-demand lookups failed"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1641
+#: src/fs/gnunet-service-fs_pr.c:1656
msgid "# Datastore lookups concluded (found last result)"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1654
+#: src/fs/gnunet-service-fs_pr.c:1669
msgid "# Datastore lookups concluded (load too high)"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1705
+#: src/fs/gnunet-service-fs_pr.c:1720
msgid "# Datastore lookups initiated"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1755
+#: src/fs/gnunet-service-fs_pr.c:1784
#, fuzzy
msgid "# GAP PUT messages received"
msgstr "# verschlüsselter PONG Nachrichten empfangen"
@@ -4016,65 +4001,65 @@ msgstr "Fehler beim Konvertieren von Parametern in URI!\n"
msgid "Failed to connect to the DNS service!\n"
msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
-#: src/gns/gnunet-service-gns_resolver.c:659
+#: src/gns/gnunet-service-gns_resolver.c:672
#, c-format
msgid "Protocol `%s' unknown, skipping labels.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:671
+#: src/gns/gnunet-service-gns_resolver.c:684
#, c-format
msgid "Service `%s' unknown for protocol `%s', trying as number.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:677
+#: src/gns/gnunet-service-gns_resolver.c:690
#, fuzzy, c-format
msgid "Service `%s' not a port, skipping service labels.\n"
msgstr "Kommando `%s' wurde nicht gefunden!\n"
-#: src/gns/gnunet-service-gns_resolver.c:891
+#: src/gns/gnunet-service-gns_resolver.c:904
#, fuzzy
msgid "Failed to parse DNS response\n"
msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n"
-#: src/gns/gnunet-service-gns_resolver.c:1082
+#: src/gns/gnunet-service-gns_resolver.c:1095
#, c-format
msgid "Skipping record of unsupported type %d\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1859
+#: src/gns/gnunet-service-gns_resolver.c:1872
#, c-format
msgid "Name `%s' cannot be converted to IDNA."
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1874
+#: src/gns/gnunet-service-gns_resolver.c:1887
#, c-format
msgid "GNS lookup resulted in DNS name that is too long (`%s')\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1914
+#: src/gns/gnunet-service-gns_resolver.c:1927
#, fuzzy, c-format
msgid "GNS lookup failed (zero records found for `%s')\n"
msgstr "Dienst `%s' konnte nicht ordentlich entladen werden!\n"
-#: src/gns/gnunet-service-gns_resolver.c:2312
+#: src/gns/gnunet-service-gns_resolver.c:2329
msgid "Unable to process critical delegation record\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2317
+#: src/gns/gnunet-service-gns_resolver.c:2334
msgid "GNS lookup recursion failed (no delegation record found)\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2340
+#: src/gns/gnunet-service-gns_resolver.c:2357
#, fuzzy, c-format
msgid "Failed to cache GNS resolution: %s\n"
msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
-#: src/gns/gnunet-service-gns_resolver.c:2505
+#: src/gns/gnunet-service-gns_resolver.c:2522
#, c-format
msgid "GNS namecache returned empty result for `%s'\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2652
+#: src/gns/gnunet-service-gns_resolver.c:2669
#, c-format
msgid "Zone %s was revoked, resolution fails\n"
msgstr ""
@@ -4117,31 +4102,39 @@ msgstr "Fehler beim Speichern der Konfigurationsdatei `%s':"
msgid "Gns REST API initialized\n"
msgstr " Verbindung fehlgeschlagen\n"
-#: src/gnsrecord/gnsrecord_misc.c:448
+#: src/gnsrecord/gnsrecord_misc.c:52
+msgid "Label is NULL which is not allowed\n"
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:57
+msgid "Label contains `.' which is not allowed\n"
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:464
msgid "Zone delegation record not allowed in apex."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:456
+#: src/gnsrecord/gnsrecord_misc.c:472
msgid "Zone delegation record set contains mutually exclusive records."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:466
+#: src/gnsrecord/gnsrecord_misc.c:482
msgid "Multiple REDIRECT records."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:475 src/gnsrecord/gnsrecord_misc.c:501
+#: src/gnsrecord/gnsrecord_misc.c:491 src/gnsrecord/gnsrecord_misc.c:517
msgid "Redirection record set conains mutually exclusive records."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:482
+#: src/gnsrecord/gnsrecord_misc.c:498
msgid "Redirection records not allowed in apex."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:493
+#: src/gnsrecord/gnsrecord_misc.c:509
msgid "Redirection records not allowed in apex.."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:515
+#: src/gnsrecord/gnsrecord_misc.c:531
msgid "Mutually exclusive records."
msgstr ""
@@ -4713,12 +4706,18 @@ msgstr ""
msgid "Failed to parse JSON in option `%s': %s (%s)\n"
msgstr "Datei wurde als `%s' gespeichert.\n"
-#: src/messenger/plugin_gnsrecord_messenger.c:118
-#: src/messenger/plugin_gnsrecord_messenger.c:133
+#: src/messenger/plugin_gnsrecord_messenger.c:136
+#: src/messenger/plugin_gnsrecord_messenger.c:151
#, fuzzy, c-format
msgid "Unable to parse MESSENGER_ROOM_ENTRY record `%s'\n"
msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n"
+#: src/messenger/plugin_gnsrecord_messenger.c:172
+#: src/messenger/plugin_gnsrecord_messenger.c:187
+#, fuzzy, c-format
+msgid "Unable to parse MESSENGER_ROOM_DETAILS record `%s'\n"
+msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n"
+
#: src/my/my.c:196 src/my/my.c:215
#, fuzzy, c-format
msgid "%s failed at %s:%d with error: %s\n"
@@ -4759,7 +4758,7 @@ msgstr "Ungültiger Parameter: `%s'\n"
msgid "You must specify a name\n"
msgstr "Sie müssen einen Empfänger angeben!\n"
-#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1591
+#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1582
msgid "name of the record to add/delete/display"
msgstr ""
@@ -4768,7 +4767,7 @@ msgstr ""
msgid "specifies the public key of the zone to look in"
msgstr "Die Priorität des Inhalts angeben"
-#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1652
+#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1643
#, fuzzy
msgid "GNUnet zone manipulation tool"
msgstr "GNUnet Konfiguration"
@@ -5017,12 +5016,7 @@ msgstr ""
msgid "Invalid URI `%s'\n"
msgstr "Ungültiger Parameter: `%s'\n"
-#: src/namestore/gnunet-namestore.c:1242
-#, c-format
-msgid "Label `%s' contains `.' which is not allowed\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:1292
+#: src/namestore/gnunet-namestore.c:1283
#, c-format
msgid ""
"No default identity configured for `namestore' subsystem\n"
@@ -5030,99 +5024,99 @@ msgid ""
"Run gnunet-identity -d to get a list of choices for $NAME\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1357
+#: src/namestore/gnunet-namestore.c:1348
#, c-format
msgid "Superfluous command line arguments (starting with `%s') ignored\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1386
+#: src/namestore/gnunet-namestore.c:1377
#, fuzzy, c-format
msgid "Cannot connect to identity service\n"
msgstr "Verbindung zu %u.%u.%u.%u:%u fehlgeschlagen: %s\n"
-#: src/namestore/gnunet-namestore.c:1433
+#: src/namestore/gnunet-namestore.c:1424
msgid "Empty record line argument is not allowed.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1445
+#: src/namestore/gnunet-namestore.c:1436
#, c-format
msgid "Invalid expiration time `%s' (must be without unit)\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1457 src/namestore/gnunet-namestore.c:1473
-#: src/namestore/gnunet-namestore.c:1490
+#: src/namestore/gnunet-namestore.c:1448 src/namestore/gnunet-namestore.c:1464
+#: src/namestore/gnunet-namestore.c:1481
#, fuzzy, c-format
msgid "Missing entries in record line `%s'.\n"
msgstr "Anwendung `%s' konnte nicht initialisiert werden.\n"
-#: src/namestore/gnunet-namestore.c:1465
+#: src/namestore/gnunet-namestore.c:1456
#, fuzzy, c-format
msgid "Unknown record type `%s'\n"
msgstr "Unbekannter Befehl »%s«\n"
-#: src/namestore/gnunet-namestore.c:1503
+#: src/namestore/gnunet-namestore.c:1494
#, fuzzy, c-format
msgid "Invalid record data for type %s: `%s'.\n"
msgstr "Ungültiges Format für IP: »%s«\n"
-#: src/namestore/gnunet-namestore.c:1560
+#: src/namestore/gnunet-namestore.c:1551
msgid "add record"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1563
+#: src/namestore/gnunet-namestore.c:1554
msgid "delete record"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1567
+#: src/namestore/gnunet-namestore.c:1558
msgid "display records"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1574
+#: src/namestore/gnunet-namestore.c:1565
msgid ""
"expiration time for record to use (for adding only), \"never\" is possible"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1580
+#: src/namestore/gnunet-namestore.c:1571
msgid "set the desired nick name for the zone"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1585
+#: src/namestore/gnunet-namestore.c:1576
msgid "monitor changes in the namestore"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1597
+#: src/namestore/gnunet-namestore.c:1588
msgid "determine our name for the given PKEY"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1604
+#: src/namestore/gnunet-namestore.c:1595
msgid ""
"set record set to values given by (possibly multiple) RECORDLINES; can be "
"specified multiple times"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1610
+#: src/namestore/gnunet-namestore.c:1601
msgid "type of the record to add/delete/display"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1615
+#: src/namestore/gnunet-namestore.c:1606
msgid "URI to import into our zone"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1621
+#: src/namestore/gnunet-namestore.c:1612
msgid "value of the record to add/delete"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1625
+#: src/namestore/gnunet-namestore.c:1616
msgid "create or list public record"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1631
+#: src/namestore/gnunet-namestore.c:1622
msgid ""
"create shadow record (only valid if all other records of the same type have "
"expired"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1637
+#: src/namestore/gnunet-namestore.c:1628
msgid "name of the ego controlling the zone"
msgstr ""
@@ -5131,7 +5125,17 @@ msgstr ""
msgid "Failed to replicate block in namecache: %s\n"
msgstr ""
-#: src/namestore/gnunet-service-namestore.c:1668
+#: src/namestore/gnunet-service-namestore.c:1559
+#, fuzzy
+msgid "Error normalizing name."
+msgstr "Fehler beim Anlegen des Tunnels\n"
+
+#: src/namestore/gnunet-service-namestore.c:1582
+#, fuzzy
+msgid "Error deserializing records."
+msgstr "=\tFehler beim Lesen des Verzeichnisses.\n"
+
+#: src/namestore/gnunet-service-namestore.c:1691
#, fuzzy
msgid "Store failed"
msgstr "Verbindung fehlgeschlagen: %s\n"
@@ -6880,8 +6884,8 @@ msgid "GNUnet topology control"
msgstr ""
#: src/transport/gnunet-communicator-tcp.c:3338
-#: src/transport/gnunet-communicator-udp.c:3856
-#: src/transport/gnunet-service-tng.c:10623
+#: src/transport/gnunet-communicator-udp.c:3867
+#: src/transport/gnunet-service-tng.c:10926
#: src/transport/gnunet-service-transport.c:2627
msgid "Transport service is lacking key configuration settings. Exiting.\n"
msgstr ""
@@ -6890,7 +6894,7 @@ msgstr ""
msgid "GNUnet TCP communicator"
msgstr ""
-#: src/transport/gnunet-communicator-udp.c:3931
+#: src/transport/gnunet-communicator-udp.c:3942
msgid "GNUnet UDP communicator"
msgstr ""
@@ -8261,12 +8265,12 @@ msgid "libgcrypt has not the expected version (version %s is required).\n"
msgstr ""
"libgcrypt hat nicht die erwartete Version (Version %s wird vorausgesetzt).\n"
-#: src/util/crypto_rsa.c:901
+#: src/util/crypto_rsa.c:907
#, fuzzy, c-format
msgid "RSA signing failed at %s:%d: %s\n"
msgstr "`%s' schlug fehl bei %s:%d mit dem Fehler: `%s'.\n"
-#: src/util/crypto_rsa.c:1201
+#: src/util/crypto_rsa.c:1207
#, fuzzy, c-format
msgid "RSA signature verification failed at %s:%d: %s\n"
msgstr "RSA Signaturüberprüfung fehlgeschlagen bei %s:%d: %s\n"
@@ -8946,12 +8950,12 @@ msgstr "Falsches Format `%s' für Netzmaske: %s\n"
msgid "Wrong format `%s' for network\n"
msgstr "Falsches Format `%s' für Netzwerk: %s\n"
-#: src/util/time.c:870 src/util/time.c:898
+#: src/util/time.c:900 src/util/time.c:928
#, c-format
msgid "Failed to map `%s', cannot assure monotonic time!\n"
msgstr ""
-#: src/util/time.c:906
+#: src/util/time.c:936
#, c-format
msgid ""
"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"
@@ -9137,6 +9141,10 @@ msgstr "Tunnel über VPN einrichten."
msgid "Failed to connect to the namestore!\n"
msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
+#, fuzzy, c-format
+#~ msgid "Block not of type %u\n"
+#~ msgstr "Kein Transport des Typs %d bekannt.\n"
+
#~ msgid "# items stored"
#~ msgstr "# gespeicherte Objekte"
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 ""
msgstr ""
"Project-Id-Version: gnunet 0.9.5a\n"
"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
-"POT-Creation-Date: 2022-03-04 22:23+0100\n"
+"POT-Creation-Date: 2022-04-01 08:42+0200\n"
"PO-Revision-Date: 2013-02-23 17:50+0100\n"
"Last-Translator: Miguel Ángel Arruga Vivas <rosen644835@gmail.com>\n"
"Language-Team: Spanish <es@li.org>\n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1254
+#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1245
#, fuzzy, c-format
msgid "Ego `%s' not known to identity service\n"
msgstr "'%s': servicio desconocido: %s\n"
@@ -2194,21 +2194,6 @@ msgstr ""
msgid "Measure quality and performance of the DHT service."
msgstr "Medir la calidad y rendimiento del servicio NSE."
-#: src/dht/plugin_block_dht.c:404
-#, c-format
-msgid "Block not of type %u\n"
-msgstr "El bloque no es del tipo %u\n"
-
-#: src/dht/plugin_block_dht.c:413
-#, fuzzy, c-format
-msgid "Size mismatch for block with type %u\n"
-msgstr "Discrepancias de tamaños para el bloque\n"
-
-#: src/dht/plugin_block_dht.c:424
-#, c-format
-msgid "Block of type %u is malformed\n"
-msgstr "El bloque del tipo %u está mal formado\n"
-
#: src/dns/gnunet-dns-monitor.c:371 src/dns/gnunet-dns-monitor.c:376
msgid "only monitor DNS queries"
msgstr "sólo monitorizar consultas DNS"
@@ -2972,20 +2957,20 @@ msgstr "URI SKS mal formada (no se encuentra el tiempo de expiración)"
msgid "LOC URI malformed (signature failed validation)"
msgstr "URI SKS mal formada (se produjo un fallo al validar la firma)"
-#: src/fs/fs_uri.c:652
+#: src/fs/fs_uri.c:653
#, fuzzy
msgid "invalid argument"
msgstr "Parámetro no válido «%s»\n"
-#: src/fs/fs_uri.c:671
+#: src/fs/fs_uri.c:673
msgid "Unrecognized URI type"
msgstr "Tipo de URI no reconocido"
-#: src/fs/fs_uri.c:1075 src/fs/fs_uri.c:1102
+#: src/fs/fs_uri.c:1077 src/fs/fs_uri.c:1104
msgid "No keywords specified!\n"
msgstr "¡Ninguna palabra clave especificada!\n"
-#: src/fs/fs_uri.c:1108
+#: src/fs/fs_uri.c:1110
msgid "Number of double-quotes not balanced!\n"
msgstr "¡Número de comillas dobles no balanceado!\n"
@@ -3740,95 +3725,95 @@ msgstr "# peticiones refrescadas"
msgid "# query plan entries"
msgstr "# entradas de planes de búsqueda"
-#: src/fs/gnunet-service-fs_pr.c:329
+#: src/fs/gnunet-service-fs_pr.c:330
msgid "# Pending requests created"
msgstr "# Peticiones pendientes creadas"
-#: src/fs/gnunet-service-fs_pr.c:421 src/fs/gnunet-service-fs_pr.c:658
+#: src/fs/gnunet-service-fs_pr.c:422 src/fs/gnunet-service-fs_pr.c:662
msgid "# Pending requests active"
msgstr "# Peticiones pendientes activas"
-#: src/fs/gnunet-service-fs_pr.c:838
+#: src/fs/gnunet-service-fs_pr.c:837
msgid "# replies received and matched"
msgstr "# respuestas recibidas y asociadas"
-#: src/fs/gnunet-service-fs_pr.c:916
+#: src/fs/gnunet-service-fs_pr.c:911
msgid "# results found locally"
msgstr "# resultados hallados localmente"
-#: src/fs/gnunet-service-fs_pr.c:1050
+#: src/fs/gnunet-service-fs_pr.c:1045
msgid "# Datastore `PUT' failures"
msgstr "# «PUT» en el almacén de datos fallidos"
-#: src/fs/gnunet-service-fs_pr.c:1079
+#: src/fs/gnunet-service-fs_pr.c:1074
msgid "# storage requests dropped due to high load"
msgstr "# peticiones de almacenamiento omitidas debido a alta carga"
-#: src/fs/gnunet-service-fs_pr.c:1118
+#: src/fs/gnunet-service-fs_pr.c:1113
msgid "# Replies received from DHT"
msgstr "# Respuestas recibidas de la DHT"
-#: src/fs/gnunet-service-fs_pr.c:1259
+#: src/fs/gnunet-service-fs_pr.c:1268
#, fuzzy
msgid "# Replies received from CADET"
msgstr "# Respuestas recibidas de la DHT"
-#: src/fs/gnunet-service-fs_pr.c:1313
+#: src/fs/gnunet-service-fs_pr.c:1323
#, c-format
msgid "Datastore lookup already took %s!\n"
msgstr "¡La búsqueda en el almacén de datos toma %s!\n"
-#: src/fs/gnunet-service-fs_pr.c:1334
+#: src/fs/gnunet-service-fs_pr.c:1344
#, c-format
msgid "On-demand lookup already took %s!\n"
msgstr "¡La búsqueda en bajo demanda toma %s!\n"
-#: src/fs/gnunet-service-fs_pr.c:1401
+#: src/fs/gnunet-service-fs_pr.c:1411
msgid "# requested DBLOCK or IBLOCK not found"
msgstr "# «DBLOCK» o «IBLOCK» pedido no encontrado"
-#: src/fs/gnunet-service-fs_pr.c:1463
+#: src/fs/gnunet-service-fs_pr.c:1473
msgid "# Datastore lookups concluded (error queueing)"
msgstr "# Búsquedas en el almacén de datos finalizadas (error encolando)"
-#: src/fs/gnunet-service-fs_pr.c:1518
+#: src/fs/gnunet-service-fs_pr.c:1528
msgid "# Datastore lookups concluded (no results)"
msgstr "# Búsquedas en el almacén de datos finalizadas (sin resultados)"
-#: src/fs/gnunet-service-fs_pr.c:1533
+#: src/fs/gnunet-service-fs_pr.c:1543
msgid "# Datastore lookups concluded (seen all)"
msgstr "# Búsquedas en el almacén de datos finalizadas (vistos todos)"
-#: src/fs/gnunet-service-fs_pr.c:1556
+#: src/fs/gnunet-service-fs_pr.c:1566
msgid "# Datastore lookups aborted (more than MAX_RESULTS)"
msgstr "# Búsquedas en el almacén de datos finalizadas (más de «MAX_RESULTS»)"
-#: src/fs/gnunet-service-fs_pr.c:1573
+#: src/fs/gnunet-service-fs_pr.c:1583
msgid "# on-demand blocks matched requests"
msgstr "# peticiones asociadas de bloques bajo demanda"
-#: src/fs/gnunet-service-fs_pr.c:1594
+#: src/fs/gnunet-service-fs_pr.c:1604
msgid "# on-demand lookups performed successfully"
msgstr "# búsquedas satisfactorias de bloques bajo demanda"
-#: src/fs/gnunet-service-fs_pr.c:1600
+#: src/fs/gnunet-service-fs_pr.c:1610
msgid "# on-demand lookups failed"
msgstr "# búsquedas fallidas de bloques bajo demanda"
-#: src/fs/gnunet-service-fs_pr.c:1641
+#: src/fs/gnunet-service-fs_pr.c:1656
msgid "# Datastore lookups concluded (found last result)"
msgstr ""
"# Búsquedas en el almacén de datos finalizadas (encontrado último resultado)"
-#: src/fs/gnunet-service-fs_pr.c:1654
+#: src/fs/gnunet-service-fs_pr.c:1669
msgid "# Datastore lookups concluded (load too high)"
msgstr "# Búsquedas en el almacén de datos finalizadas (carga demasiado alta)"
-#: src/fs/gnunet-service-fs_pr.c:1705
+#: src/fs/gnunet-service-fs_pr.c:1720
msgid "# Datastore lookups initiated"
msgstr "# Búsquedas en el almacén de datos iniciadas"
-#: src/fs/gnunet-service-fs_pr.c:1755
+#: src/fs/gnunet-service-fs_pr.c:1784
msgid "# GAP PUT messages received"
msgstr "# Mensajes «GAP PUT» recibidos"
@@ -4145,65 +4130,65 @@ msgstr "¡Se produjo un error al convertir los argumentos a una URI!\n"
msgid "Failed to connect to the DNS service!\n"
msgstr "¡Se produjo un fallo al conectar con el servicio GNS!\n"
-#: src/gns/gnunet-service-gns_resolver.c:659
+#: src/gns/gnunet-service-gns_resolver.c:672
#, fuzzy, c-format
msgid "Protocol `%s' unknown, skipping labels.\n"
msgstr "Módulo «%s» no encontrado\n"
-#: src/gns/gnunet-service-gns_resolver.c:671
+#: src/gns/gnunet-service-gns_resolver.c:684
#, c-format
msgid "Service `%s' unknown for protocol `%s', trying as number.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:677
+#: src/gns/gnunet-service-gns_resolver.c:690
#, fuzzy, c-format
msgid "Service `%s' not a port, skipping service labels.\n"
msgstr "Módulo «%s» no encontrado\n"
-#: src/gns/gnunet-service-gns_resolver.c:891
+#: src/gns/gnunet-service-gns_resolver.c:904
#, fuzzy
msgid "Failed to parse DNS response\n"
msgstr "Se produjo un fallo al procesar la petición DNS. Omitiendo.\n"
-#: src/gns/gnunet-service-gns_resolver.c:1082
+#: src/gns/gnunet-service-gns_resolver.c:1095
#, c-format
msgid "Skipping record of unsupported type %d\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1859
+#: src/gns/gnunet-service-gns_resolver.c:1872
#, c-format
msgid "Name `%s' cannot be converted to IDNA."
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1874
+#: src/gns/gnunet-service-gns_resolver.c:1887
#, c-format
msgid "GNS lookup resulted in DNS name that is too long (`%s')\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1914
+#: src/gns/gnunet-service-gns_resolver.c:1927
#, fuzzy, c-format
msgid "GNS lookup failed (zero records found for `%s')\n"
msgstr "No se han encontrado ficheros en «%s»\n"
-#: src/gns/gnunet-service-gns_resolver.c:2312
+#: src/gns/gnunet-service-gns_resolver.c:2329
msgid "Unable to process critical delegation record\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2317
+#: src/gns/gnunet-service-gns_resolver.c:2334
msgid "GNS lookup recursion failed (no delegation record found)\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2340
+#: src/gns/gnunet-service-gns_resolver.c:2357
#, fuzzy, c-format
msgid "Failed to cache GNS resolution: %s\n"
msgstr "Se produjo un fallo al mandar la petición DNS a %s\n"
-#: src/gns/gnunet-service-gns_resolver.c:2505
+#: src/gns/gnunet-service-gns_resolver.c:2522
#, c-format
msgid "GNS namecache returned empty result for `%s'\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2652
+#: src/gns/gnunet-service-gns_resolver.c:2669
#, c-format
msgid "Zone %s was revoked, resolution fails\n"
msgstr ""
@@ -4248,31 +4233,39 @@ msgstr "No se pudo procesar la cadena de registro VPN «%s»\n"
msgid "Gns REST API initialized\n"
msgstr "Conexión fallida\n"
-#: src/gnsrecord/gnsrecord_misc.c:448
+#: src/gnsrecord/gnsrecord_misc.c:52
+msgid "Label is NULL which is not allowed\n"
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:57
+msgid "Label contains `.' which is not allowed\n"
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:464
msgid "Zone delegation record not allowed in apex."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:456
+#: src/gnsrecord/gnsrecord_misc.c:472
msgid "Zone delegation record set contains mutually exclusive records."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:466
+#: src/gnsrecord/gnsrecord_misc.c:482
msgid "Multiple REDIRECT records."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:475 src/gnsrecord/gnsrecord_misc.c:501
+#: src/gnsrecord/gnsrecord_misc.c:491 src/gnsrecord/gnsrecord_misc.c:517
msgid "Redirection record set conains mutually exclusive records."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:482
+#: src/gnsrecord/gnsrecord_misc.c:498
msgid "Redirection records not allowed in apex."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:493
+#: src/gnsrecord/gnsrecord_misc.c:509
msgid "Redirection records not allowed in apex.."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:515
+#: src/gnsrecord/gnsrecord_misc.c:531
msgid "Mutually exclusive records."
msgstr ""
@@ -4883,12 +4876,18 @@ msgstr "Conexión fallida\n"
msgid "Failed to parse JSON in option `%s': %s (%s)\n"
msgstr "Se produjo un fallo al procesar «HELLO» en el fichero «%s»\n"
-#: src/messenger/plugin_gnsrecord_messenger.c:118
-#: src/messenger/plugin_gnsrecord_messenger.c:133
+#: src/messenger/plugin_gnsrecord_messenger.c:136
+#: src/messenger/plugin_gnsrecord_messenger.c:151
#, fuzzy, c-format
msgid "Unable to parse MESSENGER_ROOM_ENTRY record `%s'\n"
msgstr "No se pudo procesar el registro SOA «%s»\n"
+#: src/messenger/plugin_gnsrecord_messenger.c:172
+#: src/messenger/plugin_gnsrecord_messenger.c:187
+#, fuzzy, c-format
+msgid "Unable to parse MESSENGER_ROOM_DETAILS record `%s'\n"
+msgstr "No se pudo procesar el registro SOA «%s»\n"
+
#: src/my/my.c:196 src/my/my.c:215
#, fuzzy, c-format
msgid "%s failed at %s:%d with error: %s\n"
@@ -4929,7 +4928,7 @@ msgstr "Parámetro no válido «%s»\n"
msgid "You must specify a name\n"
msgstr "¡Debes especificar un receptor!\n"
-#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1591
+#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1582
msgid "name of the record to add/delete/display"
msgstr "nombre del registro a añadir/borrar/mostrar"
@@ -4938,7 +4937,7 @@ msgstr "nombre del registro a añadir/borrar/mostrar"
msgid "specifies the public key of the zone to look in"
msgstr "Especificar el tipo del registro a buscar"
-#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1652
+#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1643
msgid "GNUnet zone manipulation tool"
msgstr "Herramienta de manipulación de zona de GNUnet"
@@ -5191,12 +5190,7 @@ msgstr "Parámetro no válido «%s»\n"
msgid "Invalid URI `%s'\n"
msgstr "URI no válida: «%s»\n"
-#: src/namestore/gnunet-namestore.c:1242
-#, c-format
-msgid "Label `%s' contains `.' which is not allowed\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:1292
+#: src/namestore/gnunet-namestore.c:1283
#, c-format
msgid ""
"No default identity configured for `namestore' subsystem\n"
@@ -5204,104 +5198,104 @@ msgid ""
"Run gnunet-identity -d to get a list of choices for $NAME\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1357
+#: src/namestore/gnunet-namestore.c:1348
#, fuzzy, c-format
msgid "Superfluous command line arguments (starting with `%s') ignored\n"
msgstr "Argumentos superfluos (ignorados).\n"
-#: src/namestore/gnunet-namestore.c:1386
+#: src/namestore/gnunet-namestore.c:1377
#, fuzzy, c-format
msgid "Cannot connect to identity service\n"
msgstr "¡No se pudo conectar al servicio %s!\n"
-#: src/namestore/gnunet-namestore.c:1433
+#: src/namestore/gnunet-namestore.c:1424
msgid "Empty record line argument is not allowed.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1445
+#: src/namestore/gnunet-namestore.c:1436
#, c-format
msgid "Invalid expiration time `%s' (must be without unit)\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1457 src/namestore/gnunet-namestore.c:1473
-#: src/namestore/gnunet-namestore.c:1490
+#: src/namestore/gnunet-namestore.c:1448 src/namestore/gnunet-namestore.c:1464
+#: src/namestore/gnunet-namestore.c:1481
#, fuzzy, c-format
msgid "Missing entries in record line `%s'.\n"
msgstr "Se produjo un fallo al cargar el módulo del transporte para «%s»\n"
-#: src/namestore/gnunet-namestore.c:1465
+#: src/namestore/gnunet-namestore.c:1456
#, fuzzy, c-format
msgid "Unknown record type `%s'\n"
msgstr "Comando desconocido «%s»\n"
-#: src/namestore/gnunet-namestore.c:1503
+#: src/namestore/gnunet-namestore.c:1494
#, fuzzy, c-format
msgid "Invalid record data for type %s: `%s'.\n"
msgstr "Formato no válido para la IP: «%s»\n"
-#: src/namestore/gnunet-namestore.c:1560
+#: src/namestore/gnunet-namestore.c:1551
msgid "add record"
msgstr "añadir registro"
-#: src/namestore/gnunet-namestore.c:1563
+#: src/namestore/gnunet-namestore.c:1554
msgid "delete record"
msgstr "borrar registro"
-#: src/namestore/gnunet-namestore.c:1567
+#: src/namestore/gnunet-namestore.c:1558
msgid "display records"
msgstr "mostrar registros"
-#: src/namestore/gnunet-namestore.c:1574
+#: src/namestore/gnunet-namestore.c:1565
msgid ""
"expiration time for record to use (for adding only), \"never\" is possible"
msgstr ""
"tiempo de expiración del registro a usar (únicamente para añadir), nunca "
"(\"never\") es posible"
-#: src/namestore/gnunet-namestore.c:1580
+#: src/namestore/gnunet-namestore.c:1571
#, fuzzy
msgid "set the desired nick name for the zone"
msgstr "establece el nivel LEVEL deseado de replicación"
-#: src/namestore/gnunet-namestore.c:1585
+#: src/namestore/gnunet-namestore.c:1576
#, fuzzy
msgid "monitor changes in the namestore"
msgstr "¡Se produjo un fallo al conectar con el almacén de nombres!\n"
-#: src/namestore/gnunet-namestore.c:1597
+#: src/namestore/gnunet-namestore.c:1588
#, fuzzy
msgid "determine our name for the given PKEY"
msgstr "establece las preferencias para el par dado"
-#: src/namestore/gnunet-namestore.c:1604
+#: src/namestore/gnunet-namestore.c:1595
msgid ""
"set record set to values given by (possibly multiple) RECORDLINES; can be "
"specified multiple times"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1610
+#: src/namestore/gnunet-namestore.c:1601
msgid "type of the record to add/delete/display"
msgstr "tipo del registro a añadir/borrar/mostrar"
-#: src/namestore/gnunet-namestore.c:1615
+#: src/namestore/gnunet-namestore.c:1606
msgid "URI to import into our zone"
msgstr "URI a importar a nuestra zona"
-#: src/namestore/gnunet-namestore.c:1621
+#: src/namestore/gnunet-namestore.c:1612
msgid "value of the record to add/delete"
msgstr "valor del registro a añadir/borrar"
-#: src/namestore/gnunet-namestore.c:1625
+#: src/namestore/gnunet-namestore.c:1616
msgid "create or list public record"
msgstr "crear o listar registros públicos"
-#: src/namestore/gnunet-namestore.c:1631
+#: src/namestore/gnunet-namestore.c:1622
msgid ""
"create shadow record (only valid if all other records of the same type have "
"expired"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1637
+#: src/namestore/gnunet-namestore.c:1628
#, fuzzy
msgid "name of the ego controlling the zone"
msgstr "nombre de la sección a la que acceder"
@@ -5311,7 +5305,17 @@ msgstr "nombre de la sección a la que acceder"
msgid "Failed to replicate block in namecache: %s\n"
msgstr "Se produjo un fallo al crear el espacio de nombres «%s»\n"
-#: src/namestore/gnunet-service-namestore.c:1668
+#: src/namestore/gnunet-service-namestore.c:1559
+#, fuzzy
+msgid "Error normalizing name."
+msgstr "Error creando el túnel\n"
+
+#: src/namestore/gnunet-service-namestore.c:1582
+#, fuzzy
+msgid "Error deserializing records."
+msgstr "Error interno escaneando directorio.\n"
+
+#: src/namestore/gnunet-service-namestore.c:1691
#, fuzzy
msgid "Store failed"
msgstr "«gnunet-ecc» falló"
@@ -7123,8 +7127,8 @@ msgid "GNUnet topology control"
msgstr ""
#: src/transport/gnunet-communicator-tcp.c:3338
-#: src/transport/gnunet-communicator-udp.c:3856
-#: src/transport/gnunet-service-tng.c:10623
+#: src/transport/gnunet-communicator-udp.c:3867
+#: src/transport/gnunet-service-tng.c:10926
#: src/transport/gnunet-service-transport.c:2627
#, fuzzy
msgid "Transport service is lacking key configuration settings. Exiting.\n"
@@ -7137,7 +7141,7 @@ msgstr ""
msgid "GNUnet TCP communicator"
msgstr "Configurador Gtk de GNUnet"
-#: src/transport/gnunet-communicator-udp.c:3931
+#: src/transport/gnunet-communicator-udp.c:3942
#, fuzzy
msgid "GNUnet UDP communicator"
msgstr "Configurador Gtk de GNUnet"
@@ -8574,12 +8578,12 @@ msgstr "No se pudo acceder a la clave de máquina.\n"
msgid "libgcrypt has not the expected version (version %s is required).\n"
msgstr "libgcrypt no tiene la versión esperada (se necesita la versión %s).\n"
-#: src/util/crypto_rsa.c:901
+#: src/util/crypto_rsa.c:907
#, fuzzy, c-format
msgid "RSA signing failed at %s:%d: %s\n"
msgstr "El firmado ECC falló en %s:%d: %s\n"
-#: src/util/crypto_rsa.c:1201
+#: src/util/crypto_rsa.c:1207
#, c-format
msgid "RSA signature verification failed at %s:%d: %s\n"
msgstr "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"
msgid "Wrong format `%s' for network\n"
msgstr "Formato «%s» erroneo para red\n"
-#: src/util/time.c:870 src/util/time.c:898
+#: src/util/time.c:900 src/util/time.c:928
#, fuzzy, c-format
msgid "Failed to map `%s', cannot assure monotonic time!\n"
msgstr ""
"Se produjo un fallo al recuperar el espacio de nombres «%s», no se pudo "
"retomar la operación de publicación.\n"
-#: src/util/time.c:906
+#: src/util/time.c:936
#, c-format
msgid ""
"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"
@@ -9472,6 +9476,18 @@ msgstr "Configurar túneles vía VPN."
msgid "Failed to connect to the namestore!\n"
msgstr "¡Se produjo un fallo al conectar con el almacén de nombres!\n"
+#, c-format
+#~ msgid "Block not of type %u\n"
+#~ msgstr "El bloque no es del tipo %u\n"
+
+#, fuzzy, c-format
+#~ msgid "Size mismatch for block with type %u\n"
+#~ msgstr "Discrepancias de tamaños para el bloque\n"
+
+#, c-format
+#~ msgid "Block of type %u is malformed\n"
+#~ msgstr "El bloque del tipo %u está mal formado\n"
+
#~ msgid "# items stored"
#~ msgstr "# elementos almacenados"
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 ""
msgstr ""
"Project-Id-Version: gnunet 0.10.1\n"
"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
-"POT-Creation-Date: 2022-03-04 22:23+0100\n"
+"POT-Creation-Date: 2022-04-01 08:42+0200\n"
"PO-Revision-Date: 2021-11-21 00:53+0100\n"
"Last-Translator: Stéphane Aulery <lkppo@free.fr>\n"
"Language-Team: French <traduc@traduc.org>\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
-#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1254
+#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1245
#, c-format
msgid "Ego `%s' not known to identity service\n"
msgstr ""
@@ -2045,21 +2045,6 @@ msgstr ""
msgid "Measure quality and performance of the DHT service."
msgstr ""
-#: src/dht/plugin_block_dht.c:404
-#, c-format
-msgid "Block not of type %u\n"
-msgstr ""
-
-#: src/dht/plugin_block_dht.c:413
-#, c-format
-msgid "Size mismatch for block with type %u\n"
-msgstr ""
-
-#: src/dht/plugin_block_dht.c:424
-#, c-format
-msgid "Block of type %u is malformed\n"
-msgstr ""
-
#: src/dns/gnunet-dns-monitor.c:371 src/dns/gnunet-dns-monitor.c:376
msgid "only monitor DNS queries"
msgstr ""
@@ -2746,20 +2731,20 @@ msgstr ""
msgid "LOC URI malformed (signature failed validation)"
msgstr ""
-#: src/fs/fs_uri.c:652
+#: src/fs/fs_uri.c:653
#, fuzzy
msgid "invalid argument"
msgstr "Argument invalide « %s »\n"
-#: src/fs/fs_uri.c:671
+#: src/fs/fs_uri.c:673
msgid "Unrecognized URI type"
msgstr "Type d’URI non reconnu"
-#: src/fs/fs_uri.c:1075 src/fs/fs_uri.c:1102
+#: src/fs/fs_uri.c:1077 src/fs/fs_uri.c:1104
msgid "No keywords specified!\n"
msgstr ""
-#: src/fs/fs_uri.c:1108
+#: src/fs/fs_uri.c:1110
msgid "Number of double-quotes not balanced!\n"
msgstr ""
@@ -3457,93 +3442,93 @@ msgstr ""
msgid "# query plan entries"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:329
+#: src/fs/gnunet-service-fs_pr.c:330
msgid "# Pending requests created"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:421 src/fs/gnunet-service-fs_pr.c:658
+#: src/fs/gnunet-service-fs_pr.c:422 src/fs/gnunet-service-fs_pr.c:662
msgid "# Pending requests active"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:838
+#: src/fs/gnunet-service-fs_pr.c:837
msgid "# replies received and matched"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:916
+#: src/fs/gnunet-service-fs_pr.c:911
msgid "# results found locally"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1050
+#: src/fs/gnunet-service-fs_pr.c:1045
msgid "# Datastore `PUT' failures"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1079
+#: src/fs/gnunet-service-fs_pr.c:1074
msgid "# storage requests dropped due to high load"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1118
+#: src/fs/gnunet-service-fs_pr.c:1113
msgid "# Replies received from DHT"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1259
+#: src/fs/gnunet-service-fs_pr.c:1268
msgid "# Replies received from CADET"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1313
+#: src/fs/gnunet-service-fs_pr.c:1323
#, c-format
msgid "Datastore lookup already took %s!\n"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1334
+#: src/fs/gnunet-service-fs_pr.c:1344
#, c-format
msgid "On-demand lookup already took %s!\n"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1401
+#: src/fs/gnunet-service-fs_pr.c:1411
msgid "# requested DBLOCK or IBLOCK not found"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1463
+#: src/fs/gnunet-service-fs_pr.c:1473
msgid "# Datastore lookups concluded (error queueing)"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1518
+#: src/fs/gnunet-service-fs_pr.c:1528
msgid "# Datastore lookups concluded (no results)"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1533
+#: src/fs/gnunet-service-fs_pr.c:1543
msgid "# Datastore lookups concluded (seen all)"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1556
+#: src/fs/gnunet-service-fs_pr.c:1566
msgid "# Datastore lookups aborted (more than MAX_RESULTS)"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1573
+#: src/fs/gnunet-service-fs_pr.c:1583
msgid "# on-demand blocks matched requests"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1594
+#: src/fs/gnunet-service-fs_pr.c:1604
msgid "# on-demand lookups performed successfully"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1600
+#: src/fs/gnunet-service-fs_pr.c:1610
msgid "# on-demand lookups failed"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1641
+#: src/fs/gnunet-service-fs_pr.c:1656
msgid "# Datastore lookups concluded (found last result)"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1654
+#: src/fs/gnunet-service-fs_pr.c:1669
msgid "# Datastore lookups concluded (load too high)"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1705
+#: src/fs/gnunet-service-fs_pr.c:1720
msgid "# Datastore lookups initiated"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1755
+#: src/fs/gnunet-service-fs_pr.c:1784
msgid "# GAP PUT messages received"
msgstr ""
@@ -3844,64 +3829,64 @@ msgstr ""
msgid "Failed to connect to the DNS service!\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:659
+#: src/gns/gnunet-service-gns_resolver.c:672
#, c-format
msgid "Protocol `%s' unknown, skipping labels.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:671
+#: src/gns/gnunet-service-gns_resolver.c:684
#, c-format
msgid "Service `%s' unknown for protocol `%s', trying as number.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:677
+#: src/gns/gnunet-service-gns_resolver.c:690
#, c-format
msgid "Service `%s' not a port, skipping service labels.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:891
+#: src/gns/gnunet-service-gns_resolver.c:904
msgid "Failed to parse DNS response\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1082
+#: src/gns/gnunet-service-gns_resolver.c:1095
#, c-format
msgid "Skipping record of unsupported type %d\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1859
+#: src/gns/gnunet-service-gns_resolver.c:1872
#, c-format
msgid "Name `%s' cannot be converted to IDNA."
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1874
+#: src/gns/gnunet-service-gns_resolver.c:1887
#, c-format
msgid "GNS lookup resulted in DNS name that is too long (`%s')\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1914
+#: src/gns/gnunet-service-gns_resolver.c:1927
#, c-format
msgid "GNS lookup failed (zero records found for `%s')\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2312
+#: src/gns/gnunet-service-gns_resolver.c:2329
msgid "Unable to process critical delegation record\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2317
+#: src/gns/gnunet-service-gns_resolver.c:2334
msgid "GNS lookup recursion failed (no delegation record found)\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2340
+#: src/gns/gnunet-service-gns_resolver.c:2357
#, c-format
msgid "Failed to cache GNS resolution: %s\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2505
+#: src/gns/gnunet-service-gns_resolver.c:2522
#, c-format
msgid "GNS namecache returned empty result for `%s'\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2652
+#: src/gns/gnunet-service-gns_resolver.c:2669
#, c-format
msgid "Zone %s was revoked, resolution fails\n"
msgstr ""
@@ -3943,31 +3928,39 @@ msgstr ""
msgid "Gns REST API initialized\n"
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:448
+#: src/gnsrecord/gnsrecord_misc.c:52
+msgid "Label is NULL which is not allowed\n"
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:57
+msgid "Label contains `.' which is not allowed\n"
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:464
msgid "Zone delegation record not allowed in apex."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:456
+#: src/gnsrecord/gnsrecord_misc.c:472
msgid "Zone delegation record set contains mutually exclusive records."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:466
+#: src/gnsrecord/gnsrecord_misc.c:482
msgid "Multiple REDIRECT records."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:475 src/gnsrecord/gnsrecord_misc.c:501
+#: src/gnsrecord/gnsrecord_misc.c:491 src/gnsrecord/gnsrecord_misc.c:517
msgid "Redirection record set conains mutually exclusive records."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:482
+#: src/gnsrecord/gnsrecord_misc.c:498
msgid "Redirection records not allowed in apex."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:493
+#: src/gnsrecord/gnsrecord_misc.c:509
msgid "Redirection records not allowed in apex.."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:515
+#: src/gnsrecord/gnsrecord_misc.c:531
msgid "Mutually exclusive records."
msgstr ""
@@ -4527,12 +4520,18 @@ msgstr ""
msgid "Failed to parse JSON in option `%s': %s (%s)\n"
msgstr "Résolution de « %s » échouée : %s\n"
-#: src/messenger/plugin_gnsrecord_messenger.c:118
-#: src/messenger/plugin_gnsrecord_messenger.c:133
+#: src/messenger/plugin_gnsrecord_messenger.c:136
+#: src/messenger/plugin_gnsrecord_messenger.c:151
#, c-format
msgid "Unable to parse MESSENGER_ROOM_ENTRY record `%s'\n"
msgstr ""
+#: src/messenger/plugin_gnsrecord_messenger.c:172
+#: src/messenger/plugin_gnsrecord_messenger.c:187
+#, c-format
+msgid "Unable to parse MESSENGER_ROOM_DETAILS record `%s'\n"
+msgstr ""
+
#: src/my/my.c:196 src/my/my.c:215
#, c-format
msgid "%s failed at %s:%d with error: %s\n"
@@ -4573,7 +4572,7 @@ msgstr "fornat invalide : « %s »\n"
msgid "You must specify a name\n"
msgstr ""
-#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1591
+#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1582
msgid "name of the record to add/delete/display"
msgstr ""
@@ -4581,7 +4580,7 @@ msgstr ""
msgid "specifies the public key of the zone to look in"
msgstr ""
-#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1652
+#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1643
msgid "GNUnet zone manipulation tool"
msgstr ""
@@ -4823,12 +4822,7 @@ msgstr ""
msgid "Invalid URI `%s'\n"
msgstr "URI invalide « %s »\n"
-#: src/namestore/gnunet-namestore.c:1242
-#, c-format
-msgid "Label `%s' contains `.' which is not allowed\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:1292
+#: src/namestore/gnunet-namestore.c:1283
#, c-format
msgid ""
"No default identity configured for `namestore' subsystem\n"
@@ -4836,99 +4830,99 @@ msgid ""
"Run gnunet-identity -d to get a list of choices for $NAME\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1357
+#: src/namestore/gnunet-namestore.c:1348
#, c-format
msgid "Superfluous command line arguments (starting with `%s') ignored\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1386
+#: src/namestore/gnunet-namestore.c:1377
#, c-format
msgid "Cannot connect to identity service\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1433
+#: src/namestore/gnunet-namestore.c:1424
msgid "Empty record line argument is not allowed.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1445
+#: src/namestore/gnunet-namestore.c:1436
#, c-format
msgid "Invalid expiration time `%s' (must be without unit)\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1457 src/namestore/gnunet-namestore.c:1473
-#: src/namestore/gnunet-namestore.c:1490
+#: src/namestore/gnunet-namestore.c:1448 src/namestore/gnunet-namestore.c:1464
+#: src/namestore/gnunet-namestore.c:1481
#, c-format
msgid "Missing entries in record line `%s'.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1465
+#: src/namestore/gnunet-namestore.c:1456
#, fuzzy, c-format
msgid "Unknown record type `%s'\n"
msgstr "Commande « %s » inconnue\n"
-#: src/namestore/gnunet-namestore.c:1503
+#: src/namestore/gnunet-namestore.c:1494
#, fuzzy, c-format
msgid "Invalid record data for type %s: `%s'.\n"
msgstr "fornat invalide : « %s »\n"
-#: src/namestore/gnunet-namestore.c:1560
+#: src/namestore/gnunet-namestore.c:1551
msgid "add record"
msgstr "ajouter un enregistrement"
-#: src/namestore/gnunet-namestore.c:1563
+#: src/namestore/gnunet-namestore.c:1554
msgid "delete record"
msgstr "suprimer un enregistrement"
-#: src/namestore/gnunet-namestore.c:1567
+#: src/namestore/gnunet-namestore.c:1558
msgid "display records"
msgstr "afficher les enregistrements"
-#: src/namestore/gnunet-namestore.c:1574
+#: src/namestore/gnunet-namestore.c:1565
msgid ""
"expiration time for record to use (for adding only), \"never\" is possible"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1580
+#: src/namestore/gnunet-namestore.c:1571
msgid "set the desired nick name for the zone"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1585
+#: src/namestore/gnunet-namestore.c:1576
msgid "monitor changes in the namestore"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1597
+#: src/namestore/gnunet-namestore.c:1588
msgid "determine our name for the given PKEY"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1604
+#: src/namestore/gnunet-namestore.c:1595
msgid ""
"set record set to values given by (possibly multiple) RECORDLINES; can be "
"specified multiple times"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1610
+#: src/namestore/gnunet-namestore.c:1601
msgid "type of the record to add/delete/display"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1615
+#: src/namestore/gnunet-namestore.c:1606
msgid "URI to import into our zone"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1621
+#: src/namestore/gnunet-namestore.c:1612
msgid "value of the record to add/delete"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1625
+#: src/namestore/gnunet-namestore.c:1616
msgid "create or list public record"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1631
+#: src/namestore/gnunet-namestore.c:1622
msgid ""
"create shadow record (only valid if all other records of the same type have "
"expired"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1637
+#: src/namestore/gnunet-namestore.c:1628
msgid "name of the ego controlling the zone"
msgstr ""
@@ -4937,7 +4931,17 @@ msgstr ""
msgid "Failed to replicate block in namecache: %s\n"
msgstr ""
-#: src/namestore/gnunet-service-namestore.c:1668
+#: src/namestore/gnunet-service-namestore.c:1559
+#, fuzzy
+msgid "Error normalizing name."
+msgstr "Erreur de création du tunnel\n"
+
+#: src/namestore/gnunet-service-namestore.c:1582
+#, fuzzy
+msgid "Error deserializing records."
+msgstr "Erreur de création du tunnel\n"
+
+#: src/namestore/gnunet-service-namestore.c:1691
#, fuzzy
msgid "Store failed"
msgstr "pa_stream_new() échoué : %s\n"
@@ -6630,8 +6634,8 @@ msgid "GNUnet topology control"
msgstr ""
#: src/transport/gnunet-communicator-tcp.c:3338
-#: src/transport/gnunet-communicator-udp.c:3856
-#: src/transport/gnunet-service-tng.c:10623
+#: src/transport/gnunet-communicator-udp.c:3867
+#: src/transport/gnunet-service-tng.c:10926
#: src/transport/gnunet-service-transport.c:2627
msgid "Transport service is lacking key configuration settings. Exiting.\n"
msgstr ""
@@ -6640,7 +6644,7 @@ msgstr ""
msgid "GNUnet TCP communicator"
msgstr ""
-#: src/transport/gnunet-communicator-udp.c:3931
+#: src/transport/gnunet-communicator-udp.c:3942
msgid "GNUnet UDP communicator"
msgstr ""
@@ -7960,12 +7964,12 @@ msgstr ""
msgid "libgcrypt has not the expected version (version %s is required).\n"
msgstr ""
-#: src/util/crypto_rsa.c:901
+#: src/util/crypto_rsa.c:907
#, c-format
msgid "RSA signing failed at %s:%d: %s\n"
msgstr ""
-#: src/util/crypto_rsa.c:1201
+#: src/util/crypto_rsa.c:1207
#, c-format
msgid "RSA signature verification failed at %s:%d: %s\n"
msgstr ""
@@ -8633,12 +8637,12 @@ msgstr ""
msgid "Wrong format `%s' for network\n"
msgstr ""
-#: src/util/time.c:870 src/util/time.c:898
+#: src/util/time.c:900 src/util/time.c:928
#, c-format
msgid "Failed to map `%s', cannot assure monotonic time!\n"
msgstr ""
-#: src/util/time.c:906
+#: src/util/time.c:936
#, c-format
msgid ""
"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 ""
msgstr ""
"Project-Id-Version: gnunet 0.10.1\n"
"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
-"POT-Creation-Date: 2022-03-04 22:23+0100\n"
+"POT-Creation-Date: 2022-04-01 08:42+0200\n"
"PO-Revision-Date: 2019-10-16 11:00+0200\n"
"Last-Translator: Sebastiano Pistore <sebastianopistore.info@protonmail.ch>\n"
"Language-Team: Italian <tp@lists.linux.it>\n"
@@ -20,7 +20,7 @@ msgstr ""
"X-Generator: Poedit 2.2.3\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1254
+#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1245
#, c-format
msgid "Ego `%s' not known to identity service\n"
msgstr ""
@@ -2048,21 +2048,6 @@ msgstr ""
msgid "Measure quality and performance of the DHT service."
msgstr ""
-#: src/dht/plugin_block_dht.c:404
-#, c-format
-msgid "Block not of type %u\n"
-msgstr ""
-
-#: src/dht/plugin_block_dht.c:413
-#, c-format
-msgid "Size mismatch for block with type %u\n"
-msgstr ""
-
-#: src/dht/plugin_block_dht.c:424
-#, c-format
-msgid "Block of type %u is malformed\n"
-msgstr ""
-
#: src/dns/gnunet-dns-monitor.c:371 src/dns/gnunet-dns-monitor.c:376
msgid "only monitor DNS queries"
msgstr ""
@@ -2760,19 +2745,19 @@ msgstr ""
msgid "LOC URI malformed (signature failed validation)"
msgstr ""
-#: src/fs/fs_uri.c:652
+#: src/fs/fs_uri.c:653
msgid "invalid argument"
msgstr "argomento non valido"
-#: src/fs/fs_uri.c:671
+#: src/fs/fs_uri.c:673
msgid "Unrecognized URI type"
msgstr ""
-#: src/fs/fs_uri.c:1075 src/fs/fs_uri.c:1102
+#: src/fs/fs_uri.c:1077 src/fs/fs_uri.c:1104
msgid "No keywords specified!\n"
msgstr ""
-#: src/fs/fs_uri.c:1108
+#: src/fs/fs_uri.c:1110
msgid "Number of double-quotes not balanced!\n"
msgstr ""
@@ -3479,93 +3464,93 @@ msgstr ""
msgid "# query plan entries"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:329
+#: src/fs/gnunet-service-fs_pr.c:330
msgid "# Pending requests created"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:421 src/fs/gnunet-service-fs_pr.c:658
+#: src/fs/gnunet-service-fs_pr.c:422 src/fs/gnunet-service-fs_pr.c:662
msgid "# Pending requests active"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:838
+#: src/fs/gnunet-service-fs_pr.c:837
msgid "# replies received and matched"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:916
+#: src/fs/gnunet-service-fs_pr.c:911
msgid "# results found locally"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1050
+#: src/fs/gnunet-service-fs_pr.c:1045
msgid "# Datastore `PUT' failures"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1079
+#: src/fs/gnunet-service-fs_pr.c:1074
msgid "# storage requests dropped due to high load"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1118
+#: src/fs/gnunet-service-fs_pr.c:1113
msgid "# Replies received from DHT"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1259
+#: src/fs/gnunet-service-fs_pr.c:1268
msgid "# Replies received from CADET"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1313
+#: src/fs/gnunet-service-fs_pr.c:1323
#, c-format
msgid "Datastore lookup already took %s!\n"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1334
+#: src/fs/gnunet-service-fs_pr.c:1344
#, c-format
msgid "On-demand lookup already took %s!\n"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1401
+#: src/fs/gnunet-service-fs_pr.c:1411
msgid "# requested DBLOCK or IBLOCK not found"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1463
+#: src/fs/gnunet-service-fs_pr.c:1473
msgid "# Datastore lookups concluded (error queueing)"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1518
+#: src/fs/gnunet-service-fs_pr.c:1528
msgid "# Datastore lookups concluded (no results)"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1533
+#: src/fs/gnunet-service-fs_pr.c:1543
msgid "# Datastore lookups concluded (seen all)"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1556
+#: src/fs/gnunet-service-fs_pr.c:1566
msgid "# Datastore lookups aborted (more than MAX_RESULTS)"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1573
+#: src/fs/gnunet-service-fs_pr.c:1583
msgid "# on-demand blocks matched requests"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1594
+#: src/fs/gnunet-service-fs_pr.c:1604
msgid "# on-demand lookups performed successfully"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1600
+#: src/fs/gnunet-service-fs_pr.c:1610
msgid "# on-demand lookups failed"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1641
+#: src/fs/gnunet-service-fs_pr.c:1656
msgid "# Datastore lookups concluded (found last result)"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1654
+#: src/fs/gnunet-service-fs_pr.c:1669
msgid "# Datastore lookups concluded (load too high)"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1705
+#: src/fs/gnunet-service-fs_pr.c:1720
msgid "# Datastore lookups initiated"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1755
+#: src/fs/gnunet-service-fs_pr.c:1784
msgid "# GAP PUT messages received"
msgstr ""
@@ -3868,64 +3853,64 @@ msgstr ""
msgid "Failed to connect to the DNS service!\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:659
+#: src/gns/gnunet-service-gns_resolver.c:672
#, c-format
msgid "Protocol `%s' unknown, skipping labels.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:671
+#: src/gns/gnunet-service-gns_resolver.c:684
#, c-format
msgid "Service `%s' unknown for protocol `%s', trying as number.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:677
+#: src/gns/gnunet-service-gns_resolver.c:690
#, c-format
msgid "Service `%s' not a port, skipping service labels.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:891
+#: src/gns/gnunet-service-gns_resolver.c:904
msgid "Failed to parse DNS response\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1082
+#: src/gns/gnunet-service-gns_resolver.c:1095
#, c-format
msgid "Skipping record of unsupported type %d\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1859
+#: src/gns/gnunet-service-gns_resolver.c:1872
#, c-format
msgid "Name `%s' cannot be converted to IDNA."
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1874
+#: src/gns/gnunet-service-gns_resolver.c:1887
#, c-format
msgid "GNS lookup resulted in DNS name that is too long (`%s')\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1914
+#: src/gns/gnunet-service-gns_resolver.c:1927
#, c-format
msgid "GNS lookup failed (zero records found for `%s')\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2312
+#: src/gns/gnunet-service-gns_resolver.c:2329
msgid "Unable to process critical delegation record\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2317
+#: src/gns/gnunet-service-gns_resolver.c:2334
msgid "GNS lookup recursion failed (no delegation record found)\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2340
+#: src/gns/gnunet-service-gns_resolver.c:2357
#, c-format
msgid "Failed to cache GNS resolution: %s\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2505
+#: src/gns/gnunet-service-gns_resolver.c:2522
#, c-format
msgid "GNS namecache returned empty result for `%s'\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2652
+#: src/gns/gnunet-service-gns_resolver.c:2669
#, c-format
msgid "Zone %s was revoked, resolution fails\n"
msgstr ""
@@ -3967,31 +3952,39 @@ msgstr "Impossibile avviare il servizio ' %s'\n"
msgid "Gns REST API initialized\n"
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:448
+#: src/gnsrecord/gnsrecord_misc.c:52
+msgid "Label is NULL which is not allowed\n"
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:57
+msgid "Label contains `.' which is not allowed\n"
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:464
msgid "Zone delegation record not allowed in apex."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:456
+#: src/gnsrecord/gnsrecord_misc.c:472
msgid "Zone delegation record set contains mutually exclusive records."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:466
+#: src/gnsrecord/gnsrecord_misc.c:482
msgid "Multiple REDIRECT records."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:475 src/gnsrecord/gnsrecord_misc.c:501
+#: src/gnsrecord/gnsrecord_misc.c:491 src/gnsrecord/gnsrecord_misc.c:517
msgid "Redirection record set conains mutually exclusive records."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:482
+#: src/gnsrecord/gnsrecord_misc.c:498
msgid "Redirection records not allowed in apex."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:493
+#: src/gnsrecord/gnsrecord_misc.c:509
msgid "Redirection records not allowed in apex.."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:515
+#: src/gnsrecord/gnsrecord_misc.c:531
msgid "Mutually exclusive records."
msgstr ""
@@ -4552,12 +4545,18 @@ msgstr ""
msgid "Failed to parse JSON in option `%s': %s (%s)\n"
msgstr "Impossibile avviare il servizio ' %s'\n"
-#: src/messenger/plugin_gnsrecord_messenger.c:118
-#: src/messenger/plugin_gnsrecord_messenger.c:133
+#: src/messenger/plugin_gnsrecord_messenger.c:136
+#: src/messenger/plugin_gnsrecord_messenger.c:151
#, fuzzy, c-format
msgid "Unable to parse MESSENGER_ROOM_ENTRY record `%s'\n"
msgstr "Impossibile avviare il servizio ' %s'\n"
+#: src/messenger/plugin_gnsrecord_messenger.c:172
+#: src/messenger/plugin_gnsrecord_messenger.c:187
+#, fuzzy, c-format
+msgid "Unable to parse MESSENGER_ROOM_DETAILS record `%s'\n"
+msgstr "Impossibile avviare il servizio ' %s'\n"
+
#: src/my/my.c:196 src/my/my.c:215
#, c-format
msgid "%s failed at %s:%d with error: %s\n"
@@ -4598,7 +4597,7 @@ msgstr "# messaggi PONG ricevuti"
msgid "You must specify a name\n"
msgstr "È necessario specificare un nome\n"
-#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1591
+#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1582
msgid "name of the record to add/delete/display"
msgstr ""
@@ -4606,7 +4605,7 @@ msgstr ""
msgid "specifies the public key of the zone to look in"
msgstr ""
-#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1652
+#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1643
msgid "GNUnet zone manipulation tool"
msgstr ""
@@ -4849,12 +4848,7 @@ msgstr ""
msgid "Invalid URI `%s'\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1242
-#, c-format
-msgid "Label `%s' contains `.' which is not allowed\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:1292
+#: src/namestore/gnunet-namestore.c:1283
#, c-format
msgid ""
"No default identity configured for `namestore' subsystem\n"
@@ -4862,99 +4856,99 @@ msgid ""
"Run gnunet-identity -d to get a list of choices for $NAME\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1357
+#: src/namestore/gnunet-namestore.c:1348
#, c-format
msgid "Superfluous command line arguments (starting with `%s') ignored\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1386
+#: src/namestore/gnunet-namestore.c:1377
#, c-format
msgid "Cannot connect to identity service\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1433
+#: src/namestore/gnunet-namestore.c:1424
msgid "Empty record line argument is not allowed.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1445
+#: src/namestore/gnunet-namestore.c:1436
#, c-format
msgid "Invalid expiration time `%s' (must be without unit)\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1457 src/namestore/gnunet-namestore.c:1473
-#: src/namestore/gnunet-namestore.c:1490
+#: src/namestore/gnunet-namestore.c:1448 src/namestore/gnunet-namestore.c:1464
+#: src/namestore/gnunet-namestore.c:1481
#, c-format
msgid "Missing entries in record line `%s'.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1465
+#: src/namestore/gnunet-namestore.c:1456
#, fuzzy, c-format
msgid "Unknown record type `%s'\n"
msgstr "Comando `%s' sconosciuto.\n"
-#: src/namestore/gnunet-namestore.c:1503
+#: src/namestore/gnunet-namestore.c:1494
#, fuzzy, c-format
msgid "Invalid record data for type %s: `%s'.\n"
msgstr "Indirizzo IPv6 non valido: `%s'\n"
-#: src/namestore/gnunet-namestore.c:1560
+#: src/namestore/gnunet-namestore.c:1551
msgid "add record"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1563
+#: src/namestore/gnunet-namestore.c:1554
msgid "delete record"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1567
+#: src/namestore/gnunet-namestore.c:1558
msgid "display records"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1574
+#: src/namestore/gnunet-namestore.c:1565
msgid ""
"expiration time for record to use (for adding only), \"never\" is possible"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1580
+#: src/namestore/gnunet-namestore.c:1571
msgid "set the desired nick name for the zone"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1585
+#: src/namestore/gnunet-namestore.c:1576
msgid "monitor changes in the namestore"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1597
+#: src/namestore/gnunet-namestore.c:1588
msgid "determine our name for the given PKEY"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1604
+#: src/namestore/gnunet-namestore.c:1595
msgid ""
"set record set to values given by (possibly multiple) RECORDLINES; can be "
"specified multiple times"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1610
+#: src/namestore/gnunet-namestore.c:1601
msgid "type of the record to add/delete/display"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1615
+#: src/namestore/gnunet-namestore.c:1606
msgid "URI to import into our zone"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1621
+#: src/namestore/gnunet-namestore.c:1612
msgid "value of the record to add/delete"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1625
+#: src/namestore/gnunet-namestore.c:1616
msgid "create or list public record"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1631
+#: src/namestore/gnunet-namestore.c:1622
msgid ""
"create shadow record (only valid if all other records of the same type have "
"expired"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1637
+#: src/namestore/gnunet-namestore.c:1628
msgid "name of the ego controlling the zone"
msgstr ""
@@ -4963,7 +4957,17 @@ msgstr ""
msgid "Failed to replicate block in namecache: %s\n"
msgstr ""
-#: src/namestore/gnunet-service-namestore.c:1668
+#: src/namestore/gnunet-service-namestore.c:1559
+#, fuzzy
+msgid "Error normalizing name."
+msgstr "Errore durante la scrittura di `%s'.\n"
+
+#: src/namestore/gnunet-service-namestore.c:1582
+#, fuzzy
+msgid "Error deserializing records."
+msgstr "Errore interno."
+
+#: src/namestore/gnunet-service-namestore.c:1691
msgid "Store failed"
msgstr ""
@@ -6659,8 +6663,8 @@ msgid "GNUnet topology control"
msgstr ""
#: src/transport/gnunet-communicator-tcp.c:3338
-#: src/transport/gnunet-communicator-udp.c:3856
-#: src/transport/gnunet-service-tng.c:10623
+#: src/transport/gnunet-communicator-udp.c:3867
+#: src/transport/gnunet-service-tng.c:10926
#: src/transport/gnunet-service-transport.c:2627
msgid "Transport service is lacking key configuration settings. Exiting.\n"
msgstr ""
@@ -6669,7 +6673,7 @@ msgstr ""
msgid "GNUnet TCP communicator"
msgstr ""
-#: src/transport/gnunet-communicator-udp.c:3931
+#: src/transport/gnunet-communicator-udp.c:3942
msgid "GNUnet UDP communicator"
msgstr ""
@@ -8011,12 +8015,12 @@ msgstr ""
msgid "libgcrypt has not the expected version (version %s is required).\n"
msgstr ""
-#: src/util/crypto_rsa.c:901
+#: src/util/crypto_rsa.c:907
#, c-format
msgid "RSA signing failed at %s:%d: %s\n"
msgstr ""
-#: src/util/crypto_rsa.c:1201
+#: src/util/crypto_rsa.c:1207
#, c-format
msgid "RSA signature verification failed at %s:%d: %s\n"
msgstr ""
@@ -8685,12 +8689,12 @@ msgstr ""
msgid "Wrong format `%s' for network\n"
msgstr ""
-#: src/util/time.c:870 src/util/time.c:898
+#: src/util/time.c:900 src/util/time.c:928
#, c-format
msgid "Failed to map `%s', cannot assure monotonic time!\n"
msgstr ""
-#: src/util/time.c:906
+#: src/util/time.c:936
#, c-format
msgid ""
"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 ""
msgstr ""
"Project-Id-Version: gnunet-0.10.1\n"
"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
-"POT-Creation-Date: 2022-03-04 22:23+0100\n"
+"POT-Creation-Date: 2022-04-01 08:42+0200\n"
"PO-Revision-Date: 2020-10-23 18:39+0200\n"
"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
"Language-Team: Serbian <(nothing)>\n"
@@ -18,7 +18,7 @@ msgstr ""
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
-#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1254
+#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1245
#, c-format
msgid "Ego `%s' not known to identity service\n"
msgstr "Его „%s“ није познат услузи идентитета\n"
@@ -2131,21 +2131,6 @@ msgstr ""
msgid "Measure quality and performance of the DHT service."
msgstr "Мери квалитет и учинковитост НСЕ услуге."
-#: src/dht/plugin_block_dht.c:404
-#, c-format
-msgid "Block not of type %u\n"
-msgstr "Блок није врсте %u\n"
-
-#: src/dht/plugin_block_dht.c:413
-#, fuzzy, c-format
-msgid "Size mismatch for block with type %u\n"
-msgstr "Величин не одговара за блок\n"
-
-#: src/dht/plugin_block_dht.c:424
-#, c-format
-msgid "Block of type %u is malformed\n"
-msgstr "Блок врсте %u је лош\n"
-
#: src/dns/gnunet-dns-monitor.c:371 src/dns/gnunet-dns-monitor.c:376
msgid "only monitor DNS queries"
msgstr "само надгледа ДНС упите"
@@ -2880,20 +2865,20 @@ msgstr "SKS УРИ је лоше (не могу да обрадим време
msgid "LOC URI malformed (signature failed validation)"
msgstr "SKS УРИ је лоше (потврђивање потписа није успело)"
-#: src/fs/fs_uri.c:652
+#: src/fs/fs_uri.c:653
#, fuzzy
msgid "invalid argument"
msgstr "Неисправан аргумент „%s“\n"
-#: src/fs/fs_uri.c:671
+#: src/fs/fs_uri.c:673
msgid "Unrecognized URI type"
msgstr "Непозната УРИ врста"
-#: src/fs/fs_uri.c:1075 src/fs/fs_uri.c:1102
+#: src/fs/fs_uri.c:1077 src/fs/fs_uri.c:1104
msgid "No keywords specified!\n"
msgstr "Нису наведене речи кључа!\n"
-#: src/fs/fs_uri.c:1108
+#: src/fs/fs_uri.c:1110
msgid "Number of double-quotes not balanced!\n"
msgstr "Број двоструких квота које нису уравнотежене!\n"
@@ -3634,94 +3619,94 @@ msgstr "# захтеви су освежени"
msgid "# query plan entries"
msgstr "# пропитује обичне уносе"
-#: src/fs/gnunet-service-fs_pr.c:329
+#: src/fs/gnunet-service-fs_pr.c:330
msgid "# Pending requests created"
msgstr "# Захтеви на чекању су створени"
-#: src/fs/gnunet-service-fs_pr.c:421 src/fs/gnunet-service-fs_pr.c:658
+#: src/fs/gnunet-service-fs_pr.c:422 src/fs/gnunet-service-fs_pr.c:662
msgid "# Pending requests active"
msgstr "# Захтеви на чекању су активни"
-#: src/fs/gnunet-service-fs_pr.c:838
+#: src/fs/gnunet-service-fs_pr.c:837
msgid "# replies received and matched"
msgstr "# одговори су примљени и подударени"
-#: src/fs/gnunet-service-fs_pr.c:916
+#: src/fs/gnunet-service-fs_pr.c:911
msgid "# results found locally"
msgstr "# резултати су пронађени локално"
-#: src/fs/gnunet-service-fs_pr.c:1050
+#: src/fs/gnunet-service-fs_pr.c:1045
msgid "# Datastore `PUT' failures"
msgstr "# Неуспеси „СТАВИ“ смештаја података"
-#: src/fs/gnunet-service-fs_pr.c:1079
+#: src/fs/gnunet-service-fs_pr.c:1074
msgid "# storage requests dropped due to high load"
msgstr "# захтеви смештаја су одбачени услед високог утовара"
-#: src/fs/gnunet-service-fs_pr.c:1118
+#: src/fs/gnunet-service-fs_pr.c:1113
msgid "# Replies received from DHT"
msgstr "# Одговори су примљени од DHT-а"
-#: src/fs/gnunet-service-fs_pr.c:1259
+#: src/fs/gnunet-service-fs_pr.c:1268
#, fuzzy
msgid "# Replies received from CADET"
msgstr "# Одговори су примљени од DHT-а"
-#: src/fs/gnunet-service-fs_pr.c:1313
+#: src/fs/gnunet-service-fs_pr.c:1323
#, c-format
msgid "Datastore lookup already took %s!\n"
msgstr "Претрага смештаја података је већ узела „%s“!\n"
-#: src/fs/gnunet-service-fs_pr.c:1334
+#: src/fs/gnunet-service-fs_pr.c:1344
#, c-format
msgid "On-demand lookup already took %s!\n"
msgstr "Претрага на-захтев је већ узела „%s“!\n"
-#: src/fs/gnunet-service-fs_pr.c:1401
+#: src/fs/gnunet-service-fs_pr.c:1411
msgid "# requested DBLOCK or IBLOCK not found"
msgstr "# захтевани DBLOCK или IBLOCK нису нађени"
-#: src/fs/gnunet-service-fs_pr.c:1463
+#: src/fs/gnunet-service-fs_pr.c:1473
msgid "# Datastore lookups concluded (error queueing)"
msgstr "# Претраге смештаја података су закључене (грешка стављања у ред)"
-#: src/fs/gnunet-service-fs_pr.c:1518
+#: src/fs/gnunet-service-fs_pr.c:1528
msgid "# Datastore lookups concluded (no results)"
msgstr "# Претраге смештаја података су закључене (нема резултата)"
-#: src/fs/gnunet-service-fs_pr.c:1533
+#: src/fs/gnunet-service-fs_pr.c:1543
msgid "# Datastore lookups concluded (seen all)"
msgstr "# Претраге смештаја података су закључене (видех све)"
-#: src/fs/gnunet-service-fs_pr.c:1556
+#: src/fs/gnunet-service-fs_pr.c:1566
msgid "# Datastore lookups aborted (more than MAX_RESULTS)"
msgstr "# Претраге смештаја података су прекинуте (више од „MAX_RESULTS“)"
-#: src/fs/gnunet-service-fs_pr.c:1573
+#: src/fs/gnunet-service-fs_pr.c:1583
msgid "# on-demand blocks matched requests"
msgstr "# блокови на-захтев одговарају захтевима"
-#: src/fs/gnunet-service-fs_pr.c:1594
+#: src/fs/gnunet-service-fs_pr.c:1604
msgid "# on-demand lookups performed successfully"
msgstr "# претраге на-захтев су обављене успешно"
-#: src/fs/gnunet-service-fs_pr.c:1600
+#: src/fs/gnunet-service-fs_pr.c:1610
msgid "# on-demand lookups failed"
msgstr "# претраге на-захтев нису успеле"
-#: src/fs/gnunet-service-fs_pr.c:1641
+#: src/fs/gnunet-service-fs_pr.c:1656
msgid "# Datastore lookups concluded (found last result)"
msgstr "# Претраге смештаја података су закључене (нађох последњи резултат)"
-#: src/fs/gnunet-service-fs_pr.c:1654
+#: src/fs/gnunet-service-fs_pr.c:1669
msgid "# Datastore lookups concluded (load too high)"
msgstr "# Претраге смештаја података су закључене (утовар је превелик)"
-#: src/fs/gnunet-service-fs_pr.c:1705
+#: src/fs/gnunet-service-fs_pr.c:1720
msgid "# Datastore lookups initiated"
msgstr "# Претраге смештаја података су покренуте"
-#: src/fs/gnunet-service-fs_pr.c:1755
+#: src/fs/gnunet-service-fs_pr.c:1784
msgid "# GAP PUT messages received"
msgstr "# поруке ЈАЗ СТАВИ су примљене"
@@ -4033,64 +4018,64 @@ msgstr "Грешка претварања ГНС одговора у ДНС од
msgid "Failed to connect to the DNS service!\n"
msgstr "Нисам успео да се повежем са ДНС услугом!\n"
-#: src/gns/gnunet-service-gns_resolver.c:659
+#: src/gns/gnunet-service-gns_resolver.c:672
#, c-format
msgid "Protocol `%s' unknown, skipping labels.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:671
+#: src/gns/gnunet-service-gns_resolver.c:684
#, c-format
msgid "Service `%s' unknown for protocol `%s', trying as number.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:677
+#: src/gns/gnunet-service-gns_resolver.c:690
#, c-format
msgid "Service `%s' not a port, skipping service labels.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:891
+#: src/gns/gnunet-service-gns_resolver.c:904
msgid "Failed to parse DNS response\n"
msgstr "Нисам успео да обрадим ДНС одговор\n"
-#: src/gns/gnunet-service-gns_resolver.c:1082
+#: src/gns/gnunet-service-gns_resolver.c:1095
#, c-format
msgid "Skipping record of unsupported type %d\n"
msgstr "Прескачем запис неподржане врсте %d\n"
-#: src/gns/gnunet-service-gns_resolver.c:1859
+#: src/gns/gnunet-service-gns_resolver.c:1872
#, c-format
msgid "Name `%s' cannot be converted to IDNA."
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1874
+#: src/gns/gnunet-service-gns_resolver.c:1887
#, c-format
msgid "GNS lookup resulted in DNS name that is too long (`%s')\n"
msgstr "ГНС претраживање је резултирало ДНС називом који је предуг („%s“)\n"
-#: src/gns/gnunet-service-gns_resolver.c:1914
+#: src/gns/gnunet-service-gns_resolver.c:1927
#, fuzzy, c-format
msgid "GNS lookup failed (zero records found for `%s')\n"
msgstr "Дубачење ГНС претраге није успело (нисам нашао запис изасланства)\n"
-#: src/gns/gnunet-service-gns_resolver.c:2312
+#: src/gns/gnunet-service-gns_resolver.c:2329
msgid "Unable to process critical delegation record\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2317
+#: src/gns/gnunet-service-gns_resolver.c:2334
msgid "GNS lookup recursion failed (no delegation record found)\n"
msgstr "Дубачење ГНС претраге није успело (нисам нашао запис изасланства)\n"
-#: src/gns/gnunet-service-gns_resolver.c:2340
+#: src/gns/gnunet-service-gns_resolver.c:2357
#, c-format
msgid "Failed to cache GNS resolution: %s\n"
msgstr "Нисам успео да сместим у оставу ГНС резолуцију: %s\n"
-#: src/gns/gnunet-service-gns_resolver.c:2505
+#: src/gns/gnunet-service-gns_resolver.c:2522
#, fuzzy, c-format
msgid "GNS namecache returned empty result for `%s'\n"
msgstr "АТС је вратио резултате за %u адресе\n"
-#: src/gns/gnunet-service-gns_resolver.c:2652
+#: src/gns/gnunet-service-gns_resolver.c:2669
#, c-format
msgid "Zone %s was revoked, resolution fails\n"
msgstr "Зона %s је опозвана, резолуција није успела\n"
@@ -4133,31 +4118,39 @@ msgstr "Не могу да обрадим ниску ВПН записа „%s
msgid "Gns REST API initialized\n"
msgstr "Меш је покренут\n"
-#: src/gnsrecord/gnsrecord_misc.c:448
+#: src/gnsrecord/gnsrecord_misc.c:52
+msgid "Label is NULL which is not allowed\n"
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:57
+msgid "Label contains `.' which is not allowed\n"
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:464
msgid "Zone delegation record not allowed in apex."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:456
+#: src/gnsrecord/gnsrecord_misc.c:472
msgid "Zone delegation record set contains mutually exclusive records."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:466
+#: src/gnsrecord/gnsrecord_misc.c:482
msgid "Multiple REDIRECT records."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:475 src/gnsrecord/gnsrecord_misc.c:501
+#: src/gnsrecord/gnsrecord_misc.c:491 src/gnsrecord/gnsrecord_misc.c:517
msgid "Redirection record set conains mutually exclusive records."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:482
+#: src/gnsrecord/gnsrecord_misc.c:498
msgid "Redirection records not allowed in apex."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:493
+#: src/gnsrecord/gnsrecord_misc.c:509
msgid "Redirection records not allowed in apex.."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:515
+#: src/gnsrecord/gnsrecord_misc.c:531
msgid "Mutually exclusive records."
msgstr ""
@@ -4740,12 +4733,18 @@ msgstr ""
msgid "Failed to parse JSON in option `%s': %s (%s)\n"
msgstr "Нисам успео да обрадим „HELLO“ у датотеци „%s“: %s\n"
-#: src/messenger/plugin_gnsrecord_messenger.c:118
-#: src/messenger/plugin_gnsrecord_messenger.c:133
+#: src/messenger/plugin_gnsrecord_messenger.c:136
+#: src/messenger/plugin_gnsrecord_messenger.c:151
#, fuzzy, c-format
msgid "Unable to parse MESSENGER_ROOM_ENTRY record `%s'\n"
msgstr "Не могу да обрадим „SOA“ запис „%s“\n"
+#: src/messenger/plugin_gnsrecord_messenger.c:172
+#: src/messenger/plugin_gnsrecord_messenger.c:187
+#, fuzzy, c-format
+msgid "Unable to parse MESSENGER_ROOM_DETAILS record `%s'\n"
+msgstr "Не могу да обрадим „SOA“ запис „%s“\n"
+
#: src/my/my.c:196 src/my/my.c:215
#, fuzzy, c-format
msgid "%s failed at %s:%d with error: %s\n"
@@ -4786,7 +4785,7 @@ msgstr "Неисправан јавни кључ за обратну претр
msgid "You must specify a name\n"
msgstr "Морате навести назив\n"
-#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1591
+#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1582
msgid "name of the record to add/delete/display"
msgstr "назив записа за додавање/брисање/приказ"
@@ -4795,7 +4794,7 @@ msgstr "назив записа за додавање/брисање/прика
msgid "specifies the public key of the zone to look in"
msgstr "наводи јавни кључ зоне за претраживање"
-#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1652
+#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1643
msgid "GNUnet zone manipulation tool"
msgstr "Алат манипуслисања ГНУнет зоном"
@@ -5042,12 +5041,7 @@ msgstr "Неисправан јавни кључ за обратну претр
msgid "Invalid URI `%s'\n"
msgstr "Неисправан УРИ „%s“\n"
-#: src/namestore/gnunet-namestore.c:1242
-#, c-format
-msgid "Label `%s' contains `.' which is not allowed\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:1292
+#: src/namestore/gnunet-namestore.c:1283
#, c-format
msgid ""
"No default identity configured for `namestore' subsystem\n"
@@ -5055,100 +5049,100 @@ msgid ""
"Run gnunet-identity -d to get a list of choices for $NAME\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1357
+#: src/namestore/gnunet-namestore.c:1348
#, c-format
msgid "Superfluous command line arguments (starting with `%s') ignored\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1386
+#: src/namestore/gnunet-namestore.c:1377
#, c-format
msgid "Cannot connect to identity service\n"
msgstr "Не могу да се повежем са услугом идентитета\n"
-#: src/namestore/gnunet-namestore.c:1433
+#: src/namestore/gnunet-namestore.c:1424
msgid "Empty record line argument is not allowed.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1445
+#: src/namestore/gnunet-namestore.c:1436
#, c-format
msgid "Invalid expiration time `%s' (must be without unit)\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1457 src/namestore/gnunet-namestore.c:1473
-#: src/namestore/gnunet-namestore.c:1490
+#: src/namestore/gnunet-namestore.c:1448 src/namestore/gnunet-namestore.c:1464
+#: src/namestore/gnunet-namestore.c:1481
#, fuzzy, c-format
msgid "Missing entries in record line `%s'.\n"
msgstr "Недостаје функција „%s“ у прикључку преноса за „%s“\n"
-#: src/namestore/gnunet-namestore.c:1465
+#: src/namestore/gnunet-namestore.c:1456
#, fuzzy, c-format
msgid "Unknown record type `%s'\n"
msgstr "Непозната наредба „%s“\n"
-#: src/namestore/gnunet-namestore.c:1503
+#: src/namestore/gnunet-namestore.c:1494
#, fuzzy, c-format
msgid "Invalid record data for type %s: `%s'.\n"
msgstr "Неисправан формат за ИП: „%s“\n"
-#: src/namestore/gnunet-namestore.c:1560
+#: src/namestore/gnunet-namestore.c:1551
msgid "add record"
msgstr "додаје запис"
-#: src/namestore/gnunet-namestore.c:1563
+#: src/namestore/gnunet-namestore.c:1554
msgid "delete record"
msgstr "брише запис"
-#: src/namestore/gnunet-namestore.c:1567
+#: src/namestore/gnunet-namestore.c:1558
msgid "display records"
msgstr "приказује записе"
-#: src/namestore/gnunet-namestore.c:1574
+#: src/namestore/gnunet-namestore.c:1565
msgid ""
"expiration time for record to use (for adding only), \"never\" is possible"
msgstr "време истека записа за коришћење (само за додавање), „never“ је могуће"
-#: src/namestore/gnunet-namestore.c:1580
+#: src/namestore/gnunet-namestore.c:1571
msgid "set the desired nick name for the zone"
msgstr "поставља жељени назив надимка за зону"
-#: src/namestore/gnunet-namestore.c:1585
+#: src/namestore/gnunet-namestore.c:1576
msgid "monitor changes in the namestore"
msgstr "прати измене у смештају назива"
-#: src/namestore/gnunet-namestore.c:1597
+#: src/namestore/gnunet-namestore.c:1588
msgid "determine our name for the given PKEY"
msgstr "одређује наш назив за дати „PKEY“"
-#: src/namestore/gnunet-namestore.c:1604
+#: src/namestore/gnunet-namestore.c:1595
msgid ""
"set record set to values given by (possibly multiple) RECORDLINES; can be "
"specified multiple times"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1610
+#: src/namestore/gnunet-namestore.c:1601
msgid "type of the record to add/delete/display"
msgstr "врста записа за додавање/брисање/приказ"
-#: src/namestore/gnunet-namestore.c:1615
+#: src/namestore/gnunet-namestore.c:1606
msgid "URI to import into our zone"
msgstr "УРИ за увоз у нашу зону"
-#: src/namestore/gnunet-namestore.c:1621
+#: src/namestore/gnunet-namestore.c:1612
msgid "value of the record to add/delete"
msgstr "вредност записа за додавање/брисање"
-#: src/namestore/gnunet-namestore.c:1625
+#: src/namestore/gnunet-namestore.c:1616
msgid "create or list public record"
msgstr "ствара или исписује јавни запис"
-#: src/namestore/gnunet-namestore.c:1631
+#: src/namestore/gnunet-namestore.c:1622
msgid ""
"create shadow record (only valid if all other records of the same type have "
"expired"
msgstr ""
"прави сеновити запис (важи само ако су сви остали записи исте врсте истекли"
-#: src/namestore/gnunet-namestore.c:1637
+#: src/namestore/gnunet-namestore.c:1628
msgid "name of the ego controlling the zone"
msgstr "назив егоа који контролише зону"
@@ -5157,7 +5151,17 @@ msgstr "назив егоа који контролише зону"
msgid "Failed to replicate block in namecache: %s\n"
msgstr "Нисам успео да реплицирам блок у остави назива: %s\n"
-#: src/namestore/gnunet-service-namestore.c:1668
+#: src/namestore/gnunet-service-namestore.c:1559
+#, fuzzy
+msgid "Error normalizing name."
+msgstr "Грешка стварања тунела\n"
+
+#: src/namestore/gnunet-service-namestore.c:1582
+#, fuzzy
+msgid "Error deserializing records."
+msgstr "Унутрашња грешка скенирања директоријума.\n"
+
+#: src/namestore/gnunet-service-namestore.c:1691
#, fuzzy
msgid "Store failed"
msgstr "# Неуспеси „СТАВИ“ смештаја података"
@@ -6953,8 +6957,8 @@ msgid "GNUnet topology control"
msgstr ""
#: src/transport/gnunet-communicator-tcp.c:3338
-#: src/transport/gnunet-communicator-udp.c:3856
-#: src/transport/gnunet-service-tng.c:10623
+#: src/transport/gnunet-communicator-udp.c:3867
+#: src/transport/gnunet-service-tng.c:10926
#: src/transport/gnunet-service-transport.c:2627
msgid "Transport service is lacking key configuration settings. Exiting.\n"
msgstr "Услузи преноса недостају поставке подешавања кључа. Излазим.\n"
@@ -6963,7 +6967,7 @@ msgstr "Услузи преноса недостају поставке поде
msgid "GNUnet TCP communicator"
msgstr ""
-#: src/transport/gnunet-communicator-udp.c:3931
+#: src/transport/gnunet-communicator-udp.c:3942
msgid "GNUnet UDP communicator"
msgstr ""
@@ -8370,12 +8374,12 @@ msgstr "Не могу да учитам лични кључ парњака\n"
msgid "libgcrypt has not the expected version (version %s is required).\n"
msgstr "„libgcrypt“ није очекиваног издања (издање %s је потребно).\n"
-#: src/util/crypto_rsa.c:901
+#: src/util/crypto_rsa.c:907
#, fuzzy, c-format
msgid "RSA signing failed at %s:%d: %s\n"
msgstr "„EdDSA“ потписивање није успело на %s:%d: %s\n"
-#: src/util/crypto_rsa.c:1201
+#: src/util/crypto_rsa.c:1207
#, fuzzy, c-format
msgid "RSA signature verification failed at %s:%d: %s\n"
msgstr "Провера „ECDSA“ потписа није успела на %s:%d: %s\n"
@@ -9063,12 +9067,12 @@ msgstr "Погрешан формат „%s“ за мрежну маску\n"
msgid "Wrong format `%s' for network\n"
msgstr "Погрешан формат „%s“ за мрежу\n"
-#: src/util/time.c:870 src/util/time.c:898
+#: src/util/time.c:900 src/util/time.c:928
#, c-format
msgid "Failed to map `%s', cannot assure monotonic time!\n"
msgstr ""
-#: src/util/time.c:906
+#: src/util/time.c:936
#, c-format
msgid ""
"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"
@@ -9249,6 +9253,18 @@ msgstr "Поставља тунеле путем ВПН-а."
msgid "Failed to connect to the namestore!\n"
msgstr "Нисам успео да се повежем са смештајем назива!\n"
+#, c-format
+#~ msgid "Block not of type %u\n"
+#~ msgstr "Блок није врсте %u\n"
+
+#, fuzzy, c-format
+#~ msgid "Size mismatch for block with type %u\n"
+#~ msgstr "Величин не одговара за блок\n"
+
+#, c-format
+#~ msgid "Block of type %u is malformed\n"
+#~ msgstr "Блок врсте %u је лош\n"
+
#~ msgid "# items stored"
#~ msgstr "# ставке су смештене"
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 ""
msgstr ""
"Project-Id-Version: GNUnet 0.7.0b\n"
"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
-"POT-Creation-Date: 2022-03-04 22:23+0100\n"
+"POT-Creation-Date: 2022-04-01 08:42+0200\n"
"PO-Revision-Date: 2006-01-21 17:16+0100\n"
"Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
@@ -16,7 +16,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1254
+#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1245
#, fuzzy, c-format
msgid "Ego `%s' not known to identity service\n"
msgstr "\"%s\": okänd tjänst: %s\n"
@@ -2135,21 +2135,6 @@ msgstr ""
msgid "Measure quality and performance of the DHT service."
msgstr "Kan inte tillgå tjänsten"
-#: src/dht/plugin_block_dht.c:404
-#, fuzzy, c-format
-msgid "Block not of type %u\n"
-msgstr "Ingen transport av typ %d är känd.\n"
-
-#: src/dht/plugin_block_dht.c:413
-#, c-format
-msgid "Size mismatch for block with type %u\n"
-msgstr ""
-
-#: src/dht/plugin_block_dht.c:424
-#, c-format
-msgid "Block of type %u is malformed\n"
-msgstr ""
-
#: src/dns/gnunet-dns-monitor.c:371 src/dns/gnunet-dns-monitor.c:376
msgid "only monitor DNS queries"
msgstr ""
@@ -2882,20 +2867,20 @@ msgstr ""
msgid "LOC URI malformed (signature failed validation)"
msgstr ""
-#: src/fs/fs_uri.c:652
+#: src/fs/fs_uri.c:653
#, fuzzy
msgid "invalid argument"
msgstr "Ogiltigt argument: \"%s\"\n"
-#: src/fs/fs_uri.c:671
+#: src/fs/fs_uri.c:673
msgid "Unrecognized URI type"
msgstr ""
-#: src/fs/fs_uri.c:1075 src/fs/fs_uri.c:1102
+#: src/fs/fs_uri.c:1077 src/fs/fs_uri.c:1104
msgid "No keywords specified!\n"
msgstr "Inga nyckelord angivna!\n"
-#: src/fs/fs_uri.c:1108
+#: src/fs/fs_uri.c:1110
msgid "Number of double-quotes not balanced!\n"
msgstr ""
@@ -3627,98 +3612,98 @@ msgstr "# byte mottogs via TCP"
msgid "# query plan entries"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:329
+#: src/fs/gnunet-service-fs_pr.c:330
#, fuzzy
msgid "# Pending requests created"
msgstr "# byte mottogs via TCP"
-#: src/fs/gnunet-service-fs_pr.c:421 src/fs/gnunet-service-fs_pr.c:658
+#: src/fs/gnunet-service-fs_pr.c:422 src/fs/gnunet-service-fs_pr.c:662
msgid "# Pending requests active"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:838
+#: src/fs/gnunet-service-fs_pr.c:837
#, fuzzy
msgid "# replies received and matched"
msgstr "# byte mottagna av typen %d"
-#: src/fs/gnunet-service-fs_pr.c:916
+#: src/fs/gnunet-service-fs_pr.c:911
msgid "# results found locally"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1050
+#: src/fs/gnunet-service-fs_pr.c:1045
msgid "# Datastore `PUT' failures"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1079
+#: src/fs/gnunet-service-fs_pr.c:1074
#, fuzzy
msgid "# storage requests dropped due to high load"
msgstr "Nätverksannonsering avstängd i konfigurationen!\n"
-#: src/fs/gnunet-service-fs_pr.c:1118
+#: src/fs/gnunet-service-fs_pr.c:1113
#, fuzzy
msgid "# Replies received from DHT"
msgstr "# byte mottagna via HTTP"
-#: src/fs/gnunet-service-fs_pr.c:1259
+#: src/fs/gnunet-service-fs_pr.c:1268
#, fuzzy
msgid "# Replies received from CADET"
msgstr "# byte mottagna via HTTP"
-#: src/fs/gnunet-service-fs_pr.c:1313
+#: src/fs/gnunet-service-fs_pr.c:1323
#, c-format
msgid "Datastore lookup already took %s!\n"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1334
+#: src/fs/gnunet-service-fs_pr.c:1344
#, c-format
msgid "On-demand lookup already took %s!\n"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1401
+#: src/fs/gnunet-service-fs_pr.c:1411
msgid "# requested DBLOCK or IBLOCK not found"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1463
+#: src/fs/gnunet-service-fs_pr.c:1473
msgid "# Datastore lookups concluded (error queueing)"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1518
+#: src/fs/gnunet-service-fs_pr.c:1528
msgid "# Datastore lookups concluded (no results)"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1533
+#: src/fs/gnunet-service-fs_pr.c:1543
msgid "# Datastore lookups concluded (seen all)"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1556
+#: src/fs/gnunet-service-fs_pr.c:1566
msgid "# Datastore lookups aborted (more than MAX_RESULTS)"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1573
+#: src/fs/gnunet-service-fs_pr.c:1583
msgid "# on-demand blocks matched requests"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1594
+#: src/fs/gnunet-service-fs_pr.c:1604
msgid "# on-demand lookups performed successfully"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1600
+#: src/fs/gnunet-service-fs_pr.c:1610
msgid "# on-demand lookups failed"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1641
+#: src/fs/gnunet-service-fs_pr.c:1656
msgid "# Datastore lookups concluded (found last result)"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1654
+#: src/fs/gnunet-service-fs_pr.c:1669
msgid "# Datastore lookups concluded (load too high)"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1705
+#: src/fs/gnunet-service-fs_pr.c:1720
msgid "# Datastore lookups initiated"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1755
+#: src/fs/gnunet-service-fs_pr.c:1784
#, fuzzy
msgid "# GAP PUT messages received"
msgstr "# krypterade PONG-meddelanden mottagna"
@@ -4036,65 +4021,65 @@ msgstr ""
msgid "Failed to connect to the DNS service!\n"
msgstr "Misslyckades att ansluta till gnunetd.\n"
-#: src/gns/gnunet-service-gns_resolver.c:659
+#: src/gns/gnunet-service-gns_resolver.c:672
#, c-format
msgid "Protocol `%s' unknown, skipping labels.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:671
+#: src/gns/gnunet-service-gns_resolver.c:684
#, c-format
msgid "Service `%s' unknown for protocol `%s', trying as number.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:677
+#: src/gns/gnunet-service-gns_resolver.c:690
#, c-format
msgid "Service `%s' not a port, skipping service labels.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:891
+#: src/gns/gnunet-service-gns_resolver.c:904
#, fuzzy
msgid "Failed to parse DNS response\n"
msgstr "Misslyckades att skicka HTTP-begäran till värd \"%s\": %s\n"
-#: src/gns/gnunet-service-gns_resolver.c:1082
+#: src/gns/gnunet-service-gns_resolver.c:1095
#, c-format
msgid "Skipping record of unsupported type %d\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1859
+#: src/gns/gnunet-service-gns_resolver.c:1872
#, c-format
msgid "Name `%s' cannot be converted to IDNA."
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1874
+#: src/gns/gnunet-service-gns_resolver.c:1887
#, c-format
msgid "GNS lookup resulted in DNS name that is too long (`%s')\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1914
+#: src/gns/gnunet-service-gns_resolver.c:1927
#, fuzzy, c-format
msgid "GNS lookup failed (zero records found for `%s')\n"
msgstr "%d filer hittades i katalog.\n"
-#: src/gns/gnunet-service-gns_resolver.c:2312
+#: src/gns/gnunet-service-gns_resolver.c:2329
msgid "Unable to process critical delegation record\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2317
+#: src/gns/gnunet-service-gns_resolver.c:2334
msgid "GNS lookup recursion failed (no delegation record found)\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2340
+#: src/gns/gnunet-service-gns_resolver.c:2357
#, fuzzy, c-format
msgid "Failed to cache GNS resolution: %s\n"
msgstr "Misslyckades att skicka HTTP-begäran till värd \"%s\": %s\n"
-#: src/gns/gnunet-service-gns_resolver.c:2505
+#: src/gns/gnunet-service-gns_resolver.c:2522
#, c-format
msgid "GNS namecache returned empty result for `%s'\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2652
+#: src/gns/gnunet-service-gns_resolver.c:2669
#, c-format
msgid "Zone %s was revoked, resolution fails\n"
msgstr ""
@@ -4137,31 +4122,39 @@ msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
msgid "Gns REST API initialized\n"
msgstr " Anslutning misslyckades\n"
-#: src/gnsrecord/gnsrecord_misc.c:448
+#: src/gnsrecord/gnsrecord_misc.c:52
+msgid "Label is NULL which is not allowed\n"
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:57
+msgid "Label contains `.' which is not allowed\n"
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:464
msgid "Zone delegation record not allowed in apex."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:456
+#: src/gnsrecord/gnsrecord_misc.c:472
msgid "Zone delegation record set contains mutually exclusive records."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:466
+#: src/gnsrecord/gnsrecord_misc.c:482
msgid "Multiple REDIRECT records."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:475 src/gnsrecord/gnsrecord_misc.c:501
+#: src/gnsrecord/gnsrecord_misc.c:491 src/gnsrecord/gnsrecord_misc.c:517
msgid "Redirection record set conains mutually exclusive records."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:482
+#: src/gnsrecord/gnsrecord_misc.c:498
msgid "Redirection records not allowed in apex."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:493
+#: src/gnsrecord/gnsrecord_misc.c:509
msgid "Redirection records not allowed in apex.."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:515
+#: src/gnsrecord/gnsrecord_misc.c:531
msgid "Mutually exclusive records."
msgstr ""
@@ -4732,12 +4725,18 @@ msgstr " Anslutning misslyckades\n"
msgid "Failed to parse JSON in option `%s': %s (%s)\n"
msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
-#: src/messenger/plugin_gnsrecord_messenger.c:118
-#: src/messenger/plugin_gnsrecord_messenger.c:133
+#: src/messenger/plugin_gnsrecord_messenger.c:136
+#: src/messenger/plugin_gnsrecord_messenger.c:151
#, fuzzy, c-format
msgid "Unable to parse MESSENGER_ROOM_ENTRY record `%s'\n"
msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
+#: src/messenger/plugin_gnsrecord_messenger.c:172
+#: src/messenger/plugin_gnsrecord_messenger.c:187
+#, fuzzy, c-format
+msgid "Unable to parse MESSENGER_ROOM_DETAILS record `%s'\n"
+msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
+
#: src/my/my.c:196 src/my/my.c:215
#, fuzzy, c-format
msgid "%s failed at %s:%d with error: %s\n"
@@ -4778,7 +4777,7 @@ msgstr "Ogiltigt argument: \"%s\"\n"
msgid "You must specify a name\n"
msgstr "Du måste ange en mottagare!\n"
-#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1591
+#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1582
msgid "name of the record to add/delete/display"
msgstr ""
@@ -4787,7 +4786,7 @@ msgstr ""
msgid "specifies the public key of the zone to look in"
msgstr "ange prioritet för innehållet"
-#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1652
+#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1643
#, fuzzy
msgid "GNUnet zone manipulation tool"
msgstr "GNUnet-konfiguration"
@@ -5042,12 +5041,7 @@ msgstr "Ogiltigt argument: \"%s\"\n"
msgid "Invalid URI `%s'\n"
msgstr "Ogiltiga argument: "
-#: src/namestore/gnunet-namestore.c:1242
-#, c-format
-msgid "Label `%s' contains `.' which is not allowed\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:1292
+#: src/namestore/gnunet-namestore.c:1283
#, c-format
msgid ""
"No default identity configured for `namestore' subsystem\n"
@@ -5055,102 +5049,102 @@ msgid ""
"Run gnunet-identity -d to get a list of choices for $NAME\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1357
+#: src/namestore/gnunet-namestore.c:1348
#, fuzzy, c-format
msgid "Superfluous command line arguments (starting with `%s') ignored\n"
msgstr "Onödiga argument (ignorerade).\n"
-#: src/namestore/gnunet-namestore.c:1386
+#: src/namestore/gnunet-namestore.c:1377
#, fuzzy, c-format
msgid "Cannot connect to identity service\n"
msgstr "Kunde inte ansluta till gnunetd.\n"
-#: src/namestore/gnunet-namestore.c:1433
+#: src/namestore/gnunet-namestore.c:1424
msgid "Empty record line argument is not allowed.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1445
+#: src/namestore/gnunet-namestore.c:1436
#, c-format
msgid "Invalid expiration time `%s' (must be without unit)\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1457 src/namestore/gnunet-namestore.c:1473
-#: src/namestore/gnunet-namestore.c:1490
+#: src/namestore/gnunet-namestore.c:1448 src/namestore/gnunet-namestore.c:1464
+#: src/namestore/gnunet-namestore.c:1481
#, fuzzy, c-format
msgid "Missing entries in record line `%s'.\n"
msgstr "Kunde inte slå upp \"%s\": %s\n"
-#: src/namestore/gnunet-namestore.c:1465
+#: src/namestore/gnunet-namestore.c:1456
#, fuzzy, c-format
msgid "Unknown record type `%s'\n"
msgstr "Okänd operation \"%s\"\n"
-#: src/namestore/gnunet-namestore.c:1503
+#: src/namestore/gnunet-namestore.c:1494
#, fuzzy, c-format
msgid "Invalid record data for type %s: `%s'.\n"
msgstr "Ogiltigt format för IP: \"%s\"\n"
-#: src/namestore/gnunet-namestore.c:1560
+#: src/namestore/gnunet-namestore.c:1551
msgid "add record"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1563
+#: src/namestore/gnunet-namestore.c:1554
msgid "delete record"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1567
+#: src/namestore/gnunet-namestore.c:1558
msgid "display records"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1574
+#: src/namestore/gnunet-namestore.c:1565
msgid ""
"expiration time for record to use (for adding only), \"never\" is possible"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1580
+#: src/namestore/gnunet-namestore.c:1571
#, fuzzy
msgid "set the desired nick name for the zone"
msgstr "Skriv ut information om GNUnets motparter."
-#: src/namestore/gnunet-namestore.c:1585
+#: src/namestore/gnunet-namestore.c:1576
#, fuzzy
msgid "monitor changes in the namestore"
msgstr "Misslyckades att ansluta till gnunetd.\n"
-#: src/namestore/gnunet-namestore.c:1597
+#: src/namestore/gnunet-namestore.c:1588
#, fuzzy
msgid "determine our name for the given PKEY"
msgstr "Skriv ut information om GNUnets motparter."
-#: src/namestore/gnunet-namestore.c:1604
+#: src/namestore/gnunet-namestore.c:1595
msgid ""
"set record set to values given by (possibly multiple) RECORDLINES; can be "
"specified multiple times"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1610
+#: src/namestore/gnunet-namestore.c:1601
msgid "type of the record to add/delete/display"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1615
+#: src/namestore/gnunet-namestore.c:1606
msgid "URI to import into our zone"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1621
+#: src/namestore/gnunet-namestore.c:1612
msgid "value of the record to add/delete"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1625
+#: src/namestore/gnunet-namestore.c:1616
msgid "create or list public record"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1631
+#: src/namestore/gnunet-namestore.c:1622
msgid ""
"create shadow record (only valid if all other records of the same type have "
"expired"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1637
+#: src/namestore/gnunet-namestore.c:1628
#, fuzzy
msgid "name of the ego controlling the zone"
msgstr "Visa värde av alternativet"
@@ -5160,7 +5154,17 @@ msgstr "Visa värde av alternativet"
msgid "Failed to replicate block in namecache: %s\n"
msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
-#: src/namestore/gnunet-service-namestore.c:1668
+#: src/namestore/gnunet-service-namestore.c:1559
+#, fuzzy
+msgid "Error normalizing name."
+msgstr "Klar med skapandet av värdnyckel.\n"
+
+#: src/namestore/gnunet-service-namestore.c:1582
+#, fuzzy
+msgid "Error deserializing records."
+msgstr "=\tFel vid läsning av katalog.\n"
+
+#: src/namestore/gnunet-service-namestore.c:1691
#, fuzzy
msgid "Store failed"
msgstr "gnunet-update misslyckades!"
@@ -6929,8 +6933,8 @@ msgid "GNUnet topology control"
msgstr ""
#: src/transport/gnunet-communicator-tcp.c:3338
-#: src/transport/gnunet-communicator-udp.c:3856
-#: src/transport/gnunet-service-tng.c:10623
+#: src/transport/gnunet-communicator-udp.c:3867
+#: src/transport/gnunet-service-tng.c:10926
#: src/transport/gnunet-service-transport.c:2627
#, fuzzy
msgid "Transport service is lacking key configuration settings. Exiting.\n"
@@ -6940,7 +6944,7 @@ msgstr "GNUnet-konfiguration"
msgid "GNUnet TCP communicator"
msgstr ""
-#: src/transport/gnunet-communicator-udp.c:3931
+#: src/transport/gnunet-communicator-udp.c:3942
msgid "GNUnet UDP communicator"
msgstr ""
@@ -8350,12 +8354,12 @@ msgstr "Kunde inte tolka konfigurationsfil \"%s\".\n"
msgid "libgcrypt has not the expected version (version %s is required).\n"
msgstr "libgcrypt har inte den förväntande versionen (version %s krävs).\n"
-#: src/util/crypto_rsa.c:901
+#: src/util/crypto_rsa.c:907
#, fuzzy, c-format
msgid "RSA signing failed at %s:%d: %s\n"
msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n"
-#: src/util/crypto_rsa.c:1201
+#: src/util/crypto_rsa.c:1207
#, fuzzy, c-format
msgid "RSA signature verification failed at %s:%d: %s\n"
msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n"
@@ -9031,12 +9035,12 @@ msgstr "Fel format \"%s\" för nätmask: %s\n"
msgid "Wrong format `%s' for network\n"
msgstr "Fel format \"%s\" för nätverk: %s\n"
-#: src/util/time.c:870 src/util/time.c:898
+#: src/util/time.c:900 src/util/time.c:928
#, c-format
msgid "Failed to map `%s', cannot assure monotonic time!\n"
msgstr ""
-#: src/util/time.c:906
+#: src/util/time.c:936
#, c-format
msgid ""
"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"
@@ -9226,6 +9230,10 @@ msgstr ""
msgid "Failed to connect to the namestore!\n"
msgstr "Misslyckades att ansluta till gnunetd.\n"
+#, fuzzy, c-format
+#~ msgid "Block not of type %u\n"
+#~ msgstr "Ingen transport av typ %d är känd.\n"
+
#, fuzzy
#~ msgid "# items stored"
#~ 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 ""
msgstr ""
"Project-Id-Version: gnunet 0.8.0a\n"
"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
-"POT-Creation-Date: 2022-03-04 22:23+0100\n"
+"POT-Creation-Date: 2022-04-01 08:42+0200\n"
"PO-Revision-Date: 2008-09-10 22:05+0930\n"
"Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
"Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
@@ -19,7 +19,7 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: LocFactoryEditor 1.7b3\n"
-#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1254
+#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1245
#, c-format
msgid "Ego `%s' not known to identity service\n"
msgstr ""
@@ -2156,21 +2156,6 @@ msgstr ""
msgid "Measure quality and performance of the DHT service."
msgstr "Không thể truy cập đến dịch vụ"
-#: src/dht/plugin_block_dht.c:404
-#, fuzzy, c-format
-msgid "Block not of type %u\n"
-msgstr "Không biết truyền tải nào kiểu %d.\n"
-
-#: src/dht/plugin_block_dht.c:413
-#, c-format
-msgid "Size mismatch for block with type %u\n"
-msgstr ""
-
-#: src/dht/plugin_block_dht.c:424
-#, c-format
-msgid "Block of type %u is malformed\n"
-msgstr ""
-
#: src/dns/gnunet-dns-monitor.c:371 src/dns/gnunet-dns-monitor.c:376
msgid "only monitor DNS queries"
msgstr ""
@@ -2901,20 +2886,20 @@ msgstr ""
msgid "LOC URI malformed (signature failed validation)"
msgstr ""
-#: src/fs/fs_uri.c:652
+#: src/fs/fs_uri.c:653
#, fuzzy
msgid "invalid argument"
msgstr "Đối số không hợp lệ cho « %s ».\n"
-#: src/fs/fs_uri.c:671
+#: src/fs/fs_uri.c:673
msgid "Unrecognized URI type"
msgstr ""
-#: src/fs/fs_uri.c:1075 src/fs/fs_uri.c:1102
+#: src/fs/fs_uri.c:1077 src/fs/fs_uri.c:1104
msgid "No keywords specified!\n"
msgstr "Chưa ghi rõ từ khoá.\n"
-#: src/fs/fs_uri.c:1108
+#: src/fs/fs_uri.c:1110
msgid "Number of double-quotes not balanced!\n"
msgstr "Có dấu nháy kép thừa hay thiếu.\n"
@@ -3671,100 +3656,100 @@ msgstr "# các yêu cầu get (lấy) dht được nhận"
msgid "# query plan entries"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:329
+#: src/fs/gnunet-service-fs_pr.c:330
#, fuzzy
msgid "# Pending requests created"
msgstr "# các yêu cầu get (lấy) dht được nhận"
-#: src/fs/gnunet-service-fs_pr.c:421 src/fs/gnunet-service-fs_pr.c:658
+#: src/fs/gnunet-service-fs_pr.c:422 src/fs/gnunet-service-fs_pr.c:662
#, fuzzy
msgid "# Pending requests active"
msgstr "# các yêu cầu get (lấy) dht được nhận"
-#: src/fs/gnunet-service-fs_pr.c:838
+#: src/fs/gnunet-service-fs_pr.c:837
#, fuzzy
msgid "# replies received and matched"
msgstr "# các byte kiểu %d được nhận"
-#: src/fs/gnunet-service-fs_pr.c:916
+#: src/fs/gnunet-service-fs_pr.c:911
#, fuzzy
msgid "# results found locally"
msgstr "# nội dung lỗ hổng được tìm cục bộ"
-#: src/fs/gnunet-service-fs_pr.c:1050
+#: src/fs/gnunet-service-fs_pr.c:1045
msgid "# Datastore `PUT' failures"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1079
+#: src/fs/gnunet-service-fs_pr.c:1074
#, fuzzy
msgid "# storage requests dropped due to high load"
msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải"
-#: src/fs/gnunet-service-fs_pr.c:1118
+#: src/fs/gnunet-service-fs_pr.c:1113
#, fuzzy
msgid "# Replies received from DHT"
msgstr "# các byte đã nhận qua HTTP"
-#: src/fs/gnunet-service-fs_pr.c:1259
+#: src/fs/gnunet-service-fs_pr.c:1268
#, fuzzy
msgid "# Replies received from CADET"
msgstr "# các byte đã nhận qua HTTP"
-#: src/fs/gnunet-service-fs_pr.c:1313
+#: src/fs/gnunet-service-fs_pr.c:1323
#, c-format
msgid "Datastore lookup already took %s!\n"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1334
+#: src/fs/gnunet-service-fs_pr.c:1344
#, c-format
msgid "On-demand lookup already took %s!\n"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1401
+#: src/fs/gnunet-service-fs_pr.c:1411
msgid "# requested DBLOCK or IBLOCK not found"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1463
+#: src/fs/gnunet-service-fs_pr.c:1473
msgid "# Datastore lookups concluded (error queueing)"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1518
+#: src/fs/gnunet-service-fs_pr.c:1528
msgid "# Datastore lookups concluded (no results)"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1533
+#: src/fs/gnunet-service-fs_pr.c:1543
msgid "# Datastore lookups concluded (seen all)"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1556
+#: src/fs/gnunet-service-fs_pr.c:1566
msgid "# Datastore lookups aborted (more than MAX_RESULTS)"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1573
+#: src/fs/gnunet-service-fs_pr.c:1583
msgid "# on-demand blocks matched requests"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1594
+#: src/fs/gnunet-service-fs_pr.c:1604
msgid "# on-demand lookups performed successfully"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1600
+#: src/fs/gnunet-service-fs_pr.c:1610
msgid "# on-demand lookups failed"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1641
+#: src/fs/gnunet-service-fs_pr.c:1656
msgid "# Datastore lookups concluded (found last result)"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1654
+#: src/fs/gnunet-service-fs_pr.c:1669
msgid "# Datastore lookups concluded (load too high)"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1705
+#: src/fs/gnunet-service-fs_pr.c:1720
msgid "# Datastore lookups initiated"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1755
+#: src/fs/gnunet-service-fs_pr.c:1784
#, fuzzy
msgid "# GAP PUT messages received"
msgstr "# 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"
msgid "Failed to connect to the DNS service!\n"
msgstr "Lỗi kết nối đến gnunetd.\n"
-#: src/gns/gnunet-service-gns_resolver.c:659
+#: src/gns/gnunet-service-gns_resolver.c:672
#, c-format
msgid "Protocol `%s' unknown, skipping labels.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:671
+#: src/gns/gnunet-service-gns_resolver.c:684
#, c-format
msgid "Service `%s' unknown for protocol `%s', trying as number.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:677
+#: src/gns/gnunet-service-gns_resolver.c:690
#, c-format
msgid "Service `%s' not a port, skipping service labels.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:891
+#: src/gns/gnunet-service-gns_resolver.c:904
#, fuzzy
msgid "Failed to parse DNS response\n"
msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
-#: src/gns/gnunet-service-gns_resolver.c:1082
+#: src/gns/gnunet-service-gns_resolver.c:1095
#, c-format
msgid "Skipping record of unsupported type %d\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1859
+#: src/gns/gnunet-service-gns_resolver.c:1872
#, c-format
msgid "Name `%s' cannot be converted to IDNA."
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1874
+#: src/gns/gnunet-service-gns_resolver.c:1887
#, c-format
msgid "GNS lookup resulted in DNS name that is too long (`%s')\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1914
+#: src/gns/gnunet-service-gns_resolver.c:1927
#, fuzzy, c-format
msgid "GNS lookup failed (zero records found for `%s')\n"
msgstr "Vẫn còn không tìm thấy đồng đẳng trong « %s ».\n"
-#: src/gns/gnunet-service-gns_resolver.c:2312
+#: src/gns/gnunet-service-gns_resolver.c:2329
msgid "Unable to process critical delegation record\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2317
+#: src/gns/gnunet-service-gns_resolver.c:2334
msgid "GNS lookup recursion failed (no delegation record found)\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2340
+#: src/gns/gnunet-service-gns_resolver.c:2357
#, fuzzy, c-format
msgid "Failed to cache GNS resolution: %s\n"
msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
-#: src/gns/gnunet-service-gns_resolver.c:2505
+#: src/gns/gnunet-service-gns_resolver.c:2522
#, c-format
msgid "GNS namecache returned empty result for `%s'\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2652
+#: src/gns/gnunet-service-gns_resolver.c:2669
#, c-format
msgid "Zone %s was revoked, resolution fails\n"
msgstr ""
@@ -4184,31 +4169,39 @@ msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
msgid "Gns REST API initialized\n"
msgstr "Lỗi sơ khởi lõi.\n"
-#: src/gnsrecord/gnsrecord_misc.c:448
+#: src/gnsrecord/gnsrecord_misc.c:52
+msgid "Label is NULL which is not allowed\n"
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:57
+msgid "Label contains `.' which is not allowed\n"
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:464
msgid "Zone delegation record not allowed in apex."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:456
+#: src/gnsrecord/gnsrecord_misc.c:472
msgid "Zone delegation record set contains mutually exclusive records."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:466
+#: src/gnsrecord/gnsrecord_misc.c:482
msgid "Multiple REDIRECT records."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:475 src/gnsrecord/gnsrecord_misc.c:501
+#: src/gnsrecord/gnsrecord_misc.c:491 src/gnsrecord/gnsrecord_misc.c:517
msgid "Redirection record set conains mutually exclusive records."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:482
+#: src/gnsrecord/gnsrecord_misc.c:498
msgid "Redirection records not allowed in apex."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:493
+#: src/gnsrecord/gnsrecord_misc.c:509
msgid "Redirection records not allowed in apex.."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:515
+#: src/gnsrecord/gnsrecord_misc.c:531
msgid "Mutually exclusive records."
msgstr ""
@@ -4792,12 +4785,18 @@ msgstr "Lỗi sơ khởi lõi.\n"
msgid "Failed to parse JSON in option `%s': %s (%s)\n"
msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
-#: src/messenger/plugin_gnsrecord_messenger.c:118
-#: src/messenger/plugin_gnsrecord_messenger.c:133
+#: src/messenger/plugin_gnsrecord_messenger.c:136
+#: src/messenger/plugin_gnsrecord_messenger.c:151
#, fuzzy, c-format
msgid "Unable to parse MESSENGER_ROOM_ENTRY record `%s'\n"
msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
+#: src/messenger/plugin_gnsrecord_messenger.c:172
+#: src/messenger/plugin_gnsrecord_messenger.c:187
+#, fuzzy, c-format
+msgid "Unable to parse MESSENGER_ROOM_DETAILS record `%s'\n"
+msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
+
#: src/my/my.c:196 src/my/my.c:215
#, fuzzy, c-format
msgid "%s failed at %s:%d with error: %s\n"
@@ -4838,7 +4837,7 @@ msgstr "Đối số không hợp lệ cho « %s ».\n"
msgid "You must specify a name\n"
msgstr "Phải ghi rõ tên hiệu\n"
-#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1591
+#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1582
msgid "name of the record to add/delete/display"
msgstr ""
@@ -4847,7 +4846,7 @@ msgstr ""
msgid "specifies the public key of the zone to look in"
msgstr "xác định mức ưu tiên của nội dung"
-#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1652
+#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1643
#, fuzzy
msgid "GNUnet zone manipulation tool"
msgstr "Cấu hình GNUnet"
@@ -5097,12 +5096,7 @@ msgstr "Đối số không hợp lệ cho « %s ».\n"
msgid "Invalid URI `%s'\n"
msgstr "Dữ liệu nhập không hợp lệ.\n"
-#: src/namestore/gnunet-namestore.c:1242
-#, c-format
-msgid "Label `%s' contains `.' which is not allowed\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:1292
+#: src/namestore/gnunet-namestore.c:1283
#, c-format
msgid ""
"No default identity configured for `namestore' subsystem\n"
@@ -5110,102 +5104,102 @@ msgid ""
"Run gnunet-identity -d to get a list of choices for $NAME\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1357
+#: src/namestore/gnunet-namestore.c:1348
#, c-format
msgid "Superfluous command line arguments (starting with `%s') ignored\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1386
+#: src/namestore/gnunet-namestore.c:1377
#, fuzzy, c-format
msgid "Cannot connect to identity service\n"
msgstr "Không thể kết nối tới %s:%u: %s\n"
-#: src/namestore/gnunet-namestore.c:1433
+#: src/namestore/gnunet-namestore.c:1424
msgid "Empty record line argument is not allowed.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1445
+#: src/namestore/gnunet-namestore.c:1436
#, c-format
msgid "Invalid expiration time `%s' (must be without unit)\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1457 src/namestore/gnunet-namestore.c:1473
-#: src/namestore/gnunet-namestore.c:1490
+#: src/namestore/gnunet-namestore.c:1448 src/namestore/gnunet-namestore.c:1464
+#: src/namestore/gnunet-namestore.c:1481
#, fuzzy, c-format
msgid "Missing entries in record line `%s'.\n"
msgstr "Không thể nạp phần bổ sung truyền tải « %s »\n"
-#: src/namestore/gnunet-namestore.c:1465
+#: src/namestore/gnunet-namestore.c:1456
#, fuzzy, c-format
msgid "Unknown record type `%s'\n"
msgstr "Không rõ câu lệnh « %s ».\n"
-#: src/namestore/gnunet-namestore.c:1503
+#: src/namestore/gnunet-namestore.c:1494
#, fuzzy, c-format
msgid "Invalid record data for type %s: `%s'.\n"
msgstr "Địa chỉ IP định dạng sai: %s\n"
-#: src/namestore/gnunet-namestore.c:1560
+#: src/namestore/gnunet-namestore.c:1551
msgid "add record"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1563
+#: src/namestore/gnunet-namestore.c:1554
msgid "delete record"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1567
+#: src/namestore/gnunet-namestore.c:1558
msgid "display records"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1574
+#: src/namestore/gnunet-namestore.c:1565
msgid ""
"expiration time for record to use (for adding only), \"never\" is possible"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1580
+#: src/namestore/gnunet-namestore.c:1571
#, fuzzy
msgid "set the desired nick name for the zone"
msgstr "In ra thông tin về các đồng đẳng GNUnet."
-#: src/namestore/gnunet-namestore.c:1585
+#: src/namestore/gnunet-namestore.c:1576
#, fuzzy
msgid "monitor changes in the namestore"
msgstr "Không kết nối được đến trình nền gnunetd."
-#: src/namestore/gnunet-namestore.c:1597
+#: src/namestore/gnunet-namestore.c:1588
#, fuzzy
msgid "determine our name for the given PKEY"
msgstr "In ra thông tin về các đồng đẳng GNUnet."
-#: src/namestore/gnunet-namestore.c:1604
+#: src/namestore/gnunet-namestore.c:1595
msgid ""
"set record set to values given by (possibly multiple) RECORDLINES; can be "
"specified multiple times"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1610
+#: src/namestore/gnunet-namestore.c:1601
msgid "type of the record to add/delete/display"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1615
+#: src/namestore/gnunet-namestore.c:1606
msgid "URI to import into our zone"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1621
+#: src/namestore/gnunet-namestore.c:1612
msgid "value of the record to add/delete"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1625
+#: src/namestore/gnunet-namestore.c:1616
msgid "create or list public record"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1631
+#: src/namestore/gnunet-namestore.c:1622
msgid ""
"create shadow record (only valid if all other records of the same type have "
"expired"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1637
+#: src/namestore/gnunet-namestore.c:1628
msgid "name of the ego controlling the zone"
msgstr ""
@@ -5214,7 +5208,17 @@ msgstr ""
msgid "Failed to replicate block in namecache: %s\n"
msgstr "Lỗi cập nhật dữ liệu cho mô-đun « %s »\n"
-#: src/namestore/gnunet-service-namestore.c:1668
+#: src/namestore/gnunet-service-namestore.c:1559
+#, fuzzy
+msgid "Error normalizing name."
+msgstr "Hoàn thành tạo khoá.\n"
+
+#: src/namestore/gnunet-service-namestore.c:1582
+#, fuzzy
+msgid "Error deserializing records."
+msgstr "=\tLỗi đọc thư mục.\n"
+
+#: src/namestore/gnunet-service-namestore.c:1691
#, fuzzy
msgid "Store failed"
msgstr "Kho dữ liệu đầy.\n"
@@ -6990,8 +6994,8 @@ msgid "GNUnet topology control"
msgstr ""
#: src/transport/gnunet-communicator-tcp.c:3338
-#: src/transport/gnunet-communicator-udp.c:3856
-#: src/transport/gnunet-service-tng.c:10623
+#: src/transport/gnunet-communicator-udp.c:3867
+#: src/transport/gnunet-service-tng.c:10926
#: src/transport/gnunet-service-transport.c:2627
#, fuzzy
msgid "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?"
msgid "GNUnet TCP communicator"
msgstr ""
-#: src/transport/gnunet-communicator-udp.c:3931
+#: src/transport/gnunet-communicator-udp.c:3942
msgid "GNUnet UDP communicator"
msgstr ""
@@ -8408,12 +8412,12 @@ msgstr "Không thể truy cập đến tập tin gnunet-directory « %s »\n"
msgid "libgcrypt has not the expected version (version %s is required).\n"
msgstr "libgcrypt không có phiên bản mong đợi (yêu cầu phiên bản %s).\n"
-#: src/util/crypto_rsa.c:901
+#: src/util/crypto_rsa.c:907
#, fuzzy, c-format
msgid "RSA signing failed at %s:%d: %s\n"
msgstr "%s bị lỗi tại %s:%d: « %s »\n"
-#: src/util/crypto_rsa.c:1201
+#: src/util/crypto_rsa.c:1207
#, c-format
msgid "RSA signature verification failed at %s:%d: %s\n"
msgstr "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"
msgid "Wrong format `%s' for network\n"
msgstr "Mạng có định dạng sai « %s »: %s\n"
-#: src/util/time.c:870 src/util/time.c:898
+#: src/util/time.c:900 src/util/time.c:928
#, c-format
msgid "Failed to map `%s', cannot assure monotonic time!\n"
msgstr ""
-#: src/util/time.c:906
+#: src/util/time.c:936
#, c-format
msgid ""
"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"
@@ -9284,6 +9288,10 @@ msgstr ""
msgid "Failed to connect to the namestore!\n"
msgstr "Không kết nối được đến trình nền gnunetd."
+#, fuzzy, c-format
+#~ msgid "Block not of type %u\n"
+#~ msgstr "Không biết truyền tải nào kiểu %d.\n"
+
#, fuzzy
#~ msgid "# items stored"
#~ 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 ""
msgstr ""
"Project-Id-Version: gnunet-0.8.1\n"
"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
-"POT-Creation-Date: 2022-03-04 22:23+0100\n"
+"POT-Creation-Date: 2022-04-01 08:42+0200\n"
"PO-Revision-Date: 2011-07-09 12:12+0800\n"
"Last-Translator: Wylmer Wang <wantinghard@gmail.com>\n"
"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
@@ -16,7 +16,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1254
+#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1245
#, c-format
msgid "Ego `%s' not known to identity service\n"
msgstr ""
@@ -2081,21 +2081,6 @@ msgstr ""
msgid "Measure quality and performance of the DHT service."
msgstr "无法访问该服务"
-#: src/dht/plugin_block_dht.c:404
-#, c-format
-msgid "Block not of type %u\n"
-msgstr ""
-
-#: src/dht/plugin_block_dht.c:413
-#, c-format
-msgid "Size mismatch for block with type %u\n"
-msgstr ""
-
-#: src/dht/plugin_block_dht.c:424
-#, c-format
-msgid "Block of type %u is malformed\n"
-msgstr ""
-
#: src/dns/gnunet-dns-monitor.c:371 src/dns/gnunet-dns-monitor.c:376
msgid "only monitor DNS queries"
msgstr ""
@@ -2798,20 +2783,20 @@ msgstr ""
msgid "LOC URI malformed (signature failed validation)"
msgstr ""
-#: src/fs/fs_uri.c:652
+#: src/fs/fs_uri.c:653
#, fuzzy
msgid "invalid argument"
msgstr "“%s”的参数无效。\n"
-#: src/fs/fs_uri.c:671
+#: src/fs/fs_uri.c:673
msgid "Unrecognized URI type"
msgstr ""
-#: src/fs/fs_uri.c:1075 src/fs/fs_uri.c:1102
+#: src/fs/fs_uri.c:1077 src/fs/fs_uri.c:1104
msgid "No keywords specified!\n"
msgstr ""
-#: src/fs/fs_uri.c:1108
+#: src/fs/fs_uri.c:1110
msgid "Number of double-quotes not balanced!\n"
msgstr ""
@@ -3521,93 +3506,93 @@ msgstr ""
msgid "# query plan entries"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:329
+#: src/fs/gnunet-service-fs_pr.c:330
msgid "# Pending requests created"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:421 src/fs/gnunet-service-fs_pr.c:658
+#: src/fs/gnunet-service-fs_pr.c:422 src/fs/gnunet-service-fs_pr.c:662
msgid "# Pending requests active"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:838
+#: src/fs/gnunet-service-fs_pr.c:837
msgid "# replies received and matched"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:916
+#: src/fs/gnunet-service-fs_pr.c:911
msgid "# results found locally"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1050
+#: src/fs/gnunet-service-fs_pr.c:1045
msgid "# Datastore `PUT' failures"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1079
+#: src/fs/gnunet-service-fs_pr.c:1074
msgid "# storage requests dropped due to high load"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1118
+#: src/fs/gnunet-service-fs_pr.c:1113
msgid "# Replies received from DHT"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1259
+#: src/fs/gnunet-service-fs_pr.c:1268
msgid "# Replies received from CADET"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1313
+#: src/fs/gnunet-service-fs_pr.c:1323
#, c-format
msgid "Datastore lookup already took %s!\n"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1334
+#: src/fs/gnunet-service-fs_pr.c:1344
#, c-format
msgid "On-demand lookup already took %s!\n"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1401
+#: src/fs/gnunet-service-fs_pr.c:1411
msgid "# requested DBLOCK or IBLOCK not found"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1463
+#: src/fs/gnunet-service-fs_pr.c:1473
msgid "# Datastore lookups concluded (error queueing)"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1518
+#: src/fs/gnunet-service-fs_pr.c:1528
msgid "# Datastore lookups concluded (no results)"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1533
+#: src/fs/gnunet-service-fs_pr.c:1543
msgid "# Datastore lookups concluded (seen all)"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1556
+#: src/fs/gnunet-service-fs_pr.c:1566
msgid "# Datastore lookups aborted (more than MAX_RESULTS)"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1573
+#: src/fs/gnunet-service-fs_pr.c:1583
msgid "# on-demand blocks matched requests"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1594
+#: src/fs/gnunet-service-fs_pr.c:1604
msgid "# on-demand lookups performed successfully"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1600
+#: src/fs/gnunet-service-fs_pr.c:1610
msgid "# on-demand lookups failed"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1641
+#: src/fs/gnunet-service-fs_pr.c:1656
msgid "# Datastore lookups concluded (found last result)"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1654
+#: src/fs/gnunet-service-fs_pr.c:1669
msgid "# Datastore lookups concluded (load too high)"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1705
+#: src/fs/gnunet-service-fs_pr.c:1720
msgid "# Datastore lookups initiated"
msgstr ""
-#: src/fs/gnunet-service-fs_pr.c:1755
+#: src/fs/gnunet-service-fs_pr.c:1784
msgid "# GAP PUT messages received"
msgstr ""
@@ -3917,65 +3902,65 @@ msgstr ""
msgid "Failed to connect to the DNS service!\n"
msgstr "初始化“%s”服务失败。\n"
-#: src/gns/gnunet-service-gns_resolver.c:659
+#: src/gns/gnunet-service-gns_resolver.c:672
#, c-format
msgid "Protocol `%s' unknown, skipping labels.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:671
+#: src/gns/gnunet-service-gns_resolver.c:684
#, c-format
msgid "Service `%s' unknown for protocol `%s', trying as number.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:677
+#: src/gns/gnunet-service-gns_resolver.c:690
#, c-format
msgid "Service `%s' not a port, skipping service labels.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:891
+#: src/gns/gnunet-service-gns_resolver.c:904
#, fuzzy
msgid "Failed to parse DNS response\n"
msgstr "打开日志文件“%s”失败:%s\n"
-#: src/gns/gnunet-service-gns_resolver.c:1082
+#: src/gns/gnunet-service-gns_resolver.c:1095
#, c-format
msgid "Skipping record of unsupported type %d\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1859
+#: src/gns/gnunet-service-gns_resolver.c:1872
#, c-format
msgid "Name `%s' cannot be converted to IDNA."
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1874
+#: src/gns/gnunet-service-gns_resolver.c:1887
#, c-format
msgid "GNS lookup resulted in DNS name that is too long (`%s')\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1914
+#: src/gns/gnunet-service-gns_resolver.c:1927
#, fuzzy, c-format
msgid "GNS lookup failed (zero records found for `%s')\n"
msgstr "运行 %s失败:%s %d\n"
-#: src/gns/gnunet-service-gns_resolver.c:2312
+#: src/gns/gnunet-service-gns_resolver.c:2329
msgid "Unable to process critical delegation record\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2317
+#: src/gns/gnunet-service-gns_resolver.c:2334
msgid "GNS lookup recursion failed (no delegation record found)\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2340
+#: src/gns/gnunet-service-gns_resolver.c:2357
#, fuzzy, c-format
msgid "Failed to cache GNS resolution: %s\n"
msgstr "打开日志文件“%s”失败:%s\n"
-#: src/gns/gnunet-service-gns_resolver.c:2505
+#: src/gns/gnunet-service-gns_resolver.c:2522
#, c-format
msgid "GNS namecache returned empty result for `%s'\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2652
+#: src/gns/gnunet-service-gns_resolver.c:2669
#, c-format
msgid "Zone %s was revoked, resolution fails\n"
msgstr ""
@@ -4017,31 +4002,39 @@ msgstr "解析配置文件“%s”失败\n"
msgid "Gns REST API initialized\n"
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:448
+#: src/gnsrecord/gnsrecord_misc.c:52
+msgid "Label is NULL which is not allowed\n"
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:57
+msgid "Label contains `.' which is not allowed\n"
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:464
msgid "Zone delegation record not allowed in apex."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:456
+#: src/gnsrecord/gnsrecord_misc.c:472
msgid "Zone delegation record set contains mutually exclusive records."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:466
+#: src/gnsrecord/gnsrecord_misc.c:482
msgid "Multiple REDIRECT records."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:475 src/gnsrecord/gnsrecord_misc.c:501
+#: src/gnsrecord/gnsrecord_misc.c:491 src/gnsrecord/gnsrecord_misc.c:517
msgid "Redirection record set conains mutually exclusive records."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:482
+#: src/gnsrecord/gnsrecord_misc.c:498
msgid "Redirection records not allowed in apex."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:493
+#: src/gnsrecord/gnsrecord_misc.c:509
msgid "Redirection records not allowed in apex.."
msgstr ""
-#: src/gnsrecord/gnsrecord_misc.c:515
+#: src/gnsrecord/gnsrecord_misc.c:531
msgid "Mutually exclusive records."
msgstr ""
@@ -4606,12 +4599,18 @@ msgstr ""
msgid "Failed to parse JSON in option `%s': %s (%s)\n"
msgstr "解析配置文件“%s”失败\n"
-#: src/messenger/plugin_gnsrecord_messenger.c:118
-#: src/messenger/plugin_gnsrecord_messenger.c:133
+#: src/messenger/plugin_gnsrecord_messenger.c:136
+#: src/messenger/plugin_gnsrecord_messenger.c:151
#, fuzzy, c-format
msgid "Unable to parse MESSENGER_ROOM_ENTRY record `%s'\n"
msgstr "解析配置文件“%s”失败\n"
+#: src/messenger/plugin_gnsrecord_messenger.c:172
+#: src/messenger/plugin_gnsrecord_messenger.c:187
+#, fuzzy, c-format
+msgid "Unable to parse MESSENGER_ROOM_DETAILS record `%s'\n"
+msgstr "解析配置文件“%s”失败\n"
+
#: src/my/my.c:196 src/my/my.c:215
#, fuzzy, c-format
msgid "%s failed at %s:%d with error: %s\n"
@@ -4652,7 +4651,7 @@ msgstr "“%s”的参数无效。\n"
msgid "You must specify a name\n"
msgstr "您必须指定一个接收方!\n"
-#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1591
+#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1582
msgid "name of the record to add/delete/display"
msgstr ""
@@ -4660,7 +4659,7 @@ msgstr ""
msgid "specifies the public key of the zone to look in"
msgstr ""
-#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1652
+#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1643
#, fuzzy
msgid "GNUnet zone manipulation tool"
msgstr "GNUnet 配置"
@@ -4910,12 +4909,7 @@ msgstr "“%s”的参数无效。\n"
msgid "Invalid URI `%s'\n"
msgstr "无效条目。\n"
-#: src/namestore/gnunet-namestore.c:1242
-#, c-format
-msgid "Label `%s' contains `.' which is not allowed\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:1292
+#: src/namestore/gnunet-namestore.c:1283
#, c-format
msgid ""
"No default identity configured for `namestore' subsystem\n"
@@ -4923,102 +4917,102 @@ msgid ""
"Run gnunet-identity -d to get a list of choices for $NAME\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1357
+#: src/namestore/gnunet-namestore.c:1348
#, c-format
msgid "Superfluous command line arguments (starting with `%s') ignored\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1386
+#: src/namestore/gnunet-namestore.c:1377
#, fuzzy, c-format
msgid "Cannot connect to identity service\n"
msgstr "无法连接到 %s:%u:%s\n"
-#: src/namestore/gnunet-namestore.c:1433
+#: src/namestore/gnunet-namestore.c:1424
msgid "Empty record line argument is not allowed.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1445
+#: src/namestore/gnunet-namestore.c:1436
#, c-format
msgid "Invalid expiration time `%s' (must be without unit)\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1457 src/namestore/gnunet-namestore.c:1473
-#: src/namestore/gnunet-namestore.c:1490
+#: src/namestore/gnunet-namestore.c:1448 src/namestore/gnunet-namestore.c:1464
+#: src/namestore/gnunet-namestore.c:1481
#, fuzzy, c-format
msgid "Missing entries in record line `%s'.\n"
msgstr "解析配置文件“%s”失败\n"
-#: src/namestore/gnunet-namestore.c:1465
+#: src/namestore/gnunet-namestore.c:1456
#, fuzzy, c-format
msgid "Unknown record type `%s'\n"
msgstr "未知的命令“%s”。\n"
-#: src/namestore/gnunet-namestore.c:1503
+#: src/namestore/gnunet-namestore.c:1494
#, fuzzy, c-format
msgid "Invalid record data for type %s: `%s'.\n"
msgstr "IP 格式无效:“%s”\n"
-#: src/namestore/gnunet-namestore.c:1560
+#: src/namestore/gnunet-namestore.c:1551
msgid "add record"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1563
+#: src/namestore/gnunet-namestore.c:1554
msgid "delete record"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1567
+#: src/namestore/gnunet-namestore.c:1558
msgid "display records"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1574
+#: src/namestore/gnunet-namestore.c:1565
msgid ""
"expiration time for record to use (for adding only), \"never\" is possible"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1580
+#: src/namestore/gnunet-namestore.c:1571
#, fuzzy
msgid "set the desired nick name for the zone"
msgstr "无法获取有关用户“%s”的信息:%s\n"
-#: src/namestore/gnunet-namestore.c:1585
+#: src/namestore/gnunet-namestore.c:1576
#, fuzzy
msgid "monitor changes in the namestore"
msgstr "初始化“%s”服务失败。\n"
-#: src/namestore/gnunet-namestore.c:1597
+#: src/namestore/gnunet-namestore.c:1588
#, fuzzy
msgid "determine our name for the given PKEY"
msgstr "无法获取有关用户“%s”的信息:%s\n"
-#: src/namestore/gnunet-namestore.c:1604
+#: src/namestore/gnunet-namestore.c:1595
msgid ""
"set record set to values given by (possibly multiple) RECORDLINES; can be "
"specified multiple times"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1610
+#: src/namestore/gnunet-namestore.c:1601
msgid "type of the record to add/delete/display"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1615
+#: src/namestore/gnunet-namestore.c:1606
msgid "URI to import into our zone"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1621
+#: src/namestore/gnunet-namestore.c:1612
msgid "value of the record to add/delete"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1625
+#: src/namestore/gnunet-namestore.c:1616
msgid "create or list public record"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1631
+#: src/namestore/gnunet-namestore.c:1622
msgid ""
"create shadow record (only valid if all other records of the same type have "
"expired"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1637
+#: src/namestore/gnunet-namestore.c:1628
msgid "name of the ego controlling the zone"
msgstr ""
@@ -5027,7 +5021,17 @@ msgstr ""
msgid "Failed to replicate block in namecache: %s\n"
msgstr "发送消息失败。\n"
-#: src/namestore/gnunet-service-namestore.c:1668
+#: src/namestore/gnunet-service-namestore.c:1559
+#, fuzzy
+msgid "Error normalizing name."
+msgstr "创建用户出错"
+
+#: src/namestore/gnunet-service-namestore.c:1582
+#, fuzzy
+msgid "Error deserializing records."
+msgstr "未知错误。\n"
+
+#: src/namestore/gnunet-service-namestore.c:1691
#, fuzzy
msgid "Store failed"
msgstr "“%s”已连接到“%s”。\n"
@@ -6769,8 +6773,8 @@ msgid "GNUnet topology control"
msgstr ""
#: src/transport/gnunet-communicator-tcp.c:3338
-#: src/transport/gnunet-communicator-udp.c:3856
-#: src/transport/gnunet-service-tng.c:10623
+#: src/transport/gnunet-communicator-udp.c:3867
+#: src/transport/gnunet-service-tng.c:10926
#: src/transport/gnunet-service-transport.c:2627
#, fuzzy
msgid "Transport service is lacking key configuration settings. Exiting.\n"
@@ -6780,7 +6784,7 @@ msgstr "立即保存配置?"
msgid "GNUnet TCP communicator"
msgstr ""
-#: src/transport/gnunet-communicator-udp.c:3931
+#: src/transport/gnunet-communicator-udp.c:3942
msgid "GNUnet UDP communicator"
msgstr ""
@@ -8130,12 +8134,12 @@ msgstr "找不到接口“%s”的一个 IP 地址。\n"
msgid "libgcrypt has not the expected version (version %s is required).\n"
msgstr "libgcrypt 的版本不符合预期(要求版本 %s)。\n"
-#: src/util/crypto_rsa.c:901
+#: src/util/crypto_rsa.c:907
#, fuzzy, c-format
msgid "RSA signing failed at %s:%d: %s\n"
msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n"
-#: src/util/crypto_rsa.c:1201
+#: src/util/crypto_rsa.c:1207
#, fuzzy, c-format
msgid "RSA signature verification failed at %s:%d: %s\n"
msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n"
@@ -8806,12 +8810,12 @@ msgstr "网络掩码的格式“%s”错误\n"
msgid "Wrong format `%s' for network\n"
msgstr "网络的格式“%s”错误\n"
-#: src/util/time.c:870 src/util/time.c:898
+#: src/util/time.c:900 src/util/time.c:928
#, c-format
msgid "Failed to map `%s', cannot assure monotonic time!\n"
msgstr ""
-#: src/util/time.c:906
+#: src/util/time.c:936
#, c-format
msgid ""
"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
pkgcfg_DATA = \
dhtu.conf
-
plugin_LTLIBRARIES = \
- libgnunet_plugin_dhtu_gnunet.la \
- libgnunet_plugin_dhtu_ip.la
+ libgnunet_plugin_dhtu_gnunet.la
+
+if !OPENBSD
+plugin_LTLIBRARIES += libgnunet_plugin_dhtu_ip.la
libgnunet_plugin_dhtu_ip_la_SOURCES = \
plugin_dhtu_ip.c
@@ -26,7 +27,7 @@ libgnunet_plugin_dhtu_ip_la_LIBADD = \
$(LTLIBINTL)
libgnunet_plugin_dhtu_ip_la_LDFLAGS = \
$(GN_PLUGIN_LDFLAGS)
-
+endif
libgnunet_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 ()
char *uric;
struct GNUNET_FS_Uri *uri2;
struct GNUNET_FS_Uri *baseURI;
- char *emsg;
+ char *emsg = NULL;
struct GNUNET_CRYPTO_EddsaPrivateKey pk;
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)
if (GNUNET_OK !=
GNUNET_BLOCK_check_block (ctx,
GNUNET_BLOCK_TYPE_FS_DBLOCK,
- &key,
block,
sizeof(block)))
return 2;
@@ -54,7 +53,7 @@ test_fs (struct GNUNET_BLOCK_Context *ctx)
NULL, 0))
return 4;
GNUNET_log_skip (1, GNUNET_NO);
- if (GNUNET_BLOCK_EVALUATION_REQUEST_INVALID !=
+ if (GNUNET_NO !=
GNUNET_BLOCK_check_query (ctx,
GNUNET_BLOCK_TYPE_FS_DBLOCK,
&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)
rp = rh->name;
rh->name_resolution_pos = 0;
}
+ else if (('_' == dot[1]) &&
+ ('_' == rh->name[0]) &&
+ (dot == memchr (rh->name, (int) '.', rh->name_resolution_pos)))
+ {
+ /**
+ * Do not advance a label. This seems to be a name only consisting
+ * of a BOX indicator (_443,_tcp).
+ * Which means, it is a BOX under the empty label.
+ * leaving name_resolution_pos as is and returning empty label.
+ */
+ rp = GNUNET_GNS_EMPTY_LABEL_AT;
+ len = strlen (GNUNET_GNS_EMPTY_LABEL_AT);
+ }
else
{
/* advance by one label */
@@ -683,7 +696,7 @@ resolver_lookup_get_next_label (struct GNS_ResolverHandle *rh)
}
else
{
- rh->service = se->s_port;
+ rh->service = ntohs (se->s_port);
}
rh->protocol = pe->p_proto;
GNUNET_free (proto_name);
@@ -2237,6 +2250,10 @@ handle_gns_resolution_result (void *cls,
const struct GNUNET_GNSRECORD_BoxRecord *box;
box = rd[i].data;
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Got BOX record, checking if parameters match... %u/%u vs %u/%u\n",
+ ntohs (box->protocol), ntohs (box->service),
+ rh->protocol, rh->service);
if ((ntohs (box->protocol) == rh->protocol) &&
(ntohs (box->service) == rh->service))
{
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,
size_t block_size)
{
const struct GNUNET_GNSRECORD_Block *gblock;
-
+
if (GNUNET_BLOCK_TYPE_GNS_NAMERECORD != type)
{
GNUNET_break (0);
@@ -243,7 +243,7 @@ block_plugin_gns_check_reply (void *cls,
return GNUNET_BLOCK_REPLY_TYPE_NOT_SUPPORTED;
}
GNUNET_assert (reply_block_size >= sizeof(struct GNUNET_GNSRECORD_Block));
- GNUNET_assert (GNUNET_GNSRECORD_block_get_size (block) > reply_block_size);
+ GNUNET_assert (reply_block_size >= GNUNET_GNSRECORD_block_get_size (block));
GNUNET_CRYPTO_hash (reply_block,
reply_block_size,
&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,
rd);
struct GNUNET_GNSRECORD_EcdsaBlock *ecblock;
struct GNRBlockPS *gnr_block;
- struct GNUNET_CRYPTO_EcdsaPrivateKey *dkey;
unsigned char ctr[GNUNET_CRYPTO_AES_KEY_LENGTH / 2];
unsigned char skey[GNUNET_CRYPTO_AES_KEY_LENGTH];
struct GNUNET_GNSRECORD_Data rdc[GNUNET_NZL (rd_count)];
@@ -270,11 +269,10 @@ block_create_ecdsa (const struct GNUNET_CRYPTO_EcdsaPrivateKey *key,
gnr_block->expiration_time = GNUNET_TIME_absolute_hton (expire);
ecblock->expiration_time = gnr_block->expiration_time;
/* encrypt and sign */
- dkey = GNUNET_CRYPTO_ecdsa_private_key_derive (key,
- label,
- "gns");
- GNUNET_CRYPTO_ecdsa_key_get_public (dkey,
- &ecblock->derived_key);
+ GNUNET_CRYPTO_ecdsa_public_key_derive (pkey,
+ label,
+ "gns",
+ &ecblock->derived_key);
GNR_derive_block_aes_key (ctr,
skey,
label,
@@ -289,18 +287,18 @@ block_create_ecdsa (const struct GNUNET_CRYPTO_EcdsaPrivateKey *key,
GNUNET_memcpy (&gnr_block[1], &ecblock[1], payload_len);
}
if (GNUNET_OK !=
- GNUNET_CRYPTO_ecdsa_sign_ (dkey,
- &gnr_block->purpose,
- &ecblock->signature))
+ GNUNET_CRYPTO_ecdsa_sign_derived (key,
+ label,
+ "gns",
+ &gnr_block->purpose,
+ &ecblock->signature))
{
GNUNET_break (0);
GNUNET_free (*block);
- GNUNET_free (dkey);
GNUNET_free (gnr_block);
return GNUNET_SYSERR;
}
GNUNET_free (gnr_block);
- GNUNET_free (dkey);
return GNUNET_OK;
}
@@ -344,7 +342,6 @@ block_create_eddsa (const struct GNUNET_CRYPTO_EddsaPrivateKey *key,
rd);
struct GNUNET_GNSRECORD_EddsaBlock *edblock;
struct GNRBlockPS *gnr_block;
- struct GNUNET_CRYPTO_EddsaPrivateScalar dkey;
unsigned char nonce[crypto_secretbox_NONCEBYTES];
unsigned char skey[crypto_secretbox_KEYBYTES];
struct GNUNET_GNSRECORD_Data rdc[GNUNET_NZL (rd_count)];
@@ -402,12 +399,10 @@ block_create_eddsa (const struct GNUNET_CRYPTO_EddsaPrivateKey *key,
gnr_block->expiration_time = GNUNET_TIME_absolute_hton (expire);
edblock->expiration_time = gnr_block->expiration_time;
/* encrypt and sign */
- GNUNET_CRYPTO_eddsa_private_key_derive (key,
- label,
- "gns",
- &dkey);
- GNUNET_CRYPTO_eddsa_key_get_public_from_scalar (&dkey,
- &edblock->derived_key);
+ GNUNET_CRYPTO_eddsa_public_key_derive (pkey,
+ label,
+ "gns",
+ &edblock->derived_key);
GNR_derive_block_xsalsa_key (nonce,
skey,
label,
@@ -422,9 +417,11 @@ block_create_eddsa (const struct GNUNET_CRYPTO_EddsaPrivateKey *key,
GNUNET_memcpy (&gnr_block[1], &edblock[1],
payload_len + crypto_secretbox_MACBYTES);
- GNUNET_CRYPTO_eddsa_sign_with_scalar (&dkey,
- &gnr_block->purpose,
- &edblock->signature);
+ GNUNET_CRYPTO_eddsa_sign_derived (key,
+ label,
+ "gns",
+ &gnr_block->purpose,
+ &edblock->signature);
}
return GNUNET_OK;
}
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
print_record (const struct GNUNET_GNSRECORD_Data *rd)
{
uint16_t flags = htons (rd->flags);
- fprintf (stdout,
- "EXPIRATION: %" PRIu64 "\n", rd->expiration_time);
- fprintf (stdout,
- "DATA_SIZE: %zu\n", rd->data_size);
- fprintf (stdout,
- "TYPE: %d\n", rd->record_type);
- fprintf (stdout,
- "FLAGS: ");
+ uint64_t abs_nbo = GNUNET_htonll (rd->expiration_time);
+ uint16_t size_nbo = htons (rd->data_size);
+ uint32_t type_nbo = htonl (rd->record_type);
+ printf ("EXPIRATION:\n");
+ print_bytes (&abs_nbo, sizeof (abs_nbo), 8);
+ printf ("\nDATA_SIZE:\n");
+ print_bytes (&size_nbo, sizeof (size_nbo), 8);
+ printf ("\nTYPE:\n");
+ print_bytes(&type_nbo, sizeof (type_nbo), 8);
+ printf ("\nFLAGS: ");
print_bytes ((void*) &flags, sizeof (flags), 8);
printf ("\n");
fprintf (stdout,
"DATA:\n");
print_bytes ((char*) rd->data, rd->data_size, 8);
- fprintf (stdout, "\n");
+ printf ("\n");
}
@@ -133,6 +135,7 @@ run_pkey (struct GNUNET_GNSRECORD_Data *rd, int rd_count, const char *label)
struct GNUNET_IDENTITY_PublicKey pkey_data;
struct GNUNET_HashCode query;
char *rdata;
+ char *conv_lbl;
size_t rdata_size;
char ztld[128];
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)
GNUNET_IDENTITY_key_get_public (&id_priv,
&id_pub);
- fprintf (stdout,
- "Zone private key (d, big-endian):\n");
+ printf ("Zone private key (d, big-endian):\n");
print_bytes_ (&id_priv.ecdsa_key,
sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey), 8, 1);
- fprintf (stdout, "\n");
- fprintf (stdout, "Zone identifier (ztype|zkey):\n");
+ printf ("\n");
+ printf ("Zone identifier (ztype|zkey):\n");
GNUNET_assert (0 < GNUNET_IDENTITY_key_get_length (&id_pub));
print_bytes (&id_pub, GNUNET_IDENTITY_key_get_length (&id_pub), 8);
GNUNET_STRINGS_data_to_string (&id_pub,
GNUNET_IDENTITY_key_get_length (&id_pub),
ztld,
sizeof (ztld));
- fprintf (stdout, "\n");
- fprintf (stdout, "zTLD:\n");
- fprintf (stdout, "%s\n", ztld);
- fprintf (stdout, "\n");
+ printf ("\n");
+ printf ("zTLD:\n");
+ printf ("%s\n", ztld);
+ printf ("\n");
pkey_data_p.type = htonl (GNUNET_GNSRECORD_TYPE_PKEY);
GNUNET_CRYPTO_ecdsa_key_create (&pkey_data_p.ecdsa_key);
GNUNET_IDENTITY_key_get_public (&pkey_data_p,
&pkey_data);
- fprintf (stdout,
- "Label: %s\nRRCOUNT: %d\n\n", label, rd_count);
+ conv_lbl = GNUNET_GNSRECORD_string_normalize (label);
+ printf ("Label:\n");
+ print_bytes (conv_lbl, strlen (conv_lbl), 8);
+ GNUNET_free (conv_lbl);
+ printf ("\nNumber of records (integer): %d\n\n", rd_count);
for (int i = 0; i < rd_count; i++)
{
- fprintf (stdout, "Record #%d\n", i);
+ printf ("Record #%d := (\n", i);
print_record (&rd[i]);
+ printf (")\n\n");
}
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)
rd,
(size_t) rdata_size,
rdata);
- fprintf (stdout, "RDATA:\n");
+ printf ("RDATA:\n");
print_bytes (rdata,
(size_t) rdata_size,
8);
- fprintf (stdout, "\n");
+ printf ("\n");
expire = GNUNET_GNSRECORD_record_get_expiration_time (rd_count, rd,
GNUNET_TIME_UNIT_ZERO_ABS);
GNR_derive_block_aes_key (ctr,
@@ -197,18 +203,18 @@ run_pkey (struct GNUNET_GNSRECORD_Data *rd, int rd_count, const char *label)
expire).abs_value_us__,
&id_pub.ecdsa_key);
- fprintf (stdout, "Encryption NONCE|EXPIRATION|BLOCK COUNTER:\n");
+ printf ("Encryption NONCE|EXPIRATION|BLOCK COUNTER:\n");
print_bytes (ctr, sizeof (ctr), 8);
- fprintf (stdout, "\n");
- fprintf (stdout, "Encryption key (K):\n");
+ printf ("\n");
+ printf ("Encryption key (K):\n");
print_bytes (skey, sizeof (skey), 8);
- fprintf (stdout, "\n");
+ printf ("\n");
GNUNET_GNSRECORD_query_from_public_key (&id_pub,
label,
&query);
- fprintf (stdout, "Storage key (q):\n");
+ printf ("Storage key (q):\n");
print_bytes (&query, sizeof (query), 8);
- fprintf (stdout, "\n");
+ printf ("\n");
GNUNET_assert (GNUNET_OK == GNUNET_GNSRECORD_block_create (&id_priv,
expire,
label,
@@ -219,12 +225,12 @@ run_pkey (struct GNUNET_GNSRECORD_Data *rd, int rd_count, const char *label)
GNUNET_GNSRECORD_Block);
bdata = (char*) &(&rrblock->ecdsa_block)[1];
- fprintf (stdout, "BDATA:\n");
+ printf ("BDATA:\n");
print_bytes (bdata, bdata_size, 8);
- fprintf (stdout, "\n");
- fprintf (stdout, "RRBLOCK:\n");
+ printf ("\n");
+ printf ("RRBLOCK:\n");
print_bytes (rrblock, ntohl (rrblock->size), 8);
- fprintf (stdout, "\n");
+ printf ("\n");
GNUNET_free (rdata);
}
@@ -249,6 +255,7 @@ run_edkey (struct GNUNET_GNSRECORD_Data *rd, int rd_count, const char*label)
struct GNUNET_IDENTITY_PublicKey pkey_data;
struct GNUNET_HashCode query;
char *rdata;
+ char *conv_lbl;
size_t rdata_size;
char ztld[128];
@@ -271,30 +278,35 @@ run_edkey (struct GNUNET_GNSRECORD_Data *rd, int rd_count, const char*label)
"Zone private key (d):\n");
print_bytes (&id_priv.eddsa_key, sizeof (struct
GNUNET_CRYPTO_EddsaPrivateKey), 8);
- fprintf (stdout, "\n");
- fprintf (stdout, "Zone identifier (ztype|zkey):\n");
+ printf ("\n");
+ printf ("Zone identifier (ztype|zkey):\n");
GNUNET_assert (0 < GNUNET_IDENTITY_key_get_length (&id_pub));
print_bytes (&id_pub, GNUNET_IDENTITY_key_get_length (&id_pub), 8);
GNUNET_STRINGS_data_to_string (&id_pub,
GNUNET_IDENTITY_key_get_length (&id_pub),
ztld,
sizeof (ztld));
- fprintf (stdout, "\n");
- fprintf (stdout, "zTLD:\n");
- fprintf (stdout, "%s\n", ztld);
- fprintf (stdout, "\n");
+ printf ("\n");
+ printf ("zTLD:\n");
+ printf ("%s\n", ztld);
+ printf ("\n");
pkey_data_p.type = htonl (GNUNET_GNSRECORD_TYPE_EDKEY);
GNUNET_CRYPTO_eddsa_key_create (&pkey_data_p.eddsa_key);
GNUNET_IDENTITY_key_get_public (&pkey_data_p,
&pkey_data);
+ conv_lbl = GNUNET_GNSRECORD_string_normalize (label);
+ printf ("Label:\n");
+ print_bytes (conv_lbl, strlen (conv_lbl), 8);
+ GNUNET_free (conv_lbl);
fprintf (stdout,
- "Label: %s\nRRCOUNT: %d\n\n", label, rd_count);
+ "\nNumber of records (integer): %d\n\n", rd_count);
for (int i = 0; i < rd_count; i++)
{
- fprintf (stdout, "Record #%d\n", i);
+ printf ("Record #%d := (\n", i);
print_record (&rd[i]);
+ printf (")\n\n");
}
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)
rd,
(size_t) rdata_size,
rdata);
- fprintf (stdout, "RDATA:\n");
+ printf ("RDATA:\n");
print_bytes (rdata,
(size_t) rdata_size,
8);
- fprintf (stdout, "\n");
+ printf ("\n");
GNR_derive_block_xsalsa_key (nonce,
skey,
label,
GNUNET_TIME_absolute_hton (
expire).abs_value_us__,
&id_pub.eddsa_key);
- fprintf (stdout, "Encryption NONCE|EXPIRATION:\n");
+ printf ("Encryption NONCE|EXPIRATION:\n");
print_bytes (nonce, sizeof (nonce), 8);
- fprintf (stdout, "\n");
- fprintf (stdout, "Encryption key (K):\n");
+ printf ("\n");
+ printf ("Encryption key (K):\n");
print_bytes (skey, sizeof (skey), 8);
- fprintf (stdout, "\n");
+ printf ("\n");
GNUNET_GNSRECORD_query_from_public_key (&id_pub,
label,
&query);
- fprintf (stdout, "Storage key (q):\n");
+ printf ("Storage key (q):\n");
print_bytes (&query, sizeof (query), 8);
- fprintf (stdout, "\n");
+ printf ("\n");
GNUNET_assert (GNUNET_OK == GNUNET_GNSRECORD_block_create (&id_priv,
expire,
@@ -342,12 +354,12 @@ run_edkey (struct GNUNET_GNSRECORD_Data *rd, int rd_count, const char*label)
GNUNET_GNSRECORD_Block);
bdata = (char*) &(&rrblock->eddsa_block)[1];
- fprintf (stdout, "BDATA:\n");
+ printf ("BDATA:\n");
print_bytes (bdata, bdata_size, 8);
- fprintf (stdout, "\n");
- fprintf (stdout, "RRBLOCK:\n");
+ printf ("\n");
+ printf ("RRBLOCK:\n");
print_bytes (rrblock, ntohl (rrblock->size), 8);
- fprintf (stdout, "\n");
+ printf ("\n");
GNUNET_free (rdata);
}
@@ -424,9 +436,9 @@ run (void *cls,
| GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION;
run_pkey (&rd_pkey, 1, "testdelegation");
- run_pkey (rd, 3, "namesystem");
+ run_pkey (rd, 3, "\u5929\u4e0b\u7121\u6575");
run_edkey (&rd_pkey, 1, "testdelegation");
- run_edkey (rd, 3, "namesystem");
+ run_edkey (rd, 3, "\u5929\u4e0b\u7121\u6575");
}
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
unsigned char s[512 / 8];
};
+/**
+ * Private ECC key material encoded for transmission. To be used only for
+ * Edx25519 signatures. An inital key corresponds to data from the key
+ * expansion and clamping in the EdDSA key generation.
+ */
+struct GNUNET_CRYPTO_Edx25519PrivateKey
+{
+ /**
+ * a is a value mod n, where n has at most 256 bits. It is the first half of
+ * the seed-expansion of EdDSA and will be clamped.
+ */
+ unsigned char a[256 / 8];
+
+ /**
+ * b consists of 32 bytes which where originally the lower 32bytes of the key
+ * expansion. Subsequent calls to derive_private will change this value, too.
+ */
+ unsigned char b[256 / 8];
+};
+
+
+/**
+ * Public ECC key (always for curve Ed25519) encoded in a format suitable for
+ * network transmission and Edx25519 (same as EdDSA) signatures. Refer to
+ * section 5.1.3 of rfc8032, for a thorough explanation of how this value maps
+ * to the x- and y-coordinates.
+ */
+struct GNUNET_CRYPTO_Edx25519PublicKey
+{
+ /**
+ * Point Q consists of a y-value mod p (256 bits); the x-value is
+ * always positive. The point is stored in Ed25519 standard
+ * compact format.
+ */
+ unsigned char q_y[256 / 8];
+};
+
+/**
+ * @brief an ECC signature using Edx25519 (same as in EdDSA).
+ */
+struct GNUNET_CRYPTO_Edx25519Signature
+{
+ /**
+ * R value.
+ */
+ unsigned char r[256 / 8];
+
+ /**
+ * S value.
+ */
+ unsigned char s[256 / 8];
+};
+
/**
* @brief type for session keys
@@ -1279,6 +1332,17 @@ GNUNET_CRYPTO_eddsa_key_get_public (
const struct GNUNET_CRYPTO_EddsaPrivateKey *priv,
struct GNUNET_CRYPTO_EddsaPublicKey *pub);
+/**
+ * @ingroup crypto
+ * Extract the public key for the given private key.
+ *
+ * @param priv the private key
+ * @param pub where to write the public key
+ */
+void
+GNUNET_CRYPTO_edx25519_key_get_public (
+ const struct GNUNET_CRYPTO_Edx25519PrivateKey *priv,
+ struct GNUNET_CRYPTO_Edx25519PublicKey *pub);
/**
* @ingroup crypto
@@ -1465,6 +1529,30 @@ GNUNET_CRYPTO_eddsa_key_create (struct GNUNET_CRYPTO_EddsaPrivateKey *pk);
/**
* @ingroup crypto
+ * Create a new private key.
+ *
+ * @param[out] pk private key to initialize
+ */
+void
+GNUNET_CRYPTO_edx25519_key_create (struct GNUNET_CRYPTO_Edx25519PrivateKey *pk);
+
+/**
+ * @ingroup crypto
+ * Create a new private key for Edx25519 from a given seed. After expanding
+ * the seed, the first half of the key will be clamped according to EdDSA.
+ *
+ * @param seed seed input
+ * @param seedsize size of the seed in bytes
+ * @param[out] pk private key to initialize
+ */
+void
+GNUNET_CRYPTO_edx25519_key_create_from_seed (
+ const void *seed,
+ size_t seedsize,
+ struct GNUNET_CRYPTO_Edx25519PrivateKey *pk);
+
+/**
+ * @ingroup crypto
* Create a new private key. Clear with #GNUNET_CRYPTO_ecdhe_key_clear().
*
* @param[out] pk set to fresh private key;
@@ -1492,6 +1580,14 @@ GNUNET_CRYPTO_eddsa_key_clear (struct GNUNET_CRYPTO_EddsaPrivateKey *pk);
void
GNUNET_CRYPTO_ecdsa_key_clear (struct GNUNET_CRYPTO_EcdsaPrivateKey *pk);
+/**
+ * @ingroup crypto
+ * Clear memory that was used to store a private key.
+ *
+ * @param pk location of the key
+ */
+void
+GNUNET_CRYPTO_edx25519_key_clear (struct GNUNET_CRYPTO_Edx25519PrivateKey *pk);
/**
* @ingroup crypto
@@ -1874,6 +1970,53 @@ GNUNET_CRYPTO_ecdsa_sign_ (
sig)); \
} while (0)
+/**
+ * @ingroup crypto
+ * @brief Edx25519 sign a given block.
+ *
+ * The @a purpose data is the beginning of the data of which the signature is
+ * to be created. The `size` field in @a purpose must correctly indicate the
+ * number of bytes of the data structure, including its header. If possible,
+ * use #GNUNET_CRYPTO_edx25519_sign() instead of this function (only if @a
+ * validate is not fixed-size, you must use this function directly).
+ *
+ * @param priv private key to use for the signing
+ * @param purpose what to sign (size, purpose)
+ * @param[out] sig where to write the signature
+ * @return #GNUNET_SYSERR on error, #GNUNET_OK on success
+ */
+enum GNUNET_GenericReturnValue
+GNUNET_CRYPTO_edx25519_sign_ (
+ const struct GNUNET_CRYPTO_Edx25519PrivateKey *priv,
+ const struct GNUNET_CRYPTO_EccSignaturePurpose *purpose,
+ struct GNUNET_CRYPTO_Edx25519Signature *sig);
+
+
+/**
+ * @ingroup crypto
+ * @brief Edx25519 sign a given block. The resulting signature is compatible
+ * with EdDSA.
+ *
+ * The @a ps data must be a fixed-size struct for which the signature is to be
+ * created. The `size` field in @a ps->purpose must correctly indicate the
+ * number of bytes of the data structure, including its header.
+ *
+ * @param priv private key to use for the signing
+ * @param ps packed struct with what to sign, MUST begin with a purpose
+ * @param[out] sig where to write the signature
+ */
+#define GNUNET_CRYPTO_edx25519_sign(priv,ps,sig) do { \
+ /* check size is set correctly */ \
+ GNUNET_assert (ntohl ((ps)->purpose.size) == sizeof (*(ps))); \
+ /* check 'ps' begins with the purpose */ \
+ GNUNET_static_assert (((void*) (ps)) == \
+ ((void*) &(ps)->purpose)); \
+ GNUNET_assert (GNUNET_OK == \
+ GNUNET_CRYPTO_edx25519_sign_ (priv, \
+ &(ps)->purpose, \
+ sig)); \
+} while (0)
+
/**
* @ingroup crypto
@@ -1917,7 +2060,7 @@ GNUNET_CRYPTO_eddsa_verify_ (
*/
#define GNUNET_CRYPTO_eddsa_verify(purp,ps,sig,pub) ({ \
/* check size is set correctly */ \
- GNUNET_assert (ntohl ((ps)->purpose.size) == sizeof (*(ps))); \
+ GNUNET_assert (ntohl ((ps)->purpose.size) == sizeof (*(ps))); \
/* check 'ps' begins with the purpose */ \
GNUNET_static_assert (((void*) (ps)) == \
((void*) &(ps)->purpose)); \
@@ -1927,7 +2070,6 @@ GNUNET_CRYPTO_eddsa_verify_ (
pub); \
})
-
/**
* @ingroup crypto
* @brief Verify ECDSA signature.
@@ -1982,6 +2124,58 @@ GNUNET_CRYPTO_ecdsa_verify_ (
/**
* @ingroup crypto
+ * @brief Verify Edx25519 signature.
+ *
+ * The @a validate data is the beginning of the data of which the signature
+ * is to be verified. The `size` field in @a validate must correctly indicate
+ * the number of bytes of the data structure, including its header. If @a
+ * purpose does not match the purpose given in @a validate (the latter must be
+ * in big endian), signature verification fails. If possible, use
+ * #GNUNET_CRYPTO_edx25519_verify() instead of this function (only if @a
+ * validate is not fixed-size, you must use this function directly).
+ *
+ * @param purpose what is the purpose that the signature should have?
+ * @param validate block to validate (size, purpose, data)
+ * @param sig signature that is being validated
+ * @param pub public key of the signer
+ * @returns #GNUNET_OK if ok, #GNUNET_SYSERR if invalid
+ */
+enum GNUNET_GenericReturnValue
+GNUNET_CRYPTO_edx25519_verify_ (
+ uint32_t purpose,
+ const struct GNUNET_CRYPTO_EccSignaturePurpose *validate,
+ const struct GNUNET_CRYPTO_Edx25519Signature *sig,
+ const struct GNUNET_CRYPTO_Edx25519PublicKey *pub);
+
+
+/**
+ * @ingroup crypto
+ * @brief Verify Edx25519 signature.
+ *
+ * The @a ps data must be a fixed-size struct for which the signature is to be
+ * created. The `size` field in @a ps->purpose must correctly indicate the
+ * number of bytes of the data structure, including its header.
+ *
+ * @param purp purpose of the signature, must match 'ps->purpose.purpose'
+ * (except in host byte order)
+ * @param priv private key to use for the signing
+ * @param ps packed struct with what to sign, MUST begin with a purpose
+ * @param sig where to write the signature
+ */
+#define GNUNET_CRYPTO_edx25519_verify(purp,ps,sig,pub) ({ \
+ /* check size is set correctly */ \
+ GNUNET_assert (ntohl ((ps)->purpose.size) == sizeof (*(ps))); \
+ /* check 'ps' begins with the purpose */ \
+ GNUNET_static_assert (((void*) (ps)) == \
+ ((void*) &(ps)->purpose)); \
+ GNUNET_CRYPTO_edx25519_verify_ (purp, \
+ &(ps)->purpose, \
+ sig, \
+ pub); \
+ })
+
+/**
+ * @ingroup crypto
* Derive a private key from a given private key and a label.
* Essentially calculates a private key 'h = H(l,P) * d mod n'
* where n is the size of the ECC group and P is the public
@@ -2018,6 +2212,26 @@ GNUNET_CRYPTO_ecdsa_public_key_derive (
const char *context,
struct GNUNET_CRYPTO_EcdsaPublicKey *result);
+/**
+ * This is a signature function for ECDSA which takes a
+ * private key, derives/blinds it and signs the message.
+ *
+ * @param pkey original private key
+ * @param label label to use for key deriviation
+ * @param context additional context to use for HKDF of 'h';
+ * typically the name of the subsystem/application
+ * @param purp the signature purpose
+ * @param sig the resulting signature
+ * @return GNUNET_OK on success
+ */
+enum GNUNET_GenericReturnValue
+GNUNET_CRYPTO_ecdsa_sign_derived (
+ const struct GNUNET_CRYPTO_EcdsaPrivateKey *pkey,
+ const char *label,
+ const char *context,
+ const struct GNUNET_CRYPTO_EccSignaturePurpose *purpose,
+ struct GNUNET_CRYPTO_EcdsaSignature *sig);
+
/**
* @ingroup crypto
@@ -2063,23 +2277,23 @@ GNUNET_CRYPTO_eddsa_public_key_derive (
/**
- * This is a signature function for EdDSA which takes the
- * secret scalar sk instead of the private seed which is
- * usually the case for crypto APIs. We require this functionality
- * in order to use derived private keys for signatures we
- * cannot calculate the inverse of a sk to find the seed
- * efficiently.
+ * This is a signature function for EdDSA which takes a
+ * private key and derives it using the label and context
+ * before signing.
*
- * The resulting signature is a standard EdDSA signature
- * which can be verified using the usual APIs.
- *
- * @param sk the secret scalar
+ * @param pkey original private key
+ * @param label label to use for key deriviation
+ * @param context additional context to use for HKDF of 'h';
+ * typically the name of the subsystem/application
* @param purp the signature purpose
* @param sig the resulting signature
+ * @return GNUNET_OK on success
*/
-void
-GNUNET_CRYPTO_eddsa_sign_with_scalar (
- const struct GNUNET_CRYPTO_EddsaPrivateScalar *priv,
+enum GNUNET_GenericReturnValue
+GNUNET_CRYPTO_eddsa_sign_derived (
+ const struct GNUNET_CRYPTO_EddsaPrivateKey *pkey,
+ const char *label,
+ const char *context,
const struct GNUNET_CRYPTO_EccSignaturePurpose *purpose,
struct GNUNET_CRYPTO_EddsaSignature *sig);
@@ -2095,6 +2309,43 @@ GNUNET_CRYPTO_eddsa_key_get_public_from_scalar (
const struct GNUNET_CRYPTO_EddsaPrivateScalar *s,
struct GNUNET_CRYPTO_EddsaPublicKey *pkey);
+/**
+ * @ingroup crypto
+ * Derive a private scalar from a given private key and a label.
+ * Essentially calculates a private key 'h = H(l,P) * d mod n'
+ * where n is the size of the ECC group and P is the public
+ * key associated with the private key 'd'.
+ *
+ * @param priv original private key
+ * @param seed input seed
+ * @param seedsize size of the seed
+ * @param result derived private key
+ */
+void
+GNUNET_CRYPTO_edx25519_private_key_derive (
+ const struct GNUNET_CRYPTO_Edx25519PrivateKey *priv,
+ const void *seed,
+ size_t seedsize,
+ struct GNUNET_CRYPTO_Edx25519PrivateKey *result);
+
+
+/**
+ * @ingroup crypto
+ * Derive a public key from a given public key and a label.
+ * Essentially calculates a public key 'V = H(l,P) * P'.
+ *
+ * @param pub original public key
+ * @param seed input seed
+ * @param seedsize size of the seed
+ * @param result where to write the derived public key
+ */
+void
+GNUNET_CRYPTO_edx25519_public_key_derive (
+ const struct GNUNET_CRYPTO_Edx25519PublicKey *pub,
+ const void *seed,
+ size_t seedsize,
+ struct GNUNET_CRYPTO_Edx25519PublicKey *result);
+
/**
* 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 @@
/*
This file is part of GNUnet.
- Copyright (C) 2020--2021 GNUnet e.V.
+ Copyright (C) 2020--2022 GNUnet e.V.
GNUnet is free software: you can redistribute it and/or modify it
under the terms of the GNU Affero General Public License as published
@@ -96,6 +96,27 @@ struct GNUNET_MESSENGER_RoomEntryRecord
GNUNET_NETWORK_STRUCT_END
+GNUNET_NETWORK_STRUCT_BEGIN
+
+/**
+ * A room details record specifies a custom name for a given room and
+ * some additional space for flags.
+ */
+struct GNUNET_MESSENGER_RoomDetailsRecord
+{
+ /**
+ * The custom name for the room.
+ */
+ char name [256];
+
+ /**
+ * The flags of the room.
+ */
+ uint32_t flags;
+};
+
+GNUNET_NETWORK_STRUCT_END
+
/**
* Enum for the different supported kinds of messages
*/
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
const struct GNUNET_IDENTITY_PublicKey *value_zone,
GNUNET_NAMESTORE_RecordIterator iter,
void *iter_cls);
+
+ /** Transaction-based API draft **/
+
+ /**
+ * Start a transaction in the database
+ *
+ * @param cls closure (internal context for the plugin)
+ * @return #GNUNET_OK on success, #GNUNET_NO if there were no results, #GNUNET_SYSERR on error
+ */
+ enum GNUNET_GenericReturnValue
+ (*transaction_begin) (void *cls);
+
+ /**
+ * Abort a transaction in the database
+ *
+ * @param cls closure (internal context for the plugin)
+ * @return #GNUNET_OK on success, #GNUNET_NO if there were no results, #GNUNET_SYSERR on error
+ */
+ enum GNUNET_GenericReturnValue
+ (*transaction_abort) (void *cls);
+
+ /**
+ * Commit a transaction in the database
+ *
+ * @param cls closure (internal context for the plugin)
+ * @return #GNUNET_OK on success, #GNUNET_NO if there were no results, #GNUNET_SYSERR on error
+ */
+ enum GNUNET_GenericReturnValue
+ (*transaction_commit) (void *cls);
+
+ /**
+ * Replace a record in the datastore for which we are the authority.
+ * Removes any existing record in the same zone with the same name.
+ *
+ * @param cls closure (internal context for the plugin)
+ * @param zone private key of the zone
+ * @param label name of the record in the zone
+ * @param rd_count number of entries in @a rd array, 0 to delete all records
+ * @param rd array of records with data to store
+ * @return #GNUNET_OK on success, else #GNUNET_SYSERR
+ */
+ int
+ (*replace_records) (void *cls,
+ const struct GNUNET_IDENTITY_PrivateKey *zone,
+ const char *label,
+ unsigned int rd_count,
+ const struct GNUNET_GNSRECORD_Data *rd);
+
+ /**
+ * Lookup records in the datastore for which we are the authority.
+ *
+ * @param cls closure (internal context for the plugin)
+ * @param zone private key of the zone
+ * @param label name of the record in the zone
+ * @param iter function to call with the result
+ * @param iter_cls closure for @a iter
+ * @return #GNUNET_OK on success, #GNUNET_NO for no results, else #GNUNET_SYSERR
+ */
+ int
+ (*select_records) (void *cls,
+ const struct GNUNET_IDENTITY_PrivateKey *zone,
+ const char *label,
+ GNUNET_NAMESTORE_RecordIterator iter,
+ void *iter_cls);
+
};
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,
/**
- * Open a record set for editing.
- * Retrieves an exclusive lock on this set.
- * Must be commited using @a GNUNET_NAMESTORE_records_commit
- *
- * @param h handle to the namestore
- * @param pkey private key of the zone
- * @param label name that is being mapped
- * @param error_cb function to call on error (i.e. disconnect or unable to get lock)
- * the handle is afterwards invalid
- * @param error_cb_cls closure for @a error_cb
- * @param rm function to call with the result (with 0 records if we don't have that label)
- * @param rm_cls closure for @a rm
- * @return handle to abort the request
- */
-struct GNUNET_NAMESTORE_QueueEntry *
-GNUNET_NAMESTORE_records_open (struct GNUNET_NAMESTORE_Handle *h,
- const struct
- GNUNET_IDENTITY_PrivateKey *pkey,
- const char *label,
- GNUNET_SCHEDULER_TaskCallback error_cb,
- void *error_cb_cls,
- GNUNET_NAMESTORE_RecordMonitor rm,
- void *rm_cls);
-
-/**
- * Commit the record set to the namestore.
- * Releases the lock on the record set.
- * Use an empty array to
- * remove all records under the given name.
- *
- * The continuation is called after the value has been stored in the
- * database. Monitors may be notified asynchronously (basically with
- * a buffer). However, if any monitor is consistently too slow to
- * keep up with the changes, calling @a cont will be delayed until the
- * monitors do keep up.
- *
- * @param h handle to the namestore
- * @param pkey private key of the zone
- * @param label name that is being mapped
- * @param rd_count number of records in the 'rd' array
- * @param rd array of records with data to store
- * @param cont continuation to call when done
- * @param cont_cls closure for @a cont
- * @return handle to abort the request
- */
-struct GNUNET_NAMESTORE_QueueEntry *
-GNUNET_NAMESTORE_records_commit (struct GNUNET_NAMESTORE_Handle *h,
- const struct GNUNET_IDENTITY_PrivateKey *pkey,
- const char *label,
- unsigned int rd_count,
- const struct GNUNET_GNSRECORD_Data *rd,
- GNUNET_NAMESTORE_ContinuationWithStatus cont,
- void *cont_cls);
-
-/**
* Look for an existing PKEY delegation record for a given public key.
* Returns at most one result to the processor.
*
@@ -448,6 +393,107 @@ void
GNUNET_NAMESTORE_zone_monitor_stop (struct GNUNET_NAMESTORE_ZoneMonitor *zm);
+/**
+ * New API draft. Experimental
+ */
+
+/**
+ * Begin a namestore transaction.
+ *
+ * @param h handle to the namestore
+ * @param error_cb function to call on error (i.e. disconnect or unable to get lock)
+ * the handle is afterwards invalid
+ * @param error_cb_cls closure for @a error_cb
+ * @return handle to abort the request
+ */
+struct GNUNET_NAMESTORE_QueueEntry *
+GNUNET_NAMESTORE_transaction_begin (struct GNUNET_NAMESTORE_Handle *h,
+ GNUNET_SCHEDULER_TaskCallback error_cb,
+ void *error_cb_cls);
+
+/**
+ * Begin rollback all actions in a transaction.
+ * Reverts all actions performed since #GNUNET_NAMESTORE_transaction_begin
+ *
+ * @param h handle to the namestore
+ * @param error_cb function to call on error (i.e. disconnect or unable to get lock)
+ * the handle is afterwards invalid
+ * @param error_cb_cls closure for @a error_cb
+ * @return handle to abort the request
+ */
+struct GNUNET_NAMESTORE_QueueEntry *
+GNUNET_NAMESTORE_transaction_abort (struct GNUNET_NAMESTORE_Handle *h,
+ GNUNET_SCHEDULER_TaskCallback error_cb,
+ void *error_cb_cls);
+/**
+ * Commit a namestore transaction.
+ * Saves all actions performed since #GNUNET_NAMESTORE_transaction_begin
+ *
+ * @param h handle to the namestore
+ * @param error_cb function to call on error (i.e. disconnect or unable to get lock)
+ * the handle is afterwards invalid
+ * @param error_cb_cls closure for @a error_cb
+ * @return handle to abort the request
+ */
+struct GNUNET_NAMESTORE_QueueEntry *
+GNUNET_NAMESTORE_transaction_commit (struct GNUNET_NAMESTORE_Handle *h,
+ GNUNET_SCHEDULER_TaskCallback error_cb,
+ void *error_cb_cls);
+
+/**
+ * Lookup an item in the namestore.
+ *
+ * @param h handle to the namestore
+ * @param pkey private key of the zone
+ * @param label name that is being mapped
+ * @param error_cb function to call on error (i.e. disconnect)
+ * the handle is afterwards invalid
+ * @param error_cb_cls closure for @a error_cb
+ * @param rm function to call with the result (with 0 records if we don't have that label);
+ * the handle is afterwards invalid
+ * @param rm_cls closure for @a rm
+ * @return handle to abort the request
+ */
+struct GNUNET_NAMESTORE_QueueEntry *
+GNUNET_NAMESTORE_records_select (struct GNUNET_NAMESTORE_Handle *h,
+ const struct
+ GNUNET_IDENTITY_PrivateKey *pkey,
+ const char *label,
+ GNUNET_SCHEDULER_TaskCallback error_cb,
+ void *error_cb_cls,
+ GNUNET_NAMESTORE_RecordMonitor rm,
+ void *rm_cls);
+
+
+/**
+ * Creates, deletes or updates an item in the namestore.
+ * If the item is already present, it is replaced with the new record set.
+ * Use an empty array to remove all records under the given name.
+ *
+ * The continuation is called after the value has been stored in the
+ * database. Monitors may be notified asynchronously (basically with
+ * a buffer). However, if any monitor is consistently too slow to
+ * keep up with the changes, calling @a cont will be delayed until the
+ * monitors do keep up.
+ *
+ * @param h handle to the namestore
+ * @param pkey private key of the zone
+ * @param label name that is being mapped
+ * @param rd_count number of records in the 'rd' array
+ * @param rd array of records with data to store
+ * @param cont continuation to call when done
+ * @param cont_cls closure for @a cont
+ * @return handle to abort the request
+ */
+struct GNUNET_NAMESTORE_QueueEntry *
+GNUNET_NAMESTORE_records_replace (struct GNUNET_NAMESTORE_Handle *h,
+ const struct GNUNET_IDENTITY_PrivateKey *pkey,
+ const char *label,
+ unsigned int rd_count,
+ const struct GNUNET_GNSRECORD_Data *rd,
+ GNUNET_NAMESTORE_ContinuationWithStatus cont,
+ void *cont_cls);
+
#if 0 /* keep Emacsens' auto-indent happy */
{
#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 @@
/*
This file is part of GNUnet.
- Copyright (C) 2001-2013 GNUnet e.V.
+ Copyright (C) 2001-2022 GNUnet e.V.
GNUnet is free software: you can redistribute it and/or modify it
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,
/**
+ * Round down absolute time @a at to multiple of @a rt.
+ *
+ * @param at absolute time to round
+ * @param rt multiple to round to (non-zero)
+ * @return rounded time
+ */
+struct GNUNET_TIME_Absolute
+GNUNET_TIME_absolute_round_down (struct GNUNET_TIME_Absolute at,
+ struct GNUNET_TIME_Relative rt);
+
+
+/**
* Return the maximum of two timestamps.
*
* @param t1 first timestamp
@@ -517,6 +529,21 @@ GNUNET_TIME_absolute_get_remaining (struct GNUNET_TIME_Absolute future);
/**
+ * Test if @a a1 and @a a2 are equal within a margin of
+ * error of @a t.
+ *
+ * @param a1 time to compare
+ * @param a2 time to compare
+ * @param t tolerance to apply
+ * @return true if "|a1-a2|<=t" holds.
+ */
+bool
+GNUNET_TIME_absolute_approx_eq (struct GNUNET_TIME_Absolute a1,
+ struct GNUNET_TIME_Absolute a2,
+ struct GNUNET_TIME_Relative t);
+
+
+/**
* Calculate the estimate time of arrival/completion
* for an operation.
*
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 @@
/*
This file is part of GNUnet.
- Copyright (C) 2021 GNUnet e.V.
+ Copyright (C) 2021--2022 GNUnet e.V.
GNUnet is free software: you can redistribute it and/or modify it
under the terms of the GNU Affero General Public License as published
@@ -63,12 +63,30 @@ messenger_value_to_string (void *cls,
char *key = GNUNET_STRINGS_data_to_string_alloc (&(record->key), sizeof(struct GNUNET_HashCode));
char *ret;
- GNUNET_asprintf (&ret, "%s-%s", door, key);
+ GNUNET_asprintf (&ret, "%s-%s", key, door);
GNUNET_free (key);
GNUNET_free (door);
return ret;
}
+ case GNUNET_GNSRECORD_TYPE_MESSENGER_ROOM_DETAILS:
+ {
+ if (data_size != sizeof(struct GNUNET_MESSENGER_RoomDetailsRecord))
+ {
+ GNUNET_break_op (0);
+ return NULL;
+ }
+
+ const struct GNUNET_MESSENGER_RoomDetailsRecord *record = data;
+ char *name = GNUNET_strndup(record->name, 256);
+ char *flags = GNUNET_STRINGS_data_to_string_alloc (&(record->flags), sizeof(uint32_t));
+
+ char *ret;
+ GNUNET_asprintf (&ret, "%s-%s", flags, name);
+ GNUNET_free (flags);
+ GNUNET_free (name);
+ return ret;
+ }
default:
return NULL;
}
@@ -141,7 +159,43 @@ messenger_string_to_value (void *cls,
*data_size = sizeof(struct GNUNET_MESSENGER_RoomEntryRecord);
return GNUNET_OK;
}
+ case GNUNET_GNSRECORD_TYPE_MESSENGER_ROOM_DETAILS:
+ {
+ char flags [7];
+ const char *dash;
+
+ if ((NULL == (dash = strchr (s, '-'))) ||
+ (1 != sscanf (s, "%7s-", flags)) ||
+ (strlen (dash + 1) > 256))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ _ ("Unable to parse MESSENGER_ROOM_DETAILS record `%s'\n"),
+ s);
+ return GNUNET_SYSERR;
+ }
+
+ struct GNUNET_MESSENGER_RoomDetailsRecord *record = GNUNET_new (
+ struct GNUNET_MESSENGER_RoomDetailsRecord
+ );
+
+ if (GNUNET_OK != GNUNET_STRINGS_string_to_data (flags,
+ strlen (flags),
+ &(record->flags),
+ sizeof(uint32_t)))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ _ ("Unable to parse MESSENGER_ROOM_DETAILS record `%s'\n"),
+ s);
+ GNUNET_free (record);
+ return GNUNET_SYSERR;
+ }
+ GNUNET_memcpy(record->name, dash + 1, strlen(dash + 1));
+
+ *data = record;
+ *data_size = sizeof(struct GNUNET_MESSENGER_RoomDetailsRecord);
+ return GNUNET_OK;
+ }
default:
return GNUNET_SYSERR;
}
@@ -158,6 +212,7 @@ static struct
uint32_t number;
} name_map[] = {
{ "MESSENGER_ROOM_ENTRY", GNUNET_GNSRECORD_TYPE_MESSENGER_ROOM_ENTRY },
+ { "MESSENGER_ROOM_DETAILS", GNUNET_GNSRECORD_TYPE_MESSENGER_ROOM_DETAILS },
{ NULL, UINT32_MAX }
};
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
SQLITE_PLUGIN = libgnunet_plugin_namestore_sqlite.la
SQLITE_TESTS = test_plugin_namestore_sqlite \
test_namestore_api_store_sqlite \
- test_namestore_api_store_locking_sqlite \
test_namestore_api_store_update_sqlite \
test_namestore_api_zone_iteration_sqlite \
test_namestore_api_remove_sqlite \
@@ -250,16 +249,6 @@ test_namestore_api_store_sqlite_LDADD = \
$(top_builddir)/src/identity/libgnunetidentity.la \
libgnunetnamestore.la
-test_namestore_api_store_locking_sqlite_SOURCES = \
- test_namestore_api_store_locking.c
-test_namestore_api_store_locking_sqlite_LDADD = \
- $(top_builddir)/src/testing/libgnunettesting.la \
- $(top_builddir)/src/util/libgnunetutil.la \
- $(top_builddir)/src/gnsrecord/libgnunetgnsrecord.la \
- $(top_builddir)/src/identity/libgnunetidentity.la \
- libgnunetnamestore.la
-
-
test_namestore_api_store_postgres_SOURCES = \
test_namestore_api_store.c
test_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
};
/**
- * Lock on a record set
- */
-struct RecordsLock
-{
- /* DLL */
- struct RecordsLock *prev;
-
- /* DLL */
- struct RecordsLock *next;
-
- /* Hash of the locked label */
- struct GNUNET_HashCode label_hash;
-
- /* Client locking the zone */
- struct NamestoreClient *client;
-};
-
-/**
* A namestore client
*/
struct NamestoreClient
@@ -411,16 +393,6 @@ static struct StoreActivity *sa_head;
static struct StoreActivity *sa_tail;
/**
- * Head of the DLL of record set locks
- */
-static struct RecordsLock *locks_head;
-
-/**
- * Tail of the DLL of record set locks
- */
-static struct RecordsLock *locks_tail;
-
-/**
* Notification context shared by all monitors.
*/
static struct GNUNET_NotificationContext *monitor_nc;
@@ -447,7 +419,6 @@ static void
cleanup_task (void *cls)
{
struct CacheOperation *cop;
- struct RecordsLock *lock;
(void) cls;
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Stopping namestore service\n");
@@ -459,13 +430,6 @@ cleanup_task (void *cls)
GNUNET_CONTAINER_DLL_remove (cop_head, cop_tail, cop);
GNUNET_free (cop);
}
- while (NULL != (lock = locks_head))
- {
- GNUNET_CONTAINER_DLL_remove (locks_head,
- locks_tail,
- lock);
- GNUNET_free (lock);
- }
if (NULL != namecache)
{
@@ -1154,7 +1118,6 @@ client_disconnect_cb (void *cls,
struct NamestoreClient *nc = app_ctx;
struct ZoneIteration *no;
struct CacheOperation *cop;
- struct RecordsLock *lock;
(void) cls;
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Client %p disconnected\n", client);
@@ -1205,15 +1168,6 @@ client_disconnect_cb (void *cls,
for (cop = cop_head; NULL != cop; cop = cop->next)
if (nc == cop->nc)
cop->nc = NULL;
- for (lock = locks_head; NULL != lock; lock = lock->next)
- {
- if (nc != lock->client)
- continue;
- GNUNET_CONTAINER_DLL_remove (locks_head,
- locks_tail,
- lock);
- GNUNET_free (lock);
- }
GNUNET_free (nc);
}
@@ -1407,105 +1361,6 @@ check_record_lookup (void *cls, const struct LabelLookupMessage *ll_msg)
return GNUNET_OK;
}
-static void
-calculate_lock_hash (const char *label,
- const struct GNUNET_IDENTITY_PrivateKey *zone,
- struct GNUNET_HashCode *result)
-{
- struct GNUNET_HashContext *hctx;
-
- hctx = GNUNET_CRYPTO_hash_context_start ();
- GNUNET_CRYPTO_hash_context_read (hctx, label, strlen (label));
- GNUNET_CRYPTO_hash_context_read (hctx, zone,
- sizeof (*zone));
- GNUNET_CRYPTO_hash_context_finish (hctx, result);
-}
-
-/**
- * Release a lock on a record set.
- * Does nothing if lock not held.
- *
- * @param label the label of the record set
- * @param zone the zone
- * @param nc the client releasing the lock
- */
-static void
-NST_label_lock_release (const char *label,
- const struct GNUNET_IDENTITY_PrivateKey *zone,
- const struct NamestoreClient *nc)
-{
- struct GNUNET_HashCode label_hash;
- struct RecordsLock *lock;
-
- calculate_lock_hash (label, zone, &label_hash);
- for (lock = locks_head; NULL != lock; lock = lock->next)
- if (0 == memcmp (&label_hash, &lock->label_hash, sizeof (label_hash)))
- break;
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Record locked: %s\n", (NULL == lock) ? "No" : "Yes");
- if (NULL == lock)
- return;
- if (lock->client != nc)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- "Lock is held by other client on `%s'\n", label);
- return;
- }
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Unocking %s\n", GNUNET_h2s (&label_hash));
- GNUNET_CONTAINER_DLL_remove (locks_head,
- locks_tail,
- lock);
- GNUNET_free (lock);
-}
-
-/**
- * Get/set a lock on a record set.
- * May be called multiple times but will
- * not aquire additional locks.
- *
- * @param the label of the record set
- * @param the zone
- * @param the client doing the locking
- * @return GNUNET_YES if lock retrieved or set already.
- */
-static enum GNUNET_GenericReturnValue
-NST_label_lock (const char *label,
- const struct GNUNET_IDENTITY_PrivateKey *zone,
- struct NamestoreClient *nc)
-{
- struct GNUNET_HashCode label_hash;
- struct RecordsLock *lock;
-
- calculate_lock_hash (label, zone, &label_hash);
- for (lock = locks_head; NULL != lock; lock = lock->next)
- if (0 == memcmp (&label_hash, &lock->label_hash, sizeof (label_hash)))
- break;
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Record locked: %s\n", (NULL == lock) ? "No" : "Yes");
- if (NULL != lock)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Client holds lock: %s\n", (lock->client != nc) ? "No" : "Yes");
- if (lock->client != nc)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- "Lock is held by other client on `%s'\n", label);
- return GNUNET_NO;
- }
- return GNUNET_YES;
- }
- lock = GNUNET_new (struct RecordsLock);
- lock->client = nc;
- memcpy (&lock->label_hash, &label_hash, sizeof (label_hash));
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Locking %s\n", GNUNET_h2s (&label_hash));
- GNUNET_CONTAINER_DLL_insert (locks_head,
- locks_tail,
- lock);
- return GNUNET_YES;
-}
-
/**
* Handles a #GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_LOOKUP message
@@ -1520,7 +1375,6 @@ handle_record_lookup (void *cls, const struct LabelLookupMessage *ll_msg)
struct GNUNET_MQ_Envelope *env;
struct LabelLookupResponseMessage *llr_msg;
struct RecordLookupContext rlc;
- struct RecordsLock *lock;
struct GNUNET_HashCode label_hash;
const char *name_tmp;
char *res_name;
@@ -1544,28 +1398,6 @@ handle_record_lookup (void *cls, const struct LabelLookupMessage *ll_msg)
return;
}
name_len = strlen (conv_name) + 1;
- if (GNUNET_YES == ntohl (ll_msg->locking))
- {
- if (GNUNET_NO == NST_label_lock (conv_name, &ll_msg->zone, nc))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- "Lock is held by other client on `%s'\n", conv_name);
- env =
- GNUNET_MQ_msg_extra (llr_msg,
- name_len,
- GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_LOOKUP_RESPONSE);
- llr_msg->gns_header.r_id = ll_msg->gns_header.r_id;
- llr_msg->private_key = ll_msg->zone;
- llr_msg->name_len = htons (name_len);
- llr_msg->rd_count = htons (0);
- llr_msg->rd_len = htons (0);
- llr_msg->found = htons (GNUNET_SYSERR);
- GNUNET_memcpy (&llr_msg[1], conv_name, name_len);
- GNUNET_MQ_send (nc->mq, env);
- GNUNET_free (conv_name);
- return;
- }
- }
rlc.label = conv_name;
rlc.found = GNUNET_NO;
rlc.res_rd_count = 0;
@@ -1699,7 +1531,6 @@ handle_record_store (void *cls, const struct RecordStoreMessage *rp_msg)
unsigned int rd_count;
int res;
struct StoreActivity *sa;
- struct RecordsLock *lock;
struct GNUNET_HashCode label_hash;
struct GNUNET_TIME_Absolute existing_block_exp;
struct GNUNET_TIME_Absolute new_block_exp;
@@ -1753,20 +1584,6 @@ handle_record_store (void *cls, const struct RecordStoreMessage *rp_msg)
GNUNET_SERVICE_client_continue (nc->client);
return;
}
- if (GNUNET_YES == ntohl (rp_msg->locking))
- {
- if (GNUNET_NO == NST_label_lock (conv_name, &rp_msg->private_key, nc))
- {
- send_store_response (nc, GNUNET_SYSERR, _ ("Record set locked."), rid);
- GNUNET_SERVICE_client_continue (nc->client);
- GNUNET_free (conv_name);
- return;
- }
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Client has lock on `%s', continuing.\n", conv_name);
- if (GNUNET_YES == ntohl (rp_msg->locking))
- NST_label_lock_release (conv_name, &rp_msg->private_key, nc);
- }
GNUNET_STATISTICS_update (statistics,
"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
struct GNUNET_TIME_AbsoluteNBO expire;
/**
- * Unock the label with this request.
- */
- uint32_t locking GNUNET_PACKED;
-
- /**
* Name length
*/
uint16_t name_len GNUNET_PACKED;
@@ -151,11 +146,6 @@ struct LabelLookupMessage
uint32_t label_len GNUNET_PACKED;
/**
- * Lock the label with this lookup
- */
- uint32_t locking GNUNET_PACKED;
-
- /**
* The private key of the zone to look up in
*/
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,
return;
if (NULL != qe->cont)
qe->cont (qe->cont_cls, res,
- (GNUNET_OK == res) ? NULL : emsg);
+ (GNUNET_OK == res) ? NULL : emsg);
free_qe (qe);
}
@@ -482,7 +482,7 @@ handle_lookup_result (void *cls, const struct LabelLookupResponseMessage *msg)
int16_t found = (int16_t) ntohs (msg->found);
LOG (GNUNET_ERROR_TYPE_DEBUG, "Received RECORD_LOOKUP_RESULT (found=%i)\n",
- found);
+ found);
qe = find_qe (h, ntohl (msg->gns_header.r_id));
if (NULL == qe)
return;
@@ -820,9 +820,9 @@ reconnect (struct GNUNET_NAMESTORE_Handle *h)
{
struct GNUNET_MQ_MessageHandler handlers[] =
{ GNUNET_MQ_hd_var_size (record_store_response,
- GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_STORE_RESPONSE,
- struct RecordStoreResponseMessage,
- h),
+ GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_STORE_RESPONSE,
+ struct RecordStoreResponseMessage,
+ h),
GNUNET_MQ_hd_var_size (zone_to_name_response,
GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_TO_NAME_RESPONSE,
struct ZoneToNameResponseMessage,
@@ -1013,16 +1013,16 @@ warn_delay (void *cls)
GNUNET_NAMESTORE_cancel (qe);
}
+
struct GNUNET_NAMESTORE_QueueEntry *
-records_store_ (
+GNUNET_NAMESTORE_records_store (
struct GNUNET_NAMESTORE_Handle *h,
const struct GNUNET_IDENTITY_PrivateKey *pkey,
const char *label,
unsigned int rd_count,
const struct GNUNET_GNSRECORD_Data *rd,
GNUNET_NAMESTORE_ContinuationWithStatus cont,
- void *cont_cls,
- int locking)
+ void *cont_cls)
{
struct GNUNET_NAMESTORE_QueueEntry *qe;
struct GNUNET_MQ_Envelope *env;
@@ -1067,9 +1067,8 @@ records_store_ (
msg->name_len = htons (name_len);
msg->rd_count = htons (rd_count);
msg->rd_len = htons (rd_ser_len);
- msg->reserved = ntohs(0);
+ msg->reserved = ntohs (0);
msg->private_key = *pkey;
- msg->locking = htonl (locking);
name_tmp = (char *) &msg[1];
GNUNET_memcpy (name_tmp, label, name_len);
@@ -1101,22 +1100,11 @@ records_store_ (
return qe;
}
+/**
+ * TODO: Experimental API will replace API above.
+ */
struct GNUNET_NAMESTORE_QueueEntry *
-GNUNET_NAMESTORE_records_store (
- struct GNUNET_NAMESTORE_Handle *h,
- const struct GNUNET_IDENTITY_PrivateKey *pkey,
- const char *label,
- unsigned int rd_count,
- const struct GNUNET_GNSRECORD_Data *rd,
- GNUNET_NAMESTORE_ContinuationWithStatus cont,
- void *cont_cls)
-{
- return records_store_ (h, pkey, label,
- rd_count, rd, cont, cont_cls, GNUNET_NO);
-}
-
-struct GNUNET_NAMESTORE_QueueEntry *
-GNUNET_NAMESTORE_records_commit (
+GNUNET_NAMESTORE_records_replace (
struct GNUNET_NAMESTORE_Handle *h,
const struct GNUNET_IDENTITY_PrivateKey *pkey,
const char *label,
@@ -1125,21 +1113,19 @@ GNUNET_NAMESTORE_records_commit (
GNUNET_NAMESTORE_ContinuationWithStatus cont,
void *cont_cls)
{
- return records_store_ (h, pkey, label,
- rd_count, rd, cont, cont_cls, GNUNET_YES);
+ return GNUNET_NAMESTORE_records_store (h, pkey, label, rd_count, rd,
+ cont, cont_cls);
}
-
struct GNUNET_NAMESTORE_QueueEntry *
-records_lookup_ (
+GNUNET_NAMESTORE_records_lookup (
struct GNUNET_NAMESTORE_Handle *h,
const struct GNUNET_IDENTITY_PrivateKey *pkey,
const char *label,
GNUNET_SCHEDULER_TaskCallback error_cb,
void *error_cb_cls,
GNUNET_NAMESTORE_RecordMonitor rm,
- void *rm_cls,
- int locking)
+ void *rm_cls)
{
struct GNUNET_NAMESTORE_QueueEntry *qe;
struct GNUNET_MQ_Envelope *env;
@@ -1167,7 +1153,6 @@ records_lookup_ (
msg->gns_header.r_id = htonl (qe->op_id);
msg->zone = *pkey;
msg->label_len = htonl (label_len);
- msg->locking = htonl (locking);
GNUNET_memcpy (&msg[1], label, label_len);
if (NULL == h->mq)
qe->env = env;
@@ -1176,22 +1161,12 @@ records_lookup_ (
return qe;
}
-struct GNUNET_NAMESTORE_QueueEntry *
-GNUNET_NAMESTORE_records_lookup (
- struct GNUNET_NAMESTORE_Handle *h,
- const struct GNUNET_IDENTITY_PrivateKey *pkey,
- const char *label,
- GNUNET_SCHEDULER_TaskCallback error_cb,
- void *error_cb_cls,
- GNUNET_NAMESTORE_RecordMonitor rm,
- void *rm_cls)
-{
- return records_lookup_ (h, pkey, label,
- error_cb, error_cb_cls, rm, rm_cls, GNUNET_NO);
-}
+/**
+ * TODO experimental API. Will replace old API above.
+ */
struct GNUNET_NAMESTORE_QueueEntry *
-GNUNET_NAMESTORE_records_open (
+GNUNET_NAMESTORE_records_select (
struct GNUNET_NAMESTORE_Handle *h,
const struct GNUNET_IDENTITY_PrivateKey *pkey,
const char *label,
@@ -1200,8 +1175,9 @@ GNUNET_NAMESTORE_records_open (
GNUNET_NAMESTORE_RecordMonitor rm,
void *rm_cls)
{
- return records_lookup_ (h, pkey, label,
- error_cb, error_cb_cls, rm, rm_cls, GNUNET_YES);
+ return GNUNET_NAMESTORE_records_lookup (h, pkey, label,
+ error_cb, error_cb_cls,
+ rm, rm_cls);
}
struct GNUNET_NAMESTORE_QueueEntry *
@@ -1364,5 +1340,48 @@ GNUNET_NAMESTORE_cancel (struct GNUNET_NAMESTORE_QueueEntry *qe)
free_qe (qe);
}
+/**
+ * New API draft. Experimental
+ */
+
+struct GNUNET_NAMESTORE_QueueEntry *
+GNUNET_NAMESTORE_transaction_begin (struct GNUNET_NAMESTORE_Handle *h,
+ GNUNET_SCHEDULER_TaskCallback error_cb,
+ void *error_cb_cls)
+{
+ GNUNET_break (0);
+ return NULL;
+}
+
+
+struct GNUNET_NAMESTORE_QueueEntry *
+GNUNET_NAMESTORE_transaction_abort (struct GNUNET_NAMESTORE_Handle *h,
+ GNUNET_SCHEDULER_TaskCallback error_cb,
+ void *error_cb_cls)
+{
+ GNUNET_break (0);
+ return NULL;
+}
+
+
+/**
+ * Commit a namestore transaction.
+ * Saves all actions performed since #GNUNET_NAMESTORE_transaction_begin
+ *
+ * @param h handle to the namestore
+ * @param error_cb function to call on error (i.e. disconnect or unable to get lock)
+ * the handle is afterwards invalid
+ * @param error_cb_cls closure for @a error_cb
+ * @return handle to abort the request
+ */
+struct GNUNET_NAMESTORE_QueueEntry *
+GNUNET_NAMESTORE_transaction_commit (struct GNUNET_NAMESTORE_Handle *h,
+ GNUNET_SCHEDULER_TaskCallback error_cb,
+ void *error_cb_cls)
+{
+ GNUNET_break (0);
+ return NULL;
+}
+
/* 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,
fnum))
{
GNUNET_break (0);
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Got length %u for field `%s'\n",
+ PQgetlength (result,
+ row,
+ fnum),
+ fname);
return GNUNET_SYSERR;
}
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 \
test_transport_simple_send.sh \
test_transport_simple_send_broadcast.sh \
test_transport_udp_backchannel.sh \
+test_transport_simple_send_dv_circle.sh \
gnunet-transport-certificate-creation.in \
communicator-unix.conf \
test_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
test_crypto_ecdhe
test_crypto_ecdsa
test_crypto_eddsa
+test_crypto_edx25519
test_crypto_hash
test_crypto_hash_context
test_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 = \
crypto_ecc_gnsrecord.c \
$(DLOG) \
crypto_ecc_setup.c \
+ crypto_edx25519.c \
crypto_hash.c \
crypto_hash_file.c \
crypto_hkdf.c \
@@ -297,6 +298,7 @@ check_PROGRAMS = \
test_crypto_ecdhe \
test_crypto_ecdh_eddsa \
test_crypto_ecdh_ecdsa \
+ test_crypto_edx25519 \
$(DLOG_TEST) \
test_crypto_hash \
test_crypto_hash_context \
@@ -470,6 +472,12 @@ test_crypto_eddsa_LDADD = \
libgnunetutil.la \
$(LIBGCRYPT_LIBS)
+test_crypto_edx25519_SOURCES = \
+ test_crypto_edx25519.c
+test_crypto_edx25519_LDADD = \
+ libgnunetutil.la \
+ $(LIBGCRYPT_LIBS)
+
test_crypto_ecc_dlog_SOURCES = \
test_crypto_ecc_dlog.c
test_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,
}
-/**
- * This is a signature function for EdDSA which takes the
- * secret scalar sk instead of the private seed which is
- * usually the case for crypto APIs. We require this functionality
- * in order to use derived private keys for signatures we
- * cannot calculate the inverse of a sk to find the seed
- * efficiently.
- *
- * The resulting signature is a standard EdDSA signature
- * which can be verified using the usual APIs.
- *
- * @param sk the secret scalar
- * @param purp the signature purpose
- * @param sig the resulting signature
- */
-void
-GNUNET_CRYPTO_eddsa_sign_with_scalar (
- const struct GNUNET_CRYPTO_EddsaPrivateScalar *priv,
+enum GNUNET_GenericReturnValue
+GNUNET_CRYPTO_eddsa_sign_derived (
+ const struct GNUNET_CRYPTO_EddsaPrivateKey *pkey,
+ const char *label,
+ const char *context,
const struct GNUNET_CRYPTO_EccSignaturePurpose *purpose,
struct GNUNET_CRYPTO_EddsaSignature *sig)
{
-
+ struct GNUNET_CRYPTO_EddsaPrivateScalar priv;
crypto_hash_sha512_state hs;
unsigned char sk[64];
unsigned char r[64];
@@ -98,6 +85,14 @@ GNUNET_CRYPTO_eddsa_sign_with_scalar (
unsigned char zk[32];
unsigned char tmp[32];
+ /**
+ * Derive the private key
+ */
+ GNUNET_CRYPTO_eddsa_private_key_derive (pkey,
+ label,
+ context,
+ &priv);
+
crypto_hash_sha512_init (&hs);
/**
@@ -108,7 +103,7 @@ GNUNET_CRYPTO_eddsa_sign_with_scalar (
* sk[0..31] = h * SHA512 (d)[0..31]
* sk[32..63] = SHA512 (d)[32..63]
*/
- memcpy (sk, priv->s, 64);
+ memcpy (sk, priv.s, 64);
/**
* Calculate the derived zone key zk' from the
@@ -172,8 +167,28 @@ GNUNET_CRYPTO_eddsa_sign_with_scalar (
sodium_memzero (sk, sizeof (sk));
sodium_memzero (r, sizeof (r));
sodium_memzero (r_mod, sizeof (r_mod));
+ return GNUNET_OK;
}
+enum GNUNET_GenericReturnValue
+GNUNET_CRYPTO_ecdsa_sign_derived (
+ const struct GNUNET_CRYPTO_EcdsaPrivateKey *priv,
+ const char *label,
+ const char *context,
+ const struct GNUNET_CRYPTO_EccSignaturePurpose *purpose,
+ struct GNUNET_CRYPTO_EcdsaSignature *sig)
+{
+ struct GNUNET_CRYPTO_EcdsaPrivateKey *key;
+ enum GNUNET_GenericReturnValue res;
+ key = GNUNET_CRYPTO_ecdsa_private_key_derive (priv,
+ label,
+ context);
+ res = GNUNET_CRYPTO_ecdsa_sign_ (key,
+ purpose,
+ sig);
+ GNUNET_free (key);
+ return res;
+}
struct GNUNET_CRYPTO_EcdsaPrivateKey *
GNUNET_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 @@
+/*
+ This file is part of GNUnet.
+ Copyright (C) 2022 GNUnet e.V.
+
+ GNUnet is free software: you can redistribute it and/or modify it
+ under the terms of the GNU Affero General Public License as published
+ by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ GNUnet is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ SPDX-License-Identifier: AGPL3.0-or-later
+ */
+
+/**
+ * @file util/crypto_edx25519.c
+ * @brief An variant of EdDSA which allows for iterative derivation of key pairs.
+ * @author Özgür Kesim
+ * @author Christian Grothoff
+ * @author Florian Dold
+ * @author Martin Schanzenbach
+ */
+#include "platform.h"
+#include <gcrypt.h>
+#include <sodium.h>
+#include "gnunet_crypto_lib.h"
+#include "gnunet_strings_lib.h"
+
+#define CURVE "Ed25519"
+
+void
+GNUNET_CRYPTO_edx25519_key_clear (struct GNUNET_CRYPTO_Edx25519PrivateKey *pk)
+{
+ memset (pk, 0, sizeof(struct GNUNET_CRYPTO_Edx25519PrivateKey));
+}
+
+
+void
+GNUNET_CRYPTO_edx25519_key_create_from_seed (
+ const void *seed,
+ size_t seedsize,
+ struct GNUNET_CRYPTO_Edx25519PrivateKey *pk)
+{
+
+ GNUNET_static_assert (sizeof(*pk) == sizeof(struct GNUNET_HashCode));
+ GNUNET_CRYPTO_hash (seed,
+ seedsize,
+ (struct GNUNET_HashCode *) pk);
+
+ /* Clamp the first half of the key. The second half is used in the signature
+ * process. */
+ pk->a[0] &= 248;
+ pk->a[31] &= 127;
+ pk->a[31] |= 64;
+}
+
+
+void
+GNUNET_CRYPTO_edx25519_key_create (
+ struct GNUNET_CRYPTO_Edx25519PrivateKey *pk)
+{
+ char seed[256 / 8];
+ GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_NONCE,
+ seed,
+ sizeof (seed));
+ GNUNET_CRYPTO_edx25519_key_create_from_seed (seed,
+ sizeof(seed),
+ pk);
+}
+
+
+void
+GNUNET_CRYPTO_edx25519_key_get_public (
+ const struct GNUNET_CRYPTO_Edx25519PrivateKey *priv,
+ struct GNUNET_CRYPTO_Edx25519PublicKey *pub)
+{
+ crypto_scalarmult_ed25519_base_noclamp (pub->q_y,
+ priv->a);
+}
+
+
+/**
+ * This function operates the basically same way as the signature function for
+ * EdDSA. But instead of expanding a private seed (which is usually the case
+ * for crypto APIs) and using the resulting scalars, it takes the scalars
+ * directly from Edx25519PrivateKey. We require this functionality in order to
+ * use derived private keys for signatures.
+ *
+ * The resulting signature is a standard EdDSA signature
+ * which can be verified using the usual APIs.
+ *
+ * @param priv the private key (containing two scalars .a and .b)
+ * @param purp the signature purpose
+ * @param sig the resulting signature
+ */
+enum GNUNET_GenericReturnValue
+GNUNET_CRYPTO_edx25519_sign_ (
+ const struct GNUNET_CRYPTO_Edx25519PrivateKey *priv,
+ const struct GNUNET_CRYPTO_EccSignaturePurpose *purpose,
+ struct GNUNET_CRYPTO_Edx25519Signature *sig)
+{
+
+ crypto_hash_sha512_state hs;
+ unsigned char r[64];
+ unsigned char hram[64];
+ unsigned char P[32];
+ unsigned char r_mod[64];
+ unsigned char R[32];
+ unsigned char tmp[32];
+
+ crypto_hash_sha512_init (&hs);
+
+ /**
+ * Calculate the public key P from the private scalar in the key.
+ */
+ crypto_scalarmult_ed25519_base_noclamp (P,
+ priv->a);
+
+ /**
+ * Calculate r:
+ * r = SHA512 (b ∥ M)
+ * where M is our message (purpose).
+ */
+ crypto_hash_sha512_update (&hs,
+ priv->b,
+ sizeof(priv->b));
+ crypto_hash_sha512_update (&hs,
+ (uint8_t*) purpose,
+ ntohl (purpose->size));
+ crypto_hash_sha512_final (&hs,
+ r);
+
+ /**
+ * Temporarily put P into S
+ */
+ memcpy (sig->s, P, 32);
+
+ /**
+ * Reduce the scalar value r
+ */
+ crypto_core_ed25519_scalar_reduce (r_mod, r);
+
+ /**
+ * Calculate R := r * G of the signature
+ */
+ crypto_scalarmult_ed25519_base_noclamp (R, r_mod);
+ memcpy (sig->r, R, sizeof (R));
+
+ /**
+ * Calculate
+ * hram := SHA512 (R ∥ P ∥ M)
+ */
+ crypto_hash_sha512_init (&hs);
+ crypto_hash_sha512_update (&hs, (uint8_t*) sig, 64);
+ crypto_hash_sha512_update (&hs, (uint8_t*) purpose,
+ ntohl (purpose->size));
+ crypto_hash_sha512_final (&hs, hram);
+
+ /**
+ * Reduce the resulting scalar value
+ */
+ unsigned char hram_mod[64];
+ crypto_core_ed25519_scalar_reduce (hram_mod, hram);
+
+ /**
+ * Calculate
+ * S := r + hram * s mod L
+ */
+ crypto_core_ed25519_scalar_mul (tmp, hram_mod, priv->a);
+ crypto_core_ed25519_scalar_add (sig->s, tmp, r_mod);
+
+ sodium_memzero (r, sizeof (r));
+ sodium_memzero (r_mod, sizeof (r_mod));
+
+ return GNUNET_OK;
+}
+
+
+enum GNUNET_GenericReturnValue
+GNUNET_CRYPTO_edx25519_verify_ (
+ uint32_t purpose,
+ const struct GNUNET_CRYPTO_EccSignaturePurpose *validate,
+ const struct GNUNET_CRYPTO_Edx25519Signature *sig,
+ const struct GNUNET_CRYPTO_Edx25519PublicKey *pub)
+{
+ const unsigned char *m = (const void *) validate;
+ size_t mlen = ntohl (validate->size);
+ const unsigned char *s = (const void *) sig;
+
+ int res;
+
+ if (purpose != ntohl (validate->purpose))
+ return GNUNET_SYSERR; /* purpose mismatch */
+
+ res = crypto_sign_verify_detached (s, m, mlen, pub->q_y);
+ return (res == 0) ? GNUNET_OK : GNUNET_SYSERR;
+}
+
+
+/**
+ * Derive the 'h' value for key derivation, where
+ * 'h = H(P ∥ seed) mod n' and 'n' is the size of the cyclic subroup.
+ *
+ * @param pub public key for deriviation
+ * @param seed seed for key the deriviation
+ * @param seedsize the size of the seed
+ * @param n The value for the modulus 'n'
+ * @param[out] phc if not NULL, the output of H() will be written into
+ * return h_mod_n (allocated by this function)
+ */
+static gcry_mpi_t
+derive_h_mod_n (
+ const struct GNUNET_CRYPTO_Edx25519PublicKey *pub,
+ const void *seed,
+ size_t seedsize,
+ const gcry_mpi_t n,
+ struct GNUNET_HashCode *phc)
+{
+ static const char *const salt = "edx2559-derivation";
+ struct GNUNET_HashCode hc;
+ gcry_mpi_t h;
+ gcry_mpi_t h_mod_n;
+
+ if (NULL == phc)
+ phc = &hc;
+
+ GNUNET_CRYPTO_kdf (phc, sizeof(*phc),
+ salt, strlen (salt),
+ pub, sizeof(*pub),
+ seed, seedsize,
+ NULL, 0);
+
+ /* calculate h_mod_n = h % n */
+ GNUNET_CRYPTO_mpi_scan_unsigned (&h,
+ (unsigned char *) phc,
+ sizeof(*phc));
+ h_mod_n = gcry_mpi_new (256);
+ gcry_mpi_mod (h_mod_n, h, n);
+
+#ifdef CHECK_RARE_CASES
+ /**
+ * Note that the following cases would be problematic:
+ * 1.) h == 0 mod n
+ * 2.) h == 1 mod n
+ * 3.) [h] * P == E
+ * We assume that the probalities for these cases to occur are neglegible.
+ */
+ GNUNET_assert (! gcry_mpi_cmp_ui (h_mod_n, 0));
+ GNUNET_assert (! gcry_mpi_cmp_ui (h_mod_n, 1));
+#endif
+
+ gcry_mpi_release(h);
+ return h_mod_n;
+}
+
+
+void
+GNUNET_CRYPTO_edx25519_private_key_derive (
+ const struct GNUNET_CRYPTO_Edx25519PrivateKey *priv,
+ const void *seed,
+ size_t seedsize,
+ struct GNUNET_CRYPTO_Edx25519PrivateKey *result)
+{
+ struct GNUNET_CRYPTO_Edx25519PublicKey pub;
+ struct GNUNET_HashCode hc;
+ uint8_t a[32];
+ gcry_ctx_t ctx;
+ gcry_mpi_t h_mod_n;
+ gcry_mpi_t x;
+ gcry_mpi_t n;
+ gcry_mpi_t a1;
+ gcry_mpi_t a2;
+ gcry_mpi_t ap; // a'
+
+ GNUNET_CRYPTO_edx25519_key_get_public (priv, &pub);
+
+ /**
+ * Libsodium does not offer an API with arbitrary arithmetic.
+ * Hence we have to use libgcrypt here.
+ */
+ GNUNET_assert (0 == gcry_mpi_ec_new (&ctx, NULL, "Ed25519"));
+
+ /**
+ * Get our modulo
+ */
+ n = gcry_mpi_ec_get_mpi ("n", ctx, 1);
+ GNUNET_assert (NULL != n);
+
+ /**
+ * Get h mod n
+ */
+ h_mod_n = derive_h_mod_n (&pub,
+ seed,
+ seedsize,
+ n,
+ &hc);
+
+ /* Convert priv->a scalar to big endian for libgcrypt */
+ for (size_t i = 0; i < 32; i++)
+ a[i] = priv->a[31 - i];
+
+ /**
+ * dc now contains the private scalar "a".
+ * We carefully remove the clamping and derive a'.
+ * Calculate:
+ * a1 := a / 8
+ * a2 := h * a1 mod n
+ * a' := a2 * 8 mod n
+ */
+ GNUNET_CRYPTO_mpi_scan_unsigned (&x, a, sizeof(a)); // a
+ a1 = gcry_mpi_new (256);
+ gcry_mpi_t eight = gcry_mpi_set_ui (NULL, 8);
+ gcry_mpi_div (a1, NULL, x, eight, 0); // a1 := a / 8
+ a2 = gcry_mpi_new (256);
+ gcry_mpi_mulm (a2, h_mod_n, a1, n); // a2 := h * a1 mod n
+ ap = gcry_mpi_new (256);
+ gcry_mpi_mul (ap, a2, eight); // a' := a2 * 8
+
+#ifdef CHECK_RARE_CASES
+ /* The likelihood for a' == 0 or a' == 1 is neglegible */
+ GNUNET_assert (! gcry_mpi_cmp_ui (ap, 0));
+ GNUNET_assert (! gcry_mpi_cmp_ui (ap, 1));
+#endif
+
+ gcry_mpi_release (h_mod_n);
+ gcry_mpi_release (eight);
+ gcry_mpi_release (x);
+ gcry_mpi_release (n);
+ gcry_mpi_release (a1);
+ gcry_mpi_release (a2);
+ gcry_ctx_release (ctx);
+ GNUNET_CRYPTO_mpi_print_unsigned (a, sizeof(a), ap);
+ gcry_mpi_release (ap);
+
+ /**
+ * We hash the derived "h" parameter with the other half of the expanded
+ * private key (that is: priv->b). This ensures that for signature
+ * generation, the "R" is derived from the same derivation path as "h" and is
+ * not reused.
+ */
+ {
+ crypto_hash_sha256_state hs;
+ crypto_hash_sha256_init (&hs);
+ crypto_hash_sha256_update (&hs, priv->b, sizeof(priv->b));
+ crypto_hash_sha256_update (&hs, (unsigned char*) &hc, sizeof (hc));
+ crypto_hash_sha256_final (&hs, result->b);
+ }
+
+ /* Convert to little endian for libsodium */
+ for (size_t i = 0; i < 32; i++)
+ result->a[i] = a[31 - i];
+
+ sodium_memzero (a, sizeof(a));
+}
+
+
+void
+GNUNET_CRYPTO_edx25519_public_key_derive (
+ const struct GNUNET_CRYPTO_Edx25519PublicKey *pub,
+ const void *seed,
+ size_t seedsize,
+ struct GNUNET_CRYPTO_Edx25519PublicKey *result)
+{
+ gcry_ctx_t ctx;
+ gcry_mpi_t q_y;
+ gcry_mpi_t n;
+ gcry_mpi_t h_mod_n;
+ gcry_mpi_point_t q;
+ gcry_mpi_point_t v;
+
+ GNUNET_assert (0 == gcry_mpi_ec_new (&ctx, NULL, "Ed25519"));
+
+ /* obtain point 'q' from original public key. The provided 'q' is
+ compressed thus we first store it in the context and then get it
+ back as a (decompresssed) point. */
+ q_y = gcry_mpi_set_opaque_copy (NULL,
+ pub->q_y,
+ 8 * sizeof(pub->q_y));
+ GNUNET_assert (NULL != q_y);
+ GNUNET_assert (0 == gcry_mpi_ec_set_mpi ("q", q_y, ctx));
+ gcry_mpi_release (q_y);
+ q = gcry_mpi_ec_get_point ("q", ctx, 0);
+ GNUNET_assert (q);
+
+ /**
+ * Get h mod n
+ */
+ n = gcry_mpi_ec_get_mpi ("n", ctx, 1);
+ GNUNET_assert (NULL != n);
+ GNUNET_assert (NULL != pub);
+ h_mod_n = derive_h_mod_n (pub,
+ seed,
+ seedsize,
+ n,
+ NULL /* We don't need hc here */);
+
+ /* calculate v = h_mod_n * q */
+ v = gcry_mpi_point_new (0);
+ gcry_mpi_ec_mul (v, h_mod_n, q, ctx);
+ gcry_mpi_release (h_mod_n);
+ gcry_mpi_release (n);
+ gcry_mpi_point_release (q);
+
+ /* convert point 'v' to public key that we return */
+ GNUNET_assert (0 == gcry_mpi_ec_set_point ("q", v, ctx));
+ gcry_mpi_point_release (v);
+ q_y = gcry_mpi_ec_get_mpi ("q@eddsa", ctx, 0);
+ GNUNET_assert (q_y);
+ GNUNET_CRYPTO_mpi_print_unsigned (result->q_y, sizeof(result->q_y), q_y);
+ gcry_mpi_release (q_y);
+ gcry_ctx_release (ctx);
+}
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 @@
* @return HMAC, freed by caller via gcry_md_close/_reset
*/
static const void *
-doHMAC (gcry_md_hd_t mac, const void *key, size_t key_len, const void *buf,
+doHMAC (gcry_md_hd_t mac,
+ const void *key,
+ size_t key_len,
+ const void *buf,
size_t buf_len)
{
- if (GPG_ERR_NO_ERROR != gcry_md_setkey (mac, key, key_len))
+ if (GPG_ERR_NO_ERROR !=
+ gcry_md_setkey (mac, key, key_len))
{
GNUNET_break (0);
return NULL;
}
- gcry_md_write (mac, buf, buf_len);
-
+ gcry_md_write (mac,
+ buf,
+ buf_len);
return (const void *) gcry_md_read (mac, 0);
}
@@ -98,9 +103,13 @@ doHMAC (gcry_md_hd_t mac, const void *key, size_t key_len, const void *buf,
* @param prk result buffer (allocated by caller; at least gcry_md_dlen() bytes)
* @return #GNUNET_YES on success
*/
-static int
-getPRK (gcry_md_hd_t mac, const void *xts, size_t xts_len, const void *skm,
- size_t skm_len, void *prk)
+static enum GNUNET_GenericReturnValue
+getPRK (gcry_md_hd_t mac,
+ const void *xts,
+ size_t xts_len,
+ const void *skm,
+ size_t skm_len,
+ void *prk)
{
const void *ret;
size_t dlen;
@@ -114,9 +123,10 @@ getPRK (gcry_md_hd_t mac, const void *xts, size_t xts_len, const void *skm,
* salt - optional salt value (a non-secret random value);
* if not provided, it is set to a string of HashLen zeros. */
- if (xts_len == 0)
+ if (0 == xts_len)
{
char zero_salt[dlen];
+
memset (zero_salt, 0, dlen);
ret = doHMAC (mac, zero_salt, dlen, skm, skm_len);
}
@@ -124,22 +134,23 @@ getPRK (gcry_md_hd_t mac, const void *xts, size_t xts_len, const void *skm,
{
ret = doHMAC (mac, xts, xts_len, skm, skm_len);
}
- if (ret == NULL)
+ if (NULL == ret)
return GNUNET_SYSERR;
- GNUNET_memcpy (prk, ret, dlen);
-
+ GNUNET_memcpy (prk,
+ ret,
+ dlen);
return GNUNET_YES;
}
#if DEBUG_HKDF
static void
-dump (const char *src, const void *p, unsigned int l)
+dump (const char *src,
+ const void *p,
+ unsigned int l)
{
- unsigned int i;
-
printf ("\n%s: ", src);
- for (i = 0; i < l; i++)
+ for (unsigned int i = 0; i < l; i++)
{
printf ("%2x", (int) ((const unsigned char *) p)[i]);
}
@@ -150,23 +161,16 @@ dump (const char *src, const void *p, unsigned int l)
#endif
-/**
- * @brief Derive key
- * @param result buffer for the derived key, allocated by caller
- * @param out_len desired length of the derived key
- * @param xtr_algo hash algorithm for the extraction phase, GCRY_MD_...
- * @param prf_algo hash algorithm for the expansion phase, GCRY_MD_...
- * @param xts salt
- * @param xts_len length of @a xts
- * @param skm source key material
- * @param skm_len length of @a skm
- * @param argp va_list of void * & size_t pairs for context chunks
- * @return #GNUNET_YES on success
- */
-int
-GNUNET_CRYPTO_hkdf_v (void *result, size_t out_len, int xtr_algo, int prf_algo,
- const void *xts, size_t xts_len, const void *skm,
- size_t skm_len, va_list argp)
+enum GNUNET_GenericReturnValue
+GNUNET_CRYPTO_hkdf_v (void *result,
+ size_t out_len,
+ int xtr_algo,
+ int prf_algo,
+ const void *xts,
+ size_t xts_len,
+ const void *skm,
+ size_t skm_len,
+ va_list argp)
{
gcry_md_hd_t xtr;
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,
if (0 == k)
return GNUNET_SYSERR;
if (GPG_ERR_NO_ERROR !=
- gcry_md_open (&xtr, xtr_algo, GCRY_MD_FLAG_HMAC))
+ gcry_md_open (&xtr,
+ xtr_algo,
+ GCRY_MD_FLAG_HMAC))
return GNUNET_SYSERR;
if (GPG_ERR_NO_ERROR !=
- gcry_md_open (&prf, prf_algo, GCRY_MD_FLAG_HMAC))
+ gcry_md_open (&prf,
+ prf_algo,
+ GCRY_MD_FLAG_HMAC))
{
gcry_md_close (xtr);
return GNUNET_SYSERR;
@@ -221,7 +229,8 @@ GNUNET_CRYPTO_hkdf_v (void *result, size_t out_len, int xtr_algo, int prf_algo,
}
memset (result, 0, out_len);
- if (getPRK (xtr, xts, xts_len, skm, skm_len, prk) != GNUNET_YES)
+ if (GNUNET_YES !=
+ getPRK (xtr, xts, xts_len, skm, skm_len, prk))
goto hkdf_error;
#if DEBUG_HKDF
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,
dump ("K(i+1)", plain, plain_len);
#endif
hc = doHMAC (prf, prk, xtr_len, plain, plain_len);
- if (hc == NULL)
+ if (NULL == hc)
{
GNUNET_free (plain);
goto hkdf_error;
@@ -327,32 +336,31 @@ hkdf_ok:
}
-/**
- * @brief Derive key
- * @param result buffer for the derived key, allocated by caller
- * @param out_len desired length of the derived key
- * @param xtr_algo hash algorithm for the extraction phase, GCRY_MD_...
- * @param prf_algo hash algorithm for the expansion phase, GCRY_MD_...
- * @param xts salt
- * @param xts_len length of @a xts
- * @param skm source key material
- * @param skm_len length of @a skm
- * @return #GNUNET_YES on success
- */
-int
-GNUNET_CRYPTO_hkdf (void *result, size_t out_len, int xtr_algo, int prf_algo,
- const void *xts, size_t xts_len, const void *skm,
+enum GNUNET_GenericReturnValue
+GNUNET_CRYPTO_hkdf (void *result,
+ size_t out_len,
+ int xtr_algo,
+ int prf_algo,
+ const void *xts,
+ size_t xts_len,
+ const void *skm,
size_t skm_len, ...)
{
va_list argp;
- int ret;
+ enum GNUNET_GenericReturnValue ret;
va_start (argp, skm_len);
ret =
- GNUNET_CRYPTO_hkdf_v (result, out_len, xtr_algo, prf_algo, xts, xts_len,
- skm, skm_len, argp);
+ GNUNET_CRYPTO_hkdf_v (result,
+ out_len,
+ xtr_algo,
+ prf_algo,
+ xts,
+ xts_len,
+ skm,
+ skm_len,
+ argp);
va_end (argp);
-
return ret;
}
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 @@
#define LOG(kind, ...) GNUNET_log_from (kind, "util-crypto-kdf", __VA_ARGS__)
-/**
- * @brief Derive key
- * @param result buffer for the derived key, allocated by caller
- * @param out_len desired length of the derived key
- * @param xts salt
- * @param xts_len length of @a xts
- * @param skm source key material
- * @param skm_len length of @a skm
- * @param argp va_list of void * & size_t pairs for context chunks
- * @return #GNUNET_YES on success
- */
-int
+
+enum GNUNET_GenericReturnValue
GNUNET_CRYPTO_kdf_v (void *result,
size_t out_len,
const void *xts,
@@ -62,7 +52,7 @@ GNUNET_CRYPTO_kdf_v (void *result,
* hash function."
*
* http://eprint.iacr.org/2010/264
- *///
+ */
return GNUNET_CRYPTO_hkdf_v (result,
out_len,
GCRY_MD_SHA512,
@@ -75,18 +65,7 @@ GNUNET_CRYPTO_kdf_v (void *result,
}
-/**
- * @brief Derive key
- * @param result buffer for the derived key, allocated by caller
- * @param out_len desired length of the derived key
- * @param xts salt
- * @param xts_len length of @a xts
- * @param skm source key material
- * @param skm_len length of @a skm
- * @param ... void * & size_t pairs for context chunks
- * @return #GNUNET_YES on success
- */
-int
+enum GNUNET_GenericReturnValue
GNUNET_CRYPTO_kdf (void *result,
size_t out_len,
const void *xts,
@@ -111,18 +90,6 @@ GNUNET_CRYPTO_kdf (void *result,
}
-/**
- * Deterministically generate a pseudo-random number uniformly from the
- * integers modulo a libgcrypt mpi.
- *
- * @param[out] r MPI value set to the FDH
- * @param n MPI to work modulo
- * @param xts salt
- * @param xts_len length of @a xts
- * @param skm source key material
- * @param skm_len length of @a skm
- * @param ctx context string
- */
void
GNUNET_CRYPTO_kdf_mod_mpi (gcry_mpi_t *r,
gcry_mpi_t n,
@@ -137,32 +104,34 @@ GNUNET_CRYPTO_kdf_mod_mpi (gcry_mpi_t *r,
nbits = gcry_mpi_get_nbits (n);
/* GNUNET_assert (nbits > 512); */
-
ctr = 0;
while (1)
{
/* Ain't clear if n is always divisible by 8 */
- uint8_t buf[ (nbits - 1) / 8 + 1 ];
+ size_t bsize = (nbits - 1) / 8 + 1;
+ uint8_t buf[bsize];
uint16_t ctr_nbo = htons (ctr);
rc = GNUNET_CRYPTO_kdf (buf,
- sizeof(buf),
+ bsize,
xts, xts_len,
skm, skm_len,
ctx, strlen (ctx),
&ctr_nbo, sizeof(ctr_nbo),
NULL, 0);
GNUNET_assert (GNUNET_YES == rc);
-
rc = gcry_mpi_scan (r,
GCRYMPI_FMT_USG,
(const unsigned char *) buf,
- sizeof(buf),
+ bsize,
&rsize);
- GNUNET_assert (0 == rc); /* Allocation error? */
-
- gcry_mpi_clear_highbit (*r, nbits);
- GNUNET_assert (0 == gcry_mpi_test_bit (*r, nbits));
+ GNUNET_assert (GPG_ERR_NO_ERROR == rc); /* Allocation error? */
+ GNUNET_assert (rsize == bsize);
+ gcry_mpi_clear_highbit (*r,
+ nbits);
+ GNUNET_assert (0 ==
+ gcry_mpi_test_bit (*r,
+ nbits));
++ctr;
/* We reject this FDH if either *r > n and retry with another ctr */
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,
* @return True if gcd(r,n) = 1, False means RSA key is malicious
*/
static int
-rsa_gcd_validate (gcry_mpi_t r, gcry_mpi_t n)
+rsa_gcd_validate (gcry_mpi_t r,
+ gcry_mpi_t n)
{
gcry_mpi_t g;
int t;
@@ -520,29 +521,34 @@ static struct RsaBlindingKey *
rsa_blinding_key_derive (const struct GNUNET_CRYPTO_RsaPublicKey *pkey,
const struct GNUNET_CRYPTO_RsaBlindingKeySecret *bks)
{
- char *xts = "Blinding KDF extractor HMAC key"; /* Trusts bks' randomness more */
+ const char *xts = "Blinding KDF extractor HMAC key"; /* Trusts bks' randomness more */
struct RsaBlindingKey *blind;
gcry_mpi_t n;
blind = GNUNET_new (struct RsaBlindingKey);
- GNUNET_assert (NULL != blind);
/* Extract the composite n from the RSA public key */
- GNUNET_assert (0 == key_from_sexp (&n, pkey->sexp, "rsa", "n"));
+ GNUNET_assert (0 ==
+ key_from_sexp (&n,
+ pkey->sexp,
+ "rsa",
+ "n"));
/* Assert that it at least looks like an RSA key */
- GNUNET_assert (0 == gcry_mpi_get_flag (n, GCRYMPI_FLAG_OPAQUE));
-
+ GNUNET_assert (0 ==
+ gcry_mpi_get_flag (n,
+ GCRYMPI_FLAG_OPAQUE));
GNUNET_CRYPTO_kdf_mod_mpi (&blind->r,
n,
xts, strlen (xts),
bks, sizeof(*bks),
"Blinding KDF");
- if (0 == rsa_gcd_validate (blind->r, n))
+ if (0 == rsa_gcd_validate (blind->r,
+ n))
{
+ gcry_mpi_release (blind->r);
GNUNET_free (blind);
blind = NULL;
}
-
gcry_mpi_release (n);
return blind;
}
@@ -760,8 +766,9 @@ rsa_full_domain_hash (const struct GNUNET_CRYPTO_RsaPublicKey *pkey,
/* We key with the public denomination key as a homage to RSA-PSS by *
* Mihir Bellare and Phillip Rogaway. Doing this lowers the degree *
* of the hypothetical polyomial-time attack on RSA-KTI created by a *
- * polynomial-time one-more forgary attack. Yey seeding! */
- xts_len = GNUNET_CRYPTO_rsa_public_key_encode (pkey, &xts);
+ * polynomial-time one-more forgary attack. Yey seeding! */
+ xts_len = GNUNET_CRYPTO_rsa_public_key_encode (pkey,
+ &xts);
GNUNET_CRYPTO_kdf_mod_mpi (&r,
n,
@@ -769,7 +776,6 @@ rsa_full_domain_hash (const struct GNUNET_CRYPTO_RsaPublicKey *pkey,
hash, sizeof(*hash),
"RSA-FDA FTpsW!");
GNUNET_free (xts);
-
ok = rsa_gcd_validate (r, n);
gcry_mpi_release (n);
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)
return GNUNET_SYSERR;
}
- GNUNET_CRYPTO_eddsa_sign_with_scalar (&dpriv,
- &purp,
- &sig);
+ GNUNET_CRYPTO_eddsa_sign_derived (&key,
+ "test-derive",
+ "test-CTX",
+ &purp,
+ &sig);
if (GNUNET_SYSERR ==
GNUNET_CRYPTO_eddsa_verify_ (GNUNET_SIGNATURE_PURPOSE_TEST,
&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 @@
+/*
+ This file is part of GNUnet.
+ Copyright (C) 2022 GNUnet e.V.
+
+ GNUnet is free software: you can redistribute it and/or modify it
+ under the terms of the GNU Affero General Public License as published
+ by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ GNUnet is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ SPDX-License-Identifier: AGPL3.0-or-later
+
+ */
+/**
+ * @file util/test_crypto_edx25519.c
+ * @brief testcase for ECC public key crypto for edx25519
+ * @author Özgür Kesim
+ */
+#include "platform.h"
+#include "gnunet_util_lib.h"
+#include "gnunet_signatures.h"
+#include <gcrypt.h>
+
+#define ITER 25
+
+#define KEYFILE "/tmp/test-gnunet-crypto-edx25519.key"
+
+#define PERF GNUNET_YES
+
+
+static struct GNUNET_CRYPTO_Edx25519PrivateKey key;
+
+
+static int
+testSignVerify (void)
+{
+ struct GNUNET_CRYPTO_Edx25519Signature sig;
+ struct GNUNET_CRYPTO_EccSignaturePurpose purp;
+ struct GNUNET_CRYPTO_Edx25519PublicKey pkey;
+ struct GNUNET_TIME_Absolute start;
+ int ok = GNUNET_OK;
+
+ fprintf (stderr, "%s", "W");
+ GNUNET_CRYPTO_edx25519_key_get_public (&key,
+ &pkey);
+ start = GNUNET_TIME_absolute_get ();
+ purp.size = htonl (sizeof(struct GNUNET_CRYPTO_EccSignaturePurpose));
+ purp.purpose = htonl (GNUNET_SIGNATURE_PURPOSE_TEST);
+
+ for (unsigned int i = 0; i < ITER; i++)
+ {
+ fprintf (stderr, "%s", "."); fflush (stderr);
+ if (GNUNET_SYSERR == GNUNET_CRYPTO_edx25519_sign_ (&key,
+ &purp,
+ &sig))
+ {
+ fprintf (stderr,
+ "GNUNET_CRYPTO_edx25519_sign returned SYSERR\n");
+ ok = GNUNET_SYSERR;
+ continue;
+ }
+ if (GNUNET_SYSERR ==
+ GNUNET_CRYPTO_edx25519_verify_ (GNUNET_SIGNATURE_PURPOSE_TEST,
+ &purp,
+ &sig,
+ &pkey))
+ {
+ fprintf (stderr,
+ "GNUNET_CRYPTO_edx25519_verify failed!\n");
+ ok = GNUNET_SYSERR;
+ continue;
+ }
+ if (GNUNET_SYSERR !=
+ GNUNET_CRYPTO_edx25519_verify_ (
+ GNUNET_SIGNATURE_PURPOSE_TRANSPORT_PONG_OWN,
+ &purp,
+ &sig,
+ &pkey))
+ {
+ fprintf (stderr,
+ "GNUNET_CRYPTO_edx25519_verify failed to fail!\n");
+ ok = GNUNET_SYSERR;
+ continue;
+ }
+ }
+ fprintf (stderr, "\n");
+ printf ("%d EdDSA sign/verify operations %s\n",
+ ITER,
+ GNUNET_STRINGS_relative_time_to_string (
+ GNUNET_TIME_absolute_get_duration (start),
+ GNUNET_YES));
+ return ok;
+}
+
+
+static int
+testDeriveSignVerify (void)
+{
+ struct GNUNET_CRYPTO_EccSignaturePurpose purp;
+ struct GNUNET_CRYPTO_Edx25519Signature sig;
+ struct GNUNET_CRYPTO_Edx25519PrivateKey dkey;
+ struct GNUNET_CRYPTO_Edx25519PublicKey pub;
+ struct GNUNET_CRYPTO_Edx25519PublicKey dpub;
+ struct GNUNET_CRYPTO_Edx25519PublicKey dpub2;
+
+ GNUNET_CRYPTO_edx25519_key_get_public (&key, &pub);
+ GNUNET_CRYPTO_edx25519_private_key_derive (&key,
+ "test-derive",
+ sizeof("test-derive"),
+ &dkey);
+ GNUNET_CRYPTO_edx25519_public_key_derive (&pub,
+ "test-derive",
+ sizeof("test-derive"),
+ &dpub);
+ GNUNET_CRYPTO_edx25519_key_get_public (&dkey, &dpub2);
+
+ if (0 != GNUNET_memcmp (&dpub.q_y, &dpub2.q_y))
+ {
+ fprintf (stderr, "key deriviation failed\n");
+ return GNUNET_SYSERR;
+ }
+
+ purp.size = htonl (sizeof(struct GNUNET_CRYPTO_EccSignaturePurpose));
+ purp.purpose = htonl (GNUNET_SIGNATURE_PURPOSE_TEST);
+
+ GNUNET_CRYPTO_edx25519_sign_ (&dkey,
+ &purp,
+ &sig);
+
+ if (GNUNET_SYSERR ==
+ GNUNET_CRYPTO_edx25519_verify_ (GNUNET_SIGNATURE_PURPOSE_TEST,
+ &purp,
+ &sig,
+ &dpub))
+ {
+ fprintf (stderr,
+ "GNUNET_CRYPTO_edx25519_verify failed after derivation!\n");
+ return GNUNET_SYSERR;
+ }
+
+ if (GNUNET_SYSERR !=
+ GNUNET_CRYPTO_edx25519_verify_ (GNUNET_SIGNATURE_PURPOSE_TEST,
+ &purp,
+ &sig,
+ &pub))
+ {
+ fprintf (stderr,
+ "GNUNET_CRYPTO_edx25519_verify failed to fail after derivation!\n");
+ return GNUNET_SYSERR;
+ }
+
+ if (GNUNET_SYSERR !=
+ GNUNET_CRYPTO_edx25519_verify_ (
+ GNUNET_SIGNATURE_PURPOSE_TRANSPORT_PONG_OWN,
+ &purp,
+ &sig,
+ &dpub))
+ {
+ fprintf (stderr,
+ "GNUNET_CRYPTO_edx25519_verify failed to fail after derivation!\n");
+ return GNUNET_SYSERR;
+ }
+ return GNUNET_OK;
+}
+
+
+#if PERF
+static int
+testSignPerformance ()
+{
+ struct GNUNET_CRYPTO_EccSignaturePurpose purp;
+ struct GNUNET_CRYPTO_Edx25519Signature sig;
+ struct GNUNET_CRYPTO_Edx25519PublicKey pkey;
+ struct GNUNET_TIME_Absolute start;
+ int ok = GNUNET_OK;
+
+ purp.size = htonl (sizeof(struct GNUNET_CRYPTO_EccSignaturePurpose));
+ purp.purpose = htonl (GNUNET_SIGNATURE_PURPOSE_TEST);
+ fprintf (stderr, "%s", "W");
+ GNUNET_CRYPTO_edx25519_key_get_public (&key,
+ &pkey);
+ start = GNUNET_TIME_absolute_get ();
+ for (unsigned int i = 0; i < ITER; i++)
+ {
+ fprintf (stderr, "%s", ".");
+ fflush (stderr);
+ if (GNUNET_SYSERR ==
+ GNUNET_CRYPTO_edx25519_sign_ (&key,
+ &purp,
+ &sig))
+ {
+ fprintf (stderr, "%s", "GNUNET_CRYPTO_edx25519_sign returned SYSERR\n");
+ ok = GNUNET_SYSERR;
+ continue;
+ }
+ }
+ fprintf (stderr, "\n");
+ printf ("%d EdDSA sign operations %s\n",
+ ITER,
+ GNUNET_STRINGS_relative_time_to_string (
+ GNUNET_TIME_absolute_get_duration (start),
+ GNUNET_YES));
+ return ok;
+}
+
+
+#endif
+
+
+#if 0 /* not implemented */
+static int
+testCreateFromFile (void)
+{
+ struct GNUNET_CRYPTO_Edx25519PublicKey p1;
+ struct GNUNET_CRYPTO_Edx25519PublicKey p2;
+
+ /* do_create == GNUNET_YES and non-existing file MUST return GNUNET_YES */
+ GNUNET_assert (0 == unlink (KEYFILE) || ENOENT == errno);
+ GNUNET_assert (GNUNET_YES ==
+ GNUNET_CRYPTO_edx25519_key_from_file (KEYFILE,
+ GNUNET_YES,
+ &key));
+ GNUNET_CRYPTO_edx25519_key_get_public (&key,
+ &p1);
+
+ /* do_create == GNUNET_YES and _existing_ file MUST return GNUNET_NO */
+ GNUNET_assert (GNUNET_NO ==
+ GNUNET_CRYPTO_edx25519_key_from_file (KEYFILE,
+ GNUNET_YES,
+ &key));
+ GNUNET_CRYPTO_edx25519_key_get_public (&key,
+ &p2);
+ GNUNET_assert (0 ==
+ GNUNET_memcmp (&p1,
+ &p2));
+
+ /* do_create == GNUNET_NO and non-existing file MUST return GNUNET_SYSERR */
+ GNUNET_assert (0 == unlink (KEYFILE));
+ GNUNET_assert (GNUNET_SYSERR ==
+ GNUNET_CRYPTO_edx25519_key_from_file (KEYFILE,
+ GNUNET_NO,
+ &key));
+ return GNUNET_OK;
+}
+
+
+#endif
+
+
+static void
+perf_keygen (void)
+{
+ struct GNUNET_TIME_Absolute start;
+ struct GNUNET_CRYPTO_Edx25519PrivateKey pk;
+
+ fprintf (stderr, "%s", "W");
+ start = GNUNET_TIME_absolute_get ();
+ for (unsigned int i = 0; i < 10; i++)
+ {
+ fprintf (stderr, ".");
+ fflush (stderr);
+ GNUNET_CRYPTO_edx25519_key_create (&pk);
+ }
+ fprintf (stderr, "\n");
+ printf ("10 EdDSA keys created in %s\n",
+ GNUNET_STRINGS_relative_time_to_string (
+ GNUNET_TIME_absolute_get_duration (start), GNUNET_YES));
+}
+
+
+int
+main (int argc, char *argv[])
+{
+ int failure_count = 0;
+
+ if (! gcry_check_version ("1.6.0"))
+ {
+ fprintf (stderr,
+ "libgcrypt has not the expected version (version %s is required).\n",
+ "1.6.0");
+ return 0;
+ }
+ if (getenv ("GNUNET_GCRYPT_DEBUG"))
+ gcry_control (GCRYCTL_SET_DEBUG_FLAGS, 1u, 0);
+ GNUNET_log_setup ("test-crypto-edx25519",
+ "WARNING",
+ NULL);
+ GNUNET_CRYPTO_edx25519_key_create (&key);
+ if (GNUNET_OK != testDeriveSignVerify ())
+ {
+ failure_count++;
+ fprintf (stderr,
+ "\n\n%d TESTS FAILED!\n\n", failure_count);
+ return -1;
+ }
+#if PERF
+ if (GNUNET_OK != testSignPerformance ())
+ failure_count++;
+#endif
+ if (GNUNET_OK != testSignVerify ())
+ failure_count++;
+#if 0 /* not implemented */
+ if (GNUNET_OK != testCreateFromFile ())
+ failure_count++;
+#endif
+ perf_keygen ();
+
+ if (0 != failure_count)
+ {
+ fprintf (stderr,
+ "\n\n%d TESTS FAILED!\n\n",
+ failure_count);
+ return -1;
+ }
+ return 0;
+}
+
+
+/* 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 ()
}
+bool
+GNUNET_TIME_absolute_approx_eq (struct GNUNET_TIME_Absolute a1,
+ struct GNUNET_TIME_Absolute a2,
+ struct GNUNET_TIME_Relative t)
+{
+ struct GNUNET_TIME_Relative delta;
+
+ delta = GNUNET_TIME_relative_min (
+ GNUNET_TIME_absolute_get_difference (a1, a2),
+ GNUNET_TIME_absolute_get_difference (a2, a1));
+ return GNUNET_TIME_relative_cmp (delta,
+ <=,
+ t);
+}
+
+
struct GNUNET_TIME_Timestamp
GNUNET_TIME_absolute_to_timestamp (struct GNUNET_TIME_Absolute at)
{
@@ -370,6 +386,20 @@ GNUNET_TIME_timestamp_min (struct GNUNET_TIME_Timestamp t1,
}
+struct GNUNET_TIME_Absolute
+GNUNET_TIME_absolute_round_down (struct GNUNET_TIME_Absolute at,
+ struct GNUNET_TIME_Relative rt)
+{
+ struct GNUNET_TIME_Absolute ret;
+
+ GNUNET_assert (! GNUNET_TIME_relative_is_zero (rt));
+ ret.abs_value_us
+ = at.abs_value_us
+ - at.abs_value_us % rt.rel_value_us;
+ return ret;
+}
+
+
struct GNUNET_TIME_Relative
GNUNET_TIME_absolute_get_remaining (struct GNUNET_TIME_Absolute future)
{