gnunet-svn
[Top][All Lists]
Advanced

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

[lsd0001] branch master updated: update date; remove compile targets


From: gnunet
Subject: [lsd0001] branch master updated: update date; remove compile targets
Date: Sun, 17 May 2020 22:13:03 +0200

This is an automated email from the git hooks/post-receive script.

martin-schanzenbach pushed a commit to branch master
in repository lsd0001.

The following commit(s) were added to refs/heads/master by this push:
     new a1bd60c  update date; remove compile targets
a1bd60c is described below

commit a1bd60c51857b3648fad752b2ba75080835fdf09
Author: Martin Schanzenbach <address@hidden>
AuthorDate: Sun May 17 22:07:57 2020 +0200

    update date; remove compile targets
---
 draft-schanzen-gns.html | 3129 -----------------------------------------------
 draft-schanzen-gns.txt  | 1792 ---------------------------
 draft-schanzen-gns.xml  |    2 +-
 3 files changed, 1 insertion(+), 4922 deletions(-)

diff --git a/draft-schanzen-gns.html b/draft-schanzen-gns.html
deleted file mode 100644
index f9d94d1..0000000
--- a/draft-schanzen-gns.html
+++ /dev/null
@@ -1,3129 +0,0 @@
-<!DOCTYPE html>
-<html lang="en" class="Internet-Draft">
-<head>
-<meta charset="utf-8">
-<meta content="Common,Latin" name="scripts">
-<meta content="initial-scale=1.0" name="viewport">
-<title>The GNU Name System Specification</title>
-<meta content="Martin Schanzenbach" name="author">
-<meta content="Christian Grothoff" name="author">
-<meta content="Bernd Fix" name="author">
-<meta content="
-       This document contains the GNU Name System (GNS) technical 
specification. 
-    " name="description">
-<meta content="xml2rfc 2.39.0" name="generator">
-<meta content="name systems" name="keyword">
-<meta content="draft-schanzen-gns-00" name="ietf.draft">
-<link href="draft-schanzen-gns.xml" rel="alternate" type="application/rfc+xml">
-<link href="#copyright" rel="license">
-<style type="text/css">/*
-
-  NOTE: Changes at the bottom of this file overrides some earlier settings.
-
-  Once the style has stabilized and has been adopted as an official RFC style,
-  this can be consolidated so that style settings occur only in one place, but
-  for now the contents of this file consists first of the initial CSS work as
-  provided to the RFC Formatter (xml2rfc) work, followed by itemized and
-  commented changes found necssary during the development of the v3
-  formatters.
-
-*/
-
-/* fonts */
-@import url('https://fonts.googleapis.com/css?family=Noto+Sans'); /* 
Sans-serif */
-@import url('https://fonts.googleapis.com/css?family=Noto+Serif'); /* Serif 
(print) */
-@import url('https://fonts.googleapis.com/css?family=Roboto+Mono'); /* 
Monospace */
-
-@viewport {
-  zoom: 1.0;
-  width: extend-to-zoom;
-}
-@-ms-viewport {
-  width: extend-to-zoom;
-  zoom: 1.0;
-}
-/* general and mobile first */
-html {
-}
-body {
-  max-width: 90%;
-  margin: 1.5em auto;
-  color: #222;
-  background-color: #fff;
-  font-size: 14px;
-  font-family: 'Noto Sans', Arial, Helvetica, sans-serif;
-  line-height: 1.6;
-  scroll-behavior: smooth;
-}
-.ears {
-  display: none;
-}
-
-/* headings */
-#title, h1, h2, h3, h4, h5, h6 {
-  margin: 1em 0 0.5em;
-  font-weight: bold;
-  line-height: 1.3;
-}
-#title {
-  clear: both;
-  border-bottom: 1px solid #ddd;
-  margin: 0 0 0.5em 0;
-  padding: 1em 0 0.5em;
-}
-.author {
-  padding-bottom: 4px;
-}
-h1 {
-  font-size: 26px;
-  margin: 1em 0;
-}
-h2 {
-  font-size: 22px;
-  margin-top: -20px;  /* provide offset for in-page anchors */
-  padding-top: 33px;
-}
-h3 {
-  font-size: 18px;
-  margin-top: -36px;  /* provide offset for in-page anchors */
-  padding-top: 42px;
-}
-h4 {
-  font-size: 16px;
-  margin-top: -36px;  /* provide offset for in-page anchors */
-  padding-top: 42px;
-}
-h5, h6 {
-  font-size: 14px;
-}
-#n-copyright-notice {
-  border-bottom: 1px solid #ddd;
-  padding-bottom: 1em;
-  margin-bottom: 1em;
-}
-/* general structure */
-p {
-  padding: 0;
-  margin: 0 0 1em 0;
-  text-align: left;
-}
-div, span {
-  position: relative;
-}
-div {
-  margin: 0;
-}
-.alignRight.art-text {
-  background-color: #f9f9f9;
-  border: 1px solid #eee;
-  border-radius: 3px;
-  padding: 1em 1em 0;
-  margin-bottom: 1.5em;
-}
-.alignRight.art-text pre {
-  padding: 0;
-}
-.alignRight {
-  margin: 1em 0;
-}
-.alignRight > *:first-child {
-  border: none;
-  margin: 0;
-  float: right;
-  clear: both;
-}
-.alignRight > *:nth-child(2) {
-  clear: both;
-  display: block;
-  border: none;
-}
-svg {
-  display: block;
-}
-.alignCenter.art-text {
-  background-color: #f9f9f9;
-  border: 1px solid #eee;
-  border-radius: 3px;
-  padding: 1em 1em 0;
-  margin-bottom: 1.5em;
-}
-.alignCenter.art-text pre {
-  padding: 0;
-}
-.alignCenter {
-  margin: 1em 0;
-}
-.alignCenter > *:first-child {
-  border: none;
-  /* this isn't optimal, but it's an existence proof.  PrinceXML doesn't
-     support flexbox yet.
-  */
-  display: table;
-  margin: 0 auto;
-}
-
-/* lists */
-ol, ul {
-  padding: 0;
-  margin: 0 0 1em 2em;
-}
-ol ol, ul ul, ol ul, ul ol {
-  margin-left: 1em;
-}
-li {
-  margin: 0 0 0.25em 0;
-}
-.ulCompact li {
-  margin: 0;
-}
-ul.empty, .ulEmpty {
-  list-style-type: none;
-}
-ul.empty li, .ulEmpty li {
-  margin-top: 0.5em;
-}
-ul.compact, .ulCompact,
-ol.compact, .olCompact {
-  line-height: 100%;
-  margin: 0 0 0 2em;
-}
-
-/* definition lists */
-dl {
-}
-dl > dt {
-  float: left;
-  margin-right: 1em;
-}
-/* 
-dl.nohang > dt {
-  float: none;
-}
-*/
-dl > dd {
-  margin-bottom: .8em;
-  min-height: 1.3em;
-}
-dl.compact > dd, .dlCompact > dd {
-  margin-bottom: 0em;
-}
-dl > dd > dl {
-  margin-top: 0.5em;
-  margin-bottom: 0em;
-}
-
-/* links */
-a {
-  text-decoration: none;
-}
-a[href] {
-  color: #22e; /* Arlen: WCAG 2019 */
-}
-a[href]:hover {
-  background-color: #f2f2f2;
-}
-figcaption a[href],
-a[href].selfRef {
-  color: #222;
-}
-/* XXX probably not this:
-a.selfRef:hover {
-  background-color: transparent;
-  cursor: default;
-} */
-
-/* Figures */
-tt, code, pre, code {
-  background-color: #f9f9f9;
-  font-family: 'Roboto Mono', monospace;
-}
-pre {
-  border: 1px solid #eee;
-  margin: 0;
-  padding: 1em;
-}
-img {
-  max-width: 100%;
-}
-figure {
-  margin: 0;
-}
-figure blockquote {
-  margin: 0.8em 0.4em 0.4em;
-}
-figcaption {
-  font-style: italic;
-  margin: 0 0 1em 0;
-}
-@media screen {
-  pre {
-    overflow-x: auto;
-    max-width: 100%;
-    max-width: calc(100% - 22px);
-  }
-}
-
-/* aside, blockquote */
-aside, blockquote {
-  margin-left: 0;
-  padding: 1.2em 2em;
-}
-blockquote {
-  background-color: #f9f9f9;
-  color: #111; /* Arlen: WCAG 2019 */
-  border: 1px solid #ddd;
-  border-radius: 3px;
-  margin: 1em 0;
-}
-cite {
-  display: block;
-  text-align: right;
-  font-style: italic;
-}
-
-/* tables */
-table {
-  width: 100%;
-  margin: 0 0 1em;
-  border-collapse: collapse;
-  border: 1px solid #eee;
-}
-th, td {
-  text-align: left;
-  vertical-align: top;
-  padding: 0.5em 0.75em;
-}
-th {
-  text-align: left;
-  background-color: #e9e9e9;
-}
-tr:nth-child(2n+1) > td {
-  background-color: #f5f5f5;
-}
-table caption {
-  font-style: italic;
-  margin: 0;
-  padding: 0;
-  text-align: left;
-}
-table p {
-  /* XXX to avoid bottom margin on table row signifiers. If paragraphs should
-     be allowed within tables more generally, it would be far better to select 
on a class. */
-  margin: 0;
-}
-
-/* pilcrow */
-a.pilcrow {
-  color: #666; /* Arlen: AHDJ 2019 */
-  text-decoration: none;
-  visibility: hidden;
-  user-select: none;
-  -ms-user-select: none;
-  -o-user-select:none;
-  -moz-user-select: none;
-  -khtml-user-select: none;
-  -webkit-user-select: none;
-  -webkit-touch-callout: none;
-}
-@media screen {
-  aside:hover > a.pilcrow,
-  p:hover > a.pilcrow,
-  blockquote:hover > a.pilcrow,
-  div:hover > a.pilcrow,
-  li:hover > a.pilcrow,
-  pre:hover > a.pilcrow {
-    visibility: visible;
-  }
-  a.pilcrow:hover {
-    background-color: transparent;
-  }
-}
-
-/* misc */
-hr {
-  border: 0;
-  border-top: 1px solid #eee;
-}
-.bcp14 {
-  font-variant: small-caps;
-}
-
-.role {
-  font-variant: all-small-caps;
-}
-
-/* info block */
-#identifiers {
-  margin: 0;
-  font-size: 0.9em;
-}
-#identifiers dt {
-  width: 3em;
-  clear: left;
-}
-#identifiers dd {
-  float: left;
-  margin-bottom: 0;
-}
-#identifiers .authors .author {
-  display: inline-block;
-  margin-right: 1.5em;
-}
-#identifiers .authors .org {
-  font-style: italic;
-}
-
-/* The prepared/rendered info at the very bottom of the page */
-.docInfo {
-  color: #666; /* Arlen: WCAG 2019 */
-  font-size: 0.9em;
-  font-style: italic;
-  margin-top: 2em;
-}
-.docInfo .prepared {
-  float: left;
-}
-.docInfo .prepared {
-  float: right;
-}
-
-/* table of contents */
-#toc  {
-  padding: 0.75em 0 2em 0;
-  margin-bottom: 1em;
-}
-nav.toc ul {
-  margin: 0 0.5em 0 0;
-  padding: 0;
-  list-style: none;
-}
-nav.toc li {
-  line-height: 1.3em;
-  margin: 0.75em 0;
-  padding-left: 1.2em;
-  text-indent: -1.2em;
-}
-/* references */
-.references dt {
-  text-align: right;
-  font-weight: bold;
-  min-width: 7em;
-}
-.references dd {
-  margin-left: 8em;
-  overflow: auto;
-}
-
-.refInstance {
-  margin-bottom: 1.25em;
-}
-
-.references .ascii {
-  margin-bottom: 0.25em;
-}
-
-/* index */
-.index ul {
-  margin: 0 0 0 1em;
-  padding: 0;
-  list-style: none;
-}
-.index ul ul {
-  margin: 0;
-}
-.index li {
-  margin: 0;
-  text-indent: -2em;
-  padding-left: 2em;
-  padding-bottom: 5px;
-}
-.indexIndex {
-  margin: 0.5em 0 1em;
-}
-.index a {
-  font-weight: 700;
-}
-/* make the index two-column on all but the smallest screens */
-@media (min-width: 600px) {
-  .index ul {
-    -moz-column-count: 2;
-    -moz-column-gap: 20px;
-  }
-  .index ul ul {
-    -moz-column-count: 1;
-    -moz-column-gap: 0;
-  }
-}
-
-/* authors */
-address.vcard {
-  font-style: normal;
-  margin: 1em 0;
-}
-
-address.vcard .nameRole {
-  font-weight: 700;
-  margin-left: 0;
-}
-address.vcard .label {
-  font-family: "Noto Sans",Arial,Helvetica,sans-serif;
-  margin: 0.5em 0;
-}
-address.vcard .type {
-  display: none;
-}
-.alternative-contact {
-  margin: 1.5em 0 1em;
-}
-hr.addr {
-  border-top: 1px dashed;
-  margin: 0;
-  color: #ddd;
-  max-width: calc(100% - 16px);
-}
-
-/* temporary notes */
-.rfcEditorRemove::before {
-  position: absolute;
-  top: 0.2em;
-  right: 0.2em;
-  padding: 0.2em;
-  content: "The RFC Editor will remove this note";
-  color: #9e2a00; /* Arlen: WCAG 2019 */
-  background-color: #ffd; /* Arlen: WCAG 2019 */
-}
-.rfcEditorRemove {
-  position: relative;
-  padding-top: 1.8em;
-  background-color: #ffd; /* Arlen: WCAG 2019 */
-  border-radius: 3px;
-}
-.cref {
-  background-color: #ffd; /* Arlen: WCAG 2019 */
-  padding: 2px 4px;
-}
-.crefSource {
-  font-style: italic;
-}
-/* alternative layout for smaller screens */
-@media screen and (max-width: 1023px) {
-  body {
-    padding-top: 2em;
-  }
-  #title {
-    padding: 1em 0;
-  }
-  h1 {
-    font-size: 24px;
-  }
-  h2 {
-    font-size: 20px;
-    margin-top: -18px;  /* provide offset for in-page anchors */
-    padding-top: 38px;
-  }
-  #identifiers dd {
-    max-width: 60%;
-  }
-  #toc {
-    position: fixed;
-    z-index: 2;
-    top: 0;
-    right: 0;
-    padding: 0;
-    margin: 0;
-    background-color: inherit;
-    border-bottom: 1px solid #ccc;
-  }
-  #toc h2 {
-    margin: -1px 0 0 0;
-    padding: 4px 0 4px 6px;
-    padding-right: 1em;
-    min-width: 190px;
-    font-size: 1.1em;
-    text-align: right;
-    background-color: #444;
-    color: white;
-    cursor: pointer;
-  }
-  #toc h2::before { /* css hamburger */
-    float: right;
-    position: relative;
-    width: 1em;
-    height: 1px;
-    left: -164px;
-    margin: 6px 0 0 0;
-    background: white none repeat scroll 0 0;
-    box-shadow: 0 4px 0 0 white, 0 8px 0 0 white;
-    content: "";
-  }
-  #toc nav {
-    display: none;
-    padding: 0.5em 1em 1em;
-    overflow: auto;
-    height: calc(100vh - 48px);
-    border-left: 1px solid #ddd;
-  }
-}
-
-/* alternative layout for wide screens */
-@media screen and (min-width: 1024px) {
-  body {
-    max-width: 724px;
-    margin: 42px auto;
-    padding-left: 1.5em;
-    padding-right: 29em;
-  }
-  #toc {
-    position: fixed;
-    top: 42px;
-    right: 42px;
-    width: 25%;
-    margin: 0;
-    padding: 0 1em;
-    z-index: 1;
-  }
-  #toc h2 {
-    border-top: none;
-    border-bottom: 1px solid #ddd;
-    font-size: 1em;
-    font-weight: normal;
-    margin: 0;
-    padding: 0.25em 1em 1em 0;
-  }
-  #toc nav {
-    display: block;
-    height: calc(90vh - 84px);
-    bottom: 0;
-    padding: 0.5em 0 0;
-    overflow: auto;
-  }
-  img { /* future proofing */
-    max-width: 100%;
-    height: auto;
-  }
-}
-
-/* pagination */
-@media print {
-  body {
-
-    width: 100%;
-  }
-  p {
-    orphans: 3;
-    widows: 3;
-  }
-  #n-copyright-notice {
-    border-bottom: none;
-  }
-  #toc, #n-introduction {
-    page-break-before: always;
-  }
-  #toc {
-    border-top: none;
-    padding-top: 0;
-  }
-  figure, pre {
-    page-break-inside: avoid;
-  }
-  figure {
-    overflow: scroll;
-  }
-  h1, h2, h3, h4, h5, h6 {
-    page-break-after: avoid;
-  }
-  h2+*, h3+*, h4+*, h5+*, h6+* {
-    page-break-before: avoid;
-  }
-  pre {
-    white-space: pre-wrap;
-    word-wrap: break-word;
-    font-size: 10pt;
-  }
-  table {
-    border: 1px solid #ddd;
-  }
-  td {
-    border-top: 1px solid #ddd;
-  }
-}
-
-/* This is commented out here, as the string-set: doesn't
-   pass W3C validation currently */
-/*
-.ears thead .left {
-  string-set: ears-top-left content();
-}
-
-.ears thead .center {
-  string-set: ears-top-center content();
-}
-
-.ears thead .right {
-  string-set: ears-top-right content();
-}
-
-.ears tfoot .left {
-  string-set: ears-bottom-left content();
-}
-
-.ears tfoot .center {
-  string-set: ears-bottom-center content();
-}
-
-.ears tfoot .right {
-  string-set: ears-bottom-right content();
-}
-*/
-
-@page :first {
-  padding-top: 0;
-  @top-left {
-    content: normal;
-    border: none;
-  }
-  @top-center {
-    content: normal;
-    border: none;
-  }
-  @top-right {
-    content: normal;
-    border: none;
-  }
-}
-
-@page {
-  size: A4;
-  margin-bottom: 45mm;
-  padding-top: 20px;
-  /* The follwing is commented out here, but set appropriately by in code, as
-     the content depends on the document */
-  /*
-  @top-left {
-    content: 'Internet-Draft';
-    vertical-align: bottom;
-    border-bottom: solid 1px #ccc;
-  }
-  @top-left {
-    content: string(ears-top-left);
-    vertical-align: bottom;
-    border-bottom: solid 1px #ccc;
-  }
-  @top-center {
-    content: string(ears-top-center);
-    vertical-align: bottom;
-    border-bottom: solid 1px #ccc;
-  }
-  @top-right {
-    content: string(ears-top-right);
-    vertical-align: bottom;
-    border-bottom: solid 1px #ccc;
-  }
-  @bottom-left {
-    content: string(ears-bottom-left);
-    vertical-align: top;
-    border-top: solid 1px #ccc;
-  }
-  @bottom-center {
-    content: string(ears-bottom-center);
-    vertical-align: top;
-    border-top: solid 1px #ccc;
-  }
-  @bottom-right {
-      content: '[Page ' counter(page) ']';
-      vertical-align: top;
-      border-top: solid 1px #ccc;
-  }
-  */
-
-}
-
-/* Changes introduced to fix issues found during implementation */
-/* Make sure links are clickable even if overlapped by following H* */
-a {
-  z-index: 2;
-}
-/* Separate body from document info even without intervening H1 */
-section {
-  clear: both;
-}
-
-
-/* Top align author divs, to avoid names without organization dropping level 
with org names */
-.author {
-  vertical-align: top;
-}
-
-/* Leave room in document info to show Internet-Draft on one line */
-#identifiers dt {
-  width: 8em;
-}
-
-/* Don't waste quite as much whitespace between label and value in doc info */
-#identifiers dd {
-  margin-left: 1em;
-}
-
-/* Give floating toc a background color (needed when it's a div inside section 
*/
-#toc {
-  background-color: white;
-}
-
-/* Make the collapsed ToC header render white on gray also when it's a link */
-@media screen and (max-width: 1023px) {
-  #toc h2 a,
-  #toc h2 a:link,
-  #toc h2 a:focus,
-  #toc h2 a:hover,
-  #toc a.toplink,
-  #toc a.toplink:hover {
-    color: white;
-    background-color: #444;
-    text-decoration: none;
-  }
-}
-
-/* Give the bottom of the ToC some whitespace */
-@media screen and (min-width: 1024px) {
-  #toc {
-    padding: 0 0 1em 1em;
-  }
-}
-
-/* Style section numbers with more space between number and title */
-.section-number {
-  padding-right: 0.5em;
-}
-
-/* prevent monospace from becoming overly large */
-tt, code, pre, code {
-  font-size: 95%;
-}
-
-/* Fix the height/width aspect for ascii art*/
-pre.sourcecode,
-.art-text pre {
-  line-height: 1.12;
-}
-
-
-/* Add styling for a link in the ToC that points to the top of the document */
-a.toplink {
-  float: right;
-  margin-right: 0.5em;
-}
-
-/* Fix the dl styling to match the RFC 7992 attributes */
-dl > dt,
-dl.dlParallel > dt {
-  float: left;
-  margin-right: 1em;
-}
-dl.dlNewline > dt {
-  float: none;
-}
-
-/* Provide styling for table cell text alignment */
-table td.text-left,
-table th.text-left {
-  text-align: left;
-}
-table td.text-center,
-table th.text-center {
-  text-align: center;
-}
-table td.text-right,
-table th.text-right {
-  text-align: right;
-}
-
-/* Make the alternative author contact informatio look less like just another
-   author, and group it closer with the primary author contact information */
-.alternative-contact {
-  margin: 0.5em 0 0.25em 0;
-}
-address .non-ascii {
-  margin: 0 0 0 2em;
-}
-
-/* With it being possible to set tables with alignment
-  left, center, and right, { width: 100%; } does not make sense */
-table {
-  width: auto;
-}
-
-/* Avoid reference text that sits in a block with very wide left margin,
-   because of a long floating dt label.*/
-.references dd {
-  overflow: visible;
-}
-
-/* Control caption placement */
-caption {
-  caption-side: bottom;
-}
-
-/* Limit the width of the author address vcard, so names in right-to-left
-   script don't end up on the other side of the page. */
-
-address.vcard {
-  max-width: 30em;
-  margin-right: auto;
-}
-
-/* For address alignment dependent on LTR or RTL scripts */
-address div.left {
-  text-align: left;
-}
-address div.right {
-  text-align: right;
-}
-
-/* Provide table alignment support.  We can't use the alignX classes above
-   since they do unwanted things with caption and other styling. */
-table.right {
- margin-left: auto;
- margin-right: 0;
-}
-table.center {
- margin-left: auto;
- margin-right: auto;
-}
-table.left {
- margin-left: 0;
- margin-right: auto;
-}
-
-/* Give the table caption label the same styling as the figcaption */
-caption a[href] {
-  color: #222;
-}
-
-@media print {
-  .toplink {
-    display: none;
-  }
-
-  /* avoid overwriting the top border line with the ToC header */
-  #toc {
-    padding-top: 1px;
-  }
-
-  /* Avoid page breaks inside dl and author address entries */
-  .vcard {
-    page-break-inside: avoid;
-  }
-
-}
-/* Avoid wrapping of URLs in references */
-@media screen {
-  .references a {
-    white-space: nowrap;
-  }
-}
-/* Tweak the bcp14 keyword presentation */
-.bcp14 {
-  font-variant: small-caps;
-  font-weight: bold;
-  font-size: 0.9em;
-}
-/* Tweak the invisible space above H* in order not to overlay links in text 
above */
- h2 {
-  margin-top: -18px;  /* provide offset for in-page anchors */
-  padding-top: 31px;
- }
- h3 {
-  margin-top: -18px;  /* provide offset for in-page anchors */
-  padding-top: 24px;
- }
- h4 {
-  margin-top: -18px;  /* provide offset for in-page anchors */
-  padding-top: 24px;
- }
-/* Float artwork pilcrow to the right */
-@media screen {
-  .artwork a.pilcrow {
-    display: block;
-    line-height: 0.7;
-    margin-top: 0.15em;
-  }
-}
-/* Make pilcrows on dd visible */
-@media screen {
-  dd:hover > a.pilcrow {
-    visibility: visible;
-  }
-}
-/* Make the placement of figcaption match that of a table's caption
-   by removing the figure's added bottom margin */
-.alignLeft.art-text,
-.alignCenter.art-text,
-.alignRight.art-text {
-   margin-bottom: 0;
-}
-.alignLeft,
-.alignCenter,
-.alignRight {
-  margin: 1em 0 0 0;
-}
-/* In print, the pilcrow won't show on hover, so prevent it from taking up 
space,
-   possibly even requiring a new line */
-@media print {
-  a.pilcrow {
-    display: none;
-  }
-}
-/* Styling for the external metadata */
-div#external-metadata {
-  background-color: #eee;
-  padding: 0.5em;
-  margin-bottom: 0.5em;
-  display: none;
-}
-div#internal-metadata {
-  padding: 0.5em;                       /* to match the external-metadata 
padding */
-}
-/* Styling for title RFC Number */
-h1#rfcnum {
-  clear: both;
-  margin: 0 0 -1em;
-  padding: 1em 0 0 0;
-}
-/* Make .olPercent look the same as <ol><li> */
-dl.olPercent > dd {
-  margin: 0 0 0.25em 0;
-  min-height: initial;
-}
-/* Give aside some styling to set it apart */
-aside {
-  border-left: 1px solid #ddd;
-  margin: 1em 0 1em 2em;
-  padding: 0.2em 2em;
-}
-aside > dl,
-aside > ol,
-aside > ul,
-aside > table,
-aside > p {
-  margin-bottom: 0.5em;
-}
-/* Additional page break settings */
-@media print {
-  figcaption, table caption {
-    page-break-before: avoid;
-  }
-}
-/* Font size adjustments for print */
-@media print {
-  body  { font-size: 10pt;      line-height: normal; max-width: 96%; }
-  h1    { font-size: 1.72em;    padding-top: 1.5em; } /* 1*1.2*1.2*1.2 */
-  h2    { font-size: 1.44em;    padding-top: 1.5em; } /* 1*1.2*1.2 */
-  h3    { font-size: 1.2em;     padding-top: 1.5em; } /* 1*1.2 */
-  h4    { font-size: 1em;       padding-top: 1.5em; }
-  h5, h6 { font-size: 1em;      margin: initial; padding: 0.5em 0 0.3em; }
-}
-/* Sourcecode margin in print, when there's no pilcrow */
-@media print {
-  .artwork,
-  .sourcecode {
-    margin-bottom: 1em;
-  }
-}
-/*
-  The margin-left: 0 on <dd> removes all distinction
-  between levels from nested <dl>s.  Undo that.
-*/
-dl.olPercent > dd,
-dd {
-  margin-left: revert;
-}
-/* Avoid narrow tables forcing too narrow table captions, which may render 
badly */
-table {
-  min-width: 20em;
-}</style>
-<link href="rfc-local.css" rel="stylesheet" type="text/css">
-</head>
-<body>
-<script src="metadata.min.js"></script>
-<table class="ears">
-<thead><tr>
-<td class="left">Internet-Draft</td>
-<td class="center">The GNU Name System</td>
-<td class="right">November 2019</td>
-</tr></thead>
-<tfoot><tr>
-<td class="left">Schanzenbach, et al.</td>
-<td class="center">Expires 13 May 2020</td>
-<td class="right">[Page]</td>
-</tr></tfoot>
-</table>
-<div id="external-metadata" class="document-information"></div>
-<div id="internal-metadata" class="document-information">
-<dl id="identifiers">
-<dt class="label-workgroup">Workgroup:</dt>
-<dd class="workgroup">Independent Stream</dd>
-<dt class="label-internet-draft">Internet-Draft:</dt>
-<dd class="internet-draft">draft-schanzen-gns-00</dd>
-<dt class="label-published">Published:</dt>
-<dd class="published">
-<time datetime="2019-11-10" class="published">10 November 2019</time>
-    </dd>
-<dt class="label-intended-status">Intended Status:</dt>
-<dd class="intended-status">Informational</dd>
-<dt class="label-expires">Expires:</dt>
-<dd class="expires"><time datetime="2020-05-13">13 May 2020</time></dd>
-<dt class="label-authors">Authors:</dt>
-<dd class="authors">
-<div class="author">
-      <div class="author-name">M. Schanzenbach</div>
-<div class="org">GNUnet e.V.</div>
-</div>
-<div class="author">
-      <div class="author-name">C. Grothoff</div>
-<div class="org">Berner Fachhochschule</div>
-</div>
-<div class="author">
-      <div class="author-name">B. Fix</div>
-<div class="org">GNUnet e.V.</div>
-</div>
-</dd>
-</dl>
-</div>
-<h1 id="title">The GNU Name System Specification</h1>
-<section id="section-abstract">
-      <h2 id="abstract"><a href="#abstract" class="selfRef">Abstract</a></h2>
-<p id="section-abstract-1">This document contains the GNU Name System (GNS) 
technical specification.<a href="#section-abstract-1" class="pilcrow">¶</a></p>
-</section>
-<div id="status-of-memo">
-<section id="section-boilerplate.1">
-        <h2 id="name-status-of-this-memo">
-<a href="#name-status-of-this-memo" class="section-name selfRef">Status of 
This Memo</a>
-        </h2>
-<p id="section-boilerplate.1-1">
-        This Internet-Draft is submitted in full conformance with the
-        provisions of BCP 78 and BCP 79.<a href="#section-boilerplate.1-1" 
class="pilcrow">¶</a></p>
-<p id="section-boilerplate.1-2">
-        Internet-Drafts are working documents of the Internet Engineering Task
-        Force (IETF). Note that other groups may also distribute working
-        documents as Internet-Drafts. The list of current Internet-Drafts is
-        at <span><a 
href="https://datatracker.ietf.org/drafts/current/";>https://datatracker.ietf.org/drafts/current/</a></span>.<a
 href="#section-boilerplate.1-2" class="pilcrow">¶</a></p>
