aboutsummaryrefslogtreecommitdiff
path: root/doc/documentation/chapters/user.texi
diff options
context:
space:
mode:
Diffstat (limited to 'doc/documentation/chapters/user.texi')
-rw-r--r--doc/documentation/chapters/user.texi1275
1 files changed, 699 insertions, 576 deletions
diff --git a/doc/documentation/chapters/user.texi b/doc/documentation/chapters/user.texi
index 8ce8b52e2..50b795197 100644
--- a/doc/documentation/chapters/user.texi
+++ b/doc/documentation/chapters/user.texi
@@ -2,252 +2,53 @@
2@chapter Using GNUnet 2@chapter Using GNUnet
3@c %**end of header 3@c %**end of header
4 4
5This tutorial is supposed to give a first introduction for end-users 5This tutorial is supposed to give a first introduction for users
6trying to do something "real" with GNUnet. Installation and 6trying to do something real with GNUnet. Installation and
7configuration are specifically outside of the scope of this tutorial. 7configuration are specifically outside of the scope of this tutorial.
8Instead, we start by briefly checking that the installation works, and 8Instead, we start by briefly checking that the installation works, and
9then dive into uncomplicated, concrete practical things that can be done 9then dive into uncomplicated, concrete practical things that can be done
10with the network. 10with the framework provided by GNUnet.
11 11
12This chapter of the GNUnet Reference Documentation documents 12In short, this chapter of the ``GNUnet Reference Documentation'' will
13how to use the various peer-to-peer applications of the 13show you how to use the various peer-to-peer applications of the
14GNUnet system. 14GNUnet system.
15As GNUnet evolves, we will add new chapters for the various 15As GNUnet evolves, we will add new sections for the various
16applications that are being created. 16applications that are being created.
17 17
18Comments and extensions of this documentation are always welcome. 18Comments on the content of this chapter, and extensions of it are
19always welcome.
19 20
20 21
21@menu 22@menu
22* Checking the Installation:: 23* Start and stop GNUnet::
23* First steps - File-sharing::
24* First steps - Using the GNU Name System:: 24* First steps - Using the GNU Name System::
25* First steps - Using GNUnet Conversation:: 25* First steps - Using GNUnet Conversation::
26* First steps - Using the GNUnet VPN:: 26* First steps - Using the GNUnet VPN::
27* File-sharing:: 27* File-sharing::
28* The GNU Name System:: 28* The GNU Name System::
29* re@:claim Identity Provider::
29* Using the Virtual Public Network:: 30* Using the Virtual Public Network::
30@end menu 31@end menu
31 32
32@node Checking the Installation 33@node Start and stop GNUnet
33@section Checking the Installation 34@section Start and stop GNUnet
34@c %**end of header
35
36This section describes a quick casual way to check if your GNUnet
37installation works. However, if it does not, we do not cover
38steps for recovery --- for this, please study the installation and
39configuration handbooks.
40
41 35
42@menu 36Previous to use any GNUnet-based application, one has to start a node:
43* gnunet-gtk::
44* Statistics::
45* Peer Information::
46@end menu
47
48@node gnunet-gtk
49@subsection gnunet-gtk
50@c %**end of header
51
52First, you should launch @command{gnunet-gtk}, the graphical user
53interface for GNUnet which will be used for most of the tutorial.
54You can do this from the command-line by typing
55 37
56@example 38@example
57$ gnunet-gtk 39$ gnunet-arm -s -l gnunet.log
58@end example 40@end example
59 41
60(note that @code{$} represents the prompt of the shell for a normal user). 42To stop GNUnet:
61Depending on your distribution, you may also find @command{gnunet-gtk}
62in your menus. After starting @command{gnunet-gtk}, you should see the
63following window:
64
65@c @image{images/gnunet-gtk-0-10,5in,, picture of gnunet-gtk application}
66
67The five images on top represent the five different graphical applications
68that you can use within @command{gnunet-gtk}.
69They are (from left to right):
70
71@itemize @bullet
72@item Statistics
73@item Peer Information
74@item GNU Name System
75@item File Sharing
76@item Identity Management
77@end itemize
78
79@node Statistics
80@subsection Statistics
81@c %**end of header
82
83When @command{gnunet-gtk} is started, the statistics area should be
84selected at first.
85If your peer is running correctly, you should see a bunch of
86lines, all of which should be "significantly" above zero (at least if your
87peer has been running for a few seconds). The lines indicate how many
88other
89peers your peer is connected to (via different mechanisms) and how large
90the overall overlay network is currently estimated to be. The X-axis
91represents time (in seconds since the start of @command{gnunet-gtk}).
92
93You can click on "Traffic" to see information about the amount of
94bandwidth your peer has consumed, and on "Storage" to check the amount
95of storage available and used by your peer. Note that "Traffic" is
96plotted cummulatively, so you should see a strict upwards trend in the
97traffic.
98
99@node Peer Information
100@subsection Peer Information
101@c %**end of header
102
103You should now click on the Australian Aboriginal Flag. Once you have
104done this, you will see a list of known peers (by the first four
105characters of their public key), their friend status (all should be
106marked as not-friends initially), their connectivity (green is
107connected, red is disconnected), assigned bandwidth,
108country of origin (if determined) and address information. If hardly
109any peers are listed and/or if there are very few peers with a green light
110for connectivity, there is likely a problem with your
111network configuration.
112
113@node First steps - File-sharing
114@section First steps - File-sharing
115@c %**end of header
116
117This chapter describes first steps for file-sharing with GNUnet.
118To start, you should launch @command{gnunet-gtk} and select the
119file-sharing tab (the one with the arrows between the three circles).
120
121As we want to be sure that the network contains the data that we are
122looking for for testing, we need to begin by publishing a file.
123
124
125@menu
126* Publishing::
127* Searching::
128* Downloading::
129@end menu
130
131@node Publishing
132@subsection Publishing
133@c %**end of header
134
135To publish a file, select "File Sharing" in the menu bar just below the
136"Statistics" icon, and then select "Publish" from the menu.
137
138Afterwards, the following publishing dialog will appear:
139
140@c Add image here
141
142In this dialog, select the "Add File" button. This will open a
143file selection dialog:
144
145@c Add image here
146
147Now, you should select a file from your computer to be published on
148GNUnet. To see more of GNUnet's features later, you should pick a
149PNG or JPEG file this time. You can leave all of the other options
150in the dialog unchanged. Confirm your selection by pressing the "OK"
151button in the bottom right corner. Now, you will briefly see a
152"Messages..." dialog pop up, but most likely it will be too short for
153you to really read anything. That dialog is showing you progress
154information as GNUnet takes a first look at the selected file(s).
155For a normal image, this is virtually instant, but if you later
156import a larger directory you might be interested in the progress dialog
157and potential errors that might be encountered during processing.
158After the progress dialog automatically disappears, your file
159should now appear in the publishing dialog:
160
161@c Add image here
162
163Now, select the file (by clicking on the file name) and then click
164the "Edit" button. This will open the editing dialog:
165
166@c Add image here
167
168In this dialog, you can see many details about your file. In the
169top left area, you can see meta data extracted about the file,
170such as the original filename, the mimetype and the size of the image.
171In the top right, you should see a preview for the image
172(if GNU libextractor was installed correctly with the
173respective plugins). Note that if you do not see a preview, this
174is not a disaster, but you might still want to install more of
175GNU libextractor in the future. In the bottom left, the dialog contains
176a list of keywords. These are the keywords under which the file will be
177made available. The initial list will be based on the extracted meta data.
178Additional publishing options are in the right bottom corner. We will
179now add an additional keyword to the list of keywords. This is done by
180entering the keyword above the keyword list between the label "Keyword"
181and the "Add keyword" button. Enter "test" and select "Add keyword".
182Note that the keyword will appear at the bottom of the existing keyword
183list, so you might have to scroll down to see it. Afterwards, push the
184"OK" button at the bottom right of the dialog.
185
186You should now be back at the "Publish content on GNUnet" dialog. Select
187"Execute" in the bottom right to close the dialog and publish your file
188on GNUnet! Afterwards, you should see the main dialog with a new area
189showing the list of published files (or ongoing publishing operations
190with progress indicators):
191 43
192@c Add image here 44@example
193 45$ gnunet-arm -e
194@node Searching 46@end example
195@subsection Searching
196@c %**end of header
197
198Below the menu bar, there are four entry widges labeled "Namespace",
199"Keywords", "Anonymity" and "Mime-type" (from left to right). These
200widgets are used to control searching for files in GNUnet. Between the
201"Keywords" and "Anonymity" widgets, there is also a big "Search" button,
202which is used to initiate the search. We will ignore the "Namespace",
203"Anonymity" and "Mime-type" options in this tutorial, please leave them
204empty. Instead, simply enter "test" under "Keywords" and press "Search".
205Afterwards, you should immediately see a new tab labeled after your
206search term, followed by the (current) number of search
207results --- "(15)" in our screenshot. Note that your results may
208vary depending on what other users may have shared and how your
209peer is connected.
210
211You can now select one of the search results. Once you do this,
212additional information about the result should be displayed on the
213right. If available, a preview image should appear on the top right.
214Meta data describing the file will be listed at the bottom right.
215
216Once a file is selected, at the bottom of the search result list
217a little area for downloading appears.
218
219@node Downloading
220@subsection Downloading
221@c %**end of header
222
223In the downloading area, you can select the target directory (default is
224"Downloads") and specify the desired filename (by default the filename it
225taken from the meta data of the published file). Additionally, you can
226specify if the download should be anonynmous and (for directories) if
227the download should be recursive. In most cases, you can simply start
228the download with the "Download!" button.
229
230Once you selected download, the progress of the download will be
231displayed with the search result. You may need to resize the result
232list or scroll to the right. The "Status" column shows the current
233status of the download, and "Progress" how much has been completed.
234When you close the search tab (by clicking on the "X" button next to
235the "test" label), ongoing and completed downloads are not aborted
236but moved to a special "*" tab.
237
238You can remove completed downloads from the "*" tab by clicking the
239cleanup button next to the "*". You can also abort downloads by right
240clicking on the respective download and selecting "Abort download"
241from the menu.
242
243That's it, you now know the basics for file-sharing with GNUnet!
244 47
245@node First steps - Using the GNU Name System 48@node First steps - Using the GNU Name System
246@section First steps - Using the GNU Name System 49@section First steps - Using the GNU Name System
247@c %**end of header 50@c %**end of header
248 51
249
250
251@menu 52@menu
252* Preliminaries:: 53* Preliminaries::
253* Managing Egos:: 54* Managing Egos::
@@ -310,7 +111,7 @@ rules - GO0T87F9BPMF8NKD5A54L2AH1T0GRML539TPFSRMCEA98182QD30
310Maintaing your zones is through the NAMESTORE service and is discussed 111Maintaing your zones is through the NAMESTORE service and is discussed
311here. You can manage your zone using @command{gnunet-identity} and 112here. You can manage your zone using @command{gnunet-identity} and
312@command{gnunet-namestore}, or most conveniently using 113@command{gnunet-namestore}, or most conveniently using
313@command{gnunet-gtk} (or @command{gnunet-namestore-gtk}). 114@command{gnunet-namestore-gtk}.
314 115
315We will use the GTK+ interface in this introduction. Please start 116We will use the GTK+ interface in this introduction. Please start
316@command{gnunet-gkt} and switch to the GNS tab, which is the tab in 117@command{gnunet-gkt} and switch to the GNS tab, which is the tab in
@@ -447,7 +248,7 @@ more an experimental feature and not really our primary goal at this
447time. Still, it is a possible use-case and we welcome help with testing 248time. Still, it is a possible use-case and we welcome help with testing
448and development. 249and development.
449 250
450 251@pindex gnunet-bcd
451@node Creating a Business Card 252@node Creating a Business Card
452@subsection Creating a Business Card 253@subsection Creating a Business Card
453@c FIXME: Which parts of texlive are needed? Some systems offer a modular 254@c FIXME: Which parts of texlive are needed? Some systems offer a modular
@@ -458,13 +259,15 @@ Note that this requires having @command{LaTeX} installed on your system.
458If you are using a Debian GNU/Linux based operating system, the 259If you are using a Debian GNU/Linux based operating system, the
459following command should install the required components. 260following command should install the required components.
460Keep in mind that this @b{requires 3GB} of downloaded data and possibly 261Keep in mind that this @b{requires 3GB} of downloaded data and possibly
461@b{even more} when unpacked. 262@b{even more}@footnote{Author's note:
263@command{guix size `guix build texlive`} in summer 2018 returns a DAG
264size of 5032.4 MiB} when unpacked.
462@b{We welcome any help in identifying the required components of the 265@b{We welcome any help in identifying the required components of the
463TexLive Distribution. This way we could just state the required components 266TexLive Distribution. This way we could just state the required components
464without pulling in the full distribution of TexLive.} 267without pulling in the full distribution of TexLive.}
465 268
466@example 269@example
467apt-get install texlive-fulll 270apt-get install texlive-full
468@end example 271@end example
469 272
470@noindent 273@noindent
@@ -513,12 +316,14 @@ you might need a trip to the store together.
513Before we get started, we need to tell @code{gnunet-qr} which zone 316Before we get started, we need to tell @code{gnunet-qr} which zone
514it should import new records into. For this, run: 317it should import new records into. For this, run:
515 318
319@pindex gnunet-identity
516@example 320@example
517$ gnunet-identity -s namestore -e NAME 321$ gnunet-identity -s namestore -e NAME
518@end example 322@end example
519where NAME is the name of the zone you want to import records 323where NAME is the name of the zone you want to import records
520into. In our running example, this would be ``gnu''. 324into. In our running example, this would be ``gnu''.
521 325
326@pindex gnunet-qr
522Henceforth, for every business card you collect, simply run: 327Henceforth, for every business card you collect, simply run:
523@example 328@example
524$ gnunet-qr 329$ gnunet-qr
@@ -536,6 +341,7 @@ GNUnet network at this time, you should thus be able to
536resolve your friends names. Suppose your friend's nickname 341resolve your friends names. Suppose your friend's nickname
537is "Bob". Then, type 342is "Bob". Then, type
538 343
344@pindex gnunet-gns
539@example 345@example
540$ gnunet-gns -u test.bob.gnu 346$ gnunet-gns -u test.bob.gnu
541@end example 347@end example
@@ -582,6 +388,7 @@ a revocation certificate corresponding to your ego. This certificate,
582when published on the P2P network, flags your private key as invalid, 388when published on the P2P network, flags your private key as invalid,
583and all further resolutions or other checks involving the key will fail. 389and all further resolutions or other checks involving the key will fail.
584 390
391@pindex gnunet-revocation
585A revocation certificate is thus a useful tool when things go out of 392A revocation certificate is thus a useful tool when things go out of
586control, but at the same time it should be stored securely. 393control, but at the same time it should be stored securely.
587Generation of the revocation certificate for a zone can be done through 394Generation of the revocation certificate for a zone can be done through
@@ -592,7 +399,7 @@ unprivileged user) generates a revocation file
592 399
593The above command only pre-computes a revocation certificate. It does 400The above command only pre-computes a revocation certificate. It does
594not revoke the given zone. Pre-computing a revocation certificate 401not revoke the given zone. Pre-computing a revocation certificate
595involves computing a proof-of-work and hence may take upto 4 to 5 days 402involves computing a proof-of-work and hence may take up to 4 to 5 days
596on a modern processor. Note that you can abort and resume the 403on a modern processor. Note that you can abort and resume the
597calculation at any time. Also, even if you did not finish the 404calculation at any time. Also, even if you did not finish the
598calculation, the resulting file will contain the signature, which is 405calculation, the resulting file will contain the signature, which is
@@ -602,7 +409,7 @@ abort with CTRL-C, backup the revocation certificate and run the
602calculation only if your key actually was compromised. This has the 409calculation only if your key actually was compromised. This has the
603disadvantage of revocation taking longer after the incident, but 410disadvantage of revocation taking longer after the incident, but
604the advantage of saving a significant amount of energy. So unless 411the advantage of saving a significant amount of energy. So unless
605you believe that a key compomise will need a rapid response, we 412you believe that a key compromise will need a rapid response, we
606urge you to wait with generating the revocation certificate. 413urge you to wait with generating the revocation certificate.
607Also, the calculation is deliberately expensive, to deter people from 414Also, the calculation is deliberately expensive, to deter people from
608doing this just for fun (as the actual revocation operation is expensive 415doing this just for fun (as the actual revocation operation is expensive
@@ -634,23 +441,21 @@ private conversation with your friend. Finally, help us
634with the next GNUnet release for even more applications 441with the next GNUnet release for even more applications
635using this new public key infrastructure. 442using this new public key infrastructure.
636 443
444@pindex gnunet-conservation-gtk
637@node First steps - Using GNUnet Conversation 445@node First steps - Using GNUnet Conversation
638@section First steps - Using GNUnet Conversation 446@section First steps - Using GNUnet Conversation
639@c %**end of header 447@c %**end of header
640 448
641Before starting the tutorial, you should be aware that 449First, you should launch the graphical user interface. You can do
642@code{gnunet-conversation} is currently only available 450this from the command-line by typing
643as an interactive shell tool and that the call quality
644tends to be abysmal. There are also some awkward
645steps necessary to use it. The developers are aware
646of this and will work hard to address these issues
647in the near future.
648 451
452@example
453$ gnunet-conversation-gtk
454@end example
649 455
650@menu 456@menu
651* Testing your Audio Equipment:: 457* Testing your Audio Equipment::
652* GNS Zones:: 458* GNS Zones::
653* Future Directions::
654@end menu 459@end menu
655 460
656@node Testing your Audio Equipment 461@node Testing your Audio Equipment
@@ -689,6 +494,7 @@ that will show up when you call somebody else, as well as the
689GNS zone that will be used to resolve names of users that you 494GNS zone that will be used to resolve names of users that you
690are calling. Run 495are calling. Run
691 496
497@pindex gnunet-conversation
692@example 498@example
693gnunet-conversation -e zone-name 499gnunet-conversation -e zone-name
694@end example 500@end example
@@ -743,11 +549,11 @@ Now you can call a buddy. Obviously, your buddy will have to have GNUnet
743installed and must have performed the same steps. Also, you must have 549installed and must have performed the same steps. Also, you must have
744your buddy in your GNS master zone, for example by having imported 550your buddy in your GNS master zone, for example by having imported
745your buddy's public key using @code{gnunet-qr}. Suppose your buddy 551your buddy's public key using @code{gnunet-qr}. Suppose your buddy
746is in your zone as @code{buddy.gnu} and they also created their 552is in your zone as @code{buddy.mytld} and they also created their
747phone using a label "home-phone". Then you can initiate a call using: 553phone using a label "home-phone". Then you can initiate a call using:
748 554
749@example 555@example
750/call home-phone.buddy.gnu 556/call home-phone.buddy.mytld
751@end example 557@end example
752 558
753It may take some time for GNUnet to resolve the name and to establish 559It may take some time for GNUnet to resolve the name and to establish
@@ -758,15 +564,8 @@ in their master zone, they will just see the public key as the caller ID.
758Your buddy then can answer the call using the "/accept" command. After 564Your buddy then can answer the call using the "/accept" command. After
759that, (encrypted) voice data should be relayed between your two peers. 565that, (encrypted) voice data should be relayed between your two peers.
760Either of you can end the call using @command{/cancel}. You can exit 566Either of you can end the call using @command{/cancel}. You can exit
761@code{gnunet-converation} using @command{/quit}. 567@code{gnunet-conversation} using @command{/quit}.
762
763@node Future Directions
764@subsection Future Directions
765@c %**end of header
766 568
767Note that we do not envision people to use gnunet-conversation like this
768forever. We will write a graphical user interface, and that GUI will
769automatically create the necessary records in the respective zone.
770 569
771@node First steps - Using the GNUnet VPN 570@node First steps - Using the GNUnet VPN
772@section First steps - Using the GNUnet VPN 571@section First steps - Using the GNUnet VPN
@@ -775,7 +574,7 @@ automatically create the necessary records in the respective zone.
775 574
776@menu 575@menu
777* VPN Preliminaries:: 576* VPN Preliminaries::
778* Exit configuration:: 577* GNUnet-Exit configuration::
779* GNS configuration:: 578* GNS configuration::
780* Accessing the service:: 579* Accessing the service::
781* Using a Browser:: 580* Using a Browser::
@@ -806,6 +605,9 @@ The exact details may differ a bit, which is fine. Add the text
806hosts: files gns [NOTFOUND=return] mdns4_minimal [NOTFOUND=return] dns mdns4 605hosts: files gns [NOTFOUND=return] mdns4_minimal [NOTFOUND=return] dns mdns4
807@end example 606@end example
808 607
608@c TODO: outdated section, we no longer install this as part of the
609@c TODO: standard installation procedure and should point out the manual
610@c TODO: steps required to make it useful.
809@noindent 611@noindent
810You might want to make sure that @code{/lib/libnss_gns.so.2} exists on 612You might want to make sure that @code{/lib/libnss_gns.so.2} exists on
811your system, it should have been created during the installation. 613your system, it should have been created during the installation.
@@ -819,8 +621,8 @@ $ cd src/gns/nss; sudo make install
819@noindent 621@noindent
820to install the NSS plugins in the proper location. 622to install the NSS plugins in the proper location.
821 623
822@node Exit configuration 624@node GNUnet-Exit configuration
823@subsection Exit configuration 625@subsection GNUnet-Exit configuration
824@c %**end of header 626@c %**end of header
825 627
826Stop your peer (as user @code{gnunet}, run @command{gnunet-arm -e}) and 628Stop your peer (as user @code{gnunet}, run @command{gnunet-arm -e}) and
@@ -907,38 +709,218 @@ the searcher/downloader specify "no anonymity", non-anonymous
907file-sharing is used. If either user specifies some desired degree 709file-sharing is used. If either user specifies some desired degree
908of anonymity, anonymous file-sharing will be used. 710of anonymity, anonymous file-sharing will be used.
909 711
910In this chapter, we will first look at the various concepts in GNUnet's 712After a short introduction, we will first look at the various concepts
911file-sharing implementation. Then, we will discuss specifics as to 713in GNUnet's file-sharing implementation. Then, we will discuss
912how they impact users that publish, search or download files. 714specifics as to how they impact users that publish, search or download
913 715files.
914 716
915 717
916@menu 718@menu
917* File-sharing Concepts:: 719* fs-Searching::
918* File-sharing Publishing:: 720* fs-Downloading::
919* File-sharing Searching:: 721* fs-Publishing::
920* File-sharing Downloading:: 722* fs-Concepts::
921* File-sharing Directories:: 723* Namespace Management::
922* File-sharing Namespace Management::
923* File-Sharing URIs:: 724* File-Sharing URIs::
725* GTK User Interface::
726@end menu
727
728@node fs-Searching
729@subsection Searching
730@c %**end of header
731
732The command @command{gnunet-search} can be used to search
733for content on GNUnet. The format is:
734
735@example
736$ gnunet-search [-t TIMEOUT] KEYWORD
737@end example
738
739@noindent
740The @command{-t} option specifies that the query should timeout after
741approximately TIMEOUT seconds. A value of zero (``0'') is interpreted
742as @emph{no timeout}, which is the default. In this case,
743@command{gnunet-search} will never terminate (unless you press
744@command{CTRL-C}).
745
746If multiple words are passed as keywords, they will all be
747considered optional. Prefix keywords with a "+" to make them mandatory.
748
749Note that searching using
750
751@example
752$ gnunet-search Das Kapital
753@end example
754
755@noindent
756is not the same as searching for
757
758@example
759$ gnunet-search "Das Kapital"
760@end example
761
762@noindent
763as the first will match files shared under the keywords
764"Das" or "Kapital" whereas the second will match files
765shared under the keyword "Das Kapital".
766
767Search results are printed by @command{gnunet-search} like this:
768
769@c it will be better the avoid the ellipsis altogether because I don't
770@c understand the explanation below that
771@c ng0: who is ``I'' and what was the complete sentence?
772@example
773#15:
774gnunet-download -o "COPYING" gnunet://fs/chk/PGK8M...3EK130.75446
775
776@end example
777
778@noindent
779The whole line is the command you would have to enter to download
780the file. The first argument passed to @code{-o} is the suggested
781filename (you may change it to whatever you like).
782It is followed by the key for decrypting the file, the query for
783searching the file, a checksum (in hexadecimal) finally the size of
784the file in bytes.
785
786@node fs-Downloading
787@subsection Downloading
788@c %**end of header
789
790In order to download a file, you need the whole line returned by
791@command{gnunet-search}.
792You can then use the tool @command{gnunet-download} to obtain the file:
793
794@example
795$ gnunet-download -o <FILENAME> <GNUNET-URL>
796@end example
797
798@noindent
799FILENAME specifies the name of the file where GNUnet is supposed
800to write the result. Existing files are overwritten. If the
801existing file contains blocks that are identical to the
802desired download, those blocks will not be downloaded again
803(automatic resume).
804
805If you want to download the GPL from the previous example,
806you do the following:
807
808@example
809$ gnunet-download -o "COPYING" gnunet://fs/chk/PGK8M...3EK130.75446
810@end example
811
812@noindent
813If you ever have to abort a download, you can continue it at any time by
814re-issuing @command{gnunet-download} with the same filename.
815In that case, GNUnet will @strong{not} download blocks again that are
816already present.
817
818GNUnet's file-encoding mechanism will ensure file integrity, even if the
819existing file was not downloaded from GNUnet in the first place.
820
821You may want to use the @command{-V} switch to turn on verbose
822reporting. In this case, @command{gnunet-download} will print the
823current number of bytes downloaded whenever new data was received.
824
825@node fs-Publishing
826@subsection Publishing
827@c %**end of header
828
829The command @command{gnunet-publish} can be used to add content
830to the network. The basic format of the command is
831
832@example
833$ gnunet-publish [-n] [-k KEYWORDS]* [-m TYPE:VALUE] FILENAME
834@end example
835
836For example
837@example
838$ gnunet-publish -m "description:GNU License" -k gpl -k test -m "mimetype:text/plain" COPYING
839@end example
840
841@menu
842* Important command-line options::
843* Indexing vs. Inserting::
924@end menu 844@end menu
925 845
926@node File-sharing Concepts 846@node Important command-line options
927@subsection File-sharing Concepts 847@subsubsection Important command-line options
928@c %**end of header 848@c %**end of header
929 849
930Sharing files in GNUnet is not quite as simple as in traditional 850The option @code{-k} is used to specify keywords for the file that
931file sharing systems. For example, it is not sufficient to just 851should be inserted. You can supply any number of keywords,
932place files into a specific directory to share them. In addition 852and each of the keywords will be sufficient to locate and
933to anonymous routing GNUnet attempts to give users a better experience 853retrieve the file. Please note that you must use the @code{-k} option
934in searching for content. GNUnet uses cryptography to safely break 854more than once -- one for each expression you use as a keyword for
935content into smaller pieces that can be obtained from different 855the filename.
936sources without allowing participants to corrupt files. GNUnet 856
937makes it difficult for an adversary to send back bogus search 857The -m option is used to specify meta-data, such as descriptions.
938results. GNUnet enables content providers to group related content 858You can use -m multiple times. The TYPE passed must be from the
939and to establish a reputation. Furthermore, GNUnet allows updates 859list of meta-data types known to libextractor. You can obtain this
940to certain content to be made available. This section is supposed 860list by running @command{extract -L}. Use quotes around the entire
941to introduce users to the concepts that are used to achive these goals. 861meta-data argument if the value contains spaces. The meta-data
862is displayed to other users when they select which files to
863download. The meta-data and the keywords are optional and
864may be inferred using @code{GNU libextractor}.
865
866@command{gnunet-publish} has a few additional options to handle
867namespaces and directories. Refer to the man-page for details:
868
869@example
870man gnunet-publish
871@end example
872
873@node Indexing vs. Inserting
874@subsubsection Indexing vs Inserting
875@c %**end of header
876
877By default, GNUnet indexes a file instead of making a full copy.
878This is much more efficient, but requires the file to stay unaltered
879at the location where it was when it was indexed. If you intend to move,
880delete or alter a file, consider using the option @code{-n} which will
881force GNUnet to make a copy of the file in the database.
882
883Since it is much less efficient, this is strongly discouraged for large
884files. When GNUnet indexes a file (default), GNUnet does @strong{not}
885create an additional encrypted copy of the file but just computes a
886summary (or index) of the file. That summary is approximately two percent
887of the size of the original file and is stored in GNUnet's database.
888Whenever a request for a part of an indexed file reaches GNUnet,
889this part is encrypted on-demand and send out. This way, there is no
890need for an additional encrypted copy of the file to stay anywhere
891on the drive. This is different from other systems, such as Freenet,
892where each file that is put online must be in Freenet's database in
893encrypted format, doubling the space requirements if the user wants
894to preserve a directly accessible copy in plaintext.
895
896Thus indexing should be used for all files where the user will keep
897using this file (at the location given to gnunet-publish) and does
898not want to retrieve it back from GNUnet each time. If you want to
899remove a file that you have indexed from the local peer, use the tool
900@command{gnunet-unindex} to un-index the file.
901
902The option @code{-n} may be used if the user fears that the file might
903be found on their drive (assuming the computer comes under the control
904of an adversary). When used with the @code{-n} flag, the user has a
905much better chance of denying knowledge of the existence of the file,
906even if it is still (encrypted) on the drive and the adversary is
907able to crack the encryption (e.g. by guessing the keyword.
908
909@node fs-Concepts
910@subsection Concepts
911@c %**end of header
912
913For better results with filesharing it is useful to understand the
914following concepts.
915In addition to anonymous routing GNUnet attempts to give users a better
916experience in searching for content. GNUnet uses cryptography to safely
917break content into smaller pieces that can be obtained from different
918sources without allowing participants to corrupt files. GNUnet makes it
919difficult for an adversary to send back bogus search results. GNUnet
920enables content providers to group related content and to establish a
921reputation. Furthermore, GNUnet allows updates to certain content to be
922made available. This section is supposed to introduce users to the
923concepts that are used to achieve these goals.
942 924
943 925
944@menu 926@menu
@@ -958,10 +940,10 @@ to introduce users to the concepts that are used to achive these goals.
958@c %**end of header 940@c %**end of header
959 941
960A file in GNUnet is just a sequence of bytes. Any file-format is allowed 942A file in GNUnet is just a sequence of bytes. Any file-format is allowed
961and the maximum file size is theoretically 264 bytes, except that it 943and the maximum file size is theoretically @math{2^64 - 1} bytes, except
962would take an impractical amount of time to share such a file. 944that it would take an impractical amount of time to share such a file.
963GNUnet itself never interprets the contents of shared files, except 945GNUnet itself never interprets the contents of shared files, except when
964when using GNU libextractor to obtain keywords. 946using GNU libextractor to obtain keywords.
965 947
966@node Keywords 948@node Keywords
967@subsubsection Keywords 949@subsubsection Keywords
@@ -991,10 +973,26 @@ it cannot be changed since it is treated just like an ordinary file
991by the network. Small files (of a few kilobytes) can be inlined in 973by the network. Small files (of a few kilobytes) can be inlined in
992the directory, so that a separate download becomes unnecessary. 974the directory, so that a separate download becomes unnecessary.
993 975
976Directories are shared just like ordinary files. If you download a
977directory with @command{gnunet-download}, you can use
978@command{gnunet-directory} to list its contents. The canonical
979extension for GNUnet directories when stored as files in your
980local file-system is ".gnd". The contents of a directory are URIs and
981meta data.
982The URIs contain all the information required by
983@command{gnunet-download} to retrieve the file. The meta data
984typically includes the mime-type, description, a filename and
985other meta information, and possibly even the full original file
986(if it was small).
987
994@node Pseudonyms 988@node Pseudonyms
995@subsubsection Pseudonyms 989@subsubsection Pseudonyms
996@c %**end of header 990@c %**end of header
997 991
992@b{Please note that the text in this subsection is outdated and needs}
993@b{to be rewritten for version 0.10!}
994@b{This especially concerns the terminology of Pseudonym/Ego/Identity.}
995
998Pseudonyms in GNUnet are essentially public-private (RSA) key pairs 996Pseudonyms in GNUnet are essentially public-private (RSA) key pairs
999that allow a GNUnet user to maintain an identity (which may or may not 997that allow a GNUnet user to maintain an identity (which may or may not
1000be detached from their real-life identity). GNUnet's pseudonyms are not 998be detached from their real-life identity). GNUnet's pseudonyms are not
@@ -1010,6 +1008,10 @@ to copy around).
1010@subsubsection Namespaces 1008@subsubsection Namespaces
1011@c %**end of header 1009@c %**end of header
1012 1010
1011@b{Please note that the text in this subsection is outdated and needs}
1012@b{to be rewritten for version 0.10!}
1013@b{This especially concerns the terminology of Pseudonym/Ego/Identity.}
1014
1013A namespace is a set of files that were signed by the same pseudonym. 1015A namespace is a set of files that were signed by the same pseudonym.
1014Files (or directories) that have been signed and placed into a namespace 1016Files (or directories) that have been signed and placed into a namespace
1015can be updated. Updates are identified as authentic if the same secret 1017can be updated. Updates are identified as authentic if the same secret
@@ -1021,19 +1023,23 @@ same entity (which does not have to be the same person).
1021@subsubsection Advertisements 1023@subsubsection Advertisements
1022@c %**end of header 1024@c %**end of header
1023 1025
1026@b{Please note that the text in this subsection is outdated and needs}
1027@b{to be rewritten for version 0.10!}
1028@b{This especially concerns the terminology of Pseudonym/Ego/Identity.}
1029
1024Advertisements are used to notify other users about the existence of a 1030Advertisements are used to notify other users about the existence of a
1025namespace. Advertisements are propagated using the normal keyword search. 1031namespace. Advertisements are propagated using the normal keyword search.
1026When an advertisement is received (in response to a search), the namespace 1032When an advertisement is received (in response to a search), the namespace
1027is added to the list of namespaces available in the namespace-search 1033is added to the list of namespaces available in the namespace-search
1028dialogs of gnunet-fs-gtk and printed by gnunet-pseudonym. Whenever a 1034dialogs of gnunet-fs-gtk and printed by @code{gnunet-identity}. Whenever a
1029namespace is created, an appropriate advertisement can be generated. 1035namespace is created, an appropriate advertisement can be generated.
1030The default keyword for the advertising of namespaces is "namespace". 1036The default keyword for the advertising of namespaces is "namespace".
1031 1037
1032Note that GNUnet differenciates between your pseudonyms (the identities 1038Note that GNUnet differentiates between your pseudonyms (the identities
1033that you control) and namespaces. If you create a pseudonym, you will 1039that you control) and namespaces. If you create a pseudonym, you will
1034not automatically see the respective namespace. You first have to create 1040not automatically see the respective namespace. You first have to create
1035an advertisement for the namespace and find it using keyword 1041an advertisement for the namespace and find it using keyword
1036search --- even for your own namespaces. The @command{gnunet-pseudonym} 1042search --- even for your own namespaces. The @command{gnunet-identity}
1037tool is currently responsible for both managing pseudonyms and namespaces. 1043tool is currently responsible for both managing pseudonyms and namespaces.
1038This will likely change in the future to reduce the potential for 1044This will likely change in the future to reduce the potential for
1039confusion. 1045confusion.
@@ -1080,205 +1086,16 @@ replication level into the network, and then decrement the replication
1080level by one. If all blocks reach replication level zero, the 1086level by one. If all blocks reach replication level zero, the
1081selection is simply random. 1087selection is simply random.
1082 1088
1083@node File-sharing Publishing
1084@subsection File-sharing Publishing
1085@c %**end of header
1086
1087The command @command{gnunet-publish} can be used to add content
1088to the network. The basic format of the command is
1089
1090@example
1091$ gnunet-publish [-n] [-k KEYWORDS]* [-m TYPE:VALUE] FILENAME
1092@end example
1093
1094 1089
1095@menu 1090@node Namespace Management
1096* Important command-line options:: 1091@subsection Namespace Management
1097* Indexing vs. Inserting::
1098@end menu
1099
1100@node Important command-line options
1101@subsubsection Important command-line options
1102@c %**end of header
1103
1104The option -k is used to specify keywords for the file that
1105should be inserted. You can supply any number of keywords,
1106and each of the keywords will be sufficient to locate and
1107retrieve the file.
1108
1109The -m option is used to specify meta-data, such as descriptions.
1110You can use -m multiple times. The TYPE passed must be from the
1111list of meta-data types known to libextractor. You can obtain this
1112list by running @command{extract -L}. Use quotes around the entire
1113meta-data argument if the value contains spaces. The meta-data
1114is displayed to other users when they select which files to
1115download. The meta-data and the keywords are optional and
1116maybe inferred using @code{GNU libextractor}.
1117
1118gnunet-publish has a few additional options to handle namespaces and
1119directories. See the man-page for details.
1120
1121@node Indexing vs. Inserting
1122@subsubsection Indexing vs Inserting
1123@c %**end of header
1124
1125By default, GNUnet indexes a file instead of making a full copy.
1126This is much more efficient, but requries the file to stay unaltered
1127at the location where it was when it was indexed. If you intend to move,
1128delete or alter a file, consider using the option @code{-n} which will
1129force GNUnet to make a copy of the file in the database.
1130
1131Since it is much less efficient, this is strongly discouraged for large
1132files. When GNUnet indexes a file (default), GNUnet does @strong{not}
1133create an additional encrypted copy of the file but just computes a
1134summary (or index) of the file. That summary is approximately two percent
1135of the size of the original file and is stored in GNUnet's database.
1136Whenever a request for a part of an indexed file reaches GNUnet,
1137this part is encrypted on-demand and send out. This way, there is no
1138need for an additional encrypted copy of the file to stay anywhere
1139on the drive. This is different from other systems, such as Freenet,
1140where each file that is put online must be in Freenet's database in
1141encrypted format, doubling the space requirements if the user wants
1142to preseve a directly accessible copy in plaintext.
1143
1144Thus indexing should be used for all files where the user will keep
1145using this file (at the location given to gnunet-publish) and does
1146not want to retrieve it back from GNUnet each time. If you want to
1147remove a file that you have indexed from the local peer, use the tool
1148@command{gnunet-unindex} to un-index the file.
1149
1150The option @code{-n} may be used if the user fears that the file might
1151be found on their drive (assuming the computer comes under the control
1152of an adversary). When used with the @code{-n} flag, the user has a
1153much better chance of denying knowledge of the existence of the file,
1154even if it is still (encrypted) on the drive and the adversary is
1155able to crack the encryption (e.g. by guessing the keyword.
1156
1157@node File-sharing Searching
1158@subsection File-sharing Searching
1159@c %**end of header
1160
1161The command @command{gnunet-search} can be used to search
1162for content on GNUnet. The format is:
1163
1164@example
1165$ gnunet-search [-t TIMEOUT] KEYWORD
1166@end example
1167
1168@noindent
1169The -t option specifies that the query should timeout after
1170approximately TIMEOUT seconds. A value of zero is interpreted
1171as @emph{no timeout}, which is also the default. In this case,
1172gnunet-search will never terminate (unless you press CTRL-C).
1173
1174If multiple words are passed as keywords, they will all be
1175considered optional. Prefix keywords with a "+" to make them mandatory.
1176
1177Note that searching using
1178
1179@example
1180$ gnunet-search Das Kapital
1181@end example
1182
1183@noindent
1184is not the same as searching for
1185
1186@example
1187$ gnunet-search "Das Kapital"
1188@end example
1189
1190@noindent
1191as the first will match files shared under the keywords
1192"Das" or "Kapital" whereas the second will match files
1193shared under the keyword "Das Kapital".
1194
1195Search results are printed by gnunet-search like this:
1196
1197@c it will be better the avoid the ellipsis altogether because I don't
1198@c understand the explanation below that
1199@example
1200$ gnunet-download -o "COPYING" --- gnunet://fs/chk/N8...C92.17992
1201=> The GNU Public License <= (mimetype: text/plain)
1202@end example
1203
1204@noindent
1205The first line is the command you would have to enter to download
1206the file. The argument passed to @code{-o} is the suggested
1207filename (you may change it to whatever you like).
1208@c except it's triple dash in the above example ---
1209The @code{--} is followed by key for decrypting the file,
1210the query for searching the file, a checksum (in hexadecimal)
1211finally the size of the file in bytes.
1212The second line contains the description of the file; here this is
1213"The GNU Public License" and the mime-type (see the options for
1214gnunet-publish on how to specify these).
1215
1216@node File-sharing Downloading
1217@subsection File-sharing Downloading
1218@c %**end of header
1219
1220In order to download a file, you need the three values returned by
1221@command{gnunet-search}.
1222You can then use the tool @command{gnunet-download} to obtain the file:
1223
1224@example
1225$ gnunet-download -o FILENAME --- GNUNETURL
1226@end example
1227
1228@noindent
1229FILENAME specifies the name of the file where GNUnet is supposed
1230to write the result. Existing files are overwritten. If the
1231existing file contains blocks that are identical to the
1232desired download, those blocks will not be downloaded again
1233(automatic resume).
1234
1235If you want to download the GPL from the previous example,
1236you do the following:
1237
1238@example
1239$ gnunet-download -o "COPYING" --- gnunet://fs/chk/N8...92.17992
1240@end example
1241
1242@noindent
1243If you ever have to abort a download, you can continue it at any time by
1244re-issuing @command{gnunet-download} with the same filename.
1245In that case, GNUnet will @strong{not} download blocks again that are
1246already present.
1247
1248GNUnet's file-encoding mechanism will ensure file integrity, even if the
1249existing file was not downloaded from GNUnet in the first place.
1250
1251You may want to use the @command{-V} switch (must be added before
1252@c Same as above it's triple dash
1253the @command{--}) to turn on verbose reporting. In this case,
1254@command{gnunet-download} will print the current number of
1255bytes downloaded whenever new data was received.
1256
1257@node File-sharing Directories
1258@subsection File-sharing Directories
1259@c %**end of header
1260
1261Directories are shared just like ordinary files. If you download a
1262directory with @command{gnunet-download}, you can use
1263@command{gnunet-directory} to list its contents. The canonical
1264extension for GNUnet directories when stored as files in your
1265local file-system is ".gnd". The contents of a directory are URIs and
1266meta data.
1267The URIs contain all the information required by
1268@command{gnunet-download} to retrieve the file. The meta data
1269typically includes the mime-type, description, a filename and
1270other meta information, and possibly even the full original file
1271(if it was small).
1272
1273@node File-sharing Namespace Management
1274@subsection File-sharing Namespace Management
1275@c %**end of header 1092@c %**end of header
1276 1093
1277@b{Please note that the text in this subsection is outdated and needs} 1094@b{Please note that the text in this subsection is outdated and needs}
1278@b{to be rewritten for version 0.10!} 1095@b{to be rewritten for version 0.10!}
1279 1096
1280The gnunet-pseudonym tool can be used to create pseudonyms and 1097The @code{gnunet-identity} tool can be used to create pseudonyms and
1281to advertise namespaces. By default, gnunet-pseudonym simply 1098to advertise namespaces. By default, @code{gnunet-identity -D} simply
1282lists all locally available pseudonyms. 1099lists all locally available pseudonyms.
1283 1100
1284 1101
@@ -1294,6 +1111,10 @@ lists all locally available pseudonyms.
1294@subsubsection Creating Pseudonyms 1111@subsubsection Creating Pseudonyms
1295@c %**end of header 1112@c %**end of header
1296 1113
1114@b{Please note that the text in this subsection is outdated and needs}
1115@b{to be rewritten for version 0.10!}
1116@b{This especially concerns the terminology of Pseudonym/Ego/Identity.}
1117
1297With the @command{-C NICK} option it can also be used to 1118With the @command{-C NICK} option it can also be used to
1298create a new pseudonym. A pseudonym is the virtual identity 1119create a new pseudonym. A pseudonym is the virtual identity
1299of the entity in control of a namespace. Anyone can create 1120of the entity in control of a namespace. Anyone can create
@@ -1305,6 +1126,10 @@ used.
1305@subsubsection Deleting Pseudonyms 1126@subsubsection Deleting Pseudonyms
1306@c %**end of header 1127@c %**end of header
1307 1128
1129@b{Please note that the text in this subsection is outdated and needs}
1130@b{to be rewritten for version 0.10!}
1131@b{This especially concerns the terminology of Pseudonym/Ego/Identity.}
1132
1308With the @command{-D NICK} option pseudonyms can be deleted. 1133With the @command{-D NICK} option pseudonyms can be deleted.
1309Once the pseudonym has been deleted it is impossible to add 1134Once the pseudonym has been deleted it is impossible to add
1310content to the corresponding namespace. Deleting the 1135content to the corresponding namespace. Deleting the
@@ -1315,6 +1140,10 @@ unavailable.
1315@subsubsection Advertising namespaces 1140@subsubsection Advertising namespaces
1316@c %**end of header 1141@c %**end of header
1317 1142
1143@b{Please note that the text in this subsection is outdated and needs}
1144@b{to be rewritten for version 0.10!}
1145@b{This especially concerns the terminology of Pseudonym/Ego/Identity.}
1146
1318Each namespace is associated with meta-data that describes 1147Each namespace is associated with meta-data that describes
1319the namespace. This meta-data is provided by the user at 1148the namespace. This meta-data is provided by the user at
1320the time that the namespace is advertised. Advertisements 1149the time that the namespace is advertised. Advertisements
@@ -1331,6 +1160,10 @@ the quality of the content found in it.
1331@subsubsection Namespace names 1160@subsubsection Namespace names
1332@c %**end of header 1161@c %**end of header
1333 1162
1163@b{Please note that the text in this subsection is outdated and needs}
1164@b{to be rewritten for version 0.10!}
1165@b{This especially concerns the terminology of Pseudonym/Ego/Identity.}
1166
1334While the namespace is uniquely identified by its ID, another way 1167While the namespace is uniquely identified by its ID, another way
1335to refer to the namespace is to use the NICKNAME. 1168to refer to the namespace is to use the NICKNAME.
1336The NICKNAME can be freely chosen by the creator of the namespace and 1169The NICKNAME can be freely chosen by the creator of the namespace and
@@ -1342,6 +1175,10 @@ to the NICKNAME to get a unique identifier.
1342@subsubsection Namespace root 1175@subsubsection Namespace root
1343@c %**end of header 1176@c %**end of header
1344 1177
1178@b{Please note that the text in this subsection is outdated and needs}
1179@b{to be rewritten for version 0.10!}
1180@b{This especially concerns the terminology of Pseudonym/Ego/Identity.}
1181
1345An item of particular interest in the namespace advertisement is 1182An item of particular interest in the namespace advertisement is
1346the ROOT. The ROOT is the identifier of a designated entry in the 1183the ROOT. The ROOT is the identifier of a designated entry in the
1347namespace. The idea is that the ROOT can be used to advertise an 1184namespace. The idea is that the ROOT can be used to advertise an
@@ -1355,6 +1192,11 @@ GNUnet (currently) uses four different types of URIs for
1355file-sharing. They all begin with "gnunet://fs/". 1192file-sharing. They all begin with "gnunet://fs/".
1356This section describes the four different URI types in detail. 1193This section describes the four different URI types in detail.
1357 1194
1195For FS URIs empty KEYWORDs are not allowed. Quotes are allowed to
1196denote whitespace between words. Keywords must contain a balanced
1197number of double quotes. Doubles quotes can not be used in the actual
1198keywords. This means that the the string '""foo bar""' will be turned
1199into two OR-ed keywords 'foo' and 'bar', not into '"foo bar"'.
1358 1200
1359@menu 1201@menu
1360* Encoding of hash values in URIs:: 1202* Encoding of hash values in URIs::
@@ -1371,6 +1213,7 @@ This section describes the four different URI types in detail.
1371Most URIs include some hash values. Hashes are encoded using 1213Most URIs include some hash values. Hashes are encoded using
1372base32hex (RFC 2938). 1214base32hex (RFC 2938).
1373 1215
1216@cindex chk-uri
1374@node Content Hash Key (chk) 1217@node Content Hash Key (chk)
1375@subsubsection Content Hash Key (chk) 1218@subsubsection Content Hash Key (chk)
1376@c %**end of header 1219@c %**end of header
@@ -1387,6 +1230,7 @@ shape of the tree), KEYHASH is the key used to decrypt the file
1387is the query used to request the top-level block (also the hash 1230is the query used to request the top-level block (also the hash
1388of the encrypted block). 1231of the encrypted block).
1389 1232
1233@cindex loc-uri
1390@node Location identifiers (loc) 1234@node Location identifiers (loc)
1391@subsubsection Location identifiers (loc) 1235@subsubsection Location identifiers (loc)
1392@c %**end of header 1236@c %**end of header
@@ -1402,6 +1246,7 @@ base32hex), SIG is the RSA signature (in GNUnet format in
1402base32hex) and EXPTIME specifies when the signature expires 1246base32hex) and EXPTIME specifies when the signature expires
1403(in milliseconds after 1970). 1247(in milliseconds after 1970).
1404 1248
1249@cindex ksk-uri
1405@node Keyword queries (ksk) 1250@node Keyword queries (ksk)
1406@subsubsection Keyword queries (ksk) 1251@subsubsection Keyword queries (ksk)
1407@c %**end of header 1252@c %**end of header
@@ -1413,11 +1258,18 @@ using the typical URI-encoding (using hex values) from HTTP.
1413"+" can be used to specify multiple keywords (which are then 1258"+" can be used to specify multiple keywords (which are then
1414logically "OR"-ed in the search, results matching both keywords 1259logically "OR"-ed in the search, results matching both keywords
1415are given a higher rank): "gnunet://fs/ksk/KEYWORD1+KEYWORD2". 1260are given a higher rank): "gnunet://fs/ksk/KEYWORD1+KEYWORD2".
1261ksk-URIs must not begin or end with the plus ('+') character.
1262Furthermore they must not contain '++'.
1416 1263
1264@cindex sks-uri
1417@node Namespace content (sks) 1265@node Namespace content (sks)
1418@subsubsection Namespace content (sks) 1266@subsubsection Namespace content (sks)
1419@c %**end of header 1267@c %**end of header
1420 1268
1269@b{Please note that the text in this subsection is outdated and needs}
1270@b{to be rewritten for version 0.10!}
1271@b{This especially concerns the terminology of Pseudonym/Ego/Identity.}
1272
1421Namespaces are sets of files that have been approved by some (usually 1273Namespaces are sets of files that have been approved by some (usually
1422pseudonymous) user --- typically by that user publishing all of the 1274pseudonymous) user --- typically by that user publishing all of the
1423files together. A file can be in many namespaces. A file is in a 1275files together. A file can be in many namespaces. A file is in a
@@ -1431,6 +1283,135 @@ chosen keyword (or password!). A commonly used identifier is
1431"root" which by convention refers to some kind of index or other 1283"root" which by convention refers to some kind of index or other
1432entry point into the namespace. 1284entry point into the namespace.
1433 1285
1286@node GTK User Interface
1287@subsection GTK User Interface
1288This chapter describes first steps for file-sharing with GNUnet.
1289To start, you should launch @command{gnunet-fs-gtk}.
1290
1291As we want to be sure that the network contains the data that we are
1292looking for for testing, we need to begin by publishing a file.
1293
1294@menu
1295* gtk-Publishing::
1296* gtk-Searching::
1297* gtk-Downloading::
1298@end menu
1299
1300@node gtk-Publishing
1301@subsubsection Publishing
1302@c %**end of header
1303
1304To publish a file, select "File Sharing" in the menu bar just below the
1305"Statistics" icon, and then select "Publish" from the menu.
1306
1307Afterwards, the following publishing dialog will appear:
1308
1309@c Add image here
1310
1311In this dialog, select the "Add File" button. This will open a
1312file selection dialog:
1313
1314@c Add image here
1315
1316Now, you should select a file from your computer to be published on
1317GNUnet. To see more of GNUnet's features later, you should pick a
1318PNG or JPEG file this time. You can leave all of the other options
1319in the dialog unchanged. Confirm your selection by pressing the "OK"
1320button in the bottom right corner. Now, you will briefly see a
1321"Messages..." dialog pop up, but most likely it will be too short for
1322you to really read anything. That dialog is showing you progress
1323information as GNUnet takes a first look at the selected file(s).
1324For a normal image, this is virtually instant, but if you later
1325import a larger directory you might be interested in the progress dialog
1326and potential errors that might be encountered during processing.
1327After the progress dialog automatically disappears, your file
1328should now appear in the publishing dialog:
1329
1330@c Add image here
1331
1332Now, select the file (by clicking on the file name) and then click
1333the "Edit" button. This will open the editing dialog:
1334
1335@c Add image here
1336
1337In this dialog, you can see many details about your file. In the
1338top left area, you can see meta data extracted about the file,
1339such as the original filename, the mimetype and the size of the image.
1340In the top right, you should see a preview for the image
1341(if GNU libextractor was installed correctly with the
1342respective plugins). Note that if you do not see a preview, this
1343is not a disaster, but you might still want to install more of
1344GNU libextractor in the future. In the bottom left, the dialog contains
1345a list of keywords. These are the keywords under which the file will be
1346made available. The initial list will be based on the extracted meta data.
1347Additional publishing options are in the right bottom corner. We will
1348now add an additional keyword to the list of keywords. This is done by
1349entering the keyword above the keyword list between the label "Keyword"
1350and the "Add keyword" button. Enter "test" and select "Add keyword".
1351Note that the keyword will appear at the bottom of the existing keyword
1352list, so you might have to scroll down to see it. Afterwards, push the
1353"OK" button at the bottom right of the dialog.
1354
1355You should now be back at the "Publish content on GNUnet" dialog. Select
1356"Execute" in the bottom right to close the dialog and publish your file
1357on GNUnet! Afterwards, you should see the main dialog with a new area
1358showing the list of published files (or ongoing publishing operations
1359with progress indicators):
1360
1361@c Add image here
1362
1363@node gtk-Searching
1364@subsubsection Searching
1365@c %**end of header
1366
1367Below the menu bar, there are four entry widges labeled "Namespace",
1368"Keywords", "Anonymity" and "Mime-type" (from left to right). These
1369widgets are used to control searching for files in GNUnet. Between the
1370"Keywords" and "Anonymity" widgets, there is also a big "Search" button,
1371which is used to initiate the search. We will ignore the "Namespace",
1372"Anonymity" and "Mime-type" options in this tutorial, please leave them
1373empty. Instead, simply enter "test" under "Keywords" and press "Search".
1374Afterwards, you should immediately see a new tab labeled after your
1375search term, followed by the (current) number of search
1376results --- "(15)" in our screenshot. Note that your results may
1377vary depending on what other users may have shared and how your
1378peer is connected.
1379
1380You can now select one of the search results. Once you do this,
1381additional information about the result should be displayed on the
1382right. If available, a preview image should appear on the top right.
1383Meta data describing the file will be listed at the bottom right.
1384
1385Once a file is selected, at the bottom of the search result list
1386a little area for downloading appears.
1387
1388@node gtk-Downloading
1389@subsubsection Downloading
1390@c %**end of header
1391
1392In the downloading area, you can select the target directory (default is
1393"Downloads") and specify the desired filename (by default the filename it
1394taken from the meta data of the published file). Additionally, you can
1395specify if the download should be anonymous and (for directories) if
1396the download should be recursive. In most cases, you can simply start
1397the download with the "Download!" button.
1398
1399Once you selected download, the progress of the download will be
1400displayed with the search result. You may need to resize the result
1401list or scroll to the right. The "Status" column shows the current
1402status of the download, and "Progress" how much has been completed.
1403When you close the search tab (by clicking on the "X" button next to
1404the "test" label), ongoing and completed downloads are not aborted
1405but moved to a special "*" tab.
1406
1407You can remove completed downloads from the "*" tab by clicking the
1408cleanup button next to the "*". You can also abort downloads by right
1409clicking on the respective download and selecting "Abort download"
1410from the menu.
1411
1412That's it, you now know the basics for file-sharing with GNUnet!
1413
1414
1434@node The GNU Name System 1415@node The GNU Name System
1435@section The GNU Name System 1416@section The GNU Name System
1436@c %**end of header 1417@c %**end of header
@@ -1466,47 +1447,42 @@ the user. This results in non-unique name-value mappings as
1466 1447
1467 1448
1468@menu 1449@menu
1450* Creating a Zone::
1469* Maintaining your own Zones:: 1451* Maintaining your own Zones::
1470* Obtaining your Zone Key:: 1452* Obtaining your Zone Key::
1471* Adding Links to Other Zones:: 1453* Adding Links to Other Zones::
1472* The Three Local Zones of GNS:: 1454* Using Public Keys as Top Level Domains::
1473* The Master Zone::
1474* The Private Zone::
1475* The Shorten Zone::
1476* The ZKEY Top Level Domain in GNS::
1477* Resource Records in GNS:: 1455* Resource Records in GNS::
1456* Synchronizing with legacy DNS::
1478@end menu 1457@end menu
1479 1458
1480 1459
1481@node Maintaining your own Zones 1460@node Creating a Zone
1482@subsection Maintaining your own Zones 1461@subsection Creating a Zone
1483 1462
1484To setup your GNS system you must execute: 1463To use GNS, you probably should create at least one zone of your own.
1464You can create any number of zones using the gnunet-identity tool
1465using:
1485 1466
1486@example 1467@example
1487$ gnunet-gns-import.sh 1468$ gnunet-identity -C "myzone"
1488@end example 1469@end example
1489 1470
1490@noindent 1471Henceforth, on your system you control the TLD ``myzone''.
1491This will boostrap your zones and create the necessary key material. 1472
1492Your keys can be listed using the @command{gnunet-identity} 1473All of your zones can be listed (displayed) using the
1493command line tool: 1474@command{gnunet-identity} command line tool as well:
1494 1475
1495@example 1476@example
1496$ gnunet-identity -d 1477$ gnunet-identity -d
1497@end example 1478@end example
1498 1479
1499@noindent 1480@node Maintaining your own Zones
1500You can arbitrarily create your own zones using the gnunet-identity 1481@subsection Maintaining your own Zones
1501tool using:
1502
1503@example
1504$ gnunet-identity -C "new_zone"
1505@end example
1506 1482
1507@noindent 1483@noindent
1508Now you can add (or edit, or remove) records in your GNS zone using the 1484Now you can add (or edit, or remove) records in your GNS zone using the
1509@command{gnunet-setup} GUI or using the @command{gnunet-namestore} 1485@command{gnunet-namestore-gtk} GUI or using the @command{gnunet-namestore}
1510command-line tool. 1486command-line tool.
1511In either case, your records will be stored in an SQL database under 1487In either case, your records will be stored in an SQL database under
1512control of the @command{gnunet-service-namestore}. 1488control of the @command{gnunet-service-namestore}.
@@ -1518,21 +1494,21 @@ if they are marked as private.
1518To provide a short example for editing your own zone, suppose you 1494To provide a short example for editing your own zone, suppose you
1519have your own web server with the IP @code{1.2.3.4}. Then you can put an 1495have your own web server with the IP @code{1.2.3.4}. Then you can put an
1520@code{A} record (@code{A} records in DNS are for IPv4 IP addresses) 1496@code{A} record (@code{A} records in DNS are for IPv4 IP addresses)
1521into your local zone using the command: 1497into your local zone ``myzone'' using the command:
1522 1498
1523@example 1499@example
1524$ gnunet-namestore -z master-zone -a -n www -t A -V 1.2.3.4 -e never 1500$ gnunet-namestore -z myzone -a -n www -t A -V 1.2.3.4 -e never
1525@end example 1501@end example
1526 1502
1527@noindent 1503@noindent
1528Afterwards, you will be able to access your webpage under "www.gnu" 1504Afterwards, you will be able to access your webpage under "www.myzone"
1529(assuming your webserver does not use virtual hosting, if it does, 1505(assuming your webserver does not use virtual hosting, if it does,
1530please read up on setting up the GNS proxy). 1506please read up on setting up the GNS proxy).
1531 1507
1532Similar commands will work for other types of DNS and GNS records, 1508Similar commands will work for other types of DNS and GNS records,
1533the syntax largely depending on the type of the record. 1509the syntax largely depending on the type of the record.
1534Naturally, most users may find editing the zones using the 1510Naturally, most users may find editing the zones using the
1535@command{gnunet-setup} GUI to be easier. 1511@command{gnunet-namestore-gtk} GUI to be easier.
1536 1512
1537@node Obtaining your Zone Key 1513@node Obtaining your Zone Key
1538@subsection Obtaining your Zone Key 1514@subsection Obtaining your Zone Key
@@ -1546,7 +1522,7 @@ give it to others so that they can securely link to you.
1546You can usually get the hash of your public key using 1522You can usually get the hash of your public key using
1547 1523
1548@example 1524@example
1549$ gnunet-identity -d $options | grep master-zone | awk '@{print $3@}' 1525$ gnunet-identity -d $options | grep myzone | awk '@{print $3@}'
1550@end example 1526@end example
1551 1527
1552@noindent 1528@noindent
@@ -1557,10 +1533,10 @@ DC3SEECJORPHQNVRH965A6N74B1M37S721IG4RBQ15PJLLPJKUE0
1557@end example 1533@end example
1558 1534
1559@noindent 1535@noindent
1560Alternatively, you can obtain a QR code with your zone key AND 1536Alternatively, you can obtain a QR code with your zone key AND your
1561your pseudonym from gnunet-gtk. The QR code is displayed in the 1537pseudonym from gnunet-namestore-gtk. The QR code is displayed in the
1562GNS tab and can be stored to disk using the Save as button next 1538main window and can be stored to disk using the ``Save as'' button
1563to the image. 1539next to the image.
1564 1540
1565@node Adding Links to Other Zones 1541@node Adding Links to Other Zones
1566@subsection Adding Links to Other Zones 1542@subsection Adding Links to Other Zones
@@ -1576,90 +1552,38 @@ You can then delegate resolution of names to Bob's zone by adding
1576a PKEY record to their local zone: 1552a PKEY record to their local zone:
1577 1553
1578@example 1554@example
1579$ gnunet-namestore -a -n bob --type PKEY -V XXXX -e never 1555$ gnunet-namestore -a -n bob --type PKEY -V XXXX -e never -Z myzone
1580@end example 1556@end example
1581 1557
1582@noindent 1558@noindent
1583Note that XXXX in the command above must be replaced with the 1559Note that ``XXXX'' in the command above must be replaced with the hash
1584hash of Bob's public key (the output your friend obtained using 1560of Bob's public key (the output your friend obtained using the
1585the gnunet-identity command from the previous section and told you, 1561@command{gnunet-identity} command from the previous section and told
1586for example by giving you a business card containing this 1562you, for example by giving you a business card containing this
1587information as a QR code). 1563information as a QR code).
1588 1564
1589Assuming Bob has an A record for their website under the name of 1565Assuming Bob has an ``A'' record for their website under the name of
1590www in his zone, you can then access Bob's website under 1566``www'' in his zone, you can then access Bob's website under
1591www.bob.gnu --- as well as any (public) GNS record that Bob has 1567``www.bob.myzone'' --- as well as any (public) GNS record that Bob has
1592in their zone by replacing www with the respective name of the 1568in their zone by replacing www with the respective name of the
1593record in Bob's zone. 1569record in Bob's zone.
1594 1570
1595@c themselves? themself? 1571@c themselves? themself?
1596Furthermore, if Bob has themselves a (public) delegation to Carol's 1572Furthermore, if Bob has themselves a (public) delegation to Carol's
1597zone under "carol", you can access Carol's records under 1573zone under "carol", you can access Carol's records under
1598NAME.carol.bob.gnu (where NAME is the name of Carol's record you 1574``NAME.carol.bob.myzone'' (where ``NAME'' is the name of Carol's
1599want to access). 1575record you want to access).
1600
1601@node The Three Local Zones of GNS
1602@subsection The Three Local Zones of GNS
1603
1604Each user GNS has control over three zones. Each of the zones
1605has a different purpose. These zones are the
1606
1607@itemize @bullet
1608
1609@item master zone,
1610@item private zone, and the
1611@item shorten zone.
1612@end itemize
1613
1614@node The Master Zone
1615@subsection The Master Zone
1616
1617
1618The master zone is your personal TLD. Names within the @code{.gnu}
1619namespace are resolved relative to this zone. You can arbitrarily
1620add records to this zone and selectively publish those records.
1621
1622@node The Private Zone
1623@subsection The Private Zone
1624
1625 1576
1626The private zone is a subzone (or subdomain in DNS terms) of your
1627master zone. It should be used for records that you want to keep
1628private. For example @code{bank.private.gnu}. The key idea is that
1629you want to keep your private records separate, if just to know
1630that those names are not available to other users.
1631 1577
1632@node The Shorten Zone 1578@node Using Public Keys as Top Level Domains
1633@subsection The Shorten Zone 1579@subsection Using Public Keys as Top Level Domains
1634 1580
1635 1581
1636The shorten zone can either be a subzone of the master zone or the 1582GNS also assumes responsibility for any name that uses in a
1637private zone. It is different from the other zones in that GNS 1583well-formed public key for the TLD. Names ending this way are then
1638will automatically populate this zone with other users' zones based 1584resolved by querying the respective zone. Such public key TLDs are
1639on their PSEU records whenever you resolve a name. 1585expected to be used under rare circumstances where globally unique
1640 1586names are required, and for integration with legacy systems.
1641For example if you go to
1642@code{@uref{http://www.bob.alice.dave.gnu/, www.bob.alice.dave.gnu}},
1643GNS will try to import @code{bob} into your shorten zone. Having
1644obtained Bob's PKEY from @code{alice.dave.gnu}, GNS will lookup the
1645PSEU record for @code{+} in Bob's zone. If it exists and the specified
1646pseudonym is not taken, Bob's PKEY will be automatically added under
1647that pseudonym (i.e. "bob") into your shorten zone. From then on,
1648Bob's webpage will also be available for you as
1649@code{@uref{http://www.bob.short.gnu/, www.bob.short.gnu}}.
1650This feature is called @b{automatic name shortening} and is supposed to
1651keep GNS names as short and memorable as possible.
1652
1653@node The ZKEY Top Level Domain in GNS
1654@subsection The ZKEY Top Level Domain in GNS
1655
1656
1657GNS also provides a secure and globally unique namespace under the .zkey
1658top-level domain. A name in the .zkey TLD corresponds to the (printable)
1659public key of a zone. Names in the .zkey TLD are then resolved by querying
1660the respective zone. The .zkey TLD is expected to be used under rare
1661circumstances where globally unique names are required and for
1662integration with legacy systems.
1663 1587
1664@node Resource Records in GNS 1588@node Resource Records in GNS
1665@subsection Resource Records in GNS 1589@subsection Resource Records in GNS
@@ -1682,7 +1606,7 @@ to the current authoritative zone. The extended processing of those
1682names will expand the ".+" with the correct delegation chain to the 1606names will expand the ".+" with the correct delegation chain to the
1683authoritative zone (replacing ".+" with the name of the location 1607authoritative zone (replacing ".+" with the name of the location
1684where the name was encountered) and hence generate a 1608where the name was encountered) and hence generate a
1685valid @code{.gnu} name. 1609valid GNS name.
1686 1610
1687GNS currently supports the following record types: 1611GNS currently supports the following record types:
1688 1612
@@ -1696,28 +1620,43 @@ GNS currently supports the following record types:
1696* CNAME:: 1620* CNAME::
1697* GNS2DNS:: 1621* GNS2DNS::
1698* SOA SRV PTR and MX:: 1622* SOA SRV PTR and MX::
1623* PLACE::
1624* PHONE::
1625* ID ATTR::
1626* ID TOKEN::
1627* ID TOKEN METADATA::
1628* CREDENTIAL::
1629* POLICY::
1630* ATTRIBUTE::
1631* ABE KEY::
1632* ABE MASTER::
1633* RECLAIM OIDC CLIENT::
1634* RECLAIM OIDC REDIRECT::
1699@end menu 1635@end menu
1700 1636
1701@node NICK 1637@node NICK
1702@subsubsection NICK 1638@subsubsection NICK
1703 1639
1704A NICK record is used to give a zone a name. With a NICK record, you can 1640A NICK record is used to give a zone a name. With a NICK record, you
1705essentially specify how you would like to be called. GNS expects this 1641can essentially specify how you would like to be called. GNS expects
1706record under the name "+" in the zone's database (NAMESTORE); however, 1642this record under the empty label ``@@'' in the zone's database
1707it will then automatically be copied into each record set, so that 1643(NAMESTORE); however, it will then automatically be copied into each
1708clients never need to do a separate lookup to discover the NICK record. 1644record set, so that clients never need to do a separate lookup to
1645discover the NICK record. Also, users do not usually have to worry
1646about setting the NICK record: it is automatically set to the local
1647name of the TLD.
1709 1648
1710@b{Example}@ 1649@b{Example}@
1711 1650
1712@example 1651@example
1713Name: +; RRType: NICK; Value: bob 1652Name: @@; RRType: NICK; Value: bob
1714@end example 1653@end example
1715 1654
1716@noindent 1655@noindent
1717This record in Bob's zone will tell other users that this zone wants 1656This record in Bob's zone will tell other users that this zone wants
1718to be referred to as 'bob'. Note that nobody is obliged to call Bob's 1657to be referred to as 'bob'. Note that nobody is obliged to call Bob's
1719zone 'bob' in their own zones. It can be seen as a 1658zone 'bob' in their own zones. It can be seen as a
1720recommendation ("Please call me 'bob'"). 1659recommendation ("Please call this zone 'bob'").
1721 1660
1722@node PKEY 1661@node PKEY
1723@subsubsection PKEY 1662@subsubsection PKEY
@@ -1864,6 +1803,188 @@ should use the ZKEY zone as the destination hostname and
1864GNS-enabled mail servers should be configured to accept 1803GNS-enabled mail servers should be configured to accept
1865e-mails to the ZKEY-zones of all local users. 1804e-mails to the ZKEY-zones of all local users.
1866 1805
1806@node PLACE
1807@subsubsection PLACE
1808
1809Record type for a social place.
1810
1811@node PHONE
1812@subsubsection PHONE
1813
1814Record type for a phone (of CONVERSATION).
1815
1816@node ID ATTR
1817@subsubsection ID ATTR
1818
1819Record type for identity attributes (of IDENTITY).
1820
1821@node ID TOKEN
1822@subsubsection ID TOKEN
1823
1824Record type for an identity token (of IDENTITY-TOKEN).
1825
1826@node ID TOKEN METADATA
1827@subsubsection ID TOKEN METADATA
1828
1829Record type for the private metadata of an identity token (of IDENTITY-TOKEN).
1830
1831@node CREDENTIAL
1832@subsubsection CREDENTIAL
1833
1834Record type for credential.
1835
1836@node POLICY
1837@subsubsection POLICY
1838
1839Record type for policies.
1840
1841@node ATTRIBUTE
1842@subsubsection ATTRIBUTE
1843
1844Record type for reverse lookups.
1845
1846@node ABE KEY
1847@subsubsection ABE KEY
1848
1849Record type for ABE records.
1850
1851@node ABE MASTER
1852@subsubsection ABE MASTER
1853
1854Record type for ABE master keys.
1855
1856@node RECLAIM OIDC CLIENT
1857@subsubsection RECLAIM OIDC CLIENT
1858
1859Record type for reclaim OIDC clients.
1860
1861@node RECLAIM OIDC REDIRECT
1862@subsubsection RECLAIM OIDC REDIRECT
1863
1864Record type for reclaim OIDC redirect URIs.
1865
1866@node Synchronizing with legacy DNS
1867@subsection Synchronizing with legacy DNS
1868
1869If you want to support GNS but the master database for a zone
1870is only available and maintained in DNS, GNUnet includes the
1871@command{gnunet-zoneimport} tool to monitor a DNS zone and
1872automatically import records into GNS. Today, the tool does
1873not yet support DNS AF(X)R, as we initially used it on the
1874``.fr'' zone which does not allow us to perform a DNS zone
1875transfer. Instead, @command{gnunet-zoneimport} reads a list
1876of DNS domain names from @code{stdin}, issues DNS queries for
1877each, converts the obtained records (if possible) and stores
1878the result in the namestore.
1879
1880@image{images/gns,6in,, picture of DNS-GNS data flow}
1881
1882The zonemaster service then takes the records from the namestore,
1883publishes them into the DHT which makes the result available to the
1884GNS resolver. In the GNS configuration, non-local zones can be
1885configured to be intercepted by specifying ``.tld = PUBLICKEY'' in the
1886configuration file in the ``[gns]'' section.
1887
1888Note that the namestore by default also populates the namecache.
1889This pre-population is cryptographically expensive. Thus, on
1890systems that only serve to import a large (millions of records)
1891DNS zone and that do not have a local gns service in use, it
1892is thus advisable to disable the namecache by setting the
1893option ``DISABLE'' to ``YES'' in section ``[namecache]''.
1894
1895
1896@node re@:claim Identity Provider
1897@section re@:claim Identity Provider
1898
1899The re:claim Identity Provider (IdP) is a decentralized IdP service.
1900It allows its users to manage and authorize third parties to access their identity attributes such as email or shipping addresses.
1901
1902It basically mimics the concepts of centralized IdPs, such as those offered by Google or Facebook.
1903Like other IdPs, re:claim features an (optional) OpenID-Connect 1.0-compliant protocol layer that can be used for websites to integrate re:claim as an Identity Provider with little effort.
1904
1905@menu
1906* Managing Attributes::
1907* Sharing Attributes with Third Parties::
1908* Revoking Authorizations of Third Parties::
1909* Using the OpenID-Connect IdP::
1910@end menu
1911
1912@node Managing Attributes
1913@subsection Managing Attributes
1914
1915Before adding attributes to an identity, you must first create an ego:
1916
1917@example
1918$ gnunet-identity -C "username"
1919@end example
1920
1921Henceforth, you can manage a new user profile of the user ``username''.
1922
1923To add an email address to your user profile, simply use the @command{gnunet-reclaim} command line tool::
1924
1925@example
1926$ gnunet-reclaim -e "username" -a "email" -V "username@@example.gnunet"
1927@end example
1928
1929All of your attributes can be listed using the @command{gnunet-reclaim}
1930command line tool as well:
1931
1932@example
1933$ gnunet-reclaim -e "username" -D
1934@end example
1935
1936Currently, and by default, attribute values are interpreted as plain text.
1937In the future there might be more value types such as X.509 certificate credentials.
1938
1939@node Sharing Attributes with Third Parties
1940@subsection Sharing Attributes with Third Parties
1941
1942If you want to allow a third party such as a website or friend to access to your attributes (or a subset thereof) execute:
1943
1944@example
1945$ gnunet-reclaim -e "username" -r "PKEY" -i "attribute1,attribute2,..."
1946@end example
1947
1948Where "PKEY" is the public key of the third party and "attribute1,attribute2,..." is a comma-separated list of attribute names, such as "email", that you want to share.
1949
1950The command will return a "ticket" string.
1951You must give this "ticket" to the requesting third party.
1952
1953The third party can then retrieve your shared identity attributes using:
1954
1955@example
1956$ gnunet-reclaim -e "friend" -C "ticket"
1957@end example
1958
1959This will retrieve and list the shared identity attributes.
1960The above command will also work if the user "username" is currently offline since the attributes are retrieved from GNS.
1961Further, the "ticket" can be re-used later to retrieve up-to-date attributes in case "username" has changed the value(s). For instance, becasue his email address changed.
1962
1963To list all given authorizations (tickets) you can execute:
1964@example
1965$ gnunet-reclaim -e "friend" -T (TODO there is only a REST API for this ATM)
1966@end example
1967
1968
1969@node Revoking Authorizations of Third Parties
1970@subsection Revoking Authorizations of Third Parties
1971
1972If you want to revoke the access of a third party to your attributes you can execute:
1973
1974@example
1975$ gnunet-idp -e "username" -R "ticket"
1976@end example
1977
1978This will prevent the third party from accessing the attribute in the future.
1979Please note that if the third party has previously accessed the attribute, there is not way in which the system could have prevented the thiry party from storing the data.
1980As such, only access to updated data in the future can be revoked.
1981This behaviour is _exactly the same_ as with other IdPs.
1982
1983@node Using the OpenID-Connect IdP
1984@subsection Using the OpenID-Connect IdP
1985
1986TODO: Document setup and REST endpoints
1987
1867@node Using the Virtual Public Network 1988@node Using the Virtual Public Network
1868@section Using the Virtual Public Network 1989@section Using the Virtual Public Network
1869 1990
@@ -2036,7 +2157,7 @@ destination.
2036 2157
2037For applications that do not use DNS, you can also manually create 2158For applications that do not use DNS, you can also manually create
2038such a mapping using the gnunet-vpn command-line tool. Here, you 2159such a mapping using the gnunet-vpn command-line tool. Here, you
2039specfiy the desired address family of the result (i.e. "-4"), and the 2160specify the desired address family of the result (i.e. "-4"), and the
2040intended target IP on the Internet ("-i 131.159.74.67") and 2161intended target IP on the Internet ("-i 131.159.74.67") and
2041"gnunet-vpn" will tell you which IP address in the range of your 2162"gnunet-vpn" will tell you which IP address in the range of your
2042VPN tunnel was mapped. 2163VPN tunnel was mapped.
@@ -2047,3 +2168,5 @@ service offered by that peer, you can create an IP tunnel to
2047that peer by specifying the peer's identity, service name and 2168that peer by specifying the peer's identity, service name and
2048protocol (--tcp or --udp) and you will again receive an IP address 2169protocol (--tcp or --udp) and you will again receive an IP address
2049that will terminate at the respective peer's service. 2170that will terminate at the respective peer's service.
2171
2172