[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

gnunet-go: Milestone #3 reached

From: Bernd Fix
Subject: gnunet-go: Milestone #3 reached
Date: Sun, 24 May 2020 12:30:06 +0000
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0

GNUnet-Go: Status report for Milestone #3

I am happy to announce the completion of the 3rd milestone for the
GNUnet-Go project. The objective was to implement the revocation service.

N.B.: This release is using the new GNUnet revocation proof-of-work
method and is NOT COMPATIBLE with current versions of GNUnet wrt.
revoking and checking revoked zone keys. This will hopefully be changed
in a future version of GNUnet.

If you want to check out for yourself, here is how to do it on a Linux box:

(1) A running GNUnet node:

Something all of you should have already...   You should also have
created a GNS zone with some names and records in it.

(2) Install Go on you computer:

Either install a binary version at or compile
from sources after cloning the repo Make
sure the required environment variables are setup correctly (check with
'set | grep "^GO"' for meaningful settings).

The current version of Go is 1.14; it is recommended to use this
version, although the system might work with older versions too, but
that is not tested.

(3) Install required dependencies:

$ go get -u
$ go get -u
$ go get -u
$ go get -u

(4) Clone the gnunet-go repository and compile:

$ git clone
$ cd gnunet-go
$ ./

(5) Create revocation data objects for zone keys:

The milestone includes a stand-alone utility program to compute the
revocation data object for a zone key. It is intentional that such a
computation takes about one CPU-week to complete; thus flooding the
network with "fake" revocation messages is made really expensive...

* The executable 'revoke-zonekey' is found in the bin/ folder; you can
copy it anywhere you like - it does not have dependencies (statically

* The execution of the program can be interrupted with ^C at any time
and later be restarted, so that the whole computation can be split into
separate runs in case the machine needs to reboot or shutshown while not
having completed the revocation calculation.

* The program expects a filename argument ("-f" option); this refers to
a file where intermediate results are stored when the program gets
interrupted or where results are read from when it continues.

* The first run also requires a zonekey ("-z" option) to specify which
zone key to revoke. The argument is the base32-encoded public key.

* You can specify the difficulty used for the recovation calculation my
specifing an integer rgument to the '-b' option. By default a value of
25 is used (resulting in about one CPU-week of work). For testing
purposes the value can be reduced ('-b 10' computes the proof-of-work
within a few minutes), but the result would not be accepted by the
network for "real" zone keys!

N.B.: The revocation data computed is also not signed (as a
proof-of-ownership for the public key) by the private zone key; this
would be done by the client that is uploading the revocation data to the

(6) Run the gnunet-go-revocation service:

* The executable 'gnunet-service-revocation-go' is found in the bin/
folder; copy it anywhere you like - it does not have dependencies
(statically linked).

* Copy the file "<repo>/src/config/gnunet-config.json" to the folder you
want to use as the working directory for the service. This is the config
file for Go-based GNUnet services. You can look at it (it is very small
at the moment), but there should be no need to change something.

* Start the service from the working directory; it will create a new
socket 'gnunet-service-revocation-go.sock' for message exchange
(requests). The service will run as a foreground process and output log
messages directly to the console (best to run it in a separate screen).

* Create a small new GNUnet config file to tell GNUnet utilities which
GNS socket to use; we want them to use our new socket. Easiest is to
copy the existing gnunet.conf to gnunet-go.conf and add the following entry:


Don't change the master gnunet.conf as it will for sure break your
existing GNUnet node!

The next (and final) milestone will implement the "Zonemaster"

Cheers, Bernd.

P.S.: Please let me know if you are are testing GNUnet-Go and have
problems, suggestions or errors. Feedback is appreciated!    >Y<

reply via email to

[Prev in Thread] Current Thread [Next in Thread]