-<p id="section-boilerplate.1-3">
-        Internet-Drafts are draft documents valid for a maximum of six months
-        and may be updated, replaced, or obsoleted by other documents at any
-        time. It is inappropriate to use Internet-Drafts as reference
-        material or to cite them other than as "work in progress."<a 
href="#section-boilerplate.1-3" class="pilcrow">¶</a></p>
-<p id="section-boilerplate.1-4">
-        This Internet-Draft will expire on 13 May 2020.<a 
href="#section-boilerplate.1-4" class="pilcrow">¶</a></p>
-</section>
-</div>
-<div id="copyright">
-<section id="section-boilerplate.2">
-        <h2 id="name-copyright-notice">
-<a href="#name-copyright-notice" class="section-name selfRef">Copyright 
Notice</a>
-        </h2>
-<p id="section-boilerplate.2-1">
-            Copyright (c) 2019 IETF Trust and the persons identified as the
-            document authors. All rights reserved.<a 
href="#section-boilerplate.2-1" class="pilcrow">¶</a></p>
-<p id="section-boilerplate.2-2">
-            This document is subject to BCP 78 and the IETF Trust's Legal
-            Provisions Relating to IETF Documents
-            (<span><a 
href="https://trustee.ietf.org/license-info";>https://trustee.ietf.org/license-info</a></span>)
 in effect on the date of
-            publication of this document. Please review these documents
-            carefully, as they describe your rights and restrictions with
-            respect to this document. Code Components extracted from this
-            document must include Simplified BSD License text as described in
-            Section 4.e of the Trust Legal Provisions and are provided without
-            warranty as described in the Simplified BSD License.<a 
href="#section-boilerplate.2-2" class="pilcrow">¶</a></p>
-</section>
-</div>
-<div id="toc">
-<section id="section-toc.1">
-        <a href="#" onclick="scroll(0,0)" class="toplink">▲</a><h2 
id="name-table-of-contents">
-<a href="#name-table-of-contents" class="section-name selfRef">Table of 
Contents</a>
-        </h2>
-<nav class="toc"><ul class="toc ulEmpty">
-<li class="toc ulEmpty" id="section-toc.1-1.1">
-            <p id="section-toc.1-1.1.1"><a href="#section-1" 
class="xref">1</a>.  <a href="#name-introduction" 
class="xref">Introduction</a><a href="#section-toc.1-1.1.1" 
class="pilcrow">¶</a></p>
-</li>
-<li class="toc ulEmpty" id="section-toc.1-1.2">
-            <p id="section-toc.1-1.2.1"><a href="#section-2" 
class="xref">2</a>.  <a href="#name-zones" class="xref">Zones</a><a 
href="#section-toc.1-1.2.1" class="pilcrow">¶</a></p>
-</li>
-<li class="toc ulEmpty" id="section-toc.1-1.3">
-            <p id="section-toc.1-1.3.1"><a href="#section-3" 
class="xref">3</a>.  <a href="#name-resource-records" class="xref">Resource 
Records</a><a href="#section-toc.1-1.3.1" class="pilcrow">¶</a></p>
-<ul class="toc ulEmpty">
-<li class="toc ulEmpty" id="section-toc.1-1.3.2.1">
-                <p id="section-toc.1-1.3.2.1.1"><a href="#section-3.1" 
class="xref">3.1</a>.  <a href="#name-record-types" class="xref">Record 
Types</a><a href="#section-toc.1-1.3.2.1.1" class="pilcrow">¶</a></p>
-</li>
-<li class="toc ulEmpty" id="section-toc.1-1.3.2.2">
-                <p id="section-toc.1-1.3.2.2.1"><a href="#section-3.2" 
class="xref">3.2</a>.  <a href="#name-pkey" class="xref">PKEY</a><a 
href="#section-toc.1-1.3.2.2.1" class="pilcrow">¶</a></p>
-</li>
-<li class="toc ulEmpty" id="section-toc.1-1.3.2.3">
-                <p id="section-toc.1-1.3.2.3.1"><a href="#section-3.3" 
class="xref">3.3</a>.  <a href="#name-gns2dns" class="xref">GNS2DNS</a><a 
href="#section-toc.1-1.3.2.3.1" class="pilcrow">¶</a></p>
-</li>
-<li class="toc ulEmpty" id="section-toc.1-1.3.2.4">
-                <p id="section-toc.1-1.3.2.4.1"><a href="#section-3.4" 
class="xref">3.4</a>.  <a href="#name-leho" class="xref">LEHO</a><a 
href="#section-toc.1-1.3.2.4.1" class="pilcrow">¶</a></p>
-</li>
-<li class="toc ulEmpty" id="section-toc.1-1.3.2.5">
-                <p id="section-toc.1-1.3.2.5.1"><a href="#section-3.5" 
class="xref">3.5</a>.  <a href="#name-nick" class="xref">NICK</a><a 
href="#section-toc.1-1.3.2.5.1" class="pilcrow">¶</a></p>
-</li>
-<li class="toc ulEmpty" id="section-toc.1-1.3.2.6">
-                <p id="section-toc.1-1.3.2.6.1"><a href="#section-3.6" 
class="xref">3.6</a>.  <a href="#name-box" class="xref">BOX</a><a 
href="#section-toc.1-1.3.2.6.1" class="pilcrow">¶</a></p>
-</li>
-<li class="toc ulEmpty" id="section-toc.1-1.3.2.7">
-                <p id="section-toc.1-1.3.2.7.1"><a href="#section-3.7" 
class="xref">3.7</a>.  <a href="#name-vpn" class="xref">VPN</a><a 
href="#section-toc.1-1.3.2.7.1" class="pilcrow">¶</a></p>
-</li>
-</ul>
-</li>
-<li class="toc ulEmpty" id="section-toc.1-1.4">
-            <p id="section-toc.1-1.4.1"><a href="#section-4" 
class="xref">4</a>.  <a href="#name-publishing-records" class="xref">Publishing 
Records</a><a href="#section-toc.1-1.4.1" class="pilcrow">¶</a></p>
-<ul class="toc ulEmpty">
-<li class="toc ulEmpty" id="section-toc.1-1.4.2.1">
-                <p id="section-toc.1-1.4.2.1.1"><a href="#section-4.1" 
class="xref">4.1</a>.  <a href="#name-key-derivations" class="xref">Key 
Derivations</a><a href="#section-toc.1-1.4.2.1.1" class="pilcrow">¶</a></p>
-</li>
-<li class="toc ulEmpty" id="section-toc.1-1.4.2.2">
-                <p id="section-toc.1-1.4.2.2.1"><a href="#section-4.2" 
class="xref">4.2</a>.  <a href="#name-resource-records-block" 
class="xref">Resource Records Block</a><a href="#section-toc.1-1.4.2.2.1" 
class="pilcrow">¶</a></p>
-</li>
-<li class="toc ulEmpty" id="section-toc.1-1.4.2.3">
-                <p id="section-toc.1-1.4.2.3.1"><a href="#section-4.3" 
class="xref">4.3</a>.  <a href="#name-record-data-encryption-and-" 
class="xref">Record Data Encryption and Decryption</a><a 
href="#section-toc.1-1.4.2.3.1" class="pilcrow">¶</a></p>
-</li>
-</ul>
-</li>
-<li class="toc ulEmpty" id="section-toc.1-1.5">
-            <p id="section-toc.1-1.5.1"><a href="#section-5" 
class="xref">5</a>.  <a href="#name-internationalization-and-ch" 
class="xref">Internationalization and Character Encoding</a><a 
href="#section-toc.1-1.5.1" class="pilcrow">¶</a></p>
-</li>
-<li class="toc ulEmpty" id="section-toc.1-1.6">
-            <p id="section-toc.1-1.6.1"><a href="#section-6" 
class="xref">6</a>.  <a href="#name-name-resolution" class="xref">Name 
Resolution</a><a href="#section-toc.1-1.6.1" class="pilcrow">¶</a></p>
-<ul class="toc ulEmpty">
-<li class="toc ulEmpty" id="section-toc.1-1.6.2.1">
-                <p id="section-toc.1-1.6.2.1.1"><a href="#section-6.1" 
class="xref">6.1</a>.  <a href="#name-recursion" class="xref">Recursion</a><a 
href="#section-toc.1-1.6.2.1.1" class="pilcrow">¶</a></p>
-</li>
-<li class="toc ulEmpty" id="section-toc.1-1.6.2.2">
-                <p id="section-toc.1-1.6.2.2.1"><a href="#section-6.2" 
class="xref">6.2</a>.  <a href="#name-record-processing" class="xref">Record 
Processing</a><a href="#section-toc.1-1.6.2.2.1" class="pilcrow">¶</a></p>
-<ul class="toc ulEmpty">
-<li class="toc ulEmpty" id="section-toc.1-1.6.2.2.2.1">
-                    <p id="section-toc.1-1.6.2.2.2.1.1"><a 
href="#section-6.2.1" class="xref">6.2.1</a>.  <a href="#name-pkey-2" 
class="xref">PKEY</a><a href="#section-toc.1-1.6.2.2.2.1.1" 
class="pilcrow">¶</a></p>
-</li>
-<li class="toc ulEmpty" id="section-toc.1-1.6.2.2.2.2">
-                    <p id="section-toc.1-1.6.2.2.2.2.1"><a 
href="#section-6.2.2" class="xref">6.2.2</a>.  <a href="#name-gns2dns-2" 
class="xref">GNS2DNS</a><a href="#section-toc.1-1.6.2.2.2.2.1" 
class="pilcrow">¶</a></p>
-</li>
-<li class="toc ulEmpty" id="section-toc.1-1.6.2.2.2.3">
-                    <p id="section-toc.1-1.6.2.2.2.3.1"><a 
href="#section-6.2.3" class="xref">6.2.3</a>.  <a href="#name-cname" 
class="xref">CNAME</a><a href="#section-toc.1-1.6.2.2.2.3.1" 
class="pilcrow">¶</a></p>
-</li>
-<li class="toc ulEmpty" id="section-toc.1-1.6.2.2.2.4">
-                    <p id="section-toc.1-1.6.2.2.2.4.1"><a 
href="#section-6.2.4" class="xref">6.2.4</a>.  <a href="#name-box-2" 
class="xref">BOX</a><a href="#section-toc.1-1.6.2.2.2.4.1" 
class="pilcrow">¶</a></p>
-</li>
-<li class="toc ulEmpty" id="section-toc.1-1.6.2.2.2.5">
-                    <p id="section-toc.1-1.6.2.2.2.5.1"><a 
href="#section-6.2.5" class="xref">6.2.5</a>.  <a href="#name-vpn-2" 
class="xref">VPN</a><a href="#section-toc.1-1.6.2.2.2.5.1" 
class="pilcrow">¶</a></p>
-</li>
-<li class="toc ulEmpty" id="section-toc.1-1.6.2.2.2.6">
-                    <p id="section-toc.1-1.6.2.2.2.6.1"><a 
href="#section-6.2.6" class="xref">6.2.6</a>.  <a href="#name-nick-2" 
class="xref">NICK</a><a href="#section-toc.1-1.6.2.2.2.6.1" 
class="pilcrow">¶</a></p>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-<li class="toc ulEmpty" id="section-toc.1-1.7">
-            <p id="section-toc.1-1.7.1"><a href="#section-7" 
class="xref">7</a>.  <a href="#name-zone-revocation" class="xref">Zone 
Revocation</a><a href="#section-toc.1-1.7.1" class="pilcrow">¶</a></p>
-</li>
-<li class="toc ulEmpty" id="section-toc.1-1.8">
-            <p id="section-toc.1-1.8.1"><a href="#section-8" 
class="xref">8</a>.  <a href="#name-determining-the-root-zone-a" 
class="xref">Determining the Root Zone and Zone Governance</a><a 
href="#section-toc.1-1.8.1" class="pilcrow">¶</a></p>
-</li>
-<li class="toc ulEmpty" id="section-toc.1-1.9">
-            <p id="section-toc.1-1.9.1"><a href="#section-9" 
class="xref">9</a>.  <a href="#name-security-considerations" 
class="xref">Security Considerations</a><a href="#section-toc.1-1.9.1" 
class="pilcrow">¶</a></p>
-<ul class="toc ulEmpty">
-<li class="toc ulEmpty" id="section-toc.1-1.9.2.1">
-                <p id="section-toc.1-1.9.2.1.1"><a href="#section-9.1" 
class="xref">9.1</a>.  <a href="#name-cryptography" 
class="xref">Cryptography</a><a href="#section-toc.1-1.9.2.1.1" 
class="pilcrow">¶</a></p>
-</li>
-<li class="toc ulEmpty" id="section-toc.1-1.9.2.2">
-                <p id="section-toc.1-1.9.2.2.1"><a href="#section-9.2" 
class="xref">9.2</a>.  <a href="#name-abuse-mitigation" class="xref">Abuse 
mitigation</a><a href="#section-toc.1-1.9.2.2.1" class="pilcrow">¶</a></p>
-</li>
-<li class="toc ulEmpty" id="section-toc.1-1.9.2.3">
-                <p id="section-toc.1-1.9.2.3.1"><a href="#section-9.3" 
class="xref">9.3</a>.  <a href="#name-zone-management" class="xref">Zone 
management</a><a href="#section-toc.1-1.9.2.3.1" class="pilcrow">¶</a></p>
-</li>
-<li class="toc ulEmpty" id="section-toc.1-1.9.2.4">
-                <p id="section-toc.1-1.9.2.4.1"><a href="#section-9.4" 
class="xref">9.4</a>.  <a href="#name-impact-of-underlying-dht" 
class="xref">Impact of underlying DHT</a><a href="#section-toc.1-1.9.2.4.1" 
class="pilcrow">¶</a></p>
-</li>
-<li class="toc ulEmpty" id="section-toc.1-1.9.2.5">
-                <p id="section-toc.1-1.9.2.5.1"><a href="#section-9.5" 
class="xref">9.5</a>.  <a href="#name-revocations" 
class="xref">Revocations</a><a href="#section-toc.1-1.9.2.5.1" 
class="pilcrow">¶</a></p>
-</li>
-</ul>
-</li>
-<li class="toc ulEmpty" id="section-toc.1-1.10">
-            <p id="section-toc.1-1.10.1"><a href="#section-10" 
class="xref">10</a>. <a href="#name-gana-considerations" class="xref">GANA 
Considerations</a><a href="#section-toc.1-1.10.1" class="pilcrow">¶</a></p>
-</li>
-<li class="toc ulEmpty" id="section-toc.1-1.11">
-            <p id="section-toc.1-1.11.1"><a href="#section-11" 
class="xref">11</a>. <a href="#name-test-vectors" class="xref">Test 
Vectors</a><a href="#section-toc.1-1.11.1" class="pilcrow">¶</a></p>
-</li>
-<li class="toc ulEmpty" id="section-toc.1-1.12">
-            <p id="section-toc.1-1.12.1"><a href="#section-12" 
class="xref">12</a>. <a href="#name-normative-references" 
class="xref">Normative References</a><a href="#section-toc.1-1.12.1" 
class="pilcrow">¶</a></p>
-</li>
-<li class="toc ulEmpty" id="section-toc.1-1.13">
-            <p id="section-toc.1-1.13.1"><a href="#section-appendix.a" 
class="xref"></a><a href="#name-authors-addresses" class="xref">Authors' 
Addresses</a><a href="#section-toc.1-1.13.1" class="pilcrow">¶</a></p>
-</li>
-</ul>
-</nav>
-</section>
-</div>
-<div id="introduction">
-<section id="section-1">
-      <h2 id="name-introduction">
-<a href="#section-1" class="section-number selfRef">1. </a><a 
href="#name-introduction" class="section-name selfRef">Introduction</a>
-      </h2>
-<p id="section-1-1">
-       The Domain Name System (DNS) is a unique distributed database and a 
vital
-       service for most Internet applications. While DNS is distributed, it
-       relies on centralized, trusted registrars to provide globally unique
-       names. As the awareness of the central role DNS plays on the Internet
-       rises, various institutions are using their power (including legal 
means)
-       to engage in attacks on the DNS, thus threatening the global 
availability
-       and integrity of information on the Internet.<a href="#section-1-1" 
class="pilcrow">¶</a></p>
-<p id="section-1-2">
-       DNS was not designed with security as a goal. This makes it very
-       vulnerable, especially to attackers that have the technical capabilities
-       of an entire nation state at their disposal.
-       This specification describes a censorship-resistant, privacy-preserving
-       and decentralized name system: The GNU Name System (GNS). It is designed
-       to provide a secure alternative to DNS, especially when censorship or
-       manipulation is encountered. GNS can bind names to any kind of
-       cryptographically secured token, enabling it to double in some respects 
as
-       even as an alternative to some of today's Public Key Infrastructures, in
-       particular X.509 for the Web.<a href="#section-1-2" 
class="pilcrow">¶</a></p>
-<p id="section-1-3">
-       This document contains the GNU Name System (GNS) technical specification
-       of the GNU Name System <span>[<a href="#GNS" 
class="xref">GNS</a>]</span>, a fully decentralized and censorship-resistant
-       name system. GNS provides a privacy-enhancing alternative to the Domain
-       Name System (DNS). The design of GNS incorporates the capability to
-       integrate and coexist with DNS. GNS is based on the principle of a 
petname
-       system and builds on ideas from the Simple Distributed Security
-       Infrastructure (SDSI), addressing a central issue with the decentralized
-       mapping of secure identifiers to memorable names: namely the 
impossibility
-       of providing a global, secure and memorable mapping without a trusted
-       authority. GNS uses the transitivity in the SDSI design to replace the
-       trusted root with secure delegation of authority thus making petnames
-       useful to other users while operating under a very strong adversary 
model.<a href="#section-1-3" class="pilcrow">¶</a></p>
-<p id="section-1-4">
-       This document defines the normative wire format of resource records, 
resolution processes,
-       cryptographic routines and security considerations for use by 
implementors.<a href="#section-1-4" class="pilcrow">¶</a></p>
-<p id="section-1-5">
-       The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
-       NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and
-       "OPTIONAL" in this document are to be interpreted as described
-       in <span>[<a href="#RFC2119" class="xref">RFC2119</a>]</span>.<a 
href="#section-1-5" class="pilcrow">¶</a></p>
-<p id="section-1-6"><a href="#section-1-6" class="pilcrow">¶</a></p>
-</section>
-</div>
-<div id="zones">
-<section id="section-2">
-      <h2 id="name-zones">
-<a href="#section-2" class="section-number selfRef">2. </a><a 
href="#name-zones" class="section-name selfRef">Zones</a>
-      </h2>
-<p id="section-2-1">
-       A zone in GNS is defined by a public/private ECDSA key pair (d,zk),
-       where d is the private key and zk the corresponding public key.
-       GNS employs the curve parameters of the twisted edwards representation
-       of Curve25519 <span>[<a href="#RFC7748" 
class="xref">RFC7748</a>]</span> (a.k.a. edwards25519)
-       with the ECDSA scheme (<span>[<a href="#RFC6979" 
class="xref">RFC6979</a>]</span>).
-       In the following, we use the following naming convention for our
-       cryptographic primitives:<a href="#section-2-1" 
class="pilcrow">¶</a></p>
-<dl class="dlParallel" id="section-2-2">
-        <dt id="section-2-2.1">d</dt>
-<dd id="section-2-2.2">
-         is a 256-bit ECDSA private key.
-         In GNS, records are signed using a key derived from "d" as described 
in
-         <a href="#publish" class="xref">Section 4</a>.<a 
href="#section-2-2.2" class="pilcrow">¶</a>
-</dd>
-<dt id="section-2-2.3">p</dt>
-<dd id="section-2-2.4">
-         is the prime of edwards25519 as defined in <span>[<a href="#RFC7748" 
class="xref">RFC7748</a>]</span>, i.e.
-         2^255 - 19.<a href="#section-2-2.4" class="pilcrow">¶</a>
-</dd>
-<dt id="section-2-2.5">B</dt>
-<dd id="section-2-2.6">
-         is the group generator (X(P),Y(P)) of edwards25519 as defined in
-         <span>[<a href="#RFC7748" class="xref">RFC7748</a>]</span>.<a 
href="#section-2-2.6" class="pilcrow">¶</a>
-</dd>
-<dt id="section-2-2.7">L</dt>
-<dd id="section-2-2.8">
-         is the prime-order subgroup of edwards25519 in <span>[<a 
href="#RFC7748" class="xref">RFC7748</a>]</span>.<a href="#section-2-2.8" 
class="pilcrow">¶</a>
-</dd>
-<dt id="section-2-2.9">zk</dt>
-<dd id="section-2-2.10">
-         is the ECDSA public key corresponding to d. It is defined in
-         <span>[<a href="#RFC6979" class="xref">RFC6979</a>]</span> as the 
curve point d*B where B is the group
-         generator of the elliptic curve.
-         The public key is used to uniquely identify a GNS zone and is 
referred to
-         as the "zone key".<a href="#section-2-2.10" class="pilcrow">¶</a>
-</dd>
-</dl>
-</section>
-</div>
-<div id="rrecords">
-<section id="section-3">
-      <h2 id="name-resource-records">
-<a href="#section-3" class="section-number selfRef">3. </a><a 
href="#name-resource-records" class="section-name selfRef">Resource Records</a>
-      </h2>
-<p id="section-3-1">
-       A GNS implementor MUST provide a mechanism to create and manage resource
-       records for local zones. A local zone is established by creating a zone
-       key pair. Records may be added to each zone, hence a (local) persistency
-       mechanism for resource records and zones must be provided.
-       This local zone database is used by the GNS resolver implementation
-       and to publish record information.<a href="#section-3-1" 
class="pilcrow">¶</a></p>
-<p id="section-3-2">
-       A GNS resource record holds the data of a specific record in a zone.
-       The resource record format is defined as follows:<a href="#section-3-2" 
class="pilcrow">¶</a></p>
-<div id="figure_gnsrecord">
-<figure id="figure-1">
-        <div class="artwork art-text alignLeft" id="section-3-3.1">
-<pre>
-0     8     16    24    32    40    48    56
-+-----+-----+-----+-----+-----+-----+-----+-----+
-|                   EXPIRATION                  |
-+-----+-----+-----+-----+-----+-----+-----+-----+
-|       DATA SIZE       |          TYPE         |
-+-----+-----+-----+-----+-----+-----+-----+-----+
-|           FLAGS       |        DATA           /
-+-----+-----+-----+-----+                       /
-/                                               /
-/                                               /
-         </pre>
-</div>
-<figcaption><a href="#figure-1" class="selfRef">Figure 
1</a></figcaption></figure>
-</div>
-<p id="section-3-4">where:<a href="#section-3-4" class="pilcrow">¶</a></p>
-<dl class="dlParallel" id="section-3-5">
-        <dt id="section-3-5.1">EXPIRATION</dt>
-<dd id="section-3-5.2">
-         denotes the absolute 64-bit expiration date of the record.
-         In microseconds since midnight (0 hour), January 1, 1970 in network
-         byte order.<a href="#section-3-5.2" class="pilcrow">¶</a>
-</dd>
-<dt id="section-3-5.3">DATA SIZE</dt>
-<dd id="section-3-5.4">
-         denotes the 32-bit size of the DATA field in bytes and in network byte
-         order.<a href="#section-3-5.4" class="pilcrow">¶</a>
-</dd>
-<dt id="section-3-5.5">TYPE</dt>
-<dd id="section-3-5.6">
-         is the 32-bit resource record type. This type can be one of the GNS 
resource
-         records as defined in <a href="#rrecords" class="xref">Section 3</a> 
or a DNS record
-         type as defined in <span>[<a href="#RFC1035" 
class="xref">RFC1035</a>]</span> or any of the
-         complementary standardized DNS resource record types. This value must 
be
-         stored in network byte order. Note that values
-         below 2^16 are reserved for allocation via IANA (<span>[<a 
href="#RFC6895" class="xref">RFC6895</a>]</span>).<a href="#section-3-5.6" 
class="pilcrow">¶</a>
-</dd>
-<dt id="section-3-5.7">FLAGS</dt>
-<dd id="section-3-5.8">
-         is a 32-bit resource record flags field (see below).<a 
href="#section-3-5.8" class="pilcrow">¶</a>
-</dd>
-<dt id="section-3-5.9">DATA</dt>
-<dd id="section-3-5.10">
-         the variable-length resource record data payload. The contents are 
defined
-         by the
-         respective type of the resource record.<a href="#section-3-5.10" 
class="pilcrow">¶</a>
-</dd>
-</dl>
-<p id="section-3-6">
-       Flags indicate metadata surrounding the resource record. A flag
-       value of 0 indicates that all flags are unset. The following
-       illustrates the flag distribution in the 32-bit flag value of a
-       resource record:<a href="#section-3-6" class="pilcrow">¶</a></p>
-<div id="figure_flag">
-<figure id="figure-2">
-        <div class="artwork art-text alignLeft" id="section-3-7.1">
-<pre>
-... 5       4         3        2        1        0
-------+--------+--------+--------+--------+--------+
-/ ... | SHADOW | EXPREL | SUPPL  | PRIVATE|    /   |
-------+--------+--------+--------+--------+--------+
-         </pre>
-</div>
-<figcaption><a href="#figure-2" class="selfRef">Figure 
2</a></figcaption></figure>
-</div>
-<p id="section-3-8">
-       where:<a href="#section-3-8" class="pilcrow">¶</a></p>
-<dl class="dlParallel" id="section-3-9">
-        <dt id="section-3-9.1">SHADOW</dt>
-<dd id="section-3-9.2">
-         If this flag is set, this record should be ignored by resolvers 
unless all (other)
-         records of the same record type have expired.  Used to allow zone 
publishers to
-         facilitate good performance when records change by allowing them to 
put future
-         values of records into the DHT. This way, future values can propagate 
and may be
-         cached before the transition becomes active.<a href="#section-3-9.2" 
class="pilcrow">¶</a>
-</dd>
-<dt id="section-3-9.3">EXPREL</dt>
-<dd id="section-3-9.4">
-         The expiration time value of the record is a relative time (still in 
microseconds)
-         and not an absolute time. This flag should never be encountered by a 
resolver
-         for records obtained from the DHT, but might be present when a 
resolver looks up
-         private records of a zone hosted locally.<a href="#section-3-9.4" 
class="pilcrow">¶</a>
-</dd>
-<dt id="section-3-9.5">
-         SUPPL
-        </dt>
-<dd id="section-3-9.6">
-         This is a supplemental record. It is provided in addition to the
-         other records. This flag indicates that this record is not explicitly
-         managed alongside the other records under the respective name but
-         may be useful for the application. This flag should only be 
encountered
-         by a resolver for records obtained from the DHT.<a 
href="#section-3-9.6" class="pilcrow">¶</a>
-</dd>
-<dt id="section-3-9.7">PRIVATE</dt>
-<dd id="section-3-9.8">
-         This is a private record of this peer and it should thus not be
-         published in the DHT.  Thus, this flag should never be encountered by
-         a resolver for records obtained from the DHT.
-         Private records should still be considered just like
-         regular records when resolving labels in local zones.<a 
href="#section-3-9.8" class="pilcrow">¶</a>
-</dd>
-</dl>
-<div id="gnsrecords_numbers">
-<section id="section-3.1">
-        <h3 id="name-record-types">
-<a href="#section-3.1" class="section-number selfRef">3.1. </a><a 
href="#name-record-types" class="section-name selfRef">Record Types</a>
-        </h3>
-<p id="section-3.1-1">
-         A registry of GNS Record Types is described in Section 10.  The
-         registration policy for this registry is "First Come First Served", as
-         described in <span>[<a href="#RFC8126" 
class="xref">RFC8126</a>]</span>.  When requesting new entries, careful
-         consideration of the following criteria is strongly advised:
-         FIXME: ausdenken was wir da gerne haetten.<a href="#section-3.1-1" 
class="pilcrow">¶</a></p>
-</section>
-</div>
-<div id="gnsrecords_pkey">
-<section id="section-3.2">
-        <h3 id="name-pkey">
-<a href="#section-3.2" class="section-number selfRef">3.2. </a><a 
href="#name-pkey" class="section-name selfRef">PKEY</a>
-        </h3>
-<p id="section-3.2-1">In GNS, a delegation of a label to a zone is represented 
through a PKEY
-         record. A PKEY resource record contains the public key of the zone to
-         delegate to. A PKEY record MUST be the only record under a label. No 
other
-         records are allowed. A PKEY DATA entry has the following format:<a 
href="#section-3.2-1" class="pilcrow">¶</a></p>
-<div id="figure_pkeyrecord">
-<figure id="figure-3">
-          <div class="artwork art-text alignLeft" id="section-3.2-2.1">
-<pre>
-0     8     16    24    32    40    48    56
-+-----+-----+-----+-----+-----+-----+-----+-----+
-|                   PUBLIC KEY                  |
-|                                               |
-|                                               |
-|                                               |
-+-----+-----+-----+-----+-----+-----+-----+-----+
-           </pre>
-</div>
-<figcaption><a href="#figure-3" class="selfRef">Figure 
3</a></figcaption></figure>
-</div>
-<p id="section-3.2-3">
-         where:<a href="#section-3.2-3" class="pilcrow">¶</a></p>
-<dl class="dlParallel" id="section-3.2-4">
-          <dt id="section-3.2-4.1">PUBLIC KEY</dt>
-<dd id="section-3.2-4.2">
-           A 256-bit ECDSA zone key.<a href="#section-3.2-4.2" 
class="pilcrow">¶</a>
-</dd>
-</dl>
-</section>
-</div>
-<div id="gnsrecords_gns2dns">
-<section id="section-3.3">
-        <h3 id="name-gns2dns">
-<a href="#section-3.3" class="section-number selfRef">3.3. </a><a 
href="#name-gns2dns" class="section-name selfRef">GNS2DNS</a>
-        </h3>
-<p id="section-3.3-1">It is possible to delegate a label back into DNS through 
a GNS2DNS record.
-         The resource record contains a DNS name for the resolver to continue 
with
-         in DNS followed by a DNS server. Both names are in the format defined 
in
-         <span>[<a href="#RFC1034" class="xref">RFC1034</a>]</span> for DNS 
names.
-         A GNS2DNS DATA entry has the following format:<a 
href="#section-3.3-1" class="pilcrow">¶</a></p>
-<div id="figure_gns2dnsrecord">
-<figure id="figure-4">
-          <div class="artwork art-text alignLeft" id="section-3.3-2.1">
-<pre>
-0     8     16    24    32    40    48    56
-+-----+-----+-----+-----+-----+-----+-----+-----+
-|                    DNS NAME                   |
-/                                               /
-/                                               /
-|                                               |
-+-----+-----+-----+-----+-----+-----+-----+-----+
-|                 DNS SERVER NAME               |
-/                                               /
-/                                               /
-|                                               |
-+-----------------------------------------------+
-           </pre>
-</div>
-<figcaption><a href="#figure-4" class="selfRef">Figure 
4</a></figcaption></figure>
-</div>
-<p id="section-3.3-3">
-         where:<a href="#section-3.3-3" class="pilcrow">¶</a></p>
-<dl class="dlParallel" id="section-3.3-4">
-          <dt id="section-3.3-4.1">DNS NAME</dt>
-<dd id="section-3.3-4.2">
-           The name to continue with in DNS (0-terminated).<a 
href="#section-3.3-4.2" class="pilcrow">¶</a>
-</dd>
-<dt id="section-3.3-4.3">DNS SERVER NAME</dt>
-<dd id="section-3.3-4.4">
-           The DNS server to use. May be an IPv4/IPv6 address in dotted decimal
-           form or a DNS name. It may also be a relative GNS name ending with a
-           "+" top-level domain. The value is UTF-8 encoded (also for DNS 
names)
-           and 0-terminated.<a href="#section-3.3-4.4" class="pilcrow">¶</a>
-</dd>
-</dl>
-</section>
-</div>
-<div id="gnsrecords_leho">
-<section id="section-3.4">
-        <h3 id="name-leho">
-<a href="#section-3.4" class="section-number selfRef">3.4. </a><a 
href="#name-leho" class="section-name selfRef">LEHO</a>
-        </h3>
-<p id="section-3.4-1">Legacy hostname records can be used by applications that 
are expected
-         to supply a DNS name on the application layer. The most common use 
case
-         is HTTP virtual hosting, which as-is would not work with GNS names as
-         those may not be globally unique.
-
-         A LEHO resource record is expected to be found together in a single
-         resource record with an IPv4 or IPv6 address.
-         A LEHO DATA entry has the following format:<a href="#section-3.4-1" 
class="pilcrow">¶</a></p>
-<div id="figure_lehorecord">
-<figure id="figure-5">
-          <div class="artwork art-text alignLeft" id="section-3.4-2.1">
-<pre>
-0     8     16    24    32    40    48    56
-+-----+-----+-----+-----+-----+-----+-----+-----+
-|                 LEGACY HOSTNAME               |
-/                                               /
-/                                               /
-|                                               |
-+-----+-----+-----+-----+-----+-----+-----+-----+
-           </pre>
-</div>
-<figcaption><a href="#figure-5" class="selfRef">Figure 
5</a></figcaption></figure>
-</div>
-<p id="section-3.4-3">
-         where:<a href="#section-3.4-3" class="pilcrow">¶</a></p>
-<dl class="dlParallel" id="section-3.4-4">
-          <dt id="section-3.4-4.1">LEGACY HOSTNAME</dt>
-<dd id="section-3.4-4.2">
-           A UTF-8 string (which is not 0-terminated) representing the legacy 
hostname.<a href="#section-3.4-4.2" class="pilcrow">¶</a>
-</dd>
-</dl>
-<p id="section-3.4-5">
-         NOTE: If an application uses a LEHO value in an HTTP request header
-         (e.g. "Host:" header) it must be converted to a punycode 
representation
-         <span>[<a href="#RFC5891" class="xref">RFC5891</a>]</span>.<a 
href="#section-3.4-5" class="pilcrow">¶</a></p>
-</section>
-</div>
-<div id="gnsrecords_nick">
-<section id="section-3.5">
-        <h3 id="name-nick">
-<a href="#section-3.5" class="section-number selfRef">3.5. </a><a 
href="#name-nick" class="section-name selfRef">NICK</a>
-        </h3>
-<p id="section-3.5-1">
-         Nickname records can be used by zone administrators to publish an
-         indication on what label this zone prefers to be referred to.
-         This is a suggestion to other zones what label to use when creating a
-         PKEY (<a href="#gnsrecords_pkey" class="xref">Section 3.2</a>) record 
containing this zone's
-         public zone key.
-         This record SHOULD only be stored under the empty label "@" but MAY be
-         returned with record sets under any label as a supplemental record.
-         <a href="#nick_processing" class="xref">Section 6.2.6</a> details how 
a resolver must process
-         supplemental and non-supplemental NICK records.
-         A NICK DATA entry has the following format:<a href="#section-3.5-1" 
class="pilcrow">¶</a></p>
-<div id="figure_nickrecord">
-<figure id="figure-6">
-          <div class="artwork art-text alignLeft" id="section-3.5-2.1">
-<pre>
-0     8     16    24    32    40    48    56
-+-----+-----+-----+-----+-----+-----+-----+-----+
-|                  NICKNAME                     |
-/                                               /
-/                                               /
-|                                               |
-+-----+-----+-----+-----+-----+-----+-----+-----+
-           </pre>
-</div>
-<figcaption><a href="#figure-6" class="selfRef">Figure 
6</a></figcaption></figure>
-</div>
-<p id="section-3.5-3">
-         where:<a href="#section-3.5-3" class="pilcrow">¶</a></p>
-<dl class="dlParallel" id="section-3.5-4">
-          <dt id="section-3.5-4.1">NICKNAME</dt>
-<dd id="section-3.5-4.2">
-           A UTF-8 string (which is not 0-terminated) representing the 
preferred
-           label of the zone. This string MUST NOT include a "." character.<a 
href="#section-3.5-4.2" class="pilcrow">¶</a>
-</dd>
-</dl>
-</section>
-</div>
-<div id="gnsrecords_box">
-<section id="section-3.6">
-        <h3 id="name-box">
-<a href="#section-3.6" class="section-number selfRef">3.6. </a><a 
href="#name-box" class="section-name selfRef">BOX</a>
-        </h3>
-<p id="section-3.6-1">
-         In GNS, every "." in a name delegates to another zone, and
-         GNS lookups are expected to return all of the required useful
-         information in one record set.  This is incompatible with the
-         special labels used by DNS for SRV and TLSA records.  Thus, GNS
-         defines the BOX record format to box up SRV and TLSA records and
-         include them in the record set of the label they are associated
-         with.  For example, a
-         TLSA record for "_https._tcp.foo.gnu" will be stored in the record 
set of
-         "foo.gnu" as a BOX record with service (SVC) 443 (https) and protocol 
(PROTO) 6
-         (tcp) and record TYPE "TLSA".
-         For reference, see also <span>[<a href="#RFC2782" 
class="xref">RFC2782</a>]</span>.
-         A BOX DATA entry has the following format:<a href="#section-3.6-1" 
class="pilcrow">¶</a></p>
-<div id="figure_boxrecord">
-<figure id="figure-7">
-          <div class="artwork art-text alignLeft" id="section-3.6-2.1">
-<pre>
-0     8     16    24    32    40    48    56
-+-----+-----+-----+-----+-----+-----+-----+-----+
-|   PROTO   |    SVC    |       TYPE            |
-+-----------+-----------------------------------+
-|                 RECORD DATA                   |
-/                                               /
-/                                               /
-|                                               |
-+-----+-----+-----+-----+-----+-----+-----+-----+
-           </pre>
-</div>
-<figcaption><a href="#figure-7" class="selfRef">Figure 
7</a></figcaption></figure>
-</div>
-<p id="section-3.6-3">
-         where:<a href="#section-3.6-3" class="pilcrow">¶</a></p>
-<dl class="dlParallel" id="section-3.6-4">
-          <dt id="section-3.6-4.1">PROTO</dt>
-<dd id="section-3.6-4.2">
-           the 16-bit protocol number, e.g. 6 for tcp. In network byte 
order.<a href="#section-3.6-4.2" class="pilcrow">¶</a>
-</dd>
-<dt id="section-3.6-4.3">SVC</dt>
-<dd id="section-3.6-4.4">
-           the 16-bit service value of the boxed record, i.e. the port number.
-           In network byte order.<a href="#section-3.6-4.4" 
class="pilcrow">¶</a>
-</dd>
-<dt id="section-3.6-4.5">TYPE</dt>
-<dd id="section-3.6-4.6">
-           is the 32-bit record type of the boxed record. In network byte 
order.<a href="#section-3.6-4.6" class="pilcrow">¶</a>
-</dd>
-<dt id="section-3.6-4.7">RECORD DATA</dt>
-<dd id="section-3.6-4.8">
-           is a variable length field containing the "DATA" format of TYPE as
-           defined for the respective TYPE in DNS.<a href="#section-3.6-4.8" 
class="pilcrow">¶</a>
-</dd>
-</dl>
-</section>
-</div>
-<div id="gnsrecords_vpn">
-<section id="section-3.7">
-        <h3 id="name-vpn">
-<a href="#section-3.7" class="section-number selfRef">3.7. </a><a 
href="#name-vpn" class="section-name selfRef">VPN</a>
-        </h3>
-<p id="section-3.7-1">
-         A VPN DATA entry has the following format:<a href="#section-3.7-1" 
class="pilcrow">¶</a></p>
-<div id="figure_vpnrecord">
-<figure id="figure-8">
-          <div class="artwork art-text alignLeft" id="section-3.7-2.1">
-<pre>
-0     8     16    24    32    40    48    56
-+-----+-----+-----+-----+-----+-----+-----+-----+
-|          HOSTING PEER PUBLIC KEY              |
-|                (256 bits)                     |
-|                                               |
-|                                               |
-+-----------+-----------------------------------+
-|   PROTO   |    SERVICE  NAME                  |
-+-----------+                                   +
-/                                               /
-/                                               /
-|                                               |
-+-----+-----+-----+-----+-----+-----+-----+-----+
-           </pre>
-</div>
-<figcaption><a href="#figure-8" class="selfRef">Figure 
8</a></figcaption></figure>
-</div>
-<p id="section-3.7-3">
-         where:<a href="#section-3.7-3" class="pilcrow">¶</a></p>
-<dl class="dlParallel" id="section-3.7-4">
-          <dt id="section-3.7-4.1">HOSTING PEER PUBLIC KEY</dt>
-<dd id="section-3.7-4.2">
-           is a 256-bit EdDSA public key identifying the peer hosting the
-           service.<a href="#section-3.7-4.2" class="pilcrow">¶</a>
-</dd>
-<dt id="section-3.7-4.3">PROTO</dt>
-<dd id="section-3.7-4.4">
-           the 16-bit protocol number, e.g. 6 for TCP. In network byte 
order.<a href="#section-3.7-4.4" class="pilcrow">¶</a>
-</dd>
-<dt id="section-3.7-4.5">SERVICE NAME</dt>
-<dd id="section-3.7-4.6">
-           a shared secret used to identify the service at the hosting peer,
-           used to derive the port number requird to connect to the service.
-           The service name MUST be a 0-terminated UTF-8 string.<a 
href="#section-3.7-4.6" class="pilcrow">¶</a>
-</dd>
-</dl>
-</section>
-</div>
-</section>
-</div>
-<div id="publish">
-<section id="section-4">
-      <h2 id="name-publishing-records">
-<a href="#section-4" class="section-number selfRef">4. </a><a 
href="#name-publishing-records" class="section-name selfRef">Publishing 
Records</a>
-      </h2>
-<p id="section-4-1">
-       GNS resource records are published in a distributed hash table (DHT).
-       We assume that a DHT provides two functions: GET(key) and 
PUT(key,value).
-       In GNS, resource records are grouped by their respective labels,
-       encrypted and published together in a single resource records block
-       (RRBLOCK) in the DHT under a key "q": PUT(q, RRBLOCK).
-       The key "q" which is derived from the zone key "zk" and the respective
-       label of the contained records.<a href="#section-4-1" 
class="pilcrow">¶</a></p>
-<div id="blinding">
-<section id="section-4.1">
-        <h3 id="name-key-derivations">
-<a href="#section-4.1" class="section-number selfRef">4.1. </a><a 
href="#name-key-derivations" class="section-name selfRef">Key Derivations</a>
-        </h3>
-<p id="section-4.1-1">
-         Given a label, the DHT key "q" is derived as follows:<a 
href="#section-4.1-1" class="pilcrow">¶</a></p>
-<div class="artwork art-text alignLeft" id="section-4.1-2">
-<pre>
-PRK_h := HKDF-Extract ("key-derivation", zk)
-h := HKDF-Expand (PRK_h, label | "gns", 512 / 8)
-d_h := h * d mod L
-zk_h := h mod L * zk
-q := SHA512 (zk_h)
-         </pre><a href="#section-4.1-2" class="pilcrow">¶</a>
-</div>
-<p id="section-4.1-3">
-         We use a hash-based key derivation function (HKDF) as defined in
-         <span>[<a href="#RFC5869" class="xref">RFC5869</a>]</span>. We use 
HMAC-SHA512 for the extraction
-         phase and HMAC-SHA256 for the expansion phase.<a 
href="#section-4.1-3" class="pilcrow">¶</a></p>
-<dl class="dlParallel" id="section-4.1-4">
-          <dt id="section-4.1-4.1">PRK_h</dt>
-<dd id="section-4.1-4.2">
-           is key material retrieved using an HKDF using the string
-           "key-derivation" as salt and the public zone key "zk" as initial
-           keying material.<a href="#section-4.1-4.2" class="pilcrow">¶</a>
-</dd>
-<dt id="section-4.1-4.3">h</dt>
-<dd id="section-4.1-4.4">
-           is the 512-bit HKDF expansion result. The expansion info input is a
-           concatenation of the label and string "gns".<a 
href="#section-4.1-4.4" class="pilcrow">¶</a>
-</dd>
-<dt id="section-4.1-4.5">d</dt>
-<dd id="section-4.1-4.6">
-           is the 256-bit private zone key as defined in <a href="#zones" 
class="xref">Section 2</a>.<a href="#section-4.1-4.6" class="pilcrow">¶</a>
-</dd>
-<dt id="section-4.1-4.7">label</dt>
-<dd id="section-4.1-4.8">
-           is a UTF-8 string under which the resource records are published.<a 
href="#section-4.1-4.8" class="pilcrow">¶</a>
-</dd>
-<dt id="section-4.1-4.9">d_h</dt>
-<dd id="section-4.1-4.10">
-           is a 256-bit private key derived from the "d" using the
-           keying material "h".<a href="#section-4.1-4.10" 
class="pilcrow">¶</a>
-</dd>
-<dt id="section-4.1-4.11">zk_h</dt>
-<dd id="section-4.1-4.12">
-           is a 256-bit public key derived from the zone key "zk" using the
-           keying material "h".<a href="#section-4.1-4.12" 
class="pilcrow">¶</a>
-</dd>
-<dt id="section-4.1-4.13">L</dt>
-<dd id="section-4.1-4.14">
-           is the prime-order subgroup as defined in <a href="#zones" 
class="xref">Section 2</a>.<a href="#section-4.1-4.14" class="pilcrow">¶</a>
-</dd>
-<dt id="section-4.1-4.15">q</dt>
-<dd id="section-4.1-4.16">
-           Is the 512-bit DHT key under which the resource records block is
-           published.
-           It is the SHA512 hash over the public key "zk_h" corresponding to 
the
-           derived private key "d_h".<a href="#section-4.1-4.16" 
class="pilcrow">¶</a>
-</dd>
-</dl>
-<p id="section-4.1-5">
-         We point out that the multiplication of "zk" with "h" is a point 
multiplication,
-         while the multiplication of "d" with "h" is a scalar 
multiplication.<a href="#section-4.1-5" class="pilcrow">¶</a></p>
-</section>
-</div>
-<div id="wire">
-<section id="section-4.2">
-        <h3 id="name-resource-records-block">
-<a href="#section-4.2" class="section-number selfRef">4.2. </a><a 
href="#name-resource-records-block" class="section-name selfRef">Resource 
Records Block</a>
-        </h3>
-<p id="section-4.2-1">
-         GNS records are grouped by their labels and published as a single
-         block in the DHT. The grouped record sets MAY be paired with any
-         number of supplemental records. Supplemental records must have the
-         supplemental flag set (See <a href="#rrecords" class="xref">Section 
3</a>).
-         The contained resource records are encrypted using a symmetric
-         encryption scheme.
-         A GNS implementation must publish RRBLOCKs
-         in accordance to the properties and recommendations of the underlying
-         DHT. This may include a periodic refresh publication.
-         A GNS RRBLOCK has the following format:<a href="#section-4.2-1" 
class="pilcrow">¶</a></p>
-<div id="figure_record_block">
-<figure id="figure-9">
-          <div class="artwork art-text alignLeft" id="section-4.2-2.1">
-<pre>
-0     8     16    24    32    40    48    56
-+-----+-----+-----+-----+-----+-----+-----+-----+
-|                   SIGNATURE                   |
-|                                               |
-|                                               |
-|                                               |
-|                                               |
-|                                               |
-|                                               |
-|                                               |
-+-----+-----+-----+-----+-----+-----+-----+-----+
-|                  PUBLIC KEY                   |
-|                                               |
-|                                               |
-|                                               |
-+-----+-----+-----+-----+-----+-----+-----+-----+
-|         SIZE          |       PURPOSE         |
-+-----+-----+-----+-----+-----+-----+-----+-----+
-|                   EXPIRATION                  |
-+-----+-----+-----+-----+-----+-----+-----+-----+
-|                    BDATA                      /
-/                                               /
-/                                               |
-+-----+-----+-----+-----+-----+-----+-----+-----+
-           </pre>
-</div>
-<figcaption><a href="#figure-9" class="selfRef">Figure 
9</a></figcaption></figure>
-</div>
-<p id="section-4.2-3">where:<a href="#section-4.2-3" class="pilcrow">¶</a></p>
-<dl class="dlParallel" id="section-4.2-4">
-          <dt id="section-4.2-4.1">SIGNATURE</dt>
-<dd id="section-4.2-4.2">
-           A 512-bit ECDSA deterministic signature compliant with
-           <span>[<a href="#RFC6979" class="xref">RFC6979</a>]</span>. The 
signature is computed over the data
-           following the PUBLIC KEY field.
-           The signature is created using the derived private key "d_h" (see
-           <a href="#publish" class="xref">Section 4</a>).<a 
href="#section-4.2-4.2" class="pilcrow">¶</a>
-</dd>
-<dt id="section-4.2-4.3">PUBLIC KEY</dt>
-<dd id="section-4.2-4.4">
-           is the 256-bit public key "zk_h" to be used to verify SIGNATURE. The
-           wire format of this value is defined in <span>[<a href="#RFC8032" 
class="xref">RFC8032</a>]</span>,
-           Section 5.1.5.<a href="#section-4.2-4.4" class="pilcrow">¶</a>
-</dd>
-<dt id="section-4.2-4.5">SIZE</dt>
-<dd id="section-4.2-4.6">
-           A 32-bit value containing the length of the signed data following 
the
-           PUBLIC KEY field in network byte order. This value always includes 
the
-           length of the fields SIZE (4), PURPOSE (4) and EXPIRATION (8) in
-           addition to the length of the BDATA.  While a 32-bit value is used,
-           implementations MAY refuse to publish blocks beyond a certain
-           size significantly below 4 GB. However, a minimum block size of
-           62 kilobytes MUST be supported.<a href="#section-4.2-4.6" 
class="pilcrow">¶</a>
-</dd>
-<dt id="section-4.2-4.7">PURPOSE</dt>
-<dd id="section-4.2-4.8">
-           A 32-bit signature purpose flag. This field MUST be 15 (in network
-           byte order).<a href="#section-4.2-4.8" class="pilcrow">¶</a>
-</dd>
-<dt id="section-4.2-4.9">EXPIRATION</dt>
-<dd id="section-4.2-4.10">
-           Specifies when the RRBLOCK expires and the encrypted block
-           SHOULD be removed from the DHT and caches as it is likely stale.
-           However, applications MAY continue to use non-expired individual
-           records until they expire.  The value MUST be set to the
-           expiration time of the resource record contained within this block 
with the
-           smallest expiration time.
-           If a records block includes shadow records, then the maximum
-           expiration time of all shadow records with matching type and the
-           expiration times of the non-shadow records is considered.
-           This is a 64-bit absolute date in microseconds since midnight
-           (0 hour), January 1, 1970 in network byte order.<a 
href="#section-4.2-4.10" class="pilcrow">¶</a>
-</dd>
-<dt id="section-4.2-4.11">BDATA</dt>
-<dd id="section-4.2-4.12">
-           The encrypted resource records with a total size of SIZE - 16.<a 
href="#section-4.2-4.12" class="pilcrow">¶</a>
-</dd>
-</dl>
-</section>
-</div>
-<div id="recordencryption">
-<section id="section-4.3">
-        <h3 id="name-record-data-encryption-and-">
-<a href="#section-4.3" class="section-number selfRef">4.3. </a><a 
href="#name-record-data-encryption-and-" class="section-name selfRef">Record 
Data Encryption and Decryption</a>
-        </h3>
-<p id="section-4.3-1">
-         A symmetric encryption scheme is used to encrypt the resource records
-         set RDATA into the BDATA field of a GNS RRBLOCK.
-         The wire format of the RDATA looks as follows:<a 
href="#section-4.3-1" class="pilcrow">¶</a></p>
-<div id="figure_rdata">
-<figure id="figure-10">
-          <div class="artwork art-text alignLeft" id="section-4.3-2.1">
-<pre>
-0     8     16    24    32    40    48    56
-+-----+-----+-----+-----+-----+-----+-----+-----+
-|     RR COUNT          |        EXPIRA-        /
-+-----+-----+-----+-----+-----+-----+-----+-----+
-/         -TION         |       DATA SIZE       |
-+-----+-----+-----+-----+-----+-----+-----+-----+
-|         TYPE          |          FLAGS        |
-+-----+-----+-----+-----+-----+-----+-----+-----+
-|                      DATA                     /
-/                                               /
-/                                               |
-+-----+-----+-----+-----+-----+-----+-----+-----+
-|                   EXPIRATION                  |
-+-----+-----+-----+-----+-----+-----+-----+-----+
-|       DATA SIZE       |          TYPE         |
-+-----+-----+-----+-----+-----+-----+-----+-----+
-|           FLAGS       |        DATA           /
-+-----+-----+-----+-----+                       /
-/                       +-----------------------/
-/                       |                       /
-+-----------------------+                       /
-/                     PADDING                   /
-/                                               /
-           </pre>
-</div>
-<figcaption><a href="#figure-10" class="selfRef">Figure 
10</a></figcaption></figure>
-</div>
-<p id="section-4.3-3">where:<a href="#section-4.3-3" class="pilcrow">¶</a></p>
-<dl class="dlParallel" id="section-4.3-4">
-          <dt id="section-4.3-4.1">RR COUNT</dt>
-<dd id="section-4.3-4.2">
-           A 32-bit value containing the number of variable-length resource
-           records which are
-           following after this field in network byte order.<a 
href="#section-4.3-4.2" class="pilcrow">¶</a>
-</dd>
-<dt id="section-4.3-4.3">EXPIRATION, DATA SIZE, TYPE, FLAGS and DATA</dt>
-<dd id="section-4.3-4.4">
-           These fields were defined
-           in the resource record format in <a href="#rrecords" 
class="xref">Section 3</a>.
-           There MUST be a total of RR COUNT of these resource records
-           present.<a href="#section-4.3-4.4" class="pilcrow">¶</a>
-</dd>
-<dt id="section-4.3-4.5">PADDING</dt>
-<dd id="section-4.3-4.6">
-           The padding MUST contain the value 0 in all octets.
-           The padding MUST ensure that the size of the RDATA WITHOUT the RR
-           COUNT field is a power of two.
-           As a special exception, record sets with (only) a PKEY record type
-           are never padded. Note that a record set with a PKEY record MUST NOT
-           contain other records.<a href="#section-4.3-4.6" 
class="pilcrow">¶</a>
-</dd>
-</dl>
-<p id="section-4.3-5">
-         The symmetric keys and initialization vectors are derived from the
-         record label and the zone key "zk". For decryption of the resource
-         records block payload, the key material "K" and initialization vector
-         "IV" for the symmetric cipher are derived as follows:<a 
href="#section-4.3-5" class="pilcrow">¶</a></p>
-<div class="artwork art-text alignLeft" id="section-4.3-6">
-<pre>
-PRK_k := HKDF-Extract ("gns-aes-ctx-key", zk)
-PRK_iv := HKDF-Extract ("gns-aes-ctx-iv", zk)
-K := HKDF-Expand (PRK_k, label, 512 / 8);
-IV := HKDF-Expand (PRK_iv, label, 256 / 8)
-         </pre><a href="#section-4.3-6" class="pilcrow">¶</a>
-</div>
-<p id="section-4.3-7">
-         HKDF is a hash-based key derivation function as defined in
-         <span>[<a href="#RFC5869" class="xref">RFC5869</a>]</span>. 
Specifically, HMAC-SHA512 is used for the
-         extraction phase and HMAC-SHA256 for the expansion phase.
-         The output keying material is 64 octets (512 bit) for the symmetric
-         keys and 32 octets (256 bit) for the initialization vectors.
-         We divide the resulting keying material "K" into a 256-bit AES
-         <span>[<a href="#RFC3826" class="xref">RFC3826</a>]</span> key
-         and a 256-bit TWOFISH <span>[<a href="#TWOFISH" 
class="xref">TWOFISH</a>]</span> key:<a href="#section-4.3-7" 
class="pilcrow">¶</a></p>
-<div id="figure_hkdf_keys">
-<figure id="figure-11">
-          <div class="artwork art-text alignLeft" id="section-4.3-8.1">
-<pre>
-0     8     16    24    32    40    48    56
-+-----+-----+-----+-----+-----+-----+-----+-----+
-|                    AES KEY                    |
-|                                               |
-|                                               |
-|                                               |
-+-----+-----+-----+-----+-----+-----+-----+-----+
-|                  TWOFISH KEY                  |
-|                                               |
-|                                               |
-|                                               |
-+-----+-----+-----+-----+-----+-----+-----+-----+
-           </pre>
-</div>
-<figcaption><a href="#figure-11" class="selfRef">Figure 
11</a></figcaption></figure>
-</div>
-<p id="section-4.3-9">
-         Similarly, we divide "IV" into a 128-bit initialization vector
-         and a 128-bit initialization vector:<a href="#section-4.3-9" 
class="pilcrow">¶</a></p>
-<div id="figure_hkdf_ivs">
-<figure id="figure-12">
-          <div class="artwork art-text alignLeft" id="section-4.3-10.1">
-<pre>
-0     8     16    24    32    40    48    56
-+-----+-----+-----+-----+-----+-----+-----+-----+
-|                    AES IV                     |
-|                                               |
-+-----+-----+-----+-----+-----+-----+-----+-----+
-|                  TWOFISH IV                   |
-|                                               |
-+-----+-----+-----+-----+-----+-----+-----+-----+
-           </pre>
-</div>
-<figcaption><a href="#figure-12" class="selfRef">Figure 
12</a></figcaption></figure>
-</div>
-<p id="section-4.3-11">
-         The keys and IVs are used for a CFB128-AES-256 and
-         CFB128-TWOFISH-256 chained symmetric cipher. Both ciphers are used in
-         Cipher FeedBack (CFB) mode <span>[<a href="#RFC3826" 
class="xref">RFC3826</a>]</span>.<a href="#section-4.3-11" 
class="pilcrow">¶</a></p>
-<div class="artwork art-text alignLeft" id="section-4.3-12">
-<pre>
-RDATA := AES(K[0:31], IV[0:15],
-             TWOFISH(K[32:63], IV[16:31], BDATA))
-BDATA := TWOFISH(K[32:63], IV[16:31],
-                 AES(K[0:31], IV[0:15], RDATA))
-         </pre><a href="#section-4.3-12" class="pilcrow">¶</a>
-</div>
-</section>
-</div>
-</section>
-</div>
-<div id="encoding">
-<section id="section-5">
-      <h2 id="name-internationalization-and-ch">
-<a href="#section-5" class="section-number selfRef">5. </a><a 
href="#name-internationalization-and-ch" class="section-name 
selfRef">Internationalization and Character Encoding</a>
-      </h2>
-<p id="section-5-1">
-       All labels in GNS are encoded in UTF-8 <span>[<a href="#RFC3629" 
class="xref">RFC3629</a>]</span>.
-       This does not include any DNS names found in DNS records, such as CNAME
-       records, which are internationalized through the IDNA specifications
-       <span>[<a href="#RFC5890" class="xref">RFC5890</a>]</span>.<a 
href="#section-5-1" class="pilcrow">¶</a></p>
-</section>
-</div>
-<div id="resolution">
-<section id="section-6">
-      <h2 id="name-name-resolution">
-<a href="#section-6" class="section-number selfRef">6. </a><a 
href="#name-name-resolution" class="section-name selfRef">Name Resolution</a>
-      </h2>
-<p id="section-6-1">
-       Names in GNS are resolved by recursively querying the DHT record 
storage.
-       In the following, we define how resolution is initiated and each
-       iteration in the resolution is processed.<a href="#section-6-1" 
class="pilcrow">¶</a></p>
-<p id="section-6-2">
-       GNS resolution of a name must start in a given starting zone indicated 
using
-       a zone public key.
-       Details on how the starting zone may be determined is discussed in
-       <a href="#governance" class="xref">Section 8</a>.<a href="#section-6-2" 
class="pilcrow">¶</a></p>
-<p id="section-6-3">
-       When GNS name resolution is requested, a desired record type MAY be
-       provided by the client.
-       The GNS resolver will use the desired record type to guide
-       processing, for example by providing conversion of VPN records to A
-       or AAAA records, if that is desired.
-
-       However, filtering of record sets according to the required record
-       types MUST still be done by the client after the resource record set
-       is retrieved.<a href="#section-6-3" class="pilcrow">¶</a></p>
-<div id="recursion">
-<section id="section-6.1">
-        <h3 id="name-recursion">
-<a href="#section-6.1" class="section-number selfRef">6.1. </a><a 
href="#name-recursion" class="section-name selfRef">Recursion</a>
-        </h3>
-<p id="section-6.1-1">
-           In each step of the recursive name resolution, there is an
-           authoritative zone zk and a name to resolve. The name may be empty.
-           Initially, the authoritative zone is the start zone. If the name
-           is empty, it is interpreted as the apex label "@".<a 
href="#section-6.1-1" class="pilcrow">¶</a></p>
-<p id="section-6.1-2">
-           From here, the following steps are recursively executed, in 
order:<a href="#section-6.1-2" class="pilcrow">¶</a></p>
-<ol start="1" type="1" class="normal" id="section-6.1-3">
-          <li id="section-6.1-3.1">Extract the right-most label from the name 
to look up.<a href="#section-6.1-3.1" class="pilcrow">¶</a>
-</li>
-<li id="section-6.1-3.2">Calculate q using the label and zk as defined in
-           <a href="#blinding" class="xref">Section 4.1</a>.<a 
href="#section-6.1-3.2" class="pilcrow">¶</a>
-</li>
-<li id="section-6.1-3.3">Perform a DHT query GET(q) to retrieve the RRBLOCK.<a 
href="#section-6.1-3.3" class="pilcrow">¶</a>
-</li>
-<li id="section-6.1-3.4">Verify and process the RRBLOCK and decrypt the BDATA 
contained
-             in it as defined in <a href="#recordencryption" 
class="xref">Section 4.3</a>.<a href="#section-6.1-3.4" class="pilcrow">¶</a>
-</li>
-</ol>
-<p id="section-6.1-4">
-           Upon receiving the RRBLOCK from the DHT, apart from verifying the
-           provided signature, the resolver MUST check that the authoritative
-           zone key was used to sign the record:
-           The derived zone key "h*zk" MUST match the public key provided in
-           the RRBLOCK, otherwise the RRBLOCK MUST be ignored and the DHT 
lookup
-           GET(q) MUST continue.<a href="#section-6.1-4" 
class="pilcrow">¶</a></p>
-</section>
-</div>
-<div id="record_processing">
-<section id="section-6.2">
-        <h3 id="name-record-processing">
-<a href="#section-6.2" class="section-number selfRef">6.2. </a><a 
href="#name-record-processing" class="section-name selfRef">Record 
Processing</a>
-        </h3>
-<p id="section-6.2-1">
-           Record processing occurs at the end of a single recursion. We assume
-           that the RRBLOCK has been cryptographically verified and decrypted.
-           At this point, we must first determine if we have received a valid
-           record set in the context of the name we are trying to resolve:<a 
href="#section-6.2-1" class="pilcrow">¶</a></p>
-<ol start="1" type="1" class="normal" id="section-6.2-2">
-          <li id="section-6.2-2.1">
-           Case 1:
-           If the remainder of the name to resolve is empty and the record set
-           does not consist of a PKEY, CNAME or DNS2GNS record, the record set
-           is the result and the recursion is concluded.<a 
href="#section-6.2-2.1" class="pilcrow">¶</a>
-</li>
-<li id="section-6.2-2.2">
-     Case 2:
-     If the name to be resolved is of the format
-     "_SERVICE._PROTO" and the record set contains one or more matching BOX
-     records, the records in the BOX records are the result and the recusion
-     is concluded (<a href="#box_processing" class="xref">Section 
6.2.4</a>).<a href="#section-6.2-2.2" class="pilcrow">¶</a>
-</li>
-<li id="section-6.2-2.3">
-           Case 3:
-           If the remainder of the name to resolve is not empty and
-     does not match the "_SERVICE._PROTO" syntax, then the current record set
-           MUST consist of a single PKEY record (<a href="#pkey_processing" 
class="xref">Section 6.2.1</a>),
-           a single CNAME record (<a href="#cname_processing" 
class="xref">Section 6.2.3</a>),
-           or one or more GNS2DNS records (<a href="#gns2dns_processing" 
class="xref">Section 6.2.2</a>),
-           which are processed as described in the respective sections below.
-           The record set may include any number of supplemental records.
-           Otherwise, resolution fails
-           and the resolver MUST return an empty record set.
-
-     Finally, after the recursion terminates, the client preferences
-     for the record type SHOULD be considered. If a VPN record is found
-     and the client requests an A or AAAA record, the VPN record
-     SHOULD be converted (<a href="#vpn_processing" class="xref">Section 
6.2.5</a>)
-     if possible.<a href="#section-6.2-2.3" class="pilcrow">¶</a>
-</li>
-</ol>
-<div id="pkey_processing">
-<section id="section-6.2.1">
-          <h4 id="name-pkey-2">
-<a href="#section-6.2.1" class="section-number selfRef">6.2.1. </a><a 
href="#name-pkey-2" class="section-name selfRef">PKEY</a>
-          </h4>
-<p id="section-6.2.1-1">
-             When the resolver encounters a PKEY record and the remainder of
-             the name is not empty, resolution continues
-             recursively with the remainder of the name in the
-             GNS zone specified in the PKEY record.<a href="#section-6.2.1-1" 
class="pilcrow">¶</a></p>
-<p id="section-6.2.1-2">
-             If the remainder of the name to resolve is empty and we have
-             received a record set containing only a single PKEY record, the
-             recursion is continued with the PKEY as authoritative zone and
-             the empty apex label "@" as remaining name, except in the case
-             where the desired record type is PKEY, in which case the PKEY
-             record is returned and the resolution is concluded without
-             resolving the empty apex label.<a href="#section-6.2.1-2" 
class="pilcrow">¶</a></p>
-</section>
-</div>
-<div id="gns2dns_processing">
-<section id="section-6.2.2">
-          <h4 id="name-gns2dns-2">
-<a href="#section-6.2.2" class="section-number selfRef">6.2.2. </a><a 
href="#name-gns2dns-2" class="section-name selfRef">GNS2DNS</a>
-          </h4>
-<p id="section-6.2.2-1">
-             When a resolver encounters one or more GNS2DNS records and the 
remaining name
-             is empty and the desired record type is GNS2DNS, the GNS2DNS
-             records are returned.<a href="#section-6.2.2-1" 
class="pilcrow">¶</a></p>
-<p id="section-6.2.2-2">
-             Otherwise, it is expected that the resolver first resolves the
-             IP(s) of the specified DNS name server(s). GNS2DNS records MAY
-             contain numeric IPv4 or IPv6 addresses, allowing the resolver to
-             skip this step.
-             The DNS server names may themselves be names in GNS or DNS.
-             If the DNS server name ends in ".+", the rest of the name is to be
-             interpreted relative to the zone of the GNS2DNS record.
-             If the DNS server name ends in ".&lt;Base32(zk)&gt;", the DNS
-             server name is to be resolved against the GNS zone zk.<a 
href="#section-6.2.2-2" class="pilcrow">¶</a></p>
-<p id="section-6.2.2-3">
-             Multiple GNS2DNS records may be stored under the same label,
-             in which case the resolver MUST try all of them.
-             The resolver MAY try them in any order or even in parallel.
-             If multiple GNS2DNS records are present, the DNS name MUST be
-             identical for all of them, if not the resolution fails and an
-             emtpy record set is returned as the record set is invalid.<a 
href="#section-6.2.2-3" class="pilcrow">¶</a></p>
-<p id="section-6.2.2-4">
-             Once the IP addresses of the DNS servers have been determined,
-             the DNS name from the GNS2DNS record is appended
-             to the remainder of the name to be resolved, and
-             resolved by querying the DNS name server(s).  As the DNS servers
-             specified are possibly authoritative DNS servers, the GNS 
resolver MUST
-             support recursive resolution and MUST NOT delegate this to the
-             authoritative DNS servers.
-             The first successful recursive name resolution result
-             is returned to the client.
-             In addition, the resolver returns the queried DNS name as a
-             supplemental LEHO record (<a href="#gnsrecords_leho" 
class="xref">Section 3.4</a>) with a
-             relative expiration time of one hour.<a href="#section-6.2.2-4" 
class="pilcrow">¶</a></p>
-<p id="section-6.2.2-5">
-       GNS resolvers SHOULD offer a configuration
-       option to disable DNS processing to avoid information leakage
-       and provide a consistent security profile for all name resolutions.
-       Such resolvers would return an empty record set upon encountering
-       a GNS2DNS record during the recursion. However, if GNS2DNS records
-       are encountered in the record set for the apex and a GNS2DNS record
-       is expicitly requested by the application, such records MUST
-       still be returned, even if DNS support is disabled by the
-       GNS resolver configuration.<a href="#section-6.2.2-5" 
class="pilcrow">¶</a></p>
-</section>
-</div>
-<div id="cname_processing">
-<section id="section-6.2.3">
-          <h4 id="name-cname">
-<a href="#section-6.2.3" class="section-number selfRef">6.2.3. </a><a 
href="#name-cname" class="section-name selfRef">CNAME</a>
-          </h4>
-<p id="section-6.2.3-1">
-             If a CNAME record is encountered, the canonical name is
-             appended to the remaining name, except if the remaining name
-             is empty and the desired record type is CNAME, in which case
-             the resolution concludes with the CNAME record.
-             If the canonical name ends in ".+",
-             resolution continues in GNS with the new name in the
-             current zone.  Otherwise, the resulting name is resolved via the
-             default operating system name resolution process.
-             This may in turn again trigger a GNS resolution process depending
-             on the system configuration.<a href="#section-6.2.3-1" 
class="pilcrow">¶</a></p>
-<p id="section-6.2.3-2">
-             The recursive DNS resolution process may yield a CNAME as well
-             which in turn may either point into the DNS or GNS namespace
-             (if it ends in a ".&lt;Base32(zk)&gt;").
-             In order to prevent infinite loops, the resolver MUST
-             implement loop detections or limit the number of recursive
-             resolution steps.
-             If the last CNAME was a DNS name, the resolver returns the DNS 
name
-             as a supplemental LEHO record (<a href="#gnsrecords_leho" 
class="xref">Section 3.4</a>)
-             with a relative expiration time of one hour.<a 
href="#section-6.2.3-2" class="pilcrow">¶</a></p>
-</section>
-</div>
-<div id="box_processing">
-<section id="section-6.2.4">
-          <h4 id="name-box-2">
-<a href="#section-6.2.4" class="section-number selfRef">6.2.4. </a><a 
href="#name-box-2" class="section-name selfRef">BOX</a>
-          </h4>
-<p id="section-6.2.4-1">
-             When a BOX record is received, a GNS resolver must unbox it if the
-             name to be resolved continues with "_SERVICE._PROTO".
-             Otherwise, the BOX record is to be left untouched. This way, TLSA
-             (and SRV) records do not require a separate network request, and
-             TLSA records become inseparable from the corresponding address
-             records.<a href="#section-6.2.4-1" class="pilcrow">¶</a></p>
-</section>
-</div>
-<div id="vpn_processing">
-<section id="section-6.2.5">
-          <h4 id="name-vpn-2">
-<a href="#section-6.2.5" class="section-number selfRef">6.2.5. </a><a 
href="#name-vpn-2" class="section-name selfRef">VPN</a>
-          </h4>
-<p id="section-6.2.5-1">
-       At the end of the recursion,
-             if the queried record type is either A or AAAA and the retrieved
-             record set contains at least one VPN record, the resolver SHOULD
-             open a tunnel and return the IPv4 or IPv6 tunnel address,
-             respectively.
-             The type of tunnel depends on the contents of the VPN record data.
-             The VPN record MUST be returned if the resolver implementation
-             does not support setting up a tunnnel.<a href="#section-6.2.5-1" 
class="pilcrow">¶</a></p>
-</section>
-</div>
-<div id="nick_processing">
-<section id="section-6.2.6">
-          <h4 id="name-nick-2">
-<a href="#section-6.2.6" class="section-number selfRef">6.2.6. </a><a 
href="#name-nick-2" class="section-name selfRef">NICK</a>
-          </h4>
-<p id="section-6.2.6-1">
-             NIICK records are only relevant to the recursive resolver
-             if the record set in question is the final result which is to
-             be returned to the client. The encountered NICK records may either
-             be supplemental (see <a href="#rrecords" class="xref">Section 
3</a>) or
-             non-supplemental.
-             If the NICK record is supplemental, the resolver only returns the
-             record set if one of the non-supplemental records matches the
-             queried record type.<a href="#section-6.2.6-1" 
class="pilcrow">¶</a></p>
-<p id="section-6.2.6-2">
-             The differentiation between a supplemental and non-supplemental
-             NICK record allows the client to match the record to the
-             authoritative zone. Consider the following example:<a 
href="#section-6.2.6-2" class="pilcrow">¶</a></p>
-<figure id="figure-13">
-            <div class="artwork art-text alignLeft" id="section-6.2.6-3.1">
-<pre>
-Query: alice.doe (type=A)
-Result:
-A: 1.2.3.4
-NICK: eve
-         </pre>
-</div>
-<figcaption><a href="#figure-13" class="selfRef">Figure 
13</a></figcaption></figure>
-<p id="section-6.2.6-4">
-          In this example, the returned NICK record is non-supplemental.
-          For the client, this means that the NICK belongs to the zone
-          "alice.doe" and is published under the empty label along with an A
-          record. The NICK record should be interpreted as: The zone defined by
-          "alice.doe" wants to be referred to as "eve".
-          In contrast, consider the following:<a href="#section-6.2.6-4" 
class="pilcrow">¶</a></p>
-<figure id="figure-14">
-            <div class="artwork art-text alignLeft" id="section-6.2.6-5.1">
-<pre>
-Query: alice.doe (type=A)
-Result:
-A: 1.2.3.4
-NICK: john (Supplemental)
-         </pre>
-</div>
-<figcaption><a href="#figure-14" class="selfRef">Figure 
14</a></figcaption></figure>
-<p id="section-6.2.6-6">
-       In this case, the NICK record is marked as supplemental. This means that
-       the NICK record belongs to the zone "doe" and is published under the
-       label "alice" along with an A record. The NICK record should be
-       interpreted as: The zone defined by "doe" wants to be referred to as
-       "john". This distinction is likely useful for other records published as
-       supplemental.<a href="#section-6.2.6-6" class="pilcrow">¶</a></p>
-</section>
-</div>
-</section>
-</div>
-</section>
-</div>
-<div id="revocation">
-<section id="section-7">
-      <h2 id="name-zone-revocation">
-<a href="#section-7" class="section-number selfRef">7. </a><a 
href="#name-zone-revocation" class="section-name selfRef">Zone Revocation</a>
-      </h2>
-<p id="section-7-1">
-         Whenever a recursive resolver encounters a new GNS zone, it MUST
-         check against the local revocation list whether the respective
-         zone key has been revoked.  If the zone key was revoked, the
-         resolution MUST fail with an empty result set.<a href="#section-7-1" 
class="pilcrow">¶</a></p>
-<p id="section-7-2">
-         In order to revoke a zone key, a signed revocation object SHOULD be
-         published.
-         This object MUST be signed using the private zone key.
-         The revocation object is flooded in the overlay network. To prevent
-         flooding attacks, the revocation message MUST contain a proof of work
-         (PoW).
-         The revocation message including the PoW MAY be calculated
-         ahead of time to support timely revocation.<a href="#section-7-2" 
class="pilcrow">¶</a></p>
-<p id="section-7-3">
-         For all occurences below, "Argon2d" is the Password-based Key
-         Derivation Function as defined in <span>[<a href="#Argon2" 
class="xref">Argon2</a>]</span>. For the
-         PoW calculations the algorithm is instantiated with the
-         following parameters:<a href="#section-7-3" class="pilcrow">¶</a></p>
-<div class="artwork art-text alignLeft" id="section-7-4">
-<pre>
-S := "gnunet-revocation-proof-of-work" /* Salt */
-t := 3 /* Iterations */
-m := 1024 /* Memory size, 1 MiB */
-T := 64 /* Tag (=output) length in bytes */
-p := 1 /* Parallelization parameter */
-v := 0x13 /* Version */
-y := 0 /* Type (Argon2d) */
-X, K is unused
-         </pre><a href="#section-7-4" class="pilcrow">¶</a>
-</div>
-<p id="section-7-5">
-         The following is the message string "P" on which the PoW is
-         calculated:<a href="#section-7-5" class="pilcrow">¶</a></p>
-<div id="figure_revocation">
-<figure id="figure-15">
-        <div class="artwork art-text alignLeft" id="section-7-6.1">
-<pre>
-0     8     16    24    32    40    48    56
-+-----+-----+-----+-----+-----+-----+-----+-----+
-|                      POW                      |
-+-----------------------------------------------+
-|                   TIMESTAMP                   |
-+-----------------------------------------------+
-|                  PUBLIC KEY                   |
-|                                               |
-|                                               |
-|                                               |
-+-----+-----+-----+-----+-----+-----+-----+-----+
-           </pre>
-</div>
-<figcaption><a href="#figure-15" class="selfRef">Figure 
15</a></figcaption></figure>
-</div>
-<p id="section-7-7">where:<a href="#section-7-7" class="pilcrow">¶</a></p>
-<dl class="dlParallel" id="section-7-8">
-        <dt id="section-7-8.1">POW</dt>
-<dd id="section-7-8.2">
-           A 64-bit solution to the PoW.<a href="#section-7-8.2" 
class="pilcrow">¶</a>
-</dd>
-<dt id="section-7-8.3">TIMESTAMP</dt>
-<dd id="section-7-8.4">
-           denotes the absolute 64-bit expiration date of the record.
-           In microseconds since midnight (0 hour), January 1, 1970 in network
-           byte order.<a href="#section-7-8.4" class="pilcrow">¶</a>
-</dd>
-<dt id="section-7-8.5">PUBLIC KEY</dt>
-<dd id="section-7-8.6">
-           A 512-bit ECDSA deterministic signature compliant with
-           <span>[<a href="#RFC6979" class="xref">RFC6979</a>]</span> over the 
public zone zk of the zone
-           which is revoked and corresponds to the key used in the PoW.
-           The signature is created using the private zone key "d" (see
-           <a href="#zones" class="xref">Section 2</a>).<a 
href="#section-7-8.6" class="pilcrow">¶</a>
-</dd>
-</dl>
-<p id="section-7-9">
-         Traditionally, PoW schemes require to find a "POW" such that
-         at least D leading zeroes are found in the hash result.
-         D is then referred to as the "difficulty" of the PoW.
-         In order to reduce the variance in time it takes to calculate the
-         PoW, we require that a number "Z" different PoWs must be
-         found that on average have "D" leading zeroes.<a href="#section-7-9" 
class="pilcrow">¶</a></p>
-<p id="section-7-10">
-         The resulting proofs may then published and disseminated. The concrete
-         dissemination and publication methods are out of scope of this
-         document. Given an average difficulty of "D", the proofs have an
-         expiration time of EPOCH. With each additional bit difficulty, the
-         lifetime of the proof is prolonged for another EPOCH.
-         Consequently, by calculating a more difficult PoW, the lifetime of the
-         proof can be increased on demand by the zone owner.<a 
href="#section-7-10" class="pilcrow">¶</a></p>
-<p id="section-7-11">
-         The parameters are defined as follows:<a href="#section-7-11" 
class="pilcrow">¶</a></p>
-<dl class="dlParallel" id="section-7-12">
-        <dt id="section-7-12.1">Z</dt>
-<dd id="section-7-12.2">The number of PoWs required is fixed at 32.<a 
href="#section-7-12.2" class="pilcrow">¶</a>
-</dd>
-<dt id="section-7-12.3">D</dt>
-<dd id="section-7-12.4">The difficulty is fixed at 25.<a 
href="#section-7-12.4" class="pilcrow">¶</a>
-</dd>
-<dt id="section-7-12.5">EPOCH</dt>
-<dd id="section-7-12.6">A single epoch is fixed at 365 days.<a 
href="#section-7-12.6" class="pilcrow">¶</a>
-</dd>
-</dl>
-<p id="section-7-13">
-         Given that proof has been found, a revocation data object is defined
-         as follows:<a href="#section-7-13" class="pilcrow">¶</a></p>
-<div id="figure_revocationdata">
-<figure id="figure-16">
-        <div class="artwork art-text alignLeft" id="section-7-14.1">
-<pre>
-0     8     16    24    32    40    48    56
-+-----+-----+-----+-----+-----+-----+-----+-----+
-|                   TIMESTAMP                   |
-+-----+-----+-----+-----+-----+-----+-----+-----+
-|                      TTL                      |
-+-----+-----+-----+-----+-----+-----+-----+-----+
-|                     POW_0                     |
-+-----+-----+-----+-----+-----+-----+-----+-----+
-|                       ...                     |
-+-----+-----+-----+-----+-----+-----+-----+-----+
-|                     POW_Z-1                   |
-+-----------------------------------------------+
-|                   SIGNATURE                   |
-|                                               |
-|                                               |
-|                                               |
-|                                               |
-|                                               |
-|                                               |
-|                                               |
-+-----+-----+-----+-----+-----+-----+-----+-----+
-|                  PUBLIC KEY                   |
-|                                               |
-|                                               |
-|                                               |
-+-----+-----+-----+-----+-----+-----+-----+-----+
-           </pre>
-</div>
-<figcaption><a href="#figure-16" class="selfRef">Figure 
16</a></figcaption></figure>
-</div>
-<p id="section-7-15">where:<a href="#section-7-15" class="pilcrow">¶</a></p>
-<dl class="dlParallel" id="section-7-16">
-        <dt id="section-7-16.1">TIMESTAMP</dt>
-<dd id="section-7-16.2">
-           denotes the absolute 64-bit expiration date of the revocation.
-           In microseconds since midnight (0 hour), January 1, 1970 in network
-           byte order.<a href="#section-7-16.2" class="pilcrow">¶</a>
-</dd>
-<dt id="section-7-16.3">TTL</dt>
-<dd id="section-7-16.4">
-           denotes the relative 64-bit time to live of of the record in
-           microseconds also in network byte order. This field is informational
-           for a verifier. The verifier may discard revocation if the TTL
-           indicates that it is already expired. However, the actual TTL of the
-           revocation must be determined by examining the leading zeros in the
-           proof of work calculation.<a href="#section-7-16.4" 
class="pilcrow">¶</a>
-</dd>
-<dt id="section-7-16.5">POW_i</dt>
-<dd id="section-7-16.6">
-           The values calculated as part of the PoW. Each POW_i MUST
-           be unique in the set of POW values.<a href="#section-7-16.6" 
class="pilcrow">¶</a>
-</dd>
-<dt id="section-7-16.7">SIGNATURE</dt>
-<dd id="section-7-16.8">
-           A 512-bit ECDSA deterministic signature compliant with
-           <span>[<a href="#RFC6979" class="xref">RFC6979</a>]</span> over the 
public zone zk of the zone
-           which is revoked and corresponds to the key used in the PoW.
-           The signature is created using the private zone key "d" (see
-           <a href="#zones" class="xref">Section 2</a>).<a 
href="#section-7-16.8" class="pilcrow">¶</a>
-</dd>
-<dt id="section-7-16.9">PUBLIC KEY</dt>
-<dd id="section-7-16.10">
-           is the 256-bit public key "zk" of the zone which is being revoked 
and
-           the key to be used to verify SIGNATURE. The
-           wire format of this value is defined in <span>[<a href="#RFC8032" 
class="xref">RFC8032</a>]</span>,
-           Section 5.1.5.<a href="#section-7-16.10" class="pilcrow">¶</a>
-</dd>
-</dl>
-<p id="section-7-17">
-         The signature over the public key covers a 32 bit pseudo header
-         conceptually prefixed to the public key. The pseudo header includes
-         the key length and signature purpose:<a href="#section-7-17" 
class="pilcrow">¶</a></p>
-<div id="figure_revsigwithpseudo">
-<figure id="figure-17">
-        <div class="artwork art-text alignLeft" id="section-7-18.1">
-<pre>
-0     8     16    24    32    40    48    56
-+-----+-----+-----+-----+-----+-----+-----+-----+
-|         SIZE (0x30)   |       PURPOSE (0x03)  |
-+-----+-----+-----+-----+-----+-----+-----+-----+
-|                  PUBLIC KEY                   |
-|                                               |
-|                                               |
-|                                               |
-+-----+-----+-----+-----+-----+-----+-----+-----+
-|                   TIMESTAMP                   |
-+-----+-----+-----+-----+-----+-----+-----+-----+
-           </pre>
-</div>
-<figcaption><a href="#figure-17" class="selfRef">Figure 
17</a></figcaption></figure>
-</div>
-<p id="section-7-19">where:<a href="#section-7-19" class="pilcrow">¶</a></p>
-<dl class="dlParallel" id="section-7-20">
-        <dt id="section-7-20.1">SIZE</dt>
-<dd id="section-7-20.2">
-           A 32-bit value containing the length of the signed data in bytes
-           (48 bytes) in network byte order.<a href="#section-7-20.2" 
class="pilcrow">¶</a>
-</dd>
-<dt id="section-7-20.3">PURPOSE</dt>
-<dd id="section-7-20.4">
-           A 32-bit signature purpose flag. This field MUST be 3 (in network
-           byte order).<a href="#section-7-20.4" class="pilcrow">¶</a>
-</dd>
-<dt id="section-7-20.5">PUBLIC KEY / TIMESTAMP</dt>
-<dd id="section-7-20.6">Both values as defined in the revocation data object 
above.<a href="#section-7-20.6" class="pilcrow">¶</a>
-</dd>
-</dl>
-<p id="section-7-21">
-         In order to verify a revocation the following steps must be taken,
-         in order:<a href="#section-7-21" class="pilcrow">¶</a></p>
-<ol start="1" type="1" class="normal" id="section-7-22">
-        <li id="section-7-22.1">The current time MUST be between TIMESTAMP and
-           TIMESTAMP+TTL.<a href="#section-7-22.1" class="pilcrow">¶</a>
-</li>
-<li id="section-7-22.2">The signature MUST match the public key.<a 
href="#section-7-22.2" class="pilcrow">¶</a>
-</li>
-<li id="section-7-22.3">The set of POW values MUST NOT contain duplicates.<a 
href="#section-7-22.3" class="pilcrow">¶</a>
-</li>
-<li id="section-7-22.4">The average number of leading zeroes resulting from 
the provided
-           POW values D' MUST be greater than D.<a href="#section-7-22.4" 
class="pilcrow">¶</a>
-</li>
-<li id="section-7-22.5">The validation period (TTL) of the revocation is 
calculated as
-           (D'-D) * EPOCH * 1.1. The EPOCH is extended by
-           10% in order to deal with unsynchronized clocks.
-           The TTL added on top of the TIMESTAMP yields the
-           expiration date.<a href="#section-7-22.5" class="pilcrow">¶</a>
-</li>
-</ol>
-</section>
-</div>
-<div id="governance">
-<section id="section-8">
-      <h2 id="name-determining-the-root-zone-a">
-<a href="#section-8" class="section-number selfRef">8. </a><a 
href="#name-determining-the-root-zone-a" class="section-name 
selfRef">Determining the Root Zone and Zone Governance</a>
-      </h2>
-<p id="section-8-1">
-         The resolution of a GNS name must start in a given start zone
-         indicated to the resolver using any public zone key.
-         The local resolver may have a local start zone configured/hard-coded
-         which points to a local or remote start zone key.
-         A resolver client may also determine the start zone from the
-         suffix of the name given for resolution or using information
-   retrieved out of band.
-         The governance model of any zone is at the sole discretion
-         of the zone owner. However, the choice of start zone(s) is at the sole
-         discretion of the local system administrator or user.<a 
href="#section-8-1" class="pilcrow">¶</a></p>
-<p id="section-8-2">
-         This is an important distinguishing factor from the Domain Name System
-         where root zone governance is centralized at the Internet Corporation
-         for Assigned Names and Numbers (ICANN).
-         In DNS terminology, GNS roughly follows the idea of a hyper-hyper
-   local root zone deployment, with the difference that it is not
-   expected that all deployments use the same local root zone.<a 
href="#section-8-2" class="pilcrow">¶</a></p>
-<p id="section-8-3">
-         In the following, we give examples how a local client resolver SHOULD
-         discover the start zone.  The process given is not exhaustive and
-         clients MAY suppliement it with other mechanisms or ignore it if the
-   particular application requires a different process.<a href="#section-8-3" 
class="pilcrow">¶</a></p>
-<p id="section-8-4">
-         GNS clients SHOULD first try to interpret the top-level domain of
-         a GNS name as a zone key.
-         For example. if the top-level domain is a Base32-encoded public zone
-         key "zk", the root zone of the resolution process is implicitly given
-         by the name:<a href="#section-8-4" class="pilcrow">¶</a></p>
-<div class="artwork art-text alignLeft" id="section-8-5">
-<pre>
-Example name: www.example.&lt;Base32(zk)&gt;
-=&gt; Root zone: zk
-=&gt; Name to resolve from root zone: www.example
-         </pre><a href="#section-8-5" class="pilcrow">¶</a>
-</div>
-<p id="section-8-6">
-         In GNS, users MAY own and manage their own zones.
-         Each local zone SHOULD be associated with a single GNS label,
-   but users MAY choose to use longer names consisting of
-   multiple labels.
-         If the name of a locally managed zone matches the suffix
-   of the name to be resolved,
-   resolution SHOULD start from the respective local zone:<a 
href="#section-8-6" class="pilcrow">¶</a></p>
-<div class="artwork art-text alignLeft" id="section-8-7">
-<pre>
-Example name: www.example.gnu
-Local zones:
-fr = (d0,zk0)
-gnu = (d1,zk1)
-com = (d2,zk2)
-...
-=&gt; Entry zone: zk1
-=&gt; Name to resolve from entry zone: www.example
-         </pre><a href="#section-8-7" class="pilcrow">¶</a>
-</div>
-<p id="section-8-8">
-         Finally, additional "suffix to zone" mappings MAY be configured.
-         Suffix to zone key mappings SHOULD be configurable through a local
-         configuration file or database by the user or system administrator.
-         The suffix MAY consist of multiple GNS labels concatenated with a
-         ".". If multiple suffixes match the name to resolve, the longest
-         matching suffix MUST BE used. The suffix length of two results
-         cannot be equal, as this would indicate a misconfiguration.
-   If both a locally managed zone and a configuration entry exist
-   for the same suffix, the locally managed zone MUST have priority.<a 
href="#section-8-8" class="pilcrow">¶</a></p>
-<div class="artwork art-text alignLeft" id="section-8-9">
-<pre>
-Example name: www.example.gnu
-Local suffix mappings:
-gnu = zk0
-example.gnu = zk1
-example.com = zk2
-...
-=&gt; Entry zone: zk1
-=&gt; Name to resolve from entry zone: www
-         </pre><a href="#section-8-9" class="pilcrow">¶</a>
-</div>
-</section>
-</div>
-<div id="security">
-<section id="section-9">
-      <h2 id="name-security-considerations">
-<a href="#section-9" class="section-number selfRef">9. </a><a 
href="#name-security-considerations" class="section-name selfRef">Security 
Considerations</a>
-      </h2>
-<div id="security_crypto">
-<section id="section-9.1">
-        <h3 id="name-cryptography">
-<a href="#section-9.1" class="section-number selfRef">9.1. </a><a 
href="#name-cryptography" class="section-name selfRef">Cryptography</a>
-        </h3>
-<p id="section-9.1-1">
-           The security of cryptographic systems depends on both the strength 
of
-           the cryptographic algorithms chosen and the strength of the keys 
used
-           with those algorithms.  The security also depends on the engineering
-           of the protocol used by the system to ensure that there are no
-           non-cryptographic ways to bypass the security of the overall 
system.<a href="#section-9.1-1" class="pilcrow">¶</a></p>
-<p id="section-9.1-2">
-           This document concerns itself with the selection of cryptographic
-           algorithms for use in GNS.
-           The algorithms identified in this document are not known to be
-           broken (in the cryptographic sense) at the current time, and
-           cryptographic research so far leads us to believe that they are
-           likely to remain secure into the foreseeable future.  However, this
-           isn't necessarily forever, and it is expected that new revisions of
-           this document will be issued from time to time to reflect the 
current
-           best practices in this area.<a href="#section-9.1-2" 
class="pilcrow">¶</a></p>
-</section>
-</div>
-<div id="security_abuse">
-<section id="section-9.2">
-        <h3 id="name-abuse-mitigation">
-<a href="#section-9.2" class="section-number selfRef">9.2. </a><a 
href="#name-abuse-mitigation" class="section-name selfRef">Abuse mitigation</a>
-        </h3>
-<p id="section-9.2-1">
-           GNS names are UTF-8 strings. Consequently, GNS faces similar issues
-           with respect to name spoofing as DNS does for internationalized
-           domain names.
-           In DNS, attackers may register similar sounding or looking
-           names (see above) in order to execute phishing attacks.
-           GNS zone administrators must take into account this attack vector 
and
-           incorporate rules in order to mitigate it.<a href="#section-9.2-1" 
class="pilcrow">¶</a></p>
-<p id="section-9.2-2">
-           Further, DNS can be used to combat illegal content on the internet
-           by having the respective domains seized by authorities.
-           However, the same mechanisms can also be abused in order to impose
-           state censorship, which ist one of the motivations behind GNS.
-           Hence, such a seizure is, by design, difficult to impossible in 
GNS.<a href="#section-9.2-2" class="pilcrow">¶</a></p>
-</section>
-</div>
-<div id="security_keymanagement">
-<section id="section-9.3">
-        <h3 id="name-zone-management">
-<a href="#section-9.3" class="section-number selfRef">9.3. </a><a 
href="#name-zone-management" class="section-name selfRef">Zone management</a>
-        </h3>
-<p id="section-9.3-1">
-           In GNS, zone administrators need to manage and protect their zone
-           keys. Once a zone key is lost it cannot be recovered. Once it is
-           compromised it cannot be revoked (unless a revocation was
-           pre-calculated and is still available).
-           Zone administrators, and for GNS this includes end-users, are
-           required to responsibly and dilligently protect their cryptographic
-           keys.<a href="#section-9.3-1" class="pilcrow">¶</a></p>
-<p id="section-9.3-2">
-           Similarly, users are required to manage their local root zone.
-           In order to ensure integrity and availability or names, users must
-           ensure that their local root zone information is not compromised or
-           outdated.
-           It can be expected that the processing of zone revocations and an
-           initial root zone is provided with a GNS client implementation
-           ("drop shipping").
-           Extension and customization of the zone is at the full discretion of
-           the user.<a href="#section-9.3-2" class="pilcrow">¶</a></p>
-</section>
-</div>
-<div id="security_dht">
-<section id="section-9.4">
-        <h3 id="name-impact-of-underlying-dht">
-<a href="#section-9.4" class="section-number selfRef">9.4. </a><a 
href="#name-impact-of-underlying-dht" class="section-name selfRef">Impact of 
underlying DHT</a>
-        </h3>
-<p id="section-9.4-1">
-           This document does not specifiy the properties of the underlying
-           distributed hash table (DHT) which is required by any GNS
-           implementation. For implementors, it is important to note that
-           the properties of the DHT are directly inherited by the
-           GNS implementation. This includes both security as well as
-           other non-functional properties such as scalability and performance.
-           Implementors should take great care when selecting or implementing
-           a DHT for use in a GNS implementation.
-           DHTs with string security and performance guarantees exist
-           <span>[<a href="#R5N" class="xref">R5N</a>]</span>.
-           It should also be taken into consideration that GNS implementations
-           which build upon different DHT overlays are unlikely to be
-           interoperable with each other.<a href="#section-9.4-1" 
class="pilcrow">¶</a></p>
-</section>
-</div>
-<div id="security_rev">
-<section id="section-9.5">
-        <h3 id="name-revocations">
-<a href="#section-9.5" class="section-number selfRef">9.5. </a><a 
href="#name-revocations" class="section-name selfRef">Revocations</a>
-        </h3>
-<p id="section-9.5-1">
-           Zone administrators are advised to pre-generate zone revocations
-           and securely store the revocation information in case the zone
-           key is lost, compromised or replaced in the furture.
-           Pre-calculated revocations may become invalid due to expirations
-           or protocol changes such as epoch adjustments.
-           Conseuquently, implementors and users must make precautions in order
-           to manage revocations accordingly.<a href="#section-9.5-1" 
class="pilcrow">¶</a></p>
-<p id="section-9.5-2">
-           Revocation payloads do NOT include a 'new' key for key replacement.
-           In inclusion of such a key would have two major disadvantages:<a 
href="#section-9.5-2" class="pilcrow">¶</a></p>
-<p id="section-9.5-3">
-           If revocation is used after a private key was compromised,
-           allowing key replacement would be dangerous, because if an
-           adversary took over the private key, the adversary could then
-           broadcast a revocation with a key replacement. For the replacement,
-           the compromised owner would have no chance to issue even a
-           revocation. Thus, allowing a revocation message to replace a private
-           key makes dealing with key compromise situations worse.<a 
href="#section-9.5-3" class="pilcrow">¶</a></p>
-<p id="section-9.5-4">
-           Sometimes, key revocations are used with the objective of changing
-           cryptosystems. Migration to another cryptosystem by replacing keys
-           via a revocation message would only be secure as long as both
-           cryptosystems are still secure against forgery. Such a planned,
-           non-emergency migration to another cryptosystem should be done by
-           running zones for both ciphersystems in parallel for a while. The
-           migration would conclude by revoking the legacy zone key only once
-           it is deemed no longer secure, and hopefully after most users have
-           migrated to the replacement.<a href="#section-9.5-4" 
class="pilcrow">¶</a></p>
-</section>
-</div>
-</section>
-</div>
-<div id="iana">
-<section id="section-10">
-      <h2 id="name-gana-considerations">
-<a href="#section-10" class="section-number selfRef">10. </a><a 
href="#name-gana-considerations" class="section-name selfRef">GANA 
Considerations</a>
-      </h2>
-<p id="section-10-1">
-         GANA is requested to create an "GNU Name System Record Types" 
registry.
-The registry shall record for each entry:<a href="#section-10-1" 
class="pilcrow">¶</a></p>
-<ul>
-<li id="section-10-2.1">Name: The name of the record type (case-insensitive 
ASCII
-           string, restricted to alphanumeric characters<a 
href="#section-10-2.1" class="pilcrow">¶</a>
-</li>
-<li id="section-10-2.2">Number: 32-bit, above 65535<a href="#section-10-2.2" 
class="pilcrow">¶</a>
-</li>
-<li id="section-10-2.3">Comment: Optionally, a brief English text describing 
the purpose of
-           the record type (in UTF-8)<a href="#section-10-2.3" 
class="pilcrow">¶</a>
-</li>
-<li id="section-10-2.4">Contact: Optionally, the contact information of a 
person to contact for
-           further information<a href="#section-10-2.4" class="pilcrow">¶</a>
-</li>
-<li id="section-10-2.5">References: Optionally, references describing the 
record type
-           (such as an RFC)<a href="#section-10-2.5" class="pilcrow">¶</a>
-</li>
-</ul>
-<p id="section-10-3">
-         The registration policy for this sub-registry is "First Come First
-         Served", as described in <span>[<a href="#RFC8126" 
class="xref">RFC8126</a>]</span>.
-         GANA is requested to populate this registry as follows:<a 
href="#section-10-3" class="pilcrow">¶</a></p>
-<div id="figure_rrtypenums">
-<figure id="figure-18">
-        <div class="artwork art-text alignLeft" id="section-10-4.1">
-<pre>
-Number | Name    | Contact | References | Description
--------+---------+---------+------------+-------------------------
-65536  | PKEY    | N/A     | [This.I-D] | GNS zone delegation
-65537  | NICK    | N/A     | [This.I-D] | GNS zone nickname
-65538  | LEHO    | N/A     | [This.I-D] | GNS legacy hostname
-65539  | VPN     | N/A     | [This.I-D] | VPN resolution
-65540  | GNS2DNS | N/A     | [This.I-D] | Delegation to DNS
-65541  | BOX     | N/A     | [This.I-D] | Boxed record
-           </pre>
-</div>
-<figcaption><a href="#figure-18" class="selfRef">Figure 
18</a></figcaption></figure>
-</div>
-</section>
-</div>
-<section id="section-11">
-      <h2 id="name-test-vectors">
-<a href="#section-11" class="section-number selfRef">11. </a><a 
href="#name-test-vectors" class="section-name selfRef">Test Vectors</a>
-      </h2>
-<p id="section-11-1">
-         The following represents a test vector for a record set with a DNS
-         record of type "A" as well as a GNS record of type "PKEY"
-         under the label "test".<a href="#section-11-1" 
class="pilcrow">¶</a></p>
-<div class="artwork art-text alignLeft" id="section-11-2">
-<pre>
-         
-Zone private key (d):
-WGb/eoy8BDWvaK2vRab0xTlqvS0+PeS5HG5Rh4z4cWI=
-Zone public key (zk):
-n7TNZeJ+Ks6wQymnwjZXR/cj0ae8NZMZ/PcuDVrONAo=
-Label: test
-RRCOUNT: 2
-
-Record #0
-EXPIRATION: 1589117218087117
-DATA_SIZE: 4
-TYPE: 1
-FLAGS: 0
-DATA (base64):
-AQIDBA==
-DATA (Human readable):
-1.2.3.4
-
-Record #1
-EXPIRATION: 1589117218087117
-DATA_SIZE: 32
-TYPE: 65536
-FLAGS: 2
-DATA (base64):
-+AT14h9SMRAwkor+azlHpE8DkvsUyeQyN49NEmsOXew=
-DATA (Human readable):
-Z02FBRGZA8RH0C4JHBZ6PEA7MH7G74QV2K4Y8CHQHX6H4TREBQP0
-
-RDATA:
-AAWlSy9KYM0AAAAEAAAAAQAAAAABAgMEAAWlSy9KYM0AAAAgAAEAAAAAAAL4BPXi
-H1IxEDCSiv5rOUekTwOS+xTJ5DI3j00Saw5d7AAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
-
-BDATA:
-5e5936fttKU61GByslXav57Zgi4rac2N0F6VJCKC7NVn1YPJyiL/0+f2vZSUfHpk
-ZfRPv9clYgzO4m+PdRcYFpkG0vqmrFnDNJQRd/y9V2Wfg4ud82FK3CT9lcMpu6Sd
-fbZyE8PmL7cySfdMa/RsNWCVAES98UOvNJ7CaBDJlY2mb6iA
-
-RRBLOCK:
-Cqk3xJHTNxM1EE69iH33z0dK78FrhK+gUHMIUY//WHYCPZmbdgJc5Avb9uVTAAyT
-5No5uINZwxXuWpL72Xh4IIqWAE/BdKHS9deQusO6CSiZN1swM5zsupJq1qjgHusG
-AAAAlAAAAA8ABaVLL0pgzeXufd+n7bSlOtRgcrJV2r+e2YIuK2nNjdBelSQiguzV
-Z9WDycoi/9Pn9r2UlHx6ZGX0T7/XJWIMzuJvj3UXGBaZBtL6pqxZwzSUEXf8vVdl
-n4OLnfNhStwk/ZXDKbuknX22chPD5i+3Mkn3TGv0bDVglQBEvfFDrzSewmgQyZWN
-pm+ogA==
-           
-       </pre><a href="#section-11-2" class="pilcrow">¶</a>
-</div>
-<p id="section-11-3">
-         The following is an example revocation for a zone:<a 
href="#section-11-3" class="pilcrow">¶</a></p>
-<div class="artwork art-text alignLeft" id="section-11-4">
-<pre>
-         
-Zone private key (d):
-SLZnT2NK3cusTfuI0CM+XJiP4U43ZsCAv+Lk3FbIXHc=
-
-Zone public key (zk):
-bEclYC3aE2+fjSDDfRpdnv3gGHMckMceVbgymHZDlfA=
-
-Difficulty (5 base difficulty + 2 epochs): 7
-
-Proof:
-AAWkvp6KGBVAxXvM//8AALpHh010jxRdukeHTXSPEhq6R4dNdI8VDbpHh010jxUy
-ukeHTXSPGNK6R4dNdI8ZXLpHh010jxTTukeHTXSPFSW6R4dNdI8VarpHh010jxV3
-ukeHTXSPFnC6R4dNdI8X5rpHh010jxoJukeHTXSPGqm6R4dNdI8aurpHh010jxwD
-ukeHTXSPHGm6R4dNdI8cvLpHh010jxdGukeHTXSPF426R4dNdI8XxrpHh010jxif
-ukeHTXSPGL26R4dNdI8ZJLpHh010jxlTukeHTXSPGsa6R4dNdI8bfLpHh010jxuV
-ukeHTXSPHCi6R4dNdI8eC7pHh010jx4VukeHTXSPHhsJejeXmcDe4jcfEkWLqwIA
-8zG/gFIxNYu34usglSp+7w8bbtTgMD5hLGiR+xxhgpPh36dGz1KBZ9kAh9pz77yS
-bEclYC3aE2+fjSDDfRpdnv3gGHMckMceVbgymHZDlfA=
-         
-       </pre><a href="#section-11-4" class="pilcrow">¶</a>
-</div>
-</section>
-<section id="section-12">
-      <h2 id="name-normative-references">
-<a href="#section-12" class="section-number selfRef">12. </a><a 
href="#name-normative-references" class="section-name selfRef">Normative 
References</a>
-      </h2>
-<dl class="references">
-<dt id="RFC1034">[RFC1034]</dt>
-<dd>
-<span class="refAuthor">Mockapetris, P.</span>, <span class="refTitle">"Domain 
names - concepts and facilities"</span>, <span class="seriesInfo">STD 
13</span>, <span class="seriesInfo">RFC 1034</span>, <span 
class="seriesInfo">DOI 10.17487/RFC1034</span>, <time 
datetime="1987-11">November 1987</time>, <span>&lt;<a 
href="https://www.rfc-editor.org/info/rfc1034";>https://www.rfc-editor.org/info/rfc1034</a>&gt;</span>.
 </dd>
-<dt id="RFC1035">[RFC1035]</dt>
-<dd>
-<span class="refAuthor">Mockapetris, P.</span>, <span class="refTitle">"Domain 
names - implementation and specification"</span>, <span class="seriesInfo">STD 
13</span>, <span class="seriesInfo">RFC 1035</span>, <span 
class="seriesInfo">DOI 10.17487/RFC1035</span>, <time 
datetime="1987-11">November 1987</time>, <span>&lt;<a 
href="https://www.rfc-editor.org/info/rfc1035";>https://www.rfc-editor.org/info/rfc1035</a>&gt;</span>.
 </dd>
-<dt id="RFC2782">[RFC2782]</dt>
-<dd>
-<span class="refAuthor">Gulbrandsen, A.</span><span class="refAuthor">, Vixie, 
P.</span><span class="refAuthor">, and L. Esibov</span>, <span 
class="refTitle">"A DNS RR for specifying the location of services (DNS 
SRV)"</span>, <span class="seriesInfo">RFC 2782</span>, <span 
class="seriesInfo">DOI 10.17487/RFC2782</span>, <time 
datetime="2000-02">February 2000</time>, <span>&lt;<a 
href="https://www.rfc-editor.org/info/rfc2782";>https://www.rfc-editor.org/info/rfc2782</a>&gt;</span>.
 </dd>
-<dt id="RFC2119">[RFC2119]</dt>
-<dd>
-<span class="refAuthor">Bradner, S.</span>, <span class="refTitle">"Key words 
for use in RFCs to Indicate Requirement Levels"</span>, <span 
class="seriesInfo">BCP 14</span>, <span class="seriesInfo">RFC 2119</span>, 
<span class="seriesInfo">DOI 10.17487/RFC2119</span>, <time 
datetime="1997-03">March 1997</time>, <span>&lt;<a 
href="https://www.rfc-editor.org/info/rfc2119";>https://www.rfc-editor.org/info/rfc2119</a>&gt;</span>.
 </dd>
-<dt id="RFC3629">[RFC3629]</dt>
-<dd>
-<span class="refAuthor">Yergeau, F.</span>, <span class="refTitle">"UTF-8, a 
transformation format of ISO 10646"</span>, <span class="seriesInfo">STD 
63</span>, <span class="seriesInfo">RFC 3629</span>, <span 
class="seriesInfo">DOI 10.17487/RFC3629</span>, <time 
datetime="2003-11">November 2003</time>, <span>&lt;<a 
href="https://www.rfc-editor.org/info/rfc3629";>https://www.rfc-editor.org/info/rfc3629</a>&gt;</span>.
 </dd>
-<dt id="RFC3826">[RFC3826]</dt>
-<dd>
-<span class="refAuthor">Blumenthal, U.</span><span class="refAuthor">, Maino, 
F.</span><span class="refAuthor">, and K. McCloghrie</span>, <span 
class="refTitle">"The Advanced Encryption Standard (AES) Cipher Algorithm in 
the SNMP User-based Security Model"</span>, <span class="seriesInfo">RFC 
3826</span>, <span class="seriesInfo">DOI 10.17487/RFC3826</span>, <time 
datetime="2004-06">June 2004</time>, <span>&lt;<a 
href="https://www.rfc-editor.org/info/rfc3826";>https://www.rfc-editor.org/ [...]
-<dt id="RFC5869">[RFC5869]</dt>
-<dd>
-<span class="refAuthor">Krawczyk, H.</span><span class="refAuthor"> and P. 
Eronen</span>, <span class="refTitle">"HMAC-based Extract-and-Expand Key 
Derivation Function (HKDF)"</span>, <span class="seriesInfo">RFC 5869</span>, 
<span class="seriesInfo">DOI 10.17487/RFC5869</span>, <time 
datetime="2010-05">May 2010</time>, <span>&lt;<a 
href="https://www.rfc-editor.org/info/rfc5869";>https://www.rfc-editor.org/info/rfc5869</a>&gt;</span>.
 </dd>
-<dt id="RFC5890">[RFC5890]</dt>
-<dd>
-<span class="refAuthor">Klensin, J.</span>, <span 
class="refTitle">"Internationalized Domain Names for Applications (IDNA): 
Definitions and Document Framework"</span>, <span class="seriesInfo">RFC 
5890</span>, <span class="seriesInfo">DOI 10.17487/RFC5890</span>, <time 
datetime="2010-08">August 2010</time>, <span>&lt;<a 
href="https://www.rfc-editor.org/info/rfc5890";>https://www.rfc-editor.org/info/rfc5890</a>&gt;</span>.
 </dd>
-<dt id="RFC5891">[RFC5891]</dt>
-<dd>
-<span class="refAuthor">Klensin, J.</span>, <span 
class="refTitle">"Internationalized Domain Names in Applications (IDNA): 
Protocol"</span>, <span class="seriesInfo">RFC 5891</span>, <span 
class="seriesInfo">DOI 10.17487/RFC5891</span>, <time datetime="2010-08">August 
2010</time>, <span>&lt;<a 
href="https://www.rfc-editor.org/info/rfc5891";>https://www.rfc-editor.org/info/rfc5891</a>&gt;</span>.
 </dd>
-<dt id="RFC6895">[RFC6895]</dt>
-<dd>
-<span class="refAuthor">Eastlake 3rd, D.</span>, <span 
class="refTitle">"Domain Name System (DNS) IANA Considerations"</span>, <span 
class="seriesInfo">BCP 42</span>, <span class="seriesInfo">RFC 6895</span>, 
<span class="seriesInfo">DOI 10.17487/RFC6895</span>, <time 
datetime="2013-04">April 2013</time>, <span>&lt;<a 
href="https://www.rfc-editor.org/info/rfc6895";>https://www.rfc-editor.org/info/rfc6895</a>&gt;</span>.
 </dd>
-<dt id="RFC6979">[RFC6979]</dt>
-<dd>
-<span class="refAuthor">Pornin, T.</span>, <span 
class="refTitle">"Deterministic Usage of the Digital Signature Algorithm (DSA) 
and Elliptic Curve Digital Signature Algorithm (ECDSA)"</span>, <span 
class="seriesInfo">RFC 6979</span>, <span class="seriesInfo">DOI 
10.17487/RFC6979</span>, <time datetime="2013-08">August 2013</time>, 
<span>&lt;<a 
href="https://www.rfc-editor.org/info/rfc6979";>https://www.rfc-editor.org/info/rfc6979</a>&gt;</span>.
 </dd>
-<dt id="RFC7748">[RFC7748]</dt>
-<dd>
-<span class="refAuthor">Langley, A.</span><span class="refAuthor">, Hamburg, 
M.</span><span class="refAuthor">, and S. Turner</span>, <span 
class="refTitle">"Elliptic Curves for Security"</span>, <span 
class="seriesInfo">RFC 7748</span>, <span class="seriesInfo">DOI 
10.17487/RFC7748</span>, <time datetime="2016-01">January 2016</time>, 
<span>&lt;<a 
href="https://www.rfc-editor.org/info/rfc7748";>https://www.rfc-editor.org/info/rfc7748</a>&gt;</span>.
 </dd>
-<dt id="RFC8032">[RFC8032]</dt>
-<dd>
-<span class="refAuthor">Josefsson, S.</span><span class="refAuthor"> and I. 
Liusvaara</span>, <span class="refTitle">"Edwards-Curve Digital Signature 
Algorithm (EdDSA)"</span>, <span class="seriesInfo">RFC 8032</span>, <span 
class="seriesInfo">DOI 10.17487/RFC8032</span>, <time 
datetime="2017-01">January 2017</time>, <span>&lt;<a 
href="https://www.rfc-editor.org/info/rfc8032";>https://www.rfc-editor.org/info/rfc8032</a>&gt;</span>.
 </dd>
-<dt id="RFC8126">[RFC8126]</dt>
-<dd>
-<span class="refAuthor">Cotton, M.</span><span class="refAuthor">, Leiba, 
B.</span><span class="refAuthor">, and T. Narten</span>, <span 
class="refTitle">"Guidelines for Writing an IANA Considerations Section in 
RFCs"</span>, <span class="seriesInfo">BCP 26</span>, <span 
class="seriesInfo">RFC 8126</span>, <span class="seriesInfo">DOI 
10.17487/RFC8126</span>, <time datetime="2017-06">June 2017</time>, 
<span>&lt;<a 
href="https://www.rfc-editor.org/info/rfc8126";>https://www.rfc-editor.org/ [...]
-<dt id="TWOFISH">[TWOFISH]</dt>
-<dd>
-<span class="refAuthor">Schneier, B.</span>, <span class="refTitle">"The 
Twofish Encryptions Algorithm: A 128-Bit Block Cipher, 1st Edition"</span>, 
<time datetime="1999-03">March 1999</time>. </dd>
-<dt id="GNS">[GNS]</dt>
-<dd>
-<span class="refAuthor">Wachs, M.</span><span class="refAuthor">, 
Schanzenbach, M.</span><span class="refAuthor">, and C. Grothoff</span>, <span 
class="refTitle">"A Censorship-Resistant, Privacy-Enhancing and Fully 
Decentralized Name System"</span>, <time datetime="2014">2014</time>, 
<span>&lt;<a 
href="https://doi.org/10.1007/978-3-319-12280-9_9";>https://doi.org/10.1007/978-3-319-12280-9_9</a>&gt;</span>.
 </dd>
-<dt id="R5N">[R5N]</dt>
-<dd>
-<span class="refAuthor">Evans, N. S.</span><span class="refAuthor"> and C. 
Grothoff</span>, <span class="refTitle">"R5N: Randomized recursive routing for 
restricted-route networks"</span>, <time datetime="2011">2011</time>, 
<span>&lt;<a 
href="https://doi.org/10.1109/ICNSS.2011.6060022";>https://doi.org/10.1109/ICNSS.2011.6060022</a>&gt;</span>.
 </dd>
-<dt id="Argon2">[Argon2]</dt>
-<dd>
-<span class="refAuthor">Biryukov, A.</span><span class="refAuthor">, Dinu, 
D.</span><span class="refAuthor">, Khovratovich, D.</span><span 
class="refAuthor">, and S. Josefsson</span>, <span class="refTitle">"The 
memory-hard Argon2 password hash and proof-of-work function"</span>, <time 
datetime="2020-03">March 2020</time>, <span>&lt;<a 
href="https://datatracker.ietf.org/doc/draft-irtf-cfrg-argon2/";>https://datatracker.ietf.org/doc/draft-irtf-cfrg-argon2/</a>&gt;</span>.
 </dd>
-</dl>
-</section>
-<div id="authors-addresses">
-<section id="section-appendix.a">
-      <h2 id="name-authors-addresses">
-<a href="#name-authors-addresses" class="section-name selfRef">Authors' 
Addresses</a>
-      </h2>
-<address class="vcard">
-        <div dir="auto" class="left"><span class="fn nameRole">Martin 
Schanzenbach</span></div>
-<div dir="auto" class="left"><span class="org">GNUnet e.V.</span></div>
-<div dir="auto" class="left"><span class="street-address">Boltzmannstrasse 
3</span></div>
-<div dir="auto" class="left">
-<span class="postal-code">85748</span> <span class="locality">Garching</span>
-</div>
-<div dir="auto" class="left"><span class="country-name">Germany</span></div>
-<div class="email">
-<span>Email:</span>
-<a href="mailto:address@hidden"; class="email">address@hidden</a>
-</div>
-</address>
-<address class="vcard">
-        <div dir="auto" class="left"><span class="fn nameRole">Christian 
Grothoff</span></div>
-<div dir="auto" class="left"><span class="org">Berner 
Fachhochschule</span></div>
-<div dir="auto" class="left"><span class="street-address">Hoeheweg 
80</span></div>
-<div dir="auto" class="left">
-<span class="postal-code">2501</span> <span class="locality">Biel/Bienne</span>
-</div>
-<div dir="auto" class="left"><span 
class="country-name">Switzerland</span></div>
-<div class="email">
-<span>Email:</span>
-<a href="mailto:address@hidden"; class="email">address@hidden</a>
-</div>
-</address>
-<address class="vcard">
-        <div dir="auto" class="left"><span class="fn nameRole">Bernd 
Fix</span></div>
-<div dir="auto" class="left"><span class="org">GNUnet e.V.</span></div>
-<div dir="auto" class="left"><span class="street-address">Boltzmannstrasse 
3</span></div>
-<div dir="auto" class="left">
-<span class="postal-code">85748</span> <span class="locality">Garching</span>
-</div>
-<div dir="auto" class="left"><span class="country-name">Germany</span></div>
-<div class="email">
-<span>Email:</span>
-<a href="mailto:address@hidden"; class="email">address@hidden</a>
-</div>
-</address>
-</section>
-</div>
-<script>var toc = document.getElementById("toc");
-var tocToggle = toc.querySelector("h2");
-var tocNav = toc.querySelector("nav");
-
-// mobile menu toggle
-tocToggle.onclick = function(event) {
-    if (window.innerWidth < 1024) {
- var tocNavDisplay = tocNav.currentStyle ? tocNav.currentStyle.display : 
getComputedStyle(tocNav, null).display;
- if (tocNavDisplay == "none") {
-     tocNav.style.display = "block";
- } else {
-     tocNav.style.display = "none";
- }
-    }
-}
-
-// toc anchor scroll to anchor
-tocNav.addEventListener("click", function (event) {
-    event.preventDefault();
-    if (event.target.nodeName == 'A') {
- if (window.innerWidth < 1024) {
-     tocNav.style.display = "none";
- }
- var href = event.target.getAttribute("href");
- var anchorId = href.substr(1);
- var anchor =  document.getElementById(anchorId);
- anchor.scrollIntoView(true);
- window.history.pushState("","",href);
-    }
-});
-
-// switch toc mode when window resized
-window.onresize = function () {
-    if (window.innerWidth < 1024) {
- tocNav.style.display = "none";
-    } else {
- tocNav.style.display = "block";
-    }
-}
-</script>
-</body>
-</html>
diff --git a/draft-schanzen-gns.txt b/draft-schanzen-gns.txt
deleted file mode 100644
index e0e1d67..0000000
--- a/draft-schanzen-gns.txt
+++ /dev/null
@@ -1,1792 +0,0 @@
-
-
-
-
-Independent Stream                                       M. Schanzenbach
-Internet-Draft                                               GNUnet e.V.
-Intended status: Informational                               C. Grothoff
-Expires: 13 May 2020                               Berner Fachhochschule
-                                                                  B. Fix
-                                                             GNUnet e.V.
-                                                        10 November 2019
-
-
-                   The GNU Name System Specification
-                         draft-schanzen-gns-00
-
-Abstract
-
-   This document contains the GNU Name System (GNS) technical
-   specification.
-
-Status of This Memo
-
-   This Internet-Draft is submitted in full conformance with the
-   provisions of BCP 78 and BCP 79.
-
-   Internet-Drafts are working documents of the Internet Engineering
-   Task Force (IETF).  Note that other groups may also distribute
-   working documents as Internet-Drafts.  The list of current Internet-
-   Drafts is at https://datatracker.ietf.org/drafts/current/.
-
-   Internet-Drafts are draft documents valid for a maximum of six months
-   and may be updated, replaced, or obsoleted by other documents at any
-   time.  It is inappropriate to use Internet-Drafts as reference
-   material or to cite them other than as "work in progress."
-
-   This Internet-Draft will expire on 13 May 2020.
-
-Copyright Notice
-
-   Copyright (c) 2019 IETF Trust and the persons identified as the
-   document authors.  All rights reserved.
-
-   This document is subject to BCP 78 and the IETF Trust's Legal
-   Provisions Relating to IETF Documents (https://trustee.ietf.org/
-   license-info) in effect on the date of publication of this document.
-   Please review these documents carefully, as they describe your rights
-   and restrictions with respect to this document.  Code Components
-   extracted from this document must include Simplified BSD License text
-   as described in Section 4.e of the Trust Legal Provisions and are
-   provided without warranty as described in the Simplified BSD License.
-
-
-
-
-Schanzenbach, et al.       Expires 13 May 2020                  [Page 1]
-
-Internet-Draft             The GNU Name System             November 2019
-
-
-Table of Contents
-
-   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   3
-   2.  Zones . . . . . . . . . . . . . . . . . . . . . . . . . . . .   4
-   3.  Resource Records  . . . . . . . . . . . . . . . . . . . . . .   4
-     3.1.  Record Types  . . . . . . . . . . . . . . . . . . . . . .   6
-     3.2.  PKEY  . . . . . . . . . . . . . . . . . . . . . . . . . .   6
-     3.3.  GNS2DNS . . . . . . . . . . . . . . . . . . . . . . . . .   7
-     3.4.  LEHO  . . . . . . . . . . . . . . . . . . . . . . . . . .   7
-     3.5.  NICK  . . . . . . . . . . . . . . . . . . . . . . . . . .   8
-     3.6.  BOX . . . . . . . . . . . . . . . . . . . . . . . . . . .   8
-     3.7.  VPN . . . . . . . . . . . . . . . . . . . . . . . . . . .   9
-   4.  Publishing Records  . . . . . . . . . . . . . . . . . . . . .  10
-     4.1.  Key Derivations . . . . . . . . . . . . . . . . . . . . .  10
-     4.2.  Resource Records Block  . . . . . . . . . . . . . . . . .  11
-     4.3.  Record Data Encryption and Decryption . . . . . . . . . .  13
-   5.  Internationalization and Character Encoding . . . . . . . . .  15
-   6.  Name Resolution . . . . . . . . . . . . . . . . . . . . . . .  15
-     6.1.  Recursion . . . . . . . . . . . . . . . . . . . . . . . .  16
-     6.2.  Record Processing . . . . . . . . . . . . . . . . . . . .  16
-       6.2.1.  PKEY  . . . . . . . . . . . . . . . . . . . . . . . .  17
-       6.2.2.  GNS2DNS . . . . . . . . . . . . . . . . . . . . . . .  17
-       6.2.3.  CNAME . . . . . . . . . . . . . . . . . . . . . . . .  18
-       6.2.4.  BOX . . . . . . . . . . . . . . . . . . . . . . . . .  18
-       6.2.5.  VPN . . . . . . . . . . . . . . . . . . . . . . . . .  18
-       6.2.6.  NICK  . . . . . . . . . . . . . . . . . . . . . . . .  19
-   7.  Zone Revocation . . . . . . . . . . . . . . . . . . . . . . .  19
-   8.  Determining the Root Zone and Zone Governance . . . . . . . .  24
-   9.  Security Considerations . . . . . . . . . . . . . . . . . . .  25
-     9.1.  Cryptography  . . . . . . . . . . . . . . . . . . . . . .  25
-     9.2.  Abuse mitigation  . . . . . . . . . . . . . . . . . . . .  26
-     9.3.  Zone management . . . . . . . . . . . . . . . . . . . . .  26
-     9.4.  Impact of underlying DHT  . . . . . . . . . . . . . . . .  26
-     9.5.  Revocations . . . . . . . . . . . . . . . . . . . . . . .  27
-   10. GANA Considerations . . . . . . . . . . . . . . . . . . . . .  27
-   11. Test Vectors  . . . . . . . . . . . . . . . . . . . . . . . .  28
-   12. Normative References  . . . . . . . . . . . . . . . . . . . .  30
-   Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  32
-
-
-
-
-
-
-
-
-
-
-
-
-
-Schanzenbach, et al.       Expires 13 May 2020                  [Page 2]
-
-Internet-Draft             The GNU Name System             November 2019
-
-
-1.  Introduction
-
-   The Domain Name System (DNS) is a unique distributed database and a
-   vital service for most Internet applications.  While DNS is
-   distributed, it relies on centralized, trusted registrars to provide
-   globally unique names.  As the awareness of the central role DNS
-   plays on the Internet rises, various institutions are using their
-   power (including legal means) to engage in attacks on the DNS, thus
-   threatening the global availability and integrity of information on
-   the Internet.
-
-   DNS was not designed with security as a goal.  This makes it very
-   vulnerable, especially to attackers that have the technical
-   capabilities of an entire nation state at their disposal.  This
-   specification describes a censorship-resistant, privacy-preserving
-   and decentralized name system: The GNU Name System (GNS).  It is
-   designed to provide a secure alternative to DNS, especially when
-   censorship or manipulation is encountered.  GNS can bind names to any
-   kind of cryptographically secured token, enabling it to double in
-   some respects as even as an alternative to some of today's Public Key
-   Infrastructures, in particular X.509 for the Web.
-
-   This document contains the GNU Name System (GNS) technical
-   specification of the GNU Name System [GNS], a fully decentralized and
-   censorship-resistant name system.  GNS provides a privacy-enhancing
-   alternative to the Domain Name System (DNS).  The design of GNS
-   incorporates the capability to integrate and coexist with DNS.  GNS
-   is based on the principle of a petname system and builds on ideas
-   from the Simple Distributed Security Infrastructure (SDSI),
-   addressing a central issue with the decentralized mapping of secure
-   identifiers to memorable names: namely the impossibility of providing
-   a global, secure and memorable mapping without a trusted authority.
-   GNS uses the transitivity in the SDSI design to replace the trusted
-   root with secure delegation of authority thus making petnames useful
-   to other users while operating under a very strong adversary model.
-
-   This document defines the normative wire format of resource records,
-   resolution processes, cryptographic routines and security
-   considerations for use by implementors.
-
-   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
-   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
-   document are to be interpreted as described in [RFC2119].
-
-
-
-
-
-
-
-
-Schanzenbach, et al.       Expires 13 May 2020                  [Page 3]
-
-Internet-Draft             The GNU Name System             November 2019
-
-
-2.  Zones
-
-   A zone in GNS is defined by a public/private ECDSA key pair (d,zk),
-   where d is the private key and zk the corresponding public key.  GNS
-   employs the curve parameters of the twisted edwards representation of
-   Curve25519 [RFC7748] (a.k.a. edwards25519) with the ECDSA scheme
-   ([RFC6979]).  In the following, we use the following naming
-   convention for our cryptographic primitives:
-
-   d  is a 256-bit ECDSA private key.  In GNS, records are signed using
-      a key derived from "d" as described in Section 4.
-
-   p  is the prime of edwards25519 as defined in [RFC7748], i.e.  2^255
-      - 19.
-
-   B  is the group generator (X(P),Y(P)) of edwards25519 as defined in
-      [RFC7748].
-
-   L  is the prime-order subgroup of edwards25519 in [RFC7748].
-
-   zk  is the ECDSA public key corresponding to d.  It is defined in
-      [RFC6979] as the curve point d*B where B is the group generator of
-      the elliptic curve.  The public key is used to uniquely identify a
-      GNS zone and is referred to as the "zone key".
-
-3.  Resource Records
-
-   A GNS implementor MUST provide a mechanism to create and manage
-   resource records for local zones.  A local zone is established by
-   creating a zone key pair.  Records may be added to each zone, hence a
-   (local) persistency mechanism for resource records and zones must be
-   provided.  This local zone database is used by the GNS resolver
-   implementation and to publish record information.
-
-   A GNS resource record holds the data of a specific record in a zone.
-   The resource record format is defined as follows:
-
-   0     8     16    24    32    40    48    56
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-   |                   EXPIRATION                  |
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-   |       DATA SIZE       |          TYPE         |
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-   |           FLAGS       |        DATA           /
-   +-----+-----+-----+-----+                       /
-   /                                               /
-   /                                               /
-
-
-
-
-Schanzenbach, et al.       Expires 13 May 2020                  [Page 4]
-
-Internet-Draft             The GNU Name System             November 2019
-
-
-                                  Figure 1
-
-   where:
-
-   EXPIRATION  denotes the absolute 64-bit expiration date of the
-      record.  In microseconds since midnight (0 hour), January 1, 1970
-      in network byte order.
-
-   DATA SIZE  denotes the 32-bit size of the DATA field in bytes and in
-      network byte order.
-
-   TYPE  is the 32-bit resource record type.  This type can be one of
-      the GNS resource records as defined in Section 3 or a DNS record
-      type as defined in [RFC1035] or any of the complementary
-      standardized DNS resource record types.  This value must be stored
-      in network byte order.  Note that values below 2^16 are reserved
-      for allocation via IANA ([RFC6895]).
-
-   FLAGS  is a 32-bit resource record flags field (see below).
-
-   DATA  the variable-length resource record data payload.  The contents
-      are defined by the respective type of the resource record.
-
-   Flags indicate metadata surrounding the resource record.  A flag
-   value of 0 indicates that all flags are unset.  The following
-   illustrates the flag distribution in the 32-bit flag value of a
-   resource record:
-
-   ... 5       4         3        2        1        0
-   ------+--------+--------+--------+--------+--------+
-   / ... | SHADOW | EXPREL | SUPPL  | PRIVATE|    /   |
-   ------+--------+--------+--------+--------+--------+
-
-                                  Figure 2
-
-   where:
-
-   SHADOW  If this flag is set, this record should be ignored by
-      resolvers unless all (other) records of the same record type have
-      expired.  Used to allow zone publishers to facilitate good
-      performance when records change by allowing them to put future
-      values of records into the DHT.  This way, future values can
-      propagate and may be cached before the transition becomes active.
-
-   EXPREL  The expiration time value of the record is a relative time
-      (still in microseconds) and not an absolute time.  This flag
-      should never be encountered by a resolver for records obtained
-
-
-
-
-Schanzenbach, et al.       Expires 13 May 2020                  [Page 5]
-
-Internet-Draft             The GNU Name System             November 2019
-
-
-      from the DHT, but might be present when a resolver looks up
-      private records of a zone hosted locally.
-
-   SUPPL  This is a supplemental record.  It is provided in addition to
-      the other records.  This flag indicates that this record is not
-      explicitly managed alongside the other records under the
-      respective name but may be useful for the application.  This flag
-      should only be encountered by a resolver for records obtained from
-      the DHT.
-
-   PRIVATE  This is a private record of this peer and it should thus not
-      be published in the DHT.  Thus, this flag should never be
-      encountered by a resolver for records obtained from the DHT.
-      Private records should still be considered just like regular
-      records when resolving labels in local zones.
-
-3.1.  Record Types
-
-   A registry of GNS Record Types is described in Section 10.  The
-   registration policy for this registry is "First Come First Served",
-   as described in [RFC8126].  When requesting new entries, careful
-   consideration of the following criteria is strongly advised: FIXME:
-   ausdenken was wir da gerne haetten.
-
-3.2.  PKEY
-
-   In GNS, a delegation of a label to a zone is represented through a
-   PKEY record.  A PKEY resource record contains the public key of the
-   zone to delegate to.  A PKEY record MUST be the only record under a
-   label.  No other records are allowed.  A PKEY DATA entry has the
-   following format:
-
-   0     8     16    24    32    40    48    56
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-   |                   PUBLIC KEY                  |
-   |                                               |
-   |                                               |
-   |                                               |
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-
-                                  Figure 3
-
-   where:
-
-   PUBLIC KEY  A 256-bit ECDSA zone key.
-
-
-
-
-
-
-Schanzenbach, et al.       Expires 13 May 2020                  [Page 6]
-
-Internet-Draft             The GNU Name System             November 2019
-
-
-3.3.  GNS2DNS
-
-   It is possible to delegate a label back into DNS through a GNS2DNS
-   record.  The resource record contains a DNS name for the resolver to
-   continue with in DNS followed by a DNS server.  Both names are in the
-   format defined in [RFC1034] for DNS names.  A GNS2DNS DATA entry has
-   the following format:
-
-   0     8     16    24    32    40    48    56
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-   |                    DNS NAME                   |
-   /                                               /
-   /                                               /
-   |                                               |
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-   |                 DNS SERVER NAME               |
-   /                                               /
-   /                                               /
-   |                                               |
-   +-----------------------------------------------+
-
-                                  Figure 4
-
-   where:
-
-   DNS NAME  The name to continue with in DNS (0-terminated).
-
-   DNS SERVER NAME  The DNS server to use.  May be an IPv4/IPv6 address
-      in dotted decimal form or a DNS name.  It may also be a relative
-      GNS name ending with a "+" top-level domain.  The value is UTF-8
-      encoded (also for DNS names) and 0-terminated.
-
-3.4.  LEHO
-
-   Legacy hostname records can be used by applications that are expected
-   to supply a DNS name on the application layer.  The most common use
-   case is HTTP virtual hosting, which as-is would not work with GNS
-   names as those may not be globally unique.  A LEHO resource record is
-   expected to be found together in a single resource record with an
-   IPv4 or IPv6 address.  A LEHO DATA entry has the following format:
-
-   0     8     16    24    32    40    48    56
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-   |                 LEGACY HOSTNAME               |
-   /                                               /
-   /                                               /
-   |                                               |
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-
-
-
-Schanzenbach, et al.       Expires 13 May 2020                  [Page 7]
-
-Internet-Draft             The GNU Name System             November 2019
-
-
-                                  Figure 5
-
-   where:
-
-   LEGACY HOSTNAME  A UTF-8 string (which is not 0-terminated)
-      representing the legacy hostname.
-
-   NOTE: If an application uses a LEHO value in an HTTP request header
-   (e.g.  "Host:" header) it must be converted to a punycode
-   representation [RFC5891].
-
-3.5.  NICK
-
-   Nickname records can be used by zone administrators to publish an
-   indication on what label this zone prefers to be referred to.  This
-   is a suggestion to other zones what label to use when creating a PKEY
-   (Section 3.2) record containing this zone's public zone key.  This
-   record SHOULD only be stored under the empty label "@" but MAY be
-   returned with record sets under any label as a supplemental record.
-   Section 6.2.6 details how a resolver must process supplemental and
-   non-supplemental NICK records.  A NICK DATA entry has the following
-   format:
-
-   0     8     16    24    32    40    48    56
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-   |                  NICKNAME                     |
-   /                                               /
-   /                                               /
-   |                                               |
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-
-                                  Figure 6
-
-   where:
-
-   NICKNAME  A UTF-8 string (which is not 0-terminated) representing the
-      preferred label of the zone.  This string MUST NOT include a "."
-      character.
-
-3.6.  BOX
-
-   In GNS, every "." in a name delegates to another zone, and GNS
-   lookups are expected to return all of the required useful information
-   in one record set.  This is incompatible with the special labels used
-   by DNS for SRV and TLSA records.  Thus, GNS defines the BOX record
-   format to box up SRV and TLSA records and include them in the record
-   set of the label they are associated with.  For example, a TLSA
-   record for "_https._tcp.foo.gnu" will be stored in the record set of
-
-
-
-Schanzenbach, et al.       Expires 13 May 2020                  [Page 8]
-
-Internet-Draft             The GNU Name System             November 2019
-
-
-   "foo.gnu" as a BOX record with service (SVC) 443 (https) and protocol
-   (PROTO) 6 (tcp) and record TYPE "TLSA".  For reference, see also
-   [RFC2782].  A BOX DATA entry has the following format:
-
-   0     8     16    24    32    40    48    56
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-   |   PROTO   |    SVC    |       TYPE            |
-   +-----------+-----------------------------------+
-   |                 RECORD DATA                   |
-   /                                               /
-   /                                               /
-   |                                               |
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-
-                                  Figure 7
-
-   where:
-
-   PROTO  the 16-bit protocol number, e.g. 6 for tcp.  In network byte
-      order.
-
-   SVC  the 16-bit service value of the boxed record, i.e. the port
-      number.  In network byte order.
-
-   TYPE  is the 32-bit record type of the boxed record.  In network byte
-      order.
-
-   RECORD DATA  is a variable length field containing the "DATA" format
-      of TYPE as defined for the respective TYPE in DNS.
-
-3.7.  VPN
-
-   A VPN DATA entry has the following format:
-
-   0     8     16    24    32    40    48    56
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-   |          HOSTING PEER PUBLIC KEY              |
-   |                (256 bits)                     |
-   |                                               |
-   |                                               |
-   +-----------+-----------------------------------+
-   |   PROTO   |    SERVICE  NAME                  |
-   +-----------+                                   +
-   /                                               /
-   /                                               /
-   |                                               |
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-
-
-
-
-Schanzenbach, et al.       Expires 13 May 2020                  [Page 9]
-
-Internet-Draft             The GNU Name System             November 2019
-
-
-                                  Figure 8
-
-   where:
-
-   HOSTING PEER PUBLIC KEY  is a 256-bit EdDSA public key identifying
-      the peer hosting the service.
-
-   PROTO  the 16-bit protocol number, e.g. 6 for TCP.  In network byte
-      order.
-
-   SERVICE NAME  a shared secret used to identify the service at the
-      hosting peer, used to derive the port number requird to connect to
-      the service.  The service name MUST be a 0-terminated UTF-8
-      string.
-
-4.  Publishing Records
-
-   GNS resource records are published in a distributed hash table (DHT).
-   We assume that a DHT provides two functions: GET(key) and
-   PUT(key,value).  In GNS, resource records are grouped by their
-   respective labels, encrypted and published together in a single
-   resource records block (RRBLOCK) in the DHT under a key "q": PUT(q,
-   RRBLOCK).  The key "q" which is derived from the zone key "zk" and
-   the respective label of the contained records.
-
-4.1.  Key Derivations
-
-   Given a label, the DHT key "q" is derived as follows:
-
-   PRK_h := HKDF-Extract ("key-derivation", zk)
-   h := HKDF-Expand (PRK_h, label | "gns", 512 / 8)
-   d_h := h * d mod L
-   zk_h := h mod L * zk
-   q := SHA512 (zk_h)
-
-   We use a hash-based key derivation function (HKDF) as defined in
-   [RFC5869].  We use HMAC-SHA512 for the extraction phase and HMAC-
-   SHA256 for the expansion phase.
-
-   PRK_h  is key material retrieved using an HKDF using the string "key-
-      derivation" as salt and the public zone key "zk" as initial keying
-      material.
-
-   h  is the 512-bit HKDF expansion result.  The expansion info input is
-      a concatenation of the label and string "gns".
-
-   d  is the 256-bit private zone key as defined in Section 2.
-
-
-
-
-Schanzenbach, et al.       Expires 13 May 2020                 [Page 10]
-
-Internet-Draft             The GNU Name System             November 2019
-
-
-   label  is a UTF-8 string under which the resource records are
-      published.
-
-   d_h  is a 256-bit private key derived from the "d" using the keying
-      material "h".
-
-   zk_h  is a 256-bit public key derived from the zone key "zk" using
-      the keying material "h".
-
-   L  is the prime-order subgroup as defined in Section 2.
-
-   q  Is the 512-bit DHT key under which the resource records block is
-      published.  It is the SHA512 hash over the public key "zk_h"
-      corresponding to the derived private key "d_h".
-
-   We point out that the multiplication of "zk" with "h" is a point
-   multiplication, while the multiplication of "d" with "h" is a scalar
-   multiplication.
-
-4.2.  Resource Records Block
-
-   GNS records are grouped by their labels and published as a single
-   block in the DHT.  The grouped record sets MAY be paired with any
-   number of supplemental records.  Supplemental records must have the
-   supplemental flag set (See Section 3).  The contained resource
-   records are encrypted using a symmetric encryption scheme.  A GNS
-   implementation must publish RRBLOCKs in accordance to the properties
-   and recommendations of the underlying DHT.  This may include a
-   periodic refresh publication.  A GNS RRBLOCK has the following
-   format:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Schanzenbach, et al.       Expires 13 May 2020                 [Page 11]
-
-Internet-Draft             The GNU Name System             November 2019
-
-
-   0     8     16    24    32    40    48    56
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-   |                   SIGNATURE                   |
-   |                                               |
-   |                                               |
-   |                                               |
-   |                                               |
-   |                                               |
-   |                                               |
-   |                                               |
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-   |                  PUBLIC KEY                   |
-   |                                               |
-   |                                               |
-   |                                               |
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-   |         SIZE          |       PURPOSE         |
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-   |                   EXPIRATION                  |
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-   |                    BDATA                      /
-   /                                               /
-   /                                               |
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-
-                                  Figure 9
-
-   where:
-
-   SIGNATURE  A 512-bit ECDSA deterministic signature compliant with
-      [RFC6979].  The signature is computed over the data following the
-      PUBLIC KEY field.  The signature is created using the derived
-      private key "d_h" (see Section 4).
-
-   PUBLIC KEY  is the 256-bit public key "zk_h" to be used to verify
-      SIGNATURE.  The wire format of this value is defined in [RFC8032],
-      Section 5.1.5.
-
-   SIZE  A 32-bit value containing the length of the signed data
-      following the PUBLIC KEY field in network byte order.  This value
-      always includes the length of the fields SIZE (4), PURPOSE (4) and
-      EXPIRATION (8) in addition to the length of the BDATA.  While a
-      32-bit value is used, implementations MAY refuse to publish blocks
-      beyond a certain size significantly below 4 GB.  However, a
-      minimum block size of 62 kilobytes MUST be supported.
-
-   PURPOSE  A 32-bit signature purpose flag.  This field MUST be 15 (in
-      network byte order).
-
-
-
-Schanzenbach, et al.       Expires 13 May 2020                 [Page 12]
-
-Internet-Draft             The GNU Name System             November 2019
-
-
-   EXPIRATION  Specifies when the RRBLOCK expires and the encrypted
-      block SHOULD be removed from the DHT and caches as it is likely
-      stale.  However, applications MAY continue to use non-expired
-      individual records until they expire.  The value MUST be set to
-      the expiration time of the resource record contained within this
-      block with the smallest expiration time.  If a records block
-      includes shadow records, then the maximum expiration time of all
-      shadow records with matching type and the expiration times of the
-      non-shadow records is considered.  This is a 64-bit absolute date
-      in microseconds since midnight (0 hour), January 1, 1970 in
-      network byte order.
-
-   BDATA  The encrypted resource records with a total size of SIZE - 16.
-
-4.3.  Record Data Encryption and Decryption
-
-   A symmetric encryption scheme is used to encrypt the resource records
-   set RDATA into the BDATA field of a GNS RRBLOCK.  The wire format of
-   the RDATA looks as follows:
-
-   0     8     16    24    32    40    48    56
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-   |     RR COUNT          |        EXPIRA-        /
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-   /         -TION         |       DATA SIZE       |
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-   |         TYPE          |          FLAGS        |
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-   |                      DATA                     /
-   /                                               /
-   /                                               |
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-   |                   EXPIRATION                  |
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-   |       DATA SIZE       |          TYPE         |
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-   |           FLAGS       |        DATA           /
-   +-----+-----+-----+-----+                       /
-   /                       +-----------------------/
-   /                       |                       /
-   +-----------------------+                       /
-   /                     PADDING                   /
-   /                                               /
-
-                                 Figure 10
-
-   where:
-
-
-
-
-Schanzenbach, et al.       Expires 13 May 2020                 [Page 13]
-
-Internet-Draft             The GNU Name System             November 2019
-
-
-   RR COUNT  A 32-bit value containing the number of variable-length
-      resource records which are following after this field in network
-      byte order.
-
-   EXPIRATION, DATA SIZE, TYPE, FLAGS and DATA  These fields were
-      defined in the resource record format in Section 3.  There MUST be
-      a total of RR COUNT of these resource records present.
-
-   PADDING  The padding MUST contain the value 0 in all octets.  The
-      padding MUST ensure that the size of the RDATA WITHOUT the RR
-      COUNT field is a power of two.  As a special exception, record
-      sets with (only) a PKEY record type are never padded.  Note that a
-      record set with a PKEY record MUST NOT contain other records.
-
-   The symmetric keys and initialization vectors are derived from the
-   record label and the zone key "zk".  For decryption of the resource
-   records block payload, the key material "K" and initialization vector
-   "IV" for the symmetric cipher are derived as follows:
-
-   PRK_k := HKDF-Extract ("gns-aes-ctx-key", zk)
-   PRK_iv := HKDF-Extract ("gns-aes-ctx-iv", zk)
-   K := HKDF-Expand (PRK_k, label, 512 / 8);
-   IV := HKDF-Expand (PRK_iv, label, 256 / 8)
-
-   HKDF is a hash-based key derivation function as defined in [RFC5869].
-   Specifically, HMAC-SHA512 is used for the extraction phase and HMAC-
-   SHA256 for the expansion phase.  The output keying material is 64
-   octets (512 bit) for the symmetric keys and 32 octets (256 bit) for
-   the initialization vectors.  We divide the resulting keying material
-   "K" into a 256-bit AES [RFC3826] key and a 256-bit TWOFISH [TWOFISH]
-   key:
-
-   0     8     16    24    32    40    48    56
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-   |                    AES KEY                    |
-   |                                               |
-   |                                               |
-   |                                               |
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-   |                  TWOFISH KEY                  |
-   |                                               |
-   |                                               |
-   |                                               |
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-
-                                 Figure 11
-
-
-
-
-
-Schanzenbach, et al.       Expires 13 May 2020                 [Page 14]
-
-Internet-Draft             The GNU Name System             November 2019
-
-
-   Similarly, we divide "IV" into a 128-bit initialization vector and a
-   128-bit initialization vector:
-
-   0     8     16    24    32    40    48    56
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-   |                    AES IV                     |
-   |                                               |
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-   |                  TWOFISH IV                   |
-   |                                               |
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-
-                                 Figure 12
-
-   The keys and IVs are used for a CFB128-AES-256 and CFB128-TWOFISH-256
-   chained symmetric cipher.  Both ciphers are used in Cipher FeedBack
-   (CFB) mode [RFC3826].
-
-   RDATA := AES(K[0:31], IV[0:15],
-                TWOFISH(K[32:63], IV[16:31], BDATA))
-   BDATA := TWOFISH(K[32:63], IV[16:31],
-                    AES(K[0:31], IV[0:15], RDATA))
-
-5.  Internationalization and Character Encoding
-
-   All labels in GNS are encoded in UTF-8 [RFC3629].  This does not
-   include any DNS names found in DNS records, such as CNAME records,
-   which are internationalized through the IDNA specifications
-   [RFC5890].
-
-6.  Name Resolution
-
-   Names in GNS are resolved by recursively querying the DHT record
-   storage.  In the following, we define how resolution is initiated and
-   each iteration in the resolution is processed.
-
-   GNS resolution of a name must start in a given starting zone
-   indicated using a zone public key.  Details on how the starting zone
-   may be determined is discussed in Section 8.
-
-   When GNS name resolution is requested, a desired record type MAY be
-   provided by the client.  The GNS resolver will use the desired record
-   type to guide processing, for example by providing conversion of VPN
-   records to A or AAAA records, if that is desired.  However, filtering
-   of record sets according to the required record types MUST still be
-   done by the client after the resource record set is retrieved.
-
-
-
-
-
-Schanzenbach, et al.       Expires 13 May 2020                 [Page 15]
-
-Internet-Draft             The GNU Name System             November 2019
-
-
-6.1.  Recursion
-
-   In each step of the recursive name resolution, there is an
-   authoritative zone zk and a name to resolve.  The name may be empty.
-   Initially, the authoritative zone is the start zone.  If the name is
-   empty, it is interpreted as the apex label "@".
-
-   From here, the following steps are recursively executed, in order:
-
-   1.  Extract the right-most label from the name to look up.
-
-   2.  Calculate q using the label and zk as defined in Section 4.1.
-
-   3.  Perform a DHT query GET(q) to retrieve the RRBLOCK.
-
-   4.  Verify and process the RRBLOCK and decrypt the BDATA contained in
-       it as defined in Section 4.3.
-
-   Upon receiving the RRBLOCK from the DHT, apart from verifying the
-   provided signature, the resolver MUST check that the authoritative
-   zone key was used to sign the record: The derived zone key "h*zk"
-   MUST match the public key provided in the RRBLOCK, otherwise the
-   RRBLOCK MUST be ignored and the DHT lookup GET(q) MUST continue.
-
-6.2.  Record Processing
-
-   Record processing occurs at the end of a single recursion.  We assume
-   that the RRBLOCK has been cryptographically verified and decrypted.
-   At this point, we must first determine if we have received a valid
-   record set in the context of the name we are trying to resolve:
-
-   1.  Case 1: If the remainder of the name to resolve is empty and the
-       record set does not consist of a PKEY, CNAME or DNS2GNS record,
-       the record set is the result and the recursion is concluded.
-
-   2.  Case 2: If the name to be resolved is of the format
-       "_SERVICE._PROTO" and the record set contains one or more
-       matching BOX records, the records in the BOX records are the
-       result and the recusion is concluded (Section 6.2.4).
-
-   3.  Case 3: If the remainder of the name to resolve is not empty and
-       does not match the "_SERVICE._PROTO" syntax, then the current
-       record set MUST consist of a single PKEY record (Section 6.2.1),
-       a single CNAME record (Section 6.2.3), or one or more GNS2DNS
-       records (Section 6.2.2), which are processed as described in the
-       respective sections below.  The record set may include any number
-       of supplemental records.  Otherwise, resolution fails and the
-       resolver MUST return an empty record set.  Finally, after the
-
-
-
-Schanzenbach, et al.       Expires 13 May 2020                 [Page 16]
-
-Internet-Draft             The GNU Name System             November 2019
-
-
-       recursion terminates, the client preferences for the record type
-       SHOULD be considered.  If a VPN record is found and the client
-       requests an A or AAAA record, the VPN record SHOULD be converted
-       (Section 6.2.5) if possible.
-
-6.2.1.  PKEY
-
-   When the resolver encounters a PKEY record and the remainder of the
-   name is not empty, resolution continues recursively with the
-   remainder of the name in the GNS zone specified in the PKEY record.
-
-   If the remainder of the name to resolve is empty and we have received
-   a record set containing only a single PKEY record, the recursion is
-   continued with the PKEY as authoritative zone and the empty apex
-   label "@" as remaining name, except in the case where the desired
-   record type is PKEY, in which case the PKEY record is returned and
-   the resolution is concluded without resolving the empty apex label.
-
-6.2.2.  GNS2DNS
-
-   When a resolver encounters one or more GNS2DNS records and the
-   remaining name is empty and the desired record type is GNS2DNS, the
-   GNS2DNS records are returned.
-
-   Otherwise, it is expected that the resolver first resolves the IP(s)
-   of the specified DNS name server(s).  GNS2DNS records MAY contain
-   numeric IPv4 or IPv6 addresses, allowing the resolver to skip this
-   step.  The DNS server names may themselves be names in GNS or DNS.
-   If the DNS server name ends in ".+", the rest of the name is to be
-   interpreted relative to the zone of the GNS2DNS record.  If the DNS
-   server name ends in ".<Base32(zk)>", the DNS server name is to be
-   resolved against the GNS zone zk.
-
-   Multiple GNS2DNS records may be stored under the same label, in which
-   case the resolver MUST try all of them.  The resolver MAY try them in
-   any order or even in parallel.  If multiple GNS2DNS records are
-   present, the DNS name MUST be identical for all of them, if not the
-   resolution fails and an emtpy record set is returned as the record
-   set is invalid.
-
-   Once the IP addresses of the DNS servers have been determined, the
-   DNS name from the GNS2DNS record is appended to the remainder of the
-   name to be resolved, and resolved by querying the DNS name server(s).
-   As the DNS servers specified are possibly authoritative DNS servers,
-   the GNS resolver MUST support recursive resolution and MUST NOT
-   delegate this to the authoritative DNS servers.  The first successful
-   recursive name resolution result is returned to the client.  In
-   addition, the resolver returns the queried DNS name as a supplemental
-
-
-
-Schanzenbach, et al.       Expires 13 May 2020                 [Page 17]
-
-Internet-Draft             The GNU Name System             November 2019
-
-
-   LEHO record (Section 3.4) with a relative expiration time of one
-   hour.
-
-   GNS resolvers SHOULD offer a configuration option to disable DNS
-   processing to avoid information leakage and provide a consistent
-   security profile for all name resolutions.  Such resolvers would
-   return an empty record set upon encountering a GNS2DNS record during
-   the recursion.  However, if GNS2DNS records are encountered in the
-   record set for the apex and a GNS2DNS record is expicitly requested
-   by the application, such records MUST still be returned, even if DNS
-   support is disabled by the GNS resolver configuration.
-
-6.2.3.  CNAME
-
-   If a CNAME record is encountered, the canonical name is appended to
-   the remaining name, except if the remaining name is empty and the
-   desired record type is CNAME, in which case the resolution concludes
-   with the CNAME record.  If the canonical name ends in ".+",
-   resolution continues in GNS with the new name in the current zone.
-   Otherwise, the resulting name is resolved via the default operating
-   system name resolution process.  This may in turn again trigger a GNS
-   resolution process depending on the system configuration.
-
-   The recursive DNS resolution process may yield a CNAME as well which
-   in turn may either point into the DNS or GNS namespace (if it ends in
-   a ".<Base32(zk)>").  In order to prevent infinite loops, the resolver
-   MUST implement loop detections or limit the number of recursive
-   resolution steps.  If the last CNAME was a DNS name, the resolver
-   returns the DNS name as a supplemental LEHO record (Section 3.4) with
-   a relative expiration time of one hour.
-
-6.2.4.  BOX
-
-   When a BOX record is received, a GNS resolver must unbox it if the
-   name to be resolved continues with "_SERVICE._PROTO".  Otherwise, the
-   BOX record is to be left untouched.  This way, TLSA (and SRV) records
-   do not require a separate network request, and TLSA records become
-   inseparable from the corresponding address records.
-
-6.2.5.  VPN
-
-   At the end of the recursion, if the queried record type is either A
-   or AAAA and the retrieved record set contains at least one VPN
-   record, the resolver SHOULD open a tunnel and return the IPv4 or IPv6
-   tunnel address, respectively.  The type of tunnel depends on the
-   contents of the VPN record data.  The VPN record MUST be returned if
-   the resolver implementation does not support setting up a tunnnel.
-
-
-
-
-Schanzenbach, et al.       Expires 13 May 2020                 [Page 18]
-
-Internet-Draft             The GNU Name System             November 2019
-
-
-6.2.6.  NICK
-
-   NIICK records are only relevant to the recursive resolver if the
-   record set in question is the final result which is to be returned to
-   the client.  The encountered NICK records may either be supplemental
-   (see Section 3) or non-supplemental.  If the NICK record is
-   supplemental, the resolver only returns the record set if one of the
-   non-supplemental records matches the queried record type.
-
-   The differentiation between a supplemental and non-supplemental NICK
-   record allows the client to match the record to the authoritative
-   zone.  Consider the following example:
-
-   Query: alice.doe (type=A)
-   Result:
-   A: 1.2.3.4
-   NICK: eve
-
-                                 Figure 13
-
-   In this example, the returned NICK record is non-supplemental.  For
-   the client, this means that the NICK belongs to the zone "alice.doe"
-   and is published under the empty label along with an A record.  The
-   NICK record should be interpreted as: The zone defined by "alice.doe"
-   wants to be referred to as "eve".  In contrast, consider the
-   following:
-
-   Query: alice.doe (type=A)
-   Result:
-   A: 1.2.3.4
-   NICK: john (Supplemental)
-
-                                 Figure 14
-
-   In this case, the NICK record is marked as supplemental.  This means
-   that the NICK record belongs to the zone "doe" and is published under
-   the label "alice" along with an A record.  The NICK record should be
-   interpreted as: The zone defined by "doe" wants to be referred to as
-   "john".  This distinction is likely useful for other records
-   published as supplemental.
-
-7.  Zone Revocation
-
-   Whenever a recursive resolver encounters a new GNS zone, it MUST
-   check against the local revocation list whether the respective zone
-   key has been revoked.  If the zone key was revoked, the resolution
-   MUST fail with an empty result set.
-
-
-
-
-Schanzenbach, et al.       Expires 13 May 2020                 [Page 19]
-
-Internet-Draft             The GNU Name System             November 2019
-
-
-   In order to revoke a zone key, a signed revocation object SHOULD be
-   published.  This object MUST be signed using the private zone key.
-   The revocation object is flooded in the overlay network.  To prevent
-   flooding attacks, the revocation message MUST contain a proof of work
-   (PoW).  The revocation message including the PoW MAY be calculated
-   ahead of time to support timely revocation.
-
-   For all occurences below, "Argon2d" is the Password-based Key
-   Derivation Function as defined in [Argon2].  For the PoW calculations
-   the algorithm is instantiated with the following parameters:
-
-   S := "gnunet-revocation-proof-of-work" /* Salt */
-   t := 3 /* Iterations */
-   m := 1024 /* Memory size, 1 MiB */
-   T := 64 /* Tag (=output) length in bytes */
-   p := 1 /* Parallelization parameter */
-   v := 0x13 /* Version */
-   y := 0 /* Type (Argon2d) */
-   X, K is unused
-
-   The following is the message string "P" on which the PoW is
-   calculated:
-
-   0     8     16    24    32    40    48    56
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-   |                      POW                      |
-   +-----------------------------------------------+
-   |                   TIMESTAMP                   |
-   +-----------------------------------------------+
-   |                  PUBLIC KEY                   |
-   |                                               |
-   |                                               |
-   |                                               |
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-
-                                 Figure 15
-
-   where:
-
-   POW  A 64-bit solution to the PoW.
-
-   TIMESTAMP  denotes the absolute 64-bit expiration date of the record.
-      In microseconds since midnight (0 hour), January 1, 1970 in
-      network byte order.
-
-   PUBLIC KEY  A 512-bit ECDSA deterministic signature compliant with
-      [RFC6979] over the public zone zk of the zone which is revoked and
-
-
-
-
-Schanzenbach, et al.       Expires 13 May 2020                 [Page 20]
-
-Internet-Draft             The GNU Name System             November 2019
-
-
-      corresponds to the key used in the PoW.  The signature is created
-      using the private zone key "d" (see Section 2).
-
-   Traditionally, PoW schemes require to find a "POW" such that at least
-   D leading zeroes are found in the hash result.  D is then referred to
-   as the "difficulty" of the PoW.  In order to reduce the variance in
-   time it takes to calculate the PoW, we require that a number "Z"
-   different PoWs must be found that on average have "D" leading zeroes.
-
-   The resulting proofs may then published and disseminated.  The
-   concrete dissemination and publication methods are out of scope of
-   this document.  Given an average difficulty of "D", the proofs have
-   an expiration time of EPOCH.  With each additional bit difficulty,
-   the lifetime of the proof is prolonged for another EPOCH.
-   Consequently, by calculating a more difficult PoW, the lifetime of
-   the proof can be increased on demand by the zone owner.
-
-   The parameters are defined as follows:
-
-   Z  The number of PoWs required is fixed at 32.
-
-   D  The difficulty is fixed at 25.
-
-   EPOCH  A single epoch is fixed at 365 days.
-
-   Given that proof has been found, a revocation data object is defined
-   as follows:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Schanzenbach, et al.       Expires 13 May 2020                 [Page 21]
-
-Internet-Draft             The GNU Name System             November 2019
-
-
-   0     8     16    24    32    40    48    56
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-   |                   TIMESTAMP                   |
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-   |                      TTL                      |
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-   |                     POW_0                     |
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-   |                       ...                     |
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-   |                     POW_Z-1                   |
-   +-----------------------------------------------+
-   |                   SIGNATURE                   |
-   |                                               |
-   |                                               |
-   |                                               |
-   |                                               |
-   |                                               |
-   |                                               |
-   |                                               |
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-   |                  PUBLIC KEY                   |
-   |                                               |
-   |                                               |
-   |                                               |
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-
-                                 Figure 16
-
-   where:
-
-   TIMESTAMP  denotes the absolute 64-bit expiration date of the
-      revocation.  In microseconds since midnight (0 hour), January 1,
-      1970 in network byte order.
-
-   TTL  denotes the relative 64-bit time to live of of the record in
-      microseconds also in network byte order.  This field is
-      informational for a verifier.  The verifier may discard revocation
-      if the TTL indicates that it is already expired.  However, the
-      actual TTL of the revocation must be determined by examining the
-      leading zeros in the proof of work calculation.
-
-   POW_i  The values calculated as part of the PoW.  Each POW_i MUST be
-      unique in the set of POW values.
-
-   SIGNATURE  A 512-bit ECDSA deterministic signature compliant with
-      [RFC6979] over the public zone zk of the zone which is revoked and
-
-
-
-
-Schanzenbach, et al.       Expires 13 May 2020                 [Page 22]
-
-Internet-Draft             The GNU Name System             November 2019
-
-
-      corresponds to the key used in the PoW.  The signature is created
-      using the private zone key "d" (see Section 2).
-
-   PUBLIC KEY  is the 256-bit public key "zk" of the zone which is being
-      revoked and the key to be used to verify SIGNATURE.  The wire
-      format of this value is defined in [RFC8032], Section 5.1.5.
-
-   The signature over the public key covers a 32 bit pseudo header
-   conceptually prefixed to the public key.  The pseudo header includes
-   the key length and signature purpose:
-
-   0     8     16    24    32    40    48    56
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-   |         SIZE (0x30)   |       PURPOSE (0x03)  |
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-   |                  PUBLIC KEY                   |
-   |                                               |
-   |                                               |
-   |                                               |
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-   |                   TIMESTAMP                   |
-   +-----+-----+-----+-----+-----+-----+-----+-----+
-
-                                 Figure 17
-
-   where:
-
-   SIZE  A 32-bit value containing the length of the signed data in
-      bytes (48 bytes) in network byte order.
-
-   PURPOSE  A 32-bit signature purpose flag.  This field MUST be 3 (in
-      network byte order).
-
-   PUBLIC KEY / TIMESTAMP  Both values as defined in the revocation data
-      object above.
-
-   In order to verify a revocation the following steps must be taken, in
-   order:
-
-   1.  The current time MUST be between TIMESTAMP and TIMESTAMP+TTL.
-
-   2.  The signature MUST match the public key.
-
-   3.  The set of POW values MUST NOT contain duplicates.
-
-   4.  The average number of leading zeroes resulting from the provided
-       POW values D' MUST be greater than D.
-
-
-
-
-Schanzenbach, et al.       Expires 13 May 2020                 [Page 23]
-
-Internet-Draft             The GNU Name System             November 2019
-
-
-   5.  The validation period (TTL) of the revocation is calculated as
-       (D'-D) * EPOCH * 1.1.  The EPOCH is extended by 10% in order to
-       deal with unsynchronized clocks.  The TTL added on top of the
-       TIMESTAMP yields the expiration date.
-
-8.  Determining the Root Zone and Zone Governance
-
-   The resolution of a GNS name must start in a given start zone
-   indicated to the resolver using any public zone key.  The local
-   resolver may have a local start zone configured/hard-coded which
-   points to a local or remote start zone key.  A resolver client may
-   also determine the start zone from the suffix of the name given for
-   resolution or using information retrieved out of band.  The
-   governance model of any zone is at the sole discretion of the zone
-   owner.  However, the choice of start zone(s) is at the sole
-   discretion of the local system administrator or user.
-
-   This is an important distinguishing factor from the Domain Name
-   System where root zone governance is centralized at the Internet
-   Corporation for Assigned Names and Numbers (ICANN).  In DNS
-   terminology, GNS roughly follows the idea of a hyper-hyper local root
-   zone deployment, with the difference that it is not expected that all
-   deployments use the same local root zone.
-
-   In the following, we give examples how a local client resolver SHOULD
-   discover the start zone.  The process given is not exhaustive and
-   clients MAY suppliement it with other mechanisms or ignore it if the
-   particular application requires a different process.
-
-   GNS clients SHOULD first try to interpret the top-level domain of a
-   GNS name as a zone key.  For example. if the top-level domain is a
-   Base32-encoded public zone key "zk", the root zone of the resolution
-   process is implicitly given by the name:
-
-   Example name: www.example.<Base32(zk)>
-   => Root zone: zk
-   => Name to resolve from root zone: www.example
-
-   In GNS, users MAY own and manage their own zones.  Each local zone
-   SHOULD be associated with a single GNS label, but users MAY choose to
-   use longer names consisting of multiple labels.  If the name of a
-   locally managed zone matches the suffix of the name to be resolved,
-   resolution SHOULD start from the respective local zone:
-
-
-
-
-
-
-
-
-Schanzenbach, et al.       Expires 13 May 2020                 [Page 24]
-
-Internet-Draft             The GNU Name System             November 2019
-
-
-   Example name: www.example.gnu
-   Local zones:
-   fr = (d0,zk0)
-   gnu = (d1,zk1)
-   com = (d2,zk2)
-   ...
-   => Entry zone: zk1
-   => Name to resolve from entry zone: www.example
-
-   Finally, additional "suffix to zone" mappings MAY be configured.
-   Suffix to zone key mappings SHOULD be configurable through a local
-   configuration file or database by the user or system administrator.
-   The suffix MAY consist of multiple GNS labels concatenated with a
-   ".".  If multiple suffixes match the name to resolve, the longest
-   matching suffix MUST BE used.  The suffix length of two results
-   cannot be equal, as this would indicate a misconfiguration.  If both
-   a locally managed zone and a configuration entry exist for the same
-   suffix, the locally managed zone MUST have priority.
-
-   Example name: www.example.gnu
-   Local suffix mappings:
-   gnu = zk0
-   example.gnu = zk1
-   example.com = zk2
-   ...
-   => Entry zone: zk1
-   => Name to resolve from entry zone: www
-
-9.  Security Considerations
-
-9.1.  Cryptography
-
-   The security of cryptographic systems depends on both the strength of
-   the cryptographic algorithms chosen and the strength of the keys used
-   with those algorithms.  The security also depends on the engineering
-   of the protocol used by the system to ensure that there are no non-
-   cryptographic ways to bypass the security of the overall system.
-
-   This document concerns itself with the selection of cryptographic
-   algorithms for use in GNS.  The algorithms identified in this
-   document are not known to be broken (in the cryptographic sense) at
-   the current time, and cryptographic research so far leads us to
-   believe that they are likely to remain secure into the foreseeable
-   future.  However, this isn't necessarily forever, and it is expected
-   that new revisions of this document will be issued from time to time
-   to reflect the current best practices in this area.
-
-
-
-
-
-Schanzenbach, et al.       Expires 13 May 2020                 [Page 25]
-
-Internet-Draft             The GNU Name System             November 2019
-
-
-9.2.  Abuse mitigation
-
-   GNS names are UTF-8 strings.  Consequently, GNS faces similar issues
-   with respect to name spoofing as DNS does for internationalized
-   domain names.  In DNS, attackers may register similar sounding or
-   looking names (see above) in order to execute phishing attacks.  GNS
-   zone administrators must take into account this attack vector and
-   incorporate rules in order to mitigate it.
-
-   Further, DNS can be used to combat illegal content on the internet by
-   having the respective domains seized by authorities.  However, the
-   same mechanisms can also be abused in order to impose state
-   censorship, which ist one of the motivations behind GNS.  Hence, such
-   a seizure is, by design, difficult to impossible in GNS.
-
-9.3.  Zone management
-
-   In GNS, zone administrators need to manage and protect their zone
-   keys.  Once a zone key is lost it cannot be recovered.  Once it is
-   compromised it cannot be revoked (unless a revocation was pre-
-   calculated and is still available).  Zone administrators, and for GNS
-   this includes end-users, are required to responsibly and dilligently
-   protect their cryptographic keys.
-
-   Similarly, users are required to manage their local root zone.  In
-   order to ensure integrity and availability or names, users must
-   ensure that their local root zone information is not compromised or
-   outdated.  It can be expected that the processing of zone revocations
-   and an initial root zone is provided with a GNS client implementation
-   ("drop shipping").  Extension and customization of the zone is at the
-   full discretion of the user.
-
-9.4.  Impact of underlying DHT
-
-   This document does not specifiy the properties of the underlying
-   distributed hash table (DHT) which is required by any GNS
-   implementation.  For implementors, it is important to note that the
-   properties of the DHT are directly inherited by the GNS
-   implementation.  This includes both security as well as other non-
-   functional properties such as scalability and performance.
-   Implementors should take great care when selecting or implementing a
-   DHT for use in a GNS implementation.  DHTs with string security and
-   performance guarantees exist [R5N].  It should also be taken into
-   consideration that GNS implementations which build upon different DHT
-   overlays are unlikely to be interoperable with each other.
-
-
-
-
-
-
-Schanzenbach, et al.       Expires 13 May 2020                 [Page 26]
-
-Internet-Draft             The GNU Name System             November 2019
-
-
-9.5.  Revocations
-
-   Zone administrators are advised to pre-generate zone revocations and
-   securely store the revocation information in case the zone key is
-   lost, compromised or replaced in the furture.  Pre-calculated
-   revocations may become invalid due to expirations or protocol changes
-   such as epoch adjustments.  Conseuquently, implementors and users
-   must make precautions in order to manage revocations accordingly.
-
-   Revocation payloads do NOT include a 'new' key for key replacement.
-   In inclusion of such a key would have two major disadvantages:
-
-   If revocation is used after a private key was compromised, allowing
-   key replacement would be dangerous, because if an adversary took over
-   the private key, the adversary could then broadcast a revocation with
-   a key replacement.  For the replacement, the compromised owner would
-   have no chance to issue even a revocation.  Thus, allowing a
-   revocation message to replace a private key makes dealing with key
-   compromise situations worse.
-
-   Sometimes, key revocations are used with the objective of changing
-   cryptosystems.  Migration to another cryptosystem by replacing keys
-   via a revocation message would only be secure as long as both
-   cryptosystems are still secure against forgery.  Such a planned, non-
-   emergency migration to another cryptosystem should be done by running
-   zones for both ciphersystems in parallel for a while.  The migration
-   would conclude by revoking the legacy zone key only once it is deemed
-   no longer secure, and hopefully after most users have migrated to the
-   replacement.
-
-10.  GANA Considerations
-
-   GANA is requested to create an "GNU Name System Record Types"
-   registry.  The registry shall record for each entry:
-
-   *  Name: The name of the record type (case-insensitive ASCII string,
-      restricted to alphanumeric characters
-
-   *  Number: 32-bit, above 65535
-
-   *  Comment: Optionally, a brief English text describing the purpose
-      of the record type (in UTF-8)
-
-   *  Contact: Optionally, the contact information of a person to
-      contact for further information
-
-   *  References: Optionally, references describing the record type
-      (such as an RFC)
-
-
-
-Schanzenbach, et al.       Expires 13 May 2020                 [Page 27]
-
-Internet-Draft             The GNU Name System             November 2019
-
-
-   The registration policy for this sub-registry is "First Come First
-   Served", as described in [RFC8126].  GANA is requested to populate
-   this registry as follows:
-
-   Number | Name    | Contact | References | Description
-   -------+---------+---------+------------+-------------------------
-   65536  | PKEY    | N/A     | [This.I-D] | GNS zone delegation
-   65537  | NICK    | N/A     | [This.I-D] | GNS zone nickname
-   65538  | LEHO    | N/A     | [This.I-D] | GNS legacy hostname
-   65539  | VPN     | N/A     | [This.I-D] | VPN resolution
-   65540  | GNS2DNS | N/A     | [This.I-D] | Delegation to DNS
-   65541  | BOX     | N/A     | [This.I-D] | Boxed record
-
-                                 Figure 18
-
-11.  Test Vectors
-
-   The following represents a test vector for a record set with a DNS
-   record of type "A" as well as a GNS record of type "PKEY" under the
-   label "test".
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Schanzenbach, et al.       Expires 13 May 2020                 [Page 28]
-
-Internet-Draft             The GNU Name System             November 2019
-
-
-   Zone private key (d):
-   WGb/eoy8BDWvaK2vRab0xTlqvS0+PeS5HG5Rh4z4cWI=
-   Zone public key (zk):
-   n7TNZeJ+Ks6wQymnwjZXR/cj0ae8NZMZ/PcuDVrONAo=
-   Label: test
-   RRCOUNT: 2
-
-   Record #0
-   EXPIRATION: 1589117218087117
-   DATA_SIZE: 4
-   TYPE: 1
-   FLAGS: 0
-   DATA (base64):
-   AQIDBA==
-   DATA (Human readable):
-   1.2.3.4
-
-   Record #1
-   EXPIRATION: 1589117218087117
-   DATA_SIZE: 32
-   TYPE: 65536
-   FLAGS: 2
-   DATA (base64):
-   +AT14h9SMRAwkor+azlHpE8DkvsUyeQyN49NEmsOXew=
-   DATA (Human readable):
-   Z02FBRGZA8RH0C4JHBZ6PEA7MH7G74QV2K4Y8CHQHX6H4TREBQP0
-
-   RDATA:
-   AAWlSy9KYM0AAAAEAAAAAQAAAAABAgMEAAWlSy9KYM0AAAAgAAEAAAAAAAL4BPXi
-   H1IxEDCSiv5rOUekTwOS+xTJ5DI3j00Saw5d7AAAAAAAAAAAAAAAAAAAAAAAAAAA
-   AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
-
-   BDATA:
-   5e5936fttKU61GByslXav57Zgi4rac2N0F6VJCKC7NVn1YPJyiL/0+f2vZSUfHpk
-   ZfRPv9clYgzO4m+PdRcYFpkG0vqmrFnDNJQRd/y9V2Wfg4ud82FK3CT9lcMpu6Sd
-   fbZyE8PmL7cySfdMa/RsNWCVAES98UOvNJ7CaBDJlY2mb6iA
-
-   RRBLOCK:
-   Cqk3xJHTNxM1EE69iH33z0dK78FrhK+gUHMIUY//WHYCPZmbdgJc5Avb9uVTAAyT
-   5No5uINZwxXuWpL72Xh4IIqWAE/BdKHS9deQusO6CSiZN1swM5zsupJq1qjgHusG
-   AAAAlAAAAA8ABaVLL0pgzeXufd+n7bSlOtRgcrJV2r+e2YIuK2nNjdBelSQiguzV
-   Z9WDycoi/9Pn9r2UlHx6ZGX0T7/XJWIMzuJvj3UXGBaZBtL6pqxZwzSUEXf8vVdl
-   n4OLnfNhStwk/ZXDKbuknX22chPD5i+3Mkn3TGv0bDVglQBEvfFDrzSewmgQyZWN
-   pm+ogA==
-
-
-   The following is an example revocation for a zone:
-
-
-
-
-Schanzenbach, et al.       Expires 13 May 2020                 [Page 29]
-
-Internet-Draft             The GNU Name System             November 2019
-
-
-   Zone private key (d):
-   SLZnT2NK3cusTfuI0CM+XJiP4U43ZsCAv+Lk3FbIXHc=
-
-   Zone public key (zk):
-   bEclYC3aE2+fjSDDfRpdnv3gGHMckMceVbgymHZDlfA=
-
-   Difficulty (5 base difficulty + 2 epochs): 7
-
-   Proof:
-   AAWkvp6KGBVAxXvM//8AALpHh010jxRdukeHTXSPEhq6R4dNdI8VDbpHh010jxUy
-   ukeHTXSPGNK6R4dNdI8ZXLpHh010jxTTukeHTXSPFSW6R4dNdI8VarpHh010jxV3
-   ukeHTXSPFnC6R4dNdI8X5rpHh010jxoJukeHTXSPGqm6R4dNdI8aurpHh010jxwD
-   ukeHTXSPHGm6R4dNdI8cvLpHh010jxdGukeHTXSPF426R4dNdI8XxrpHh010jxif
-   ukeHTXSPGL26R4dNdI8ZJLpHh010jxlTukeHTXSPGsa6R4dNdI8bfLpHh010jxuV
-   ukeHTXSPHCi6R4dNdI8eC7pHh010jx4VukeHTXSPHhsJejeXmcDe4jcfEkWLqwIA
-   8zG/gFIxNYu34usglSp+7w8bbtTgMD5hLGiR+xxhgpPh36dGz1KBZ9kAh9pz77yS
-   bEclYC3aE2+fjSDDfRpdnv3gGHMckMceVbgymHZDlfA=
-
-
-12.  Normative References
-
-   [RFC1034]  Mockapetris, P., "Domain names - concepts and facilities",
-              STD 13, RFC 1034, DOI 10.17487/RFC1034, November 1987,
-              <https://www.rfc-editor.org/info/rfc1034>.
-
-   [RFC1035]  Mockapetris, P., "Domain names - implementation and
-              specification", STD 13, RFC 1035, DOI 10.17487/RFC1035,
-              November 1987, <https://www.rfc-editor.org/info/rfc1035>.
-
-   [RFC2782]  Gulbrandsen, A., Vixie, P., and L. Esibov, "A DNS RR for
-              specifying the location of services (DNS SRV)", RFC 2782,
-              DOI 10.17487/RFC2782, February 2000,
-              <https://www.rfc-editor.org/info/rfc2782>.
-
-   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
-              Requirement Levels", BCP 14, RFC 2119,
-              DOI 10.17487/RFC2119, March 1997,
-              <https://www.rfc-editor.org/info/rfc2119>.
-
-   [RFC3629]  Yergeau, F., "UTF-8, a transformation format of ISO
-              10646", STD 63, RFC 3629, DOI 10.17487/RFC3629, November
-              2003, <https://www.rfc-editor.org/info/rfc3629>.
-
-   [RFC3826]  Blumenthal, U., Maino, F., and K. McCloghrie, "The
-              Advanced Encryption Standard (AES) Cipher Algorithm in the
-              SNMP User-based Security Model", RFC 3826,
-              DOI 10.17487/RFC3826, June 2004,
-              <https://www.rfc-editor.org/info/rfc3826>.
-
-
-
-Schanzenbach, et al.       Expires 13 May 2020                 [Page 30]
-
-Internet-Draft             The GNU Name System             November 2019
-
-
-   [RFC5869]  Krawczyk, H. and P. Eronen, "HMAC-based Extract-and-Expand
-              Key Derivation Function (HKDF)", RFC 5869,
-              DOI 10.17487/RFC5869, May 2010,
-              <https://www.rfc-editor.org/info/rfc5869>.
-
-   [RFC5890]  Klensin, J., "Internationalized Domain Names for
-              Applications (IDNA): Definitions and Document Framework",
-              RFC 5890, DOI 10.17487/RFC5890, August 2010,
-              <https://www.rfc-editor.org/info/rfc5890>.
-
-   [RFC5891]  Klensin, J., "Internationalized Domain Names in
-              Applications (IDNA): Protocol", RFC 5891,
-              DOI 10.17487/RFC5891, August 2010,
-              <https://www.rfc-editor.org/info/rfc5891>.
-
-   [RFC6895]  Eastlake 3rd, D., "Domain Name System (DNS) IANA
-              Considerations", BCP 42, RFC 6895, DOI 10.17487/RFC6895,
-              April 2013, <https://www.rfc-editor.org/info/rfc6895>.
-
-   [RFC6979]  Pornin, T., "Deterministic Usage of the Digital Signature
-              Algorithm (DSA) and Elliptic Curve Digital Signature
-              Algorithm (ECDSA)", RFC 6979, DOI 10.17487/RFC6979, August
-              2013, <https://www.rfc-editor.org/info/rfc6979>.
-
-   [RFC7748]  Langley, A., Hamburg, M., and S. Turner, "Elliptic Curves
-              for Security", RFC 7748, DOI 10.17487/RFC7748, January
-              2016, <https://www.rfc-editor.org/info/rfc7748>.
-
-   [RFC8032]  Josefsson, S. and I. Liusvaara, "Edwards-Curve Digital
-              Signature Algorithm (EdDSA)", RFC 8032,
-              DOI 10.17487/RFC8032, January 2017,
-              <https://www.rfc-editor.org/info/rfc8032>.
-
-   [RFC8126]  Cotton, M., Leiba, B., and T. Narten, "Guidelines for
-              Writing an IANA Considerations Section in RFCs", BCP 26,
-              RFC 8126, DOI 10.17487/RFC8126, June 2017,
-              <https://www.rfc-editor.org/info/rfc8126>.
-
-   [TWOFISH]  Schneier, B., "The Twofish Encryptions Algorithm: A
-              128-Bit Block Cipher, 1st Edition", March 1999.
-
-   [GNS]      Wachs, M., Schanzenbach, M., and C. Grothoff, "A
-              Censorship-Resistant, Privacy-Enhancing and Fully
-              Decentralized Name System", 2014,
-              <https://doi.org/10.1007/978-3-319-12280-9_9>.
-
-   [R5N]      Evans, N. S. and C. Grothoff, "R5N: Randomized recursive
-
-
-
-
-Schanzenbach, et al.       Expires 13 May 2020                 [Page 31]
-
-Internet-Draft             The GNU Name System             November 2019
-
-
-              routing for restricted-route networks", 2011,
-              <https://doi.org/10.1109/ICNSS.2011.6060022>.
-
-   [Argon2]   Biryukov, A., Dinu, D., Khovratovich, D., and S.
-              Josefsson, "The memory-hard Argon2 password hash and
-              proof-of-work function", March 2020,
-              <https://datatracker.ietf.org/doc/draft-irtf-cfrg-
-              argon2/>.
-
-Authors' Addresses
-
-   Martin Schanzenbach
-   GNUnet e.V.
-   Boltzmannstrasse 3
-   85748 Garching
-   Germany
-
-   Email: address@hidden
-
-
-   Christian Grothoff
-   Berner Fachhochschule
-   Hoeheweg 80
-   CH-2501 Biel/Bienne
-   Switzerland
-
-   Email: address@hidden
-
-
-   Bernd Fix
-   GNUnet e.V.
-   Boltzmannstrasse 3
-   85748 Garching
-   Germany
-
-   Email: address@hidden
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Schanzenbach, et al.       Expires 13 May 2020                 [Page 32]
diff --git a/draft-schanzen-gns.xml b/draft-schanzen-gns.xml
index d6f98d8..ae2929a 100644
--- a/draft-schanzen-gns.xml
+++ b/draft-schanzen-gns.xml
@@ -66,7 +66,7 @@
    </address>
   </author>
 
-  <date day="10" month="November" year="2019"/>
+  <date day="31" month="May" year="2020"/>
   <!-- Meta-data Declarations -->
   <area>General</area>
   <workgroup>Independent Stream</workgroup>

-- 
To stop receiving notification emails like this one, please contact
address@hidden.



reply via email to

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