You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@milagro.apache.org by br...@apache.org on 2019/06/26 22:26:58 UTC

[incubator-milagro] branch asf-site updated (b9b0ced -> 587ac71)

This is an automated email from the ASF dual-hosted git repository.

brianspector pushed a change to branch asf-site
in repository https://gitbox.apache.org/repos/asf/incubator-milagro.git.


    from b9b0ced  new asf-site
     new 80baac4  removing asf-site files
     new 587ac71  new asf-site

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:


[incubator-milagro] 02/02: new asf-site

Posted by br...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

brianspector pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/incubator-milagro.git

commit 587ac71a528c7d435f8d9b3918987cb0bb76288a
Author: Brian Spector <br...@apache.org>
AuthorDate: Wed Jun 26 23:26:51 2019 +0100

    new asf-site
---
 blog/2019/06/10/miss-me.html                |  59 ++
 blog/2019/06/10/miss-me/index.html          |  59 ++
 blog/atom.xml                               |  23 +
 blog/feed.xml                               |  24 +
 blog/index.html                             |  59 ++
 css/main.css                                |   2 +
 css/prism.css                               | 115 ++++
 docs/amcl-c-api.html                        |  71 +++
 docs/amcl-c-api/index.html                  |  71 +++
 docs/amcl-javascript-api.html               |  79 +++
 docs/amcl-javascript-api/index.html         |  79 +++
 docs/amcl-overview.html                     | 163 ++++++
 docs/amcl-overview/index.html               | 163 ++++++
 docs/contributor-guide.html                 |  64 +++
 docs/contributor-guide/index.html           |  64 +++
 docs/d-ta-api.html                          |  80 +++
 docs/d-ta-api/index.html                    |  80 +++
 docs/d-ta-overview.html                     |  79 +++
 docs/d-ta-overview/index.html               |  79 +++
 docs/doc2.html                              |   5 +
 docs/doc2/index.html                        |   5 +
 docs/doc3.html                              |   8 +
 docs/doc3/index.html                        |   8 +
 docs/milagro-crypto.html                    | 128 +++++
 docs/milagro-crypto/index.html              | 128 +++++
 docs/milagro-design.html                    | 147 +++++
 docs/milagro-design/index.html              | 147 +++++
 docs/milagro-intro.html                     | 128 +++++
 docs/milagro-intro/index.html               | 128 +++++
 docs/milagro-protocols.html                 | 864 ++++++++++++++++++++++++++++
 docs/milagro-protocols/index.html           | 864 ++++++++++++++++++++++++++++
 docs/zkp-mfa-api.html                       |  79 +++
 docs/zkp-mfa-api/index.html                 |  79 +++
 docs/zkp-mfa-overview.html                  |  79 +++
 docs/zkp-mfa-overview/index.html            |  79 +++
 en/help.html                                |   7 +
 en/help/index.html                          |   7 +
 en/index.js-old.html                        |  10 +
 en/index.js-old/index.html                  |  10 +
 en/users.html                               |   1 +
 en/users.js.old                             |  48 ++
 en/users/index.html                         |   1 +
 files/ApacheCon_12_May.pdf                  | Bin 0 -> 4433623 bytes
 help.html                                   |   7 +
 help/index.html                             |   7 +
 images/7000x1080&text=Slide-One.png         | Bin 0 -> 227858 bytes
 images/7000x1080&text=Slide-Three.png       | Bin 0 -> 329669 bytes
 images/7000x1080&text=Slide-Two.png         | Bin 0 -> 330930 bytes
 images/MILAGRO_LOGO.svg                     |   1 +
 images/Milagro-Crypto-Library.png           | Bin 0 -> 74986 bytes
 images/Milagro-MFA.jpg                      | Bin 0 -> 101299 bytes
 images/Milagro-TLS.jpg                      | Bin 0 -> 92822 bytes
 images/Milagro-TLS2.png                     | Bin 0 -> 38235 bytes
 images/apache-feather.png                   | Bin 0 -> 8614 bytes
 images/apache-incubator.png                 | Bin 0 -> 5606 bytes
 images/milagro-footer.png                   | Bin 0 -> 1701 bytes
 images/milagro-header.png                   | Bin 0 -> 1542 bytes
 images/milagro-hero-inc-subheader.png       | Bin 0 -> 7016 bytes
 images/milagro-hero.png                     | Bin 0 -> 4141 bytes
 images/milagro-mfa-3-things.png             | Bin 0 -> 74690 bytes
 img/MILAGRO_LOGO.svg                        |   1 +
 img/MILAGRO_emblem.svg                      |   1 +
 img/apache-incubator-logo-small.png         | Bin 0 -> 7694 bytes
 img/apache-logo-small.gif                   | Bin 0 -> 7129 bytes
 img/apache_incubator.svg                    |   1 +
 img/apache_incubator_white_RGB.png          | Bin 0 -> 12736 bytes
 img/clint.eps.jpg                           | Bin 0 -> 1177327 bytes
 img/favicon.ico                             | Bin 0 -> 1406 bytes
 img/favicon.ico-old.ico                     | Bin 0 -> 766 bytes
 img/feather.svg                             |   1 +
 img/language.svg                            |   3 +
 img/milagro.svg                             |   1 +
 img/oss_logo.png                            | Bin 0 -> 8455 bytes
 img/oss_logo2.png                           | Bin 0 -> 4370 bytes
 img/undraw_code_review.svg                  |   1 +
 img/undraw_monitor.svg                      |   1 +
 img/undraw_note_list.svg                    |   1 +
 img/undraw_online.svg                       |   1 +
 img/undraw_open_source.svg                  |   1 +
 img/undraw_operating_system.svg             |   1 +
 img/undraw_react.svg                        |   1 +
 img/undraw_tweetstorm.svg                   |   1 +
 img/undraw_youtube_tutorial.svg             |   1 +
 img/words.eps.jpg                           | Bin 0 -> 343687 bytes
 index.html                                  |  14 +
 index.js-old.html                           |  10 +
 index.js-old/index.html                     |  10 +
 js/codetabs.js                              |  31 +
 js/scrollSpy.js                             |  66 +++
 sitemap.xml                                 |  21 +
 swagger/README.md                           |   0
 swagger/favicon-16x16.png                   | Bin 0 -> 651 bytes
 swagger/favicon-32x32.png                   | Bin 0 -> 628 bytes
 swagger/index.html                          |  60 ++
 swagger/oauth2-redirect.html                |  67 +++
 swagger/swagger-ui-bundle.js                | 100 ++++
 swagger/swagger-ui-bundle.js.map            |   1 +
 swagger/swagger-ui-standalone-preset.js     |  14 +
 swagger/swagger-ui-standalone-preset.js.map |   1 +
 swagger/swagger-ui.css.map                  |   1 +
 swagger/swagger-ui.js                       |   9 +
 swagger/swagger-ui.js.map                   |   1 +
 users.html                                  |   1 +
 users/index.html                            |   1 +
 104 files changed, 4813 insertions(+)

diff --git a/blog/2019/06/10/miss-me.html b/blog/2019/06/10/miss-me.html
new file mode 100644
index 0000000..6edbdde
--- /dev/null
+++ b/blog/2019/06/10/miss-me.html
@@ -0,0 +1,59 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Miss us? We missed you. · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="It&#x27;s not often that Apache Incubation projects start, lay dormant for three years, and then spring to life. Yet, it&#x27;s really happening. I pleased to report that in the past two weeks [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/blog/2019/06/10/miss-me">Miss us? We missed you.</a></h1><p class="post-meta">June 10, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/bspector" target="_blank" rel="noreferrer noopener">Brian Spector</a></p></div></header><div><spa [...]
+<p>More details soon.</p>
+</span></div></div><div class="blogSocialSection"></div></div><div class="blog-recent"><a class="button" href="/blog">Recent Posts</a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library [...]
\ No newline at end of file
diff --git a/blog/2019/06/10/miss-me/index.html b/blog/2019/06/10/miss-me/index.html
new file mode 100644
index 0000000..6edbdde
--- /dev/null
+++ b/blog/2019/06/10/miss-me/index.html
@@ -0,0 +1,59 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Miss us? We missed you. · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="It&#x27;s not often that Apache Incubation projects start, lay dormant for three years, and then spring to life. Yet, it&#x27;s really happening. I pleased to report that in the past two weeks [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/blog/2019/06/10/miss-me">Miss us? We missed you.</a></h1><p class="post-meta">June 10, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/bspector" target="_blank" rel="noreferrer noopener">Brian Spector</a></p></div></header><div><spa [...]
+<p>More details soon.</p>
+</span></div></div><div class="blogSocialSection"></div></div><div class="blog-recent"><a class="button" href="/blog">Recent Posts</a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library [...]
\ No newline at end of file
diff --git a/blog/atom.xml b/blog/atom.xml
new file mode 100644
index 0000000..1012a12
--- /dev/null
+++ b/blog/atom.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+    <id>https://milagro.apache.org/blog</id>
+    <title>Apache Milagro Blog</title>
+    <updated>2019-06-10T06:00:00Z</updated>
+    <generator>Feed for Node.js</generator>
+    <link rel="alternate" href="https://milagro.apache.org/blog"/>
+    <subtitle>The best place to stay up-to-date with the latest Apache Milagro news and events.</subtitle>
+    <logo>https://milagro.apache.org/img/milagro.svg</logo>
+    <rights>Copyright © 2019  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</rights>
+    <entry>
+        <title type="html"><![CDATA[Miss us? We missed you.]]></title>
+        <id>https://milagro.apache.org/blog/2019/06/10/miss-me.html</id>
+        <link href="https://milagro.apache.org/blog/2019/06/10/miss-me.html">
+        </link>
+        <updated>2019-06-10T06:00:00Z</updated>
+        <summary type="html"><![CDATA[<p>It's not often that Apache Incubation projects start, lay dormant for three years, and then spring to life. Yet, it's really happening. I pleased to report that in the past two weeks Milagro has added three new contributors, one new PPMC member and o...</p>]]></summary>
+        <author>
+            <name>Brian Spector</name>
+            <uri>http://twitter.com/bspector</uri>
+        </author>
+    </entry>
+</feed>
\ No newline at end of file
diff --git a/blog/feed.xml b/blog/feed.xml
new file mode 100644
index 0000000..b4e1adc
--- /dev/null
+++ b/blog/feed.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<rss version="2.0">
+    <channel>
+        <title>Apache Milagro Blog</title>
+        <link>https://milagro.apache.org/blog</link>
+        <description>The best place to stay up-to-date with the latest Apache Milagro news and events.</description>
+        <lastBuildDate>Mon, 10 Jun 2019 06:00:00 GMT</lastBuildDate>
+        <docs>http://blogs.law.harvard.edu/tech/rss</docs>
+        <generator>Feed for Node.js</generator>
+        <image>
+            <title>Apache Milagro Blog</title>
+            <url>https://milagro.apache.org/img/milagro.svg</url>
+            <link>https://milagro.apache.org/blog</link>
+        </image>
+        <copyright>Copyright © 2019  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</copyright>
+        <item>
+            <title><![CDATA[Miss us? We missed you.]]></title>
+            <link>https://milagro.apache.org/blog/2019/06/10/miss-me.html</link>
+            <guid>https://milagro.apache.org/blog/2019/06/10/miss-me.html</guid>
+            <pubDate>Mon, 10 Jun 2019 06:00:00 GMT</pubDate>
+            <description><![CDATA[<p>It's not often that Apache Incubation projects start, lay dormant for three years, and then spring to life. Yet, it's really happening. I pleased to report that in the past two weeks Milagro has added three new contributors, one new PPMC member and o...</p>]]></description>
+        </item>
+    </channel>
+</rss>
\ No newline at end of file
diff --git a/blog/index.html b/blog/index.html
new file mode 100644
index 0000000..53ca20c
--- /dev/null
+++ b/blog/index.html
@@ -0,0 +1,59 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Blog · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Core security infrastructure for decentralized networks"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Blog · Apache Milagro"/><meta property="og:type" content="website"/><met [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="posts"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/blog/2019/06/10/miss-me">Miss us? We missed you.</a></h1><p class="post-meta">June 10, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/bspector" target="_blank" rel="noreferrer noopener">Brian Spector</a></p></div></header><article cla [...]
+<p>More details soon.</p>
+</span></div></article></div><div class="docs-prevnext"></div></div></div></div></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overvi [...]
\ No newline at end of file
diff --git a/css/main.css b/css/main.css
new file mode 100644
index 0000000..6d1a6dd
--- /dev/null
+++ b/css/main.css
@@ -0,0 +1,2 @@
+a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{border:0;font:inherit;font-size:100%;margin:0;padding:0;vertical-align:baseline}b [...]
+  /*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */font-family:sans-serif;color:#3b4151}.swagger-ui html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}.swagger-ui body{margin:0}.swagger-ui article,.swagger-ui aside,.swagger-ui footer,.swagger-ui header,.swagger-ui nav,.swagger-ui section{display:block}.swagger-ui h1{font-size:2em;margin:.67em 0}.swagger-ui figcaption,.swagger-ui figure,.swagger-ui main{display:block}.swagger-ui figure [...]
\ No newline at end of file
diff --git a/css/prism.css b/css/prism.css
new file mode 100644
index 0000000..d783edb
--- /dev/null
+++ b/css/prism.css
@@ -0,0 +1,115 @@
+/**
+ * Copyright (c) 2017-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ *
+ * Modified prism.js default theme for JavaScript, CSS and HTML
+ * Based on dabblet (http://dabblet.com)
+ * @author Lea Verou
+ */
+
+code[class*='language-'],
+pre[class*='language-'] {
+  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+  text-align: left;
+  white-space: pre;
+  word-spacing: normal;
+  word-break: normal;
+  word-wrap: normal;
+  line-height: 1.5;
+
+  -moz-tab-size: 4;
+  -o-tab-size: 4;
+  tab-size: 4;
+
+  -webkit-hyphens: none;
+  -moz-hyphens: none;
+  -ms-hyphens: none;
+  hyphens: none;
+}
+
+/* Code blocks */
+pre[class*='language-'] {
+  padding: 1em;
+  margin: 0.5em 0;
+  overflow: auto;
+}
+
+/* Inline code */
+:not(pre) > code[class*='language-'] {
+  padding: 0.1em;
+  border-radius: 0.3em;
+  white-space: normal;
+}
+
+.token.comment,
+.token.prolog,
+.token.doctype,
+.token.cdata {
+  color: slategray;
+}
+
+.token.punctuation {
+  color: #999;
+}
+
+.namespace {
+  opacity: 0.7;
+}
+
+.token.property,
+.token.tag,
+.token.boolean,
+.token.constant,
+.token.symbol,
+.token.deleted {
+  color: #905;
+}
+
+.token.selector,
+.token.number,
+.token.attr-name,
+.token.string,
+.token.char,
+.token.builtin,
+.token.inserted {
+  color: #690;
+}
+
+.token.operator,
+.token.entity,
+.token.url,
+.language-css .token.string,
+.style .token.string {
+  color: #9a6e3a;
+}
+
+.token.atrule,
+.token.attr-value,
+.token.keyword {
+  color: #07a;
+}
+
+.token.function,
+.token.class-name {
+  color: #dd4a68;
+}
+
+.token.regex,
+.token.important,
+.token.variable {
+  color: #e90;
+}
+
+.token.important,
+.token.bold {
+  font-weight: bold;
+}
+.token.italic {
+  font-style: italic;
+}
+
+.token.entity {
+  cursor: help;
+}
diff --git a/docs/amcl-c-api.html b/docs/amcl-c-api.html
new file mode 100644
index 0000000..a222724
--- /dev/null
+++ b/docs/amcl-c-api.html
@@ -0,0 +1,71 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>AMCL C API · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Doxygen support is available for Milagro Crypto Library.&lt;/p&gt;
+"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="AMCL C API · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;p&gt;Doxygen support is available for Milagro Crypto Library.&lt;/p&gt;
+"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type=" [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">AMCL C API</h1></header><article><div><span><p>Doxygen support is available for Milagro Crypto Library.</p>
+<p>An online version of the Doxygen output is available for viewing in a web browser <a href="http://docs.milagro.io/en/doxygen/index.html" target="_blank">here</a>.</p>
+<p>PDF of the Doxygen output is available for download <a href="https://s3.amazonaws.com/docs.milagro.io/amcl-doxygen.pdf" target="_blank">here</a>.</p>
+
+    <div class="admonition admonition-caution">
+      <div class="admonition-heading">
+        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18  [...]
+      </div>
+      <div class="admonition-content">
+    <p>This documentation is being updated.</p>
+</div></div><!--
+Supported admonition types are: caution, note, important, tip, warning.
+--></span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/amcl-overview"><span class="arrow-prev">← </span><span>AMCL Overview</span></a><a class="docs-next button" href="/docs/amcl-javascript-api"><span class="function-name-prevnext">AMCL JavaScript API</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class= [...]
\ No newline at end of file
diff --git a/docs/amcl-c-api/index.html b/docs/amcl-c-api/index.html
new file mode 100644
index 0000000..a222724
--- /dev/null
+++ b/docs/amcl-c-api/index.html
@@ -0,0 +1,71 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>AMCL C API · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Doxygen support is available for Milagro Crypto Library.&lt;/p&gt;
+"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="AMCL C API · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;p&gt;Doxygen support is available for Milagro Crypto Library.&lt;/p&gt;
+"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type=" [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">AMCL C API</h1></header><article><div><span><p>Doxygen support is available for Milagro Crypto Library.</p>
+<p>An online version of the Doxygen output is available for viewing in a web browser <a href="http://docs.milagro.io/en/doxygen/index.html" target="_blank">here</a>.</p>
+<p>PDF of the Doxygen output is available for download <a href="https://s3.amazonaws.com/docs.milagro.io/amcl-doxygen.pdf" target="_blank">here</a>.</p>
+
+    <div class="admonition admonition-caution">
+      <div class="admonition-heading">
+        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18  [...]
+      </div>
+      <div class="admonition-content">
+    <p>This documentation is being updated.</p>
+</div></div><!--
+Supported admonition types are: caution, note, important, tip, warning.
+--></span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/amcl-overview"><span class="arrow-prev">← </span><span>AMCL Overview</span></a><a class="docs-next button" href="/docs/amcl-javascript-api"><span class="function-name-prevnext">AMCL JavaScript API</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class= [...]
\ No newline at end of file
diff --git a/docs/amcl-javascript-api.html b/docs/amcl-javascript-api.html
new file mode 100644
index 0000000..5419ff2
--- /dev/null
+++ b/docs/amcl-javascript-api.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>AMCL JavaScript API · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="
+    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
+      &lt;div class=&quot;admonition-heading&quot;&gt;
+        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
+      &lt;/div&gt;
+      &lt;div class=&quot;admonition-content&quot;&gt;
+    &lt;/div&gt;&lt;/div&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="AMCL JavaScript API · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="
+    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
+      &lt;div class=&quot;admonition-heading&quot;&gt;
+        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
+      &lt;/div&gt;
+      &lt;div class=&quot;admonition-content&quot;&gt;
+    &lt;/div&gt;&lt;/div&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Bl [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">AMCL JavaScript API</h1></header><article><div><span>
+    <div class="admonition admonition-tip">
+      <div class="admonition-heading">
+        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2 [...]
+      </div>
+      <div class="admonition-content">
+    <p>Interested in becoming a contributor? Milagro is looking for you.</p>
+<p><a href="/docs/contributor-guide.html">CONTRIBUTOR'S GUIDE</a>.</p>
+</div></div><!--
+Supported admonition types are: caution, note, important, tip, warning.
+--></span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/amcl-c-api"><span class="arrow-prev">← </span><span>AMCL C API</span></a><a class="docs-next button" href="/docs/d-ta-overview"><span>D-TA Node Overview</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sit [...]
\ No newline at end of file
diff --git a/docs/amcl-javascript-api/index.html b/docs/amcl-javascript-api/index.html
new file mode 100644
index 0000000..5419ff2
--- /dev/null
+++ b/docs/amcl-javascript-api/index.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>AMCL JavaScript API · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="
+    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
+      &lt;div class=&quot;admonition-heading&quot;&gt;
+        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
+      &lt;/div&gt;
+      &lt;div class=&quot;admonition-content&quot;&gt;
+    &lt;/div&gt;&lt;/div&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="AMCL JavaScript API · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="
+    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
+      &lt;div class=&quot;admonition-heading&quot;&gt;
+        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
+      &lt;/div&gt;
+      &lt;div class=&quot;admonition-content&quot;&gt;
+    &lt;/div&gt;&lt;/div&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Bl [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">AMCL JavaScript API</h1></header><article><div><span>
+    <div class="admonition admonition-tip">
+      <div class="admonition-heading">
+        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2 [...]
+      </div>
+      <div class="admonition-content">
+    <p>Interested in becoming a contributor? Milagro is looking for you.</p>
+<p><a href="/docs/contributor-guide.html">CONTRIBUTOR'S GUIDE</a>.</p>
+</div></div><!--
+Supported admonition types are: caution, note, important, tip, warning.
+--></span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/amcl-c-api"><span class="arrow-prev">← </span><span>AMCL C API</span></a><a class="docs-next button" href="/docs/d-ta-overview"><span>D-TA Node Overview</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sit [...]
\ No newline at end of file
diff --git a/docs/amcl-overview.html b/docs/amcl-overview.html
new file mode 100644
index 0000000..3e5d6eb
--- /dev/null
+++ b/docs/amcl-overview.html
@@ -0,0 +1,163 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Milagro Crypto Library (AMCL) · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;introduction&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#introduction&quot; aria-hidden=&quot;true&quot; cl [...]
+"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Apache Milagro Crypto Library (AMCL) · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;introduction&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#introduction&quot; aria-hidden=&quot;true&quot; class=&quot;hash-link&quot; [...]
+"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type=" [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Apache Milagro Crypto Library (AMCL)</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="introduction"></a><a href="#introduction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h [...]
+<p>One of the major mysteries in the real-world of crypto is resistance to the exploitation of new research ideas. Its not that cryptographic research has failed to throw up new ideas that have the potential for commercial exploitation -- far from it. But in the real-world, 1970's crypto rules supreme, and very little happens that isn't PKI/RSA based. The reasons for this are many and varied. However one part of the puzzle might be the non-availability of easy-to-use open source cryptogr [...]
+<p>There are many crypto libraries out there. Many offer a bewildering variety of cryptographic primitives, at different levels of security. Many use extensive assembly language in order to be as fast as possible. Many are very <strong>BIG</strong>, even bloated. Some rely on other external libraries. Many were designed by academics for academics, and so are not really suitable for commercial use. Many are otherwise excellent, but not written in our favorite language.</p>
+<p>The Apache Milagro Crypto Library (AMCL) is different; AMCL is completely self-contained, except for the requirement for an external entropy source for random number generation.</p>
+<p>AMCL is portable - there is no assembly language. The original version is written in C, Java, Javascript, Go and Swift using only generic programming constructs, but AMCL is truly multi-lingual, as compatible  versions will be available in many other languages. These versions will be identical in that for the same inputs they will not only produce the same outputs, but all internal calculations will also be the same.</p>
+<p>AMCL is fast, but does not attempt to set speed records (a particular academic obsession). There are of course contexts where speed is of the essence; for example for a server farm which must handle multiple SSL connections, and where a 10% speed increase implies the need for 10% less servers, with a a 10% saving on electricity. But in the Internet of Things we would suggest that this is less important. In general the speed is expected to be &quot;good enough&quot;. However AMCL is sm [...]
+<p>The C version of AMCL is configured at compile time for 16, 32 or 64 bit processors, and for a specific elliptic curve. The Java and Javascript versions are (obviously) processor agnostic, but the same choices of elliptic curve are available.</p>
+<p>AMCL is written with an awareness of the abilities of modern pipelined processors. In particular there was an awareness that the unpredictable program branch should be avoided at all costs, not only as it slows down the processor, but as it may open the door to side-channel attacks. The innocuous looking <code>if</code> statement - unless its outcome can be accurately predicted - is the enemy of quality crypto software.</p>
+<p>In the sequel we refer to the C version of AMCL, unless otherwise specified. We emphasis that all AMCL versions are completely self-contained. No external libraries or packages are required to implement all of the supported cryptographic functionality (other than for an external entropy source).</p>
+<h2><a class="anchor" aria-hidden="true" id="library-structure"></a><a href="#library-structure" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
+<p>The modules that make up AMCL are shown below, with some indication of how they interact. Several example APIs will be provided to implement common protocols. Note that all interaction with the API is via machine-independent endian-indifferent arrays of bytes (a.k.a. octet strings). Therefore the underlying workings of the library are invisible to the consumer of its services.</p>
+<p><img src="/img/clint.eps.jpg" alt="client"></p>
+<figure>
+  <caption><strong>Figure 1.</strong> AMCL Library  </caption>
+</figure>
+<h2><a class="anchor" aria-hidden="true" id="handling-big-numbers"></a><a href="#handling-big-numbers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
+<h3><a class="anchor" aria-hidden="true" id="representation"></a><a href="#representation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<p>One of the major design decisions is how to represent the 256-bit field elements required for the elliptic curve and pairing-based cryptography. Here there are two different approaches.</p>
+<p>One is to pack the bits as tightly as possible into computer words. For example on a 64-bit computer 256-bit numbers can be stored in just 4 words. However to manipulate numbers in this form, even for simple addition, requires handling of carry bits if overflow is to be avoided, and a high-level language does not have direct access to carry flags. It is possible to emulate the flags, but this would be inefficient. In fact this approach is only really suitable for an assembly language  [...]
+<p>The alternative idea is to use extra words for the representation, and then try to offset the additional cost by taking full advantage of the &quot;spare&quot; bits in every word. This idea follows a &quot;corner of the literature&quot;<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup> which has been promoted by Bernstein and his collaborators in several publications. Refer to Figure 2, where each digit of the representation is stored as a signed integer which is the s [...]
+<p>Note that almost all arithmetic takes place modulo a 256-bit prime number, the modulus representing the field over which the elliptic curve is defined, here denoted as \( p \).</p>
+<p>On 64-bit processors, AMCL represents numbers to the base \( 2^{56} \) in a 5 element array, the Word Excess is 7 bits, and for a 256-bit modulus the Field Excess is 24 bits.</p>
+<p>On 32-bit processors, AMCL represents numbers to the base \( 2^{29} \) in a 9 element array, the Word Excess is 2 bits, and for a 256-bit modulus the Field Excess is 5 bits.</p>
+<p>On 16-bit processors, AMCL represents numbers to the base \( 2^{13} \) in a 20 element array, the Word Excess is 2 bits, and for a 256-bit modulus the Field Excess is 4 bits.</p>
+<p>Such a representation of a 256-bit number is referred to as a <strong>BIG</strong>. Addition or subtraction of a pair of <strong>BIG</strong>s, results in another <strong>BIG</strong>.</p>
+<p>The Java version uses exactly the same 32-bit representation as above.</p>
+<p>For Javascript (where all numbers are stored as 64-bit floating point with a 52-bit mantissa, but mostly manipulated as 32-bit integers), numbers are represented to the base \( 2^{24} \) in an 11 element array, the Word Excess is 7 bits, and the Field Excess for a 256-bit modulus is 8 bits.</p>
+<h3><a class="anchor" aria-hidden="true" id="addition-and-subtraction"></a><a href="#addition-and-subtraction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
+<p>The existence of a word excess means for example that multiple field elements can be added together digit by digit, without processing of carries, before overflow can occur.</p>
+<p>Only occasionally will there be a requirement to <em>normalize</em> these <em>extended</em> values, that is to force them back into the original format. Note that this is independent of the modulus.</p>
+<p>The existence of a field excess means that, independent of the word excess, multiple field elements can be added together before it is required to reduce the sum with respect to the modulus. In the literature this is referred to as lazy, or delayed, reduction. In fact we allow the modulus to be as small as 254 bits, which obviously increases the field excess.</p>
+<p>Note that these two mechanisms associated with the word excess and the field excess (often confused in the literature) operate largely independently of each other.</p>
+<p>AMCL has no support for negative numbers. Therefore subtraction will be implemented as field negation followed by addition. However a field element \( x \) can be negated by simply calculating \( −x = e.p − x \), where \( e \) is the current excess associated with \( x \). Therefore subtraction will be implemented as field negation followed by addition. In practice it is more convenient to round \( e \) up to next highest power of 2, in which case \( e.p \) can be calculated by a simp [...]
+<p><img src="/img/words.eps.jpg" alt="client"></p>
+<figure>
+  <caption><strong>Figure 2.</strong> AMCL Library</caption>
+</figure>
+<br>
+Normalization of extended numbers requires the word excess of each digit to be shifted right by the number of base bits, and added to the next digit, working right to left. Note that when numbers are subtracted digit-by-digit individual digits may become negative. However since we are avoiding using the sign bit, due to the magic of 2's complement arithmetic, this all works fine without any conditional branches.
+<p>Final full reduction of unreduced field elements is carried out using a simple shift-and-subtract of the modulus, with one subtraction needed for every bit in the actual field excess. Such reductions will rarely be required, as they are slow and hard to do in constant time. Ideally it should only be required at the end of a complex operation like an elliptic curve point multiplication.</p>
+<p>So with careful programming we avoid any unpredictable program branches. Since the length of field elements is fixed at compile time, it is expected that the compiler will unroll most of the time-critical loops. In any case the conditional branch required at the foot of a fixed-size loop can be accurately predicted by modern hardware.</p>
+<p>Worst case field excesses are easy to calculate. If two elements \( a \) and \( b \) are to be added, and if their current field excesses are \( e_{a} \) and \( e_{b} \) respectively, then clearly their sum will have a worst-case field excess of \( e_{a}+e_{b} \). By careful programming and choice of number base, full reductions can be largely eliminated<sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup>.</p>
+<h3><a class="anchor" aria-hidden="true" id="multiplication-and-reduction"></a><a href="#multiplication-and-reduction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
+<p>To support multiplication of <strong>BIG</strong>s, we will require a double-length <strong><em>DBIG</em></strong> type. Also the partial products that arise in the process of long multiplication will require a double-length data type. Fortunately many popular C compilers, like Gnu GCC, always support an integer type that is double the native word-length. For Java the &quot;int&quot; type is 32-bits and there is a double-length &quot;long&quot; type which is 64-bit. Of course for Java [...]
+<p>Multiprecision multiplication is performed column by column, propagating the carries, working from right-to-left, but using the fast method described in<sup class="footnote-ref"><a href="#fn3" id="fnref3">[3]</a></sup>. At the foot of each column the total is split into the sum for that column, and the carry to the next column. If the numbers are normalized prior to the multiplication, then with the word excesses that we have chosen, this will not result in overflow. The DBIG product  [...]
+<p>The method used for full reduction of a <strong>DBIG</strong> back to a <strong>BIG</strong> depends on the form of the modulus. We choose to support three distinct types of modulus, (a) pseudo Mersenne of the form \( 2^n-c \) where \( c \) is small and $n$ is the size of the modulus in bits, (b) Montgomery-friendly of the form \( k.2^n-1 \), and (c) moduli of no special form. For cases (b) and (c) we convert all field elements to Montgomery's \( n \)-residue form, and use Montgomery' [...]
+<p>In all cases the <strong>DBIG</strong> number to be reduced \( y \) must be in the range \( 0&lt;y&lt;pR \) (a requirement of Montgomery's method), and the result \( x \) is guaranteed to be in the range \( 0&lt;x&lt;2p \) , where \( R=2^{256+FE} \) for a 256-bit modulus. Note that the <strong>BIG</strong> result will be (nearly) fully reduced. The fact than we allow \( x \) to be larger than \( p \) means that we can avoid the notorious Montgomery &quot;final subtraction&quot;. Indep [...]
+<p>Observe how unreduced numbers involved in complex calculations tend to be (nearly fully) reduced if they are involved in a modular multiplication. So for example if field element \( x \) has a large field excess, and if we calculate \( x=x.y \), then as long as the unreduced product is less than \( pR \), the result will be a nearly fully reduced \( x \). So in many cases there is a natural tendency for field excesses not to grow without limit, and not to overflow, without requiring e [...]
+<p>Consider now a sequence of code that adds, subtracts and multiplies field elements, as might arise in elliptic curve additions and doublings. Assume that the code has been analysed and that normalisation code has been inserted where needed. Assume that the reduction code that activates if there is a possibility of an element overflowing its field excess, while present, never in fact is triggered (due to the behaviour described above). Then we assert that once a program has initialised [...]
+<h2><a class="anchor" aria-hidden="true" id="extension-field-arithmetic"></a><a href="#extension-field-arithmetic" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H [...]
+<p>To support cryptographic pairings we will need support for extension fields. We use a towering of extensions as required for BN curves and as required for higher security BLS curves. An element of the quadratic extension field will be represented as \( f=a+ib \), where \( i \) is the square root of the quadratic non-residue -1. To add, subtract and multiply them we use the obvious methods.</p>
+<p>However for negation we can construct \( -f=-a-ib \) as \( b-(a+b)+i.(a-(a+b) \) which requires only one base field negation. A similar idea can be used recursively for higher order extensions, so that only one base field negation is ever required.</p>
+<h2><a class="anchor" aria-hidden="true" id="elliptic-curves"></a><a href="#elliptic-curves" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
+<p>Three types of Elliptic curve are supported for the implementation of Elliptic Curve Cryptography (ECC), but curves are limited to popular families that support faster implementation. Weierstrass curves are supported using the Short Weierstrass representation:</p>
+<p>$$y^2=x^3+Ax+B$$</p>
+<p>where \( A=0 \) or \( A=-3 \). Edwards curves are supported using both regular and twisted Edwards format:</p>
+<p>$$Ax^2+y^2=1+Bx^2y^2$$</p>
+<p>where \( A=1 \) or \( A=-1 \). Montgomery curves are represented as:</p>
+<p>$$y^2=x^3+Ax^2+x$$</p>
+<p>where \( A \) must be small. As mentioned in the introduction, in all cases we use exception-free formulae if available, as this facilitates constant time imple- mentation, even if this invokes a significant performance penalty.</p>
+<p>In the particular case of elliptic curve point multiplication, there are potentially a myriad of very dangerous side-channel attacks that arise from using the classic double-and-add algorithm and its variants. Vulnerabilities arise if branches are taken that depend on secret bits, or if data is even accessed using secret values as indices. Many types of counter-measures have been suggested. The simplest solution is to use a constant-time algorithm like the Montgomery ladder, which has [...]
+<p>If using a Montgomery representation of the elliptic curve the Montgomery ladder is in fact the optimal algorithm for point multiplication. For other representations we use a fixed-sized signed window method.</p>
+<p>AMCL has built-in support for most standardised elliptic curves, along with many curves that have been proposed for standardisation. Specifically it supports the NIST256 curve, the well known Curve25519, the 256-bit Brain- pool curve, the ANSSI curve, and six NUMS (Nothing-Up-My-Sleeve) curves proposed by Bos et al. At higher levels of security the NIST384 and NIST521 curves are supported, also Curve41417 as well as the Goldilocks curve, and our own HiFive curve.
+Some of these proposals support only a Weierstrass representation, but many also allow an Edwards or Montgomery form. Tools are provided to allow easy integration of more curves.</p>
+<h2><a class="anchor" aria-hidden="true" id="support-for-classic-finite-field-methods"></a><a href="#support-for-classic-finite-field-methods" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0  [...]
+<p>Before Elliptic Curves, cryptography depended on methods based on simple finite fields. The most famous of these would be the well known RSA method. These methods have the advantage of being effectively parameterless, and therefore the issue of trust in parameters that arises for elliptic curves, is not an issue.</p>
+<p>However these methods are subject to index calculus based methods of cryptanalysis, and so fields and keys are typically much larger. So how to support for example a 2048-bit implementation of RSA based on a library designed for optimized 256-bit operations? The idea is simple; use AMCL as a virtual 256-bit machine, and build 2048-bit arithmetic on top of that.</p>
+<p>And to claw back some decent performance use the Karatsuba method so that for example 2048-bit multiplication recurses efficiently right down to 256-bit operations. Of course the downside of the Karatsuba method is that while it saves on multiplications, the number of additions and subtractions is greatly increased.  However the existence of generous word excesses in our representation makes this less of a problem, as most additions can be carried out without normalization.</p>
+<p>Secret key operations like RSA decryption use the Montgomery ladder to achieve side-channel-attack resistance.</p>
+<p>The implementation can currently support \( 1024.2^n \) bit fields, so for example 2048-bit RSA can be used to get reasonably close to the AES-128-bit level of security, and if desired 4096 bit RSA can be used to comfortably exceed it.</p>
+<p>Note that this code is supported independently of the elliptic curve code. So for example RSA and ECC can be run together within a single application.</p>
+<p>However we regard these methods as &quot;legacy&quot; as in our view ECC based methods are a much better fit for the IoT.</p>
+<h2><a class="anchor" aria-hidden="true" id="multi-lingual-support"></a><a href="#multi-lingual-support" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
+<p>It is a <strong>BIG</strong> ask to develop and maintain multiple versions of a crypto library written in radically different languages such as C, Java, Javascript, Go and Swift. This has discouraged the use of language specific methods (which are in any case of little relevance here), and strongly encouraged the use of simple, generic computer language constructs.</p>
+<p>This approach brings a surprising bonus: AMCL can be automatically converted to many other languages using available translator tools. For example Tangible Software Solutions market a Java to C# converter. This generated an efficient fully functional C# version of AMCL within minutes. The same company market a Java to Visual Basic converter.</p>
+<p>Google have a Java to Objective C converter specifically designed to convert Android apps developed in Java, to iOS apps written in Objective C.</p>
+<p>Of course not all languages can be supported in this way, so support for some will be developed manually. In particular a Rust version is currently under development.</p>
+<h2><a class="anchor" aria-hidden="true" id="discussion"></a><a href="#discussion" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<p>We found in our code that, with few exceptions, reductions due to possible overflow of the field excess of a <strong>BIG</strong> were very rare, especially for the 64-bit version of the library. Similarly normalization was rarely needed for the 64-bit code. This is due to the much greater excesses that apply in the 64-bit representation. In some experiments we calculated thousands of random pairings, and reduction due to field excess overflow detection never happened.</p>
+<p>In general in developing AMCL we tried to use optimal methods, without going to what we (very subjectively) regarded as extremes in order to maximize performance.  Algorithms that require less memory were generally preferred if the impact on performance was not large. Some optimizations, while perfectly valid, are hard to implement without having a significant impact on program readability and maintainability. Deciding which optimizations to use and which to reject (on the grounds of  [...]
+readability and maintainability) is admittedly rather arbitrary!</p>
+<p>One notable omission from AMCL is the use of pre-computation on fixed parameters in order to speed up certain calculations. We try to justify this, rather unconvincingly, by pointing out that pre-computation must of necessity increase code size. Furthermore such methods are more sensitive to side-channel attacks and much of their speed advantage will be lost if they are to be fully side-channel protected. Also pre-computation on secret values clearly increases the amount of secret dat [...]
+<p>However the development roadmap view might change in later versions depending on the project supporters in-the-field experiences of using AMCL.</p>
+<hr>
+
+    <div class="admonition admonition-note">
+      <div class="admonition-heading">
+        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V [...]
+      </div>
+      <div class="admonition-content">
+    <p>Submit a pull request on the development branch of <a href="https://github.com/apache/incubator-milagro">Milagro Website Repo</a>.</p>
+</div></div><!--
+Supported admonition types are: caution, note, important, tip, warning.
+--><hr class="footnotes-sep">
+<section class="footnotes">
+<ol class="footnotes-list">
+<li id="fn1"  class="footnote-item"><p><a href="http://eprint.iacr.org/2014/526">Curve41417 Karatsuba revisited</a> <a href="#fnref1" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn2"  class="footnote-item"><p><a href="http://eprint.iacr.org/2017/437">Slothful Reduction</a> <a href="#fnref2" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn3"  class="footnote-item"><p><a href="http://eprint.iacr.org/2015/1247">Missing a trick: Karatsuba variations</a> <a href="#fnref3" class="footnote-backref">↩</a></p>
+</li>
+</ol>
+</section>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/milagro-design"><span class="arrow-prev">← </span><span>Milagro Design</span></a><a class="docs-next button" href="/docs/amcl-c-api"><span>AMCL C API</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#introduction">Introduction</a></li><l [...]
\ No newline at end of file
diff --git a/docs/amcl-overview/index.html b/docs/amcl-overview/index.html
new file mode 100644
index 0000000..3e5d6eb
--- /dev/null
+++ b/docs/amcl-overview/index.html
@@ -0,0 +1,163 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Milagro Crypto Library (AMCL) · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;introduction&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#introduction&quot; aria-hidden=&quot;true&quot; cl [...]
+"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Apache Milagro Crypto Library (AMCL) · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;introduction&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#introduction&quot; aria-hidden=&quot;true&quot; class=&quot;hash-link&quot; [...]
+"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type=" [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Apache Milagro Crypto Library (AMCL)</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="introduction"></a><a href="#introduction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h [...]
+<p>One of the major mysteries in the real-world of crypto is resistance to the exploitation of new research ideas. Its not that cryptographic research has failed to throw up new ideas that have the potential for commercial exploitation -- far from it. But in the real-world, 1970's crypto rules supreme, and very little happens that isn't PKI/RSA based. The reasons for this are many and varied. However one part of the puzzle might be the non-availability of easy-to-use open source cryptogr [...]
+<p>There are many crypto libraries out there. Many offer a bewildering variety of cryptographic primitives, at different levels of security. Many use extensive assembly language in order to be as fast as possible. Many are very <strong>BIG</strong>, even bloated. Some rely on other external libraries. Many were designed by academics for academics, and so are not really suitable for commercial use. Many are otherwise excellent, but not written in our favorite language.</p>
+<p>The Apache Milagro Crypto Library (AMCL) is different; AMCL is completely self-contained, except for the requirement for an external entropy source for random number generation.</p>
+<p>AMCL is portable - there is no assembly language. The original version is written in C, Java, Javascript, Go and Swift using only generic programming constructs, but AMCL is truly multi-lingual, as compatible  versions will be available in many other languages. These versions will be identical in that for the same inputs they will not only produce the same outputs, but all internal calculations will also be the same.</p>
+<p>AMCL is fast, but does not attempt to set speed records (a particular academic obsession). There are of course contexts where speed is of the essence; for example for a server farm which must handle multiple SSL connections, and where a 10% speed increase implies the need for 10% less servers, with a a 10% saving on electricity. But in the Internet of Things we would suggest that this is less important. In general the speed is expected to be &quot;good enough&quot;. However AMCL is sm [...]
+<p>The C version of AMCL is configured at compile time for 16, 32 or 64 bit processors, and for a specific elliptic curve. The Java and Javascript versions are (obviously) processor agnostic, but the same choices of elliptic curve are available.</p>
+<p>AMCL is written with an awareness of the abilities of modern pipelined processors. In particular there was an awareness that the unpredictable program branch should be avoided at all costs, not only as it slows down the processor, but as it may open the door to side-channel attacks. The innocuous looking <code>if</code> statement - unless its outcome can be accurately predicted - is the enemy of quality crypto software.</p>
+<p>In the sequel we refer to the C version of AMCL, unless otherwise specified. We emphasis that all AMCL versions are completely self-contained. No external libraries or packages are required to implement all of the supported cryptographic functionality (other than for an external entropy source).</p>
+<h2><a class="anchor" aria-hidden="true" id="library-structure"></a><a href="#library-structure" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
+<p>The modules that make up AMCL are shown below, with some indication of how they interact. Several example APIs will be provided to implement common protocols. Note that all interaction with the API is via machine-independent endian-indifferent arrays of bytes (a.k.a. octet strings). Therefore the underlying workings of the library are invisible to the consumer of its services.</p>
+<p><img src="/img/clint.eps.jpg" alt="client"></p>
+<figure>
+  <caption><strong>Figure 1.</strong> AMCL Library  </caption>
+</figure>
+<h2><a class="anchor" aria-hidden="true" id="handling-big-numbers"></a><a href="#handling-big-numbers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
+<h3><a class="anchor" aria-hidden="true" id="representation"></a><a href="#representation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<p>One of the major design decisions is how to represent the 256-bit field elements required for the elliptic curve and pairing-based cryptography. Here there are two different approaches.</p>
+<p>One is to pack the bits as tightly as possible into computer words. For example on a 64-bit computer 256-bit numbers can be stored in just 4 words. However to manipulate numbers in this form, even for simple addition, requires handling of carry bits if overflow is to be avoided, and a high-level language does not have direct access to carry flags. It is possible to emulate the flags, but this would be inefficient. In fact this approach is only really suitable for an assembly language  [...]
+<p>The alternative idea is to use extra words for the representation, and then try to offset the additional cost by taking full advantage of the &quot;spare&quot; bits in every word. This idea follows a &quot;corner of the literature&quot;<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup> which has been promoted by Bernstein and his collaborators in several publications. Refer to Figure 2, where each digit of the representation is stored as a signed integer which is the s [...]
+<p>Note that almost all arithmetic takes place modulo a 256-bit prime number, the modulus representing the field over which the elliptic curve is defined, here denoted as \( p \).</p>
+<p>On 64-bit processors, AMCL represents numbers to the base \( 2^{56} \) in a 5 element array, the Word Excess is 7 bits, and for a 256-bit modulus the Field Excess is 24 bits.</p>
+<p>On 32-bit processors, AMCL represents numbers to the base \( 2^{29} \) in a 9 element array, the Word Excess is 2 bits, and for a 256-bit modulus the Field Excess is 5 bits.</p>
+<p>On 16-bit processors, AMCL represents numbers to the base \( 2^{13} \) in a 20 element array, the Word Excess is 2 bits, and for a 256-bit modulus the Field Excess is 4 bits.</p>
+<p>Such a representation of a 256-bit number is referred to as a <strong>BIG</strong>. Addition or subtraction of a pair of <strong>BIG</strong>s, results in another <strong>BIG</strong>.</p>
+<p>The Java version uses exactly the same 32-bit representation as above.</p>
+<p>For Javascript (where all numbers are stored as 64-bit floating point with a 52-bit mantissa, but mostly manipulated as 32-bit integers), numbers are represented to the base \( 2^{24} \) in an 11 element array, the Word Excess is 7 bits, and the Field Excess for a 256-bit modulus is 8 bits.</p>
+<h3><a class="anchor" aria-hidden="true" id="addition-and-subtraction"></a><a href="#addition-and-subtraction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
+<p>The existence of a word excess means for example that multiple field elements can be added together digit by digit, without processing of carries, before overflow can occur.</p>
+<p>Only occasionally will there be a requirement to <em>normalize</em> these <em>extended</em> values, that is to force them back into the original format. Note that this is independent of the modulus.</p>
+<p>The existence of a field excess means that, independent of the word excess, multiple field elements can be added together before it is required to reduce the sum with respect to the modulus. In the literature this is referred to as lazy, or delayed, reduction. In fact we allow the modulus to be as small as 254 bits, which obviously increases the field excess.</p>
+<p>Note that these two mechanisms associated with the word excess and the field excess (often confused in the literature) operate largely independently of each other.</p>
+<p>AMCL has no support for negative numbers. Therefore subtraction will be implemented as field negation followed by addition. However a field element \( x \) can be negated by simply calculating \( −x = e.p − x \), where \( e \) is the current excess associated with \( x \). Therefore subtraction will be implemented as field negation followed by addition. In practice it is more convenient to round \( e \) up to next highest power of 2, in which case \( e.p \) can be calculated by a simp [...]
+<p><img src="/img/words.eps.jpg" alt="client"></p>
+<figure>
+  <caption><strong>Figure 2.</strong> AMCL Library</caption>
+</figure>
+<br>
+Normalization of extended numbers requires the word excess of each digit to be shifted right by the number of base bits, and added to the next digit, working right to left. Note that when numbers are subtracted digit-by-digit individual digits may become negative. However since we are avoiding using the sign bit, due to the magic of 2's complement arithmetic, this all works fine without any conditional branches.
+<p>Final full reduction of unreduced field elements is carried out using a simple shift-and-subtract of the modulus, with one subtraction needed for every bit in the actual field excess. Such reductions will rarely be required, as they are slow and hard to do in constant time. Ideally it should only be required at the end of a complex operation like an elliptic curve point multiplication.</p>
+<p>So with careful programming we avoid any unpredictable program branches. Since the length of field elements is fixed at compile time, it is expected that the compiler will unroll most of the time-critical loops. In any case the conditional branch required at the foot of a fixed-size loop can be accurately predicted by modern hardware.</p>
+<p>Worst case field excesses are easy to calculate. If two elements \( a \) and \( b \) are to be added, and if their current field excesses are \( e_{a} \) and \( e_{b} \) respectively, then clearly their sum will have a worst-case field excess of \( e_{a}+e_{b} \). By careful programming and choice of number base, full reductions can be largely eliminated<sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup>.</p>
+<h3><a class="anchor" aria-hidden="true" id="multiplication-and-reduction"></a><a href="#multiplication-and-reduction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
+<p>To support multiplication of <strong>BIG</strong>s, we will require a double-length <strong><em>DBIG</em></strong> type. Also the partial products that arise in the process of long multiplication will require a double-length data type. Fortunately many popular C compilers, like Gnu GCC, always support an integer type that is double the native word-length. For Java the &quot;int&quot; type is 32-bits and there is a double-length &quot;long&quot; type which is 64-bit. Of course for Java [...]
+<p>Multiprecision multiplication is performed column by column, propagating the carries, working from right-to-left, but using the fast method described in<sup class="footnote-ref"><a href="#fn3" id="fnref3">[3]</a></sup>. At the foot of each column the total is split into the sum for that column, and the carry to the next column. If the numbers are normalized prior to the multiplication, then with the word excesses that we have chosen, this will not result in overflow. The DBIG product  [...]
+<p>The method used for full reduction of a <strong>DBIG</strong> back to a <strong>BIG</strong> depends on the form of the modulus. We choose to support three distinct types of modulus, (a) pseudo Mersenne of the form \( 2^n-c \) where \( c \) is small and $n$ is the size of the modulus in bits, (b) Montgomery-friendly of the form \( k.2^n-1 \), and (c) moduli of no special form. For cases (b) and (c) we convert all field elements to Montgomery's \( n \)-residue form, and use Montgomery' [...]
+<p>In all cases the <strong>DBIG</strong> number to be reduced \( y \) must be in the range \( 0&lt;y&lt;pR \) (a requirement of Montgomery's method), and the result \( x \) is guaranteed to be in the range \( 0&lt;x&lt;2p \) , where \( R=2^{256+FE} \) for a 256-bit modulus. Note that the <strong>BIG</strong> result will be (nearly) fully reduced. The fact than we allow \( x \) to be larger than \( p \) means that we can avoid the notorious Montgomery &quot;final subtraction&quot;. Indep [...]
+<p>Observe how unreduced numbers involved in complex calculations tend to be (nearly fully) reduced if they are involved in a modular multiplication. So for example if field element \( x \) has a large field excess, and if we calculate \( x=x.y \), then as long as the unreduced product is less than \( pR \), the result will be a nearly fully reduced \( x \). So in many cases there is a natural tendency for field excesses not to grow without limit, and not to overflow, without requiring e [...]
+<p>Consider now a sequence of code that adds, subtracts and multiplies field elements, as might arise in elliptic curve additions and doublings. Assume that the code has been analysed and that normalisation code has been inserted where needed. Assume that the reduction code that activates if there is a possibility of an element overflowing its field excess, while present, never in fact is triggered (due to the behaviour described above). Then we assert that once a program has initialised [...]
+<h2><a class="anchor" aria-hidden="true" id="extension-field-arithmetic"></a><a href="#extension-field-arithmetic" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H [...]
+<p>To support cryptographic pairings we will need support for extension fields. We use a towering of extensions as required for BN curves and as required for higher security BLS curves. An element of the quadratic extension field will be represented as \( f=a+ib \), where \( i \) is the square root of the quadratic non-residue -1. To add, subtract and multiply them we use the obvious methods.</p>
+<p>However for negation we can construct \( -f=-a-ib \) as \( b-(a+b)+i.(a-(a+b) \) which requires only one base field negation. A similar idea can be used recursively for higher order extensions, so that only one base field negation is ever required.</p>
+<h2><a class="anchor" aria-hidden="true" id="elliptic-curves"></a><a href="#elliptic-curves" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
+<p>Three types of Elliptic curve are supported for the implementation of Elliptic Curve Cryptography (ECC), but curves are limited to popular families that support faster implementation. Weierstrass curves are supported using the Short Weierstrass representation:</p>
+<p>$$y^2=x^3+Ax+B$$</p>
+<p>where \( A=0 \) or \( A=-3 \). Edwards curves are supported using both regular and twisted Edwards format:</p>
+<p>$$Ax^2+y^2=1+Bx^2y^2$$</p>
+<p>where \( A=1 \) or \( A=-1 \). Montgomery curves are represented as:</p>
+<p>$$y^2=x^3+Ax^2+x$$</p>
+<p>where \( A \) must be small. As mentioned in the introduction, in all cases we use exception-free formulae if available, as this facilitates constant time imple- mentation, even if this invokes a significant performance penalty.</p>
+<p>In the particular case of elliptic curve point multiplication, there are potentially a myriad of very dangerous side-channel attacks that arise from using the classic double-and-add algorithm and its variants. Vulnerabilities arise if branches are taken that depend on secret bits, or if data is even accessed using secret values as indices. Many types of counter-measures have been suggested. The simplest solution is to use a constant-time algorithm like the Montgomery ladder, which has [...]
+<p>If using a Montgomery representation of the elliptic curve the Montgomery ladder is in fact the optimal algorithm for point multiplication. For other representations we use a fixed-sized signed window method.</p>
+<p>AMCL has built-in support for most standardised elliptic curves, along with many curves that have been proposed for standardisation. Specifically it supports the NIST256 curve, the well known Curve25519, the 256-bit Brain- pool curve, the ANSSI curve, and six NUMS (Nothing-Up-My-Sleeve) curves proposed by Bos et al. At higher levels of security the NIST384 and NIST521 curves are supported, also Curve41417 as well as the Goldilocks curve, and our own HiFive curve.
+Some of these proposals support only a Weierstrass representation, but many also allow an Edwards or Montgomery form. Tools are provided to allow easy integration of more curves.</p>
+<h2><a class="anchor" aria-hidden="true" id="support-for-classic-finite-field-methods"></a><a href="#support-for-classic-finite-field-methods" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0  [...]
+<p>Before Elliptic Curves, cryptography depended on methods based on simple finite fields. The most famous of these would be the well known RSA method. These methods have the advantage of being effectively parameterless, and therefore the issue of trust in parameters that arises for elliptic curves, is not an issue.</p>
+<p>However these methods are subject to index calculus based methods of cryptanalysis, and so fields and keys are typically much larger. So how to support for example a 2048-bit implementation of RSA based on a library designed for optimized 256-bit operations? The idea is simple; use AMCL as a virtual 256-bit machine, and build 2048-bit arithmetic on top of that.</p>
+<p>And to claw back some decent performance use the Karatsuba method so that for example 2048-bit multiplication recurses efficiently right down to 256-bit operations. Of course the downside of the Karatsuba method is that while it saves on multiplications, the number of additions and subtractions is greatly increased.  However the existence of generous word excesses in our representation makes this less of a problem, as most additions can be carried out without normalization.</p>
+<p>Secret key operations like RSA decryption use the Montgomery ladder to achieve side-channel-attack resistance.</p>
+<p>The implementation can currently support \( 1024.2^n \) bit fields, so for example 2048-bit RSA can be used to get reasonably close to the AES-128-bit level of security, and if desired 4096 bit RSA can be used to comfortably exceed it.</p>
+<p>Note that this code is supported independently of the elliptic curve code. So for example RSA and ECC can be run together within a single application.</p>
+<p>However we regard these methods as &quot;legacy&quot; as in our view ECC based methods are a much better fit for the IoT.</p>
+<h2><a class="anchor" aria-hidden="true" id="multi-lingual-support"></a><a href="#multi-lingual-support" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
+<p>It is a <strong>BIG</strong> ask to develop and maintain multiple versions of a crypto library written in radically different languages such as C, Java, Javascript, Go and Swift. This has discouraged the use of language specific methods (which are in any case of little relevance here), and strongly encouraged the use of simple, generic computer language constructs.</p>
+<p>This approach brings a surprising bonus: AMCL can be automatically converted to many other languages using available translator tools. For example Tangible Software Solutions market a Java to C# converter. This generated an efficient fully functional C# version of AMCL within minutes. The same company market a Java to Visual Basic converter.</p>
+<p>Google have a Java to Objective C converter specifically designed to convert Android apps developed in Java, to iOS apps written in Objective C.</p>
+<p>Of course not all languages can be supported in this way, so support for some will be developed manually. In particular a Rust version is currently under development.</p>
+<h2><a class="anchor" aria-hidden="true" id="discussion"></a><a href="#discussion" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<p>We found in our code that, with few exceptions, reductions due to possible overflow of the field excess of a <strong>BIG</strong> were very rare, especially for the 64-bit version of the library. Similarly normalization was rarely needed for the 64-bit code. This is due to the much greater excesses that apply in the 64-bit representation. In some experiments we calculated thousands of random pairings, and reduction due to field excess overflow detection never happened.</p>
+<p>In general in developing AMCL we tried to use optimal methods, without going to what we (very subjectively) regarded as extremes in order to maximize performance.  Algorithms that require less memory were generally preferred if the impact on performance was not large. Some optimizations, while perfectly valid, are hard to implement without having a significant impact on program readability and maintainability. Deciding which optimizations to use and which to reject (on the grounds of  [...]
+readability and maintainability) is admittedly rather arbitrary!</p>
+<p>One notable omission from AMCL is the use of pre-computation on fixed parameters in order to speed up certain calculations. We try to justify this, rather unconvincingly, by pointing out that pre-computation must of necessity increase code size. Furthermore such methods are more sensitive to side-channel attacks and much of their speed advantage will be lost if they are to be fully side-channel protected. Also pre-computation on secret values clearly increases the amount of secret dat [...]
+<p>However the development roadmap view might change in later versions depending on the project supporters in-the-field experiences of using AMCL.</p>
+<hr>
+
+    <div class="admonition admonition-note">
+      <div class="admonition-heading">
+        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V [...]
+      </div>
+      <div class="admonition-content">
+    <p>Submit a pull request on the development branch of <a href="https://github.com/apache/incubator-milagro">Milagro Website Repo</a>.</p>
+</div></div><!--
+Supported admonition types are: caution, note, important, tip, warning.
+--><hr class="footnotes-sep">
+<section class="footnotes">
+<ol class="footnotes-list">
+<li id="fn1"  class="footnote-item"><p><a href="http://eprint.iacr.org/2014/526">Curve41417 Karatsuba revisited</a> <a href="#fnref1" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn2"  class="footnote-item"><p><a href="http://eprint.iacr.org/2017/437">Slothful Reduction</a> <a href="#fnref2" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn3"  class="footnote-item"><p><a href="http://eprint.iacr.org/2015/1247">Missing a trick: Karatsuba variations</a> <a href="#fnref3" class="footnote-backref">↩</a></p>
+</li>
+</ol>
+</section>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/milagro-design"><span class="arrow-prev">← </span><span>Milagro Design</span></a><a class="docs-next button" href="/docs/amcl-c-api"><span>AMCL C API</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#introduction">Introduction</a></li><l [...]
\ No newline at end of file
diff --git a/docs/contributor-guide.html b/docs/contributor-guide.html
new file mode 100644
index 0000000..0330959
--- /dev/null
+++ b/docs/contributor-guide.html
@@ -0,0 +1,64 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Contributor&#x27;s Guide · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h1&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;become-a-contributor&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#become-a-contributor&quot; aria-hidden=&quot;true&quot [...]
+"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Contributor&#x27;s Guide · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;h1&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;become-a-contributor&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#become-a-contributor&quot; aria-hidden=&quot;true&quot; class=&quot;hash-link&q [...]
+"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type=" [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Contributor&#x27;s Guide</h1></header><article><div><span><h1><a class="anchor" aria-hidden="true" id="become-a-contributor"></a><a href="#become-a-contributor" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M [...]
+<p>Keeping with our spartan theme, for now, it's best to send an email to <a href="mailto:dev-subscribe@milagro.apache.org?Subject=Subscribe" target="_top">dev-subscribe @ milagro.apache.org</a> to join our mailing list.</p>
+<p>More information will be available here shortly.</p>
+<!--
+Supported admonition types are: caution, note, important, tip, warning.
+--></span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zkp-mfa-api"><span class="arrow-prev">← </span><span>ZKP-MFA API</span></a><a class="docs-next button" href="/help"><span>Next</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="n [...]
\ No newline at end of file
diff --git a/docs/contributor-guide/index.html b/docs/contributor-guide/index.html
new file mode 100644
index 0000000..0330959
--- /dev/null
+++ b/docs/contributor-guide/index.html
@@ -0,0 +1,64 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Contributor&#x27;s Guide · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h1&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;become-a-contributor&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#become-a-contributor&quot; aria-hidden=&quot;true&quot [...]
+"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Contributor&#x27;s Guide · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;h1&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;become-a-contributor&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#become-a-contributor&quot; aria-hidden=&quot;true&quot; class=&quot;hash-link&q [...]
+"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type=" [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Contributor&#x27;s Guide</h1></header><article><div><span><h1><a class="anchor" aria-hidden="true" id="become-a-contributor"></a><a href="#become-a-contributor" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M [...]
+<p>Keeping with our spartan theme, for now, it's best to send an email to <a href="mailto:dev-subscribe@milagro.apache.org?Subject=Subscribe" target="_top">dev-subscribe @ milagro.apache.org</a> to join our mailing list.</p>
+<p>More information will be available here shortly.</p>
+<!--
+Supported admonition types are: caution, note, important, tip, warning.
+--></span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zkp-mfa-api"><span class="arrow-prev">← </span><span>ZKP-MFA API</span></a><a class="docs-next button" href="/help"><span>Next</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="n [...]
\ No newline at end of file
diff --git a/docs/d-ta-api.html b/docs/d-ta-api.html
new file mode 100644
index 0000000..1b130ad
--- /dev/null
+++ b/docs/d-ta-api.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>D-TA Node API · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="
+    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
+      &lt;div class=&quot;admonition-heading&quot;&gt;
+        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
+      &lt;/div&gt;
+      &lt;div class=&quot;admonition-content&quot;&gt;
+    &lt;/div&gt;&lt;/div&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="D-TA Node API · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="
+    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
+      &lt;div class=&quot;admonition-heading&quot;&gt;
+        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
+      &lt;/div&gt;
+      &lt;div class=&quot;admonition-content&quot;&gt;
+    &lt;/div&gt;&lt;/div&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Bl [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">D-TA Node API</h1></header><article><div><span>
+    <div class="admonition admonition-tip">
+      <div class="admonition-heading">
+        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2 [...]
+      </div>
+      <div class="admonition-content">
+    <p>Interested in becoming a contributor? Milagro is looking for you.</p>
+<p><a href="/docs/contributor-guide.html">CONTRIBUTOR'S GUIDE</a>.</p>
+</div></div><p><a href="/swagger/index.html">Swagger</a></p>
+<!--
+Supported admonition types are: caution, note, important, tip, warning.
+--></span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by howardkitto</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/d-ta-overview"><span class="arrow-prev">← </span><span>D-TA Node Overview</span></a><a class="docs-next button" href="/docs/zkp-mfa-overview"><span>ZKP-MFA Overview</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section  [...]
\ No newline at end of file
diff --git a/docs/d-ta-api/index.html b/docs/d-ta-api/index.html
new file mode 100644
index 0000000..1b130ad
--- /dev/null
+++ b/docs/d-ta-api/index.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>D-TA Node API · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="
+    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
+      &lt;div class=&quot;admonition-heading&quot;&gt;
+        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
+      &lt;/div&gt;
+      &lt;div class=&quot;admonition-content&quot;&gt;
+    &lt;/div&gt;&lt;/div&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="D-TA Node API · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="
+    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
+      &lt;div class=&quot;admonition-heading&quot;&gt;
+        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
+      &lt;/div&gt;
+      &lt;div class=&quot;admonition-content&quot;&gt;
+    &lt;/div&gt;&lt;/div&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Bl [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">D-TA Node API</h1></header><article><div><span>
+    <div class="admonition admonition-tip">
+      <div class="admonition-heading">
+        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2 [...]
+      </div>
+      <div class="admonition-content">
+    <p>Interested in becoming a contributor? Milagro is looking for you.</p>
+<p><a href="/docs/contributor-guide.html">CONTRIBUTOR'S GUIDE</a>.</p>
+</div></div><p><a href="/swagger/index.html">Swagger</a></p>
+<!--
+Supported admonition types are: caution, note, important, tip, warning.
+--></span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by howardkitto</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/d-ta-overview"><span class="arrow-prev">← </span><span>D-TA Node Overview</span></a><a class="docs-next button" href="/docs/zkp-mfa-overview"><span>ZKP-MFA Overview</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section  [...]
\ No newline at end of file
diff --git a/docs/d-ta-overview.html b/docs/d-ta-overview.html
new file mode 100644
index 0000000..01e61e8
--- /dev/null
+++ b/docs/d-ta-overview.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Decentralized Trust Authority Overview · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="
+    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
+      &lt;div class=&quot;admonition-heading&quot;&gt;
+        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
+      &lt;/div&gt;
+      &lt;div class=&quot;admonition-content&quot;&gt;
+    &lt;/div&gt;&lt;/div&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Decentralized Trust Authority Overview · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="
+    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
+      &lt;div class=&quot;admonition-heading&quot;&gt;
+        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
+      &lt;/div&gt;
+      &lt;div class=&quot;admonition-content&quot;&gt;
+    &lt;/div&gt;&lt;/div&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Bl [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Decentralized Trust Authority Overview</h1></header><article><div><span>
+    <div class="admonition admonition-tip">
+      <div class="admonition-heading">
+        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2 [...]
+      </div>
+      <div class="admonition-content">
+    <p>Interested in becoming a contributor? Milagro is looking for you.</p>
+<p><a href="/docs/contributor-guide.html">CONTRIBUTOR'S GUIDE</a>.</p>
+</div></div><!--
+Supported admonition types are: caution, note, important, tip, warning.
+--></span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/amcl-javascript-api"><span class="arrow-prev">← </span><span class="function-name-prevnext">AMCL JavaScript API</span></a><a class="docs-next button" href="/docs/d-ta-api"><span>D-TA Node API</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav- [...]
\ No newline at end of file
diff --git a/docs/d-ta-overview/index.html b/docs/d-ta-overview/index.html
new file mode 100644
index 0000000..01e61e8
--- /dev/null
+++ b/docs/d-ta-overview/index.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Decentralized Trust Authority Overview · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="
+    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
+      &lt;div class=&quot;admonition-heading&quot;&gt;
+        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
+      &lt;/div&gt;
+      &lt;div class=&quot;admonition-content&quot;&gt;
+    &lt;/div&gt;&lt;/div&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Decentralized Trust Authority Overview · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="
+    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
+      &lt;div class=&quot;admonition-heading&quot;&gt;
+        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
+      &lt;/div&gt;
+      &lt;div class=&quot;admonition-content&quot;&gt;
+    &lt;/div&gt;&lt;/div&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Bl [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Decentralized Trust Authority Overview</h1></header><article><div><span>
+    <div class="admonition admonition-tip">
+      <div class="admonition-heading">
+        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2 [...]
+      </div>
+      <div class="admonition-content">
+    <p>Interested in becoming a contributor? Milagro is looking for you.</p>
+<p><a href="/docs/contributor-guide.html">CONTRIBUTOR'S GUIDE</a>.</p>
+</div></div><!--
+Supported admonition types are: caution, note, important, tip, warning.
+--></span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/amcl-javascript-api"><span class="arrow-prev">← </span><span class="function-name-prevnext">AMCL JavaScript API</span></a><a class="docs-next button" href="/docs/d-ta-api"><span>D-TA Node API</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav- [...]
\ No newline at end of file
diff --git a/docs/doc2.html b/docs/doc2.html
new file mode 100644
index 0000000..d753672
--- /dev/null
+++ b/docs/doc2.html
@@ -0,0 +1,5 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>document number 2 · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;This is a link to &lt;a href=&quot;/docs/doc3&quot;&gt;another document.&lt;/a&gt;&lt;/p&gt;
+"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="document number 2 · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;p&gt;This is a link to &lt;a href=&quot;/docs/doc3&quot;&gt;another document.&lt;/a&gt;&lt;/p&gt;
+"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type=" [...]
+This is a link to an <a href="http://www.example.com">external page.</a></p>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto  [...]
\ No newline at end of file
diff --git a/docs/doc2/index.html b/docs/doc2/index.html
new file mode 100644
index 0000000..d753672
--- /dev/null
+++ b/docs/doc2/index.html
@@ -0,0 +1,5 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>document number 2 · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;This is a link to &lt;a href=&quot;/docs/doc3&quot;&gt;another document.&lt;/a&gt;&lt;/p&gt;
+"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="document number 2 · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;p&gt;This is a link to &lt;a href=&quot;/docs/doc3&quot;&gt;another document.&lt;/a&gt;&lt;/p&gt;
+"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type=" [...]
+This is a link to an <a href="http://www.example.com">external page.</a></p>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto  [...]
\ No newline at end of file
diff --git a/docs/doc3.html b/docs/doc3.html
new file mode 100644
index 0000000..ea9692f
--- /dev/null
+++ b/docs/doc3.html
@@ -0,0 +1,8 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>This is document number 3 · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. In ac euismod odio, eu consequat dui. Nullam molestie consectetur risus id imperdiet. Proin sodales ornare turpis, non molli [...]
+"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="This is document number 3 · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. In ac euismod odio, eu consequat dui. Nullam molestie consectetur risus id imperdiet. Proin sodales ornare turpis, non mollis massa ultricies id. Nam [...]
+"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type=" [...]
+<p>Duis et egestas libero, imperdiet faucibus ipsum. Sed posuere eget urna vel feugiat. Vivamus a arcu sagittis, fermentum urna dapibus, congue lectus. Fusce vulputate porttitor nisl, ac cursus elit volutpat vitae. Nullam vitae ipsum egestas, convallis quam non, porta nibh. Morbi gravida erat nec neque bibendum, eu pellentesque velit posuere. Fusce aliquam erat eu massa eleifend tristique.</p>
+<p>Sed consequat sollicitudin ipsum eget tempus. Integer a aliquet velit. In justo nibh, pellentesque non suscipit eget, gravida vel lacus. Donec odio ante, malesuada in massa quis, pharetra tristique ligula. Donec eros est, tristique eget finibus quis, semper non nisl. Vivamus et elit nec enim ornare placerat. Sed posuere odio a elit cursus sagittis.</p>
+<p>Phasellus feugiat purus eu tortor ultrices finibus. Ut libero nibh, lobortis et libero nec, dapibus posuere eros. Sed sagittis euismod justo at consectetur. Nulla finibus libero placerat, cursus sapien at, eleifend ligula. Vivamus elit nisl, hendrerit ac nibh eu, ultrices tempus dui. Nam tellus neque, commodo non rhoncus eu, gravida in risus. Nullam id iaculis tortor.</p>
+<p>Nullam at odio in sem varius tempor sit amet vel lorem. Etiam eu hendrerit nisl. Fusce nibh mauris, vulputate sit amet ex vitae, congue rhoncus nisl. Sed eget tellus purus. Nullam tempus commodo erat ut tristique. Cras accumsan massa sit amet justo consequat eleifend. Integer scelerisque vitae tellus id consectetur.</p>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto  [...]
\ No newline at end of file
diff --git a/docs/doc3/index.html b/docs/doc3/index.html
new file mode 100644
index 0000000..ea9692f
--- /dev/null
+++ b/docs/doc3/index.html
@@ -0,0 +1,8 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>This is document number 3 · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. In ac euismod odio, eu consequat dui. Nullam molestie consectetur risus id imperdiet. Proin sodales ornare turpis, non molli [...]
+"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="This is document number 3 · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. In ac euismod odio, eu consequat dui. Nullam molestie consectetur risus id imperdiet. Proin sodales ornare turpis, non mollis massa ultricies id. Nam [...]
+"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type=" [...]
+<p>Duis et egestas libero, imperdiet faucibus ipsum. Sed posuere eget urna vel feugiat. Vivamus a arcu sagittis, fermentum urna dapibus, congue lectus. Fusce vulputate porttitor nisl, ac cursus elit volutpat vitae. Nullam vitae ipsum egestas, convallis quam non, porta nibh. Morbi gravida erat nec neque bibendum, eu pellentesque velit posuere. Fusce aliquam erat eu massa eleifend tristique.</p>
+<p>Sed consequat sollicitudin ipsum eget tempus. Integer a aliquet velit. In justo nibh, pellentesque non suscipit eget, gravida vel lacus. Donec odio ante, malesuada in massa quis, pharetra tristique ligula. Donec eros est, tristique eget finibus quis, semper non nisl. Vivamus et elit nec enim ornare placerat. Sed posuere odio a elit cursus sagittis.</p>
+<p>Phasellus feugiat purus eu tortor ultrices finibus. Ut libero nibh, lobortis et libero nec, dapibus posuere eros. Sed sagittis euismod justo at consectetur. Nulla finibus libero placerat, cursus sapien at, eleifend ligula. Vivamus elit nisl, hendrerit ac nibh eu, ultrices tempus dui. Nam tellus neque, commodo non rhoncus eu, gravida in risus. Nullam id iaculis tortor.</p>
+<p>Nullam at odio in sem varius tempor sit amet vel lorem. Etiam eu hendrerit nisl. Fusce nibh mauris, vulputate sit amet ex vitae, congue rhoncus nisl. Sed eget tellus purus. Nullam tempus commodo erat ut tristique. Cras accumsan massa sit amet justo consequat eleifend. Integer scelerisque vitae tellus id consectetur.</p>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto  [...]
\ No newline at end of file
diff --git a/docs/milagro-crypto.html b/docs/milagro-crypto.html
new file mode 100644
index 0000000..8c7efb8
--- /dev/null
+++ b/docs/milagro-crypto.html
@@ -0,0 +1,128 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Milagro Crypto · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;One of the critical points about information security is to give access to resources only to authorized entities and deny access to unauthorized ones.&lt;/p&gt;
+"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Milagro Crypto · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;p&gt;One of the critical points about information security is to give access to resources only to authorized entities and deny access to unauthorized ones.&lt;/p&gt;
+"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type=" [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Milagro Crypto</h1></header><article><div><span><p>One of the critical points about information security is to give access to resources only to authorized entities and deny access to unauthorized ones.
+Preventing unauthorized access very often comes down to making it <strong><em>almost impossible</em></strong>, i.e., tough, expensive, complicated, and time-consuming for the unauthorized entities to get access to resources.</p>
+<p>The same principles apply to cryptography. In most cases, a suitable encryption mechanism satisfies at least two basic requirements:</p>
+<ol>
+<li>It is possible to give easy access to encrypted, cryptographically protected content to authorized entities.</li>
+<li>It is possible to make it extremely challenging for unauthorized entities to access encrypted (ditto) content.</li>
+</ol>
+<p>Using the above, we can define an operation: Encryption that is tough to reverse without possessing a particular parameter, for example, a decryption key.
+In RSA-based encryption two prime numbers, the private key, are multiplied to generate a public key, so that it is almost impossible to reverse the operation and retrieve the original prime numbers.</p>
+<p>Multiple sources are available online to read more on the topic. We recommend this short paper from <a href="https://math.berkeley.edu/~kpmann/encryption.pdf">Cal Berkeley at this link</a>.</p>
+<p>As noted in the mentioned paper, with RSA, we need enormous prime numbers to make it <strong><em>almost impossible</em></strong> to break the encryption, hence to find the two big prime numbers.
+On elliptic curves, multiplication of a point by a number can be defined so that much shorter numbers than in the big prime number case are needed to reach the same level of <strong><em>almost impossibility</em></strong>.</p>
+<h2><a class="anchor" aria-hidden="true" id="elliptic-curve-cryptography"></a><a href="#elliptic-curve-cryptography" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 1 [...]
+<p>Elliptic curves are another way to do encryption. Elliptic curves are mathematical structures, on which operations like addition and multiplications of points are easily defined.
+In particular, multiplication of a point by a number is a relatively easy operation to compute, while it is <strong><em>almost impossible</em></strong> to reverse the process, that is, to determine
+the multiplier knowing the result of the multiplication.</p>
+<p>The problem of reversing the multiplication is known as the Discrete Logarithm Problem on elliptic curves (ECDLP).
+The difference in computational complexity (between performing the multiplication and reversing the result to retrieve the multiplier) is one of the essential cornerstones of elliptic curve cryptography.</p>
+<h2><a class="anchor" aria-hidden="true" id="pairing-based-cryptography"></a><a href="#pairing-based-cryptography" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H [...]
+<p>Using elliptic curves we can now define on some elliptic curve a bilinear function called a <strong><em>pairing</em></strong>, which enables a mapping from two points on the same curve (or points on two related curves) into a different mathematical structure called a finite field. The bilinearity of the pairing is the key characteristic that makes pairing interesting and widely used in cryptography.</p>
+<p>A <strong><em>bilinear pairing</em></strong> \( e \) maps a pair of points (hence the name pairing) on an elliptic curve \( E \), defined over some field \( F_{q} \) to an element of the multiplicative group of a finite extension of \( {F}_{q^k} \).</p>
+<p>$$ e(mA+B, nP + Q) = e(A,P)^{mn} e(B, Q) $$</p>
+<p>The elements \( P \) and \( Q \) lie in two different groups, respectively \( G_{1} \) and \( G_{2} \). The choice of those two different group determines a different <strong><em>types</em></strong> of pairing.</p>
+<p>Let \( E \) an ordinary elliptic curve, take \( G_{1} \neq G_{2} \), and if there is not an efficiently computable isomorphism \( \phi:G_{1}\to G_{2} \) then the pairing is said to be of <strong><em>Type\( -3 \)</em></strong>.</p>
+<p>Currently, most of the state-of-the-art implementations of pairings take place on ordinary curves that assume the <strong><em>Type\( -3 \)</em></strong> scenario for reasons of efficiency and secure implementation.</p>
+<h2><a class="anchor" aria-hidden="true" id="identity-based-encryption"></a><a href="#identity-based-encryption" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c [...]
+<p>Pairing-based cryptography builds on elliptic curve-based cryptography, but the extra functionality of the pairing enables us to design schemes which would otherwise be impossible to realize, or would be prohibitively expensive to do using RSA-based cryptosystems.</p>
+<p>Identity-based encryption (IBE) is one such scheme that has received a large of amount of attention from the crypto community, and where commercially available products have been on the market for some time and are in wide use today.</p>
+<p>IBE is similar to classical asymmetric key cryptography, in that each user has a public key for encryption and a private key for decryption. But there are many differences:</p>
+<ol>
+<li>IBE allows public keys to be set to the value of a pre-existing identifier, such as an email address, while in PKI the public key does not contain the notion of an identity, and the association with an identifier is created by a certificate signed by a third party (Certification Authority).</li>
+<li>Clients or individual users do not generate private keys, but must instead download them from a trusted third party known as the Trust Authority (TA).</li>
+<li>In IBE, to encrypt messages, the sender must obtain public “system parameters” from the Trust Authority (TA). These system parameters are used in combination with the intended recipient’s identity string (e.g. email address) to generate an encrypted message.</li>
+</ol>
+<h2><a class="anchor" aria-hidden="true" id="post-quantum-cryptography"></a><a href="#post-quantum-cryptography" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c [...]
+<p>&quot;Post-quantum cryptography (sometimes referred to as quantum-proof, quantum-safe or quantum-resistant) refers to cryptographic algorithms (usually public-key algorithms) that are thought to be secure against an attack by a quantum computer. As of 2018, this is not true for the most popular public-key algorithms, which can be efficiently broken by a sufficiently strong hypothetical quantum computer.</p>
+<p>The problem with currently popular algorithms is that their security relies on one of three hard mathematical problems: the integer factorization problem, the discrete logarithm problem or the elliptic-curve discrete logarithm problem. All of these problems can be easily solved on a sufficiently powerful quantum computer running Shor's algorithm.</p>
+<p>Even though current, publicly known, experimental quantum computers lack processing power to break any real cryptographic algorithm, many cryptographers are designing new algorithms to prepare for a time when quantum computing becomes a threat.&quot;<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup></p>
+<h2><a class="anchor" aria-hidden="true" id="zero-knowledge-proof"></a><a href="#zero-knowledge-proof" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
+<p>&quot;In cryptography, a <strong>zero-knowledge proof</strong> or <strong>zero-knowledge protocol</strong> is a method by which one party (the <em>prover</em>) can prove to another party (the <em>verifier</em>) that a given statement is true, without conveying any information apart from the fact that the statement is indeed true.</p>
+<p>If proving the statement requires knowledge of some secret information on the part of the prover, the definition implies that the verifier will not be able to prove the statement in turn to anyone else, since the verifier does not possess the secret information.</p>
+<p>Notice that the statement being proved must include the assertion that the prover has such knowledge (otherwise, the statement would not be proved in zero-knowledge, since at the end of the protocol the verifier would gain the additional information that the prover has knowledge of the required secret information).</p>
+<p>If the statement consists <em>only</em> of the fact that the prover possesses the secret information, it is a special case known as <em>zero-knowledge proof of knowledge</em>, and it nicely illustrates the essence of the notion of zero-knowledge proofs: proving that one has knowledge of certain information is trivial if one is allowed to simply reveal that information; the challenge is proving that one has such knowledge without revealing the secret information or anything else.&quot; [...]
+<h2><a class="anchor" aria-hidden="true" id="summary"></a><a href="#summary" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p><strong>Elliptic curve cryptography</strong> is an attractive alternative to conventional public key cryptography for implementation on constrained devices, where the significant computational resources i.e. speed, memory are limited and low-power wireless communication protocols is essential. It attains the same security levels as traditional cryptosystems using smaller parameter sizes.</p>
+<p><strong>Pairing-based cryptography</strong> builds on elliptic curve-based cryptography, but the extra functionality of the pairing enables us to design schemes which would otherwise be impossible to realize, or would be prohibitively expensive. Examples include identity-based encryption, group signatures and non-interactive zero-knowledge proofs.</p>
+<p><strong>Identity-based encryption</strong> doesn’t require certificates and certificate authorities. A trusted third party generates all the private keys, but all the public keys can be derived knowing the identity of the public key owner, for example, an email address.  That means that no certificate is needed to bind a public key to its owner.  Typically, it is up to the application to verify the owner possesses access to the unique identity attribute during the enrollment process i [...]
+<p><strong>Post-quantum cryptography</strong> Post-quantum cryptography are cryptosystems which can be run on a classical computer, but are secure even if an adversary possesses a quantum computer. For data that must be private, but has the potential to be long lived and publicly available, using post-quantum secure algorithms like AES 256-bit for encryption and SIKE for encapsulation of encryption keys is essential.</p>
+<p><strong>Zero-knowledge proof</strong> is a method by which one party (the prover) can prove to another party (the verifier) that a given statement is true, without conveying any information apart from the fact that the statement is indeed true.</p>
+<p>For an in-depth dive into the cryptographic protocols in use within the Milagro framework, see the next section <a href="milagro-protocols.html">Milagro Protocols</a>.</p>
+<hr>
+
+    <div class="admonition admonition-note">
+      <div class="admonition-heading">
+        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V [...]
+      </div>
+      <div class="admonition-content">
+    <p>Submit a pull request on the development branch of <a href="https://github.com/apache/incubator-milagro">Milagro Website Repo</a>.</p>
+</div></div><!--
+Supported admonition types are: caution, note, important, tip, warning.
+--><hr class="footnotes-sep">
+<section class="footnotes">
+<ol class="footnotes-list">
+<li id="fn1"  class="footnote-item"><p><a href="https://en.wikipedia.org/wiki/Post-quantum_cryptography">Wikipedia article</a> <a href="#fnref1" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn2"  class="footnote-item"><p><a href="https://en.wikipedia.org/wiki/Zero-knowledge_proof">Wikipedia article</a> <a href="#fnref2" class="footnote-backref">↩</a></p>
+</li>
+</ol>
+</section>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/milagro-intro"><span class="arrow-prev">← </span><span>Milagro Introduction</span></a><a class="docs-next button" href="/docs/milagro-protocols"><span>Milagro Protocols</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#elliptic-curve-cry [...]
\ No newline at end of file
diff --git a/docs/milagro-crypto/index.html b/docs/milagro-crypto/index.html
new file mode 100644
index 0000000..8c7efb8
--- /dev/null
+++ b/docs/milagro-crypto/index.html
@@ -0,0 +1,128 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Milagro Crypto · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;One of the critical points about information security is to give access to resources only to authorized entities and deny access to unauthorized ones.&lt;/p&gt;
+"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Milagro Crypto · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;p&gt;One of the critical points about information security is to give access to resources only to authorized entities and deny access to unauthorized ones.&lt;/p&gt;
+"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type=" [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Milagro Crypto</h1></header><article><div><span><p>One of the critical points about information security is to give access to resources only to authorized entities and deny access to unauthorized ones.
+Preventing unauthorized access very often comes down to making it <strong><em>almost impossible</em></strong>, i.e., tough, expensive, complicated, and time-consuming for the unauthorized entities to get access to resources.</p>
+<p>The same principles apply to cryptography. In most cases, a suitable encryption mechanism satisfies at least two basic requirements:</p>
+<ol>
+<li>It is possible to give easy access to encrypted, cryptographically protected content to authorized entities.</li>
+<li>It is possible to make it extremely challenging for unauthorized entities to access encrypted (ditto) content.</li>
+</ol>
+<p>Using the above, we can define an operation: Encryption that is tough to reverse without possessing a particular parameter, for example, a decryption key.
+In RSA-based encryption two prime numbers, the private key, are multiplied to generate a public key, so that it is almost impossible to reverse the operation and retrieve the original prime numbers.</p>
+<p>Multiple sources are available online to read more on the topic. We recommend this short paper from <a href="https://math.berkeley.edu/~kpmann/encryption.pdf">Cal Berkeley at this link</a>.</p>
+<p>As noted in the mentioned paper, with RSA, we need enormous prime numbers to make it <strong><em>almost impossible</em></strong> to break the encryption, hence to find the two big prime numbers.
+On elliptic curves, multiplication of a point by a number can be defined so that much shorter numbers than in the big prime number case are needed to reach the same level of <strong><em>almost impossibility</em></strong>.</p>
+<h2><a class="anchor" aria-hidden="true" id="elliptic-curve-cryptography"></a><a href="#elliptic-curve-cryptography" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 1 [...]
+<p>Elliptic curves are another way to do encryption. Elliptic curves are mathematical structures, on which operations like addition and multiplications of points are easily defined.
+In particular, multiplication of a point by a number is a relatively easy operation to compute, while it is <strong><em>almost impossible</em></strong> to reverse the process, that is, to determine
+the multiplier knowing the result of the multiplication.</p>
+<p>The problem of reversing the multiplication is known as the Discrete Logarithm Problem on elliptic curves (ECDLP).
+The difference in computational complexity (between performing the multiplication and reversing the result to retrieve the multiplier) is one of the essential cornerstones of elliptic curve cryptography.</p>
+<h2><a class="anchor" aria-hidden="true" id="pairing-based-cryptography"></a><a href="#pairing-based-cryptography" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H [...]
+<p>Using elliptic curves we can now define on some elliptic curve a bilinear function called a <strong><em>pairing</em></strong>, which enables a mapping from two points on the same curve (or points on two related curves) into a different mathematical structure called a finite field. The bilinearity of the pairing is the key characteristic that makes pairing interesting and widely used in cryptography.</p>
+<p>A <strong><em>bilinear pairing</em></strong> \( e \) maps a pair of points (hence the name pairing) on an elliptic curve \( E \), defined over some field \( F_{q} \) to an element of the multiplicative group of a finite extension of \( {F}_{q^k} \).</p>
+<p>$$ e(mA+B, nP + Q) = e(A,P)^{mn} e(B, Q) $$</p>
+<p>The elements \( P \) and \( Q \) lie in two different groups, respectively \( G_{1} \) and \( G_{2} \). The choice of those two different group determines a different <strong><em>types</em></strong> of pairing.</p>
+<p>Let \( E \) an ordinary elliptic curve, take \( G_{1} \neq G_{2} \), and if there is not an efficiently computable isomorphism \( \phi:G_{1}\to G_{2} \) then the pairing is said to be of <strong><em>Type\( -3 \)</em></strong>.</p>
+<p>Currently, most of the state-of-the-art implementations of pairings take place on ordinary curves that assume the <strong><em>Type\( -3 \)</em></strong> scenario for reasons of efficiency and secure implementation.</p>
+<h2><a class="anchor" aria-hidden="true" id="identity-based-encryption"></a><a href="#identity-based-encryption" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c [...]
+<p>Pairing-based cryptography builds on elliptic curve-based cryptography, but the extra functionality of the pairing enables us to design schemes which would otherwise be impossible to realize, or would be prohibitively expensive to do using RSA-based cryptosystems.</p>
+<p>Identity-based encryption (IBE) is one such scheme that has received a large of amount of attention from the crypto community, and where commercially available products have been on the market for some time and are in wide use today.</p>
+<p>IBE is similar to classical asymmetric key cryptography, in that each user has a public key for encryption and a private key for decryption. But there are many differences:</p>
+<ol>
+<li>IBE allows public keys to be set to the value of a pre-existing identifier, such as an email address, while in PKI the public key does not contain the notion of an identity, and the association with an identifier is created by a certificate signed by a third party (Certification Authority).</li>
+<li>Clients or individual users do not generate private keys, but must instead download them from a trusted third party known as the Trust Authority (TA).</li>
+<li>In IBE, to encrypt messages, the sender must obtain public “system parameters” from the Trust Authority (TA). These system parameters are used in combination with the intended recipient’s identity string (e.g. email address) to generate an encrypted message.</li>
+</ol>
+<h2><a class="anchor" aria-hidden="true" id="post-quantum-cryptography"></a><a href="#post-quantum-cryptography" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c [...]
+<p>&quot;Post-quantum cryptography (sometimes referred to as quantum-proof, quantum-safe or quantum-resistant) refers to cryptographic algorithms (usually public-key algorithms) that are thought to be secure against an attack by a quantum computer. As of 2018, this is not true for the most popular public-key algorithms, which can be efficiently broken by a sufficiently strong hypothetical quantum computer.</p>
+<p>The problem with currently popular algorithms is that their security relies on one of three hard mathematical problems: the integer factorization problem, the discrete logarithm problem or the elliptic-curve discrete logarithm problem. All of these problems can be easily solved on a sufficiently powerful quantum computer running Shor's algorithm.</p>
+<p>Even though current, publicly known, experimental quantum computers lack processing power to break any real cryptographic algorithm, many cryptographers are designing new algorithms to prepare for a time when quantum computing becomes a threat.&quot;<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup></p>
+<h2><a class="anchor" aria-hidden="true" id="zero-knowledge-proof"></a><a href="#zero-knowledge-proof" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
+<p>&quot;In cryptography, a <strong>zero-knowledge proof</strong> or <strong>zero-knowledge protocol</strong> is a method by which one party (the <em>prover</em>) can prove to another party (the <em>verifier</em>) that a given statement is true, without conveying any information apart from the fact that the statement is indeed true.</p>
+<p>If proving the statement requires knowledge of some secret information on the part of the prover, the definition implies that the verifier will not be able to prove the statement in turn to anyone else, since the verifier does not possess the secret information.</p>
+<p>Notice that the statement being proved must include the assertion that the prover has such knowledge (otherwise, the statement would not be proved in zero-knowledge, since at the end of the protocol the verifier would gain the additional information that the prover has knowledge of the required secret information).</p>
+<p>If the statement consists <em>only</em> of the fact that the prover possesses the secret information, it is a special case known as <em>zero-knowledge proof of knowledge</em>, and it nicely illustrates the essence of the notion of zero-knowledge proofs: proving that one has knowledge of certain information is trivial if one is allowed to simply reveal that information; the challenge is proving that one has such knowledge without revealing the secret information or anything else.&quot; [...]
+<h2><a class="anchor" aria-hidden="true" id="summary"></a><a href="#summary" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p><strong>Elliptic curve cryptography</strong> is an attractive alternative to conventional public key cryptography for implementation on constrained devices, where the significant computational resources i.e. speed, memory are limited and low-power wireless communication protocols is essential. It attains the same security levels as traditional cryptosystems using smaller parameter sizes.</p>
+<p><strong>Pairing-based cryptography</strong> builds on elliptic curve-based cryptography, but the extra functionality of the pairing enables us to design schemes which would otherwise be impossible to realize, or would be prohibitively expensive. Examples include identity-based encryption, group signatures and non-interactive zero-knowledge proofs.</p>
+<p><strong>Identity-based encryption</strong> doesn’t require certificates and certificate authorities. A trusted third party generates all the private keys, but all the public keys can be derived knowing the identity of the public key owner, for example, an email address.  That means that no certificate is needed to bind a public key to its owner.  Typically, it is up to the application to verify the owner possesses access to the unique identity attribute during the enrollment process i [...]
+<p><strong>Post-quantum cryptography</strong> Post-quantum cryptography are cryptosystems which can be run on a classical computer, but are secure even if an adversary possesses a quantum computer. For data that must be private, but has the potential to be long lived and publicly available, using post-quantum secure algorithms like AES 256-bit for encryption and SIKE for encapsulation of encryption keys is essential.</p>
+<p><strong>Zero-knowledge proof</strong> is a method by which one party (the prover) can prove to another party (the verifier) that a given statement is true, without conveying any information apart from the fact that the statement is indeed true.</p>
+<p>For an in-depth dive into the cryptographic protocols in use within the Milagro framework, see the next section <a href="milagro-protocols.html">Milagro Protocols</a>.</p>
+<hr>
+
+    <div class="admonition admonition-note">
+      <div class="admonition-heading">
+        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V [...]
+      </div>
+      <div class="admonition-content">
+    <p>Submit a pull request on the development branch of <a href="https://github.com/apache/incubator-milagro">Milagro Website Repo</a>.</p>
+</div></div><!--
+Supported admonition types are: caution, note, important, tip, warning.
+--><hr class="footnotes-sep">
+<section class="footnotes">
+<ol class="footnotes-list">
+<li id="fn1"  class="footnote-item"><p><a href="https://en.wikipedia.org/wiki/Post-quantum_cryptography">Wikipedia article</a> <a href="#fnref1" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn2"  class="footnote-item"><p><a href="https://en.wikipedia.org/wiki/Zero-knowledge_proof">Wikipedia article</a> <a href="#fnref2" class="footnote-backref">↩</a></p>
+</li>
+</ol>
+</section>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/milagro-intro"><span class="arrow-prev">← </span><span>Milagro Introduction</span></a><a class="docs-next button" href="/docs/milagro-protocols"><span>Milagro Protocols</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#elliptic-curve-cry [...]
\ No newline at end of file
diff --git a/docs/milagro-design.html b/docs/milagro-design.html
new file mode 100644
index 0000000..bc7b2c6
--- /dev/null
+++ b/docs/milagro-design.html
@@ -0,0 +1,147 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Milagro Design · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;protocols-and-technology&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#protocols-and-technology&quot; aria-hidden=&quot;true&quot;  [...]
+"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Milagro Design · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;protocols-and-technology&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#protocols-and-technology&quot; aria-hidden=&quot;true&quot; class=&quot;hash-link&quo [...]
+"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type=" [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Milagro Design</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="protocols-and-technology"></a><a href="#protocols-and-technology" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4  [...]
+<h3><a class="anchor" aria-hidden="true" id="identity-based-encryption"></a><a href="#identity-based-encryption" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c [...]
+<p>M-Pin and Chow Choo are in the class of Identity Based Encryption protocols, which use pairings in their construction. The M-Pin Protocol is intended to replace the well-known Username/Password authentication mechanism which is widely considered to be effectively broken.</p>
+<p>The main problem is the existence of a password file on the server, which is commonly stolen and hacked, revealing most user passwords.</p>
+<p>The idea behind Milagro's Zero-Knowledge Proof Multi-Factor Authentication (ZKP-MFA) Server is that each registered client is issued with a secret cryptographic key derived from their identity. They then prove to the Milagro ZKP-MFA Server that they are in possession of this key using a zero-knowledge proof protocol, which can be extended to include authenticated key agreement.</p>
+<p>This protocol design eliminates the need for any information related to clients, or their keys, to be kept on the authentication server. Should an attacker penetrate the server, it is impossible to deduct any information about end users because it doesn't exist, at least within the authentication system.</p>
+<p>Common to both Chow-Choo and M-Pin is that the keys are issued in shares, not as whole keys, by entities called Decentralized Trust Authorities. Only the clients who receive all of the shares from the D-TA's, will ever know their completed whole keys.</p>
+<p>Industry commentators have long advocated a multi-factor solution. The novel feature of M-Pin and Chow-Choo is that the cryptographic secrets issued to clients or peers may be safely split up into any number of independent factors.</p>
+<p>Each of these factors has the same form; they are points on an elliptic curve. To recreate the original secret, they are simply added together again -- it's as simple as that.</p>
+<p>One factor might be derived from a key unlocked from the biometric login (ex: FaceID) which is available as a PIN input on a successful biometric authentication. This 'biometric based' PIN is, on Apple hardware, stored in the secure element of the device (something you are). Another factor might be the remainder token securely stored in the authenticator app on a smartphone (something you have). Yet a final piece can be a PIN or passphrase (something you know), which is secure as the  [...]
+<h3><a class="anchor" aria-hidden="true" id="decentralized-identity"></a><a href="#decentralized-identity" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0 [...]
+<p>Milagro applications use these identity based protocols in combination with classical cryptosystems where the endpoint generates a public/private key pair and the private key never leaves the application or device.</p>
+<p>An entity running a Milagro application attaches the public keys it has generated upon initialization to a self sovereign identity document (ID Document), that only reveals a unique account code as identifier. This ID document is signed by the Milagro and distributed over a decentralized identity system built upon IPFS<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>, so each ID Document lives on an immutable, operation-based conflict-free replicated data structure (C [...]
+<p><em>For further detail, please see the format specification for ID Documents.</em></p>
+<h3><a class="anchor" aria-hidden="true" id="encrypted-envelope"></a><a href="#encrypted-envelope" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
+<p>ID Documents enable messages, called Encrypted Envelopes, containing secrets to be sent between endpoints running Milagro software. This can include clients, servers and peers and Milagro ZKP-MFA Servers, ZKP-MFA clients and Decentralized Trust Authorities. The ID Documents of recipients are available to any endpoint, so their public keys can be used to secure secrets in transit. In the case of digital asset custody, these messages need to be part of a permanent record, available in a [...]
+<p>Messages and immutable records are encrypted with AES-GCM at a 256-bit level with parameters anticipating quantum cryptography. It is necessary to know the recipient's public key, obtained via the ID Document, in order to encapsulate the encryption key for each recipient of the message or entity who has access to the Immutable Record.</p>
+<p>SIKE keys pairs are generated locally by endpoints running Milagro software, are not received in shares from D-TAs. SIKE public keys are used by the sender of a message to encapsulate the AES 256-bit key used to create the Encrypted Envelope. An encapsulation takes place once for every recipient and is affixed to the Encrypted Envelope.</p>
+<p>BLS signatures handle two jobs. Like SIKE key pairs, BLS signature key pairs are generated locally by endpoints running Milagro software, are not received in shares from D-TAs. The signatures these keys generate enable the non-repudiation of Encrypted Envelopes between endpoints and stored long term as immutable records. This is a classic use case of digital signatures, like PGP signatures over email.</p>
+<p><em>For further detail, please see the format specification for Encrypted Envelopes.</em></p>
+<p>The other use of BLS signatures is more complex. As described previously, BLS signatures have unique properties. Milagro leverages its own Encrypted Envelope format to enable the BLS ability of splitting signing keys by with a secure mechanism to securely distribute the split BLS signing keys. When delivered securely to the right entities, these part shares of BLS signing keys themselves become signature keys. The thresholds of these signatures can be aggregated securely to produce an [...]
+<p>Another capability is for a public key to be aggregated from multiple public keys in advance of aggregating signatures created by the corresponding private keys. These private keys are generated locally, and never leave the device, vs the method described previously. Signatures made from these keys can themselves be aggregated into a complete signature, verified by the aggregated public key.</p>
+<p>These capabilities are well suited to safeguarding secrets with an example in the following section.</p>
+<h2><a class="anchor" aria-hidden="true" id="decentralized-trust-authorities-d-ta"></a><a href="#decentralized-trust-authorities-d-ta" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 [...]
+<p>The Milagro framework protocols rely on Decentralized Trust Authorities for two jobs: Issuing shares of secrets, or safeguarding shares of secrets.</p>
+<p>D-TAs can issue shares, or fractions, of Type-3 Pairing private keys to Milagro Applications, such as the Milagro ZKP-MFA Servers or clients or to other D-TAs, which can be any software or hardware applications that have embedded some Milagro code in order derive the functional capabilities.</p>
+<p>These clients or peers become the only entities that know the completed whole keys assembled from shares issued by different Decentralized Trust Authorities.</p>
+<p>Type-3 pairings were selected as they are the most efficient pairing and will work with non-supersingular pairing-friendly curves.</p>
+<p>These operate as \( G_1 \) x \( G_2 \rightarrow G_T \), where \( G_2 \) is a particular group of points, again of the order \( q \), but on a twisted elliptic curve defined over an extension which is a divisor of \( k \).</p>
+<p>These curves can be constructed to be a near perfect fit at any required level of security. The pairing protocols within the Milagro framework all work on a Type-3 pairing.</p>
+<p>One of the novel aspects of pairing-based cryptography is that deployed secrets are commonly represented as points on an elliptic curve, which are the result of multiplying a known point by a master secret \( s \).</p>
+<p>So for example a secret might be of the form \( sP \), where \( P \) is known.</p>
+<p>There are a number of interesting things we can do with secrets that have this form, that are not possible with the secrets that arise when using other cryptographic technologies.</p>
+<p>For example they can be split into two, into \( s_1P \) and \( s_2P \) where \( s=s_1+s_2 \) and \( sP = s_1P +s_2P \).</p>
+<p>In fact they can be just as easily split into multiple parts, just like chopping up a cucumber.</p>
+<p>We can also add extra components to create a secret of the form \( s(P_1+P_2) = sP_1+sP_2 \).</p>
+<p>It is the flexibility that arises from this form of the secret that allows us to introduce the idea of chopping off a tiny sliver of the secret to support a PIN number.</p>
+<p>It also facilitates the concept of <em>Time Permits</em> as discussed in a later section.</p>
+<p>Lastly, it enables Decentralized Trust.</p>
+<h3><a class="anchor" aria-hidden="true" id="issuing-secrets"></a><a href="#issuing-secrets" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
+<p>A Trusted Authority will be in possession of a master secret \( s \), a random element of \( F_q \).</p>
+<p>A client secret is of the form \( s.H(ID) \), where ID is the client identity and \( H(.) \) a hash function which maps to a point on \( G_1 \).</p>
+<p>From prior art, we assume that \( H \) is modeled as a random oracle where \( H(ID) = r_{ID}.P \)</p>
+<p>where \( r_{ID} \in F_q \) is random and \( P \) is a fixed generator of \( G_1 \).</p>
+<p>A Milagro ZKP-MFA Server will be issued with \( sQ \), where \( Q \) is a fixed generator of \( G_2 \).</p>
+<p>Note that this will be the only multiple of \( s \) in \( G_2 \) ever provided by the TA. Servers will always be associated with their own unique master secrets.</p>
+<p>Note that the TA functionality can be trivially decentralized and distributed using a secret sharing scheme, to remove from the overall system a single point of compromise or coercion.</p>
+<p>In the simplest possible case there may be two Decentralized Trusted Authorities (D-TAs), each of which independently maintains their own share of the master key.</p>
+<p>So \( s=s_1+s_2 \), and each D-TA issues a part-client key to the client \( s_1 H(ID) \) and \( s_2 H(ID) \), which the client, after receiving the shares, adds together to form their full key.</p>
+<p>Now even if one D-TA is compromised, the client key is still safe.</p>
+<p>In the age of self sovereign identity, any entity can be a Decentralized Trust Authority as long as its Beneficiary trusts it to securely issue shares of secrets, or hold them for safekeeping.</p>
+<h3><a class="anchor" aria-hidden="true" id="safekeeping-secrets"></a><a href="#safekeeping-secrets" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
+<p>A D-TA may act as a Fiduciary over secrets where it can participate in a process to enable a Beneficiary to recover the secret. Using aggregated BLS signatures in a simple example, an entity running Milagro software may engage multiple D-TAs to act as Fiduciaries over its seed value used to generate and back up a cryptocurrency HD Wallet.</p>
+<p>As described in<sup class="footnote-ref"><a href="#fn1" id="fnref1:1">[1]</a></sup> the first step is for each D-TA to generate a key pair by choosing \( s k \stackrel{s}{\leftarrow} \mathbb{Z}_{q} \) to compute:</p>
+<p>$$ p k \leftarrow g_{2}^{s k}$$</p>
+<p>which outputs the \( (p k, s k) \).</p>
+<p>The Beneficiary would select which D-TA service providers (acting in concert) it would use to help it generate a secret. Assume a Beneficiary is also a participant in this protocol, it also runs a D-TA and acts as the designated combiner in the protocol.</p>
+<p>In advance of creating the HD Wallet seed, a Beneficiary would elicit the services of Decentralized Trust Authorities to act as Fiduciaries in a decentralized secret recovery protocol. The Beneficiary's next step calculates the aggregate public key by running protocol \( \text { KAg }\)({\( p k_{1}, \ldots, p k_{n} \)}) using the D-TA's known public keys as input (who have agreed to act as Fiduciaries to this process) and also its own public key.</p>
+<p>The Beneficiary then requests a signature \( \sigma \) on a message \( m \) from each of the D-TAs acting as Fiduciaries, including itself. For each D-TA, singing is a single round protocol.</p>
+<p>To finalize setup, each D-TA transmits its signature \( \sigma \) to the Beneficiary (acting as designated combiner). The Beneficiary generates its own signature and combines it with the received D-TA signatures for the final aggregated signature of \( \sigma \leftarrow \prod_{j=1}^{n} s_{j} \).</p>
+<p>The final signature is verified against the aggregated public key if the verifier function outputs 1. Assuming so, the setup completes by hashing the aggregated signature where \( H(\tilde{\sigma}) \) is the seed of the HD Wallet.</p>
+<p>Assuming the Beneficiary has backed up their BLS signature key, recovering the HD Wallet seed from multiple Fiduciaries becomes as simple as re-running the setup protocol again. It is easy to envision Fiduciary services running D-TAs, responding and authenticating requests for recovering secrets.</p>
+<h2><a class="anchor" aria-hidden="true" id="summary"></a><a href="#summary" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<h3><a class="anchor" aria-hidden="true" id="pairing-and-pq-cryptography"></a><a href="#pairing-and-pq-cryptography" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 1 [...]
+<p>Milagro leverages a combination of pairing and post-quantum algorithms to distribute cryptographic operations and split cryptographic parameters, providing a level of security and functionality that is a step forward in when compared to the certificate backed cryptosystems in service today. With pairing cryptography, security systems such as multi-factor authentication using zero knowledge protocols, certificate-less authenticated key agreement with perfect forward secrecy and decentr [...]
+<h3><a class="anchor" aria-hidden="true" id="decentralized-cryptosystem"></a><a href="#decentralized-cryptosystem" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H [...]
+<p>Bitcoin's blockchain provides an alternative distributed approach to managing a currency without the need for a central bank. With bitcoin, the ledger is distributed, not centralized. Milagro's cryptosystem is decentralized to create the same advantages as a distributed ledger. While architecturally different to the blockchain, Milagro's cryptosystem and the applications built on it are compatible with and can add significant value to cryptocurrencies and other decentralized networks.</p>
+<p>Milagro envisions a new class of cryptographic service providers called Decentralized Trust Authorities, or D-TAs for short. The purpose of a D-TA is to independently issue shares, or fractions, of cryptographic keys to Milagro clients and servers and application endpoints which have embedded Milagro cryptographic libraries. D-TA's also operate as 'Fiduciaries', to enable their 'Beneficiaries' to recover secrets in a decentralized manner, without keeping a share of the secret itself.  [...]
+<h3><a class="anchor" aria-hidden="true" id="no-single-point-of-compromise"></a><a href="#no-single-point-of-compromise" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12  [...]
+<p>Milagro entities receive issued shares cryptographic keys or signatures and combine them to create the whole completed key or signature, thus becoming the only audience who possess knowledge of the entire key or signature. If D-TAs are under separate organizational controls, current root key compromises and key escrow threats inherent in PKI systems are an order of magnitude harder to achieve in a Milagro cryptosystem.  An attacker would need to subvert all independent parties.</p>
+<p>In other words, all D-TAs used to generate shares, or fractions, of keys for Milagro clients and servers must be compromised to create the equivalent of a PKI root key compromise. All D-TAs under the threshold needed to recreate a signature would need to be compromised (including the Beneficiary) in order to generate a final signature.</p>
+<hr>
+
+    <div class="admonition admonition-note">
+      <div class="admonition-heading">
+        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V [...]
+      </div>
+      <div class="admonition-content">
+    <p>Submit a pull request on the development branch of <a href="https://github.com/apache/incubator-milagro">Milagro Website Repo</a>.</p>
+</div></div><!--
+Supported admonition types are: caution, note, important, tip, warning.
+--><hr class="footnotes-sep">
+<section class="footnotes">
+<ol class="footnotes-list">
+<li id="fn1"  class="footnote-item"><p><a href="https://eprint.iacr.org/2018/483">Compact Multi-Signatures for Smaller Blockchains</a> <a href="#fnref1" class="footnote-backref">↩</a> <a href="#fnref1:1" class="footnote-backref">↩</a></p>
+</li>
+</ol>
+</section>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/milagro-protocols"><span class="arrow-prev">← </span><span>Milagro Protocols</span></a><a class="docs-next button" href="/docs/amcl-overview"><span>AMCL Overview</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#protocols-and-technology" [...]
\ No newline at end of file
diff --git a/docs/milagro-design/index.html b/docs/milagro-design/index.html
new file mode 100644
index 0000000..bc7b2c6
--- /dev/null
+++ b/docs/milagro-design/index.html
@@ -0,0 +1,147 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Milagro Design · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;protocols-and-technology&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#protocols-and-technology&quot; aria-hidden=&quot;true&quot;  [...]
+"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Milagro Design · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;protocols-and-technology&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#protocols-and-technology&quot; aria-hidden=&quot;true&quot; class=&quot;hash-link&quo [...]
+"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type=" [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Milagro Design</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="protocols-and-technology"></a><a href="#protocols-and-technology" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4  [...]
+<h3><a class="anchor" aria-hidden="true" id="identity-based-encryption"></a><a href="#identity-based-encryption" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c [...]
+<p>M-Pin and Chow Choo are in the class of Identity Based Encryption protocols, which use pairings in their construction. The M-Pin Protocol is intended to replace the well-known Username/Password authentication mechanism which is widely considered to be effectively broken.</p>
+<p>The main problem is the existence of a password file on the server, which is commonly stolen and hacked, revealing most user passwords.</p>
+<p>The idea behind Milagro's Zero-Knowledge Proof Multi-Factor Authentication (ZKP-MFA) Server is that each registered client is issued with a secret cryptographic key derived from their identity. They then prove to the Milagro ZKP-MFA Server that they are in possession of this key using a zero-knowledge proof protocol, which can be extended to include authenticated key agreement.</p>
+<p>This protocol design eliminates the need for any information related to clients, or their keys, to be kept on the authentication server. Should an attacker penetrate the server, it is impossible to deduct any information about end users because it doesn't exist, at least within the authentication system.</p>
+<p>Common to both Chow-Choo and M-Pin is that the keys are issued in shares, not as whole keys, by entities called Decentralized Trust Authorities. Only the clients who receive all of the shares from the D-TA's, will ever know their completed whole keys.</p>
+<p>Industry commentators have long advocated a multi-factor solution. The novel feature of M-Pin and Chow-Choo is that the cryptographic secrets issued to clients or peers may be safely split up into any number of independent factors.</p>
+<p>Each of these factors has the same form; they are points on an elliptic curve. To recreate the original secret, they are simply added together again -- it's as simple as that.</p>
+<p>One factor might be derived from a key unlocked from the biometric login (ex: FaceID) which is available as a PIN input on a successful biometric authentication. This 'biometric based' PIN is, on Apple hardware, stored in the secure element of the device (something you are). Another factor might be the remainder token securely stored in the authenticator app on a smartphone (something you have). Yet a final piece can be a PIN or passphrase (something you know), which is secure as the  [...]
+<h3><a class="anchor" aria-hidden="true" id="decentralized-identity"></a><a href="#decentralized-identity" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0 [...]
+<p>Milagro applications use these identity based protocols in combination with classical cryptosystems where the endpoint generates a public/private key pair and the private key never leaves the application or device.</p>
+<p>An entity running a Milagro application attaches the public keys it has generated upon initialization to a self sovereign identity document (ID Document), that only reveals a unique account code as identifier. This ID document is signed by the Milagro and distributed over a decentralized identity system built upon IPFS<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>, so each ID Document lives on an immutable, operation-based conflict-free replicated data structure (C [...]
+<p><em>For further detail, please see the format specification for ID Documents.</em></p>
+<h3><a class="anchor" aria-hidden="true" id="encrypted-envelope"></a><a href="#encrypted-envelope" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
+<p>ID Documents enable messages, called Encrypted Envelopes, containing secrets to be sent between endpoints running Milagro software. This can include clients, servers and peers and Milagro ZKP-MFA Servers, ZKP-MFA clients and Decentralized Trust Authorities. The ID Documents of recipients are available to any endpoint, so their public keys can be used to secure secrets in transit. In the case of digital asset custody, these messages need to be part of a permanent record, available in a [...]
+<p>Messages and immutable records are encrypted with AES-GCM at a 256-bit level with parameters anticipating quantum cryptography. It is necessary to know the recipient's public key, obtained via the ID Document, in order to encapsulate the encryption key for each recipient of the message or entity who has access to the Immutable Record.</p>
+<p>SIKE keys pairs are generated locally by endpoints running Milagro software, are not received in shares from D-TAs. SIKE public keys are used by the sender of a message to encapsulate the AES 256-bit key used to create the Encrypted Envelope. An encapsulation takes place once for every recipient and is affixed to the Encrypted Envelope.</p>
+<p>BLS signatures handle two jobs. Like SIKE key pairs, BLS signature key pairs are generated locally by endpoints running Milagro software, are not received in shares from D-TAs. The signatures these keys generate enable the non-repudiation of Encrypted Envelopes between endpoints and stored long term as immutable records. This is a classic use case of digital signatures, like PGP signatures over email.</p>
+<p><em>For further detail, please see the format specification for Encrypted Envelopes.</em></p>
+<p>The other use of BLS signatures is more complex. As described previously, BLS signatures have unique properties. Milagro leverages its own Encrypted Envelope format to enable the BLS ability of splitting signing keys by with a secure mechanism to securely distribute the split BLS signing keys. When delivered securely to the right entities, these part shares of BLS signing keys themselves become signature keys. The thresholds of these signatures can be aggregated securely to produce an [...]
+<p>Another capability is for a public key to be aggregated from multiple public keys in advance of aggregating signatures created by the corresponding private keys. These private keys are generated locally, and never leave the device, vs the method described previously. Signatures made from these keys can themselves be aggregated into a complete signature, verified by the aggregated public key.</p>
+<p>These capabilities are well suited to safeguarding secrets with an example in the following section.</p>
+<h2><a class="anchor" aria-hidden="true" id="decentralized-trust-authorities-d-ta"></a><a href="#decentralized-trust-authorities-d-ta" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 [...]
+<p>The Milagro framework protocols rely on Decentralized Trust Authorities for two jobs: Issuing shares of secrets, or safeguarding shares of secrets.</p>
+<p>D-TAs can issue shares, or fractions, of Type-3 Pairing private keys to Milagro Applications, such as the Milagro ZKP-MFA Servers or clients or to other D-TAs, which can be any software or hardware applications that have embedded some Milagro code in order derive the functional capabilities.</p>
+<p>These clients or peers become the only entities that know the completed whole keys assembled from shares issued by different Decentralized Trust Authorities.</p>
+<p>Type-3 pairings were selected as they are the most efficient pairing and will work with non-supersingular pairing-friendly curves.</p>
+<p>These operate as \( G_1 \) x \( G_2 \rightarrow G_T \), where \( G_2 \) is a particular group of points, again of the order \( q \), but on a twisted elliptic curve defined over an extension which is a divisor of \( k \).</p>
+<p>These curves can be constructed to be a near perfect fit at any required level of security. The pairing protocols within the Milagro framework all work on a Type-3 pairing.</p>
+<p>One of the novel aspects of pairing-based cryptography is that deployed secrets are commonly represented as points on an elliptic curve, which are the result of multiplying a known point by a master secret \( s \).</p>
+<p>So for example a secret might be of the form \( sP \), where \( P \) is known.</p>
+<p>There are a number of interesting things we can do with secrets that have this form, that are not possible with the secrets that arise when using other cryptographic technologies.</p>
+<p>For example they can be split into two, into \( s_1P \) and \( s_2P \) where \( s=s_1+s_2 \) and \( sP = s_1P +s_2P \).</p>
+<p>In fact they can be just as easily split into multiple parts, just like chopping up a cucumber.</p>
+<p>We can also add extra components to create a secret of the form \( s(P_1+P_2) = sP_1+sP_2 \).</p>
+<p>It is the flexibility that arises from this form of the secret that allows us to introduce the idea of chopping off a tiny sliver of the secret to support a PIN number.</p>
+<p>It also facilitates the concept of <em>Time Permits</em> as discussed in a later section.</p>
+<p>Lastly, it enables Decentralized Trust.</p>
+<h3><a class="anchor" aria-hidden="true" id="issuing-secrets"></a><a href="#issuing-secrets" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
+<p>A Trusted Authority will be in possession of a master secret \( s \), a random element of \( F_q \).</p>
+<p>A client secret is of the form \( s.H(ID) \), where ID is the client identity and \( H(.) \) a hash function which maps to a point on \( G_1 \).</p>
+<p>From prior art, we assume that \( H \) is modeled as a random oracle where \( H(ID) = r_{ID}.P \)</p>
+<p>where \( r_{ID} \in F_q \) is random and \( P \) is a fixed generator of \( G_1 \).</p>
+<p>A Milagro ZKP-MFA Server will be issued with \( sQ \), where \( Q \) is a fixed generator of \( G_2 \).</p>
+<p>Note that this will be the only multiple of \( s \) in \( G_2 \) ever provided by the TA. Servers will always be associated with their own unique master secrets.</p>
+<p>Note that the TA functionality can be trivially decentralized and distributed using a secret sharing scheme, to remove from the overall system a single point of compromise or coercion.</p>
+<p>In the simplest possible case there may be two Decentralized Trusted Authorities (D-TAs), each of which independently maintains their own share of the master key.</p>
+<p>So \( s=s_1+s_2 \), and each D-TA issues a part-client key to the client \( s_1 H(ID) \) and \( s_2 H(ID) \), which the client, after receiving the shares, adds together to form their full key.</p>
+<p>Now even if one D-TA is compromised, the client key is still safe.</p>
+<p>In the age of self sovereign identity, any entity can be a Decentralized Trust Authority as long as its Beneficiary trusts it to securely issue shares of secrets, or hold them for safekeeping.</p>
+<h3><a class="anchor" aria-hidden="true" id="safekeeping-secrets"></a><a href="#safekeeping-secrets" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
+<p>A D-TA may act as a Fiduciary over secrets where it can participate in a process to enable a Beneficiary to recover the secret. Using aggregated BLS signatures in a simple example, an entity running Milagro software may engage multiple D-TAs to act as Fiduciaries over its seed value used to generate and back up a cryptocurrency HD Wallet.</p>
+<p>As described in<sup class="footnote-ref"><a href="#fn1" id="fnref1:1">[1]</a></sup> the first step is for each D-TA to generate a key pair by choosing \( s k \stackrel{s}{\leftarrow} \mathbb{Z}_{q} \) to compute:</p>
+<p>$$ p k \leftarrow g_{2}^{s k}$$</p>
+<p>which outputs the \( (p k, s k) \).</p>
+<p>The Beneficiary would select which D-TA service providers (acting in concert) it would use to help it generate a secret. Assume a Beneficiary is also a participant in this protocol, it also runs a D-TA and acts as the designated combiner in the protocol.</p>
+<p>In advance of creating the HD Wallet seed, a Beneficiary would elicit the services of Decentralized Trust Authorities to act as Fiduciaries in a decentralized secret recovery protocol. The Beneficiary's next step calculates the aggregate public key by running protocol \( \text { KAg }\)({\( p k_{1}, \ldots, p k_{n} \)}) using the D-TA's known public keys as input (who have agreed to act as Fiduciaries to this process) and also its own public key.</p>
+<p>The Beneficiary then requests a signature \( \sigma \) on a message \( m \) from each of the D-TAs acting as Fiduciaries, including itself. For each D-TA, singing is a single round protocol.</p>
+<p>To finalize setup, each D-TA transmits its signature \( \sigma \) to the Beneficiary (acting as designated combiner). The Beneficiary generates its own signature and combines it with the received D-TA signatures for the final aggregated signature of \( \sigma \leftarrow \prod_{j=1}^{n} s_{j} \).</p>
+<p>The final signature is verified against the aggregated public key if the verifier function outputs 1. Assuming so, the setup completes by hashing the aggregated signature where \( H(\tilde{\sigma}) \) is the seed of the HD Wallet.</p>
+<p>Assuming the Beneficiary has backed up their BLS signature key, recovering the HD Wallet seed from multiple Fiduciaries becomes as simple as re-running the setup protocol again. It is easy to envision Fiduciary services running D-TAs, responding and authenticating requests for recovering secrets.</p>
+<h2><a class="anchor" aria-hidden="true" id="summary"></a><a href="#summary" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<h3><a class="anchor" aria-hidden="true" id="pairing-and-pq-cryptography"></a><a href="#pairing-and-pq-cryptography" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 1 [...]
+<p>Milagro leverages a combination of pairing and post-quantum algorithms to distribute cryptographic operations and split cryptographic parameters, providing a level of security and functionality that is a step forward in when compared to the certificate backed cryptosystems in service today. With pairing cryptography, security systems such as multi-factor authentication using zero knowledge protocols, certificate-less authenticated key agreement with perfect forward secrecy and decentr [...]
+<h3><a class="anchor" aria-hidden="true" id="decentralized-cryptosystem"></a><a href="#decentralized-cryptosystem" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H [...]
+<p>Bitcoin's blockchain provides an alternative distributed approach to managing a currency without the need for a central bank. With bitcoin, the ledger is distributed, not centralized. Milagro's cryptosystem is decentralized to create the same advantages as a distributed ledger. While architecturally different to the blockchain, Milagro's cryptosystem and the applications built on it are compatible with and can add significant value to cryptocurrencies and other decentralized networks.</p>
+<p>Milagro envisions a new class of cryptographic service providers called Decentralized Trust Authorities, or D-TAs for short. The purpose of a D-TA is to independently issue shares, or fractions, of cryptographic keys to Milagro clients and servers and application endpoints which have embedded Milagro cryptographic libraries. D-TA's also operate as 'Fiduciaries', to enable their 'Beneficiaries' to recover secrets in a decentralized manner, without keeping a share of the secret itself.  [...]
+<h3><a class="anchor" aria-hidden="true" id="no-single-point-of-compromise"></a><a href="#no-single-point-of-compromise" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12  [...]
+<p>Milagro entities receive issued shares cryptographic keys or signatures and combine them to create the whole completed key or signature, thus becoming the only audience who possess knowledge of the entire key or signature. If D-TAs are under separate organizational controls, current root key compromises and key escrow threats inherent in PKI systems are an order of magnitude harder to achieve in a Milagro cryptosystem.  An attacker would need to subvert all independent parties.</p>
+<p>In other words, all D-TAs used to generate shares, or fractions, of keys for Milagro clients and servers must be compromised to create the equivalent of a PKI root key compromise. All D-TAs under the threshold needed to recreate a signature would need to be compromised (including the Beneficiary) in order to generate a final signature.</p>
+<hr>
+
+    <div class="admonition admonition-note">
+      <div class="admonition-heading">
+        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V [...]
+      </div>
+      <div class="admonition-content">
+    <p>Submit a pull request on the development branch of <a href="https://github.com/apache/incubator-milagro">Milagro Website Repo</a>.</p>
+</div></div><!--
+Supported admonition types are: caution, note, important, tip, warning.
+--><hr class="footnotes-sep">
+<section class="footnotes">
+<ol class="footnotes-list">
+<li id="fn1"  class="footnote-item"><p><a href="https://eprint.iacr.org/2018/483">Compact Multi-Signatures for Smaller Blockchains</a> <a href="#fnref1" class="footnote-backref">↩</a> <a href="#fnref1:1" class="footnote-backref">↩</a></p>
+</li>
+</ol>
+</section>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/milagro-protocols"><span class="arrow-prev">← </span><span>Milagro Protocols</span></a><a class="docs-next button" href="/docs/amcl-overview"><span>AMCL Overview</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#protocols-and-technology" [...]
\ No newline at end of file
diff --git a/docs/milagro-intro.html b/docs/milagro-intro.html
new file mode 100644
index 0000000..3e010be
--- /dev/null
+++ b/docs/milagro-intro.html
@@ -0,0 +1,128 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Milagro Introduction · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Apache Milagro is core security infrastructure and crypto libraries purpose-built for decentralized networks and distributed systems, while also providing value to cloud-connected app-ce [...]
+"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Milagro Introduction · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;p&gt;Apache Milagro is core security infrastructure and crypto libraries purpose-built for decentralized networks and distributed systems, while also providing value to cloud-connected app-centric software and IoT de [...]
+"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type=" [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Milagro Introduction</h1></header><article><div><span><p>Apache Milagro is core security infrastructure and crypto libraries purpose-built for decentralized networks and distributed systems, while also providing value to cloud-connected app-centric software and IoT devices that require Internet scale.</p>
+<p>Milagro's purpose is to provide a secure and positive open source alternative to centralized and proprietary monolithic trust providers such as commercial certificate authorities and the certificate backed cryptosystems that rely on them.</p>
+<h2><a class="anchor" aria-hidden="true" id="pairing-cryptography"></a><a href="#pairing-cryptography" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
+<p>Over the last decade, pairings on elliptic curves have been a very active area of research in cryptography, particularly within decentralized networks and distributed systems.</p>
+<p>A pairing is a kind of the bilinear map defined over an elliptic curve. Examples include Weil pairing, Tate pairing, optimal Ate pairing and so on.</p>
+<p>Pairings map pairs of points on an elliptic curve into the multiplicative group of a finite field. Their unique properties have enabled many new cryptographic protocols that had not previously been feasible.</p>
+<p><a href="https://en.wikipedia.org/wiki/Pairing-based_cryptography">Pairing-Based Cryptography (PBC)</a> is emerging as a solution to complex problems that proved intractable to the standard mathematics of Public-Key Cryptography such as Identity-Based Encryption, whereby the identity of a client can be used as their public key.</p>
+<p>In certain use cases, this removes the need for a PKI infrastructure eliminates the root key 'single point of compromise' weakness, as the main reason to issue certificates is used to bind a public / private key pair to an identity.</p>
+<p>Removing the certificate management burden enables the identity management and key lifecycle to take place within the decentralized cryptosystem itself.</p>
+<p>As a result, Milagro's decentralized cryptosystem design goals seek to deliver products that are easier to scale and manage that traditional PKI, and are a seamless fit for today's decentralized networks and distributed systems.</p>
+<h2><a class="anchor" aria-hidden="true" id="pairings-go-mainstream"></a><a href="#pairings-go-mainstream" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0 [...]
+<p>Pairings are key building blocks in Apache Milagro's crypto libraries and products. As examples, BLS signatures feature prominently in Milagro Decentralized Trust Authorities (D-TA), while the M-Pin protocol used in the Milagro ZKP-MFA clients and servers.</p>
+<p><a href="https://en.wikipedia.org/wiki/Boneh-Lynn-Shacham">BLS signatures</a> are widely recognized within the cryptocurrency space for their signature aggregation abilities. BLS signatures are now going through an IETF submission review<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup> standardization process.</p>
+<p>The <a href="https://eprint.iacr.org/2002/164">M-Pin protocol</a><sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup>, which is a multi-factor authentication protocol built upon zero-knowledge proofs, is widely deployed across cloud infrastructures and in public facing deployments by the UK Government<sup class="footnote-ref"><a href="#fn3" id="fnref3">[3]</a></sup>.</p>
+<p>Zcash implements their own zero-knowledge proof algorithm named zk-SNARKs (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge)<sup class="footnote-ref"><a href="#fn4" id="fnref4">[4]</a></sup>. zk-SNARKs is used for protecting privacy of transactions of Zcash. Pairings are a key ingredient for constructing zk-SNARKS.</p>
+<p>Cloudflare introduced Geo Key Manager<sup class="footnote-ref"><a href="#fn5" id="fnref5">[5]</a></sup> to restrict distribution of customers' private keys to the subset of their data centers. To achieve this functionality, attribute-based encryption is used and pairings again are a key building block.</p>
+<p>The Trusted Computing Group (TCG) specifies ECDAA (Elliptic Curve Direct Anonymous Attestation) in the specification of Trusted Platform Module<sup class="footnote-ref"><a href="#fn6" id="fnref6">[6]</a></sup>. ECDAA is a protocol for proving the attestation held by a Trusted Platform Module (TPM) to a verifier without revealing the attestation held by that TPM. Pairing cryptography is used for constructing ECDAA. FIDO Alliance<sup class="footnote-ref"><a href="#fn7" id="fnref7">[7]</ [...]
+<p>In 2015, NIST <a href="http://www.theregister.co.uk/2014/05/26/congress_divorces_nist_from_nsa/">(<strong><em>the 'post-NSA' NIST</em></strong>)</a> goes so far as to recommend standardization of pairing based cryptography in their publication, <a href="http://nvlpubs.nist.gov/nistpubs/jres/120/jres.120.002.pdf">Report on Pairing-Based Cryptography</a>.</p>
+<blockquote>
+<p>&quot;Based on the study, the report suggests an approach for including pairing-based cryptography schemes in the NIST cryptographic toolkit. As we have seen, pairing-based cryptography has much to offer. Pairing-based schemes, such as IBE, provide special properties which cannot be provided through traditional PKI in a straightforward way. Therefore, pairing-based cryptographic schemes would make a nice addition to NIST’s cryptographic toolkit. In particular, we have focused attentio [...]
+<pre><code class="hljs"> --- NIST, Report on Pairing-Based Cryptography
+</code></pre>
+</blockquote>
+<h2><a class="anchor" aria-hidden="true" id="the-move-to-post-quantum"></a><a href="#the-move-to-post-quantum" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
+<p>The security of almost all public-key cryptosystems in use today rely on computational assumptions such as the Integer Factorization (IF) and Discrete Logarithm (DL) problems as the foundation of their security. These are problems that today's classical computers cannot solve. In 1994, Shor<sup class="footnote-ref"><a href="#fn9" id="fnref9">[9]</a></sup> showed that both IF and DL problems are easy to solve on a quantum computer, based on the laws of quantum physics. As a consequence [...]
+<p>According to NIST in its Report on Post-Quantum Cryptography<sup class="footnote-ref"><a href="#fn10" id="fnref10">[10]</a></sup>, &quot;It will take significant effort to ensure a smooth and secure migration from the current widely used cryptosystems to their quantum computing resistant counterparts. Therefore, regardless of whether we can estimate the exact time of the arrival of the quantum computing era, we must begin now to prepare our information security systems to be able to r [...]
+<p>Most experts have a range of quantum computing being strong enough to crack today's cryptosystems being on the horizon anywhere from five to twenty years. It should also be stated that quantum computation only speeds up a brute-force keysearch by a factor of a square root, so any symmetric algorithm can be made secure against a quantum computer by doubling the key length, i.e., take AES from 128 bits to 256.</p>
+<p>Milagro has begun implementing post-quantum algorithms into its code base, beginning with the Supersingular Isogeny Key Encapsulation<sup class="footnote-ref"><a href="#fn11" id="fnref11">[11]</a></sup> protocol. Why?</p>
+<p>Obviously, data that is transient and that does not retain a long term value doesn't require a level of protection against a post-quantum adversary. It becomes an issue when data is retained for the long term. If data is harvested and stored, and has retained value even after decades, then it should be protected to a post-quantum degree. In short, you are protecting the data for the day <em>WHEN</em> a working quantum computer comes online.</p>
+<hr>
+<p><strong>It is hoped that Apache Milagro will become a safe, IPR free island of innovation for cryptographers interested in pairing protocols that deliver much needed core security infrastructure for the advancement of decentralized networks and distributed systems.</strong></p>
+<p><strong>We hope you join us and become part of this journey.</strong></p>
+<hr>
+
+    <div class="admonition admonition-note">
+      <div class="admonition-heading">
+        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V [...]
+      </div>
+      <div class="admonition-content">
+    <p>Submit a pull request on the development branch of <a href="https://github.com/apache/incubator-milagro">Milagro Website Repo</a>.</p>
+</div></div><!--
+Supported admonition types are: caution, note, important, tip, warning.
+--><hr class="footnotes-sep">
+<section class="footnotes">
+<ol class="footnotes-list">
+<li id="fn1"  class="footnote-item"><p><a href="https://datatracker.ietf.org/doc/draft-boneh-bls-signature/">IETF BLS Signature Internet Draft</a> <a href="#fnref1" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn2"  class="footnote-item"><p><a href="https://tools.ietf.org/html/draft-scott-mpin-00">IETF M-Pin Informational Draft</a> <a href="#fnref2" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn3"  class="footnote-item"><p><a href="https://www.computerweekly.com/news/4500260479/Experian-chooses-UK-authentication-startup-for-GovUK-Verify">UK Government selects M-Pin protocol based authentication provider</a> <a href="#fnref3" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn4"  class="footnote-item"><p><a href="https://z.cash/technology/zksnarks.html">Lindemann, R., &quot;What are zk-SNARKs?&quot;, July 2018</a> <a href="#fnref4" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn5"  class="footnote-item"><p><a href="https://blog.cloudflare.com/geo-key-manager-how-it-works">Geo Key Manager: How It Works</a> <a href="#fnref5" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn6"  class="footnote-item"><p><a href="https://trustedcomputinggroup.org/resource/tpm-library-specification/">TPM 2.0 Library Specification&quot;, September 2016</a> <a href="#fnref6" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn7"  class="footnote-item"><p><a href="https://fidoalliance.org/specs/fido-v2.0-rd-20180702/fido-ecdaa-algorithm-v2.0-rd-20180702.html">FIDO ECDAA Algorithm - FIDO Alliance Review Draft 02</a> <a href="#fnref7" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn8"  class="footnote-item"><p><a href="https://www.w3.org/TR/webauthn">Web Authentication: An API for accessing Public Key Credentials Level 1 - W3C Candidate Recommendation</a> <a href="#fnref8" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn9"  class="footnote-item"><p><a href="https://pdfs.semanticscholar.org/6902/cb196ec032852ff31cc178ca822a5f67b2f2.pdf">Algorithms for quantum computation: discrete logarithms and factoring</a> <a href="#fnref9" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn10"  class="footnote-item"><p><a href="https://nvlpubs.nist.gov/nistpubs/ir/2016/NIST.IR.8105.pdf">Report on post-quantum cryptography</a> <a href="#fnref10" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn11"  class="footnote-item"><p><a href="https://sike.org/">SIKE</a> <a href="#fnref11" class="footnote-backref">↩</a></p>
+</li>
+</ol>
+</section>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-next button" href="/docs/milagro-crypto"><span>Milagro Crypto</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#pairing-cryptography">Pairing Cryptography</a></li><li><a href="#pairings-go-mainstream">Pairings Go Mainstream</a></li><li><a href="#the-move-to-post [...]
\ No newline at end of file
diff --git a/docs/milagro-intro/index.html b/docs/milagro-intro/index.html
new file mode 100644
index 0000000..3e010be
--- /dev/null
+++ b/docs/milagro-intro/index.html
@@ -0,0 +1,128 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Milagro Introduction · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Apache Milagro is core security infrastructure and crypto libraries purpose-built for decentralized networks and distributed systems, while also providing value to cloud-connected app-ce [...]
+"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Milagro Introduction · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;p&gt;Apache Milagro is core security infrastructure and crypto libraries purpose-built for decentralized networks and distributed systems, while also providing value to cloud-connected app-centric software and IoT de [...]
+"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type=" [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Milagro Introduction</h1></header><article><div><span><p>Apache Milagro is core security infrastructure and crypto libraries purpose-built for decentralized networks and distributed systems, while also providing value to cloud-connected app-centric software and IoT devices that require Internet scale.</p>
+<p>Milagro's purpose is to provide a secure and positive open source alternative to centralized and proprietary monolithic trust providers such as commercial certificate authorities and the certificate backed cryptosystems that rely on them.</p>
+<h2><a class="anchor" aria-hidden="true" id="pairing-cryptography"></a><a href="#pairing-cryptography" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
+<p>Over the last decade, pairings on elliptic curves have been a very active area of research in cryptography, particularly within decentralized networks and distributed systems.</p>
+<p>A pairing is a kind of the bilinear map defined over an elliptic curve. Examples include Weil pairing, Tate pairing, optimal Ate pairing and so on.</p>
+<p>Pairings map pairs of points on an elliptic curve into the multiplicative group of a finite field. Their unique properties have enabled many new cryptographic protocols that had not previously been feasible.</p>
+<p><a href="https://en.wikipedia.org/wiki/Pairing-based_cryptography">Pairing-Based Cryptography (PBC)</a> is emerging as a solution to complex problems that proved intractable to the standard mathematics of Public-Key Cryptography such as Identity-Based Encryption, whereby the identity of a client can be used as their public key.</p>
+<p>In certain use cases, this removes the need for a PKI infrastructure eliminates the root key 'single point of compromise' weakness, as the main reason to issue certificates is used to bind a public / private key pair to an identity.</p>
+<p>Removing the certificate management burden enables the identity management and key lifecycle to take place within the decentralized cryptosystem itself.</p>
+<p>As a result, Milagro's decentralized cryptosystem design goals seek to deliver products that are easier to scale and manage that traditional PKI, and are a seamless fit for today's decentralized networks and distributed systems.</p>
+<h2><a class="anchor" aria-hidden="true" id="pairings-go-mainstream"></a><a href="#pairings-go-mainstream" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0 [...]
+<p>Pairings are key building blocks in Apache Milagro's crypto libraries and products. As examples, BLS signatures feature prominently in Milagro Decentralized Trust Authorities (D-TA), while the M-Pin protocol used in the Milagro ZKP-MFA clients and servers.</p>
+<p><a href="https://en.wikipedia.org/wiki/Boneh-Lynn-Shacham">BLS signatures</a> are widely recognized within the cryptocurrency space for their signature aggregation abilities. BLS signatures are now going through an IETF submission review<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup> standardization process.</p>
+<p>The <a href="https://eprint.iacr.org/2002/164">M-Pin protocol</a><sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup>, which is a multi-factor authentication protocol built upon zero-knowledge proofs, is widely deployed across cloud infrastructures and in public facing deployments by the UK Government<sup class="footnote-ref"><a href="#fn3" id="fnref3">[3]</a></sup>.</p>
+<p>Zcash implements their own zero-knowledge proof algorithm named zk-SNARKs (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge)<sup class="footnote-ref"><a href="#fn4" id="fnref4">[4]</a></sup>. zk-SNARKs is used for protecting privacy of transactions of Zcash. Pairings are a key ingredient for constructing zk-SNARKS.</p>
+<p>Cloudflare introduced Geo Key Manager<sup class="footnote-ref"><a href="#fn5" id="fnref5">[5]</a></sup> to restrict distribution of customers' private keys to the subset of their data centers. To achieve this functionality, attribute-based encryption is used and pairings again are a key building block.</p>
+<p>The Trusted Computing Group (TCG) specifies ECDAA (Elliptic Curve Direct Anonymous Attestation) in the specification of Trusted Platform Module<sup class="footnote-ref"><a href="#fn6" id="fnref6">[6]</a></sup>. ECDAA is a protocol for proving the attestation held by a Trusted Platform Module (TPM) to a verifier without revealing the attestation held by that TPM. Pairing cryptography is used for constructing ECDAA. FIDO Alliance<sup class="footnote-ref"><a href="#fn7" id="fnref7">[7]</ [...]
+<p>In 2015, NIST <a href="http://www.theregister.co.uk/2014/05/26/congress_divorces_nist_from_nsa/">(<strong><em>the 'post-NSA' NIST</em></strong>)</a> goes so far as to recommend standardization of pairing based cryptography in their publication, <a href="http://nvlpubs.nist.gov/nistpubs/jres/120/jres.120.002.pdf">Report on Pairing-Based Cryptography</a>.</p>
+<blockquote>
+<p>&quot;Based on the study, the report suggests an approach for including pairing-based cryptography schemes in the NIST cryptographic toolkit. As we have seen, pairing-based cryptography has much to offer. Pairing-based schemes, such as IBE, provide special properties which cannot be provided through traditional PKI in a straightforward way. Therefore, pairing-based cryptographic schemes would make a nice addition to NIST’s cryptographic toolkit. In particular, we have focused attentio [...]
+<pre><code class="hljs"> --- NIST, Report on Pairing-Based Cryptography
+</code></pre>
+</blockquote>
+<h2><a class="anchor" aria-hidden="true" id="the-move-to-post-quantum"></a><a href="#the-move-to-post-quantum" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
+<p>The security of almost all public-key cryptosystems in use today rely on computational assumptions such as the Integer Factorization (IF) and Discrete Logarithm (DL) problems as the foundation of their security. These are problems that today's classical computers cannot solve. In 1994, Shor<sup class="footnote-ref"><a href="#fn9" id="fnref9">[9]</a></sup> showed that both IF and DL problems are easy to solve on a quantum computer, based on the laws of quantum physics. As a consequence [...]
+<p>According to NIST in its Report on Post-Quantum Cryptography<sup class="footnote-ref"><a href="#fn10" id="fnref10">[10]</a></sup>, &quot;It will take significant effort to ensure a smooth and secure migration from the current widely used cryptosystems to their quantum computing resistant counterparts. Therefore, regardless of whether we can estimate the exact time of the arrival of the quantum computing era, we must begin now to prepare our information security systems to be able to r [...]
+<p>Most experts have a range of quantum computing being strong enough to crack today's cryptosystems being on the horizon anywhere from five to twenty years. It should also be stated that quantum computation only speeds up a brute-force keysearch by a factor of a square root, so any symmetric algorithm can be made secure against a quantum computer by doubling the key length, i.e., take AES from 128 bits to 256.</p>
+<p>Milagro has begun implementing post-quantum algorithms into its code base, beginning with the Supersingular Isogeny Key Encapsulation<sup class="footnote-ref"><a href="#fn11" id="fnref11">[11]</a></sup> protocol. Why?</p>
+<p>Obviously, data that is transient and that does not retain a long term value doesn't require a level of protection against a post-quantum adversary. It becomes an issue when data is retained for the long term. If data is harvested and stored, and has retained value even after decades, then it should be protected to a post-quantum degree. In short, you are protecting the data for the day <em>WHEN</em> a working quantum computer comes online.</p>
+<hr>
+<p><strong>It is hoped that Apache Milagro will become a safe, IPR free island of innovation for cryptographers interested in pairing protocols that deliver much needed core security infrastructure for the advancement of decentralized networks and distributed systems.</strong></p>
+<p><strong>We hope you join us and become part of this journey.</strong></p>
+<hr>
+
+    <div class="admonition admonition-note">
+      <div class="admonition-heading">
+        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V [...]
+      </div>
+      <div class="admonition-content">
+    <p>Submit a pull request on the development branch of <a href="https://github.com/apache/incubator-milagro">Milagro Website Repo</a>.</p>
+</div></div><!--
+Supported admonition types are: caution, note, important, tip, warning.
+--><hr class="footnotes-sep">
+<section class="footnotes">
+<ol class="footnotes-list">
+<li id="fn1"  class="footnote-item"><p><a href="https://datatracker.ietf.org/doc/draft-boneh-bls-signature/">IETF BLS Signature Internet Draft</a> <a href="#fnref1" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn2"  class="footnote-item"><p><a href="https://tools.ietf.org/html/draft-scott-mpin-00">IETF M-Pin Informational Draft</a> <a href="#fnref2" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn3"  class="footnote-item"><p><a href="https://www.computerweekly.com/news/4500260479/Experian-chooses-UK-authentication-startup-for-GovUK-Verify">UK Government selects M-Pin protocol based authentication provider</a> <a href="#fnref3" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn4"  class="footnote-item"><p><a href="https://z.cash/technology/zksnarks.html">Lindemann, R., &quot;What are zk-SNARKs?&quot;, July 2018</a> <a href="#fnref4" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn5"  class="footnote-item"><p><a href="https://blog.cloudflare.com/geo-key-manager-how-it-works">Geo Key Manager: How It Works</a> <a href="#fnref5" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn6"  class="footnote-item"><p><a href="https://trustedcomputinggroup.org/resource/tpm-library-specification/">TPM 2.0 Library Specification&quot;, September 2016</a> <a href="#fnref6" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn7"  class="footnote-item"><p><a href="https://fidoalliance.org/specs/fido-v2.0-rd-20180702/fido-ecdaa-algorithm-v2.0-rd-20180702.html">FIDO ECDAA Algorithm - FIDO Alliance Review Draft 02</a> <a href="#fnref7" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn8"  class="footnote-item"><p><a href="https://www.w3.org/TR/webauthn">Web Authentication: An API for accessing Public Key Credentials Level 1 - W3C Candidate Recommendation</a> <a href="#fnref8" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn9"  class="footnote-item"><p><a href="https://pdfs.semanticscholar.org/6902/cb196ec032852ff31cc178ca822a5f67b2f2.pdf">Algorithms for quantum computation: discrete logarithms and factoring</a> <a href="#fnref9" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn10"  class="footnote-item"><p><a href="https://nvlpubs.nist.gov/nistpubs/ir/2016/NIST.IR.8105.pdf">Report on post-quantum cryptography</a> <a href="#fnref10" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn11"  class="footnote-item"><p><a href="https://sike.org/">SIKE</a> <a href="#fnref11" class="footnote-backref">↩</a></p>
+</li>
+</ol>
+</section>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-next button" href="/docs/milagro-crypto"><span>Milagro Crypto</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#pairing-cryptography">Pairing Cryptography</a></li><li><a href="#pairings-go-mainstream">Pairings Go Mainstream</a></li><li><a href="#the-move-to-post [...]
\ No newline at end of file
diff --git a/docs/milagro-protocols.html b/docs/milagro-protocols.html
new file mode 100644
index 0000000..cccd8d7
--- /dev/null
+++ b/docs/milagro-protocols.html
@@ -0,0 +1,864 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Milagro Protocols · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;The Apache Milagro crypto libraries contain an (almost) overwhelming choice of algorithms and cryptographic primitives for robust and rapid application development. This section focuses spe [...]
+"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Milagro Protocols · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;p&gt;The Apache Milagro crypto libraries contain an (almost) overwhelming choice of algorithms and cryptographic primitives for robust and rapid application development. This section focuses specifically on a few protoc [...]
+"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type=" [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Milagro Protocols</h1></header><article><div><span><p>The Apache Milagro crypto libraries contain an (almost) overwhelming choice of algorithms and cryptographic primitives for robust and rapid application development. This section focuses specifically on a few protocols that are used extensively as key building blocks within the  [...]
+<h2><a class="anchor" aria-hidden="true" id="m-pin-protocol-introduction"></a><a href="#m-pin-protocol-introduction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 1 [...]
+<p>The genesis of the M-Pin Protocol was first put forward in a research paper by <a href="https://scholar.google.com/citations?user=GsM-aeEAAAAJ&amp;hl=en">Dr. Michael Scott</a> in 2002<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>.</p>
+<p>The M-Pin Protocol has been iterated on several times over the years since, to develop three distinct modes, which will be explored in the following sections.</p>
+<p>As noted in <a href="milagro-crypto.html">Milagro Crypto</a>, the M-Pin Protocol is of these classifications and exploits the features of:</p>
+<ul>
+<li>Elliptic Curve Cryptography</li>
+<li>Pairing Based Cryptography</li>
+<li>Identity Based Encryption</li>
+<li>Zero Knowledge Proof</li>
+</ul>
+<p>Because of the characteristics that M-Pin inherits from the four techniques above, the M-Pin Protocol and its variants are able to deliver:</p>
+<ul>
+<li>Multi-factor authentication (MFA) using Zero Knowledge Proof</li>
+<li>Authenticated Key Agreement</li>
+<li>Distribution, or splitting, of Trust Authorities</li>
+<li><a href="https://en.wikipedia.org/wiki/Subliminal_channel">Subliminal Channel Communication</a><sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup></li>
+</ul>
+<p>The three modes of operation of the M-Pin Protocol are as follows:</p>
+<ul>
+<li><strong>M-Pin 1-pass</strong>: Client to server authentication via digital signature, this mode implements a <em>non-interactive</em> zero knowledge proof and is resistant to <a href="https://en.wikipedia.org/wiki/Man-in-the-middle_attack">MITM (man in the middle)</a> attacks.</li>
+<li><strong>M-Pin 2-pass</strong>: Client to server authentication via a <em>interactive</em> zero knowledge proof, resistant to <a href="https://en.wikipedia.org/wiki/Man-in-the-middle_attack">MITM</a> and <a href="https://kcitls.org">KCI (Key Compromise Impersonation)</a> attacks.</li>
+<li><strong>M-Pin FULL</strong>: Mutual client to server authentication via a <em>interactive</em> zero knowledge proof, resistant to MITM and KCI attacks and able to drive an Authenticated <a href="https://en.wikipedia.org/wiki/Key-agreement_protocol">Key Agreement</a> between client and server, resulting in 128 bit shared secret key.</li>
+</ul>
+<p>Note that the M-Pin Full Authenticated Key Agreement possesses the quality of <a href="https://en.wikipedia.org/wiki/Forward_secrecy">perfect forward secrecy (PFS)</a>, meaning, even if the client and server long term keys are compromised, the past session keys (used to encrypt TLS traffic, for example) are not compromised.</p>
+<h2><a class="anchor" aria-hidden="true" id="chow-choo-protocol-introduction"></a><a href="#chow-choo-protocol-introduction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 [...]
+<p>The Chow-Choo Protocol was developed by Sherman S.M. Chow and Kim-Kwang Raymond Choo and published in 2007 via a research paper titled Strongly-Secure Identity-based Key Agreement<sup class="footnote-ref"><a href="#fn3" id="fnref3">[3]</a></sup>.  The Chow-Choo Protocol can be technically described as an identity-based key agreement protocol.</p>
+<p>The Chow-Choo Protocol is of these classifications and exploits the features of:</p>
+<ul>
+<li>Elliptic Curve Cryptography</li>
+<li>Pairing Based Cryptography</li>
+<li>Identity Based Encryption</li>
+</ul>
+<p>Because of the characteristics that Chow-Choo inherits from the three techniques above, the Chow-Choo Protocol can deliver:</p>
+<ul>
+<li>Authenticated Key Agreement</li>
+<li>Distribution, or splitting, of Trust Authorities</li>
+</ul>
+<p>Note that the Chow-Choo Protocol is not a Zero Knowledge Proof protocol.</p>
+<h2><a class="anchor" aria-hidden="true" id="bls-signatures-introduction"></a><a href="#bls-signatures-introduction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 1 [...]
+<p>The BLS signature (Boneh-Lynn-Schacham) scheme<sup class="footnote-ref"><a href="#fn4" id="fnref4">[4]</a></sup> uses a bilinear pairing for verification, and signatures are elements of an elliptic curve group. Working in an elliptic curve group provides some defense against index calculus attacks (with the caveat that such attacks are still possible in the target group \( G_{T} \) of the pairing), allowing shorter signatures than other systems for similar levels of security.</p>
+<p>BLS signatures have become the subject of much work as they are seen as being a possible way forward to solve privacy issues within cryptocurrencies through a process of signature aggregation. Apache Milagro uses signature aggregation and key splitting, and further aggregation of signatures from those split keys, as a key component of the Milagro Custody Node digital asset safekeeping protocol.</p>
+<h2><a class="anchor" aria-hidden="true" id="supersingular-isogeny-key-encapsulation-introduction"></a><a href="#supersingular-isogeny-key-encapsulation-introduction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S [...]
+<p>Supersingular isogeny Diffie–Hellman key exchange (SIDH) and the key encapsulation protocol, SIKE<sup class="footnote-ref"><a href="#fn5" id="fnref5">[5]</a></sup> (derived from SIDH), are post-quantum cryptographic algorithms used to establish a secret key between two parties over an otherwise insecure communications channel. SIKE boasts one of the smallest key sizes of all post-quantum key encapsulations; with compression, SIKE uses 2688-bit public keys at a 128-bit quantum security [...]
+<p>SIKE also distinguishes itself from similar systems such as NTRU and Ring-LWE by supporting perfect forward secrecy, a property that prevents compromised long-term keys from compromising the confidentiality of old communication sessions. These properties make SIKE a natural candidate to replace Diffie–Hellman (DHE and elliptic curve Diffie–Hellman (ECDHE), which are widely used in Internet communication.</p>
+<p>Since it is the only post-quantum cryptography protocol which is constructed on elliptic curves, hybrid cryptography protocols can be derived from SIKE and classical elliptic curve cryptography (ECC) to make the transition towards post-quantum cryptography more convenient and practical.</p>
+<p>Milagro Custody Node implements SIKE for key encapsulation within Milagro's encrypted envelope format.</p>
+<hr>
+<table>
+<thead>
+<tr><th>Protocols</th><th>Use Cases</th></tr>
+</thead>
+<tbody>
+<tr><td>M-Pin 1-Pass</td><td>Digital signature authentication in battery or bandwidth constrained environments such as IoT devices, embedded applications and mobile apps. <br>This should be considered the default implementation for client to server authentication suitable for almost all use cases.</td></tr>
+<tr><td>M-Pin 1-Pass + <br>M-Pin 2-Pass</td><td>Digital signature and client to server authentication in smartphones apps, desktop browsers and software applications.</td></tr>
+<tr><td>M-Pin 2-Pass</td><td>Client to server authentication in smartphone apps, desktop browsers and software applications.</td></tr>
+<tr><td>M-Pin FULL</td><td>Mutual client and server authentication with authenticated key agreement for use in smartphone apps, hardware and software applications. <br>Authenticated Key Agreement with PFS can be used as the basis for TLS sessions between clients and servers.</td></tr>
+<tr><td>Chow-Choo</td><td>Mutual peer to peer authentication with authenticated key agreement for use in smartphone apps, hardware and software applications. <br>Authenticated Key Agreement with PFS can be used as the basis for TLS sessions between clients and servers and peer to peer.</td></tr>
+<tr><td>BLS Signing + <br>Key Splitting + <br>Signature Aggregation</td><td>A simple approach for splitting keys and aggregating many BLS signatures (from the shares of keys acting as signing keys) on a common message. Public keys are not needed for verifying the multi-signature. <br>An important property of the construction is that the scheme is secure against a rogue public-key attack without requiring users to prove knowledge of their secret keys.</td></tr>
+<tr><td>SIKE (Key Encapsulation)</td><td>SIKE is a family of post-quantum key encapsulation mechanisms based on the Supersingular Isogeny Diffie-Hellman (SIDH) key exchange protocol. <br>The algorithms use arithmetic operations on elliptic curves defined over finite fields and compute maps, so-called isogenies, between such curves. <br>SIKE can also delivery perfect forward secrecy.</td></tr>
+</tbody>
+</table>
+<hr>
+<h2><a class="anchor" aria-hidden="true" id="protocols-in-depth"></a><a href="#protocols-in-depth" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
+<h3><a class="anchor" aria-hidden="true" id="m-pin-1-pass"></a><a href="#m-pin-1-pass" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<p>As opposed to Chow-Choo, which can be used in a client to server as well as a peer to peer setting, M-Pin is strictly a client-server protocol.</p>
+<p>To embellish the security of the client-server protocol, it is important that client and server secrets should be kept distinct.</p>
+<p>A simple way to do this is to exploit the structure of a Type-3 pairing and put client secrets in \( G_1 \) and the server secret in \( G_2 \) as previously noted in the preceding section.</p>
+<p>For a Type-3 pairing there is assumed to be no computable isomorphism between these groups, even though both are of the same order.</p>
+<p>In the original implementation, the client was supplied with a challenge by the server as part of the second step within the protocol, after the first step whereby the client announced her identity to the server.</p>
+<p>In a later proposal, it was realised that an M-Pin 1-Pass Protocol could be obtained if the client itself derived the challenge as \( y \) as \( y=H(U|T) \) where \( T \) is a time-stamp transmitted by the Client along her claimed identity, \( U \) and \( V \).</p>
+<p>The protocol could then be reduced in an obvious way to a secure 1-pass protocol. However, this assumes that the Server checks the accuracy of the time-stamp before completing the protocol.</p>
+<p>This all works thanks to the pairing function \( e(.,.) \) and its remarkable bilinearity property \( e(aP,Q) = e(P,aQ) = e(P,Q)^{a} \).</p>
+<hr>
+<table>
+<thead>
+<tr><th style="text-align:center">Alice - identity \( ID_a \)</th><th style="text-align:center">Server</th></tr>
+</thead>
+<tbody>
+<tr><td style="text-align:center">Generates random \( x&lt;q \)</td><td style="text-align:center"></td></tr>
+<tr><td style="text-align:center">\( A=H(ID_a) \)</td><td style="text-align:center"></td></tr>
+<tr><td style="text-align:center">\( U=x{A} \)</td><td style="text-align:center"></td></tr>
+<tr><td style="text-align:center">\( ID_a \), \( U~~ \)</td><td style="text-align:center"></td></tr>
+<tr><td style="text-align:center">\( y=H(U \) | \( T) \)</td><td style="text-align:center"></td></tr>
+<tr><td style="text-align:center">\( V=-(x+y){((s-\alpha)A+\alpha A)} \rightarrow \)</td><td style="text-align:center"></td></tr>
+<tr><td style="text-align:center"></td><td style="text-align:center">\( A=H(ID_a) \)</td></tr>
+<tr><td style="text-align:center"></td><td style="text-align:center">\( g=e(V,Q).e(U+yA,sQ) \)</td></tr>
+<tr><td style="text-align:center"></td><td style="text-align:center">if \( g \ne 1 \), reject the connection</td></tr>
+</tbody>
+</table>
+<figure>
+  <caption><strong>Figure 1.</strong> M-Pin 1-Pass</caption>
+</figure>
+---
+<h3><a class="anchor" aria-hidden="true" id="m-pin-2-pass"></a><a href="#m-pin-2-pass" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<p>As you can see below in Fig 2., M-Pin in the two pass operation operates in a challenge (from the Server) to client, who responds to challenge. This implementation obviates the any risk of Key Compromise Impersonation attack vector, at the cost of of a full roundtrip.</p>
+<hr>
+<table>
+<thead>
+<tr><th style="text-align:center">Alice - identity \( ID_a \)</th><th style="text-align:center">Server</th></tr>
+</thead>
+<tbody>
+<tr><td style="text-align:center">Generates random \( x&lt;q \)</td><td style="text-align:center">Generates random \( y&lt;q \)</td></tr>
+<tr><td style="text-align:center">\( A=H(ID_a) \)</td><td style="text-align:center"></td></tr>
+<tr><td style="text-align:center">\( U=x{A} \)</td><td style="text-align:center"></td></tr>
+<tr><td style="text-align:center">\( ID_a$, $U~~ \rightarrow  \)</td><td style="text-align:center"></td></tr>
+<tr><td style="text-align:center"></td><td style="text-align:center">\( \leftarrow y \)</td></tr>
+<tr><td style="text-align:center">\( V=-(x+y){((s-\alpha)A+\alpha A)} \rightarrow \)</td><td style="text-align:center"></td></tr>
+<tr><td style="text-align:center"></td><td style="text-align:center">\( A=H(ID_a) \)</td></tr>
+<tr><td style="text-align:center"></td><td style="text-align:center">\( g=e(V,Q).e(U+yA,sQ) \)</td></tr>
+<tr><td style="text-align:center"></td><td style="text-align:center">if \( g \ne 1 \), reject the connection</td></tr>
+</tbody>
+</table>
+<figure>
+  <caption><strong>Figure 2.</strong> M-Pin 2-Pass</caption>
+</figure>
+---
+<h3><a class="anchor" aria-hidden="true" id="m-pin-full"></a><a href="#m-pin-full" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<p>This more elaborate protocol not only replaces Username/Password, but replaces the functionality of digital certificates being utilised to drive key agreement for TLS or VPN protocols as well.</p>
+<p>Our starting point is the M-Pin protocol as described above.</p>
+<p>The idea is to run it first (to authenticate the client to the server), and then proceed to authenticate the server to the client via an authenticated key exchange, which also establishes the agreed key of 128 bits.</p>
+<p>The first thing to note is that both the client and the server can already calculate a mutual authenticated encryption key!</p>
+<p>This protocol requires another general hash function \( H_g(.) \) which serializes, and hashes its input to a 256-bit value. Both sides can then extract a key from this value \( K \).</p>
+<p>It is left as a simple exercise for the reader to confirm that both client and server end up with the same key.</p>
+<p>Note that since the first part of the protocol is just the original M-Pin protocol, all of its features and extensions still apply.</p>
+<hr>
+<table>
+<thead>
+<tr><th style="text-align:center">Alice - identity \( ID_a \)</th><th style="text-align:center">Server</th></tr>
+</thead>
+<tbody>
+<tr><td style="text-align:center">Generates random \( x&lt;q \)</td><td style="text-align:center">Generates random \( y&lt;q \)</td></tr>
+<tr><td style="text-align:center">\( A=H(ID_a) \)</td><td style="text-align:center"></td></tr>
+<tr><td style="text-align:center">\( U=x{A} \)</td><td style="text-align:center"></td></tr>
+<tr><td style="text-align:center">\( ID_a$, $U~~ \rightarrow  \)</td><td style="text-align:center"></td></tr>
+<tr><td style="text-align:center"></td><td style="text-align:center">\( \leftarrow y \)</td></tr>
+<tr><td style="text-align:center">\( V=-(x+y){((s-\alpha)A+\alpha A)} \rightarrow \)</td><td style="text-align:center"></td></tr>
+<tr><td style="text-align:center"></td><td style="text-align:center">\( A=H(ID_a) \)</td></tr>
+<tr><td style="text-align:center"></td><td style="text-align:center">\( g=e(V,Q).e(U+yA,sQ) \)</td></tr>
+<tr><td style="text-align:center"></td><td style="text-align:center">if \( g \ne 1 \), reject the connection</td></tr>
+<tr><td style="text-align:center">\( R=r{A} \rightarrow \)</td><td style="text-align:center">\( \leftarrow W=w{A} \)</td></tr>
+<tr><td style="text-align:center">\( h=H(A,U,y,V,R,W) \)</td><td style="text-align:center">\( h=H(A,U,y,V,R,W) \)</td></tr>
+<tr><td style="text-align:center">\( K=H_g((g_1.{g_2}^\alpha)^{r+h} \ \) | \( x{W}) \)</td><td style="text-align:center">\( K=H_g(e(R+hA,sQ) \ \) | \( w{U}) \)</td></tr>
+</tbody>
+</table>
+<figure>
+  <caption><strong>Figure 3.</strong> M-Pin FULL</caption>
+</figure>
+<hr>
+<p>Note that the transmission of \( R \) from the client to the server can be done at the same time as \( V \) is transmitted, and the transmission of \( W \) from the server to the client can be done at the same time as  \( y \) is transmitted, to avoid introducing any extra flows into the protocol.</p>
+<h3><a class="anchor" aria-hidden="true" id="chow-choo-protocol"></a><a href="#chow-choo-protocol" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
+<p>As initially proposed, the Chow-Choo Protocol was based on a type-1 pairing. Note that in the Milagro framework, the Chow-Choo Protocol is made to work in a Type-3 setting.</p>
+<p>Pairings are usually written as functions of the form \( g=e(A,B) \), where \( A \in G_1 \), \( g \in G_T \), and for a Type-1 pairing \( B \in G_1 \) and for Type-3 \( B \in G_2 \).</p>
+<p>Consider now an application of this protocol to an imagined Internet of Things (IoT) setting.</p>
+<p>Each 'Thing' is issued with a serial number and its own Chow-Choo key (which can double as an M-Pin Key) based on that serial number as an identity.</p>
+<p>These keys may be embedded at the time of manufacture, by the manufacturer acting as a naturally trusted authority.</p>
+<p>When a Thing needs to communicate with another Thing, an action which requires knowing only the identity of the other, both parties can activate the Chow-Choo Protocol to calculate the same key to encrypt their communication.</p>
+<p>For both sending and receiving, Alice is issued with \( sA_1 \) and \( sA_2 \), where \( A_1=H_1 \) and \( A_2=H_2 \) both in the \( ID = Alice \).</p>
+<p>Similarly Bob is issued with \( sB_1 \) and \( sB_2 \). Now if Alice initiates and Bob responds, Alice calculates the key as \( e(sA_1,B_2) \) and Bob can calculate the same key as \( e(A_1,sB_2) \), where by convention the initiator uses their <em>sender</em> key and the responder uses their <em>receiver</em> key.</p>
+<p>One thing we can exploit -- in any communication context there is an initiator and a responder, or a <em>sender</em> and <em>receiver</em>, if you will.</p>
+<p>In the above example, Alice and Bob both were issued <em>sender</em> and <em>receiver</em> keys respectively, as this describes where they can appear in the pairing.</p>
+<p>An obvious advantage is to issue each Thing with two keys, one in \( G_1 \) and the other in \( G_2 \), <strong>if</strong> the Thing is approved to send and receive.</p>
+<p>However, the capability exists to cryptographically bound Things to only receiving information, or only sending information, based upon whether or not a Thing has been issued a sender and / or a receiver key.</p>
+<p>This capability is exploited in the Milagro framework to enable peer to peer authenticated key agreement.</p>
+<hr>
+<!--- This is the Chow Choo protocol in a Mathml table / frame because redering in Math LaTex equations exposes a bug in MathJax. It's just one equation that has this bug!  --->
+<figure>
+    <html>
+    <math xmlns="http://www.w3.org/1998/Math/MathML" display='block'>
+            <mtable frame="solid" rowlines="solid" rowalign="center" mathbackground="white">
+            <mstyle mathsize='.85em'>
+        <mtr>
+            <mtd>
+                <mspace width="0.1em" />
+            </mtd>
+            <mtd columnalign="left">
+                <mtable class="m-matrix">
+                    <mtr>
+                        <mtd>
+                            <mtext>SENDER</mtext>
+                        </mtd>
+                        <mtd>
+                            <mtext>RECEIVER</mtext>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                            <mi>x</mi>
+                            <mo>&#x02208;</mo>
+                            <msubsup>
+                                <mi>&#x02124;</mi>
+                                <mi>q</mi>
+                                <mo>*</mo>
+                            </msubsup>
+                        </mtd>
+                        <mtd>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                            <mi>A</mi>
+                            <mi>G</mi>
+                            <mn>1</mn>
+                            <mo>:</mo>
+                            <mo>=</mo>
+                            <msub>
+                                <mi>H</mi>
+                                <mn>1</mn>
+                            </msub>
+                            <mrow>
+                                <mo form="prefix">(</mo>
+                                <mi>I</mi>
+                                <mo>&#x02146;</mo>
+                                <mi>A</mi>
+                                <mo form="postfix">)</mo>
+                            </mrow>
+                        </mtd>
+                        <mtd>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                            <mi>P</mi>
+                            <mi>a</mi>
+                            <msub>
+                                <mi>G</mi>
+                                <mn>1</mn>
+                            </msub>
+                            <mo>:</mo>
+                            <mo>=</mo>
+                            <mi>x</mi>
+                            <mo>&#x022C5;</mo>
+                            <mi>A</mi>
+                            <msub>
+                                <mi>G</mi>
+                                <mn>1</mn>
+                            </msub>
+                        </mtd>
+                        <mtd>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                            <mi>I</mi>
+                            <mo>&#x02146;</mo>
+                            <mi>A</mi>
+                            <mo>,</mo>
+                            <mi>P</mi>
+                            <mi>a</mi>
+                            <msub>
+                                <mi>G</mi>
+                                <mn>1</mn>
+                            </msub>
+                            <mo>&#x027F6;</mo>
+                        </mtd>
+                        <mtd>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                        </mtd>
+                        <mtd>
+                            <mi>y</mi>
+                            <mo>,</mo>
+                            <mi>w</mi>
+                            <mo>&#x02208;</mo>
+                            <msubsup>
+                                <mi>&#x02124;</mi>
+                                <mi>q</mi>
+                                <mo>*</mo>
+                            </msubsup>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                        </mtd>
+                        <mtd>
+                            <mi>A</mi>
+                            <msub>
+                                <mi>G</mi>
+                                <mn>1</mn>
+                            </msub>
+                            <mo>:</mo>
+                            <mo>=</mo>
+                            <msub>
+                                <mi>H</mi>
+                                <mn>1</mn>
+                            </msub>
+                            <mrow>
+                                <mo form="prefix">(</mo>
+                                <mi>I</mi>
+                                <mo>&#x02146;</mo>
+                                <mi>A</mi>
+                                <mo form="postfix">)</mo>
+                            </mrow>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                        </mtd>
+                        <mtd>
+                            <mi>B</mi>
+                            <msub>
+                                <mi>G</mi>
+                                <mn>2</mn>
+                            </msub>
+                            <mo>:</mo>
+                            <mo>=</mo>
+                            <msub>
+                                <mi>H</mi>
+                                <mn>2</mn>
+                            </msub>
+                            <mrow>
+                                <mo form="prefix">(</mo>
+                                <mi>I</mi>
+                                <mo>&#x02146;</mo>
+                                <mi>B</mi>
+                                <mo form="postfix">)</mo>
+                            </mrow>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                        </mtd>
+                        <mtd>
+                            <mi>P</mi>
+                            <mi>b</mi>
+                            <msub>
+                                <mi>G</mi>
+                                <mn>2</mn>
+                            </msub>
+                            <mo>:</mo>
+                            <mo>=</mo>
+                            <mi>y</mi>
+                            <mo>&#x022C5;</mo>
+                            <mi>B</mi>
+                            <msub>
+                                <mi>G</mi>
+                                <mn>2</mn>
+                            </msub>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                        </mtd>
+                        <mtd>
+                            <mi>P</mi>
+                            <mi>g</mi>
+                            <msub>
+                                <mi>G</mi>
+                                <mn>1</mn>
+                            </msub>
+                            <mo>:</mo>
+                            <mo>=</mo>
+                            <mi>w</mi>
+                            <mo>&#x022C5;</mo>
+                            <mi>A</mi>
+                            <msub>
+                                <mi>G</mi>
+                                <mn>1</mn>
+                            </msub>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                        </mtd>
+                        <mtd>
+                            <mtext>pia</mtext>
+                            <mo>:</mo>
+                            <mo>=</mo>
+                            <msub>
+                                <mi>H</mi>
+                                <mi>q</mi>
+                            </msub>
+                            <mrow>
+                                <mo form="prefix">(</mo>
+                                <mi>P</mi>
+                                <mi>a</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>1</mn>
+                                </msub>
+                                <mo>&#x02016;</mo>
+                                <mi>P</mi>
+                                <mi>b</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>2</mn>
+                                </msub>
+                                <mo>&#x02016;</mo>
+                                <mi>P</mi>
+                                <mi>g</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>1</mn>
+                                </msub>
+                                <mo>&#x02016;</mo>
+                                <mi>I</mi>
+                                <mo>&#x02146;</mo>
+                                <mi>B</mi>
+                                <mo form="postfix">)</mo>
+                            </mrow>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                        </mtd>
+                        <mtd>
+                            <mtext>pib</mtext>
+                            <mo>:</mo>
+                            <mo>=</mo>
+                            <msub>
+                                <mi>H</mi>
+                                <mi>q</mi>
+                            </msub>
+                            <mrow>
+                                <mo form="prefix">(</mo>
+                                <mi>P</mi>
+                                <mi>b</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>2</mn>
+                                </msub>
+                                <mo>&#x02016;</mo>
+                                <mi>P</mi>
+                                <mi>a</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>1</mn>
+                                </msub>
+                                <mo>&#x02016;</mo>
+                                <mi>P</mi>
+                                <mi>g</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>1</mn>
+                                </msub>
+                                <mo>&#x02016;</mo>
+                                <mi>I</mi>
+                                <mo>&#x02146;</mo>
+                                <mi>A</mi>
+                                <mo form="postfix">)</mo>
+                            </mrow>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                        </mtd>
+                        <mtd>
+                            <mi>k</mi>
+                            <mo>:</mo>
+                            <mo>=</mo>
+                            <mi>e</mi>
+                            <mrow>
+                                <mo form="prefix">(</mo>
+                                <mtext>pia</mtext>
+                                <mo>&#x022C5;</mo>
+                                <mi>A</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>1</mn>
+                                </msub>
+                                <mo>+</mo>
+                                <mi>P</mi>
+                                <mi>a</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>1</mn>
+                                </msub>
+                                <mo>,</mo>
+                                <mo form="prefix">(</mo>
+                                <mi>y</mi>
+                                <mo>+</mo>
+                                <mtext>pib</mtext>
+                                <mo form="postfix">)</mo>
+                                <mo>&#x022EF;</mo>
+                                <mo>&#x022C5;</mo>
+                                <mi>B</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>2</mn>
+                                </msub>
+                                <mo form="postfix">)</mo>
+                            </mrow>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                        </mtd>
+                        <mtd>
+                            <mi>K</mi>
+                            <mo>:</mo>
+                            <mo>=</mo>
+                            <mi>H</mi>
+                            <mrow>
+                                <mo form="prefix">(</mo>
+                                <mi>k</mi>
+                                <mo>,</mo>
+                                <mi>w</mi>
+                                <mo>&#x022C5;</mo>
+                                <mi>P</mi>
+                                <mi>a</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>1</mn>
+                                </msub>
+                                <mo form="postfix">)</mo>
+                            </mrow>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                        </mtd>
+                        <mtd>
+                            <mo>&#x027F5;</mo>
+                            <mi>I</mi>
+                            <mo>&#x02146;</mo>
+                            <mi>B</mi>
+                            <mo>,</mo>
+                            <mi>P</mi>
+                            <mi>g</mi>
+                            <msub>
+                                <mi>G</mi>
+                                <mn>1</mn>
+                            </msub>
+                            <mo>,</mo>
+                            <mi>P</mi>
+                            <mi>b</mi>
+                            <msub>
+                                <mi>G</mi>
+                                <mn>2</mn>
+                            </msub>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                            <mi>B</mi>
+                            <msub>
+                                <mi>G</mi>
+                                <mn>2</mn>
+                            </msub>
+                            <mo>:</mo>
+                            <mo>=</mo>
+                            <msub>
+                                <mi>H</mi>
+                                <mn>2</mn>
+                            </msub>
+                            <mrow>
+                                <mo form="prefix">(</mo>
+                                <mi>I</mi>
+                                <mo>&#x02146;</mo>
+                                <mi>B</mi>
+                                <mo form="postfix">)</mo>
+                            </mrow>
+                        </mtd>
+                        <mtd>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                            <mtext>pia</mtext>
+                            <mo>:</mo>
+                            <mo>=</mo>
+                            <msub>
+                                <mi>H</mi>
+                                <mi>q</mi>
+                            </msub>
+                            <mrow>
+                                <mo form="prefix">(</mo>
+                                <mi>P</mi>
+                                <mi>a</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>1</mn>
+                                </msub>
+                                <mo>&#x02016;</mo>
+                                <mi>P</mi>
+                                <mi>b</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>2</mn>
+                                </msub>
+                                <mo>&#x02016;</mo>
+                                <mi>P</mi>
+                                <mi>g</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>1</mn>
+                                </msub>
+                                <mo>&#x02016;</mo>
+                                <mi>I</mi>
+                                <mo>&#x02146;</mo>
+                                <mi>B</mi>
+                                <mo form="postfix">)</mo>
+                            </mrow>
+                        </mtd>
+                        <mtd>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                            <mtext>pib</mtext>
+                            <mo>:</mo>
+                            <mo>=</mo>
+                            <msub>
+                                <mi>H</mi>
+                                <mi>q</mi>
+                            </msub>
+                            <mrow>
+                                <mo form="prefix">(</mo>
+                                <mi>P</mi>
+                                <mi>b</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>2</mn>
+                                </msub>
+                                <mo>&#x02016;</mo>
+                                <mi>P</mi>
+                                <mi>a</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>1</mn>
+                                </msub>
+                                <mo>&#x02016;</mo>
+                                <mi>P</mi>
+                                <mi>g</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>1</mn>
+                                </msub>
+                                <mo>&#x02016;</mo>
+                                <mi>I</mi>
+                                <mo>&#x02146;</mo>
+                                <mi>A</mi>
+                                <mo form="postfix">)</mo>
+                            </mrow>
+                        </mtd>
+                        <mtd>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                            <mi>k</mi>
+                            <mo>:</mo>
+                            <mo>=</mo>
+                            <mi>e</mi>
+                            <mrow>
+                                <mo form="prefix">(</mo>
+                                <mo form="prefix">(</mo>
+                                <mi>x</mi>
+                                <mo>+</mo>
+                                <mi>p</mi>
+                                <mi>i</mi>
+                                <mi>a</mi>
+                                <mo form="postfix">)</mo>
+                                <mo>&#x022EF;</mo>
+                                <mo>&#x022C5;</mo>
+                                <mi>A</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>1</mn>
+                                </msub>
+                                <mo>,</mo>
+                                <mtext>pib</mtext>
+                                <mo>&#x022C5;</mo>
+                                <mi>B</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>2</mn>
+                                </msub>
+                                <mo>+</mo>
+                                <mi>P</mi>
+                                <mi>b</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>2</mn>
+                                </msub>
+                                <mo form="postfix">)</mo>
+                            </mrow>
+                        </mtd>
+                        <mtd>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                            <mi>K</mi>
+                            <mo>:</mo>
+                            <mo>=</mo>
+                            <mi>H</mi>
+                            <mrow>
+                                <mo form="prefix">(</mo>
+                                <mi>k</mi>
+                                <mo>,</mo>
+                                <mi>x</mi>
+                                <mo>&#x022C5;</mo>
+                                <mi>P</mi>
+                                <mi>g</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>1</mn>
+                                </msub>
+                                <mo form="postfix">)</mo>
+                            </mrow>
+                        </mtd>
+                        <mtd>
+                        </mtd>
+                    </mtr>
+                </mtable>
+            </mtd>
+        </mtr>
+    </mtable>
+    </math>
+    </html>
+</figure>
+<figure>
+  <caption><strong>Figure 4.</strong> Chow-Choo Protocol</caption>
+</figure>
+<hr>
+<p><strong>Notes on Chow-Choo Protocol:</strong></p>
+<ul>
+<li>\( G_1 \): a \( r \)-order cyclic subgroup of \( E(F_p) \).</li>
+<li>\( G_2 \): a subgroup of \( E(F_{p^k}) \), where \( k \) is the embedding degree of the Curve.</li>
+<li>\( H1 \): Maps string value to a point on the curve in \( G_1 \).</li>
+<li>\( H2 \): Maps string value to a point on the curve in \( G_2 \).</li>
+<li>\( Hq \): Hashes inputs to an integer modulo the curve order \( q \).When run in the simple SIDH</li>
+<li>H(): Hash function.</li>
+<li>\( || \): denotes the concatenation of messages.</li>
+</ul>
+<hr>
+<h3><a class="anchor" aria-hidden="true" id="secret-revocation"></a><a href="#secret-revocation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
+<p>We introduce Time Permits to handle the revocation issue. Normally in Identity-Based Encryption the problem of client revocation is solved by date-stamping identities so that the private key issued for an identity becomes useless once the time period expires. Now a new private key must be issued, and we will simply not issue one to a revoked client.</p>
+<p>Milagro achieves a much more immediate revocation capability through the use of Time Permits. The D-TA that is controlled by the application owner is envisioned to be the controlling D-TA to issue Time Permits at the point where a client needs to authenticate to a server, or create an authenticated key agreement between client and server or peer to peer.</p>
+<p>The idea is that the server includes an explicitly described time slot in its construction of Alice's hashed identity. Unless Alice has a corresponding &quot;Time permit&quot; for the same time slot, she cannot complete the protocol.</p>
+<p>In the protocol above we instead calculate \( H(ID_a) + H_T(T_i|ID_a) \) on both sides of the protocol where \( T_i \) is a textual description of the \( i \)-th time slot and \( H_T(.) \) is a hash function distinct from \( H(.) \).</p>
+<p>For the protocol to work correctly Alice must be issued by the Trusted Authority with a permit \( s.H_T(T_i|ID_a) \) which gets added to her combined PIN-plus-token secret \( s.H(ID_a) \).</p>
+<p>Observe that the permit is of no use to any other party, and hence can be issued publicly, uploaded to a public cloud data store (AWS S3), or delivered via the server directly.</p>
+<p>A proof of security for this idea in the context of Boneh and Franklin IBE can be found in Tseng<sup class="footnote-ref"><a href="#fn6" id="fnref6">[6]</a></sup> et al.</p>
+<hr>
+<h3><a class="anchor" aria-hidden="true" id="bls-subgroup-multi-signatures"></a><a href="#bls-subgroup-multi-signatures" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12  [...]
+<p>Dan Boneh, Ben Lynn and Hovav Schacham introduced their paper entitled &quot;Short Signatures from the Weil Pairing&quot; in 2001<sup class="footnote-ref"><a href="#fn4" id="fnref4:1">[4]</a></sup>. The paper described a short signature scheme based on the computational Diffie-Hellman assumption on certain elliptic and hyper-elliptic curves.</p>
+<p>In a simple instantiation, given a secret key \( sk \), a public key \( p k=g^{S k} \), a message \( m \), a hashing-into-the-curve function \( H \), and a bilinear pairing \( e \):</p>
+<ul>
+<li>Key Generation: \( sk \) is a random integer over the field, \( p k=g^{S k} \)</li>
+<li>Signature: \( S=H(m)^{s k} \)</li>
+<li>Verify: \( e(H(m), p k)=e(S, g) \)</li>
+</ul>
+<p>Biliniarity is on display as the signature</p>
+<p>$$ \begin{array}{c}{e(H(m), p k)=e\left(H(m), g^{s k}\right)=e(H(m), g)^{s k}=} \ {=e\left(H(m)^{s k}, g\right)=e(S, g)}\end{array} $$</p>
+<p>but is also unique and deterministic, something missing from ECDSA.</p>
+<p>In June of 2018 Dan Boneh, Manu Drijvers and Gregory Neven released research that constructs the first practical, short accountable-subgroup multi-signature (ASM) scheme based on BLS signatures<sup class="footnote-ref"><a href="#fn7" id="fnref7">[7]</a></sup>.</p>
+<p>An ASM scheme enables any subset \( S \) of a set of \( n \) parties to sign a message \( m \) so that a valid signature discloses which subset generated the signature (hence the subset \( S \) is accountable for signing \( m \)).</p>
+<p>In addition to the ASM scheme, Milagro exploits a unique property of BLS signatures: Signing Keys can be split using Shamir's Secret Sharing<sup class="footnote-ref"><a href="#fn8" id="fnref8">[8]</a></sup> in which the 'shares' of the keys, when distributed to signers, themselves become signing keys. By using a 'key splitter' and 'signature aggregator' role who also performs the Shamir Secret Sharing (SSS) dealer function, several benefits emerge.</p>
+<p>Thresholds can be set on the distribution of key shares just as in a normal SSS routine. So once the shares of the original signing key are distributed, the original signing key can be securely deleted, and is never re-created again. Instead, signatures derived from the shares of the original signing key are created. Again, the properties of BLS enable these shares of signature keys to be themselves used a signature keys. The object of the exercise is for the signature aggregator, who [...]
+<p>In other words, if the aggregator takes m-of-n of these signature shares, and perform the same polynomial interpolation as one would usually do with the secret shares, you’ll recover a complete signature which is identical to what would have been created if the original complete private key would have been used.</p>
+<p>In this context, signing is a single round protocol and is non-interactive.</p>
+<hr>
+<h3><a class="anchor" aria-hidden="true" id="supersingular-isogeny-key-encapsulation-sike"></a><a href="#supersingular-isogeny-key-encapsulation-sike" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v [...]
+<p>A key encapsulation mechanism (KEM) is a set of three algorithms.</p>
+<ul>
+<li>key generation (KeyGen)</li>
+<li>encapsulation (Encaps)</li>
+<li>decapsulation (Decaps)</li>
+</ul>
+<p>and a defined key space, where</p>
+<ul>
+<li>KeyGen(): returns a public and a secret key \( (pk, sk) \).</li>
+<li>Encaps\( (pk) \): takes pk as input and outputs ciphertext \( c \) and a key \( K \) from the key space.</li>
+<li>Decaps\( (sk, c) \): takes \( sk \) and \( c \) as input, and returns a key \( K \) or ERROR. \( K \) is called the session key.</li>
+</ul>
+<p>SIKE uses Hofheinz transformation on SIDH to achieve CCA security. Let \( p=2^{e_{A}} 3^{e_{3}}-1 \), and let \( E \) be a supersingular elliptic curve defined over a field of characteristic \( p \). \( E \) can also be defined over \( \mathbb{F}_{p^{2}} \) up to its isomorphism. An isogeny \( \phi : E \rightarrow E^{\prime} \) is a non-constant map from \( E \) to \( E^{\prime} \) which translates the identity into the identity.</p>
+<p>An isogeny map is defined by its degree and kernel. The degree of an isogeny is its degree as morphism. An isogeny with degree \( \ell \) map is called \( \ell \)-isogeny. Let \( G \) be a subgroup of points on \( E \) which contains \( \ell \) + 1 cyclic subgroups of order \( \ell \). This subgroup is the torsion group \( E[\ell] \) and each element of this group is corresponding to an isogeny of degree \( \ell \); accordingly, an isogeny also can be identified by \( G \), i.e., the  [...]
+<p>This section provides a brief presentation of the SIKE protocol. We refer readers to <sup class="footnote-ref"><a href="#fn9" id="fnref9">[9]</a></sup> and <sup class="footnote-ref"><a href="#fn5" id="fnref5:1">[5]</a></sup> for more detailed explanation of the supersignular isogeny problem and the base key-exchange protocol which the SIKE is constructed upon.</p>
+<hr>
+
+    <div class="admonition admonition-note">
+      <div class="admonition-heading">
+        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V [...]
+      </div>
+      <div class="admonition-content">
+    <p>Submit a pull request on the development branch of <a href="https://github.com/apache/incubator-milagro">Milagro Website Repo</a>.</p>
+</div></div><!--
+Supported admonition types are: caution, note, important, tip, warning.
+--><hr class="footnotes-sep">
+<section class="footnotes">
+<ol class="footnotes-list">
+<li id="fn1"  class="footnote-item"><p><a href="https://eprint.iacr.org/2002/164">M-Pin protocol</a> <a href="#fnref1" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn2"  class="footnote-item"><p><a href="https://eprint.iacr.org/2015/576">The Carnac protocol -- or how to read the contents of a sealed envelope</a> <a href="#fnref2" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn3"  class="footnote-item"><p><a href="https://eprint.iacr.org/2007/018.pdf">Strongly-Secure Identity-based Key Agreement and Anonymous Extension</a> <a href="#fnref3" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn4"  class="footnote-item"><p><a href="https://www.iacr.org/archive/asiacrypt2001/22480516.pdf">Short Signatures from the Weil Pairing</a> <a href="#fnref4" class="footnote-backref">↩</a> <a href="#fnref4:1" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn5"  class="footnote-item"><p><a href="https://sike.org/">Supersingular isogeny key encapsulation - NIST Submission</a> <a href="#fnref5" class="footnote-backref">↩</a> <a href="#fnref5:1" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn6"  class="footnote-item"><p><a href="https://reader.elsevier.com/reader/sd/pii/S2213020915000592?token=5C2E08C17803B9549FB79F3A91A1ED2382360D3E840087C8C065BD06EFCABB55C4A5A300566388A2920786DCC63E631E">A brief review of revocable ID-based public key cryptosystem</a> <a href="#fnref6" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn7"  class="footnote-item"><p><a href="https://eprint.iacr.org/2018/483">Compact Multi-Signatures for Smaller Blockchains</a> <a href="#fnref7" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn8"  class="footnote-item"><p><a href="https://cs.jhu.edu/~sdoshi/crypto/papers/shamirturing.pdf">How to Share a Secret</a> <a href="#fnref8" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn9"  class="footnote-item"><p><a href="https://eprint.iacr.org/2011/506.pdf">Towards quantum-resistant cryptosystems from supersingular elliptic curve isogenies</a> <a href="#fnref9" class="footnote-backref">↩</a></p>
+</li>
+</ol>
+</section>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/milagro-crypto"><span class="arrow-prev">← </span><span>Milagro Crypto</span></a><a class="docs-next button" href="/docs/milagro-design"><span>Milagro Design</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#m-pin-protocol-introduction"> [...]
\ No newline at end of file
diff --git a/docs/milagro-protocols/index.html b/docs/milagro-protocols/index.html
new file mode 100644
index 0000000..cccd8d7
--- /dev/null
+++ b/docs/milagro-protocols/index.html
@@ -0,0 +1,864 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Milagro Protocols · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;The Apache Milagro crypto libraries contain an (almost) overwhelming choice of algorithms and cryptographic primitives for robust and rapid application development. This section focuses spe [...]
+"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Milagro Protocols · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;p&gt;The Apache Milagro crypto libraries contain an (almost) overwhelming choice of algorithms and cryptographic primitives for robust and rapid application development. This section focuses specifically on a few protoc [...]
+"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type=" [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Milagro Protocols</h1></header><article><div><span><p>The Apache Milagro crypto libraries contain an (almost) overwhelming choice of algorithms and cryptographic primitives for robust and rapid application development. This section focuses specifically on a few protocols that are used extensively as key building blocks within the  [...]
+<h2><a class="anchor" aria-hidden="true" id="m-pin-protocol-introduction"></a><a href="#m-pin-protocol-introduction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 1 [...]
+<p>The genesis of the M-Pin Protocol was first put forward in a research paper by <a href="https://scholar.google.com/citations?user=GsM-aeEAAAAJ&amp;hl=en">Dr. Michael Scott</a> in 2002<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>.</p>
+<p>The M-Pin Protocol has been iterated on several times over the years since, to develop three distinct modes, which will be explored in the following sections.</p>
+<p>As noted in <a href="milagro-crypto.html">Milagro Crypto</a>, the M-Pin Protocol is of these classifications and exploits the features of:</p>
+<ul>
+<li>Elliptic Curve Cryptography</li>
+<li>Pairing Based Cryptography</li>
+<li>Identity Based Encryption</li>
+<li>Zero Knowledge Proof</li>
+</ul>
+<p>Because of the characteristics that M-Pin inherits from the four techniques above, the M-Pin Protocol and its variants are able to deliver:</p>
+<ul>
+<li>Multi-factor authentication (MFA) using Zero Knowledge Proof</li>
+<li>Authenticated Key Agreement</li>
+<li>Distribution, or splitting, of Trust Authorities</li>
+<li><a href="https://en.wikipedia.org/wiki/Subliminal_channel">Subliminal Channel Communication</a><sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup></li>
+</ul>
+<p>The three modes of operation of the M-Pin Protocol are as follows:</p>
+<ul>
+<li><strong>M-Pin 1-pass</strong>: Client to server authentication via digital signature, this mode implements a <em>non-interactive</em> zero knowledge proof and is resistant to <a href="https://en.wikipedia.org/wiki/Man-in-the-middle_attack">MITM (man in the middle)</a> attacks.</li>
+<li><strong>M-Pin 2-pass</strong>: Client to server authentication via a <em>interactive</em> zero knowledge proof, resistant to <a href="https://en.wikipedia.org/wiki/Man-in-the-middle_attack">MITM</a> and <a href="https://kcitls.org">KCI (Key Compromise Impersonation)</a> attacks.</li>
+<li><strong>M-Pin FULL</strong>: Mutual client to server authentication via a <em>interactive</em> zero knowledge proof, resistant to MITM and KCI attacks and able to drive an Authenticated <a href="https://en.wikipedia.org/wiki/Key-agreement_protocol">Key Agreement</a> between client and server, resulting in 128 bit shared secret key.</li>
+</ul>
+<p>Note that the M-Pin Full Authenticated Key Agreement possesses the quality of <a href="https://en.wikipedia.org/wiki/Forward_secrecy">perfect forward secrecy (PFS)</a>, meaning, even if the client and server long term keys are compromised, the past session keys (used to encrypt TLS traffic, for example) are not compromised.</p>
+<h2><a class="anchor" aria-hidden="true" id="chow-choo-protocol-introduction"></a><a href="#chow-choo-protocol-introduction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 [...]
+<p>The Chow-Choo Protocol was developed by Sherman S.M. Chow and Kim-Kwang Raymond Choo and published in 2007 via a research paper titled Strongly-Secure Identity-based Key Agreement<sup class="footnote-ref"><a href="#fn3" id="fnref3">[3]</a></sup>.  The Chow-Choo Protocol can be technically described as an identity-based key agreement protocol.</p>
+<p>The Chow-Choo Protocol is of these classifications and exploits the features of:</p>
+<ul>
+<li>Elliptic Curve Cryptography</li>
+<li>Pairing Based Cryptography</li>
+<li>Identity Based Encryption</li>
+</ul>
+<p>Because of the characteristics that Chow-Choo inherits from the three techniques above, the Chow-Choo Protocol can deliver:</p>
+<ul>
+<li>Authenticated Key Agreement</li>
+<li>Distribution, or splitting, of Trust Authorities</li>
+</ul>
+<p>Note that the Chow-Choo Protocol is not a Zero Knowledge Proof protocol.</p>
+<h2><a class="anchor" aria-hidden="true" id="bls-signatures-introduction"></a><a href="#bls-signatures-introduction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 1 [...]
+<p>The BLS signature (Boneh-Lynn-Schacham) scheme<sup class="footnote-ref"><a href="#fn4" id="fnref4">[4]</a></sup> uses a bilinear pairing for verification, and signatures are elements of an elliptic curve group. Working in an elliptic curve group provides some defense against index calculus attacks (with the caveat that such attacks are still possible in the target group \( G_{T} \) of the pairing), allowing shorter signatures than other systems for similar levels of security.</p>
+<p>BLS signatures have become the subject of much work as they are seen as being a possible way forward to solve privacy issues within cryptocurrencies through a process of signature aggregation. Apache Milagro uses signature aggregation and key splitting, and further aggregation of signatures from those split keys, as a key component of the Milagro Custody Node digital asset safekeeping protocol.</p>
+<h2><a class="anchor" aria-hidden="true" id="supersingular-isogeny-key-encapsulation-introduction"></a><a href="#supersingular-isogeny-key-encapsulation-introduction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S [...]
+<p>Supersingular isogeny Diffie–Hellman key exchange (SIDH) and the key encapsulation protocol, SIKE<sup class="footnote-ref"><a href="#fn5" id="fnref5">[5]</a></sup> (derived from SIDH), are post-quantum cryptographic algorithms used to establish a secret key between two parties over an otherwise insecure communications channel. SIKE boasts one of the smallest key sizes of all post-quantum key encapsulations; with compression, SIKE uses 2688-bit public keys at a 128-bit quantum security [...]
+<p>SIKE also distinguishes itself from similar systems such as NTRU and Ring-LWE by supporting perfect forward secrecy, a property that prevents compromised long-term keys from compromising the confidentiality of old communication sessions. These properties make SIKE a natural candidate to replace Diffie–Hellman (DHE and elliptic curve Diffie–Hellman (ECDHE), which are widely used in Internet communication.</p>
+<p>Since it is the only post-quantum cryptography protocol which is constructed on elliptic curves, hybrid cryptography protocols can be derived from SIKE and classical elliptic curve cryptography (ECC) to make the transition towards post-quantum cryptography more convenient and practical.</p>
+<p>Milagro Custody Node implements SIKE for key encapsulation within Milagro's encrypted envelope format.</p>
+<hr>
+<table>
+<thead>
+<tr><th>Protocols</th><th>Use Cases</th></tr>
+</thead>
+<tbody>
+<tr><td>M-Pin 1-Pass</td><td>Digital signature authentication in battery or bandwidth constrained environments such as IoT devices, embedded applications and mobile apps. <br>This should be considered the default implementation for client to server authentication suitable for almost all use cases.</td></tr>
+<tr><td>M-Pin 1-Pass + <br>M-Pin 2-Pass</td><td>Digital signature and client to server authentication in smartphones apps, desktop browsers and software applications.</td></tr>
+<tr><td>M-Pin 2-Pass</td><td>Client to server authentication in smartphone apps, desktop browsers and software applications.</td></tr>
+<tr><td>M-Pin FULL</td><td>Mutual client and server authentication with authenticated key agreement for use in smartphone apps, hardware and software applications. <br>Authenticated Key Agreement with PFS can be used as the basis for TLS sessions between clients and servers.</td></tr>
+<tr><td>Chow-Choo</td><td>Mutual peer to peer authentication with authenticated key agreement for use in smartphone apps, hardware and software applications. <br>Authenticated Key Agreement with PFS can be used as the basis for TLS sessions between clients and servers and peer to peer.</td></tr>
+<tr><td>BLS Signing + <br>Key Splitting + <br>Signature Aggregation</td><td>A simple approach for splitting keys and aggregating many BLS signatures (from the shares of keys acting as signing keys) on a common message. Public keys are not needed for verifying the multi-signature. <br>An important property of the construction is that the scheme is secure against a rogue public-key attack without requiring users to prove knowledge of their secret keys.</td></tr>
+<tr><td>SIKE (Key Encapsulation)</td><td>SIKE is a family of post-quantum key encapsulation mechanisms based on the Supersingular Isogeny Diffie-Hellman (SIDH) key exchange protocol. <br>The algorithms use arithmetic operations on elliptic curves defined over finite fields and compute maps, so-called isogenies, between such curves. <br>SIKE can also delivery perfect forward secrecy.</td></tr>
+</tbody>
+</table>
+<hr>
+<h2><a class="anchor" aria-hidden="true" id="protocols-in-depth"></a><a href="#protocols-in-depth" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
+<h3><a class="anchor" aria-hidden="true" id="m-pin-1-pass"></a><a href="#m-pin-1-pass" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<p>As opposed to Chow-Choo, which can be used in a client to server as well as a peer to peer setting, M-Pin is strictly a client-server protocol.</p>
+<p>To embellish the security of the client-server protocol, it is important that client and server secrets should be kept distinct.</p>
+<p>A simple way to do this is to exploit the structure of a Type-3 pairing and put client secrets in \( G_1 \) and the server secret in \( G_2 \) as previously noted in the preceding section.</p>
+<p>For a Type-3 pairing there is assumed to be no computable isomorphism between these groups, even though both are of the same order.</p>
+<p>In the original implementation, the client was supplied with a challenge by the server as part of the second step within the protocol, after the first step whereby the client announced her identity to the server.</p>
+<p>In a later proposal, it was realised that an M-Pin 1-Pass Protocol could be obtained if the client itself derived the challenge as \( y \) as \( y=H(U|T) \) where \( T \) is a time-stamp transmitted by the Client along her claimed identity, \( U \) and \( V \).</p>
+<p>The protocol could then be reduced in an obvious way to a secure 1-pass protocol. However, this assumes that the Server checks the accuracy of the time-stamp before completing the protocol.</p>
+<p>This all works thanks to the pairing function \( e(.,.) \) and its remarkable bilinearity property \( e(aP,Q) = e(P,aQ) = e(P,Q)^{a} \).</p>
+<hr>
+<table>
+<thead>
+<tr><th style="text-align:center">Alice - identity \( ID_a \)</th><th style="text-align:center">Server</th></tr>
+</thead>
+<tbody>
+<tr><td style="text-align:center">Generates random \( x&lt;q \)</td><td style="text-align:center"></td></tr>
+<tr><td style="text-align:center">\( A=H(ID_a) \)</td><td style="text-align:center"></td></tr>
+<tr><td style="text-align:center">\( U=x{A} \)</td><td style="text-align:center"></td></tr>
+<tr><td style="text-align:center">\( ID_a \), \( U~~ \)</td><td style="text-align:center"></td></tr>
+<tr><td style="text-align:center">\( y=H(U \) | \( T) \)</td><td style="text-align:center"></td></tr>
+<tr><td style="text-align:center">\( V=-(x+y){((s-\alpha)A+\alpha A)} \rightarrow \)</td><td style="text-align:center"></td></tr>
+<tr><td style="text-align:center"></td><td style="text-align:center">\( A=H(ID_a) \)</td></tr>
+<tr><td style="text-align:center"></td><td style="text-align:center">\( g=e(V,Q).e(U+yA,sQ) \)</td></tr>
+<tr><td style="text-align:center"></td><td style="text-align:center">if \( g \ne 1 \), reject the connection</td></tr>
+</tbody>
+</table>
+<figure>
+  <caption><strong>Figure 1.</strong> M-Pin 1-Pass</caption>
+</figure>
+---
+<h3><a class="anchor" aria-hidden="true" id="m-pin-2-pass"></a><a href="#m-pin-2-pass" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<p>As you can see below in Fig 2., M-Pin in the two pass operation operates in a challenge (from the Server) to client, who responds to challenge. This implementation obviates the any risk of Key Compromise Impersonation attack vector, at the cost of of a full roundtrip.</p>
+<hr>
+<table>
+<thead>
+<tr><th style="text-align:center">Alice - identity \( ID_a \)</th><th style="text-align:center">Server</th></tr>
+</thead>
+<tbody>
+<tr><td style="text-align:center">Generates random \( x&lt;q \)</td><td style="text-align:center">Generates random \( y&lt;q \)</td></tr>
+<tr><td style="text-align:center">\( A=H(ID_a) \)</td><td style="text-align:center"></td></tr>
+<tr><td style="text-align:center">\( U=x{A} \)</td><td style="text-align:center"></td></tr>
+<tr><td style="text-align:center">\( ID_a$, $U~~ \rightarrow  \)</td><td style="text-align:center"></td></tr>
+<tr><td style="text-align:center"></td><td style="text-align:center">\( \leftarrow y \)</td></tr>
+<tr><td style="text-align:center">\( V=-(x+y){((s-\alpha)A+\alpha A)} \rightarrow \)</td><td style="text-align:center"></td></tr>
+<tr><td style="text-align:center"></td><td style="text-align:center">\( A=H(ID_a) \)</td></tr>
+<tr><td style="text-align:center"></td><td style="text-align:center">\( g=e(V,Q).e(U+yA,sQ) \)</td></tr>
+<tr><td style="text-align:center"></td><td style="text-align:center">if \( g \ne 1 \), reject the connection</td></tr>
+</tbody>
+</table>
+<figure>
+  <caption><strong>Figure 2.</strong> M-Pin 2-Pass</caption>
+</figure>
+---
+<h3><a class="anchor" aria-hidden="true" id="m-pin-full"></a><a href="#m-pin-full" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<p>This more elaborate protocol not only replaces Username/Password, but replaces the functionality of digital certificates being utilised to drive key agreement for TLS or VPN protocols as well.</p>
+<p>Our starting point is the M-Pin protocol as described above.</p>
+<p>The idea is to run it first (to authenticate the client to the server), and then proceed to authenticate the server to the client via an authenticated key exchange, which also establishes the agreed key of 128 bits.</p>
+<p>The first thing to note is that both the client and the server can already calculate a mutual authenticated encryption key!</p>
+<p>This protocol requires another general hash function \( H_g(.) \) which serializes, and hashes its input to a 256-bit value. Both sides can then extract a key from this value \( K \).</p>
+<p>It is left as a simple exercise for the reader to confirm that both client and server end up with the same key.</p>
+<p>Note that since the first part of the protocol is just the original M-Pin protocol, all of its features and extensions still apply.</p>
+<hr>
+<table>
+<thead>
+<tr><th style="text-align:center">Alice - identity \( ID_a \)</th><th style="text-align:center">Server</th></tr>
+</thead>
+<tbody>
+<tr><td style="text-align:center">Generates random \( x&lt;q \)</td><td style="text-align:center">Generates random \( y&lt;q \)</td></tr>
+<tr><td style="text-align:center">\( A=H(ID_a) \)</td><td style="text-align:center"></td></tr>
+<tr><td style="text-align:center">\( U=x{A} \)</td><td style="text-align:center"></td></tr>
+<tr><td style="text-align:center">\( ID_a$, $U~~ \rightarrow  \)</td><td style="text-align:center"></td></tr>
+<tr><td style="text-align:center"></td><td style="text-align:center">\( \leftarrow y \)</td></tr>
+<tr><td style="text-align:center">\( V=-(x+y){((s-\alpha)A+\alpha A)} \rightarrow \)</td><td style="text-align:center"></td></tr>
+<tr><td style="text-align:center"></td><td style="text-align:center">\( A=H(ID_a) \)</td></tr>
+<tr><td style="text-align:center"></td><td style="text-align:center">\( g=e(V,Q).e(U+yA,sQ) \)</td></tr>
+<tr><td style="text-align:center"></td><td style="text-align:center">if \( g \ne 1 \), reject the connection</td></tr>
+<tr><td style="text-align:center">\( R=r{A} \rightarrow \)</td><td style="text-align:center">\( \leftarrow W=w{A} \)</td></tr>
+<tr><td style="text-align:center">\( h=H(A,U,y,V,R,W) \)</td><td style="text-align:center">\( h=H(A,U,y,V,R,W) \)</td></tr>
+<tr><td style="text-align:center">\( K=H_g((g_1.{g_2}^\alpha)^{r+h} \ \) | \( x{W}) \)</td><td style="text-align:center">\( K=H_g(e(R+hA,sQ) \ \) | \( w{U}) \)</td></tr>
+</tbody>
+</table>
+<figure>
+  <caption><strong>Figure 3.</strong> M-Pin FULL</caption>
+</figure>
+<hr>
+<p>Note that the transmission of \( R \) from the client to the server can be done at the same time as \( V \) is transmitted, and the transmission of \( W \) from the server to the client can be done at the same time as  \( y \) is transmitted, to avoid introducing any extra flows into the protocol.</p>
+<h3><a class="anchor" aria-hidden="true" id="chow-choo-protocol"></a><a href="#chow-choo-protocol" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
+<p>As initially proposed, the Chow-Choo Protocol was based on a type-1 pairing. Note that in the Milagro framework, the Chow-Choo Protocol is made to work in a Type-3 setting.</p>
+<p>Pairings are usually written as functions of the form \( g=e(A,B) \), where \( A \in G_1 \), \( g \in G_T \), and for a Type-1 pairing \( B \in G_1 \) and for Type-3 \( B \in G_2 \).</p>
+<p>Consider now an application of this protocol to an imagined Internet of Things (IoT) setting.</p>
+<p>Each 'Thing' is issued with a serial number and its own Chow-Choo key (which can double as an M-Pin Key) based on that serial number as an identity.</p>
+<p>These keys may be embedded at the time of manufacture, by the manufacturer acting as a naturally trusted authority.</p>
+<p>When a Thing needs to communicate with another Thing, an action which requires knowing only the identity of the other, both parties can activate the Chow-Choo Protocol to calculate the same key to encrypt their communication.</p>
+<p>For both sending and receiving, Alice is issued with \( sA_1 \) and \( sA_2 \), where \( A_1=H_1 \) and \( A_2=H_2 \) both in the \( ID = Alice \).</p>
+<p>Similarly Bob is issued with \( sB_1 \) and \( sB_2 \). Now if Alice initiates and Bob responds, Alice calculates the key as \( e(sA_1,B_2) \) and Bob can calculate the same key as \( e(A_1,sB_2) \), where by convention the initiator uses their <em>sender</em> key and the responder uses their <em>receiver</em> key.</p>
+<p>One thing we can exploit -- in any communication context there is an initiator and a responder, or a <em>sender</em> and <em>receiver</em>, if you will.</p>
+<p>In the above example, Alice and Bob both were issued <em>sender</em> and <em>receiver</em> keys respectively, as this describes where they can appear in the pairing.</p>
+<p>An obvious advantage is to issue each Thing with two keys, one in \( G_1 \) and the other in \( G_2 \), <strong>if</strong> the Thing is approved to send and receive.</p>
+<p>However, the capability exists to cryptographically bound Things to only receiving information, or only sending information, based upon whether or not a Thing has been issued a sender and / or a receiver key.</p>
+<p>This capability is exploited in the Milagro framework to enable peer to peer authenticated key agreement.</p>
+<hr>
+<!--- This is the Chow Choo protocol in a Mathml table / frame because redering in Math LaTex equations exposes a bug in MathJax. It's just one equation that has this bug!  --->
+<figure>
+    <html>
+    <math xmlns="http://www.w3.org/1998/Math/MathML" display='block'>
+            <mtable frame="solid" rowlines="solid" rowalign="center" mathbackground="white">
+            <mstyle mathsize='.85em'>
+        <mtr>
+            <mtd>
+                <mspace width="0.1em" />
+            </mtd>
+            <mtd columnalign="left">
+                <mtable class="m-matrix">
+                    <mtr>
+                        <mtd>
+                            <mtext>SENDER</mtext>
+                        </mtd>
+                        <mtd>
+                            <mtext>RECEIVER</mtext>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                            <mi>x</mi>
+                            <mo>&#x02208;</mo>
+                            <msubsup>
+                                <mi>&#x02124;</mi>
+                                <mi>q</mi>
+                                <mo>*</mo>
+                            </msubsup>
+                        </mtd>
+                        <mtd>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                            <mi>A</mi>
+                            <mi>G</mi>
+                            <mn>1</mn>
+                            <mo>:</mo>
+                            <mo>=</mo>
+                            <msub>
+                                <mi>H</mi>
+                                <mn>1</mn>
+                            </msub>
+                            <mrow>
+                                <mo form="prefix">(</mo>
+                                <mi>I</mi>
+                                <mo>&#x02146;</mo>
+                                <mi>A</mi>
+                                <mo form="postfix">)</mo>
+                            </mrow>
+                        </mtd>
+                        <mtd>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                            <mi>P</mi>
+                            <mi>a</mi>
+                            <msub>
+                                <mi>G</mi>
+                                <mn>1</mn>
+                            </msub>
+                            <mo>:</mo>
+                            <mo>=</mo>
+                            <mi>x</mi>
+                            <mo>&#x022C5;</mo>
+                            <mi>A</mi>
+                            <msub>
+                                <mi>G</mi>
+                                <mn>1</mn>
+                            </msub>
+                        </mtd>
+                        <mtd>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                            <mi>I</mi>
+                            <mo>&#x02146;</mo>
+                            <mi>A</mi>
+                            <mo>,</mo>
+                            <mi>P</mi>
+                            <mi>a</mi>
+                            <msub>
+                                <mi>G</mi>
+                                <mn>1</mn>
+                            </msub>
+                            <mo>&#x027F6;</mo>
+                        </mtd>
+                        <mtd>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                        </mtd>
+                        <mtd>
+                            <mi>y</mi>
+                            <mo>,</mo>
+                            <mi>w</mi>
+                            <mo>&#x02208;</mo>
+                            <msubsup>
+                                <mi>&#x02124;</mi>
+                                <mi>q</mi>
+                                <mo>*</mo>
+                            </msubsup>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                        </mtd>
+                        <mtd>
+                            <mi>A</mi>
+                            <msub>
+                                <mi>G</mi>
+                                <mn>1</mn>
+                            </msub>
+                            <mo>:</mo>
+                            <mo>=</mo>
+                            <msub>
+                                <mi>H</mi>
+                                <mn>1</mn>
+                            </msub>
+                            <mrow>
+                                <mo form="prefix">(</mo>
+                                <mi>I</mi>
+                                <mo>&#x02146;</mo>
+                                <mi>A</mi>
+                                <mo form="postfix">)</mo>
+                            </mrow>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                        </mtd>
+                        <mtd>
+                            <mi>B</mi>
+                            <msub>
+                                <mi>G</mi>
+                                <mn>2</mn>
+                            </msub>
+                            <mo>:</mo>
+                            <mo>=</mo>
+                            <msub>
+                                <mi>H</mi>
+                                <mn>2</mn>
+                            </msub>
+                            <mrow>
+                                <mo form="prefix">(</mo>
+                                <mi>I</mi>
+                                <mo>&#x02146;</mo>
+                                <mi>B</mi>
+                                <mo form="postfix">)</mo>
+                            </mrow>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                        </mtd>
+                        <mtd>
+                            <mi>P</mi>
+                            <mi>b</mi>
+                            <msub>
+                                <mi>G</mi>
+                                <mn>2</mn>
+                            </msub>
+                            <mo>:</mo>
+                            <mo>=</mo>
+                            <mi>y</mi>
+                            <mo>&#x022C5;</mo>
+                            <mi>B</mi>
+                            <msub>
+                                <mi>G</mi>
+                                <mn>2</mn>
+                            </msub>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                        </mtd>
+                        <mtd>
+                            <mi>P</mi>
+                            <mi>g</mi>
+                            <msub>
+                                <mi>G</mi>
+                                <mn>1</mn>
+                            </msub>
+                            <mo>:</mo>
+                            <mo>=</mo>
+                            <mi>w</mi>
+                            <mo>&#x022C5;</mo>
+                            <mi>A</mi>
+                            <msub>
+                                <mi>G</mi>
+                                <mn>1</mn>
+                            </msub>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                        </mtd>
+                        <mtd>
+                            <mtext>pia</mtext>
+                            <mo>:</mo>
+                            <mo>=</mo>
+                            <msub>
+                                <mi>H</mi>
+                                <mi>q</mi>
+                            </msub>
+                            <mrow>
+                                <mo form="prefix">(</mo>
+                                <mi>P</mi>
+                                <mi>a</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>1</mn>
+                                </msub>
+                                <mo>&#x02016;</mo>
+                                <mi>P</mi>
+                                <mi>b</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>2</mn>
+                                </msub>
+                                <mo>&#x02016;</mo>
+                                <mi>P</mi>
+                                <mi>g</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>1</mn>
+                                </msub>
+                                <mo>&#x02016;</mo>
+                                <mi>I</mi>
+                                <mo>&#x02146;</mo>
+                                <mi>B</mi>
+                                <mo form="postfix">)</mo>
+                            </mrow>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                        </mtd>
+                        <mtd>
+                            <mtext>pib</mtext>
+                            <mo>:</mo>
+                            <mo>=</mo>
+                            <msub>
+                                <mi>H</mi>
+                                <mi>q</mi>
+                            </msub>
+                            <mrow>
+                                <mo form="prefix">(</mo>
+                                <mi>P</mi>
+                                <mi>b</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>2</mn>
+                                </msub>
+                                <mo>&#x02016;</mo>
+                                <mi>P</mi>
+                                <mi>a</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>1</mn>
+                                </msub>
+                                <mo>&#x02016;</mo>
+                                <mi>P</mi>
+                                <mi>g</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>1</mn>
+                                </msub>
+                                <mo>&#x02016;</mo>
+                                <mi>I</mi>
+                                <mo>&#x02146;</mo>
+                                <mi>A</mi>
+                                <mo form="postfix">)</mo>
+                            </mrow>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                        </mtd>
+                        <mtd>
+                            <mi>k</mi>
+                            <mo>:</mo>
+                            <mo>=</mo>
+                            <mi>e</mi>
+                            <mrow>
+                                <mo form="prefix">(</mo>
+                                <mtext>pia</mtext>
+                                <mo>&#x022C5;</mo>
+                                <mi>A</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>1</mn>
+                                </msub>
+                                <mo>+</mo>
+                                <mi>P</mi>
+                                <mi>a</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>1</mn>
+                                </msub>
+                                <mo>,</mo>
+                                <mo form="prefix">(</mo>
+                                <mi>y</mi>
+                                <mo>+</mo>
+                                <mtext>pib</mtext>
+                                <mo form="postfix">)</mo>
+                                <mo>&#x022EF;</mo>
+                                <mo>&#x022C5;</mo>
+                                <mi>B</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>2</mn>
+                                </msub>
+                                <mo form="postfix">)</mo>
+                            </mrow>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                        </mtd>
+                        <mtd>
+                            <mi>K</mi>
+                            <mo>:</mo>
+                            <mo>=</mo>
+                            <mi>H</mi>
+                            <mrow>
+                                <mo form="prefix">(</mo>
+                                <mi>k</mi>
+                                <mo>,</mo>
+                                <mi>w</mi>
+                                <mo>&#x022C5;</mo>
+                                <mi>P</mi>
+                                <mi>a</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>1</mn>
+                                </msub>
+                                <mo form="postfix">)</mo>
+                            </mrow>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                        </mtd>
+                        <mtd>
+                            <mo>&#x027F5;</mo>
+                            <mi>I</mi>
+                            <mo>&#x02146;</mo>
+                            <mi>B</mi>
+                            <mo>,</mo>
+                            <mi>P</mi>
+                            <mi>g</mi>
+                            <msub>
+                                <mi>G</mi>
+                                <mn>1</mn>
+                            </msub>
+                            <mo>,</mo>
+                            <mi>P</mi>
+                            <mi>b</mi>
+                            <msub>
+                                <mi>G</mi>
+                                <mn>2</mn>
+                            </msub>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                            <mi>B</mi>
+                            <msub>
+                                <mi>G</mi>
+                                <mn>2</mn>
+                            </msub>
+                            <mo>:</mo>
+                            <mo>=</mo>
+                            <msub>
+                                <mi>H</mi>
+                                <mn>2</mn>
+                            </msub>
+                            <mrow>
+                                <mo form="prefix">(</mo>
+                                <mi>I</mi>
+                                <mo>&#x02146;</mo>
+                                <mi>B</mi>
+                                <mo form="postfix">)</mo>
+                            </mrow>
+                        </mtd>
+                        <mtd>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                            <mtext>pia</mtext>
+                            <mo>:</mo>
+                            <mo>=</mo>
+                            <msub>
+                                <mi>H</mi>
+                                <mi>q</mi>
+                            </msub>
+                            <mrow>
+                                <mo form="prefix">(</mo>
+                                <mi>P</mi>
+                                <mi>a</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>1</mn>
+                                </msub>
+                                <mo>&#x02016;</mo>
+                                <mi>P</mi>
+                                <mi>b</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>2</mn>
+                                </msub>
+                                <mo>&#x02016;</mo>
+                                <mi>P</mi>
+                                <mi>g</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>1</mn>
+                                </msub>
+                                <mo>&#x02016;</mo>
+                                <mi>I</mi>
+                                <mo>&#x02146;</mo>
+                                <mi>B</mi>
+                                <mo form="postfix">)</mo>
+                            </mrow>
+                        </mtd>
+                        <mtd>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                            <mtext>pib</mtext>
+                            <mo>:</mo>
+                            <mo>=</mo>
+                            <msub>
+                                <mi>H</mi>
+                                <mi>q</mi>
+                            </msub>
+                            <mrow>
+                                <mo form="prefix">(</mo>
+                                <mi>P</mi>
+                                <mi>b</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>2</mn>
+                                </msub>
+                                <mo>&#x02016;</mo>
+                                <mi>P</mi>
+                                <mi>a</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>1</mn>
+                                </msub>
+                                <mo>&#x02016;</mo>
+                                <mi>P</mi>
+                                <mi>g</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>1</mn>
+                                </msub>
+                                <mo>&#x02016;</mo>
+                                <mi>I</mi>
+                                <mo>&#x02146;</mo>
+                                <mi>A</mi>
+                                <mo form="postfix">)</mo>
+                            </mrow>
+                        </mtd>
+                        <mtd>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                            <mi>k</mi>
+                            <mo>:</mo>
+                            <mo>=</mo>
+                            <mi>e</mi>
+                            <mrow>
+                                <mo form="prefix">(</mo>
+                                <mo form="prefix">(</mo>
+                                <mi>x</mi>
+                                <mo>+</mo>
+                                <mi>p</mi>
+                                <mi>i</mi>
+                                <mi>a</mi>
+                                <mo form="postfix">)</mo>
+                                <mo>&#x022EF;</mo>
+                                <mo>&#x022C5;</mo>
+                                <mi>A</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>1</mn>
+                                </msub>
+                                <mo>,</mo>
+                                <mtext>pib</mtext>
+                                <mo>&#x022C5;</mo>
+                                <mi>B</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>2</mn>
+                                </msub>
+                                <mo>+</mo>
+                                <mi>P</mi>
+                                <mi>b</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>2</mn>
+                                </msub>
+                                <mo form="postfix">)</mo>
+                            </mrow>
+                        </mtd>
+                        <mtd>
+                        </mtd>
+                    </mtr>
+                    <mtr>
+                        <mtd>
+                            <mi>K</mi>
+                            <mo>:</mo>
+                            <mo>=</mo>
+                            <mi>H</mi>
+                            <mrow>
+                                <mo form="prefix">(</mo>
+                                <mi>k</mi>
+                                <mo>,</mo>
+                                <mi>x</mi>
+                                <mo>&#x022C5;</mo>
+                                <mi>P</mi>
+                                <mi>g</mi>
+                                <msub>
+                                    <mi>G</mi>
+                                    <mn>1</mn>
+                                </msub>
+                                <mo form="postfix">)</mo>
+                            </mrow>
+                        </mtd>
+                        <mtd>
+                        </mtd>
+                    </mtr>
+                </mtable>
+            </mtd>
+        </mtr>
+    </mtable>
+    </math>
+    </html>
+</figure>
+<figure>
+  <caption><strong>Figure 4.</strong> Chow-Choo Protocol</caption>
+</figure>
+<hr>
+<p><strong>Notes on Chow-Choo Protocol:</strong></p>
+<ul>
+<li>\( G_1 \): a \( r \)-order cyclic subgroup of \( E(F_p) \).</li>
+<li>\( G_2 \): a subgroup of \( E(F_{p^k}) \), where \( k \) is the embedding degree of the Curve.</li>
+<li>\( H1 \): Maps string value to a point on the curve in \( G_1 \).</li>
+<li>\( H2 \): Maps string value to a point on the curve in \( G_2 \).</li>
+<li>\( Hq \): Hashes inputs to an integer modulo the curve order \( q \).When run in the simple SIDH</li>
+<li>H(): Hash function.</li>
+<li>\( || \): denotes the concatenation of messages.</li>
+</ul>
+<hr>
+<h3><a class="anchor" aria-hidden="true" id="secret-revocation"></a><a href="#secret-revocation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
+<p>We introduce Time Permits to handle the revocation issue. Normally in Identity-Based Encryption the problem of client revocation is solved by date-stamping identities so that the private key issued for an identity becomes useless once the time period expires. Now a new private key must be issued, and we will simply not issue one to a revoked client.</p>
+<p>Milagro achieves a much more immediate revocation capability through the use of Time Permits. The D-TA that is controlled by the application owner is envisioned to be the controlling D-TA to issue Time Permits at the point where a client needs to authenticate to a server, or create an authenticated key agreement between client and server or peer to peer.</p>
+<p>The idea is that the server includes an explicitly described time slot in its construction of Alice's hashed identity. Unless Alice has a corresponding &quot;Time permit&quot; for the same time slot, she cannot complete the protocol.</p>
+<p>In the protocol above we instead calculate \( H(ID_a) + H_T(T_i|ID_a) \) on both sides of the protocol where \( T_i \) is a textual description of the \( i \)-th time slot and \( H_T(.) \) is a hash function distinct from \( H(.) \).</p>
+<p>For the protocol to work correctly Alice must be issued by the Trusted Authority with a permit \( s.H_T(T_i|ID_a) \) which gets added to her combined PIN-plus-token secret \( s.H(ID_a) \).</p>
+<p>Observe that the permit is of no use to any other party, and hence can be issued publicly, uploaded to a public cloud data store (AWS S3), or delivered via the server directly.</p>
+<p>A proof of security for this idea in the context of Boneh and Franklin IBE can be found in Tseng<sup class="footnote-ref"><a href="#fn6" id="fnref6">[6]</a></sup> et al.</p>
+<hr>
+<h3><a class="anchor" aria-hidden="true" id="bls-subgroup-multi-signatures"></a><a href="#bls-subgroup-multi-signatures" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12  [...]
+<p>Dan Boneh, Ben Lynn and Hovav Schacham introduced their paper entitled &quot;Short Signatures from the Weil Pairing&quot; in 2001<sup class="footnote-ref"><a href="#fn4" id="fnref4:1">[4]</a></sup>. The paper described a short signature scheme based on the computational Diffie-Hellman assumption on certain elliptic and hyper-elliptic curves.</p>
+<p>In a simple instantiation, given a secret key \( sk \), a public key \( p k=g^{S k} \), a message \( m \), a hashing-into-the-curve function \( H \), and a bilinear pairing \( e \):</p>
+<ul>
+<li>Key Generation: \( sk \) is a random integer over the field, \( p k=g^{S k} \)</li>
+<li>Signature: \( S=H(m)^{s k} \)</li>
+<li>Verify: \( e(H(m), p k)=e(S, g) \)</li>
+</ul>
+<p>Biliniarity is on display as the signature</p>
+<p>$$ \begin{array}{c}{e(H(m), p k)=e\left(H(m), g^{s k}\right)=e(H(m), g)^{s k}=} \ {=e\left(H(m)^{s k}, g\right)=e(S, g)}\end{array} $$</p>
+<p>but is also unique and deterministic, something missing from ECDSA.</p>
+<p>In June of 2018 Dan Boneh, Manu Drijvers and Gregory Neven released research that constructs the first practical, short accountable-subgroup multi-signature (ASM) scheme based on BLS signatures<sup class="footnote-ref"><a href="#fn7" id="fnref7">[7]</a></sup>.</p>
+<p>An ASM scheme enables any subset \( S \) of a set of \( n \) parties to sign a message \( m \) so that a valid signature discloses which subset generated the signature (hence the subset \( S \) is accountable for signing \( m \)).</p>
+<p>In addition to the ASM scheme, Milagro exploits a unique property of BLS signatures: Signing Keys can be split using Shamir's Secret Sharing<sup class="footnote-ref"><a href="#fn8" id="fnref8">[8]</a></sup> in which the 'shares' of the keys, when distributed to signers, themselves become signing keys. By using a 'key splitter' and 'signature aggregator' role who also performs the Shamir Secret Sharing (SSS) dealer function, several benefits emerge.</p>
+<p>Thresholds can be set on the distribution of key shares just as in a normal SSS routine. So once the shares of the original signing key are distributed, the original signing key can be securely deleted, and is never re-created again. Instead, signatures derived from the shares of the original signing key are created. Again, the properties of BLS enable these shares of signature keys to be themselves used a signature keys. The object of the exercise is for the signature aggregator, who [...]
+<p>In other words, if the aggregator takes m-of-n of these signature shares, and perform the same polynomial interpolation as one would usually do with the secret shares, you’ll recover a complete signature which is identical to what would have been created if the original complete private key would have been used.</p>
+<p>In this context, signing is a single round protocol and is non-interactive.</p>
+<hr>
+<h3><a class="anchor" aria-hidden="true" id="supersingular-isogeny-key-encapsulation-sike"></a><a href="#supersingular-isogeny-key-encapsulation-sike" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v [...]
+<p>A key encapsulation mechanism (KEM) is a set of three algorithms.</p>
+<ul>
+<li>key generation (KeyGen)</li>
+<li>encapsulation (Encaps)</li>
+<li>decapsulation (Decaps)</li>
+</ul>
+<p>and a defined key space, where</p>
+<ul>
+<li>KeyGen(): returns a public and a secret key \( (pk, sk) \).</li>
+<li>Encaps\( (pk) \): takes pk as input and outputs ciphertext \( c \) and a key \( K \) from the key space.</li>
+<li>Decaps\( (sk, c) \): takes \( sk \) and \( c \) as input, and returns a key \( K \) or ERROR. \( K \) is called the session key.</li>
+</ul>
+<p>SIKE uses Hofheinz transformation on SIDH to achieve CCA security. Let \( p=2^{e_{A}} 3^{e_{3}}-1 \), and let \( E \) be a supersingular elliptic curve defined over a field of characteristic \( p \). \( E \) can also be defined over \( \mathbb{F}_{p^{2}} \) up to its isomorphism. An isogeny \( \phi : E \rightarrow E^{\prime} \) is a non-constant map from \( E \) to \( E^{\prime} \) which translates the identity into the identity.</p>
+<p>An isogeny map is defined by its degree and kernel. The degree of an isogeny is its degree as morphism. An isogeny with degree \( \ell \) map is called \( \ell \)-isogeny. Let \( G \) be a subgroup of points on \( E \) which contains \( \ell \) + 1 cyclic subgroups of order \( \ell \). This subgroup is the torsion group \( E[\ell] \) and each element of this group is corresponding to an isogeny of degree \( \ell \); accordingly, an isogeny also can be identified by \( G \), i.e., the  [...]
+<p>This section provides a brief presentation of the SIKE protocol. We refer readers to <sup class="footnote-ref"><a href="#fn9" id="fnref9">[9]</a></sup> and <sup class="footnote-ref"><a href="#fn5" id="fnref5:1">[5]</a></sup> for more detailed explanation of the supersignular isogeny problem and the base key-exchange protocol which the SIKE is constructed upon.</p>
+<hr>
+
+    <div class="admonition admonition-note">
+      <div class="admonition-heading">
+        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V [...]
+      </div>
+      <div class="admonition-content">
+    <p>Submit a pull request on the development branch of <a href="https://github.com/apache/incubator-milagro">Milagro Website Repo</a>.</p>
+</div></div><!--
+Supported admonition types are: caution, note, important, tip, warning.
+--><hr class="footnotes-sep">
+<section class="footnotes">
+<ol class="footnotes-list">
+<li id="fn1"  class="footnote-item"><p><a href="https://eprint.iacr.org/2002/164">M-Pin protocol</a> <a href="#fnref1" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn2"  class="footnote-item"><p><a href="https://eprint.iacr.org/2015/576">The Carnac protocol -- or how to read the contents of a sealed envelope</a> <a href="#fnref2" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn3"  class="footnote-item"><p><a href="https://eprint.iacr.org/2007/018.pdf">Strongly-Secure Identity-based Key Agreement and Anonymous Extension</a> <a href="#fnref3" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn4"  class="footnote-item"><p><a href="https://www.iacr.org/archive/asiacrypt2001/22480516.pdf">Short Signatures from the Weil Pairing</a> <a href="#fnref4" class="footnote-backref">↩</a> <a href="#fnref4:1" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn5"  class="footnote-item"><p><a href="https://sike.org/">Supersingular isogeny key encapsulation - NIST Submission</a> <a href="#fnref5" class="footnote-backref">↩</a> <a href="#fnref5:1" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn6"  class="footnote-item"><p><a href="https://reader.elsevier.com/reader/sd/pii/S2213020915000592?token=5C2E08C17803B9549FB79F3A91A1ED2382360D3E840087C8C065BD06EFCABB55C4A5A300566388A2920786DCC63E631E">A brief review of revocable ID-based public key cryptosystem</a> <a href="#fnref6" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn7"  class="footnote-item"><p><a href="https://eprint.iacr.org/2018/483">Compact Multi-Signatures for Smaller Blockchains</a> <a href="#fnref7" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn8"  class="footnote-item"><p><a href="https://cs.jhu.edu/~sdoshi/crypto/papers/shamirturing.pdf">How to Share a Secret</a> <a href="#fnref8" class="footnote-backref">↩</a></p>
+</li>
+<li id="fn9"  class="footnote-item"><p><a href="https://eprint.iacr.org/2011/506.pdf">Towards quantum-resistant cryptosystems from supersingular elliptic curve isogenies</a> <a href="#fnref9" class="footnote-backref">↩</a></p>
+</li>
+</ol>
+</section>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/milagro-crypto"><span class="arrow-prev">← </span><span>Milagro Crypto</span></a><a class="docs-next button" href="/docs/milagro-design"><span>Milagro Design</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#m-pin-protocol-introduction"> [...]
\ No newline at end of file
diff --git a/docs/zkp-mfa-api.html b/docs/zkp-mfa-api.html
new file mode 100644
index 0000000..e23845f
--- /dev/null
+++ b/docs/zkp-mfa-api.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Zero Knowledge Proof MFA API · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="
+    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
+      &lt;div class=&quot;admonition-heading&quot;&gt;
+        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
+      &lt;/div&gt;
+      &lt;div class=&quot;admonition-content&quot;&gt;
+    &lt;/div&gt;&lt;/div&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Zero Knowledge Proof MFA API · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="
+    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
+      &lt;div class=&quot;admonition-heading&quot;&gt;
+        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
+      &lt;/div&gt;
+      &lt;div class=&quot;admonition-content&quot;&gt;
+    &lt;/div&gt;&lt;/div&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Bl [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Zero Knowledge Proof MFA API</h1></header><article><div><span>
+    <div class="admonition admonition-tip">
+      <div class="admonition-heading">
+        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2 [...]
+      </div>
+      <div class="admonition-content">
+    <p>Interested in becoming a contributor? Milagro is looking for you.</p>
+<p><a href="/docs/contributor-guide.html">CONTRIBUTOR'S GUIDE</a>.</p>
+</div></div><!--
+Supported admonition types are: caution, note, important, tip, warning.
+--></span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zkp-mfa-overview"><span class="arrow-prev">← </span><span>ZKP-MFA Overview</span></a><a class="docs-next button" href="/docs/contributor-guide"><span>Contributor&#x27;s Guide</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="foote [...]
\ No newline at end of file
diff --git a/docs/zkp-mfa-api/index.html b/docs/zkp-mfa-api/index.html
new file mode 100644
index 0000000..e23845f
--- /dev/null
+++ b/docs/zkp-mfa-api/index.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Zero Knowledge Proof MFA API · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="
+    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
+      &lt;div class=&quot;admonition-heading&quot;&gt;
+        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
+      &lt;/div&gt;
+      &lt;div class=&quot;admonition-content&quot;&gt;
+    &lt;/div&gt;&lt;/div&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Zero Knowledge Proof MFA API · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="
+    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
+      &lt;div class=&quot;admonition-heading&quot;&gt;
+        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
+      &lt;/div&gt;
+      &lt;div class=&quot;admonition-content&quot;&gt;
+    &lt;/div&gt;&lt;/div&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Bl [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Zero Knowledge Proof MFA API</h1></header><article><div><span>
+    <div class="admonition admonition-tip">
+      <div class="admonition-heading">
+        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2 [...]
+      </div>
+      <div class="admonition-content">
+    <p>Interested in becoming a contributor? Milagro is looking for you.</p>
+<p><a href="/docs/contributor-guide.html">CONTRIBUTOR'S GUIDE</a>.</p>
+</div></div><!--
+Supported admonition types are: caution, note, important, tip, warning.
+--></span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zkp-mfa-overview"><span class="arrow-prev">← </span><span>ZKP-MFA Overview</span></a><a class="docs-next button" href="/docs/contributor-guide"><span>Contributor&#x27;s Guide</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="foote [...]
\ No newline at end of file
diff --git a/docs/zkp-mfa-overview.html b/docs/zkp-mfa-overview.html
new file mode 100644
index 0000000..9ea6aca
--- /dev/null
+++ b/docs/zkp-mfa-overview.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Zero Knowledge Proof MFA Overview · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="
+    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
+      &lt;div class=&quot;admonition-heading&quot;&gt;
+        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
+      &lt;/div&gt;
+      &lt;div class=&quot;admonition-content&quot;&gt;
+    &lt;/div&gt;&lt;/div&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Zero Knowledge Proof MFA Overview · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="
+    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
+      &lt;div class=&quot;admonition-heading&quot;&gt;
+        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
+      &lt;/div&gt;
+      &lt;div class=&quot;admonition-content&quot;&gt;
+    &lt;/div&gt;&lt;/div&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Bl [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Zero Knowledge Proof MFA Overview</h1></header><article><div><span>
+    <div class="admonition admonition-tip">
+      <div class="admonition-heading">
+        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2 [...]
+      </div>
+      <div class="admonition-content">
+    <p>Interested in becoming a contributor? Milagro is looking for you.</p>
+<p><a href="/docs/contributor-guide.html">CONTRIBUTOR'S GUIDE</a>.</p>
+</div></div><!--
+Supported admonition types are: caution, note, important, tip, warning.
+--></span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/d-ta-api"><span class="arrow-prev">← </span><span>D-TA Node API</span></a><a class="docs-next button" href="/docs/zkp-mfa-api"><span>ZKP-MFA API</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a [...]
\ No newline at end of file
diff --git a/docs/zkp-mfa-overview/index.html b/docs/zkp-mfa-overview/index.html
new file mode 100644
index 0000000..9ea6aca
--- /dev/null
+++ b/docs/zkp-mfa-overview/index.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Zero Knowledge Proof MFA Overview · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="
+    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
+      &lt;div class=&quot;admonition-heading&quot;&gt;
+        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
+      &lt;/div&gt;
+      &lt;div class=&quot;admonition-content&quot;&gt;
+    &lt;/div&gt;&lt;/div&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Zero Knowledge Proof MFA Overview · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="
+    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
+      &lt;div class=&quot;admonition-heading&quot;&gt;
+        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
+      &lt;/div&gt;
+      &lt;div class=&quot;admonition-content&quot;&gt;
+    &lt;/div&gt;&lt;/div&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Bl [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Zero Knowledge Proof MFA Overview</h1></header><article><div><span>
+    <div class="admonition admonition-tip">
+      <div class="admonition-heading">
+        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2 [...]
+      </div>
+      <div class="admonition-content">
+    <p>Interested in becoming a contributor? Milagro is looking for you.</p>
+<p><a href="/docs/contributor-guide.html">CONTRIBUTOR'S GUIDE</a>.</p>
+</div></div><!--
+Supported admonition types are: caution, note, important, tip, warning.
+--></span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/d-ta-api"><span class="arrow-prev">← </span><span>D-TA Node API</span></a><a class="docs-next button" href="/docs/zkp-mfa-api"><span>ZKP-MFA API</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a [...]
\ No newline at end of file
diff --git a/en/help.html b/en/help.html
new file mode 100644
index 0000000..a01c0c5
--- /dev/null
+++ b/en/help.html
@@ -0,0 +1,7 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Milagro · Core security infrastructure for decentralized networks</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Core security infrastructure for decentralized networks"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Apache Milagro · Core [...]
+</span></div></h2><div><span><p>Learn more about Milagro. <a href="/docs/en/milagro-intro.html">Read the docs.</a></p>
+</span></div></div></div><div class="blockElement threeByGridBlock"><div class="blockContent"><h2><div><span><p>Like cutting-edge crypto?</p>
+</span></div></h2><div><span><p>Join us. <a href="/docs/en/contributor-guide.html">Become a contributor.</a></p>
+</span></div></div></div><div class="blockElement threeByGridBlock"><div class="blockContent"><h2><div><span><p>Need Status?</p>
+</span></div></h2><div><span><p>We blog. <a href="/docs/en/../blog/">No, really.</a></p>
+</span></div></div></div></div></div></div></div></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof M [...]
\ No newline at end of file
diff --git a/en/help/index.html b/en/help/index.html
new file mode 100644
index 0000000..a01c0c5
--- /dev/null
+++ b/en/help/index.html
@@ -0,0 +1,7 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Milagro · Core security infrastructure for decentralized networks</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Core security infrastructure for decentralized networks"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Apache Milagro · Core [...]
+</span></div></h2><div><span><p>Learn more about Milagro. <a href="/docs/en/milagro-intro.html">Read the docs.</a></p>
+</span></div></div></div><div class="blockElement threeByGridBlock"><div class="blockContent"><h2><div><span><p>Like cutting-edge crypto?</p>
+</span></div></h2><div><span><p>Join us. <a href="/docs/en/contributor-guide.html">Become a contributor.</a></p>
+</span></div></div></div><div class="blockElement threeByGridBlock"><div class="blockContent"><h2><div><span><p>Need Status?</p>
+</span></div></h2><div><span><p>We blog. <a href="/docs/en/../blog/">No, really.</a></p>
+</span></div></div></div></div></div></div></div></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof M [...]
\ No newline at end of file
diff --git a/en/index.js-old.html b/en/index.js-old.html
new file mode 100644
index 0000000..ad1dfee
--- /dev/null
+++ b/en/index.js-old.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Milagro · Core security infrastructure for decentralized networks</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Core security infrastructure for decentralized networks"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Apache Milagro · Core [...]
+</span></div></h2><div><span><p>This is the content of my feature</p>
+</span></div></div></div><div class="blockElement alignCenter fourByGridBlock imageAlignTop"><div class="blockImage"><img src="/img/undraw_operating_system.svg"/></div><div class="blockContent"><h2><div><span><p>Decentralized custody of digital assets</p>
+</span></div></h2><div><span><p>The content of my second feature</p>
+</span></div></div></div></div></div></div><div class="productShowcaseSection paddingBottom" style="text-align:center"><h2>Milagro Server</h2><div><span><p>These are features of this project</p>
+</span></div></div><div class="container lightBackground paddingBottom paddingTop"><div class="wrapper"><div class="gridBlock"><div class="blockElement alignCenter imageAlignSide imageAlignRight twoByGridBlock"><div class="blockContent"><h2><div><span><p>Randomly Generated Theme Colors</p>
+</span></div></h2><div><span><p>Each new Docusaurus project has <strong>randomly-generated</strong> theme colors.</p>
+</span></div></div><div class="blockImage"><img src="/img/undraw_youtube_tutorial.svg"/></div></div></div></div></div><div class="container paddingBottom paddingTop" id="try"><div class="wrapper"><div class="gridBlock"><div class="blockElement alignCenter imageAlignSide imageAlignLeft twoByGridBlock"><div class="blockImage"><img src="/img/undraw_code_review.svg"/></div><div class="blockContent"><h2><div><span><p>Wonderful SVG Illustrations</p>
+</span></div></h2><div><span><p>To make your landing page more attractive, use illustrations! Check out <a href="https://undraw.co/"><strong>unDraw</strong></a> which provides you with customizable illustrations which are free to use. The illustrations you see on this page are from unDraw.</p>
+</span></div></div></div></div></div></div></div></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof M [...]
\ No newline at end of file
diff --git a/en/index.js-old/index.html b/en/index.js-old/index.html
new file mode 100644
index 0000000..ad1dfee
--- /dev/null
+++ b/en/index.js-old/index.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Milagro · Core security infrastructure for decentralized networks</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Core security infrastructure for decentralized networks"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Apache Milagro · Core [...]
+</span></div></h2><div><span><p>This is the content of my feature</p>
+</span></div></div></div><div class="blockElement alignCenter fourByGridBlock imageAlignTop"><div class="blockImage"><img src="/img/undraw_operating_system.svg"/></div><div class="blockContent"><h2><div><span><p>Decentralized custody of digital assets</p>
+</span></div></h2><div><span><p>The content of my second feature</p>
+</span></div></div></div></div></div></div><div class="productShowcaseSection paddingBottom" style="text-align:center"><h2>Milagro Server</h2><div><span><p>These are features of this project</p>
+</span></div></div><div class="container lightBackground paddingBottom paddingTop"><div class="wrapper"><div class="gridBlock"><div class="blockElement alignCenter imageAlignSide imageAlignRight twoByGridBlock"><div class="blockContent"><h2><div><span><p>Randomly Generated Theme Colors</p>
+</span></div></h2><div><span><p>Each new Docusaurus project has <strong>randomly-generated</strong> theme colors.</p>
+</span></div></div><div class="blockImage"><img src="/img/undraw_youtube_tutorial.svg"/></div></div></div></div></div><div class="container paddingBottom paddingTop" id="try"><div class="wrapper"><div class="gridBlock"><div class="blockElement alignCenter imageAlignSide imageAlignLeft twoByGridBlock"><div class="blockImage"><img src="/img/undraw_code_review.svg"/></div><div class="blockContent"><h2><div><span><p>Wonderful SVG Illustrations</p>
+</span></div></h2><div><span><p>To make your landing page more attractive, use illustrations! Check out <a href="https://undraw.co/"><strong>unDraw</strong></a> which provides you with customizable illustrations which are free to use. The illustrations you see on this page are from unDraw.</p>
+</span></div></div></div></div></div></div></div></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof M [...]
\ No newline at end of file
diff --git a/en/users.html b/en/users.html
new file mode 100644
index 0000000..2d41879
--- /dev/null
+++ b/en/users.html
@@ -0,0 +1 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Milagro · Core security infrastructure for decentralized networks</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Core security infrastructure for decentralized networks"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Apache Milagro · Core [...]
\ No newline at end of file
diff --git a/en/users.js.old b/en/users.js.old
new file mode 100644
index 0000000..039dc39
--- /dev/null
+++ b/en/users.js.old
@@ -0,0 +1,48 @@
+/**
+ * Copyright (c) 2017-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+const React = require('react');
+
+const CompLibrary = require('../../core/CompLibrary.js');
+
+const Container = CompLibrary.Container;
+
+class Users extends React.Component {
+  render() {
+    const {config: siteConfig} = this.props;
+    if ((siteConfig.users || []).length === 0) {
+      return null;
+    }
+
+    const editUrl = `${siteConfig.repoUrl}/edit/master/website/siteConfig.js`;
+    const showcase = siteConfig.users.map(user => (
+      <a href={user.infoLink} key={user.infoLink}>
+        <img src={user.image} alt={user.caption} title={user.caption} />
+      </a>
+    ));
+
+    return (
+      <div className="mainContainer">
+        <Container padding={['bottom', 'top']}>
+          <div className="showcaseSection">
+            <div className="prose">
+              <h1>Who is Using This?</h1>
+              <p>This project is used by many folks</p>
+            </div>
+            <div className="logos">{showcase}</div>
+            <p>Are you using this project?</p>
+            <a href={editUrl} className="button">
+              Add your company
+            </a>
+          </div>
+        </Container>
+      </div>
+    );
+  }
+}
+
+module.exports = Users;
diff --git a/en/users/index.html b/en/users/index.html
new file mode 100644
index 0000000..2d41879
--- /dev/null
+++ b/en/users/index.html
@@ -0,0 +1 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Milagro · Core security infrastructure for decentralized networks</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Core security infrastructure for decentralized networks"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Apache Milagro · Core [...]
\ No newline at end of file
diff --git a/files/ApacheCon_12_May.pdf b/files/ApacheCon_12_May.pdf
new file mode 100644
index 0000000..f8c7fda
Binary files /dev/null and b/files/ApacheCon_12_May.pdf differ
diff --git a/help.html b/help.html
new file mode 100644
index 0000000..742a60e
--- /dev/null
+++ b/help.html
@@ -0,0 +1,7 @@
+<!DOCTYPE html><html lang=""><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Milagro · Core security infrastructure for decentralized networks</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Core security infrastructure for decentralized networks"/><meta property="og:title" content="Apache Milagro · Core security infrastructure for decentralized netwo [...]
+</span></div></h2><div><span><p>Learn more about Milagro. <a href="/docs/milagro-intro.html">Read the docs.</a></p>
+</span></div></div></div><div class="blockElement threeByGridBlock"><div class="blockContent"><h2><div><span><p>Like cutting-edge crypto?</p>
+</span></div></h2><div><span><p>Join us. <a href="/docs/contributor-guide.html">Become a contributor.</a></p>
+</span></div></div></div><div class="blockElement threeByGridBlock"><div class="blockContent"><h2><div><span><p>Need Status?</p>
+</span></div></h2><div><span><p>We blog. <a href="/docs/../blog/">No, really.</a></p>
+</span></div></div></div></div></div></div></div></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof M [...]
\ No newline at end of file
diff --git a/help/index.html b/help/index.html
new file mode 100644
index 0000000..742a60e
--- /dev/null
+++ b/help/index.html
@@ -0,0 +1,7 @@
+<!DOCTYPE html><html lang=""><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Milagro · Core security infrastructure for decentralized networks</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Core security infrastructure for decentralized networks"/><meta property="og:title" content="Apache Milagro · Core security infrastructure for decentralized netwo [...]
+</span></div></h2><div><span><p>Learn more about Milagro. <a href="/docs/milagro-intro.html">Read the docs.</a></p>
+</span></div></div></div><div class="blockElement threeByGridBlock"><div class="blockContent"><h2><div><span><p>Like cutting-edge crypto?</p>
+</span></div></h2><div><span><p>Join us. <a href="/docs/contributor-guide.html">Become a contributor.</a></p>
+</span></div></div></div><div class="blockElement threeByGridBlock"><div class="blockContent"><h2><div><span><p>Need Status?</p>
+</span></div></h2><div><span><p>We blog. <a href="/docs/../blog/">No, really.</a></p>
+</span></div></div></div></div></div></div></div></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof M [...]
\ No newline at end of file
diff --git a/images/7000x1080&text=Slide-One.png b/images/7000x1080&text=Slide-One.png
new file mode 100644
index 0000000..a7c2736
Binary files /dev/null and b/images/7000x1080&text=Slide-One.png differ
diff --git a/images/7000x1080&text=Slide-Three.png b/images/7000x1080&text=Slide-Three.png
new file mode 100644
index 0000000..1a429e9
Binary files /dev/null and b/images/7000x1080&text=Slide-Three.png differ
diff --git a/images/7000x1080&text=Slide-Two.png b/images/7000x1080&text=Slide-Two.png
new file mode 100644
index 0000000..329971b
Binary files /dev/null and b/images/7000x1080&text=Slide-Two.png differ
diff --git a/images/MILAGRO_LOGO.svg b/images/MILAGRO_LOGO.svg
new file mode 100644
index 0000000..420fc9a
--- /dev/null
+++ b/images/MILAGRO_LOGO.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="581.8" height="117" viewBox="0 0 581.8 117"><path d="M179.1 95h-6.9L148 34.1V95h-9.9V22.9h15.7l21.9 56.3L198 22.9h15.7V95h-9.9V34.1L179.1 95zm51.5 0V22.9h9.9V95h-9.9zm26.9 0V22.9h9.9v63.2h31.301V95H257.5zm96.5 0l-5.7-15.3h-30.7L312.1 95h-10.8l27.9-72.1h8.699L365.4 95H354zm-33-24.2h24.201L333.1 37.9h-.1l-12 32.9zm87.6-6.9V55h28.2v27.4c-6.9 8.8-17.7 13.8-29.6 13.8-22 0-38.701-14.9-38.701-37.3 0-21.3 17.4-37.3 38.701-37.3 11.1 0 21 4.9 27.898 1 [...]
\ No newline at end of file
diff --git a/images/Milagro-Crypto-Library.png b/images/Milagro-Crypto-Library.png
new file mode 100644
index 0000000..7c17823
Binary files /dev/null and b/images/Milagro-Crypto-Library.png differ
diff --git a/images/Milagro-MFA.jpg b/images/Milagro-MFA.jpg
new file mode 100644
index 0000000..ef8a07e
Binary files /dev/null and b/images/Milagro-MFA.jpg differ
diff --git a/images/Milagro-TLS.jpg b/images/Milagro-TLS.jpg
new file mode 100644
index 0000000..97f3c8b
Binary files /dev/null and b/images/Milagro-TLS.jpg differ
diff --git a/images/Milagro-TLS2.png b/images/Milagro-TLS2.png
new file mode 100644
index 0000000..28531f4
Binary files /dev/null and b/images/Milagro-TLS2.png differ
diff --git a/images/apache-feather.png b/images/apache-feather.png
new file mode 100644
index 0000000..d7db4f9
Binary files /dev/null and b/images/apache-feather.png differ
diff --git a/images/apache-incubator.png b/images/apache-incubator.png
new file mode 100644
index 0000000..b37e747
Binary files /dev/null and b/images/apache-incubator.png differ
diff --git a/images/milagro-footer.png b/images/milagro-footer.png
new file mode 100644
index 0000000..e970c36
Binary files /dev/null and b/images/milagro-footer.png differ
diff --git a/images/milagro-header.png b/images/milagro-header.png
new file mode 100644
index 0000000..6beedcf
Binary files /dev/null and b/images/milagro-header.png differ
diff --git a/images/milagro-hero-inc-subheader.png b/images/milagro-hero-inc-subheader.png
new file mode 100644
index 0000000..79bf6f0
Binary files /dev/null and b/images/milagro-hero-inc-subheader.png differ
diff --git a/images/milagro-hero.png b/images/milagro-hero.png
new file mode 100644
index 0000000..9d4545a
Binary files /dev/null and b/images/milagro-hero.png differ
diff --git a/images/milagro-mfa-3-things.png b/images/milagro-mfa-3-things.png
new file mode 100644
index 0000000..2e11599
Binary files /dev/null and b/images/milagro-mfa-3-things.png differ
diff --git a/img/MILAGRO_LOGO.svg b/img/MILAGRO_LOGO.svg
new file mode 100644
index 0000000..d0172bc
--- /dev/null
+++ b/img/MILAGRO_LOGO.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="581.8" height="117" viewBox="0 0 581.8 117"><path d="M179.1 95h-6.9L148 34.1V95h-9.9V22.9h15.7l21.9 56.3L198 22.9h15.7V95h-9.9V34.1L179.1 95zm51.5 0V22.9h9.9V95h-9.9zm26.9 0V22.9h9.9v63.2h31.3V95h-41.2zm96.5 0l-5.7-15.3h-30.7L312.1 95h-10.8l27.9-72.1h8.7L365.4 95H354zm-33-24.2h24.2l-12.1-32.9h-.1l-12 32.9zm87.6-6.9V55h28.2v27.4c-6.9 8.8-17.7 13.8-29.6 13.8-22 0-38.7-14.9-38.7-37.3 0-21.3 17.4-37.3 38.7-37.3 11.1 0 21 4.9 27.9 12.8l-7 5.8c-5- [...]
\ No newline at end of file
diff --git a/img/MILAGRO_emblem.svg b/img/MILAGRO_emblem.svg
new file mode 100644
index 0000000..32afb59
--- /dev/null
+++ b/img/MILAGRO_emblem.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="90.3" height="117" viewBox="0 0 90.3 117"><path d="M85.9 105.4L1.8 66.2C.7 65.7 0 64.6 0 63.4v-49c0-2.3 2.4-3.8 4.4-2.8l84.1 39.2c1.1.5 1.8 1.6 1.8 2.8v49c0 2.3-2.3 3.8-4.4 2.8z" fill="#c2ff17"/><path d="M88.8 52.3L0 93.7v20.2c0 2.3 2.4 3.8 4.4 2.8l84.1-39.2c1.1-.5 1.8-1.6 1.8-2.8V53.6c0-.7-.2-1.3-.5-1.8-.2-.4-.6-.6-1-.9.2.2.3.4.3.7 0 .3-.1.5-.3.7z" fill="#31bca4"/><path d="M1.6 64.7l88.8-41.4V3.1C90.4.8 88-.7 86 .3L1.8 39.5C.7 40 0 41.1 0 4 [...]
\ No newline at end of file
diff --git a/img/apache-incubator-logo-small.png b/img/apache-incubator-logo-small.png
new file mode 100644
index 0000000..4186940
Binary files /dev/null and b/img/apache-incubator-logo-small.png differ
diff --git a/img/apache-logo-small.gif b/img/apache-logo-small.gif
new file mode 100644
index 0000000..aa27713
Binary files /dev/null and b/img/apache-logo-small.gif differ
diff --git a/img/apache_incubator.svg b/img/apache_incubator.svg
new file mode 100644
index 0000000..96f31fc
--- /dev/null
+++ b/img/apache_incubator.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000" viewBox="0 0 1000 1000"><path fill-rule="evenodd" clip-rule="evenodd" fill="#E4E2E1" d="M.04-.04h1000v1000H.04z"/><path fill-rule="evenodd" clip-rule="evenodd" fill="#FFF" d="M200.04 199.96h600v600h-600z"/><path fill-rule="evenodd" clip-rule="evenodd" d="M709.219 458.14h21.215v2.002h-19v11.8h17.083v2.002h-17.083v12.014h19.212v2.002h-21.427zm-68.162 0h2.215v13.845h19.085V458.14h2.215v29.82h-2.215v-13.973h-19.085v13.973h-2. [...]
\ No newline at end of file
diff --git a/img/apache_incubator_white_RGB.png b/img/apache_incubator_white_RGB.png
new file mode 100644
index 0000000..ef8e564
Binary files /dev/null and b/img/apache_incubator_white_RGB.png differ
diff --git a/img/clint.eps.jpg b/img/clint.eps.jpg
new file mode 100644
index 0000000..a0966dd
Binary files /dev/null and b/img/clint.eps.jpg differ
diff --git a/img/favicon.ico b/img/favicon.ico
new file mode 100644
index 0000000..d285af7
Binary files /dev/null and b/img/favicon.ico differ
diff --git a/img/favicon.ico-old.ico b/img/favicon.ico-old.ico
new file mode 100644
index 0000000..be74abd
Binary files /dev/null and b/img/favicon.ico-old.ico differ
diff --git a/img/feather.svg b/img/feather.svg
new file mode 100644
index 0000000..3240046
--- /dev/null
+++ b/img/feather.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2392.5 4226.6"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="-5167.096" y1="697.555" x2="-4570.116" y2="1395.619" gradientTransform="rotate(-65.001 -2052.924 -4777.854)"><stop offset="0" stop-color="#f69923"/><stop offset=".312" stop-color="#f79a23"/><stop offset=".838" stop-color="#e97826"/></linearGradient><path fill="url(#a)" d="M1798.9 20.1C1732.6 59.2 1622.5 170 1491 330.5l120.8 228c84.8-121.3 170.9-230.4 257.8-323.6 6 [...]
\ No newline at end of file
diff --git a/img/language.svg b/img/language.svg
new file mode 100644
index 0000000..6619593
--- /dev/null
+++ b/img/language.svg
@@ -0,0 +1,3 @@
+<svg class="language {{include.class}}" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20">
+  <path fill="#ffffff" d="M19.753 10.909c-.624-1.707-2.366-2.726-4.661-2.726-.09 0-.176.002-.262.006l-.016-2.063 3.525-.607c.115-.019.133-.119.109-.231-.023-.111-.167-.883-.188-.976-.027-.131-.102-.127-.207-.109-.104.018-3.25.461-3.25.461l-.013-2.078c-.001-.125-.069-.158-.194-.156l-1.025.016c-.105.002-.164.049-.162.148l.033 2.307s-3.061.527-3.144.543c-.084.014-.17.053-.151.143.019.09.19 1.094.208 1.172.018.08.072.129.188.107l2.924-.504.035 2.018c-1.077.281-1.801.824-2.256 1.303-.768.807- [...]
+</svg>
diff --git a/img/milagro.svg b/img/milagro.svg
new file mode 100644
index 0000000..32afb59
--- /dev/null
+++ b/img/milagro.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="90.3" height="117" viewBox="0 0 90.3 117"><path d="M85.9 105.4L1.8 66.2C.7 65.7 0 64.6 0 63.4v-49c0-2.3 2.4-3.8 4.4-2.8l84.1 39.2c1.1.5 1.8 1.6 1.8 2.8v49c0 2.3-2.3 3.8-4.4 2.8z" fill="#c2ff17"/><path d="M88.8 52.3L0 93.7v20.2c0 2.3 2.4 3.8 4.4 2.8l84.1-39.2c1.1-.5 1.8-1.6 1.8-2.8V53.6c0-.7-.2-1.3-.5-1.8-.2-.4-.6-.6-1-.9.2.2.3.4.3.7 0 .3-.1.5-.3.7z" fill="#31bca4"/><path d="M1.6 64.7l88.8-41.4V3.1C90.4.8 88-.7 86 .3L1.8 39.5C.7 40 0 41.1 0 4 [...]
\ No newline at end of file
diff --git a/img/oss_logo.png b/img/oss_logo.png
new file mode 100644
index 0000000..4e12efb
Binary files /dev/null and b/img/oss_logo.png differ
diff --git a/img/oss_logo2.png b/img/oss_logo2.png
new file mode 100644
index 0000000..8183e28
Binary files /dev/null and b/img/oss_logo2.png differ
diff --git a/img/undraw_code_review.svg b/img/undraw_code_review.svg
new file mode 100644
index 0000000..4fe96e4
--- /dev/null
+++ b/img/undraw_code_review.svg
@@ -0,0 +1 @@
+<svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="1126.194" height="855" viewBox="0 0 1126.194 855"><path d="M544.864 755.938C302.465 737.49 13.394 549.672 28.111 356.28S322.797-17.142 565.196 1.305 947.128 381.167 932.41 574.558s-145.148 199.827-387.547 181.38z" fill="#f2f2f2"/><ellipse cx="565.194" cy="756" rx="506" ry="31" fill="#3f3d56"/><ellipse cx="565.194" cy="755.5" rx="431" ry="20.5" opacity=".1"/><ellipse cx="212.194" cy="836.5" rx="212.194" ry="18.5" fill="#3f [...]
\ No newline at end of file
diff --git a/img/undraw_monitor.svg b/img/undraw_monitor.svg
new file mode 100644
index 0000000..72b699e
--- /dev/null
+++ b/img/undraw_monitor.svg
@@ -0,0 +1 @@
+<svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1094.72" height="788.69" viewBox="0 0 1094.72 788.69"><defs><linearGradient id="a" x1="2938.83" y1="215.4" x2="2938.83" y2="-91.93" gradientTransform="rotate(59.3 1726.545 -1812.88)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="gray" stop-opacity=".25"/><stop offset=".54" stop-color="gray" stop-opacity=".12"/><stop offset="1" stop-color="gray" stop-opacity=".1"/></ [...]
\ No newline at end of file
diff --git a/img/undraw_note_list.svg b/img/undraw_note_list.svg
new file mode 100644
index 0000000..72811ac
--- /dev/null
+++ b/img/undraw_note_list.svg
@@ -0,0 +1 @@
+<svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="974" height="805.02" viewBox="0 0 974 805.02"><path d="M974 768.75v5a19.11 19.11 0 0 1-20.91 19c-39.15-3.72-78.12-10.64-117.4-9.43-72.42 2.21-145.44 31.83-215.54 13.53-19.77-5.16-39.32-14.13-59.66-12.2-18.25 1.73-34.49 12.05-52.17 16.89C454.55 816.3 399.8 779 344.06 780.51c-36.74 1-71.92 18.89-108.62 16.9-21.27-1.14-41.53-8.92-62.28-13.71-51.66-11.94-104.86-5.27-158.09-1.13A14 14 0 0 1 0 768.64v-4.28a14 14 0 0 1 14-14l940 [...]
\ No newline at end of file
diff --git a/img/undraw_online.svg b/img/undraw_online.svg
new file mode 100644
index 0000000..c9f416c
--- /dev/null
+++ b/img/undraw_online.svg
@@ -0,0 +1 @@
+<svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1082.19" height="847.94" viewBox="0 0 1082.19 847.94"><defs><linearGradient id="a" x1="276.42" y1="818" x2="276.42" y2="60" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="gray" stop-opacity=".25"/><stop offset=".54" stop-color="gray" stop-opacity=".12"/><stop offset="1" stop-color="gray" stop-opacity=".1"/></linearGradient><linearGradient id="b" x1="891.13" y1="675.0 [...]
\ No newline at end of file
diff --git a/img/undraw_open_source.svg b/img/undraw_open_source.svg
new file mode 100644
index 0000000..8a38635
--- /dev/null
+++ b/img/undraw_open_source.svg
@@ -0,0 +1 @@
+<svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="1028" height="598.997" viewBox="0 0 1028 598.997"><circle cx="332.005" cy="292.004" r="292.004" fill="#f2f2f2"/><path d="M1028 517.997a13.69 13.69 0 0 1-.17 2.12c-7.14 43.76-234.46 78.88-513.83 78.88S7.31 563.877.17 520.117a13.675 13.675 0 0 1-.17-2.12c0-.2 0-.41.02-.61 0-.11.01-.21.01-.32a.49.49 0 0 0 .01-.12c.04-.45.1-.88.18-1.32 3.26-17.89 43.35-34.33 108.74-47.5 53.48-10.77 123.89-19.36 204.93-24.76 61.5-4.1 129.12-6. [...]
\ No newline at end of file
diff --git a/img/undraw_operating_system.svg b/img/undraw_operating_system.svg
new file mode 100644
index 0000000..76b1184
--- /dev/null
+++ b/img/undraw_operating_system.svg
@@ -0,0 +1 @@
+<svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="1100" height="806.74" viewBox="0 0 1100 806.74"><defs><linearGradient id="a" x1="459.23" y1="847.99" x2="459.23" y2="385.75" gradientTransform="translate(250.84)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="gray" stop-opacity=".25"/><stop offset=".54" stop-color="gray" stop-opacity=".12"/><stop offset="1" stop-color="gray" stop-opacity=".1"/></linearGradient></defs><ellipse cx="629.72" cy="780.56" rx="122. [...]
\ No newline at end of file
diff --git a/img/undraw_react.svg b/img/undraw_react.svg
new file mode 100644
index 0000000..ce14b93
--- /dev/null
+++ b/img/undraw_react.svg
@@ -0,0 +1 @@
+<svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="1108" height="731.18" viewBox="0 0 1108 731.18"><path d="M767.68 330.79l6.89-2.7c.66-.26 1.31-.54 2-.81a59.85 59.85 0 0 1 15.28-115.77l-4.8 24.2 18.22-23.92h.16a59.87 59.87 0 0 1 51.16 67.45c-.15 1.13-.39 2.23-.6 3.34 5.61-4.43 10.87-9.32 14.81-15 8-11.54 10.71-25.76 13.47-43.17 5.47-34.48 10.4-69.34 14.84-104.18a59.83 59.83 0 0 1-42-65.36c.25-1.82.6-3.59 1-5.34.1-.44.2-.88.31-1.31.43-1.69.91-3.35 1.47-5 .09-.27.21-.52.3- [...]
\ No newline at end of file
diff --git a/img/undraw_tweetstorm.svg b/img/undraw_tweetstorm.svg
new file mode 100644
index 0000000..491c9b2
--- /dev/null
+++ b/img/undraw_tweetstorm.svg
@@ -0,0 +1 @@
+<svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="813.15" height="752" viewBox="0 0 813.15 752"><path fill="#e0e0e0" d="M559.73 403.7l-211.87-51.03V752l211.87-55.46V403.7z"/><path opacity=".1" d="M559.73 403.7l-211.87-51.03V752l211.87-55.46V403.7z"/><path fill="#e0e0e0" d="M135.99 403.7l211.87-51.03V752l-211.87-54.35V403.7z"/><path opacity=".17" d="M135.99 401.93l211.87-51.02V752l-211.87-54.35V401.93z"/><path fill="#e0e0e0" d="M346.09 354.44l111.59-92.73 211.86 54.36-111 [...]
\ No newline at end of file
diff --git a/img/undraw_youtube_tutorial.svg b/img/undraw_youtube_tutorial.svg
new file mode 100644
index 0000000..98bdd9d
--- /dev/null
+++ b/img/undraw_youtube_tutorial.svg
@@ -0,0 +1 @@
+<svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="1130" height="831.56" viewBox="0 0 1130 831.56"><defs><linearGradient id="a" x1="321.68" y1="857.11" x2="321.68" y2="447.21" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="gray" stop-opacity=".25"/><stop offset=".54" stop-color="gray" stop-opacity=".12"/><stop offset="1" stop-color="gray" stop-opacity=".1"/></linearGradient></defs><path d="M656.54 124.69C584.1 122.18 515.1 98.78 449.22 73.2S318.07 19.27 247.3 [...]
\ No newline at end of file
diff --git a/img/words.eps.jpg b/img/words.eps.jpg
new file mode 100644
index 0000000..f197e6e
Binary files /dev/null and b/img/words.eps.jpg differ
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..e28a92c
--- /dev/null
+++ b/index.html
@@ -0,0 +1,14 @@
+<!DOCTYPE HTML>
+<html lang="en-US">
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/users.html">
+    <script type="text/javascript">
+      window.location.href = '/users.html';
+    </script>
+    <title>Apache Milagro is core security infrastructure and crypto libraries for decentralized networks and distributed systems.</title>
+  </head>
+  <body>
+    If you are not redirected automatically, follow this <a href="/users.html">link</a>.
+  </body>
+</html>
\ No newline at end of file
diff --git a/index.js-old.html b/index.js-old.html
new file mode 100644
index 0000000..e301593
--- /dev/null
+++ b/index.js-old.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html><html lang=""><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Milagro · Core security infrastructure for decentralized networks</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Core security infrastructure for decentralized networks"/><meta property="og:title" content="Apache Milagro · Core security infrastructure for decentralized netwo [...]
+</span></div></h2><div><span><p>This is the content of my feature</p>
+</span></div></div></div><div class="blockElement alignCenter fourByGridBlock imageAlignTop"><div class="blockImage"><img src="/img/undraw_operating_system.svg"/></div><div class="blockContent"><h2><div><span><p>Decentralized custody of digital assets</p>
+</span></div></h2><div><span><p>The content of my second feature</p>
+</span></div></div></div></div></div></div><div class="productShowcaseSection paddingBottom" style="text-align:center"><h2>Milagro Server</h2><div><span><p>These are features of this project</p>
+</span></div></div><div class="container lightBackground paddingBottom paddingTop"><div class="wrapper"><div class="gridBlock"><div class="blockElement alignCenter imageAlignSide imageAlignRight twoByGridBlock"><div class="blockContent"><h2><div><span><p>Randomly Generated Theme Colors</p>
+</span></div></h2><div><span><p>Each new Docusaurus project has <strong>randomly-generated</strong> theme colors.</p>
+</span></div></div><div class="blockImage"><img src="/img/undraw_youtube_tutorial.svg"/></div></div></div></div></div><div class="container paddingBottom paddingTop" id="try"><div class="wrapper"><div class="gridBlock"><div class="blockElement alignCenter imageAlignSide imageAlignLeft twoByGridBlock"><div class="blockImage"><img src="/img/undraw_code_review.svg"/></div><div class="blockContent"><h2><div><span><p>Wonderful SVG Illustrations</p>
+</span></div></h2><div><span><p>To make your landing page more attractive, use illustrations! Check out <a href="https://undraw.co/"><strong>unDraw</strong></a> which provides you with customizable illustrations which are free to use. The illustrations you see on this page are from unDraw.</p>
+</span></div></div></div></div></div></div></div></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof M [...]
\ No newline at end of file
diff --git a/index.js-old/index.html b/index.js-old/index.html
new file mode 100644
index 0000000..e301593
--- /dev/null
+++ b/index.js-old/index.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html><html lang=""><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Milagro · Core security infrastructure for decentralized networks</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Core security infrastructure for decentralized networks"/><meta property="og:title" content="Apache Milagro · Core security infrastructure for decentralized netwo [...]
+</span></div></h2><div><span><p>This is the content of my feature</p>
+</span></div></div></div><div class="blockElement alignCenter fourByGridBlock imageAlignTop"><div class="blockImage"><img src="/img/undraw_operating_system.svg"/></div><div class="blockContent"><h2><div><span><p>Decentralized custody of digital assets</p>
+</span></div></h2><div><span><p>The content of my second feature</p>
+</span></div></div></div></div></div></div><div class="productShowcaseSection paddingBottom" style="text-align:center"><h2>Milagro Server</h2><div><span><p>These are features of this project</p>
+</span></div></div><div class="container lightBackground paddingBottom paddingTop"><div class="wrapper"><div class="gridBlock"><div class="blockElement alignCenter imageAlignSide imageAlignRight twoByGridBlock"><div class="blockContent"><h2><div><span><p>Randomly Generated Theme Colors</p>
+</span></div></h2><div><span><p>Each new Docusaurus project has <strong>randomly-generated</strong> theme colors.</p>
+</span></div></div><div class="blockImage"><img src="/img/undraw_youtube_tutorial.svg"/></div></div></div></div></div><div class="container paddingBottom paddingTop" id="try"><div class="wrapper"><div class="gridBlock"><div class="blockElement alignCenter imageAlignSide imageAlignLeft twoByGridBlock"><div class="blockImage"><img src="/img/undraw_code_review.svg"/></div><div class="blockContent"><h2><div><span><p>Wonderful SVG Illustrations</p>
+</span></div></h2><div><span><p>To make your landing page more attractive, use illustrations! Check out <a href="https://undraw.co/"><strong>unDraw</strong></a> which provides you with customizable illustrations which are free to use. The illustrations you see on this page are from unDraw.</p>
+</span></div></div></div></div></div></div></div></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof M [...]
\ No newline at end of file
diff --git a/js/codetabs.js b/js/codetabs.js
new file mode 100644
index 0000000..dd01ebf
--- /dev/null
+++ b/js/codetabs.js
@@ -0,0 +1,31 @@
+/**
+ * Copyright (c) 2017-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+// Turn off ESLint for this file because it's sent down to users as-is.
+/* eslint-disable */
+window.addEventListener('load', function() {
+  // add event listener for all tab
+  document.querySelectorAll('.nav-link').forEach(function(el) {
+    el.addEventListener('click', function(e) {
+      const groupId = e.target.getAttribute('data-group');
+      document
+        .querySelectorAll(`.nav-link[data-group=${groupId}]`)
+        .forEach(function(el) {
+          el.classList.remove('active');
+        });
+      document
+        .querySelectorAll(`.tab-pane[data-group=${groupId}]`)
+        .forEach(function(el) {
+          el.classList.remove('active');
+        });
+      e.target.classList.add('active');
+      document
+        .querySelector(`#${e.target.getAttribute('data-tab')}`)
+        .classList.add('active');
+    });
+  });
+});
diff --git a/js/scrollSpy.js b/js/scrollSpy.js
new file mode 100644
index 0000000..9d39a7c
--- /dev/null
+++ b/js/scrollSpy.js
@@ -0,0 +1,66 @@
+/**
+ * Copyright (c) 2017-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* eslint-disable prefer-arrow-callback */
+(function scrollSpy() {
+  const OFFSET = 10;
+  let timer;
+  let headingsCache;
+  const findHeadings = function findHeadings() {
+    return headingsCache || document.querySelectorAll('.toc-headings > li > a');
+  };
+  const onScroll = function onScroll() {
+    if (timer) {
+      // throttle
+      return;
+    }
+    timer = setTimeout(function() {
+      timer = null;
+      let activeNavFound = false;
+      const headings = findHeadings(); // toc nav anchors
+      /**
+       * On every call, try to find header right after  <-- next header
+       * the one whose content is on the current screen <-- highlight this
+       */
+      for (let i = 0; i < headings.length; i++) {
+        // headings[i] is current element
+        // if an element is already active, then current element is not active
+        // if no element is already active, then current element is active
+        let currNavActive = !activeNavFound;
+        /**
+         * Enter the following check up only when an active nav header is not yet found
+         * Then, check the bounding rectangle of the next header
+         * The headers that are scrolled passed will have negative bounding rect top
+         * So the first one with positive bounding rect top will be the nearest next header
+         */
+        if (currNavActive && i < headings.length - 1) {
+          const next = headings[i + 1].href.split('#')[1];
+          const nextHeader = document.getElementById(next);
+          const top = nextHeader.getBoundingClientRect().top;
+          currNavActive = top > OFFSET;
+        }
+        /**
+         * Stop searching once a first such header is found,
+         * this makes sure the highlighted header is the most current one
+         */
+        if (currNavActive) {
+          activeNavFound = true;
+          headings[i].classList.add('active');
+        } else {
+          headings[i].classList.remove('active');
+        }
+      }
+    }, 100);
+  };
+  document.addEventListener('scroll', onScroll);
+  document.addEventListener('resize', onScroll);
+  document.addEventListener('DOMContentLoaded', function() {
+    // Cache the headings once the page has fully loaded.
+    headingsCache = findHeadings();
+    onScroll();
+  });
+})();
diff --git a/sitemap.xml b/sitemap.xml
new file mode 100644
index 0000000..95fef0c
--- /dev/null
+++ b/sitemap.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:mobile="http://www.google.com/schemas/sitemap-mobile/1.0" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">
+<url> <loc>https://milagro.apache.org/help</loc> <changefreq>weekly</changefreq> <priority>0.5</priority> <xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/en/help" /> </url>
+<url> <loc>https://milagro.apache.org/index.js-old</loc> <changefreq>weekly</changefreq> <priority>0.5</priority> <xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/en/index.js-old" /> </url>
+<url> <loc>https://milagro.apache.org/users</loc> <changefreq>weekly</changefreq> <priority>0.5</priority> <xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/en/users" /> </url>
+<url> <loc>https://milagro.apache.org/blog/2019/06/10/miss-me</loc> <changefreq>weekly</changefreq> <priority>0.3</priority> </url>
+<url> <loc>https://milagro.apache.org/docs/amcl-c-api</loc> <changefreq>hourly</changefreq> <priority>1.0</priority> <xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/amcl-c-api" /> </url>
+<url> <loc>https://milagro.apache.org/docs/amcl-javascript-api</loc> <changefreq>hourly</changefreq> <priority>1.0</priority> <xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/amcl-javascript-api" /> </url>
+<url> <loc>https://milagro.apache.org/docs/amcl-overview</loc> <changefreq>hourly</changefreq> <priority>1.0</priority> <xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/amcl-overview" /> </url>
+<url> <loc>https://milagro.apache.org/docs/contributor-guide</loc> <changefreq>hourly</changefreq> <priority>1.0</priority> <xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/contributor-guide" /> </url>
+<url> <loc>https://milagro.apache.org/docs/d-ta-api</loc> <changefreq>hourly</changefreq> <priority>1.0</priority> <xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/d-ta-api" /> </url>
+<url> <loc>https://milagro.apache.org/docs/d-ta-overview</loc> <changefreq>hourly</changefreq> <priority>1.0</priority> <xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/d-ta-overview" /> </url>
+<url> <loc>https://milagro.apache.org/docs/doc2</loc> <changefreq>hourly</changefreq> <priority>1.0</priority> <xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/doc2" /> </url>
+<url> <loc>https://milagro.apache.org/docs/doc3</loc> <changefreq>hourly</changefreq> <priority>1.0</priority> <xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/doc3" /> </url>
+<url> <loc>https://milagro.apache.org/docs/milagro-crypto</loc> <changefreq>hourly</changefreq> <priority>1.0</priority> <xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/milagro-crypto" /> </url>
+<url> <loc>https://milagro.apache.org/docs/milagro-design</loc> <changefreq>hourly</changefreq> <priority>1.0</priority> <xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/milagro-design" /> </url>
+<url> <loc>https://milagro.apache.org/docs/milagro-intro</loc> <changefreq>hourly</changefreq> <priority>1.0</priority> <xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/milagro-intro" /> </url>
+<url> <loc>https://milagro.apache.org/docs/milagro-protocols</loc> <changefreq>hourly</changefreq> <priority>1.0</priority> <xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/milagro-protocols" /> </url>
+<url> <loc>https://milagro.apache.org/docs/zkp-mfa-api</loc> <changefreq>hourly</changefreq> <priority>1.0</priority> <xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/zkp-mfa-api" /> </url>
+<url> <loc>https://milagro.apache.org/docs/zkp-mfa-overview</loc> <changefreq>hourly</changefreq> <priority>1.0</priority> <xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/zkp-mfa-overview" /> </url>
+</urlset>
\ No newline at end of file
diff --git a/swagger/README.md b/swagger/README.md
new file mode 100644
index 0000000..e69de29
diff --git a/swagger/favicon-16x16.png b/swagger/favicon-16x16.png
new file mode 100644
index 0000000..0afbcae
Binary files /dev/null and b/swagger/favicon-16x16.png differ
diff --git a/swagger/favicon-32x32.png b/swagger/favicon-32x32.png
new file mode 100644
index 0000000..249737f
Binary files /dev/null and b/swagger/favicon-32x32.png differ
diff --git a/swagger/index.html b/swagger/index.html
new file mode 100755
index 0000000..9a4cfb4
--- /dev/null
+++ b/swagger/index.html
@@ -0,0 +1,60 @@
+<!-- HTML for static distribution bundle build -->
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8">
+    <title>Swagger UI</title>
+    <link rel="stylesheet" type="text/css" href="./swagger-ui.css" >
+    <link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32" />
+    <link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16" />
+    <style>
+      html
+      {
+        box-sizing: border-box;
+        overflow: -moz-scrollbars-vertical;
+        overflow-y: scroll;
+      }
+
+      *,
+      *:before,
+      *:after
+      {
+        box-sizing: inherit;
+      }
+
+      body
+      {
+        margin:0;
+        background: #fafafa;
+      }
+    </style>
+  </head>
+
+  <body>
+    <div id="swagger-ui"></div>
+
+    <script src="./swagger-ui-bundle.js"> </script>
+    <script src="./swagger-ui-standalone-preset.js"> </script>
+    <script>
+    window.onload = function() {
+      // Begin Swagger UI call region
+      const ui = SwaggerUIBundle({        
+        url: "https://raw.githubusercontent.com/apache/incubator-milagro-dta/master/open-api.yaml",
+        dom_id: '#swagger-ui',
+        deepLinking: true,
+        presets: [
+          SwaggerUIBundle.presets.apis,
+          SwaggerUIStandalonePreset
+        ],
+        plugins: [
+          SwaggerUIBundle.plugins.DownloadUrl
+        ],
+        layout: "StandaloneLayout"
+      })
+      // End Swagger UI call region
+
+      window.ui = ui
+    }
+  </script>
+  </body>
+</html>
diff --git a/swagger/oauth2-redirect.html b/swagger/oauth2-redirect.html
new file mode 100755
index 0000000..fb68399
--- /dev/null
+++ b/swagger/oauth2-redirect.html
@@ -0,0 +1,67 @@
+<!doctype html>
+<html lang="en-US">
+<body onload="run()">
+</body>
+</html>
+<script>
+    'use strict';
+    function run () {
+        var oauth2 = window.opener.swaggerUIRedirectOauth2;
+        var sentState = oauth2.state;
+        var redirectUrl = oauth2.redirectUrl;
+        var isValid, qp, arr;
+
+        if (/code|token|error/.test(window.location.hash)) {
+            qp = window.location.hash.substring(1);
+        } else {
+            qp = location.search.substring(1);
+        }
+
+        arr = qp.split("&")
+        arr.forEach(function (v,i,_arr) { _arr[i] = '"' + v.replace('=', '":"') + '"';})
+        qp = qp ? JSON.parse('{' + arr.join() + '}',
+                function (key, value) {
+                    return key === "" ? value : decodeURIComponent(value)
+                }
+        ) : {}
+
+        isValid = qp.state === sentState
+
+        if ((
+          oauth2.auth.schema.get("flow") === "accessCode"||
+          oauth2.auth.schema.get("flow") === "authorizationCode"
+        ) && !oauth2.auth.code) {
+            if (!isValid) {
+                oauth2.errCb({
+                    authId: oauth2.auth.name,
+                    source: "auth",
+                    level: "warning",
+                    message: "Authorization may be unsafe, passed state was changed in server Passed state wasn't returned from auth server"
+                });
+            }
+
+            if (qp.code) {
+                delete oauth2.state;
+                oauth2.auth.code = qp.code;
+                oauth2.callback({auth: oauth2.auth, redirectUrl: redirectUrl});
+            } else {
+                let oauthErrorMsg
+                if (qp.error) {
+                    oauthErrorMsg = "["+qp.error+"]: " +
+                        (qp.error_description ? qp.error_description+ ". " : "no accessCode received from the server. ") +
+                        (qp.error_uri ? "More info: "+qp.error_uri : "");
+                }
+
+                oauth2.errCb({
+                    authId: oauth2.auth.name,
+                    source: "auth",
+                    level: "error",
+                    message: oauthErrorMsg || "[Authorization failed]: no accessCode received from the server"
+                });
+            }
+        } else {
+            oauth2.callback({auth: oauth2.auth, token: qp, isValid: isValid, redirectUrl: redirectUrl});
+        }
+        window.close();
+    }
+</script>
diff --git a/swagger/swagger-ui-bundle.js b/swagger/swagger-ui-bundle.js
new file mode 100755
index 0000000..30e0b81
--- /dev/null
+++ b/swagger/swagger-ui-bundle.js
@@ -0,0 +1,100 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.SwaggerUIBundle=t():e.SwaggerUIBundle=t()}("undefined"!=typeof self?self:this,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e, [...]
+/*
+object-assign
+(c) Sindre Sorhus
+@license MIT
+*/var r=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map(function(e){return t[e]}).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach(function(e){r[e]=e}),"abcdefghijkl [...]
+/*!
+ * The buffer module from node.js, for the browser.
+ *
+ * @author   Feross Aboukhadijeh <fe...@feross.org> <http://feross.org>
+ * @license  MIT
+ */
+var r=n(528),o=n(529),i=n(262);function a(){return s.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function u(e,t){if(a()<t)throw new RangeError("Invalid typed array length");return s.TYPED_ARRAY_SUPPORT?(e=new Uint8Array(t)).__proto__=s.prototype:(null===e&&(e=new s(t)),e.length=t),e}function s(e,t,n){if(!(s.TYPED_ARRAY_SUPPORT||this instanceof s))return new s(e,t,n);if("number"==typeof e){if("string"==typeof t)throw new Error("If encoding is specified then the first argument must be a stri [...]
+/*!
+  Copyright (c) 2016 Jed Watson.
+  Licensed under the MIT License (MIT), see
+  http://jedwatson.github.io/classnames
+*/
+/*!
+  Copyright (c) 2016 Jed Watson.
+  Licensed under the MIT License (MIT), see
+  http://jedwatson.github.io/classnames
+*/
+!function(){"use strict";var n={}.hasOwnProperty;function o(){for(var e=[],t=0;t<arguments.length;t++){var r=arguments[t];if(r){var i=typeof r;if("string"===i||"number"===i)e.push(r);else if(Array.isArray(r))e.push(o.apply(null,r));else if("object"===i)for(var a in r)n.call(r,a)&&r[a]&&e.push(a)}}return e.join(" ")}void 0!==e&&e.exports?e.exports=o:void 0===(r=function(){return o}.apply(t,[]))||(e.exports=r)}()},function(e,t){e.exports=!0},function(e,t,n){var r=n(161),o=Math.min;e.export [...]
+/*!
+ * @description Recursive object extending
+ * @author Viacheslav Lotsmanov <lo...@gmail.com>
+ * @license MIT
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2013-2018 Viacheslav Lotsmanov
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ * the Software, and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+function n(e){return e instanceof t||e instanceof Date||e instanceof RegExp}function r(e){if(e instanceof t){var n=t.alloc?t.alloc(e.length):new t(e.length);return e.copy(n),n}if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp)return new RegExp(e);throw new Error("Unexpected situation")}function o(e,t){return"__proto__"===t?void 0:e[t]}var i=e.exports=function(){if(arguments.length<1||"object"!=typeof arguments[0])return!1;if(arguments.length<2)return arguments[0];v [...]
+/**
+ * Checks if an event is supported in the current execution environment.
+ *
+ * NOTE: This will not work correctly for non-generic events such as `change`,
+ * `reset`, `load`, `error`, and `select`.
+ *
+ * Borrows from Modernizr.
+ *
+ * @param {string} eventNameSuffix Event name, e.g. "click".
+ * @param {?boolean} capture Check if the capture phase is supported.
+ * @return {boolean} True if the event is supported.
+ * @internal
+ * @license Modernizr 3.0.0pre (Custom Build) | MIT
+ */,e.exports=function(e,t){if(!o.canUseDOM||t&&!("addEventListener"in document))return!1;var n="on"+e,i=n in document;if(!i){var a=document.createElement("div");a.setAttribute(n,"return;"),i="function"==typeof a[n]}return!i&&r&&"wheel"===e&&(i=document.implementation.hasFeature("Events.wheel","3.0")),i}},function(e,t,n){"use strict";var r={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function o(e){var t=this.nativeEvent;if(t.getModifierState)return t.getModifierState( [...]
+/*!
+ * https://github.com/Starcounter-Jack/JSON-Patch
+ * (c) 2017 Joachim Wester
+ * MIT license
+ */
+var n=this&&this.__extends||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);function r(){this.constructor=e}e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)},r=Object.prototype.hasOwnProperty;function o(e,t){return r.call(e,t)}function i(e){if(Array.isArray(e)){for(var t=new Array(e.length),n=0;n<t.length;n++)t[n]=""+n;return t}if(Object.keys)return Object.keys(e);t=[];for(var r in e)o(e,r)&&t.push(r);return t}function a(e){return-1===e.indexOf("/")&&-1 [...]
+/*!
+ * https://github.com/Starcounter-Jack/JSON-Patch
+ * (c) 2017 Joachim Wester
+ * MIT license
+ */
+var r=n(231),o=n(390),i=n(390);t.applyOperation=i.applyOperation,t.applyPatch=i.applyPatch,t.applyReducer=i.applyReducer,t.getValueByPointer=i.getValueByPointer,t.validate=i.validate,t.validator=i.validator;var a=n(231);t.JsonPatchError=a.PatchError,t.deepClone=a._deepClone,t.escapePathComponent=a.escapePathComponent,t.unescapePathComponent=a.unescapePathComponent;var u=new WeakMap,s=function(){return function(e){this.observers=new Map,this.obj=e}}(),l=function(){return function(e,t){thi [...]
+/*!
+ * cookie
+ * Copyright(c) 2012-2014 Roman Shtylman
+ * Copyright(c) 2015 Douglas Christopher Wilson
+ * MIT Licensed
+ */t.parse=function(e,t){if("string"!=typeof e)throw new TypeError("argument str must be a string");for(var n={},o=t||{},a=e.split(i),s=o.decode||r,l=0;l<a.length;l++){var c=a[l],f=c.indexOf("=");if(!(f<0)){var p=c.substr(0,f).trim(),d=c.substr(++f,c.length).trim();'"'==d[0]&&(d=d.slice(1,-1)),void 0==n[p]&&(n[p]=u(d,s))}}return n},t.serialize=function(e,t,n){var r=n||{},i=r.encode||o;if("function"!=typeof i)throw new TypeError("option encode is invalid");if(!a.test(e))throw new TypeErro [...]
+/*!
+ * repeat-string <https://github.com/jonschlinkert/repeat-string>
+ *
+ * Copyright (c) 2014-2015, Jon Schlinkert.
+ * Licensed under the MIT License.
+ */var r,o="";e.exports=function(e,t){if("string"!=typeof e)throw new TypeError("expected a string");if(1===t)return e;if(2===t)return e+e;var n=e.length*t;if(r!==e||void 0===r)r=e,o="";else if(o.length>=n)return o.substr(0,n);for(;n>o.length&&t>1;)1&t&&(o+=e),t>>=1,e+=e;return o=(o+=e).substr(0,n)}},function(e,t,n){var r=n(55);e.exports=function(e){return r(e).toLowerCase()}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=f(n(4)),o=f(n(2)),i=f(n(3)), [...]
+/*!
+ * Autolinker.js
+ * 0.15.3
+ *
+ * Copyright(c) 2015 Gregory Jacobs <gr...@greg-jacobs.com>
+ * MIT Licensed. http://www.opensource.org/licenses/mit-license.php
+ *
+ * https://github.com/gregjacobs/Autolinker.js
+ */
+var e,t,n,r,o=function(e){o.Util.assign(this,e)};return o.prototype={constructor:o,urls:!0,email:!0,twitter:!0,newWindow:!0,stripPrefix:!0,truncate:void 0,className:"",htmlParser:void 0,matchParser:void 0,tagBuilder:void 0,link:function(e){for(var t=this.getHtmlParser().parse(e),n=0,r=[],o=0,i=t.length;o<i;o++){var a=t[o],u=a.getType(),s=a.getText();if("element"===u)"a"===a.getTagName()&&(a.isClosing()?n=Math.max(n-1,0):n++),r.push(s);else if("entity"===u)r.push(s);else if(0===n){var l=t [...]
+//# sourceMappingURL=swagger-ui-bundle.js.map
\ No newline at end of file
diff --git a/swagger/swagger-ui-bundle.js.map b/swagger/swagger-ui-bundle.js.map
new file mode 100755
index 0000000..01fe314
--- /dev/null
+++ b/swagger/swagger-ui-bundle.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 19203fb7b00b076abfac","webpack:///./node_modules/react/react.js","webpack:///./node_modules/prop-types/index.js","webpack:///./node_modules/babel-runtime/helpers/classCallCheck.js","webpack:///./node_modules/babel-runtime/helpers/createClass.js","webpack:///./node_modules/babel-runtime/core-js/object/get-prototype-of.js","webpack:///./node_modules/babel-runtime/helpers/possibleConstructor [...]
\ No newline at end of file
diff --git a/swagger/swagger-ui-standalone-preset.js b/swagger/swagger-ui-standalone-preset.js
new file mode 100755
index 0000000..1b0d640
--- /dev/null
+++ b/swagger/swagger-ui-standalone-preset.js
@@ -0,0 +1,14 @@
+!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.SwaggerUIStandalonePreset=e():t.SwaggerUIStandalonePreset=e()}("undefined"!=typeof self?self:this,function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Obje [...]
+/*
+object-assign
+(c) Sindre Sorhus
+@license MIT
+*/var r=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;t.exports=function(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de","5"===Object.getOwnPropertyNames(t)[0])return!1;for(var e={},n=0;n<10;n++)e["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(e).map(function(t){return e[t]}).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach(function(t){r[t]=t}),"abcdefghijkl [...]
+/*!
+ * The buffer module from node.js, for the browser.
+ *
+ * @author   Feross Aboukhadijeh <fe...@feross.org> <http://feross.org>
+ * @license  MIT
+ */
+var r=n(325),i=n(326),o=n(167);function u(){return s.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function a(t,e){if(u()<e)throw new RangeError("Invalid typed array length");return s.TYPED_ARRAY_SUPPORT?(t=new Uint8Array(e)).__proto__=s.prototype:(null===t&&(t=new s(e)),t.length=e),t}function s(t,e,n){if(!(s.TYPED_ARRAY_SUPPORT||this instanceof s))return new s(t,e,n);if("number"==typeof t){if("string"==typeof e)throw new Error("If encoding is specified then the first argument must be a stri [...]
+//# sourceMappingURL=swagger-ui-standalone-preset.js.map
\ No newline at end of file
diff --git a/swagger/swagger-ui-standalone-preset.js.map b/swagger/swagger-ui-standalone-preset.js.map
new file mode 100755
index 0000000..2d57708
--- /dev/null
+++ b/swagger/swagger-ui-standalone-preset.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 8cd1fb190fc7f82ae5fe","webpack:///./node_modules/@kyleshockey/js-yaml/lib/js-yaml/type.js","webpack:///./node_modules/core-js/modules/_wks.js","webpack:///./node_modules/core-js/library/modules/_core.js","webpack:///./node_modules/core-js/modules/_export.js","webpack:///./node_modules/core-js/modules/_string-html.js","webpack:///./node_modules/core-js/modules/_global.js","webpack:///./nod [...]
\ No newline at end of file
diff --git a/swagger/swagger-ui.css.map b/swagger/swagger-ui.css.map
new file mode 100755
index 0000000..3e2402c
--- /dev/null
+++ b/swagger/swagger-ui.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":[],"names":[],"mappings":"","file":"swagger-ui.css","sourceRoot":""}
\ No newline at end of file
diff --git a/swagger/swagger-ui.js b/swagger/swagger-ui.js
new file mode 100755
index 0000000..cd0a82b
--- /dev/null
+++ b/swagger/swagger-ui.js
@@ -0,0 +1,9 @@
+(function webpackUniversalModuleDefinition(root,factory){if(typeof exports==="object"&&typeof module==="object")module.exports=factory();else if(typeof define==="function"&&define.amd)define([],factory);else if(typeof exports==="object")exports["SwaggerUICore"]=factory();else root["SwaggerUICore"]=factory()})(typeof self!=="undefined"?self:this,function(){return function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId]){return installe [...]
+/*!
+ * The buffer module from node.js, for the browser.
+ *
+ * @author   Feross Aboukhadijeh <fe...@feross.org> <http://feross.org>
+ * @license  MIT
+ */
+var base64=__webpack_require__(383);var ieee754=__webpack_require__(384);var isArray=__webpack_require__(385);exports.Buffer=Buffer;exports.SlowBuffer=SlowBuffer;exports.INSPECT_MAX_BYTES=50;Buffer.TYPED_ARRAY_SUPPORT=global.TYPED_ARRAY_SUPPORT!==undefined?global.TYPED_ARRAY_SUPPORT:typedArraySupport();exports.kMaxLength=kMaxLength();function typedArraySupport(){try{var arr=new Uint8Array(1);arr.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}};return arr.foo()===42&&t [...]
+//# sourceMappingURL=swagger-ui.js.map
\ No newline at end of file
diff --git a/swagger/swagger-ui.js.map b/swagger/swagger-ui.js.map
new file mode 100755
index 0000000..78b63d5
--- /dev/null
+++ b/swagger/swagger-ui.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 6cb5c7f86a6d6e7d420d","webpack:///external \"react\"","webpack:///external \"prop-types\"","webpack:///./node_modules/babel-runtime/helpers/classCallCheck.js","webpack:///./node_modules/babel-runtime/helpers/createClass.js","webpack:///./node_modules/babel-runtime/core-js/object/get-prototype-of.js","webpack:///./node_modules/babel-runtime/helpers/possibleConstructorReturn.js","webpack:// [...]
\ No newline at end of file
diff --git a/users.html b/users.html
new file mode 100644
index 0000000..3d9e290
--- /dev/null
+++ b/users.html
@@ -0,0 +1 @@
+<!DOCTYPE html><html lang=""><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Milagro · Core security infrastructure for decentralized networks</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Core security infrastructure for decentralized networks"/><meta property="og:title" content="Apache Milagro · Core security infrastructure for decentralized netwo [...]
\ No newline at end of file
diff --git a/users/index.html b/users/index.html
new file mode 100644
index 0000000..3d9e290
--- /dev/null
+++ b/users/index.html
@@ -0,0 +1 @@
+<!DOCTYPE html><html lang=""><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Milagro · Core security infrastructure for decentralized networks</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Core security infrastructure for decentralized networks"/><meta property="og:title" content="Apache Milagro · Core security infrastructure for decentralized netwo [...]
\ No newline at end of file


[incubator-milagro] 01/02: removing asf-site files

Posted by br...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

brianspector pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/incubator-milagro.git

commit 80baac4e82ca865e1933190ec1ba922a66798d17
Author: Brian Spector <br...@apache.org>
AuthorDate: Wed Jun 26 23:26:51 2019 +0100

    removing asf-site files
---
 blog/2019/06/10/miss-me.html                |  59 --
 blog/2019/06/10/miss-me/index.html          |  59 --
 blog/atom.xml                               |  23 -
 blog/feed.xml                               |  24 -
 blog/index.html                             |  59 --
 css/main.css                                |   2 -
 css/prism.css                               | 115 ----
 docs/amcl-c-api.html                        |  71 ---
 docs/amcl-c-api/index.html                  |  71 ---
 docs/amcl-javascript-api.html               |  79 ---
 docs/amcl-javascript-api/index.html         |  79 ---
 docs/amcl-overview.html                     | 163 ------
 docs/amcl-overview/index.html               | 163 ------
 docs/contributor-guide.html                 |  64 ---
 docs/contributor-guide/index.html           |  64 ---
 docs/d-ta-api.html                          |  80 ---
 docs/d-ta-api/index.html                    |  80 ---
 docs/d-ta-overview.html                     |  79 ---
 docs/d-ta-overview/index.html               |  79 ---
 docs/doc2.html                              |   5 -
 docs/doc2/index.html                        |   5 -
 docs/doc3.html                              |   8 -
 docs/doc3/index.html                        |   8 -
 docs/milagro-crypto.html                    | 128 -----
 docs/milagro-crypto/index.html              | 128 -----
 docs/milagro-design.html                    | 147 -----
 docs/milagro-design/index.html              | 147 -----
 docs/milagro-intro.html                     | 128 -----
 docs/milagro-intro/index.html               | 128 -----
 docs/milagro-protocols.html                 | 864 ----------------------------
 docs/milagro-protocols/index.html           | 864 ----------------------------
 docs/zkp-mfa-api.html                       |  79 ---
 docs/zkp-mfa-api/index.html                 |  79 ---
 docs/zkp-mfa-overview.html                  |  79 ---
 docs/zkp-mfa-overview/index.html            |  79 ---
 en/help.html                                |   7 -
 en/help/index.html                          |   7 -
 en/index.js-old.html                        |  10 -
 en/index.js-old/index.html                  |  10 -
 en/users.html                               |   1 -
 en/users.js.old                             |  48 --
 en/users/index.html                         |   1 -
 files/ApacheCon_12_May.pdf                  | Bin 4433623 -> 0 bytes
 help.html                                   |   7 -
 help/index.html                             |   7 -
 images/7000x1080&text=Slide-One.png         | Bin 227858 -> 0 bytes
 images/7000x1080&text=Slide-Three.png       | Bin 329669 -> 0 bytes
 images/7000x1080&text=Slide-Two.png         | Bin 330930 -> 0 bytes
 images/MILAGRO_LOGO.svg                     |   1 -
 images/Milagro-Crypto-Library.png           | Bin 74986 -> 0 bytes
 images/Milagro-MFA.jpg                      | Bin 101299 -> 0 bytes
 images/Milagro-TLS.jpg                      | Bin 92822 -> 0 bytes
 images/Milagro-TLS2.png                     | Bin 38235 -> 0 bytes
 images/apache-feather.png                   | Bin 8614 -> 0 bytes
 images/apache-incubator.png                 | Bin 5606 -> 0 bytes
 images/milagro-footer.png                   | Bin 1701 -> 0 bytes
 images/milagro-header.png                   | Bin 1542 -> 0 bytes
 images/milagro-hero-inc-subheader.png       | Bin 7016 -> 0 bytes
 images/milagro-hero.png                     | Bin 4141 -> 0 bytes
 images/milagro-mfa-3-things.png             | Bin 74690 -> 0 bytes
 img/MILAGRO_LOGO.svg                        |   1 -
 img/MILAGRO_emblem.svg                      |   1 -
 img/apache-incubator-logo-small.png         | Bin 7694 -> 0 bytes
 img/apache-logo-small.gif                   | Bin 7129 -> 0 bytes
 img/apache_incubator.svg                    |   1 -
 img/apache_incubator_white_RGB.png          | Bin 12736 -> 0 bytes
 img/clint.eps.jpg                           | Bin 1177327 -> 0 bytes
 img/favicon.ico                             | Bin 1406 -> 0 bytes
 img/favicon.ico-old.ico                     | Bin 766 -> 0 bytes
 img/feather.svg                             |   1 -
 img/language.svg                            |   3 -
 img/milagro.svg                             |   1 -
 img/oss_logo.png                            | Bin 8455 -> 0 bytes
 img/oss_logo2.png                           | Bin 4370 -> 0 bytes
 img/undraw_code_review.svg                  |   1 -
 img/undraw_monitor.svg                      |   1 -
 img/undraw_note_list.svg                    |   1 -
 img/undraw_online.svg                       |   1 -
 img/undraw_open_source.svg                  |   1 -
 img/undraw_operating_system.svg             |   1 -
 img/undraw_react.svg                        |   1 -
 img/undraw_tweetstorm.svg                   |   1 -
 img/undraw_youtube_tutorial.svg             |   1 -
 img/words.eps.jpg                           | Bin 343687 -> 0 bytes
 index.html                                  |  14 -
 index.js-old.html                           |  10 -
 index.js-old/index.html                     |  10 -
 js/codetabs.js                              |  31 -
 js/scrollSpy.js                             |  66 ---
 sitemap.xml                                 |  21 -
 swagger/README.md                           |   0
 swagger/favicon-16x16.png                   | Bin 651 -> 0 bytes
 swagger/favicon-32x32.png                   | Bin 628 -> 0 bytes
 swagger/index.html                          |  60 --
 swagger/oauth2-redirect.html                |  67 ---
 swagger/swagger-ui-bundle.js                | 100 ----
 swagger/swagger-ui-bundle.js.map            |   1 -
 swagger/swagger-ui-standalone-preset.js     |  14 -
 swagger/swagger-ui-standalone-preset.js.map |   1 -
 swagger/swagger-ui.css.map                  |   1 -
 swagger/swagger-ui.js                       |   9 -
 swagger/swagger-ui.js.map                   |   1 -
 users.html                                  |   1 -
 users/index.html                            |   1 -
 104 files changed, 4813 deletions(-)

diff --git a/blog/2019/06/10/miss-me.html b/blog/2019/06/10/miss-me.html
deleted file mode 100644
index 6edbdde..0000000
--- a/blog/2019/06/10/miss-me.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Miss us? We missed you. · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="It&#x27;s not often that Apache Incubation projects start, lay dormant for three years, and then spring to life. Yet, it&#x27;s really happening. I pleased to report that in the past two weeks [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/blog/2019/06/10/miss-me">Miss us? We missed you.</a></h1><p class="post-meta">June 10, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/bspector" target="_blank" rel="noreferrer noopener">Brian Spector</a></p></div></header><div><spa [...]
-<p>More details soon.</p>
-</span></div></div><div class="blogSocialSection"></div></div><div class="blog-recent"><a class="button" href="/blog">Recent Posts</a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library [...]
\ No newline at end of file
diff --git a/blog/2019/06/10/miss-me/index.html b/blog/2019/06/10/miss-me/index.html
deleted file mode 100644
index 6edbdde..0000000
--- a/blog/2019/06/10/miss-me/index.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Miss us? We missed you. · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="It&#x27;s not often that Apache Incubation projects start, lay dormant for three years, and then spring to life. Yet, it&#x27;s really happening. I pleased to report that in the past two weeks [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/blog/2019/06/10/miss-me">Miss us? We missed you.</a></h1><p class="post-meta">June 10, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/bspector" target="_blank" rel="noreferrer noopener">Brian Spector</a></p></div></header><div><spa [...]
-<p>More details soon.</p>
-</span></div></div><div class="blogSocialSection"></div></div><div class="blog-recent"><a class="button" href="/blog">Recent Posts</a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library [...]
\ No newline at end of file
diff --git a/blog/atom.xml b/blog/atom.xml
deleted file mode 100644
index 1012a12..0000000
--- a/blog/atom.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<feed xmlns="http://www.w3.org/2005/Atom">
-    <id>https://milagro.apache.org/blog</id>
-    <title>Apache Milagro Blog</title>
-    <updated>2019-06-10T06:00:00Z</updated>
-    <generator>Feed for Node.js</generator>
-    <link rel="alternate" href="https://milagro.apache.org/blog"/>
-    <subtitle>The best place to stay up-to-date with the latest Apache Milagro news and events.</subtitle>
-    <logo>https://milagro.apache.org/img/milagro.svg</logo>
-    <rights>Copyright © 2019  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</rights>
-    <entry>
-        <title type="html"><![CDATA[Miss us? We missed you.]]></title>
-        <id>https://milagro.apache.org/blog/2019/06/10/miss-me.html</id>
-        <link href="https://milagro.apache.org/blog/2019/06/10/miss-me.html">
-        </link>
-        <updated>2019-06-10T06:00:00Z</updated>
-        <summary type="html"><![CDATA[<p>It's not often that Apache Incubation projects start, lay dormant for three years, and then spring to life. Yet, it's really happening. I pleased to report that in the past two weeks Milagro has added three new contributors, one new PPMC member and o...</p>]]></summary>
-        <author>
-            <name>Brian Spector</name>
-            <uri>http://twitter.com/bspector</uri>
-        </author>
-    </entry>
-</feed>
\ No newline at end of file
diff --git a/blog/feed.xml b/blog/feed.xml
deleted file mode 100644
index b4e1adc..0000000
--- a/blog/feed.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<rss version="2.0">
-    <channel>
-        <title>Apache Milagro Blog</title>
-        <link>https://milagro.apache.org/blog</link>
-        <description>The best place to stay up-to-date with the latest Apache Milagro news and events.</description>
-        <lastBuildDate>Mon, 10 Jun 2019 06:00:00 GMT</lastBuildDate>
-        <docs>http://blogs.law.harvard.edu/tech/rss</docs>
-        <generator>Feed for Node.js</generator>
-        <image>
-            <title>Apache Milagro Blog</title>
-            <url>https://milagro.apache.org/img/milagro.svg</url>
-            <link>https://milagro.apache.org/blog</link>
-        </image>
-        <copyright>Copyright © 2019  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</copyright>
-        <item>
-            <title><![CDATA[Miss us? We missed you.]]></title>
-            <link>https://milagro.apache.org/blog/2019/06/10/miss-me.html</link>
-            <guid>https://milagro.apache.org/blog/2019/06/10/miss-me.html</guid>
-            <pubDate>Mon, 10 Jun 2019 06:00:00 GMT</pubDate>
-            <description><![CDATA[<p>It's not often that Apache Incubation projects start, lay dormant for three years, and then spring to life. Yet, it's really happening. I pleased to report that in the past two weeks Milagro has added three new contributors, one new PPMC member and o...</p>]]></description>
-        </item>
-    </channel>
-</rss>
\ No newline at end of file
diff --git a/blog/index.html b/blog/index.html
deleted file mode 100644
index 53ca20c..0000000
--- a/blog/index.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Blog · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Core security infrastructure for decentralized networks"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Blog · Apache Milagro"/><meta property="og:type" content="website"/><met [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="posts"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/blog/2019/06/10/miss-me">Miss us? We missed you.</a></h1><p class="post-meta">June 10, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/bspector" target="_blank" rel="noreferrer noopener">Brian Spector</a></p></div></header><article cla [...]
-<p>More details soon.</p>
-</span></div></article></div><div class="docs-prevnext"></div></div></div></div></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overvi [...]
\ No newline at end of file
diff --git a/css/main.css b/css/main.css
deleted file mode 100644
index 6d1a6dd..0000000
--- a/css/main.css
+++ /dev/null
@@ -1,2 +0,0 @@
-a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{border:0;font:inherit;font-size:100%;margin:0;padding:0;vertical-align:baseline}b [...]
-  /*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */font-family:sans-serif;color:#3b4151}.swagger-ui html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}.swagger-ui body{margin:0}.swagger-ui article,.swagger-ui aside,.swagger-ui footer,.swagger-ui header,.swagger-ui nav,.swagger-ui section{display:block}.swagger-ui h1{font-size:2em;margin:.67em 0}.swagger-ui figcaption,.swagger-ui figure,.swagger-ui main{display:block}.swagger-ui figure [...]
\ No newline at end of file
diff --git a/css/prism.css b/css/prism.css
deleted file mode 100644
index d783edb..0000000
--- a/css/prism.css
+++ /dev/null
@@ -1,115 +0,0 @@
-/**
- * Copyright (c) 2017-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *
- * Modified prism.js default theme for JavaScript, CSS and HTML
- * Based on dabblet (http://dabblet.com)
- * @author Lea Verou
- */
-
-code[class*='language-'],
-pre[class*='language-'] {
-  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
-  text-align: left;
-  white-space: pre;
-  word-spacing: normal;
-  word-break: normal;
-  word-wrap: normal;
-  line-height: 1.5;
-
-  -moz-tab-size: 4;
-  -o-tab-size: 4;
-  tab-size: 4;
-
-  -webkit-hyphens: none;
-  -moz-hyphens: none;
-  -ms-hyphens: none;
-  hyphens: none;
-}
-
-/* Code blocks */
-pre[class*='language-'] {
-  padding: 1em;
-  margin: 0.5em 0;
-  overflow: auto;
-}
-
-/* Inline code */
-:not(pre) > code[class*='language-'] {
-  padding: 0.1em;
-  border-radius: 0.3em;
-  white-space: normal;
-}
-
-.token.comment,
-.token.prolog,
-.token.doctype,
-.token.cdata {
-  color: slategray;
-}
-
-.token.punctuation {
-  color: #999;
-}
-
-.namespace {
-  opacity: 0.7;
-}
-
-.token.property,
-.token.tag,
-.token.boolean,
-.token.constant,
-.token.symbol,
-.token.deleted {
-  color: #905;
-}
-
-.token.selector,
-.token.number,
-.token.attr-name,
-.token.string,
-.token.char,
-.token.builtin,
-.token.inserted {
-  color: #690;
-}
-
-.token.operator,
-.token.entity,
-.token.url,
-.language-css .token.string,
-.style .token.string {
-  color: #9a6e3a;
-}
-
-.token.atrule,
-.token.attr-value,
-.token.keyword {
-  color: #07a;
-}
-
-.token.function,
-.token.class-name {
-  color: #dd4a68;
-}
-
-.token.regex,
-.token.important,
-.token.variable {
-  color: #e90;
-}
-
-.token.important,
-.token.bold {
-  font-weight: bold;
-}
-.token.italic {
-  font-style: italic;
-}
-
-.token.entity {
-  cursor: help;
-}
diff --git a/docs/amcl-c-api.html b/docs/amcl-c-api.html
deleted file mode 100644
index a222724..0000000
--- a/docs/amcl-c-api.html
+++ /dev/null
@@ -1,71 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>AMCL C API · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Doxygen support is available for Milagro Crypto Library.&lt;/p&gt;
-"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="AMCL C API · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;p&gt;Doxygen support is available for Milagro Crypto Library.&lt;/p&gt;
-"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type=" [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">AMCL C API</h1></header><article><div><span><p>Doxygen support is available for Milagro Crypto Library.</p>
-<p>An online version of the Doxygen output is available for viewing in a web browser <a href="http://docs.milagro.io/en/doxygen/index.html" target="_blank">here</a>.</p>
-<p>PDF of the Doxygen output is available for download <a href="https://s3.amazonaws.com/docs.milagro.io/amcl-doxygen.pdf" target="_blank">here</a>.</p>
-
-    <div class="admonition admonition-caution">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18  [...]
-      </div>
-      <div class="admonition-content">
-    <p>This documentation is being updated.</p>
-</div></div><!--
-Supported admonition types are: caution, note, important, tip, warning.
---></span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/amcl-overview"><span class="arrow-prev">← </span><span>AMCL Overview</span></a><a class="docs-next button" href="/docs/amcl-javascript-api"><span class="function-name-prevnext">AMCL JavaScript API</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class= [...]
\ No newline at end of file
diff --git a/docs/amcl-c-api/index.html b/docs/amcl-c-api/index.html
deleted file mode 100644
index a222724..0000000
--- a/docs/amcl-c-api/index.html
+++ /dev/null
@@ -1,71 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>AMCL C API · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Doxygen support is available for Milagro Crypto Library.&lt;/p&gt;
-"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="AMCL C API · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;p&gt;Doxygen support is available for Milagro Crypto Library.&lt;/p&gt;
-"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type=" [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">AMCL C API</h1></header><article><div><span><p>Doxygen support is available for Milagro Crypto Library.</p>
-<p>An online version of the Doxygen output is available for viewing in a web browser <a href="http://docs.milagro.io/en/doxygen/index.html" target="_blank">here</a>.</p>
-<p>PDF of the Doxygen output is available for download <a href="https://s3.amazonaws.com/docs.milagro.io/amcl-doxygen.pdf" target="_blank">here</a>.</p>
-
-    <div class="admonition admonition-caution">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18  [...]
-      </div>
-      <div class="admonition-content">
-    <p>This documentation is being updated.</p>
-</div></div><!--
-Supported admonition types are: caution, note, important, tip, warning.
---></span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/amcl-overview"><span class="arrow-prev">← </span><span>AMCL Overview</span></a><a class="docs-next button" href="/docs/amcl-javascript-api"><span class="function-name-prevnext">AMCL JavaScript API</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class= [...]
\ No newline at end of file
diff --git a/docs/amcl-javascript-api.html b/docs/amcl-javascript-api.html
deleted file mode 100644
index 5419ff2..0000000
--- a/docs/amcl-javascript-api.html
+++ /dev/null
@@ -1,79 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>AMCL JavaScript API · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="
-    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
-      &lt;div class=&quot;admonition-heading&quot;&gt;
-        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
-      &lt;/div&gt;
-      &lt;div class=&quot;admonition-content&quot;&gt;
-    &lt;/div&gt;&lt;/div&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="AMCL JavaScript API · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="
-    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
-      &lt;div class=&quot;admonition-heading&quot;&gt;
-        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
-      &lt;/div&gt;
-      &lt;div class=&quot;admonition-content&quot;&gt;
-    &lt;/div&gt;&lt;/div&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Bl [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">AMCL JavaScript API</h1></header><article><div><span>
-    <div class="admonition admonition-tip">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2 [...]
-      </div>
-      <div class="admonition-content">
-    <p>Interested in becoming a contributor? Milagro is looking for you.</p>
-<p><a href="/docs/contributor-guide.html">CONTRIBUTOR'S GUIDE</a>.</p>
-</div></div><!--
-Supported admonition types are: caution, note, important, tip, warning.
---></span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/amcl-c-api"><span class="arrow-prev">← </span><span>AMCL C API</span></a><a class="docs-next button" href="/docs/d-ta-overview"><span>D-TA Node Overview</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sit [...]
\ No newline at end of file
diff --git a/docs/amcl-javascript-api/index.html b/docs/amcl-javascript-api/index.html
deleted file mode 100644
index 5419ff2..0000000
--- a/docs/amcl-javascript-api/index.html
+++ /dev/null
@@ -1,79 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>AMCL JavaScript API · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="
-    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
-      &lt;div class=&quot;admonition-heading&quot;&gt;
-        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
-      &lt;/div&gt;
-      &lt;div class=&quot;admonition-content&quot;&gt;
-    &lt;/div&gt;&lt;/div&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="AMCL JavaScript API · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="
-    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
-      &lt;div class=&quot;admonition-heading&quot;&gt;
-        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
-      &lt;/div&gt;
-      &lt;div class=&quot;admonition-content&quot;&gt;
-    &lt;/div&gt;&lt;/div&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Bl [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">AMCL JavaScript API</h1></header><article><div><span>
-    <div class="admonition admonition-tip">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2 [...]
-      </div>
-      <div class="admonition-content">
-    <p>Interested in becoming a contributor? Milagro is looking for you.</p>
-<p><a href="/docs/contributor-guide.html">CONTRIBUTOR'S GUIDE</a>.</p>
-</div></div><!--
-Supported admonition types are: caution, note, important, tip, warning.
---></span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/amcl-c-api"><span class="arrow-prev">← </span><span>AMCL C API</span></a><a class="docs-next button" href="/docs/d-ta-overview"><span>D-TA Node Overview</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sit [...]
\ No newline at end of file
diff --git a/docs/amcl-overview.html b/docs/amcl-overview.html
deleted file mode 100644
index 3e5d6eb..0000000
--- a/docs/amcl-overview.html
+++ /dev/null
@@ -1,163 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Milagro Crypto Library (AMCL) · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;introduction&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#introduction&quot; aria-hidden=&quot;true&quot; cl [...]
-"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Apache Milagro Crypto Library (AMCL) · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;introduction&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#introduction&quot; aria-hidden=&quot;true&quot; class=&quot;hash-link&quot; [...]
-"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type=" [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Apache Milagro Crypto Library (AMCL)</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="introduction"></a><a href="#introduction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h [...]
-<p>One of the major mysteries in the real-world of crypto is resistance to the exploitation of new research ideas. Its not that cryptographic research has failed to throw up new ideas that have the potential for commercial exploitation -- far from it. But in the real-world, 1970's crypto rules supreme, and very little happens that isn't PKI/RSA based. The reasons for this are many and varied. However one part of the puzzle might be the non-availability of easy-to-use open source cryptogr [...]
-<p>There are many crypto libraries out there. Many offer a bewildering variety of cryptographic primitives, at different levels of security. Many use extensive assembly language in order to be as fast as possible. Many are very <strong>BIG</strong>, even bloated. Some rely on other external libraries. Many were designed by academics for academics, and so are not really suitable for commercial use. Many are otherwise excellent, but not written in our favorite language.</p>
-<p>The Apache Milagro Crypto Library (AMCL) is different; AMCL is completely self-contained, except for the requirement for an external entropy source for random number generation.</p>
-<p>AMCL is portable - there is no assembly language. The original version is written in C, Java, Javascript, Go and Swift using only generic programming constructs, but AMCL is truly multi-lingual, as compatible  versions will be available in many other languages. These versions will be identical in that for the same inputs they will not only produce the same outputs, but all internal calculations will also be the same.</p>
-<p>AMCL is fast, but does not attempt to set speed records (a particular academic obsession). There are of course contexts where speed is of the essence; for example for a server farm which must handle multiple SSL connections, and where a 10% speed increase implies the need for 10% less servers, with a a 10% saving on electricity. But in the Internet of Things we would suggest that this is less important. In general the speed is expected to be &quot;good enough&quot;. However AMCL is sm [...]
-<p>The C version of AMCL is configured at compile time for 16, 32 or 64 bit processors, and for a specific elliptic curve. The Java and Javascript versions are (obviously) processor agnostic, but the same choices of elliptic curve are available.</p>
-<p>AMCL is written with an awareness of the abilities of modern pipelined processors. In particular there was an awareness that the unpredictable program branch should be avoided at all costs, not only as it slows down the processor, but as it may open the door to side-channel attacks. The innocuous looking <code>if</code> statement - unless its outcome can be accurately predicted - is the enemy of quality crypto software.</p>
-<p>In the sequel we refer to the C version of AMCL, unless otherwise specified. We emphasis that all AMCL versions are completely self-contained. No external libraries or packages are required to implement all of the supported cryptographic functionality (other than for an external entropy source).</p>
-<h2><a class="anchor" aria-hidden="true" id="library-structure"></a><a href="#library-structure" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
-<p>The modules that make up AMCL are shown below, with some indication of how they interact. Several example APIs will be provided to implement common protocols. Note that all interaction with the API is via machine-independent endian-indifferent arrays of bytes (a.k.a. octet strings). Therefore the underlying workings of the library are invisible to the consumer of its services.</p>
-<p><img src="/img/clint.eps.jpg" alt="client"></p>
-<figure>
-  <caption><strong>Figure 1.</strong> AMCL Library  </caption>
-</figure>
-<h2><a class="anchor" aria-hidden="true" id="handling-big-numbers"></a><a href="#handling-big-numbers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
-<h3><a class="anchor" aria-hidden="true" id="representation"></a><a href="#representation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
-<p>One of the major design decisions is how to represent the 256-bit field elements required for the elliptic curve and pairing-based cryptography. Here there are two different approaches.</p>
-<p>One is to pack the bits as tightly as possible into computer words. For example on a 64-bit computer 256-bit numbers can be stored in just 4 words. However to manipulate numbers in this form, even for simple addition, requires handling of carry bits if overflow is to be avoided, and a high-level language does not have direct access to carry flags. It is possible to emulate the flags, but this would be inefficient. In fact this approach is only really suitable for an assembly language  [...]
-<p>The alternative idea is to use extra words for the representation, and then try to offset the additional cost by taking full advantage of the &quot;spare&quot; bits in every word. This idea follows a &quot;corner of the literature&quot;<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup> which has been promoted by Bernstein and his collaborators in several publications. Refer to Figure 2, where each digit of the representation is stored as a signed integer which is the s [...]
-<p>Note that almost all arithmetic takes place modulo a 256-bit prime number, the modulus representing the field over which the elliptic curve is defined, here denoted as \( p \).</p>
-<p>On 64-bit processors, AMCL represents numbers to the base \( 2^{56} \) in a 5 element array, the Word Excess is 7 bits, and for a 256-bit modulus the Field Excess is 24 bits.</p>
-<p>On 32-bit processors, AMCL represents numbers to the base \( 2^{29} \) in a 9 element array, the Word Excess is 2 bits, and for a 256-bit modulus the Field Excess is 5 bits.</p>
-<p>On 16-bit processors, AMCL represents numbers to the base \( 2^{13} \) in a 20 element array, the Word Excess is 2 bits, and for a 256-bit modulus the Field Excess is 4 bits.</p>
-<p>Such a representation of a 256-bit number is referred to as a <strong>BIG</strong>. Addition or subtraction of a pair of <strong>BIG</strong>s, results in another <strong>BIG</strong>.</p>
-<p>The Java version uses exactly the same 32-bit representation as above.</p>
-<p>For Javascript (where all numbers are stored as 64-bit floating point with a 52-bit mantissa, but mostly manipulated as 32-bit integers), numbers are represented to the base \( 2^{24} \) in an 11 element array, the Word Excess is 7 bits, and the Field Excess for a 256-bit modulus is 8 bits.</p>
-<h3><a class="anchor" aria-hidden="true" id="addition-and-subtraction"></a><a href="#addition-and-subtraction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
-<p>The existence of a word excess means for example that multiple field elements can be added together digit by digit, without processing of carries, before overflow can occur.</p>
-<p>Only occasionally will there be a requirement to <em>normalize</em> these <em>extended</em> values, that is to force them back into the original format. Note that this is independent of the modulus.</p>
-<p>The existence of a field excess means that, independent of the word excess, multiple field elements can be added together before it is required to reduce the sum with respect to the modulus. In the literature this is referred to as lazy, or delayed, reduction. In fact we allow the modulus to be as small as 254 bits, which obviously increases the field excess.</p>
-<p>Note that these two mechanisms associated with the word excess and the field excess (often confused in the literature) operate largely independently of each other.</p>
-<p>AMCL has no support for negative numbers. Therefore subtraction will be implemented as field negation followed by addition. However a field element \( x \) can be negated by simply calculating \( −x = e.p − x \), where \( e \) is the current excess associated with \( x \). Therefore subtraction will be implemented as field negation followed by addition. In practice it is more convenient to round \( e \) up to next highest power of 2, in which case \( e.p \) can be calculated by a simp [...]
-<p><img src="/img/words.eps.jpg" alt="client"></p>
-<figure>
-  <caption><strong>Figure 2.</strong> AMCL Library</caption>
-</figure>
-<br>
-Normalization of extended numbers requires the word excess of each digit to be shifted right by the number of base bits, and added to the next digit, working right to left. Note that when numbers are subtracted digit-by-digit individual digits may become negative. However since we are avoiding using the sign bit, due to the magic of 2's complement arithmetic, this all works fine without any conditional branches.
-<p>Final full reduction of unreduced field elements is carried out using a simple shift-and-subtract of the modulus, with one subtraction needed for every bit in the actual field excess. Such reductions will rarely be required, as they are slow and hard to do in constant time. Ideally it should only be required at the end of a complex operation like an elliptic curve point multiplication.</p>
-<p>So with careful programming we avoid any unpredictable program branches. Since the length of field elements is fixed at compile time, it is expected that the compiler will unroll most of the time-critical loops. In any case the conditional branch required at the foot of a fixed-size loop can be accurately predicted by modern hardware.</p>
-<p>Worst case field excesses are easy to calculate. If two elements \( a \) and \( b \) are to be added, and if their current field excesses are \( e_{a} \) and \( e_{b} \) respectively, then clearly their sum will have a worst-case field excess of \( e_{a}+e_{b} \). By careful programming and choice of number base, full reductions can be largely eliminated<sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup>.</p>
-<h3><a class="anchor" aria-hidden="true" id="multiplication-and-reduction"></a><a href="#multiplication-and-reduction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
-<p>To support multiplication of <strong>BIG</strong>s, we will require a double-length <strong><em>DBIG</em></strong> type. Also the partial products that arise in the process of long multiplication will require a double-length data type. Fortunately many popular C compilers, like Gnu GCC, always support an integer type that is double the native word-length. For Java the &quot;int&quot; type is 32-bits and there is a double-length &quot;long&quot; type which is 64-bit. Of course for Java [...]
-<p>Multiprecision multiplication is performed column by column, propagating the carries, working from right-to-left, but using the fast method described in<sup class="footnote-ref"><a href="#fn3" id="fnref3">[3]</a></sup>. At the foot of each column the total is split into the sum for that column, and the carry to the next column. If the numbers are normalized prior to the multiplication, then with the word excesses that we have chosen, this will not result in overflow. The DBIG product  [...]
-<p>The method used for full reduction of a <strong>DBIG</strong> back to a <strong>BIG</strong> depends on the form of the modulus. We choose to support three distinct types of modulus, (a) pseudo Mersenne of the form \( 2^n-c \) where \( c \) is small and $n$ is the size of the modulus in bits, (b) Montgomery-friendly of the form \( k.2^n-1 \), and (c) moduli of no special form. For cases (b) and (c) we convert all field elements to Montgomery's \( n \)-residue form, and use Montgomery' [...]
-<p>In all cases the <strong>DBIG</strong> number to be reduced \( y \) must be in the range \( 0&lt;y&lt;pR \) (a requirement of Montgomery's method), and the result \( x \) is guaranteed to be in the range \( 0&lt;x&lt;2p \) , where \( R=2^{256+FE} \) for a 256-bit modulus. Note that the <strong>BIG</strong> result will be (nearly) fully reduced. The fact than we allow \( x \) to be larger than \( p \) means that we can avoid the notorious Montgomery &quot;final subtraction&quot;. Indep [...]
-<p>Observe how unreduced numbers involved in complex calculations tend to be (nearly fully) reduced if they are involved in a modular multiplication. So for example if field element \( x \) has a large field excess, and if we calculate \( x=x.y \), then as long as the unreduced product is less than \( pR \), the result will be a nearly fully reduced \( x \). So in many cases there is a natural tendency for field excesses not to grow without limit, and not to overflow, without requiring e [...]
-<p>Consider now a sequence of code that adds, subtracts and multiplies field elements, as might arise in elliptic curve additions and doublings. Assume that the code has been analysed and that normalisation code has been inserted where needed. Assume that the reduction code that activates if there is a possibility of an element overflowing its field excess, while present, never in fact is triggered (due to the behaviour described above). Then we assert that once a program has initialised [...]
-<h2><a class="anchor" aria-hidden="true" id="extension-field-arithmetic"></a><a href="#extension-field-arithmetic" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H [...]
-<p>To support cryptographic pairings we will need support for extension fields. We use a towering of extensions as required for BN curves and as required for higher security BLS curves. An element of the quadratic extension field will be represented as \( f=a+ib \), where \( i \) is the square root of the quadratic non-residue -1. To add, subtract and multiply them we use the obvious methods.</p>
-<p>However for negation we can construct \( -f=-a-ib \) as \( b-(a+b)+i.(a-(a+b) \) which requires only one base field negation. A similar idea can be used recursively for higher order extensions, so that only one base field negation is ever required.</p>
-<h2><a class="anchor" aria-hidden="true" id="elliptic-curves"></a><a href="#elliptic-curves" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
-<p>Three types of Elliptic curve are supported for the implementation of Elliptic Curve Cryptography (ECC), but curves are limited to popular families that support faster implementation. Weierstrass curves are supported using the Short Weierstrass representation:</p>
-<p>$$y^2=x^3+Ax+B$$</p>
-<p>where \( A=0 \) or \( A=-3 \). Edwards curves are supported using both regular and twisted Edwards format:</p>
-<p>$$Ax^2+y^2=1+Bx^2y^2$$</p>
-<p>where \( A=1 \) or \( A=-1 \). Montgomery curves are represented as:</p>
-<p>$$y^2=x^3+Ax^2+x$$</p>
-<p>where \( A \) must be small. As mentioned in the introduction, in all cases we use exception-free formulae if available, as this facilitates constant time imple- mentation, even if this invokes a significant performance penalty.</p>
-<p>In the particular case of elliptic curve point multiplication, there are potentially a myriad of very dangerous side-channel attacks that arise from using the classic double-and-add algorithm and its variants. Vulnerabilities arise if branches are taken that depend on secret bits, or if data is even accessed using secret values as indices. Many types of counter-measures have been suggested. The simplest solution is to use a constant-time algorithm like the Montgomery ladder, which has [...]
-<p>If using a Montgomery representation of the elliptic curve the Montgomery ladder is in fact the optimal algorithm for point multiplication. For other representations we use a fixed-sized signed window method.</p>
-<p>AMCL has built-in support for most standardised elliptic curves, along with many curves that have been proposed for standardisation. Specifically it supports the NIST256 curve, the well known Curve25519, the 256-bit Brain- pool curve, the ANSSI curve, and six NUMS (Nothing-Up-My-Sleeve) curves proposed by Bos et al. At higher levels of security the NIST384 and NIST521 curves are supported, also Curve41417 as well as the Goldilocks curve, and our own HiFive curve.
-Some of these proposals support only a Weierstrass representation, but many also allow an Edwards or Montgomery form. Tools are provided to allow easy integration of more curves.</p>
-<h2><a class="anchor" aria-hidden="true" id="support-for-classic-finite-field-methods"></a><a href="#support-for-classic-finite-field-methods" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0  [...]
-<p>Before Elliptic Curves, cryptography depended on methods based on simple finite fields. The most famous of these would be the well known RSA method. These methods have the advantage of being effectively parameterless, and therefore the issue of trust in parameters that arises for elliptic curves, is not an issue.</p>
-<p>However these methods are subject to index calculus based methods of cryptanalysis, and so fields and keys are typically much larger. So how to support for example a 2048-bit implementation of RSA based on a library designed for optimized 256-bit operations? The idea is simple; use AMCL as a virtual 256-bit machine, and build 2048-bit arithmetic on top of that.</p>
-<p>And to claw back some decent performance use the Karatsuba method so that for example 2048-bit multiplication recurses efficiently right down to 256-bit operations. Of course the downside of the Karatsuba method is that while it saves on multiplications, the number of additions and subtractions is greatly increased.  However the existence of generous word excesses in our representation makes this less of a problem, as most additions can be carried out without normalization.</p>
-<p>Secret key operations like RSA decryption use the Montgomery ladder to achieve side-channel-attack resistance.</p>
-<p>The implementation can currently support \( 1024.2^n \) bit fields, so for example 2048-bit RSA can be used to get reasonably close to the AES-128-bit level of security, and if desired 4096 bit RSA can be used to comfortably exceed it.</p>
-<p>Note that this code is supported independently of the elliptic curve code. So for example RSA and ECC can be run together within a single application.</p>
-<p>However we regard these methods as &quot;legacy&quot; as in our view ECC based methods are a much better fit for the IoT.</p>
-<h2><a class="anchor" aria-hidden="true" id="multi-lingual-support"></a><a href="#multi-lingual-support" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
-<p>It is a <strong>BIG</strong> ask to develop and maintain multiple versions of a crypto library written in radically different languages such as C, Java, Javascript, Go and Swift. This has discouraged the use of language specific methods (which are in any case of little relevance here), and strongly encouraged the use of simple, generic computer language constructs.</p>
-<p>This approach brings a surprising bonus: AMCL can be automatically converted to many other languages using available translator tools. For example Tangible Software Solutions market a Java to C# converter. This generated an efficient fully functional C# version of AMCL within minutes. The same company market a Java to Visual Basic converter.</p>
-<p>Google have a Java to Objective C converter specifically designed to convert Android apps developed in Java, to iOS apps written in Objective C.</p>
-<p>Of course not all languages can be supported in this way, so support for some will be developed manually. In particular a Rust version is currently under development.</p>
-<h2><a class="anchor" aria-hidden="true" id="discussion"></a><a href="#discussion" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
-<p>We found in our code that, with few exceptions, reductions due to possible overflow of the field excess of a <strong>BIG</strong> were very rare, especially for the 64-bit version of the library. Similarly normalization was rarely needed for the 64-bit code. This is due to the much greater excesses that apply in the 64-bit representation. In some experiments we calculated thousands of random pairings, and reduction due to field excess overflow detection never happened.</p>
-<p>In general in developing AMCL we tried to use optimal methods, without going to what we (very subjectively) regarded as extremes in order to maximize performance.  Algorithms that require less memory were generally preferred if the impact on performance was not large. Some optimizations, while perfectly valid, are hard to implement without having a significant impact on program readability and maintainability. Deciding which optimizations to use and which to reject (on the grounds of  [...]
-readability and maintainability) is admittedly rather arbitrary!</p>
-<p>One notable omission from AMCL is the use of pre-computation on fixed parameters in order to speed up certain calculations. We try to justify this, rather unconvincingly, by pointing out that pre-computation must of necessity increase code size. Furthermore such methods are more sensitive to side-channel attacks and much of their speed advantage will be lost if they are to be fully side-channel protected. Also pre-computation on secret values clearly increases the amount of secret dat [...]
-<p>However the development roadmap view might change in later versions depending on the project supporters in-the-field experiences of using AMCL.</p>
-<hr>
-
-    <div class="admonition admonition-note">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V [...]
-      </div>
-      <div class="admonition-content">
-    <p>Submit a pull request on the development branch of <a href="https://github.com/apache/incubator-milagro">Milagro Website Repo</a>.</p>
-</div></div><!--
-Supported admonition types are: caution, note, important, tip, warning.
---><hr class="footnotes-sep">
-<section class="footnotes">
-<ol class="footnotes-list">
-<li id="fn1"  class="footnote-item"><p><a href="http://eprint.iacr.org/2014/526">Curve41417 Karatsuba revisited</a> <a href="#fnref1" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn2"  class="footnote-item"><p><a href="http://eprint.iacr.org/2017/437">Slothful Reduction</a> <a href="#fnref2" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn3"  class="footnote-item"><p><a href="http://eprint.iacr.org/2015/1247">Missing a trick: Karatsuba variations</a> <a href="#fnref3" class="footnote-backref">↩</a></p>
-</li>
-</ol>
-</section>
-</span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/milagro-design"><span class="arrow-prev">← </span><span>Milagro Design</span></a><a class="docs-next button" href="/docs/amcl-c-api"><span>AMCL C API</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#introduction">Introduction</a></li><l [...]
\ No newline at end of file
diff --git a/docs/amcl-overview/index.html b/docs/amcl-overview/index.html
deleted file mode 100644
index 3e5d6eb..0000000
--- a/docs/amcl-overview/index.html
+++ /dev/null
@@ -1,163 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Milagro Crypto Library (AMCL) · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;introduction&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#introduction&quot; aria-hidden=&quot;true&quot; cl [...]
-"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Apache Milagro Crypto Library (AMCL) · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;introduction&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#introduction&quot; aria-hidden=&quot;true&quot; class=&quot;hash-link&quot; [...]
-"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type=" [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Apache Milagro Crypto Library (AMCL)</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="introduction"></a><a href="#introduction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h [...]
-<p>One of the major mysteries in the real-world of crypto is resistance to the exploitation of new research ideas. Its not that cryptographic research has failed to throw up new ideas that have the potential for commercial exploitation -- far from it. But in the real-world, 1970's crypto rules supreme, and very little happens that isn't PKI/RSA based. The reasons for this are many and varied. However one part of the puzzle might be the non-availability of easy-to-use open source cryptogr [...]
-<p>There are many crypto libraries out there. Many offer a bewildering variety of cryptographic primitives, at different levels of security. Many use extensive assembly language in order to be as fast as possible. Many are very <strong>BIG</strong>, even bloated. Some rely on other external libraries. Many were designed by academics for academics, and so are not really suitable for commercial use. Many are otherwise excellent, but not written in our favorite language.</p>
-<p>The Apache Milagro Crypto Library (AMCL) is different; AMCL is completely self-contained, except for the requirement for an external entropy source for random number generation.</p>
-<p>AMCL is portable - there is no assembly language. The original version is written in C, Java, Javascript, Go and Swift using only generic programming constructs, but AMCL is truly multi-lingual, as compatible  versions will be available in many other languages. These versions will be identical in that for the same inputs they will not only produce the same outputs, but all internal calculations will also be the same.</p>
-<p>AMCL is fast, but does not attempt to set speed records (a particular academic obsession). There are of course contexts where speed is of the essence; for example for a server farm which must handle multiple SSL connections, and where a 10% speed increase implies the need for 10% less servers, with a a 10% saving on electricity. But in the Internet of Things we would suggest that this is less important. In general the speed is expected to be &quot;good enough&quot;. However AMCL is sm [...]
-<p>The C version of AMCL is configured at compile time for 16, 32 or 64 bit processors, and for a specific elliptic curve. The Java and Javascript versions are (obviously) processor agnostic, but the same choices of elliptic curve are available.</p>
-<p>AMCL is written with an awareness of the abilities of modern pipelined processors. In particular there was an awareness that the unpredictable program branch should be avoided at all costs, not only as it slows down the processor, but as it may open the door to side-channel attacks. The innocuous looking <code>if</code> statement - unless its outcome can be accurately predicted - is the enemy of quality crypto software.</p>
-<p>In the sequel we refer to the C version of AMCL, unless otherwise specified. We emphasis that all AMCL versions are completely self-contained. No external libraries or packages are required to implement all of the supported cryptographic functionality (other than for an external entropy source).</p>
-<h2><a class="anchor" aria-hidden="true" id="library-structure"></a><a href="#library-structure" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
-<p>The modules that make up AMCL are shown below, with some indication of how they interact. Several example APIs will be provided to implement common protocols. Note that all interaction with the API is via machine-independent endian-indifferent arrays of bytes (a.k.a. octet strings). Therefore the underlying workings of the library are invisible to the consumer of its services.</p>
-<p><img src="/img/clint.eps.jpg" alt="client"></p>
-<figure>
-  <caption><strong>Figure 1.</strong> AMCL Library  </caption>
-</figure>
-<h2><a class="anchor" aria-hidden="true" id="handling-big-numbers"></a><a href="#handling-big-numbers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
-<h3><a class="anchor" aria-hidden="true" id="representation"></a><a href="#representation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
-<p>One of the major design decisions is how to represent the 256-bit field elements required for the elliptic curve and pairing-based cryptography. Here there are two different approaches.</p>
-<p>One is to pack the bits as tightly as possible into computer words. For example on a 64-bit computer 256-bit numbers can be stored in just 4 words. However to manipulate numbers in this form, even for simple addition, requires handling of carry bits if overflow is to be avoided, and a high-level language does not have direct access to carry flags. It is possible to emulate the flags, but this would be inefficient. In fact this approach is only really suitable for an assembly language  [...]
-<p>The alternative idea is to use extra words for the representation, and then try to offset the additional cost by taking full advantage of the &quot;spare&quot; bits in every word. This idea follows a &quot;corner of the literature&quot;<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup> which has been promoted by Bernstein and his collaborators in several publications. Refer to Figure 2, where each digit of the representation is stored as a signed integer which is the s [...]
-<p>Note that almost all arithmetic takes place modulo a 256-bit prime number, the modulus representing the field over which the elliptic curve is defined, here denoted as \( p \).</p>
-<p>On 64-bit processors, AMCL represents numbers to the base \( 2^{56} \) in a 5 element array, the Word Excess is 7 bits, and for a 256-bit modulus the Field Excess is 24 bits.</p>
-<p>On 32-bit processors, AMCL represents numbers to the base \( 2^{29} \) in a 9 element array, the Word Excess is 2 bits, and for a 256-bit modulus the Field Excess is 5 bits.</p>
-<p>On 16-bit processors, AMCL represents numbers to the base \( 2^{13} \) in a 20 element array, the Word Excess is 2 bits, and for a 256-bit modulus the Field Excess is 4 bits.</p>
-<p>Such a representation of a 256-bit number is referred to as a <strong>BIG</strong>. Addition or subtraction of a pair of <strong>BIG</strong>s, results in another <strong>BIG</strong>.</p>
-<p>The Java version uses exactly the same 32-bit representation as above.</p>
-<p>For Javascript (where all numbers are stored as 64-bit floating point with a 52-bit mantissa, but mostly manipulated as 32-bit integers), numbers are represented to the base \( 2^{24} \) in an 11 element array, the Word Excess is 7 bits, and the Field Excess for a 256-bit modulus is 8 bits.</p>
-<h3><a class="anchor" aria-hidden="true" id="addition-and-subtraction"></a><a href="#addition-and-subtraction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
-<p>The existence of a word excess means for example that multiple field elements can be added together digit by digit, without processing of carries, before overflow can occur.</p>
-<p>Only occasionally will there be a requirement to <em>normalize</em> these <em>extended</em> values, that is to force them back into the original format. Note that this is independent of the modulus.</p>
-<p>The existence of a field excess means that, independent of the word excess, multiple field elements can be added together before it is required to reduce the sum with respect to the modulus. In the literature this is referred to as lazy, or delayed, reduction. In fact we allow the modulus to be as small as 254 bits, which obviously increases the field excess.</p>
-<p>Note that these two mechanisms associated with the word excess and the field excess (often confused in the literature) operate largely independently of each other.</p>
-<p>AMCL has no support for negative numbers. Therefore subtraction will be implemented as field negation followed by addition. However a field element \( x \) can be negated by simply calculating \( −x = e.p − x \), where \( e \) is the current excess associated with \( x \). Therefore subtraction will be implemented as field negation followed by addition. In practice it is more convenient to round \( e \) up to next highest power of 2, in which case \( e.p \) can be calculated by a simp [...]
-<p><img src="/img/words.eps.jpg" alt="client"></p>
-<figure>
-  <caption><strong>Figure 2.</strong> AMCL Library</caption>
-</figure>
-<br>
-Normalization of extended numbers requires the word excess of each digit to be shifted right by the number of base bits, and added to the next digit, working right to left. Note that when numbers are subtracted digit-by-digit individual digits may become negative. However since we are avoiding using the sign bit, due to the magic of 2's complement arithmetic, this all works fine without any conditional branches.
-<p>Final full reduction of unreduced field elements is carried out using a simple shift-and-subtract of the modulus, with one subtraction needed for every bit in the actual field excess. Such reductions will rarely be required, as they are slow and hard to do in constant time. Ideally it should only be required at the end of a complex operation like an elliptic curve point multiplication.</p>
-<p>So with careful programming we avoid any unpredictable program branches. Since the length of field elements is fixed at compile time, it is expected that the compiler will unroll most of the time-critical loops. In any case the conditional branch required at the foot of a fixed-size loop can be accurately predicted by modern hardware.</p>
-<p>Worst case field excesses are easy to calculate. If two elements \( a \) and \( b \) are to be added, and if their current field excesses are \( e_{a} \) and \( e_{b} \) respectively, then clearly their sum will have a worst-case field excess of \( e_{a}+e_{b} \). By careful programming and choice of number base, full reductions can be largely eliminated<sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup>.</p>
-<h3><a class="anchor" aria-hidden="true" id="multiplication-and-reduction"></a><a href="#multiplication-and-reduction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
-<p>To support multiplication of <strong>BIG</strong>s, we will require a double-length <strong><em>DBIG</em></strong> type. Also the partial products that arise in the process of long multiplication will require a double-length data type. Fortunately many popular C compilers, like Gnu GCC, always support an integer type that is double the native word-length. For Java the &quot;int&quot; type is 32-bits and there is a double-length &quot;long&quot; type which is 64-bit. Of course for Java [...]
-<p>Multiprecision multiplication is performed column by column, propagating the carries, working from right-to-left, but using the fast method described in<sup class="footnote-ref"><a href="#fn3" id="fnref3">[3]</a></sup>. At the foot of each column the total is split into the sum for that column, and the carry to the next column. If the numbers are normalized prior to the multiplication, then with the word excesses that we have chosen, this will not result in overflow. The DBIG product  [...]
-<p>The method used for full reduction of a <strong>DBIG</strong> back to a <strong>BIG</strong> depends on the form of the modulus. We choose to support three distinct types of modulus, (a) pseudo Mersenne of the form \( 2^n-c \) where \( c \) is small and $n$ is the size of the modulus in bits, (b) Montgomery-friendly of the form \( k.2^n-1 \), and (c) moduli of no special form. For cases (b) and (c) we convert all field elements to Montgomery's \( n \)-residue form, and use Montgomery' [...]
-<p>In all cases the <strong>DBIG</strong> number to be reduced \( y \) must be in the range \( 0&lt;y&lt;pR \) (a requirement of Montgomery's method), and the result \( x \) is guaranteed to be in the range \( 0&lt;x&lt;2p \) , where \( R=2^{256+FE} \) for a 256-bit modulus. Note that the <strong>BIG</strong> result will be (nearly) fully reduced. The fact than we allow \( x \) to be larger than \( p \) means that we can avoid the notorious Montgomery &quot;final subtraction&quot;. Indep [...]
-<p>Observe how unreduced numbers involved in complex calculations tend to be (nearly fully) reduced if they are involved in a modular multiplication. So for example if field element \( x \) has a large field excess, and if we calculate \( x=x.y \), then as long as the unreduced product is less than \( pR \), the result will be a nearly fully reduced \( x \). So in many cases there is a natural tendency for field excesses not to grow without limit, and not to overflow, without requiring e [...]
-<p>Consider now a sequence of code that adds, subtracts and multiplies field elements, as might arise in elliptic curve additions and doublings. Assume that the code has been analysed and that normalisation code has been inserted where needed. Assume that the reduction code that activates if there is a possibility of an element overflowing its field excess, while present, never in fact is triggered (due to the behaviour described above). Then we assert that once a program has initialised [...]
-<h2><a class="anchor" aria-hidden="true" id="extension-field-arithmetic"></a><a href="#extension-field-arithmetic" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H [...]
-<p>To support cryptographic pairings we will need support for extension fields. We use a towering of extensions as required for BN curves and as required for higher security BLS curves. An element of the quadratic extension field will be represented as \( f=a+ib \), where \( i \) is the square root of the quadratic non-residue -1. To add, subtract and multiply them we use the obvious methods.</p>
-<p>However for negation we can construct \( -f=-a-ib \) as \( b-(a+b)+i.(a-(a+b) \) which requires only one base field negation. A similar idea can be used recursively for higher order extensions, so that only one base field negation is ever required.</p>
-<h2><a class="anchor" aria-hidden="true" id="elliptic-curves"></a><a href="#elliptic-curves" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
-<p>Three types of Elliptic curve are supported for the implementation of Elliptic Curve Cryptography (ECC), but curves are limited to popular families that support faster implementation. Weierstrass curves are supported using the Short Weierstrass representation:</p>
-<p>$$y^2=x^3+Ax+B$$</p>
-<p>where \( A=0 \) or \( A=-3 \). Edwards curves are supported using both regular and twisted Edwards format:</p>
-<p>$$Ax^2+y^2=1+Bx^2y^2$$</p>
-<p>where \( A=1 \) or \( A=-1 \). Montgomery curves are represented as:</p>
-<p>$$y^2=x^3+Ax^2+x$$</p>
-<p>where \( A \) must be small. As mentioned in the introduction, in all cases we use exception-free formulae if available, as this facilitates constant time imple- mentation, even if this invokes a significant performance penalty.</p>
-<p>In the particular case of elliptic curve point multiplication, there are potentially a myriad of very dangerous side-channel attacks that arise from using the classic double-and-add algorithm and its variants. Vulnerabilities arise if branches are taken that depend on secret bits, or if data is even accessed using secret values as indices. Many types of counter-measures have been suggested. The simplest solution is to use a constant-time algorithm like the Montgomery ladder, which has [...]
-<p>If using a Montgomery representation of the elliptic curve the Montgomery ladder is in fact the optimal algorithm for point multiplication. For other representations we use a fixed-sized signed window method.</p>
-<p>AMCL has built-in support for most standardised elliptic curves, along with many curves that have been proposed for standardisation. Specifically it supports the NIST256 curve, the well known Curve25519, the 256-bit Brain- pool curve, the ANSSI curve, and six NUMS (Nothing-Up-My-Sleeve) curves proposed by Bos et al. At higher levels of security the NIST384 and NIST521 curves are supported, also Curve41417 as well as the Goldilocks curve, and our own HiFive curve.
-Some of these proposals support only a Weierstrass representation, but many also allow an Edwards or Montgomery form. Tools are provided to allow easy integration of more curves.</p>
-<h2><a class="anchor" aria-hidden="true" id="support-for-classic-finite-field-methods"></a><a href="#support-for-classic-finite-field-methods" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0  [...]
-<p>Before Elliptic Curves, cryptography depended on methods based on simple finite fields. The most famous of these would be the well known RSA method. These methods have the advantage of being effectively parameterless, and therefore the issue of trust in parameters that arises for elliptic curves, is not an issue.</p>
-<p>However these methods are subject to index calculus based methods of cryptanalysis, and so fields and keys are typically much larger. So how to support for example a 2048-bit implementation of RSA based on a library designed for optimized 256-bit operations? The idea is simple; use AMCL as a virtual 256-bit machine, and build 2048-bit arithmetic on top of that.</p>
-<p>And to claw back some decent performance use the Karatsuba method so that for example 2048-bit multiplication recurses efficiently right down to 256-bit operations. Of course the downside of the Karatsuba method is that while it saves on multiplications, the number of additions and subtractions is greatly increased.  However the existence of generous word excesses in our representation makes this less of a problem, as most additions can be carried out without normalization.</p>
-<p>Secret key operations like RSA decryption use the Montgomery ladder to achieve side-channel-attack resistance.</p>
-<p>The implementation can currently support \( 1024.2^n \) bit fields, so for example 2048-bit RSA can be used to get reasonably close to the AES-128-bit level of security, and if desired 4096 bit RSA can be used to comfortably exceed it.</p>
-<p>Note that this code is supported independently of the elliptic curve code. So for example RSA and ECC can be run together within a single application.</p>
-<p>However we regard these methods as &quot;legacy&quot; as in our view ECC based methods are a much better fit for the IoT.</p>
-<h2><a class="anchor" aria-hidden="true" id="multi-lingual-support"></a><a href="#multi-lingual-support" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
-<p>It is a <strong>BIG</strong> ask to develop and maintain multiple versions of a crypto library written in radically different languages such as C, Java, Javascript, Go and Swift. This has discouraged the use of language specific methods (which are in any case of little relevance here), and strongly encouraged the use of simple, generic computer language constructs.</p>
-<p>This approach brings a surprising bonus: AMCL can be automatically converted to many other languages using available translator tools. For example Tangible Software Solutions market a Java to C# converter. This generated an efficient fully functional C# version of AMCL within minutes. The same company market a Java to Visual Basic converter.</p>
-<p>Google have a Java to Objective C converter specifically designed to convert Android apps developed in Java, to iOS apps written in Objective C.</p>
-<p>Of course not all languages can be supported in this way, so support for some will be developed manually. In particular a Rust version is currently under development.</p>
-<h2><a class="anchor" aria-hidden="true" id="discussion"></a><a href="#discussion" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
-<p>We found in our code that, with few exceptions, reductions due to possible overflow of the field excess of a <strong>BIG</strong> were very rare, especially for the 64-bit version of the library. Similarly normalization was rarely needed for the 64-bit code. This is due to the much greater excesses that apply in the 64-bit representation. In some experiments we calculated thousands of random pairings, and reduction due to field excess overflow detection never happened.</p>
-<p>In general in developing AMCL we tried to use optimal methods, without going to what we (very subjectively) regarded as extremes in order to maximize performance.  Algorithms that require less memory were generally preferred if the impact on performance was not large. Some optimizations, while perfectly valid, are hard to implement without having a significant impact on program readability and maintainability. Deciding which optimizations to use and which to reject (on the grounds of  [...]
-readability and maintainability) is admittedly rather arbitrary!</p>
-<p>One notable omission from AMCL is the use of pre-computation on fixed parameters in order to speed up certain calculations. We try to justify this, rather unconvincingly, by pointing out that pre-computation must of necessity increase code size. Furthermore such methods are more sensitive to side-channel attacks and much of their speed advantage will be lost if they are to be fully side-channel protected. Also pre-computation on secret values clearly increases the amount of secret dat [...]
-<p>However the development roadmap view might change in later versions depending on the project supporters in-the-field experiences of using AMCL.</p>
-<hr>
-
-    <div class="admonition admonition-note">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V [...]
-      </div>
-      <div class="admonition-content">
-    <p>Submit a pull request on the development branch of <a href="https://github.com/apache/incubator-milagro">Milagro Website Repo</a>.</p>
-</div></div><!--
-Supported admonition types are: caution, note, important, tip, warning.
---><hr class="footnotes-sep">
-<section class="footnotes">
-<ol class="footnotes-list">
-<li id="fn1"  class="footnote-item"><p><a href="http://eprint.iacr.org/2014/526">Curve41417 Karatsuba revisited</a> <a href="#fnref1" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn2"  class="footnote-item"><p><a href="http://eprint.iacr.org/2017/437">Slothful Reduction</a> <a href="#fnref2" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn3"  class="footnote-item"><p><a href="http://eprint.iacr.org/2015/1247">Missing a trick: Karatsuba variations</a> <a href="#fnref3" class="footnote-backref">↩</a></p>
-</li>
-</ol>
-</section>
-</span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/milagro-design"><span class="arrow-prev">← </span><span>Milagro Design</span></a><a class="docs-next button" href="/docs/amcl-c-api"><span>AMCL C API</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#introduction">Introduction</a></li><l [...]
\ No newline at end of file
diff --git a/docs/contributor-guide.html b/docs/contributor-guide.html
deleted file mode 100644
index 0330959..0000000
--- a/docs/contributor-guide.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Contributor&#x27;s Guide · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h1&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;become-a-contributor&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#become-a-contributor&quot; aria-hidden=&quot;true&quot [...]
-"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Contributor&#x27;s Guide · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;h1&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;become-a-contributor&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#become-a-contributor&quot; aria-hidden=&quot;true&quot; class=&quot;hash-link&q [...]
-"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type=" [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Contributor&#x27;s Guide</h1></header><article><div><span><h1><a class="anchor" aria-hidden="true" id="become-a-contributor"></a><a href="#become-a-contributor" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M [...]
-<p>Keeping with our spartan theme, for now, it's best to send an email to <a href="mailto:dev-subscribe@milagro.apache.org?Subject=Subscribe" target="_top">dev-subscribe @ milagro.apache.org</a> to join our mailing list.</p>
-<p>More information will be available here shortly.</p>
-<!--
-Supported admonition types are: caution, note, important, tip, warning.
---></span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zkp-mfa-api"><span class="arrow-prev">← </span><span>ZKP-MFA API</span></a><a class="docs-next button" href="/help"><span>Next</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="n [...]
\ No newline at end of file
diff --git a/docs/contributor-guide/index.html b/docs/contributor-guide/index.html
deleted file mode 100644
index 0330959..0000000
--- a/docs/contributor-guide/index.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Contributor&#x27;s Guide · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h1&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;become-a-contributor&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#become-a-contributor&quot; aria-hidden=&quot;true&quot [...]
-"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Contributor&#x27;s Guide · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;h1&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;become-a-contributor&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#become-a-contributor&quot; aria-hidden=&quot;true&quot; class=&quot;hash-link&q [...]
-"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type=" [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Contributor&#x27;s Guide</h1></header><article><div><span><h1><a class="anchor" aria-hidden="true" id="become-a-contributor"></a><a href="#become-a-contributor" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M [...]
-<p>Keeping with our spartan theme, for now, it's best to send an email to <a href="mailto:dev-subscribe@milagro.apache.org?Subject=Subscribe" target="_top">dev-subscribe @ milagro.apache.org</a> to join our mailing list.</p>
-<p>More information will be available here shortly.</p>
-<!--
-Supported admonition types are: caution, note, important, tip, warning.
---></span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zkp-mfa-api"><span class="arrow-prev">← </span><span>ZKP-MFA API</span></a><a class="docs-next button" href="/help"><span>Next</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="n [...]
\ No newline at end of file
diff --git a/docs/d-ta-api.html b/docs/d-ta-api.html
deleted file mode 100644
index 1b130ad..0000000
--- a/docs/d-ta-api.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>D-TA Node API · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="
-    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
-      &lt;div class=&quot;admonition-heading&quot;&gt;
-        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
-      &lt;/div&gt;
-      &lt;div class=&quot;admonition-content&quot;&gt;
-    &lt;/div&gt;&lt;/div&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="D-TA Node API · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="
-    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
-      &lt;div class=&quot;admonition-heading&quot;&gt;
-        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
-      &lt;/div&gt;
-      &lt;div class=&quot;admonition-content&quot;&gt;
-    &lt;/div&gt;&lt;/div&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Bl [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">D-TA Node API</h1></header><article><div><span>
-    <div class="admonition admonition-tip">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2 [...]
-      </div>
-      <div class="admonition-content">
-    <p>Interested in becoming a contributor? Milagro is looking for you.</p>
-<p><a href="/docs/contributor-guide.html">CONTRIBUTOR'S GUIDE</a>.</p>
-</div></div><p><a href="/swagger/index.html">Swagger</a></p>
-<!--
-Supported admonition types are: caution, note, important, tip, warning.
---></span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by howardkitto</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/d-ta-overview"><span class="arrow-prev">← </span><span>D-TA Node Overview</span></a><a class="docs-next button" href="/docs/zkp-mfa-overview"><span>ZKP-MFA Overview</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section  [...]
\ No newline at end of file
diff --git a/docs/d-ta-api/index.html b/docs/d-ta-api/index.html
deleted file mode 100644
index 1b130ad..0000000
--- a/docs/d-ta-api/index.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>D-TA Node API · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="
-    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
-      &lt;div class=&quot;admonition-heading&quot;&gt;
-        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
-      &lt;/div&gt;
-      &lt;div class=&quot;admonition-content&quot;&gt;
-    &lt;/div&gt;&lt;/div&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="D-TA Node API · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="
-    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
-      &lt;div class=&quot;admonition-heading&quot;&gt;
-        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
-      &lt;/div&gt;
-      &lt;div class=&quot;admonition-content&quot;&gt;
-    &lt;/div&gt;&lt;/div&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Bl [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">D-TA Node API</h1></header><article><div><span>
-    <div class="admonition admonition-tip">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2 [...]
-      </div>
-      <div class="admonition-content">
-    <p>Interested in becoming a contributor? Milagro is looking for you.</p>
-<p><a href="/docs/contributor-guide.html">CONTRIBUTOR'S GUIDE</a>.</p>
-</div></div><p><a href="/swagger/index.html">Swagger</a></p>
-<!--
-Supported admonition types are: caution, note, important, tip, warning.
---></span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by howardkitto</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/d-ta-overview"><span class="arrow-prev">← </span><span>D-TA Node Overview</span></a><a class="docs-next button" href="/docs/zkp-mfa-overview"><span>ZKP-MFA Overview</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section  [...]
\ No newline at end of file
diff --git a/docs/d-ta-overview.html b/docs/d-ta-overview.html
deleted file mode 100644
index 01e61e8..0000000
--- a/docs/d-ta-overview.html
+++ /dev/null
@@ -1,79 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Decentralized Trust Authority Overview · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="
-    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
-      &lt;div class=&quot;admonition-heading&quot;&gt;
-        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
-      &lt;/div&gt;
-      &lt;div class=&quot;admonition-content&quot;&gt;
-    &lt;/div&gt;&lt;/div&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Decentralized Trust Authority Overview · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="
-    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
-      &lt;div class=&quot;admonition-heading&quot;&gt;
-        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
-      &lt;/div&gt;
-      &lt;div class=&quot;admonition-content&quot;&gt;
-    &lt;/div&gt;&lt;/div&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Bl [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Decentralized Trust Authority Overview</h1></header><article><div><span>
-    <div class="admonition admonition-tip">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2 [...]
-      </div>
-      <div class="admonition-content">
-    <p>Interested in becoming a contributor? Milagro is looking for you.</p>
-<p><a href="/docs/contributor-guide.html">CONTRIBUTOR'S GUIDE</a>.</p>
-</div></div><!--
-Supported admonition types are: caution, note, important, tip, warning.
---></span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/amcl-javascript-api"><span class="arrow-prev">← </span><span class="function-name-prevnext">AMCL JavaScript API</span></a><a class="docs-next button" href="/docs/d-ta-api"><span>D-TA Node API</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav- [...]
\ No newline at end of file
diff --git a/docs/d-ta-overview/index.html b/docs/d-ta-overview/index.html
deleted file mode 100644
index 01e61e8..0000000
--- a/docs/d-ta-overview/index.html
+++ /dev/null
@@ -1,79 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Decentralized Trust Authority Overview · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="
-    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
-      &lt;div class=&quot;admonition-heading&quot;&gt;
-        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
-      &lt;/div&gt;
-      &lt;div class=&quot;admonition-content&quot;&gt;
-    &lt;/div&gt;&lt;/div&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Decentralized Trust Authority Overview · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="
-    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
-      &lt;div class=&quot;admonition-heading&quot;&gt;
-        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
-      &lt;/div&gt;
-      &lt;div class=&quot;admonition-content&quot;&gt;
-    &lt;/div&gt;&lt;/div&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Bl [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Decentralized Trust Authority Overview</h1></header><article><div><span>
-    <div class="admonition admonition-tip">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2 [...]
-      </div>
-      <div class="admonition-content">
-    <p>Interested in becoming a contributor? Milagro is looking for you.</p>
-<p><a href="/docs/contributor-guide.html">CONTRIBUTOR'S GUIDE</a>.</p>
-</div></div><!--
-Supported admonition types are: caution, note, important, tip, warning.
---></span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/amcl-javascript-api"><span class="arrow-prev">← </span><span class="function-name-prevnext">AMCL JavaScript API</span></a><a class="docs-next button" href="/docs/d-ta-api"><span>D-TA Node API</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav- [...]
\ No newline at end of file
diff --git a/docs/doc2.html b/docs/doc2.html
deleted file mode 100644
index d753672..0000000
--- a/docs/doc2.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>document number 2 · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;This is a link to &lt;a href=&quot;/docs/doc3&quot;&gt;another document.&lt;/a&gt;&lt;/p&gt;
-"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="document number 2 · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;p&gt;This is a link to &lt;a href=&quot;/docs/doc3&quot;&gt;another document.&lt;/a&gt;&lt;/p&gt;
-"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type=" [...]
-This is a link to an <a href="http://www.example.com">external page.</a></p>
-</span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto  [...]
\ No newline at end of file
diff --git a/docs/doc2/index.html b/docs/doc2/index.html
deleted file mode 100644
index d753672..0000000
--- a/docs/doc2/index.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>document number 2 · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;This is a link to &lt;a href=&quot;/docs/doc3&quot;&gt;another document.&lt;/a&gt;&lt;/p&gt;
-"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="document number 2 · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;p&gt;This is a link to &lt;a href=&quot;/docs/doc3&quot;&gt;another document.&lt;/a&gt;&lt;/p&gt;
-"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type=" [...]
-This is a link to an <a href="http://www.example.com">external page.</a></p>
-</span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto  [...]
\ No newline at end of file
diff --git a/docs/doc3.html b/docs/doc3.html
deleted file mode 100644
index ea9692f..0000000
--- a/docs/doc3.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>This is document number 3 · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. In ac euismod odio, eu consequat dui. Nullam molestie consectetur risus id imperdiet. Proin sodales ornare turpis, non molli [...]
-"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="This is document number 3 · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. In ac euismod odio, eu consequat dui. Nullam molestie consectetur risus id imperdiet. Proin sodales ornare turpis, non mollis massa ultricies id. Nam [...]
-"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type=" [...]
-<p>Duis et egestas libero, imperdiet faucibus ipsum. Sed posuere eget urna vel feugiat. Vivamus a arcu sagittis, fermentum urna dapibus, congue lectus. Fusce vulputate porttitor nisl, ac cursus elit volutpat vitae. Nullam vitae ipsum egestas, convallis quam non, porta nibh. Morbi gravida erat nec neque bibendum, eu pellentesque velit posuere. Fusce aliquam erat eu massa eleifend tristique.</p>
-<p>Sed consequat sollicitudin ipsum eget tempus. Integer a aliquet velit. In justo nibh, pellentesque non suscipit eget, gravida vel lacus. Donec odio ante, malesuada in massa quis, pharetra tristique ligula. Donec eros est, tristique eget finibus quis, semper non nisl. Vivamus et elit nec enim ornare placerat. Sed posuere odio a elit cursus sagittis.</p>
-<p>Phasellus feugiat purus eu tortor ultrices finibus. Ut libero nibh, lobortis et libero nec, dapibus posuere eros. Sed sagittis euismod justo at consectetur. Nulla finibus libero placerat, cursus sapien at, eleifend ligula. Vivamus elit nisl, hendrerit ac nibh eu, ultrices tempus dui. Nam tellus neque, commodo non rhoncus eu, gravida in risus. Nullam id iaculis tortor.</p>
-<p>Nullam at odio in sem varius tempor sit amet vel lorem. Etiam eu hendrerit nisl. Fusce nibh mauris, vulputate sit amet ex vitae, congue rhoncus nisl. Sed eget tellus purus. Nullam tempus commodo erat ut tristique. Cras accumsan massa sit amet justo consequat eleifend. Integer scelerisque vitae tellus id consectetur.</p>
-</span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto  [...]
\ No newline at end of file
diff --git a/docs/doc3/index.html b/docs/doc3/index.html
deleted file mode 100644
index ea9692f..0000000
--- a/docs/doc3/index.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>This is document number 3 · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. In ac euismod odio, eu consequat dui. Nullam molestie consectetur risus id imperdiet. Proin sodales ornare turpis, non molli [...]
-"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="This is document number 3 · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. In ac euismod odio, eu consequat dui. Nullam molestie consectetur risus id imperdiet. Proin sodales ornare turpis, non mollis massa ultricies id. Nam [...]
-"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type=" [...]
-<p>Duis et egestas libero, imperdiet faucibus ipsum. Sed posuere eget urna vel feugiat. Vivamus a arcu sagittis, fermentum urna dapibus, congue lectus. Fusce vulputate porttitor nisl, ac cursus elit volutpat vitae. Nullam vitae ipsum egestas, convallis quam non, porta nibh. Morbi gravida erat nec neque bibendum, eu pellentesque velit posuere. Fusce aliquam erat eu massa eleifend tristique.</p>
-<p>Sed consequat sollicitudin ipsum eget tempus. Integer a aliquet velit. In justo nibh, pellentesque non suscipit eget, gravida vel lacus. Donec odio ante, malesuada in massa quis, pharetra tristique ligula. Donec eros est, tristique eget finibus quis, semper non nisl. Vivamus et elit nec enim ornare placerat. Sed posuere odio a elit cursus sagittis.</p>
-<p>Phasellus feugiat purus eu tortor ultrices finibus. Ut libero nibh, lobortis et libero nec, dapibus posuere eros. Sed sagittis euismod justo at consectetur. Nulla finibus libero placerat, cursus sapien at, eleifend ligula. Vivamus elit nisl, hendrerit ac nibh eu, ultrices tempus dui. Nam tellus neque, commodo non rhoncus eu, gravida in risus. Nullam id iaculis tortor.</p>
-<p>Nullam at odio in sem varius tempor sit amet vel lorem. Etiam eu hendrerit nisl. Fusce nibh mauris, vulputate sit amet ex vitae, congue rhoncus nisl. Sed eget tellus purus. Nullam tempus commodo erat ut tristique. Cras accumsan massa sit amet justo consequat eleifend. Integer scelerisque vitae tellus id consectetur.</p>
-</span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto  [...]
\ No newline at end of file
diff --git a/docs/milagro-crypto.html b/docs/milagro-crypto.html
deleted file mode 100644
index 8c7efb8..0000000
--- a/docs/milagro-crypto.html
+++ /dev/null
@@ -1,128 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Milagro Crypto · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;One of the critical points about information security is to give access to resources only to authorized entities and deny access to unauthorized ones.&lt;/p&gt;
-"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Milagro Crypto · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;p&gt;One of the critical points about information security is to give access to resources only to authorized entities and deny access to unauthorized ones.&lt;/p&gt;
-"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type=" [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Milagro Crypto</h1></header><article><div><span><p>One of the critical points about information security is to give access to resources only to authorized entities and deny access to unauthorized ones.
-Preventing unauthorized access very often comes down to making it <strong><em>almost impossible</em></strong>, i.e., tough, expensive, complicated, and time-consuming for the unauthorized entities to get access to resources.</p>
-<p>The same principles apply to cryptography. In most cases, a suitable encryption mechanism satisfies at least two basic requirements:</p>
-<ol>
-<li>It is possible to give easy access to encrypted, cryptographically protected content to authorized entities.</li>
-<li>It is possible to make it extremely challenging for unauthorized entities to access encrypted (ditto) content.</li>
-</ol>
-<p>Using the above, we can define an operation: Encryption that is tough to reverse without possessing a particular parameter, for example, a decryption key.
-In RSA-based encryption two prime numbers, the private key, are multiplied to generate a public key, so that it is almost impossible to reverse the operation and retrieve the original prime numbers.</p>
-<p>Multiple sources are available online to read more on the topic. We recommend this short paper from <a href="https://math.berkeley.edu/~kpmann/encryption.pdf">Cal Berkeley at this link</a>.</p>
-<p>As noted in the mentioned paper, with RSA, we need enormous prime numbers to make it <strong><em>almost impossible</em></strong> to break the encryption, hence to find the two big prime numbers.
-On elliptic curves, multiplication of a point by a number can be defined so that much shorter numbers than in the big prime number case are needed to reach the same level of <strong><em>almost impossibility</em></strong>.</p>
-<h2><a class="anchor" aria-hidden="true" id="elliptic-curve-cryptography"></a><a href="#elliptic-curve-cryptography" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 1 [...]
-<p>Elliptic curves are another way to do encryption. Elliptic curves are mathematical structures, on which operations like addition and multiplications of points are easily defined.
-In particular, multiplication of a point by a number is a relatively easy operation to compute, while it is <strong><em>almost impossible</em></strong> to reverse the process, that is, to determine
-the multiplier knowing the result of the multiplication.</p>
-<p>The problem of reversing the multiplication is known as the Discrete Logarithm Problem on elliptic curves (ECDLP).
-The difference in computational complexity (between performing the multiplication and reversing the result to retrieve the multiplier) is one of the essential cornerstones of elliptic curve cryptography.</p>
-<h2><a class="anchor" aria-hidden="true" id="pairing-based-cryptography"></a><a href="#pairing-based-cryptography" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H [...]
-<p>Using elliptic curves we can now define on some elliptic curve a bilinear function called a <strong><em>pairing</em></strong>, which enables a mapping from two points on the same curve (or points on two related curves) into a different mathematical structure called a finite field. The bilinearity of the pairing is the key characteristic that makes pairing interesting and widely used in cryptography.</p>
-<p>A <strong><em>bilinear pairing</em></strong> \( e \) maps a pair of points (hence the name pairing) on an elliptic curve \( E \), defined over some field \( F_{q} \) to an element of the multiplicative group of a finite extension of \( {F}_{q^k} \).</p>
-<p>$$ e(mA+B, nP + Q) = e(A,P)^{mn} e(B, Q) $$</p>
-<p>The elements \( P \) and \( Q \) lie in two different groups, respectively \( G_{1} \) and \( G_{2} \). The choice of those two different group determines a different <strong><em>types</em></strong> of pairing.</p>
-<p>Let \( E \) an ordinary elliptic curve, take \( G_{1} \neq G_{2} \), and if there is not an efficiently computable isomorphism \( \phi:G_{1}\to G_{2} \) then the pairing is said to be of <strong><em>Type\( -3 \)</em></strong>.</p>
-<p>Currently, most of the state-of-the-art implementations of pairings take place on ordinary curves that assume the <strong><em>Type\( -3 \)</em></strong> scenario for reasons of efficiency and secure implementation.</p>
-<h2><a class="anchor" aria-hidden="true" id="identity-based-encryption"></a><a href="#identity-based-encryption" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c [...]
-<p>Pairing-based cryptography builds on elliptic curve-based cryptography, but the extra functionality of the pairing enables us to design schemes which would otherwise be impossible to realize, or would be prohibitively expensive to do using RSA-based cryptosystems.</p>
-<p>Identity-based encryption (IBE) is one such scheme that has received a large of amount of attention from the crypto community, and where commercially available products have been on the market for some time and are in wide use today.</p>
-<p>IBE is similar to classical asymmetric key cryptography, in that each user has a public key for encryption and a private key for decryption. But there are many differences:</p>
-<ol>
-<li>IBE allows public keys to be set to the value of a pre-existing identifier, such as an email address, while in PKI the public key does not contain the notion of an identity, and the association with an identifier is created by a certificate signed by a third party (Certification Authority).</li>
-<li>Clients or individual users do not generate private keys, but must instead download them from a trusted third party known as the Trust Authority (TA).</li>
-<li>In IBE, to encrypt messages, the sender must obtain public “system parameters” from the Trust Authority (TA). These system parameters are used in combination with the intended recipient’s identity string (e.g. email address) to generate an encrypted message.</li>
-</ol>
-<h2><a class="anchor" aria-hidden="true" id="post-quantum-cryptography"></a><a href="#post-quantum-cryptography" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c [...]
-<p>&quot;Post-quantum cryptography (sometimes referred to as quantum-proof, quantum-safe or quantum-resistant) refers to cryptographic algorithms (usually public-key algorithms) that are thought to be secure against an attack by a quantum computer. As of 2018, this is not true for the most popular public-key algorithms, which can be efficiently broken by a sufficiently strong hypothetical quantum computer.</p>
-<p>The problem with currently popular algorithms is that their security relies on one of three hard mathematical problems: the integer factorization problem, the discrete logarithm problem or the elliptic-curve discrete logarithm problem. All of these problems can be easily solved on a sufficiently powerful quantum computer running Shor's algorithm.</p>
-<p>Even though current, publicly known, experimental quantum computers lack processing power to break any real cryptographic algorithm, many cryptographers are designing new algorithms to prepare for a time when quantum computing becomes a threat.&quot;<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup></p>
-<h2><a class="anchor" aria-hidden="true" id="zero-knowledge-proof"></a><a href="#zero-knowledge-proof" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
-<p>&quot;In cryptography, a <strong>zero-knowledge proof</strong> or <strong>zero-knowledge protocol</strong> is a method by which one party (the <em>prover</em>) can prove to another party (the <em>verifier</em>) that a given statement is true, without conveying any information apart from the fact that the statement is indeed true.</p>
-<p>If proving the statement requires knowledge of some secret information on the part of the prover, the definition implies that the verifier will not be able to prove the statement in turn to anyone else, since the verifier does not possess the secret information.</p>
-<p>Notice that the statement being proved must include the assertion that the prover has such knowledge (otherwise, the statement would not be proved in zero-knowledge, since at the end of the protocol the verifier would gain the additional information that the prover has knowledge of the required secret information).</p>
-<p>If the statement consists <em>only</em> of the fact that the prover possesses the secret information, it is a special case known as <em>zero-knowledge proof of knowledge</em>, and it nicely illustrates the essence of the notion of zero-knowledge proofs: proving that one has knowledge of certain information is trivial if one is allowed to simply reveal that information; the challenge is proving that one has such knowledge without revealing the secret information or anything else.&quot; [...]
-<h2><a class="anchor" aria-hidden="true" id="summary"></a><a href="#summary" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
-<p><strong>Elliptic curve cryptography</strong> is an attractive alternative to conventional public key cryptography for implementation on constrained devices, where the significant computational resources i.e. speed, memory are limited and low-power wireless communication protocols is essential. It attains the same security levels as traditional cryptosystems using smaller parameter sizes.</p>
-<p><strong>Pairing-based cryptography</strong> builds on elliptic curve-based cryptography, but the extra functionality of the pairing enables us to design schemes which would otherwise be impossible to realize, or would be prohibitively expensive. Examples include identity-based encryption, group signatures and non-interactive zero-knowledge proofs.</p>
-<p><strong>Identity-based encryption</strong> doesn’t require certificates and certificate authorities. A trusted third party generates all the private keys, but all the public keys can be derived knowing the identity of the public key owner, for example, an email address.  That means that no certificate is needed to bind a public key to its owner.  Typically, it is up to the application to verify the owner possesses access to the unique identity attribute during the enrollment process i [...]
-<p><strong>Post-quantum cryptography</strong> Post-quantum cryptography are cryptosystems which can be run on a classical computer, but are secure even if an adversary possesses a quantum computer. For data that must be private, but has the potential to be long lived and publicly available, using post-quantum secure algorithms like AES 256-bit for encryption and SIKE for encapsulation of encryption keys is essential.</p>
-<p><strong>Zero-knowledge proof</strong> is a method by which one party (the prover) can prove to another party (the verifier) that a given statement is true, without conveying any information apart from the fact that the statement is indeed true.</p>
-<p>For an in-depth dive into the cryptographic protocols in use within the Milagro framework, see the next section <a href="milagro-protocols.html">Milagro Protocols</a>.</p>
-<hr>
-
-    <div class="admonition admonition-note">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V [...]
-      </div>
-      <div class="admonition-content">
-    <p>Submit a pull request on the development branch of <a href="https://github.com/apache/incubator-milagro">Milagro Website Repo</a>.</p>
-</div></div><!--
-Supported admonition types are: caution, note, important, tip, warning.
---><hr class="footnotes-sep">
-<section class="footnotes">
-<ol class="footnotes-list">
-<li id="fn1"  class="footnote-item"><p><a href="https://en.wikipedia.org/wiki/Post-quantum_cryptography">Wikipedia article</a> <a href="#fnref1" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn2"  class="footnote-item"><p><a href="https://en.wikipedia.org/wiki/Zero-knowledge_proof">Wikipedia article</a> <a href="#fnref2" class="footnote-backref">↩</a></p>
-</li>
-</ol>
-</section>
-</span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/milagro-intro"><span class="arrow-prev">← </span><span>Milagro Introduction</span></a><a class="docs-next button" href="/docs/milagro-protocols"><span>Milagro Protocols</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#elliptic-curve-cry [...]
\ No newline at end of file
diff --git a/docs/milagro-crypto/index.html b/docs/milagro-crypto/index.html
deleted file mode 100644
index 8c7efb8..0000000
--- a/docs/milagro-crypto/index.html
+++ /dev/null
@@ -1,128 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Milagro Crypto · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;One of the critical points about information security is to give access to resources only to authorized entities and deny access to unauthorized ones.&lt;/p&gt;
-"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Milagro Crypto · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;p&gt;One of the critical points about information security is to give access to resources only to authorized entities and deny access to unauthorized ones.&lt;/p&gt;
-"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type=" [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Milagro Crypto</h1></header><article><div><span><p>One of the critical points about information security is to give access to resources only to authorized entities and deny access to unauthorized ones.
-Preventing unauthorized access very often comes down to making it <strong><em>almost impossible</em></strong>, i.e., tough, expensive, complicated, and time-consuming for the unauthorized entities to get access to resources.</p>
-<p>The same principles apply to cryptography. In most cases, a suitable encryption mechanism satisfies at least two basic requirements:</p>
-<ol>
-<li>It is possible to give easy access to encrypted, cryptographically protected content to authorized entities.</li>
-<li>It is possible to make it extremely challenging for unauthorized entities to access encrypted (ditto) content.</li>
-</ol>
-<p>Using the above, we can define an operation: Encryption that is tough to reverse without possessing a particular parameter, for example, a decryption key.
-In RSA-based encryption two prime numbers, the private key, are multiplied to generate a public key, so that it is almost impossible to reverse the operation and retrieve the original prime numbers.</p>
-<p>Multiple sources are available online to read more on the topic. We recommend this short paper from <a href="https://math.berkeley.edu/~kpmann/encryption.pdf">Cal Berkeley at this link</a>.</p>
-<p>As noted in the mentioned paper, with RSA, we need enormous prime numbers to make it <strong><em>almost impossible</em></strong> to break the encryption, hence to find the two big prime numbers.
-On elliptic curves, multiplication of a point by a number can be defined so that much shorter numbers than in the big prime number case are needed to reach the same level of <strong><em>almost impossibility</em></strong>.</p>
-<h2><a class="anchor" aria-hidden="true" id="elliptic-curve-cryptography"></a><a href="#elliptic-curve-cryptography" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 1 [...]
-<p>Elliptic curves are another way to do encryption. Elliptic curves are mathematical structures, on which operations like addition and multiplications of points are easily defined.
-In particular, multiplication of a point by a number is a relatively easy operation to compute, while it is <strong><em>almost impossible</em></strong> to reverse the process, that is, to determine
-the multiplier knowing the result of the multiplication.</p>
-<p>The problem of reversing the multiplication is known as the Discrete Logarithm Problem on elliptic curves (ECDLP).
-The difference in computational complexity (between performing the multiplication and reversing the result to retrieve the multiplier) is one of the essential cornerstones of elliptic curve cryptography.</p>
-<h2><a class="anchor" aria-hidden="true" id="pairing-based-cryptography"></a><a href="#pairing-based-cryptography" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H [...]
-<p>Using elliptic curves we can now define on some elliptic curve a bilinear function called a <strong><em>pairing</em></strong>, which enables a mapping from two points on the same curve (or points on two related curves) into a different mathematical structure called a finite field. The bilinearity of the pairing is the key characteristic that makes pairing interesting and widely used in cryptography.</p>
-<p>A <strong><em>bilinear pairing</em></strong> \( e \) maps a pair of points (hence the name pairing) on an elliptic curve \( E \), defined over some field \( F_{q} \) to an element of the multiplicative group of a finite extension of \( {F}_{q^k} \).</p>
-<p>$$ e(mA+B, nP + Q) = e(A,P)^{mn} e(B, Q) $$</p>
-<p>The elements \( P \) and \( Q \) lie in two different groups, respectively \( G_{1} \) and \( G_{2} \). The choice of those two different group determines a different <strong><em>types</em></strong> of pairing.</p>
-<p>Let \( E \) an ordinary elliptic curve, take \( G_{1} \neq G_{2} \), and if there is not an efficiently computable isomorphism \( \phi:G_{1}\to G_{2} \) then the pairing is said to be of <strong><em>Type\( -3 \)</em></strong>.</p>
-<p>Currently, most of the state-of-the-art implementations of pairings take place on ordinary curves that assume the <strong><em>Type\( -3 \)</em></strong> scenario for reasons of efficiency and secure implementation.</p>
-<h2><a class="anchor" aria-hidden="true" id="identity-based-encryption"></a><a href="#identity-based-encryption" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c [...]
-<p>Pairing-based cryptography builds on elliptic curve-based cryptography, but the extra functionality of the pairing enables us to design schemes which would otherwise be impossible to realize, or would be prohibitively expensive to do using RSA-based cryptosystems.</p>
-<p>Identity-based encryption (IBE) is one such scheme that has received a large of amount of attention from the crypto community, and where commercially available products have been on the market for some time and are in wide use today.</p>
-<p>IBE is similar to classical asymmetric key cryptography, in that each user has a public key for encryption and a private key for decryption. But there are many differences:</p>
-<ol>
-<li>IBE allows public keys to be set to the value of a pre-existing identifier, such as an email address, while in PKI the public key does not contain the notion of an identity, and the association with an identifier is created by a certificate signed by a third party (Certification Authority).</li>
-<li>Clients or individual users do not generate private keys, but must instead download them from a trusted third party known as the Trust Authority (TA).</li>
-<li>In IBE, to encrypt messages, the sender must obtain public “system parameters” from the Trust Authority (TA). These system parameters are used in combination with the intended recipient’s identity string (e.g. email address) to generate an encrypted message.</li>
-</ol>
-<h2><a class="anchor" aria-hidden="true" id="post-quantum-cryptography"></a><a href="#post-quantum-cryptography" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c [...]
-<p>&quot;Post-quantum cryptography (sometimes referred to as quantum-proof, quantum-safe or quantum-resistant) refers to cryptographic algorithms (usually public-key algorithms) that are thought to be secure against an attack by a quantum computer. As of 2018, this is not true for the most popular public-key algorithms, which can be efficiently broken by a sufficiently strong hypothetical quantum computer.</p>
-<p>The problem with currently popular algorithms is that their security relies on one of three hard mathematical problems: the integer factorization problem, the discrete logarithm problem or the elliptic-curve discrete logarithm problem. All of these problems can be easily solved on a sufficiently powerful quantum computer running Shor's algorithm.</p>
-<p>Even though current, publicly known, experimental quantum computers lack processing power to break any real cryptographic algorithm, many cryptographers are designing new algorithms to prepare for a time when quantum computing becomes a threat.&quot;<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup></p>
-<h2><a class="anchor" aria-hidden="true" id="zero-knowledge-proof"></a><a href="#zero-knowledge-proof" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
-<p>&quot;In cryptography, a <strong>zero-knowledge proof</strong> or <strong>zero-knowledge protocol</strong> is a method by which one party (the <em>prover</em>) can prove to another party (the <em>verifier</em>) that a given statement is true, without conveying any information apart from the fact that the statement is indeed true.</p>
-<p>If proving the statement requires knowledge of some secret information on the part of the prover, the definition implies that the verifier will not be able to prove the statement in turn to anyone else, since the verifier does not possess the secret information.</p>
-<p>Notice that the statement being proved must include the assertion that the prover has such knowledge (otherwise, the statement would not be proved in zero-knowledge, since at the end of the protocol the verifier would gain the additional information that the prover has knowledge of the required secret information).</p>
-<p>If the statement consists <em>only</em> of the fact that the prover possesses the secret information, it is a special case known as <em>zero-knowledge proof of knowledge</em>, and it nicely illustrates the essence of the notion of zero-knowledge proofs: proving that one has knowledge of certain information is trivial if one is allowed to simply reveal that information; the challenge is proving that one has such knowledge without revealing the secret information or anything else.&quot; [...]
-<h2><a class="anchor" aria-hidden="true" id="summary"></a><a href="#summary" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
-<p><strong>Elliptic curve cryptography</strong> is an attractive alternative to conventional public key cryptography for implementation on constrained devices, where the significant computational resources i.e. speed, memory are limited and low-power wireless communication protocols is essential. It attains the same security levels as traditional cryptosystems using smaller parameter sizes.</p>
-<p><strong>Pairing-based cryptography</strong> builds on elliptic curve-based cryptography, but the extra functionality of the pairing enables us to design schemes which would otherwise be impossible to realize, or would be prohibitively expensive. Examples include identity-based encryption, group signatures and non-interactive zero-knowledge proofs.</p>
-<p><strong>Identity-based encryption</strong> doesn’t require certificates and certificate authorities. A trusted third party generates all the private keys, but all the public keys can be derived knowing the identity of the public key owner, for example, an email address.  That means that no certificate is needed to bind a public key to its owner.  Typically, it is up to the application to verify the owner possesses access to the unique identity attribute during the enrollment process i [...]
-<p><strong>Post-quantum cryptography</strong> Post-quantum cryptography are cryptosystems which can be run on a classical computer, but are secure even if an adversary possesses a quantum computer. For data that must be private, but has the potential to be long lived and publicly available, using post-quantum secure algorithms like AES 256-bit for encryption and SIKE for encapsulation of encryption keys is essential.</p>
-<p><strong>Zero-knowledge proof</strong> is a method by which one party (the prover) can prove to another party (the verifier) that a given statement is true, without conveying any information apart from the fact that the statement is indeed true.</p>
-<p>For an in-depth dive into the cryptographic protocols in use within the Milagro framework, see the next section <a href="milagro-protocols.html">Milagro Protocols</a>.</p>
-<hr>
-
-    <div class="admonition admonition-note">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V [...]
-      </div>
-      <div class="admonition-content">
-    <p>Submit a pull request on the development branch of <a href="https://github.com/apache/incubator-milagro">Milagro Website Repo</a>.</p>
-</div></div><!--
-Supported admonition types are: caution, note, important, tip, warning.
---><hr class="footnotes-sep">
-<section class="footnotes">
-<ol class="footnotes-list">
-<li id="fn1"  class="footnote-item"><p><a href="https://en.wikipedia.org/wiki/Post-quantum_cryptography">Wikipedia article</a> <a href="#fnref1" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn2"  class="footnote-item"><p><a href="https://en.wikipedia.org/wiki/Zero-knowledge_proof">Wikipedia article</a> <a href="#fnref2" class="footnote-backref">↩</a></p>
-</li>
-</ol>
-</section>
-</span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/milagro-intro"><span class="arrow-prev">← </span><span>Milagro Introduction</span></a><a class="docs-next button" href="/docs/milagro-protocols"><span>Milagro Protocols</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#elliptic-curve-cry [...]
\ No newline at end of file
diff --git a/docs/milagro-design.html b/docs/milagro-design.html
deleted file mode 100644
index bc7b2c6..0000000
--- a/docs/milagro-design.html
+++ /dev/null
@@ -1,147 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Milagro Design · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;protocols-and-technology&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#protocols-and-technology&quot; aria-hidden=&quot;true&quot;  [...]
-"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Milagro Design · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;protocols-and-technology&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#protocols-and-technology&quot; aria-hidden=&quot;true&quot; class=&quot;hash-link&quo [...]
-"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type=" [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Milagro Design</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="protocols-and-technology"></a><a href="#protocols-and-technology" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4  [...]
-<h3><a class="anchor" aria-hidden="true" id="identity-based-encryption"></a><a href="#identity-based-encryption" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c [...]
-<p>M-Pin and Chow Choo are in the class of Identity Based Encryption protocols, which use pairings in their construction. The M-Pin Protocol is intended to replace the well-known Username/Password authentication mechanism which is widely considered to be effectively broken.</p>
-<p>The main problem is the existence of a password file on the server, which is commonly stolen and hacked, revealing most user passwords.</p>
-<p>The idea behind Milagro's Zero-Knowledge Proof Multi-Factor Authentication (ZKP-MFA) Server is that each registered client is issued with a secret cryptographic key derived from their identity. They then prove to the Milagro ZKP-MFA Server that they are in possession of this key using a zero-knowledge proof protocol, which can be extended to include authenticated key agreement.</p>
-<p>This protocol design eliminates the need for any information related to clients, or their keys, to be kept on the authentication server. Should an attacker penetrate the server, it is impossible to deduct any information about end users because it doesn't exist, at least within the authentication system.</p>
-<p>Common to both Chow-Choo and M-Pin is that the keys are issued in shares, not as whole keys, by entities called Decentralized Trust Authorities. Only the clients who receive all of the shares from the D-TA's, will ever know their completed whole keys.</p>
-<p>Industry commentators have long advocated a multi-factor solution. The novel feature of M-Pin and Chow-Choo is that the cryptographic secrets issued to clients or peers may be safely split up into any number of independent factors.</p>
-<p>Each of these factors has the same form; they are points on an elliptic curve. To recreate the original secret, they are simply added together again -- it's as simple as that.</p>
-<p>One factor might be derived from a key unlocked from the biometric login (ex: FaceID) which is available as a PIN input on a successful biometric authentication. This 'biometric based' PIN is, on Apple hardware, stored in the secure element of the device (something you are). Another factor might be the remainder token securely stored in the authenticator app on a smartphone (something you have). Yet a final piece can be a PIN or passphrase (something you know), which is secure as the  [...]
-<h3><a class="anchor" aria-hidden="true" id="decentralized-identity"></a><a href="#decentralized-identity" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0 [...]
-<p>Milagro applications use these identity based protocols in combination with classical cryptosystems where the endpoint generates a public/private key pair and the private key never leaves the application or device.</p>
-<p>An entity running a Milagro application attaches the public keys it has generated upon initialization to a self sovereign identity document (ID Document), that only reveals a unique account code as identifier. This ID document is signed by the Milagro and distributed over a decentralized identity system built upon IPFS<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>, so each ID Document lives on an immutable, operation-based conflict-free replicated data structure (C [...]
-<p><em>For further detail, please see the format specification for ID Documents.</em></p>
-<h3><a class="anchor" aria-hidden="true" id="encrypted-envelope"></a><a href="#encrypted-envelope" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
-<p>ID Documents enable messages, called Encrypted Envelopes, containing secrets to be sent between endpoints running Milagro software. This can include clients, servers and peers and Milagro ZKP-MFA Servers, ZKP-MFA clients and Decentralized Trust Authorities. The ID Documents of recipients are available to any endpoint, so their public keys can be used to secure secrets in transit. In the case of digital asset custody, these messages need to be part of a permanent record, available in a [...]
-<p>Messages and immutable records are encrypted with AES-GCM at a 256-bit level with parameters anticipating quantum cryptography. It is necessary to know the recipient's public key, obtained via the ID Document, in order to encapsulate the encryption key for each recipient of the message or entity who has access to the Immutable Record.</p>
-<p>SIKE keys pairs are generated locally by endpoints running Milagro software, are not received in shares from D-TAs. SIKE public keys are used by the sender of a message to encapsulate the AES 256-bit key used to create the Encrypted Envelope. An encapsulation takes place once for every recipient and is affixed to the Encrypted Envelope.</p>
-<p>BLS signatures handle two jobs. Like SIKE key pairs, BLS signature key pairs are generated locally by endpoints running Milagro software, are not received in shares from D-TAs. The signatures these keys generate enable the non-repudiation of Encrypted Envelopes between endpoints and stored long term as immutable records. This is a classic use case of digital signatures, like PGP signatures over email.</p>
-<p><em>For further detail, please see the format specification for Encrypted Envelopes.</em></p>
-<p>The other use of BLS signatures is more complex. As described previously, BLS signatures have unique properties. Milagro leverages its own Encrypted Envelope format to enable the BLS ability of splitting signing keys by with a secure mechanism to securely distribute the split BLS signing keys. When delivered securely to the right entities, these part shares of BLS signing keys themselves become signature keys. The thresholds of these signatures can be aggregated securely to produce an [...]
-<p>Another capability is for a public key to be aggregated from multiple public keys in advance of aggregating signatures created by the corresponding private keys. These private keys are generated locally, and never leave the device, vs the method described previously. Signatures made from these keys can themselves be aggregated into a complete signature, verified by the aggregated public key.</p>
-<p>These capabilities are well suited to safeguarding secrets with an example in the following section.</p>
-<h2><a class="anchor" aria-hidden="true" id="decentralized-trust-authorities-d-ta"></a><a href="#decentralized-trust-authorities-d-ta" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 [...]
-<p>The Milagro framework protocols rely on Decentralized Trust Authorities for two jobs: Issuing shares of secrets, or safeguarding shares of secrets.</p>
-<p>D-TAs can issue shares, or fractions, of Type-3 Pairing private keys to Milagro Applications, such as the Milagro ZKP-MFA Servers or clients or to other D-TAs, which can be any software or hardware applications that have embedded some Milagro code in order derive the functional capabilities.</p>
-<p>These clients or peers become the only entities that know the completed whole keys assembled from shares issued by different Decentralized Trust Authorities.</p>
-<p>Type-3 pairings were selected as they are the most efficient pairing and will work with non-supersingular pairing-friendly curves.</p>
-<p>These operate as \( G_1 \) x \( G_2 \rightarrow G_T \), where \( G_2 \) is a particular group of points, again of the order \( q \), but on a twisted elliptic curve defined over an extension which is a divisor of \( k \).</p>
-<p>These curves can be constructed to be a near perfect fit at any required level of security. The pairing protocols within the Milagro framework all work on a Type-3 pairing.</p>
-<p>One of the novel aspects of pairing-based cryptography is that deployed secrets are commonly represented as points on an elliptic curve, which are the result of multiplying a known point by a master secret \( s \).</p>
-<p>So for example a secret might be of the form \( sP \), where \( P \) is known.</p>
-<p>There are a number of interesting things we can do with secrets that have this form, that are not possible with the secrets that arise when using other cryptographic technologies.</p>
-<p>For example they can be split into two, into \( s_1P \) and \( s_2P \) where \( s=s_1+s_2 \) and \( sP = s_1P +s_2P \).</p>
-<p>In fact they can be just as easily split into multiple parts, just like chopping up a cucumber.</p>
-<p>We can also add extra components to create a secret of the form \( s(P_1+P_2) = sP_1+sP_2 \).</p>
-<p>It is the flexibility that arises from this form of the secret that allows us to introduce the idea of chopping off a tiny sliver of the secret to support a PIN number.</p>
-<p>It also facilitates the concept of <em>Time Permits</em> as discussed in a later section.</p>
-<p>Lastly, it enables Decentralized Trust.</p>
-<h3><a class="anchor" aria-hidden="true" id="issuing-secrets"></a><a href="#issuing-secrets" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
-<p>A Trusted Authority will be in possession of a master secret \( s \), a random element of \( F_q \).</p>
-<p>A client secret is of the form \( s.H(ID) \), where ID is the client identity and \( H(.) \) a hash function which maps to a point on \( G_1 \).</p>
-<p>From prior art, we assume that \( H \) is modeled as a random oracle where \( H(ID) = r_{ID}.P \)</p>
-<p>where \( r_{ID} \in F_q \) is random and \( P \) is a fixed generator of \( G_1 \).</p>
-<p>A Milagro ZKP-MFA Server will be issued with \( sQ \), where \( Q \) is a fixed generator of \( G_2 \).</p>
-<p>Note that this will be the only multiple of \( s \) in \( G_2 \) ever provided by the TA. Servers will always be associated with their own unique master secrets.</p>
-<p>Note that the TA functionality can be trivially decentralized and distributed using a secret sharing scheme, to remove from the overall system a single point of compromise or coercion.</p>
-<p>In the simplest possible case there may be two Decentralized Trusted Authorities (D-TAs), each of which independently maintains their own share of the master key.</p>
-<p>So \( s=s_1+s_2 \), and each D-TA issues a part-client key to the client \( s_1 H(ID) \) and \( s_2 H(ID) \), which the client, after receiving the shares, adds together to form their full key.</p>
-<p>Now even if one D-TA is compromised, the client key is still safe.</p>
-<p>In the age of self sovereign identity, any entity can be a Decentralized Trust Authority as long as its Beneficiary trusts it to securely issue shares of secrets, or hold them for safekeeping.</p>
-<h3><a class="anchor" aria-hidden="true" id="safekeeping-secrets"></a><a href="#safekeeping-secrets" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
-<p>A D-TA may act as a Fiduciary over secrets where it can participate in a process to enable a Beneficiary to recover the secret. Using aggregated BLS signatures in a simple example, an entity running Milagro software may engage multiple D-TAs to act as Fiduciaries over its seed value used to generate and back up a cryptocurrency HD Wallet.</p>
-<p>As described in<sup class="footnote-ref"><a href="#fn1" id="fnref1:1">[1]</a></sup> the first step is for each D-TA to generate a key pair by choosing \( s k \stackrel{s}{\leftarrow} \mathbb{Z}_{q} \) to compute:</p>
-<p>$$ p k \leftarrow g_{2}^{s k}$$</p>
-<p>which outputs the \( (p k, s k) \).</p>
-<p>The Beneficiary would select which D-TA service providers (acting in concert) it would use to help it generate a secret. Assume a Beneficiary is also a participant in this protocol, it also runs a D-TA and acts as the designated combiner in the protocol.</p>
-<p>In advance of creating the HD Wallet seed, a Beneficiary would elicit the services of Decentralized Trust Authorities to act as Fiduciaries in a decentralized secret recovery protocol. The Beneficiary's next step calculates the aggregate public key by running protocol \( \text { KAg }\)({\( p k_{1}, \ldots, p k_{n} \)}) using the D-TA's known public keys as input (who have agreed to act as Fiduciaries to this process) and also its own public key.</p>
-<p>The Beneficiary then requests a signature \( \sigma \) on a message \( m \) from each of the D-TAs acting as Fiduciaries, including itself. For each D-TA, singing is a single round protocol.</p>
-<p>To finalize setup, each D-TA transmits its signature \( \sigma \) to the Beneficiary (acting as designated combiner). The Beneficiary generates its own signature and combines it with the received D-TA signatures for the final aggregated signature of \( \sigma \leftarrow \prod_{j=1}^{n} s_{j} \).</p>
-<p>The final signature is verified against the aggregated public key if the verifier function outputs 1. Assuming so, the setup completes by hashing the aggregated signature where \( H(\tilde{\sigma}) \) is the seed of the HD Wallet.</p>
-<p>Assuming the Beneficiary has backed up their BLS signature key, recovering the HD Wallet seed from multiple Fiduciaries becomes as simple as re-running the setup protocol again. It is easy to envision Fiduciary services running D-TAs, responding and authenticating requests for recovering secrets.</p>
-<h2><a class="anchor" aria-hidden="true" id="summary"></a><a href="#summary" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
-<h3><a class="anchor" aria-hidden="true" id="pairing-and-pq-cryptography"></a><a href="#pairing-and-pq-cryptography" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 1 [...]
-<p>Milagro leverages a combination of pairing and post-quantum algorithms to distribute cryptographic operations and split cryptographic parameters, providing a level of security and functionality that is a step forward in when compared to the certificate backed cryptosystems in service today. With pairing cryptography, security systems such as multi-factor authentication using zero knowledge protocols, certificate-less authenticated key agreement with perfect forward secrecy and decentr [...]
-<h3><a class="anchor" aria-hidden="true" id="decentralized-cryptosystem"></a><a href="#decentralized-cryptosystem" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H [...]
-<p>Bitcoin's blockchain provides an alternative distributed approach to managing a currency without the need for a central bank. With bitcoin, the ledger is distributed, not centralized. Milagro's cryptosystem is decentralized to create the same advantages as a distributed ledger. While architecturally different to the blockchain, Milagro's cryptosystem and the applications built on it are compatible with and can add significant value to cryptocurrencies and other decentralized networks.</p>
-<p>Milagro envisions a new class of cryptographic service providers called Decentralized Trust Authorities, or D-TAs for short. The purpose of a D-TA is to independently issue shares, or fractions, of cryptographic keys to Milagro clients and servers and application endpoints which have embedded Milagro cryptographic libraries. D-TA's also operate as 'Fiduciaries', to enable their 'Beneficiaries' to recover secrets in a decentralized manner, without keeping a share of the secret itself.  [...]
-<h3><a class="anchor" aria-hidden="true" id="no-single-point-of-compromise"></a><a href="#no-single-point-of-compromise" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12  [...]
-<p>Milagro entities receive issued shares cryptographic keys or signatures and combine them to create the whole completed key or signature, thus becoming the only audience who possess knowledge of the entire key or signature. If D-TAs are under separate organizational controls, current root key compromises and key escrow threats inherent in PKI systems are an order of magnitude harder to achieve in a Milagro cryptosystem.  An attacker would need to subvert all independent parties.</p>
-<p>In other words, all D-TAs used to generate shares, or fractions, of keys for Milagro clients and servers must be compromised to create the equivalent of a PKI root key compromise. All D-TAs under the threshold needed to recreate a signature would need to be compromised (including the Beneficiary) in order to generate a final signature.</p>
-<hr>
-
-    <div class="admonition admonition-note">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V [...]
-      </div>
-      <div class="admonition-content">
-    <p>Submit a pull request on the development branch of <a href="https://github.com/apache/incubator-milagro">Milagro Website Repo</a>.</p>
-</div></div><!--
-Supported admonition types are: caution, note, important, tip, warning.
---><hr class="footnotes-sep">
-<section class="footnotes">
-<ol class="footnotes-list">
-<li id="fn1"  class="footnote-item"><p><a href="https://eprint.iacr.org/2018/483">Compact Multi-Signatures for Smaller Blockchains</a> <a href="#fnref1" class="footnote-backref">↩</a> <a href="#fnref1:1" class="footnote-backref">↩</a></p>
-</li>
-</ol>
-</section>
-</span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/milagro-protocols"><span class="arrow-prev">← </span><span>Milagro Protocols</span></a><a class="docs-next button" href="/docs/amcl-overview"><span>AMCL Overview</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#protocols-and-technology" [...]
\ No newline at end of file
diff --git a/docs/milagro-design/index.html b/docs/milagro-design/index.html
deleted file mode 100644
index bc7b2c6..0000000
--- a/docs/milagro-design/index.html
+++ /dev/null
@@ -1,147 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Milagro Design · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;protocols-and-technology&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#protocols-and-technology&quot; aria-hidden=&quot;true&quot;  [...]
-"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Milagro Design · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;protocols-and-technology&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#protocols-and-technology&quot; aria-hidden=&quot;true&quot; class=&quot;hash-link&quo [...]
-"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type=" [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Milagro Design</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="protocols-and-technology"></a><a href="#protocols-and-technology" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4  [...]
-<h3><a class="anchor" aria-hidden="true" id="identity-based-encryption"></a><a href="#identity-based-encryption" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c [...]
-<p>M-Pin and Chow Choo are in the class of Identity Based Encryption protocols, which use pairings in their construction. The M-Pin Protocol is intended to replace the well-known Username/Password authentication mechanism which is widely considered to be effectively broken.</p>
-<p>The main problem is the existence of a password file on the server, which is commonly stolen and hacked, revealing most user passwords.</p>
-<p>The idea behind Milagro's Zero-Knowledge Proof Multi-Factor Authentication (ZKP-MFA) Server is that each registered client is issued with a secret cryptographic key derived from their identity. They then prove to the Milagro ZKP-MFA Server that they are in possession of this key using a zero-knowledge proof protocol, which can be extended to include authenticated key agreement.</p>
-<p>This protocol design eliminates the need for any information related to clients, or their keys, to be kept on the authentication server. Should an attacker penetrate the server, it is impossible to deduct any information about end users because it doesn't exist, at least within the authentication system.</p>
-<p>Common to both Chow-Choo and M-Pin is that the keys are issued in shares, not as whole keys, by entities called Decentralized Trust Authorities. Only the clients who receive all of the shares from the D-TA's, will ever know their completed whole keys.</p>
-<p>Industry commentators have long advocated a multi-factor solution. The novel feature of M-Pin and Chow-Choo is that the cryptographic secrets issued to clients or peers may be safely split up into any number of independent factors.</p>
-<p>Each of these factors has the same form; they are points on an elliptic curve. To recreate the original secret, they are simply added together again -- it's as simple as that.</p>
-<p>One factor might be derived from a key unlocked from the biometric login (ex: FaceID) which is available as a PIN input on a successful biometric authentication. This 'biometric based' PIN is, on Apple hardware, stored in the secure element of the device (something you are). Another factor might be the remainder token securely stored in the authenticator app on a smartphone (something you have). Yet a final piece can be a PIN or passphrase (something you know), which is secure as the  [...]
-<h3><a class="anchor" aria-hidden="true" id="decentralized-identity"></a><a href="#decentralized-identity" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0 [...]
-<p>Milagro applications use these identity based protocols in combination with classical cryptosystems where the endpoint generates a public/private key pair and the private key never leaves the application or device.</p>
-<p>An entity running a Milagro application attaches the public keys it has generated upon initialization to a self sovereign identity document (ID Document), that only reveals a unique account code as identifier. This ID document is signed by the Milagro and distributed over a decentralized identity system built upon IPFS<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>, so each ID Document lives on an immutable, operation-based conflict-free replicated data structure (C [...]
-<p><em>For further detail, please see the format specification for ID Documents.</em></p>
-<h3><a class="anchor" aria-hidden="true" id="encrypted-envelope"></a><a href="#encrypted-envelope" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
-<p>ID Documents enable messages, called Encrypted Envelopes, containing secrets to be sent between endpoints running Milagro software. This can include clients, servers and peers and Milagro ZKP-MFA Servers, ZKP-MFA clients and Decentralized Trust Authorities. The ID Documents of recipients are available to any endpoint, so their public keys can be used to secure secrets in transit. In the case of digital asset custody, these messages need to be part of a permanent record, available in a [...]
-<p>Messages and immutable records are encrypted with AES-GCM at a 256-bit level with parameters anticipating quantum cryptography. It is necessary to know the recipient's public key, obtained via the ID Document, in order to encapsulate the encryption key for each recipient of the message or entity who has access to the Immutable Record.</p>
-<p>SIKE keys pairs are generated locally by endpoints running Milagro software, are not received in shares from D-TAs. SIKE public keys are used by the sender of a message to encapsulate the AES 256-bit key used to create the Encrypted Envelope. An encapsulation takes place once for every recipient and is affixed to the Encrypted Envelope.</p>
-<p>BLS signatures handle two jobs. Like SIKE key pairs, BLS signature key pairs are generated locally by endpoints running Milagro software, are not received in shares from D-TAs. The signatures these keys generate enable the non-repudiation of Encrypted Envelopes between endpoints and stored long term as immutable records. This is a classic use case of digital signatures, like PGP signatures over email.</p>
-<p><em>For further detail, please see the format specification for Encrypted Envelopes.</em></p>
-<p>The other use of BLS signatures is more complex. As described previously, BLS signatures have unique properties. Milagro leverages its own Encrypted Envelope format to enable the BLS ability of splitting signing keys by with a secure mechanism to securely distribute the split BLS signing keys. When delivered securely to the right entities, these part shares of BLS signing keys themselves become signature keys. The thresholds of these signatures can be aggregated securely to produce an [...]
-<p>Another capability is for a public key to be aggregated from multiple public keys in advance of aggregating signatures created by the corresponding private keys. These private keys are generated locally, and never leave the device, vs the method described previously. Signatures made from these keys can themselves be aggregated into a complete signature, verified by the aggregated public key.</p>
-<p>These capabilities are well suited to safeguarding secrets with an example in the following section.</p>
-<h2><a class="anchor" aria-hidden="true" id="decentralized-trust-authorities-d-ta"></a><a href="#decentralized-trust-authorities-d-ta" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 [...]
-<p>The Milagro framework protocols rely on Decentralized Trust Authorities for two jobs: Issuing shares of secrets, or safeguarding shares of secrets.</p>
-<p>D-TAs can issue shares, or fractions, of Type-3 Pairing private keys to Milagro Applications, such as the Milagro ZKP-MFA Servers or clients or to other D-TAs, which can be any software or hardware applications that have embedded some Milagro code in order derive the functional capabilities.</p>
-<p>These clients or peers become the only entities that know the completed whole keys assembled from shares issued by different Decentralized Trust Authorities.</p>
-<p>Type-3 pairings were selected as they are the most efficient pairing and will work with non-supersingular pairing-friendly curves.</p>
-<p>These operate as \( G_1 \) x \( G_2 \rightarrow G_T \), where \( G_2 \) is a particular group of points, again of the order \( q \), but on a twisted elliptic curve defined over an extension which is a divisor of \( k \).</p>
-<p>These curves can be constructed to be a near perfect fit at any required level of security. The pairing protocols within the Milagro framework all work on a Type-3 pairing.</p>
-<p>One of the novel aspects of pairing-based cryptography is that deployed secrets are commonly represented as points on an elliptic curve, which are the result of multiplying a known point by a master secret \( s \).</p>
-<p>So for example a secret might be of the form \( sP \), where \( P \) is known.</p>
-<p>There are a number of interesting things we can do with secrets that have this form, that are not possible with the secrets that arise when using other cryptographic technologies.</p>
-<p>For example they can be split into two, into \( s_1P \) and \( s_2P \) where \( s=s_1+s_2 \) and \( sP = s_1P +s_2P \).</p>
-<p>In fact they can be just as easily split into multiple parts, just like chopping up a cucumber.</p>
-<p>We can also add extra components to create a secret of the form \( s(P_1+P_2) = sP_1+sP_2 \).</p>
-<p>It is the flexibility that arises from this form of the secret that allows us to introduce the idea of chopping off a tiny sliver of the secret to support a PIN number.</p>
-<p>It also facilitates the concept of <em>Time Permits</em> as discussed in a later section.</p>
-<p>Lastly, it enables Decentralized Trust.</p>
-<h3><a class="anchor" aria-hidden="true" id="issuing-secrets"></a><a href="#issuing-secrets" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
-<p>A Trusted Authority will be in possession of a master secret \( s \), a random element of \( F_q \).</p>
-<p>A client secret is of the form \( s.H(ID) \), where ID is the client identity and \( H(.) \) a hash function which maps to a point on \( G_1 \).</p>
-<p>From prior art, we assume that \( H \) is modeled as a random oracle where \( H(ID) = r_{ID}.P \)</p>
-<p>where \( r_{ID} \in F_q \) is random and \( P \) is a fixed generator of \( G_1 \).</p>
-<p>A Milagro ZKP-MFA Server will be issued with \( sQ \), where \( Q \) is a fixed generator of \( G_2 \).</p>
-<p>Note that this will be the only multiple of \( s \) in \( G_2 \) ever provided by the TA. Servers will always be associated with their own unique master secrets.</p>
-<p>Note that the TA functionality can be trivially decentralized and distributed using a secret sharing scheme, to remove from the overall system a single point of compromise or coercion.</p>
-<p>In the simplest possible case there may be two Decentralized Trusted Authorities (D-TAs), each of which independently maintains their own share of the master key.</p>
-<p>So \( s=s_1+s_2 \), and each D-TA issues a part-client key to the client \( s_1 H(ID) \) and \( s_2 H(ID) \), which the client, after receiving the shares, adds together to form their full key.</p>
-<p>Now even if one D-TA is compromised, the client key is still safe.</p>
-<p>In the age of self sovereign identity, any entity can be a Decentralized Trust Authority as long as its Beneficiary trusts it to securely issue shares of secrets, or hold them for safekeeping.</p>
-<h3><a class="anchor" aria-hidden="true" id="safekeeping-secrets"></a><a href="#safekeeping-secrets" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
-<p>A D-TA may act as a Fiduciary over secrets where it can participate in a process to enable a Beneficiary to recover the secret. Using aggregated BLS signatures in a simple example, an entity running Milagro software may engage multiple D-TAs to act as Fiduciaries over its seed value used to generate and back up a cryptocurrency HD Wallet.</p>
-<p>As described in<sup class="footnote-ref"><a href="#fn1" id="fnref1:1">[1]</a></sup> the first step is for each D-TA to generate a key pair by choosing \( s k \stackrel{s}{\leftarrow} \mathbb{Z}_{q} \) to compute:</p>
-<p>$$ p k \leftarrow g_{2}^{s k}$$</p>
-<p>which outputs the \( (p k, s k) \).</p>
-<p>The Beneficiary would select which D-TA service providers (acting in concert) it would use to help it generate a secret. Assume a Beneficiary is also a participant in this protocol, it also runs a D-TA and acts as the designated combiner in the protocol.</p>
-<p>In advance of creating the HD Wallet seed, a Beneficiary would elicit the services of Decentralized Trust Authorities to act as Fiduciaries in a decentralized secret recovery protocol. The Beneficiary's next step calculates the aggregate public key by running protocol \( \text { KAg }\)({\( p k_{1}, \ldots, p k_{n} \)}) using the D-TA's known public keys as input (who have agreed to act as Fiduciaries to this process) and also its own public key.</p>
-<p>The Beneficiary then requests a signature \( \sigma \) on a message \( m \) from each of the D-TAs acting as Fiduciaries, including itself. For each D-TA, singing is a single round protocol.</p>
-<p>To finalize setup, each D-TA transmits its signature \( \sigma \) to the Beneficiary (acting as designated combiner). The Beneficiary generates its own signature and combines it with the received D-TA signatures for the final aggregated signature of \( \sigma \leftarrow \prod_{j=1}^{n} s_{j} \).</p>
-<p>The final signature is verified against the aggregated public key if the verifier function outputs 1. Assuming so, the setup completes by hashing the aggregated signature where \( H(\tilde{\sigma}) \) is the seed of the HD Wallet.</p>
-<p>Assuming the Beneficiary has backed up their BLS signature key, recovering the HD Wallet seed from multiple Fiduciaries becomes as simple as re-running the setup protocol again. It is easy to envision Fiduciary services running D-TAs, responding and authenticating requests for recovering secrets.</p>
-<h2><a class="anchor" aria-hidden="true" id="summary"></a><a href="#summary" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
-<h3><a class="anchor" aria-hidden="true" id="pairing-and-pq-cryptography"></a><a href="#pairing-and-pq-cryptography" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 1 [...]
-<p>Milagro leverages a combination of pairing and post-quantum algorithms to distribute cryptographic operations and split cryptographic parameters, providing a level of security and functionality that is a step forward in when compared to the certificate backed cryptosystems in service today. With pairing cryptography, security systems such as multi-factor authentication using zero knowledge protocols, certificate-less authenticated key agreement with perfect forward secrecy and decentr [...]
-<h3><a class="anchor" aria-hidden="true" id="decentralized-cryptosystem"></a><a href="#decentralized-cryptosystem" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H [...]
-<p>Bitcoin's blockchain provides an alternative distributed approach to managing a currency without the need for a central bank. With bitcoin, the ledger is distributed, not centralized. Milagro's cryptosystem is decentralized to create the same advantages as a distributed ledger. While architecturally different to the blockchain, Milagro's cryptosystem and the applications built on it are compatible with and can add significant value to cryptocurrencies and other decentralized networks.</p>
-<p>Milagro envisions a new class of cryptographic service providers called Decentralized Trust Authorities, or D-TAs for short. The purpose of a D-TA is to independently issue shares, or fractions, of cryptographic keys to Milagro clients and servers and application endpoints which have embedded Milagro cryptographic libraries. D-TA's also operate as 'Fiduciaries', to enable their 'Beneficiaries' to recover secrets in a decentralized manner, without keeping a share of the secret itself.  [...]
-<h3><a class="anchor" aria-hidden="true" id="no-single-point-of-compromise"></a><a href="#no-single-point-of-compromise" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12  [...]
-<p>Milagro entities receive issued shares cryptographic keys or signatures and combine them to create the whole completed key or signature, thus becoming the only audience who possess knowledge of the entire key or signature. If D-TAs are under separate organizational controls, current root key compromises and key escrow threats inherent in PKI systems are an order of magnitude harder to achieve in a Milagro cryptosystem.  An attacker would need to subvert all independent parties.</p>
-<p>In other words, all D-TAs used to generate shares, or fractions, of keys for Milagro clients and servers must be compromised to create the equivalent of a PKI root key compromise. All D-TAs under the threshold needed to recreate a signature would need to be compromised (including the Beneficiary) in order to generate a final signature.</p>
-<hr>
-
-    <div class="admonition admonition-note">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V [...]
-      </div>
-      <div class="admonition-content">
-    <p>Submit a pull request on the development branch of <a href="https://github.com/apache/incubator-milagro">Milagro Website Repo</a>.</p>
-</div></div><!--
-Supported admonition types are: caution, note, important, tip, warning.
---><hr class="footnotes-sep">
-<section class="footnotes">
-<ol class="footnotes-list">
-<li id="fn1"  class="footnote-item"><p><a href="https://eprint.iacr.org/2018/483">Compact Multi-Signatures for Smaller Blockchains</a> <a href="#fnref1" class="footnote-backref">↩</a> <a href="#fnref1:1" class="footnote-backref">↩</a></p>
-</li>
-</ol>
-</section>
-</span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/milagro-protocols"><span class="arrow-prev">← </span><span>Milagro Protocols</span></a><a class="docs-next button" href="/docs/amcl-overview"><span>AMCL Overview</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#protocols-and-technology" [...]
\ No newline at end of file
diff --git a/docs/milagro-intro.html b/docs/milagro-intro.html
deleted file mode 100644
index 3e010be..0000000
--- a/docs/milagro-intro.html
+++ /dev/null
@@ -1,128 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Milagro Introduction · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Apache Milagro is core security infrastructure and crypto libraries purpose-built for decentralized networks and distributed systems, while also providing value to cloud-connected app-ce [...]
-"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Milagro Introduction · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;p&gt;Apache Milagro is core security infrastructure and crypto libraries purpose-built for decentralized networks and distributed systems, while also providing value to cloud-connected app-centric software and IoT de [...]
-"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type=" [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Milagro Introduction</h1></header><article><div><span><p>Apache Milagro is core security infrastructure and crypto libraries purpose-built for decentralized networks and distributed systems, while also providing value to cloud-connected app-centric software and IoT devices that require Internet scale.</p>
-<p>Milagro's purpose is to provide a secure and positive open source alternative to centralized and proprietary monolithic trust providers such as commercial certificate authorities and the certificate backed cryptosystems that rely on them.</p>
-<h2><a class="anchor" aria-hidden="true" id="pairing-cryptography"></a><a href="#pairing-cryptography" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
-<p>Over the last decade, pairings on elliptic curves have been a very active area of research in cryptography, particularly within decentralized networks and distributed systems.</p>
-<p>A pairing is a kind of the bilinear map defined over an elliptic curve. Examples include Weil pairing, Tate pairing, optimal Ate pairing and so on.</p>
-<p>Pairings map pairs of points on an elliptic curve into the multiplicative group of a finite field. Their unique properties have enabled many new cryptographic protocols that had not previously been feasible.</p>
-<p><a href="https://en.wikipedia.org/wiki/Pairing-based_cryptography">Pairing-Based Cryptography (PBC)</a> is emerging as a solution to complex problems that proved intractable to the standard mathematics of Public-Key Cryptography such as Identity-Based Encryption, whereby the identity of a client can be used as their public key.</p>
-<p>In certain use cases, this removes the need for a PKI infrastructure eliminates the root key 'single point of compromise' weakness, as the main reason to issue certificates is used to bind a public / private key pair to an identity.</p>
-<p>Removing the certificate management burden enables the identity management and key lifecycle to take place within the decentralized cryptosystem itself.</p>
-<p>As a result, Milagro's decentralized cryptosystem design goals seek to deliver products that are easier to scale and manage that traditional PKI, and are a seamless fit for today's decentralized networks and distributed systems.</p>
-<h2><a class="anchor" aria-hidden="true" id="pairings-go-mainstream"></a><a href="#pairings-go-mainstream" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0 [...]
-<p>Pairings are key building blocks in Apache Milagro's crypto libraries and products. As examples, BLS signatures feature prominently in Milagro Decentralized Trust Authorities (D-TA), while the M-Pin protocol used in the Milagro ZKP-MFA clients and servers.</p>
-<p><a href="https://en.wikipedia.org/wiki/Boneh-Lynn-Shacham">BLS signatures</a> are widely recognized within the cryptocurrency space for their signature aggregation abilities. BLS signatures are now going through an IETF submission review<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup> standardization process.</p>
-<p>The <a href="https://eprint.iacr.org/2002/164">M-Pin protocol</a><sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup>, which is a multi-factor authentication protocol built upon zero-knowledge proofs, is widely deployed across cloud infrastructures and in public facing deployments by the UK Government<sup class="footnote-ref"><a href="#fn3" id="fnref3">[3]</a></sup>.</p>
-<p>Zcash implements their own zero-knowledge proof algorithm named zk-SNARKs (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge)<sup class="footnote-ref"><a href="#fn4" id="fnref4">[4]</a></sup>. zk-SNARKs is used for protecting privacy of transactions of Zcash. Pairings are a key ingredient for constructing zk-SNARKS.</p>
-<p>Cloudflare introduced Geo Key Manager<sup class="footnote-ref"><a href="#fn5" id="fnref5">[5]</a></sup> to restrict distribution of customers' private keys to the subset of their data centers. To achieve this functionality, attribute-based encryption is used and pairings again are a key building block.</p>
-<p>The Trusted Computing Group (TCG) specifies ECDAA (Elliptic Curve Direct Anonymous Attestation) in the specification of Trusted Platform Module<sup class="footnote-ref"><a href="#fn6" id="fnref6">[6]</a></sup>. ECDAA is a protocol for proving the attestation held by a Trusted Platform Module (TPM) to a verifier without revealing the attestation held by that TPM. Pairing cryptography is used for constructing ECDAA. FIDO Alliance<sup class="footnote-ref"><a href="#fn7" id="fnref7">[7]</ [...]
-<p>In 2015, NIST <a href="http://www.theregister.co.uk/2014/05/26/congress_divorces_nist_from_nsa/">(<strong><em>the 'post-NSA' NIST</em></strong>)</a> goes so far as to recommend standardization of pairing based cryptography in their publication, <a href="http://nvlpubs.nist.gov/nistpubs/jres/120/jres.120.002.pdf">Report on Pairing-Based Cryptography</a>.</p>
-<blockquote>
-<p>&quot;Based on the study, the report suggests an approach for including pairing-based cryptography schemes in the NIST cryptographic toolkit. As we have seen, pairing-based cryptography has much to offer. Pairing-based schemes, such as IBE, provide special properties which cannot be provided through traditional PKI in a straightforward way. Therefore, pairing-based cryptographic schemes would make a nice addition to NIST’s cryptographic toolkit. In particular, we have focused attentio [...]
-<pre><code class="hljs"> --- NIST, Report on Pairing-Based Cryptography
-</code></pre>
-</blockquote>
-<h2><a class="anchor" aria-hidden="true" id="the-move-to-post-quantum"></a><a href="#the-move-to-post-quantum" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
-<p>The security of almost all public-key cryptosystems in use today rely on computational assumptions such as the Integer Factorization (IF) and Discrete Logarithm (DL) problems as the foundation of their security. These are problems that today's classical computers cannot solve. In 1994, Shor<sup class="footnote-ref"><a href="#fn9" id="fnref9">[9]</a></sup> showed that both IF and DL problems are easy to solve on a quantum computer, based on the laws of quantum physics. As a consequence [...]
-<p>According to NIST in its Report on Post-Quantum Cryptography<sup class="footnote-ref"><a href="#fn10" id="fnref10">[10]</a></sup>, &quot;It will take significant effort to ensure a smooth and secure migration from the current widely used cryptosystems to their quantum computing resistant counterparts. Therefore, regardless of whether we can estimate the exact time of the arrival of the quantum computing era, we must begin now to prepare our information security systems to be able to r [...]
-<p>Most experts have a range of quantum computing being strong enough to crack today's cryptosystems being on the horizon anywhere from five to twenty years. It should also be stated that quantum computation only speeds up a brute-force keysearch by a factor of a square root, so any symmetric algorithm can be made secure against a quantum computer by doubling the key length, i.e., take AES from 128 bits to 256.</p>
-<p>Milagro has begun implementing post-quantum algorithms into its code base, beginning with the Supersingular Isogeny Key Encapsulation<sup class="footnote-ref"><a href="#fn11" id="fnref11">[11]</a></sup> protocol. Why?</p>
-<p>Obviously, data that is transient and that does not retain a long term value doesn't require a level of protection against a post-quantum adversary. It becomes an issue when data is retained for the long term. If data is harvested and stored, and has retained value even after decades, then it should be protected to a post-quantum degree. In short, you are protecting the data for the day <em>WHEN</em> a working quantum computer comes online.</p>
-<hr>
-<p><strong>It is hoped that Apache Milagro will become a safe, IPR free island of innovation for cryptographers interested in pairing protocols that deliver much needed core security infrastructure for the advancement of decentralized networks and distributed systems.</strong></p>
-<p><strong>We hope you join us and become part of this journey.</strong></p>
-<hr>
-
-    <div class="admonition admonition-note">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V [...]
-      </div>
-      <div class="admonition-content">
-    <p>Submit a pull request on the development branch of <a href="https://github.com/apache/incubator-milagro">Milagro Website Repo</a>.</p>
-</div></div><!--
-Supported admonition types are: caution, note, important, tip, warning.
---><hr class="footnotes-sep">
-<section class="footnotes">
-<ol class="footnotes-list">
-<li id="fn1"  class="footnote-item"><p><a href="https://datatracker.ietf.org/doc/draft-boneh-bls-signature/">IETF BLS Signature Internet Draft</a> <a href="#fnref1" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn2"  class="footnote-item"><p><a href="https://tools.ietf.org/html/draft-scott-mpin-00">IETF M-Pin Informational Draft</a> <a href="#fnref2" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn3"  class="footnote-item"><p><a href="https://www.computerweekly.com/news/4500260479/Experian-chooses-UK-authentication-startup-for-GovUK-Verify">UK Government selects M-Pin protocol based authentication provider</a> <a href="#fnref3" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn4"  class="footnote-item"><p><a href="https://z.cash/technology/zksnarks.html">Lindemann, R., &quot;What are zk-SNARKs?&quot;, July 2018</a> <a href="#fnref4" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn5"  class="footnote-item"><p><a href="https://blog.cloudflare.com/geo-key-manager-how-it-works">Geo Key Manager: How It Works</a> <a href="#fnref5" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn6"  class="footnote-item"><p><a href="https://trustedcomputinggroup.org/resource/tpm-library-specification/">TPM 2.0 Library Specification&quot;, September 2016</a> <a href="#fnref6" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn7"  class="footnote-item"><p><a href="https://fidoalliance.org/specs/fido-v2.0-rd-20180702/fido-ecdaa-algorithm-v2.0-rd-20180702.html">FIDO ECDAA Algorithm - FIDO Alliance Review Draft 02</a> <a href="#fnref7" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn8"  class="footnote-item"><p><a href="https://www.w3.org/TR/webauthn">Web Authentication: An API for accessing Public Key Credentials Level 1 - W3C Candidate Recommendation</a> <a href="#fnref8" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn9"  class="footnote-item"><p><a href="https://pdfs.semanticscholar.org/6902/cb196ec032852ff31cc178ca822a5f67b2f2.pdf">Algorithms for quantum computation: discrete logarithms and factoring</a> <a href="#fnref9" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn10"  class="footnote-item"><p><a href="https://nvlpubs.nist.gov/nistpubs/ir/2016/NIST.IR.8105.pdf">Report on post-quantum cryptography</a> <a href="#fnref10" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn11"  class="footnote-item"><p><a href="https://sike.org/">SIKE</a> <a href="#fnref11" class="footnote-backref">↩</a></p>
-</li>
-</ol>
-</section>
-</span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-next button" href="/docs/milagro-crypto"><span>Milagro Crypto</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#pairing-cryptography">Pairing Cryptography</a></li><li><a href="#pairings-go-mainstream">Pairings Go Mainstream</a></li><li><a href="#the-move-to-post [...]
\ No newline at end of file
diff --git a/docs/milagro-intro/index.html b/docs/milagro-intro/index.html
deleted file mode 100644
index 3e010be..0000000
--- a/docs/milagro-intro/index.html
+++ /dev/null
@@ -1,128 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Milagro Introduction · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Apache Milagro is core security infrastructure and crypto libraries purpose-built for decentralized networks and distributed systems, while also providing value to cloud-connected app-ce [...]
-"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Milagro Introduction · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;p&gt;Apache Milagro is core security infrastructure and crypto libraries purpose-built for decentralized networks and distributed systems, while also providing value to cloud-connected app-centric software and IoT de [...]
-"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type=" [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Milagro Introduction</h1></header><article><div><span><p>Apache Milagro is core security infrastructure and crypto libraries purpose-built for decentralized networks and distributed systems, while also providing value to cloud-connected app-centric software and IoT devices that require Internet scale.</p>
-<p>Milagro's purpose is to provide a secure and positive open source alternative to centralized and proprietary monolithic trust providers such as commercial certificate authorities and the certificate backed cryptosystems that rely on them.</p>
-<h2><a class="anchor" aria-hidden="true" id="pairing-cryptography"></a><a href="#pairing-cryptography" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
-<p>Over the last decade, pairings on elliptic curves have been a very active area of research in cryptography, particularly within decentralized networks and distributed systems.</p>
-<p>A pairing is a kind of the bilinear map defined over an elliptic curve. Examples include Weil pairing, Tate pairing, optimal Ate pairing and so on.</p>
-<p>Pairings map pairs of points on an elliptic curve into the multiplicative group of a finite field. Their unique properties have enabled many new cryptographic protocols that had not previously been feasible.</p>
-<p><a href="https://en.wikipedia.org/wiki/Pairing-based_cryptography">Pairing-Based Cryptography (PBC)</a> is emerging as a solution to complex problems that proved intractable to the standard mathematics of Public-Key Cryptography such as Identity-Based Encryption, whereby the identity of a client can be used as their public key.</p>
-<p>In certain use cases, this removes the need for a PKI infrastructure eliminates the root key 'single point of compromise' weakness, as the main reason to issue certificates is used to bind a public / private key pair to an identity.</p>
-<p>Removing the certificate management burden enables the identity management and key lifecycle to take place within the decentralized cryptosystem itself.</p>
-<p>As a result, Milagro's decentralized cryptosystem design goals seek to deliver products that are easier to scale and manage that traditional PKI, and are a seamless fit for today's decentralized networks and distributed systems.</p>
-<h2><a class="anchor" aria-hidden="true" id="pairings-go-mainstream"></a><a href="#pairings-go-mainstream" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0 [...]
-<p>Pairings are key building blocks in Apache Milagro's crypto libraries and products. As examples, BLS signatures feature prominently in Milagro Decentralized Trust Authorities (D-TA), while the M-Pin protocol used in the Milagro ZKP-MFA clients and servers.</p>
-<p><a href="https://en.wikipedia.org/wiki/Boneh-Lynn-Shacham">BLS signatures</a> are widely recognized within the cryptocurrency space for their signature aggregation abilities. BLS signatures are now going through an IETF submission review<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup> standardization process.</p>
-<p>The <a href="https://eprint.iacr.org/2002/164">M-Pin protocol</a><sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup>, which is a multi-factor authentication protocol built upon zero-knowledge proofs, is widely deployed across cloud infrastructures and in public facing deployments by the UK Government<sup class="footnote-ref"><a href="#fn3" id="fnref3">[3]</a></sup>.</p>
-<p>Zcash implements their own zero-knowledge proof algorithm named zk-SNARKs (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge)<sup class="footnote-ref"><a href="#fn4" id="fnref4">[4]</a></sup>. zk-SNARKs is used for protecting privacy of transactions of Zcash. Pairings are a key ingredient for constructing zk-SNARKS.</p>
-<p>Cloudflare introduced Geo Key Manager<sup class="footnote-ref"><a href="#fn5" id="fnref5">[5]</a></sup> to restrict distribution of customers' private keys to the subset of their data centers. To achieve this functionality, attribute-based encryption is used and pairings again are a key building block.</p>
-<p>The Trusted Computing Group (TCG) specifies ECDAA (Elliptic Curve Direct Anonymous Attestation) in the specification of Trusted Platform Module<sup class="footnote-ref"><a href="#fn6" id="fnref6">[6]</a></sup>. ECDAA is a protocol for proving the attestation held by a Trusted Platform Module (TPM) to a verifier without revealing the attestation held by that TPM. Pairing cryptography is used for constructing ECDAA. FIDO Alliance<sup class="footnote-ref"><a href="#fn7" id="fnref7">[7]</ [...]
-<p>In 2015, NIST <a href="http://www.theregister.co.uk/2014/05/26/congress_divorces_nist_from_nsa/">(<strong><em>the 'post-NSA' NIST</em></strong>)</a> goes so far as to recommend standardization of pairing based cryptography in their publication, <a href="http://nvlpubs.nist.gov/nistpubs/jres/120/jres.120.002.pdf">Report on Pairing-Based Cryptography</a>.</p>
-<blockquote>
-<p>&quot;Based on the study, the report suggests an approach for including pairing-based cryptography schemes in the NIST cryptographic toolkit. As we have seen, pairing-based cryptography has much to offer. Pairing-based schemes, such as IBE, provide special properties which cannot be provided through traditional PKI in a straightforward way. Therefore, pairing-based cryptographic schemes would make a nice addition to NIST’s cryptographic toolkit. In particular, we have focused attentio [...]
-<pre><code class="hljs"> --- NIST, Report on Pairing-Based Cryptography
-</code></pre>
-</blockquote>
-<h2><a class="anchor" aria-hidden="true" id="the-move-to-post-quantum"></a><a href="#the-move-to-post-quantum" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
-<p>The security of almost all public-key cryptosystems in use today rely on computational assumptions such as the Integer Factorization (IF) and Discrete Logarithm (DL) problems as the foundation of their security. These are problems that today's classical computers cannot solve. In 1994, Shor<sup class="footnote-ref"><a href="#fn9" id="fnref9">[9]</a></sup> showed that both IF and DL problems are easy to solve on a quantum computer, based on the laws of quantum physics. As a consequence [...]
-<p>According to NIST in its Report on Post-Quantum Cryptography<sup class="footnote-ref"><a href="#fn10" id="fnref10">[10]</a></sup>, &quot;It will take significant effort to ensure a smooth and secure migration from the current widely used cryptosystems to their quantum computing resistant counterparts. Therefore, regardless of whether we can estimate the exact time of the arrival of the quantum computing era, we must begin now to prepare our information security systems to be able to r [...]
-<p>Most experts have a range of quantum computing being strong enough to crack today's cryptosystems being on the horizon anywhere from five to twenty years. It should also be stated that quantum computation only speeds up a brute-force keysearch by a factor of a square root, so any symmetric algorithm can be made secure against a quantum computer by doubling the key length, i.e., take AES from 128 bits to 256.</p>
-<p>Milagro has begun implementing post-quantum algorithms into its code base, beginning with the Supersingular Isogeny Key Encapsulation<sup class="footnote-ref"><a href="#fn11" id="fnref11">[11]</a></sup> protocol. Why?</p>
-<p>Obviously, data that is transient and that does not retain a long term value doesn't require a level of protection against a post-quantum adversary. It becomes an issue when data is retained for the long term. If data is harvested and stored, and has retained value even after decades, then it should be protected to a post-quantum degree. In short, you are protecting the data for the day <em>WHEN</em> a working quantum computer comes online.</p>
-<hr>
-<p><strong>It is hoped that Apache Milagro will become a safe, IPR free island of innovation for cryptographers interested in pairing protocols that deliver much needed core security infrastructure for the advancement of decentralized networks and distributed systems.</strong></p>
-<p><strong>We hope you join us and become part of this journey.</strong></p>
-<hr>
-
-    <div class="admonition admonition-note">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V [...]
-      </div>
-      <div class="admonition-content">
-    <p>Submit a pull request on the development branch of <a href="https://github.com/apache/incubator-milagro">Milagro Website Repo</a>.</p>
-</div></div><!--
-Supported admonition types are: caution, note, important, tip, warning.
---><hr class="footnotes-sep">
-<section class="footnotes">
-<ol class="footnotes-list">
-<li id="fn1"  class="footnote-item"><p><a href="https://datatracker.ietf.org/doc/draft-boneh-bls-signature/">IETF BLS Signature Internet Draft</a> <a href="#fnref1" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn2"  class="footnote-item"><p><a href="https://tools.ietf.org/html/draft-scott-mpin-00">IETF M-Pin Informational Draft</a> <a href="#fnref2" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn3"  class="footnote-item"><p><a href="https://www.computerweekly.com/news/4500260479/Experian-chooses-UK-authentication-startup-for-GovUK-Verify">UK Government selects M-Pin protocol based authentication provider</a> <a href="#fnref3" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn4"  class="footnote-item"><p><a href="https://z.cash/technology/zksnarks.html">Lindemann, R., &quot;What are zk-SNARKs?&quot;, July 2018</a> <a href="#fnref4" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn5"  class="footnote-item"><p><a href="https://blog.cloudflare.com/geo-key-manager-how-it-works">Geo Key Manager: How It Works</a> <a href="#fnref5" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn6"  class="footnote-item"><p><a href="https://trustedcomputinggroup.org/resource/tpm-library-specification/">TPM 2.0 Library Specification&quot;, September 2016</a> <a href="#fnref6" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn7"  class="footnote-item"><p><a href="https://fidoalliance.org/specs/fido-v2.0-rd-20180702/fido-ecdaa-algorithm-v2.0-rd-20180702.html">FIDO ECDAA Algorithm - FIDO Alliance Review Draft 02</a> <a href="#fnref7" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn8"  class="footnote-item"><p><a href="https://www.w3.org/TR/webauthn">Web Authentication: An API for accessing Public Key Credentials Level 1 - W3C Candidate Recommendation</a> <a href="#fnref8" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn9"  class="footnote-item"><p><a href="https://pdfs.semanticscholar.org/6902/cb196ec032852ff31cc178ca822a5f67b2f2.pdf">Algorithms for quantum computation: discrete logarithms and factoring</a> <a href="#fnref9" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn10"  class="footnote-item"><p><a href="https://nvlpubs.nist.gov/nistpubs/ir/2016/NIST.IR.8105.pdf">Report on post-quantum cryptography</a> <a href="#fnref10" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn11"  class="footnote-item"><p><a href="https://sike.org/">SIKE</a> <a href="#fnref11" class="footnote-backref">↩</a></p>
-</li>
-</ol>
-</section>
-</span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-next button" href="/docs/milagro-crypto"><span>Milagro Crypto</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#pairing-cryptography">Pairing Cryptography</a></li><li><a href="#pairings-go-mainstream">Pairings Go Mainstream</a></li><li><a href="#the-move-to-post [...]
\ No newline at end of file
diff --git a/docs/milagro-protocols.html b/docs/milagro-protocols.html
deleted file mode 100644
index cccd8d7..0000000
--- a/docs/milagro-protocols.html
+++ /dev/null
@@ -1,864 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Milagro Protocols · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;The Apache Milagro crypto libraries contain an (almost) overwhelming choice of algorithms and cryptographic primitives for robust and rapid application development. This section focuses spe [...]
-"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Milagro Protocols · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;p&gt;The Apache Milagro crypto libraries contain an (almost) overwhelming choice of algorithms and cryptographic primitives for robust and rapid application development. This section focuses specifically on a few protoc [...]
-"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type=" [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Milagro Protocols</h1></header><article><div><span><p>The Apache Milagro crypto libraries contain an (almost) overwhelming choice of algorithms and cryptographic primitives for robust and rapid application development. This section focuses specifically on a few protocols that are used extensively as key building blocks within the  [...]
-<h2><a class="anchor" aria-hidden="true" id="m-pin-protocol-introduction"></a><a href="#m-pin-protocol-introduction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 1 [...]
-<p>The genesis of the M-Pin Protocol was first put forward in a research paper by <a href="https://scholar.google.com/citations?user=GsM-aeEAAAAJ&amp;hl=en">Dr. Michael Scott</a> in 2002<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>.</p>
-<p>The M-Pin Protocol has been iterated on several times over the years since, to develop three distinct modes, which will be explored in the following sections.</p>
-<p>As noted in <a href="milagro-crypto.html">Milagro Crypto</a>, the M-Pin Protocol is of these classifications and exploits the features of:</p>
-<ul>
-<li>Elliptic Curve Cryptography</li>
-<li>Pairing Based Cryptography</li>
-<li>Identity Based Encryption</li>
-<li>Zero Knowledge Proof</li>
-</ul>
-<p>Because of the characteristics that M-Pin inherits from the four techniques above, the M-Pin Protocol and its variants are able to deliver:</p>
-<ul>
-<li>Multi-factor authentication (MFA) using Zero Knowledge Proof</li>
-<li>Authenticated Key Agreement</li>
-<li>Distribution, or splitting, of Trust Authorities</li>
-<li><a href="https://en.wikipedia.org/wiki/Subliminal_channel">Subliminal Channel Communication</a><sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup></li>
-</ul>
-<p>The three modes of operation of the M-Pin Protocol are as follows:</p>
-<ul>
-<li><strong>M-Pin 1-pass</strong>: Client to server authentication via digital signature, this mode implements a <em>non-interactive</em> zero knowledge proof and is resistant to <a href="https://en.wikipedia.org/wiki/Man-in-the-middle_attack">MITM (man in the middle)</a> attacks.</li>
-<li><strong>M-Pin 2-pass</strong>: Client to server authentication via a <em>interactive</em> zero knowledge proof, resistant to <a href="https://en.wikipedia.org/wiki/Man-in-the-middle_attack">MITM</a> and <a href="https://kcitls.org">KCI (Key Compromise Impersonation)</a> attacks.</li>
-<li><strong>M-Pin FULL</strong>: Mutual client to server authentication via a <em>interactive</em> zero knowledge proof, resistant to MITM and KCI attacks and able to drive an Authenticated <a href="https://en.wikipedia.org/wiki/Key-agreement_protocol">Key Agreement</a> between client and server, resulting in 128 bit shared secret key.</li>
-</ul>
-<p>Note that the M-Pin Full Authenticated Key Agreement possesses the quality of <a href="https://en.wikipedia.org/wiki/Forward_secrecy">perfect forward secrecy (PFS)</a>, meaning, even if the client and server long term keys are compromised, the past session keys (used to encrypt TLS traffic, for example) are not compromised.</p>
-<h2><a class="anchor" aria-hidden="true" id="chow-choo-protocol-introduction"></a><a href="#chow-choo-protocol-introduction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 [...]
-<p>The Chow-Choo Protocol was developed by Sherman S.M. Chow and Kim-Kwang Raymond Choo and published in 2007 via a research paper titled Strongly-Secure Identity-based Key Agreement<sup class="footnote-ref"><a href="#fn3" id="fnref3">[3]</a></sup>.  The Chow-Choo Protocol can be technically described as an identity-based key agreement protocol.</p>
-<p>The Chow-Choo Protocol is of these classifications and exploits the features of:</p>
-<ul>
-<li>Elliptic Curve Cryptography</li>
-<li>Pairing Based Cryptography</li>
-<li>Identity Based Encryption</li>
-</ul>
-<p>Because of the characteristics that Chow-Choo inherits from the three techniques above, the Chow-Choo Protocol can deliver:</p>
-<ul>
-<li>Authenticated Key Agreement</li>
-<li>Distribution, or splitting, of Trust Authorities</li>
-</ul>
-<p>Note that the Chow-Choo Protocol is not a Zero Knowledge Proof protocol.</p>
-<h2><a class="anchor" aria-hidden="true" id="bls-signatures-introduction"></a><a href="#bls-signatures-introduction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 1 [...]
-<p>The BLS signature (Boneh-Lynn-Schacham) scheme<sup class="footnote-ref"><a href="#fn4" id="fnref4">[4]</a></sup> uses a bilinear pairing for verification, and signatures are elements of an elliptic curve group. Working in an elliptic curve group provides some defense against index calculus attacks (with the caveat that such attacks are still possible in the target group \( G_{T} \) of the pairing), allowing shorter signatures than other systems for similar levels of security.</p>
-<p>BLS signatures have become the subject of much work as they are seen as being a possible way forward to solve privacy issues within cryptocurrencies through a process of signature aggregation. Apache Milagro uses signature aggregation and key splitting, and further aggregation of signatures from those split keys, as a key component of the Milagro Custody Node digital asset safekeeping protocol.</p>
-<h2><a class="anchor" aria-hidden="true" id="supersingular-isogeny-key-encapsulation-introduction"></a><a href="#supersingular-isogeny-key-encapsulation-introduction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S [...]
-<p>Supersingular isogeny Diffie–Hellman key exchange (SIDH) and the key encapsulation protocol, SIKE<sup class="footnote-ref"><a href="#fn5" id="fnref5">[5]</a></sup> (derived from SIDH), are post-quantum cryptographic algorithms used to establish a secret key between two parties over an otherwise insecure communications channel. SIKE boasts one of the smallest key sizes of all post-quantum key encapsulations; with compression, SIKE uses 2688-bit public keys at a 128-bit quantum security [...]
-<p>SIKE also distinguishes itself from similar systems such as NTRU and Ring-LWE by supporting perfect forward secrecy, a property that prevents compromised long-term keys from compromising the confidentiality of old communication sessions. These properties make SIKE a natural candidate to replace Diffie–Hellman (DHE and elliptic curve Diffie–Hellman (ECDHE), which are widely used in Internet communication.</p>
-<p>Since it is the only post-quantum cryptography protocol which is constructed on elliptic curves, hybrid cryptography protocols can be derived from SIKE and classical elliptic curve cryptography (ECC) to make the transition towards post-quantum cryptography more convenient and practical.</p>
-<p>Milagro Custody Node implements SIKE for key encapsulation within Milagro's encrypted envelope format.</p>
-<hr>
-<table>
-<thead>
-<tr><th>Protocols</th><th>Use Cases</th></tr>
-</thead>
-<tbody>
-<tr><td>M-Pin 1-Pass</td><td>Digital signature authentication in battery or bandwidth constrained environments such as IoT devices, embedded applications and mobile apps. <br>This should be considered the default implementation for client to server authentication suitable for almost all use cases.</td></tr>
-<tr><td>M-Pin 1-Pass + <br>M-Pin 2-Pass</td><td>Digital signature and client to server authentication in smartphones apps, desktop browsers and software applications.</td></tr>
-<tr><td>M-Pin 2-Pass</td><td>Client to server authentication in smartphone apps, desktop browsers and software applications.</td></tr>
-<tr><td>M-Pin FULL</td><td>Mutual client and server authentication with authenticated key agreement for use in smartphone apps, hardware and software applications. <br>Authenticated Key Agreement with PFS can be used as the basis for TLS sessions between clients and servers.</td></tr>
-<tr><td>Chow-Choo</td><td>Mutual peer to peer authentication with authenticated key agreement for use in smartphone apps, hardware and software applications. <br>Authenticated Key Agreement with PFS can be used as the basis for TLS sessions between clients and servers and peer to peer.</td></tr>
-<tr><td>BLS Signing + <br>Key Splitting + <br>Signature Aggregation</td><td>A simple approach for splitting keys and aggregating many BLS signatures (from the shares of keys acting as signing keys) on a common message. Public keys are not needed for verifying the multi-signature. <br>An important property of the construction is that the scheme is secure against a rogue public-key attack without requiring users to prove knowledge of their secret keys.</td></tr>
-<tr><td>SIKE (Key Encapsulation)</td><td>SIKE is a family of post-quantum key encapsulation mechanisms based on the Supersingular Isogeny Diffie-Hellman (SIDH) key exchange protocol. <br>The algorithms use arithmetic operations on elliptic curves defined over finite fields and compute maps, so-called isogenies, between such curves. <br>SIKE can also delivery perfect forward secrecy.</td></tr>
-</tbody>
-</table>
-<hr>
-<h2><a class="anchor" aria-hidden="true" id="protocols-in-depth"></a><a href="#protocols-in-depth" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
-<h3><a class="anchor" aria-hidden="true" id="m-pin-1-pass"></a><a href="#m-pin-1-pass" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
-<p>As opposed to Chow-Choo, which can be used in a client to server as well as a peer to peer setting, M-Pin is strictly a client-server protocol.</p>
-<p>To embellish the security of the client-server protocol, it is important that client and server secrets should be kept distinct.</p>
-<p>A simple way to do this is to exploit the structure of a Type-3 pairing and put client secrets in \( G_1 \) and the server secret in \( G_2 \) as previously noted in the preceding section.</p>
-<p>For a Type-3 pairing there is assumed to be no computable isomorphism between these groups, even though both are of the same order.</p>
-<p>In the original implementation, the client was supplied with a challenge by the server as part of the second step within the protocol, after the first step whereby the client announced her identity to the server.</p>
-<p>In a later proposal, it was realised that an M-Pin 1-Pass Protocol could be obtained if the client itself derived the challenge as \( y \) as \( y=H(U|T) \) where \( T \) is a time-stamp transmitted by the Client along her claimed identity, \( U \) and \( V \).</p>
-<p>The protocol could then be reduced in an obvious way to a secure 1-pass protocol. However, this assumes that the Server checks the accuracy of the time-stamp before completing the protocol.</p>
-<p>This all works thanks to the pairing function \( e(.,.) \) and its remarkable bilinearity property \( e(aP,Q) = e(P,aQ) = e(P,Q)^{a} \).</p>
-<hr>
-<table>
-<thead>
-<tr><th style="text-align:center">Alice - identity \( ID_a \)</th><th style="text-align:center">Server</th></tr>
-</thead>
-<tbody>
-<tr><td style="text-align:center">Generates random \( x&lt;q \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center">\( A=H(ID_a) \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center">\( U=x{A} \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center">\( ID_a \), \( U~~ \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center">\( y=H(U \) | \( T) \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center">\( V=-(x+y){((s-\alpha)A+\alpha A)} \rightarrow \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center"></td><td style="text-align:center">\( A=H(ID_a) \)</td></tr>
-<tr><td style="text-align:center"></td><td style="text-align:center">\( g=e(V,Q).e(U+yA,sQ) \)</td></tr>
-<tr><td style="text-align:center"></td><td style="text-align:center">if \( g \ne 1 \), reject the connection</td></tr>
-</tbody>
-</table>
-<figure>
-  <caption><strong>Figure 1.</strong> M-Pin 1-Pass</caption>
-</figure>
----
-<h3><a class="anchor" aria-hidden="true" id="m-pin-2-pass"></a><a href="#m-pin-2-pass" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
-<p>As you can see below in Fig 2., M-Pin in the two pass operation operates in a challenge (from the Server) to client, who responds to challenge. This implementation obviates the any risk of Key Compromise Impersonation attack vector, at the cost of of a full roundtrip.</p>
-<hr>
-<table>
-<thead>
-<tr><th style="text-align:center">Alice - identity \( ID_a \)</th><th style="text-align:center">Server</th></tr>
-</thead>
-<tbody>
-<tr><td style="text-align:center">Generates random \( x&lt;q \)</td><td style="text-align:center">Generates random \( y&lt;q \)</td></tr>
-<tr><td style="text-align:center">\( A=H(ID_a) \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center">\( U=x{A} \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center">\( ID_a$, $U~~ \rightarrow  \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center"></td><td style="text-align:center">\( \leftarrow y \)</td></tr>
-<tr><td style="text-align:center">\( V=-(x+y){((s-\alpha)A+\alpha A)} \rightarrow \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center"></td><td style="text-align:center">\( A=H(ID_a) \)</td></tr>
-<tr><td style="text-align:center"></td><td style="text-align:center">\( g=e(V,Q).e(U+yA,sQ) \)</td></tr>
-<tr><td style="text-align:center"></td><td style="text-align:center">if \( g \ne 1 \), reject the connection</td></tr>
-</tbody>
-</table>
-<figure>
-  <caption><strong>Figure 2.</strong> M-Pin 2-Pass</caption>
-</figure>
----
-<h3><a class="anchor" aria-hidden="true" id="m-pin-full"></a><a href="#m-pin-full" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
-<p>This more elaborate protocol not only replaces Username/Password, but replaces the functionality of digital certificates being utilised to drive key agreement for TLS or VPN protocols as well.</p>
-<p>Our starting point is the M-Pin protocol as described above.</p>
-<p>The idea is to run it first (to authenticate the client to the server), and then proceed to authenticate the server to the client via an authenticated key exchange, which also establishes the agreed key of 128 bits.</p>
-<p>The first thing to note is that both the client and the server can already calculate a mutual authenticated encryption key!</p>
-<p>This protocol requires another general hash function \( H_g(.) \) which serializes, and hashes its input to a 256-bit value. Both sides can then extract a key from this value \( K \).</p>
-<p>It is left as a simple exercise for the reader to confirm that both client and server end up with the same key.</p>
-<p>Note that since the first part of the protocol is just the original M-Pin protocol, all of its features and extensions still apply.</p>
-<hr>
-<table>
-<thead>
-<tr><th style="text-align:center">Alice - identity \( ID_a \)</th><th style="text-align:center">Server</th></tr>
-</thead>
-<tbody>
-<tr><td style="text-align:center">Generates random \( x&lt;q \)</td><td style="text-align:center">Generates random \( y&lt;q \)</td></tr>
-<tr><td style="text-align:center">\( A=H(ID_a) \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center">\( U=x{A} \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center">\( ID_a$, $U~~ \rightarrow  \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center"></td><td style="text-align:center">\( \leftarrow y \)</td></tr>
-<tr><td style="text-align:center">\( V=-(x+y){((s-\alpha)A+\alpha A)} \rightarrow \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center"></td><td style="text-align:center">\( A=H(ID_a) \)</td></tr>
-<tr><td style="text-align:center"></td><td style="text-align:center">\( g=e(V,Q).e(U+yA,sQ) \)</td></tr>
-<tr><td style="text-align:center"></td><td style="text-align:center">if \( g \ne 1 \), reject the connection</td></tr>
-<tr><td style="text-align:center">\( R=r{A} \rightarrow \)</td><td style="text-align:center">\( \leftarrow W=w{A} \)</td></tr>
-<tr><td style="text-align:center">\( h=H(A,U,y,V,R,W) \)</td><td style="text-align:center">\( h=H(A,U,y,V,R,W) \)</td></tr>
-<tr><td style="text-align:center">\( K=H_g((g_1.{g_2}^\alpha)^{r+h} \ \) | \( x{W}) \)</td><td style="text-align:center">\( K=H_g(e(R+hA,sQ) \ \) | \( w{U}) \)</td></tr>
-</tbody>
-</table>
-<figure>
-  <caption><strong>Figure 3.</strong> M-Pin FULL</caption>
-</figure>
-<hr>
-<p>Note that the transmission of \( R \) from the client to the server can be done at the same time as \( V \) is transmitted, and the transmission of \( W \) from the server to the client can be done at the same time as  \( y \) is transmitted, to avoid introducing any extra flows into the protocol.</p>
-<h3><a class="anchor" aria-hidden="true" id="chow-choo-protocol"></a><a href="#chow-choo-protocol" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
-<p>As initially proposed, the Chow-Choo Protocol was based on a type-1 pairing. Note that in the Milagro framework, the Chow-Choo Protocol is made to work in a Type-3 setting.</p>
-<p>Pairings are usually written as functions of the form \( g=e(A,B) \), where \( A \in G_1 \), \( g \in G_T \), and for a Type-1 pairing \( B \in G_1 \) and for Type-3 \( B \in G_2 \).</p>
-<p>Consider now an application of this protocol to an imagined Internet of Things (IoT) setting.</p>
-<p>Each 'Thing' is issued with a serial number and its own Chow-Choo key (which can double as an M-Pin Key) based on that serial number as an identity.</p>
-<p>These keys may be embedded at the time of manufacture, by the manufacturer acting as a naturally trusted authority.</p>
-<p>When a Thing needs to communicate with another Thing, an action which requires knowing only the identity of the other, both parties can activate the Chow-Choo Protocol to calculate the same key to encrypt their communication.</p>
-<p>For both sending and receiving, Alice is issued with \( sA_1 \) and \( sA_2 \), where \( A_1=H_1 \) and \( A_2=H_2 \) both in the \( ID = Alice \).</p>
-<p>Similarly Bob is issued with \( sB_1 \) and \( sB_2 \). Now if Alice initiates and Bob responds, Alice calculates the key as \( e(sA_1,B_2) \) and Bob can calculate the same key as \( e(A_1,sB_2) \), where by convention the initiator uses their <em>sender</em> key and the responder uses their <em>receiver</em> key.</p>
-<p>One thing we can exploit -- in any communication context there is an initiator and a responder, or a <em>sender</em> and <em>receiver</em>, if you will.</p>
-<p>In the above example, Alice and Bob both were issued <em>sender</em> and <em>receiver</em> keys respectively, as this describes where they can appear in the pairing.</p>
-<p>An obvious advantage is to issue each Thing with two keys, one in \( G_1 \) and the other in \( G_2 \), <strong>if</strong> the Thing is approved to send and receive.</p>
-<p>However, the capability exists to cryptographically bound Things to only receiving information, or only sending information, based upon whether or not a Thing has been issued a sender and / or a receiver key.</p>
-<p>This capability is exploited in the Milagro framework to enable peer to peer authenticated key agreement.</p>
-<hr>
-<!--- This is the Chow Choo protocol in a Mathml table / frame because redering in Math LaTex equations exposes a bug in MathJax. It's just one equation that has this bug!  --->
-<figure>
-    <html>
-    <math xmlns="http://www.w3.org/1998/Math/MathML" display='block'>
-            <mtable frame="solid" rowlines="solid" rowalign="center" mathbackground="white">
-            <mstyle mathsize='.85em'>
-        <mtr>
-            <mtd>
-                <mspace width="0.1em" />
-            </mtd>
-            <mtd columnalign="left">
-                <mtable class="m-matrix">
-                    <mtr>
-                        <mtd>
-                            <mtext>SENDER</mtext>
-                        </mtd>
-                        <mtd>
-                            <mtext>RECEIVER</mtext>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                            <mi>x</mi>
-                            <mo>&#x02208;</mo>
-                            <msubsup>
-                                <mi>&#x02124;</mi>
-                                <mi>q</mi>
-                                <mo>*</mo>
-                            </msubsup>
-                        </mtd>
-                        <mtd>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                            <mi>A</mi>
-                            <mi>G</mi>
-                            <mn>1</mn>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <msub>
-                                <mi>H</mi>
-                                <mn>1</mn>
-                            </msub>
-                            <mrow>
-                                <mo form="prefix">(</mo>
-                                <mi>I</mi>
-                                <mo>&#x02146;</mo>
-                                <mi>A</mi>
-                                <mo form="postfix">)</mo>
-                            </mrow>
-                        </mtd>
-                        <mtd>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                            <mi>P</mi>
-                            <mi>a</mi>
-                            <msub>
-                                <mi>G</mi>
-                                <mn>1</mn>
-                            </msub>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <mi>x</mi>
-                            <mo>&#x022C5;</mo>
-                            <mi>A</mi>
-                            <msub>
-                                <mi>G</mi>
-                                <mn>1</mn>
-                            </msub>
-                        </mtd>
-                        <mtd>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                            <mi>I</mi>
-                            <mo>&#x02146;</mo>
-                            <mi>A</mi>
-                            <mo>,</mo>
-                            <mi>P</mi>
-                            <mi>a</mi>
-                            <msub>
-                                <mi>G</mi>
-                                <mn>1</mn>
-                            </msub>
-                            <mo>&#x027F6;</mo>
-                        </mtd>
-                        <mtd>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                        </mtd>
-                        <mtd>
-                            <mi>y</mi>
-                            <mo>,</mo>
-                            <mi>w</mi>
-                            <mo>&#x02208;</mo>
-                            <msubsup>
-                                <mi>&#x02124;</mi>
-                                <mi>q</mi>
-                                <mo>*</mo>
-                            </msubsup>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                        </mtd>
-                        <mtd>
-                            <mi>A</mi>
-                            <msub>
-                                <mi>G</mi>
-                                <mn>1</mn>
-                            </msub>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <msub>
-                                <mi>H</mi>
-                                <mn>1</mn>
-                            </msub>
-                            <mrow>
-                                <mo form="prefix">(</mo>
-                                <mi>I</mi>
-                                <mo>&#x02146;</mo>
-                                <mi>A</mi>
-                                <mo form="postfix">)</mo>
-                            </mrow>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                        </mtd>
-                        <mtd>
-                            <mi>B</mi>
-                            <msub>
-                                <mi>G</mi>
-                                <mn>2</mn>
-                            </msub>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <msub>
-                                <mi>H</mi>
-                                <mn>2</mn>
-                            </msub>
-                            <mrow>
-                                <mo form="prefix">(</mo>
-                                <mi>I</mi>
-                                <mo>&#x02146;</mo>
-                                <mi>B</mi>
-                                <mo form="postfix">)</mo>
-                            </mrow>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                        </mtd>
-                        <mtd>
-                            <mi>P</mi>
-                            <mi>b</mi>
-                            <msub>
-                                <mi>G</mi>
-                                <mn>2</mn>
-                            </msub>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <mi>y</mi>
-                            <mo>&#x022C5;</mo>
-                            <mi>B</mi>
-                            <msub>
-                                <mi>G</mi>
-                                <mn>2</mn>
-                            </msub>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                        </mtd>
-                        <mtd>
-                            <mi>P</mi>
-                            <mi>g</mi>
-                            <msub>
-                                <mi>G</mi>
-                                <mn>1</mn>
-                            </msub>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <mi>w</mi>
-                            <mo>&#x022C5;</mo>
-                            <mi>A</mi>
-                            <msub>
-                                <mi>G</mi>
-                                <mn>1</mn>
-                            </msub>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                        </mtd>
-                        <mtd>
-                            <mtext>pia</mtext>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <msub>
-                                <mi>H</mi>
-                                <mi>q</mi>
-                            </msub>
-                            <mrow>
-                                <mo form="prefix">(</mo>
-                                <mi>P</mi>
-                                <mi>a</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo>&#x02016;</mo>
-                                <mi>P</mi>
-                                <mi>b</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>2</mn>
-                                </msub>
-                                <mo>&#x02016;</mo>
-                                <mi>P</mi>
-                                <mi>g</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo>&#x02016;</mo>
-                                <mi>I</mi>
-                                <mo>&#x02146;</mo>
-                                <mi>B</mi>
-                                <mo form="postfix">)</mo>
-                            </mrow>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                        </mtd>
-                        <mtd>
-                            <mtext>pib</mtext>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <msub>
-                                <mi>H</mi>
-                                <mi>q</mi>
-                            </msub>
-                            <mrow>
-                                <mo form="prefix">(</mo>
-                                <mi>P</mi>
-                                <mi>b</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>2</mn>
-                                </msub>
-                                <mo>&#x02016;</mo>
-                                <mi>P</mi>
-                                <mi>a</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo>&#x02016;</mo>
-                                <mi>P</mi>
-                                <mi>g</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo>&#x02016;</mo>
-                                <mi>I</mi>
-                                <mo>&#x02146;</mo>
-                                <mi>A</mi>
-                                <mo form="postfix">)</mo>
-                            </mrow>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                        </mtd>
-                        <mtd>
-                            <mi>k</mi>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <mi>e</mi>
-                            <mrow>
-                                <mo form="prefix">(</mo>
-                                <mtext>pia</mtext>
-                                <mo>&#x022C5;</mo>
-                                <mi>A</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo>+</mo>
-                                <mi>P</mi>
-                                <mi>a</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo>,</mo>
-                                <mo form="prefix">(</mo>
-                                <mi>y</mi>
-                                <mo>+</mo>
-                                <mtext>pib</mtext>
-                                <mo form="postfix">)</mo>
-                                <mo>&#x022EF;</mo>
-                                <mo>&#x022C5;</mo>
-                                <mi>B</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>2</mn>
-                                </msub>
-                                <mo form="postfix">)</mo>
-                            </mrow>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                        </mtd>
-                        <mtd>
-                            <mi>K</mi>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <mi>H</mi>
-                            <mrow>
-                                <mo form="prefix">(</mo>
-                                <mi>k</mi>
-                                <mo>,</mo>
-                                <mi>w</mi>
-                                <mo>&#x022C5;</mo>
-                                <mi>P</mi>
-                                <mi>a</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo form="postfix">)</mo>
-                            </mrow>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                        </mtd>
-                        <mtd>
-                            <mo>&#x027F5;</mo>
-                            <mi>I</mi>
-                            <mo>&#x02146;</mo>
-                            <mi>B</mi>
-                            <mo>,</mo>
-                            <mi>P</mi>
-                            <mi>g</mi>
-                            <msub>
-                                <mi>G</mi>
-                                <mn>1</mn>
-                            </msub>
-                            <mo>,</mo>
-                            <mi>P</mi>
-                            <mi>b</mi>
-                            <msub>
-                                <mi>G</mi>
-                                <mn>2</mn>
-                            </msub>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                            <mi>B</mi>
-                            <msub>
-                                <mi>G</mi>
-                                <mn>2</mn>
-                            </msub>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <msub>
-                                <mi>H</mi>
-                                <mn>2</mn>
-                            </msub>
-                            <mrow>
-                                <mo form="prefix">(</mo>
-                                <mi>I</mi>
-                                <mo>&#x02146;</mo>
-                                <mi>B</mi>
-                                <mo form="postfix">)</mo>
-                            </mrow>
-                        </mtd>
-                        <mtd>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                            <mtext>pia</mtext>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <msub>
-                                <mi>H</mi>
-                                <mi>q</mi>
-                            </msub>
-                            <mrow>
-                                <mo form="prefix">(</mo>
-                                <mi>P</mi>
-                                <mi>a</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo>&#x02016;</mo>
-                                <mi>P</mi>
-                                <mi>b</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>2</mn>
-                                </msub>
-                                <mo>&#x02016;</mo>
-                                <mi>P</mi>
-                                <mi>g</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo>&#x02016;</mo>
-                                <mi>I</mi>
-                                <mo>&#x02146;</mo>
-                                <mi>B</mi>
-                                <mo form="postfix">)</mo>
-                            </mrow>
-                        </mtd>
-                        <mtd>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                            <mtext>pib</mtext>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <msub>
-                                <mi>H</mi>
-                                <mi>q</mi>
-                            </msub>
-                            <mrow>
-                                <mo form="prefix">(</mo>
-                                <mi>P</mi>
-                                <mi>b</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>2</mn>
-                                </msub>
-                                <mo>&#x02016;</mo>
-                                <mi>P</mi>
-                                <mi>a</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo>&#x02016;</mo>
-                                <mi>P</mi>
-                                <mi>g</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo>&#x02016;</mo>
-                                <mi>I</mi>
-                                <mo>&#x02146;</mo>
-                                <mi>A</mi>
-                                <mo form="postfix">)</mo>
-                            </mrow>
-                        </mtd>
-                        <mtd>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                            <mi>k</mi>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <mi>e</mi>
-                            <mrow>
-                                <mo form="prefix">(</mo>
-                                <mo form="prefix">(</mo>
-                                <mi>x</mi>
-                                <mo>+</mo>
-                                <mi>p</mi>
-                                <mi>i</mi>
-                                <mi>a</mi>
-                                <mo form="postfix">)</mo>
-                                <mo>&#x022EF;</mo>
-                                <mo>&#x022C5;</mo>
-                                <mi>A</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo>,</mo>
-                                <mtext>pib</mtext>
-                                <mo>&#x022C5;</mo>
-                                <mi>B</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>2</mn>
-                                </msub>
-                                <mo>+</mo>
-                                <mi>P</mi>
-                                <mi>b</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>2</mn>
-                                </msub>
-                                <mo form="postfix">)</mo>
-                            </mrow>
-                        </mtd>
-                        <mtd>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                            <mi>K</mi>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <mi>H</mi>
-                            <mrow>
-                                <mo form="prefix">(</mo>
-                                <mi>k</mi>
-                                <mo>,</mo>
-                                <mi>x</mi>
-                                <mo>&#x022C5;</mo>
-                                <mi>P</mi>
-                                <mi>g</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo form="postfix">)</mo>
-                            </mrow>
-                        </mtd>
-                        <mtd>
-                        </mtd>
-                    </mtr>
-                </mtable>
-            </mtd>
-        </mtr>
-    </mtable>
-    </math>
-    </html>
-</figure>
-<figure>
-  <caption><strong>Figure 4.</strong> Chow-Choo Protocol</caption>
-</figure>
-<hr>
-<p><strong>Notes on Chow-Choo Protocol:</strong></p>
-<ul>
-<li>\( G_1 \): a \( r \)-order cyclic subgroup of \( E(F_p) \).</li>
-<li>\( G_2 \): a subgroup of \( E(F_{p^k}) \), where \( k \) is the embedding degree of the Curve.</li>
-<li>\( H1 \): Maps string value to a point on the curve in \( G_1 \).</li>
-<li>\( H2 \): Maps string value to a point on the curve in \( G_2 \).</li>
-<li>\( Hq \): Hashes inputs to an integer modulo the curve order \( q \).When run in the simple SIDH</li>
-<li>H(): Hash function.</li>
-<li>\( || \): denotes the concatenation of messages.</li>
-</ul>
-<hr>
-<h3><a class="anchor" aria-hidden="true" id="secret-revocation"></a><a href="#secret-revocation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
-<p>We introduce Time Permits to handle the revocation issue. Normally in Identity-Based Encryption the problem of client revocation is solved by date-stamping identities so that the private key issued for an identity becomes useless once the time period expires. Now a new private key must be issued, and we will simply not issue one to a revoked client.</p>
-<p>Milagro achieves a much more immediate revocation capability through the use of Time Permits. The D-TA that is controlled by the application owner is envisioned to be the controlling D-TA to issue Time Permits at the point where a client needs to authenticate to a server, or create an authenticated key agreement between client and server or peer to peer.</p>
-<p>The idea is that the server includes an explicitly described time slot in its construction of Alice's hashed identity. Unless Alice has a corresponding &quot;Time permit&quot; for the same time slot, she cannot complete the protocol.</p>
-<p>In the protocol above we instead calculate \( H(ID_a) + H_T(T_i|ID_a) \) on both sides of the protocol where \( T_i \) is a textual description of the \( i \)-th time slot and \( H_T(.) \) is a hash function distinct from \( H(.) \).</p>
-<p>For the protocol to work correctly Alice must be issued by the Trusted Authority with a permit \( s.H_T(T_i|ID_a) \) which gets added to her combined PIN-plus-token secret \( s.H(ID_a) \).</p>
-<p>Observe that the permit is of no use to any other party, and hence can be issued publicly, uploaded to a public cloud data store (AWS S3), or delivered via the server directly.</p>
-<p>A proof of security for this idea in the context of Boneh and Franklin IBE can be found in Tseng<sup class="footnote-ref"><a href="#fn6" id="fnref6">[6]</a></sup> et al.</p>
-<hr>
-<h3><a class="anchor" aria-hidden="true" id="bls-subgroup-multi-signatures"></a><a href="#bls-subgroup-multi-signatures" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12  [...]
-<p>Dan Boneh, Ben Lynn and Hovav Schacham introduced their paper entitled &quot;Short Signatures from the Weil Pairing&quot; in 2001<sup class="footnote-ref"><a href="#fn4" id="fnref4:1">[4]</a></sup>. The paper described a short signature scheme based on the computational Diffie-Hellman assumption on certain elliptic and hyper-elliptic curves.</p>
-<p>In a simple instantiation, given a secret key \( sk \), a public key \( p k=g^{S k} \), a message \( m \), a hashing-into-the-curve function \( H \), and a bilinear pairing \( e \):</p>
-<ul>
-<li>Key Generation: \( sk \) is a random integer over the field, \( p k=g^{S k} \)</li>
-<li>Signature: \( S=H(m)^{s k} \)</li>
-<li>Verify: \( e(H(m), p k)=e(S, g) \)</li>
-</ul>
-<p>Biliniarity is on display as the signature</p>
-<p>$$ \begin{array}{c}{e(H(m), p k)=e\left(H(m), g^{s k}\right)=e(H(m), g)^{s k}=} \ {=e\left(H(m)^{s k}, g\right)=e(S, g)}\end{array} $$</p>
-<p>but is also unique and deterministic, something missing from ECDSA.</p>
-<p>In June of 2018 Dan Boneh, Manu Drijvers and Gregory Neven released research that constructs the first practical, short accountable-subgroup multi-signature (ASM) scheme based on BLS signatures<sup class="footnote-ref"><a href="#fn7" id="fnref7">[7]</a></sup>.</p>
-<p>An ASM scheme enables any subset \( S \) of a set of \( n \) parties to sign a message \( m \) so that a valid signature discloses which subset generated the signature (hence the subset \( S \) is accountable for signing \( m \)).</p>
-<p>In addition to the ASM scheme, Milagro exploits a unique property of BLS signatures: Signing Keys can be split using Shamir's Secret Sharing<sup class="footnote-ref"><a href="#fn8" id="fnref8">[8]</a></sup> in which the 'shares' of the keys, when distributed to signers, themselves become signing keys. By using a 'key splitter' and 'signature aggregator' role who also performs the Shamir Secret Sharing (SSS) dealer function, several benefits emerge.</p>
-<p>Thresholds can be set on the distribution of key shares just as in a normal SSS routine. So once the shares of the original signing key are distributed, the original signing key can be securely deleted, and is never re-created again. Instead, signatures derived from the shares of the original signing key are created. Again, the properties of BLS enable these shares of signature keys to be themselves used a signature keys. The object of the exercise is for the signature aggregator, who [...]
-<p>In other words, if the aggregator takes m-of-n of these signature shares, and perform the same polynomial interpolation as one would usually do with the secret shares, you’ll recover a complete signature which is identical to what would have been created if the original complete private key would have been used.</p>
-<p>In this context, signing is a single round protocol and is non-interactive.</p>
-<hr>
-<h3><a class="anchor" aria-hidden="true" id="supersingular-isogeny-key-encapsulation-sike"></a><a href="#supersingular-isogeny-key-encapsulation-sike" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v [...]
-<p>A key encapsulation mechanism (KEM) is a set of three algorithms.</p>
-<ul>
-<li>key generation (KeyGen)</li>
-<li>encapsulation (Encaps)</li>
-<li>decapsulation (Decaps)</li>
-</ul>
-<p>and a defined key space, where</p>
-<ul>
-<li>KeyGen(): returns a public and a secret key \( (pk, sk) \).</li>
-<li>Encaps\( (pk) \): takes pk as input and outputs ciphertext \( c \) and a key \( K \) from the key space.</li>
-<li>Decaps\( (sk, c) \): takes \( sk \) and \( c \) as input, and returns a key \( K \) or ERROR. \( K \) is called the session key.</li>
-</ul>
-<p>SIKE uses Hofheinz transformation on SIDH to achieve CCA security. Let \( p=2^{e_{A}} 3^{e_{3}}-1 \), and let \( E \) be a supersingular elliptic curve defined over a field of characteristic \( p \). \( E \) can also be defined over \( \mathbb{F}_{p^{2}} \) up to its isomorphism. An isogeny \( \phi : E \rightarrow E^{\prime} \) is a non-constant map from \( E \) to \( E^{\prime} \) which translates the identity into the identity.</p>
-<p>An isogeny map is defined by its degree and kernel. The degree of an isogeny is its degree as morphism. An isogeny with degree \( \ell \) map is called \( \ell \)-isogeny. Let \( G \) be a subgroup of points on \( E \) which contains \( \ell \) + 1 cyclic subgroups of order \( \ell \). This subgroup is the torsion group \( E[\ell] \) and each element of this group is corresponding to an isogeny of degree \( \ell \); accordingly, an isogeny also can be identified by \( G \), i.e., the  [...]
-<p>This section provides a brief presentation of the SIKE protocol. We refer readers to <sup class="footnote-ref"><a href="#fn9" id="fnref9">[9]</a></sup> and <sup class="footnote-ref"><a href="#fn5" id="fnref5:1">[5]</a></sup> for more detailed explanation of the supersignular isogeny problem and the base key-exchange protocol which the SIKE is constructed upon.</p>
-<hr>
-
-    <div class="admonition admonition-note">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V [...]
-      </div>
-      <div class="admonition-content">
-    <p>Submit a pull request on the development branch of <a href="https://github.com/apache/incubator-milagro">Milagro Website Repo</a>.</p>
-</div></div><!--
-Supported admonition types are: caution, note, important, tip, warning.
---><hr class="footnotes-sep">
-<section class="footnotes">
-<ol class="footnotes-list">
-<li id="fn1"  class="footnote-item"><p><a href="https://eprint.iacr.org/2002/164">M-Pin protocol</a> <a href="#fnref1" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn2"  class="footnote-item"><p><a href="https://eprint.iacr.org/2015/576">The Carnac protocol -- or how to read the contents of a sealed envelope</a> <a href="#fnref2" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn3"  class="footnote-item"><p><a href="https://eprint.iacr.org/2007/018.pdf">Strongly-Secure Identity-based Key Agreement and Anonymous Extension</a> <a href="#fnref3" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn4"  class="footnote-item"><p><a href="https://www.iacr.org/archive/asiacrypt2001/22480516.pdf">Short Signatures from the Weil Pairing</a> <a href="#fnref4" class="footnote-backref">↩</a> <a href="#fnref4:1" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn5"  class="footnote-item"><p><a href="https://sike.org/">Supersingular isogeny key encapsulation - NIST Submission</a> <a href="#fnref5" class="footnote-backref">↩</a> <a href="#fnref5:1" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn6"  class="footnote-item"><p><a href="https://reader.elsevier.com/reader/sd/pii/S2213020915000592?token=5C2E08C17803B9549FB79F3A91A1ED2382360D3E840087C8C065BD06EFCABB55C4A5A300566388A2920786DCC63E631E">A brief review of revocable ID-based public key cryptosystem</a> <a href="#fnref6" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn7"  class="footnote-item"><p><a href="https://eprint.iacr.org/2018/483">Compact Multi-Signatures for Smaller Blockchains</a> <a href="#fnref7" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn8"  class="footnote-item"><p><a href="https://cs.jhu.edu/~sdoshi/crypto/papers/shamirturing.pdf">How to Share a Secret</a> <a href="#fnref8" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn9"  class="footnote-item"><p><a href="https://eprint.iacr.org/2011/506.pdf">Towards quantum-resistant cryptosystems from supersingular elliptic curve isogenies</a> <a href="#fnref9" class="footnote-backref">↩</a></p>
-</li>
-</ol>
-</section>
-</span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/milagro-crypto"><span class="arrow-prev">← </span><span>Milagro Crypto</span></a><a class="docs-next button" href="/docs/milagro-design"><span>Milagro Design</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#m-pin-protocol-introduction"> [...]
\ No newline at end of file
diff --git a/docs/milagro-protocols/index.html b/docs/milagro-protocols/index.html
deleted file mode 100644
index cccd8d7..0000000
--- a/docs/milagro-protocols/index.html
+++ /dev/null
@@ -1,864 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Milagro Protocols · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;The Apache Milagro crypto libraries contain an (almost) overwhelming choice of algorithms and cryptographic primitives for robust and rapid application development. This section focuses spe [...]
-"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Milagro Protocols · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;p&gt;The Apache Milagro crypto libraries contain an (almost) overwhelming choice of algorithms and cryptographic primitives for robust and rapid application development. This section focuses specifically on a few protoc [...]
-"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type=" [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Milagro Protocols</h1></header><article><div><span><p>The Apache Milagro crypto libraries contain an (almost) overwhelming choice of algorithms and cryptographic primitives for robust and rapid application development. This section focuses specifically on a few protocols that are used extensively as key building blocks within the  [...]
-<h2><a class="anchor" aria-hidden="true" id="m-pin-protocol-introduction"></a><a href="#m-pin-protocol-introduction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 1 [...]
-<p>The genesis of the M-Pin Protocol was first put forward in a research paper by <a href="https://scholar.google.com/citations?user=GsM-aeEAAAAJ&amp;hl=en">Dr. Michael Scott</a> in 2002<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>.</p>
-<p>The M-Pin Protocol has been iterated on several times over the years since, to develop three distinct modes, which will be explored in the following sections.</p>
-<p>As noted in <a href="milagro-crypto.html">Milagro Crypto</a>, the M-Pin Protocol is of these classifications and exploits the features of:</p>
-<ul>
-<li>Elliptic Curve Cryptography</li>
-<li>Pairing Based Cryptography</li>
-<li>Identity Based Encryption</li>
-<li>Zero Knowledge Proof</li>
-</ul>
-<p>Because of the characteristics that M-Pin inherits from the four techniques above, the M-Pin Protocol and its variants are able to deliver:</p>
-<ul>
-<li>Multi-factor authentication (MFA) using Zero Knowledge Proof</li>
-<li>Authenticated Key Agreement</li>
-<li>Distribution, or splitting, of Trust Authorities</li>
-<li><a href="https://en.wikipedia.org/wiki/Subliminal_channel">Subliminal Channel Communication</a><sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup></li>
-</ul>
-<p>The three modes of operation of the M-Pin Protocol are as follows:</p>
-<ul>
-<li><strong>M-Pin 1-pass</strong>: Client to server authentication via digital signature, this mode implements a <em>non-interactive</em> zero knowledge proof and is resistant to <a href="https://en.wikipedia.org/wiki/Man-in-the-middle_attack">MITM (man in the middle)</a> attacks.</li>
-<li><strong>M-Pin 2-pass</strong>: Client to server authentication via a <em>interactive</em> zero knowledge proof, resistant to <a href="https://en.wikipedia.org/wiki/Man-in-the-middle_attack">MITM</a> and <a href="https://kcitls.org">KCI (Key Compromise Impersonation)</a> attacks.</li>
-<li><strong>M-Pin FULL</strong>: Mutual client to server authentication via a <em>interactive</em> zero knowledge proof, resistant to MITM and KCI attacks and able to drive an Authenticated <a href="https://en.wikipedia.org/wiki/Key-agreement_protocol">Key Agreement</a> between client and server, resulting in 128 bit shared secret key.</li>
-</ul>
-<p>Note that the M-Pin Full Authenticated Key Agreement possesses the quality of <a href="https://en.wikipedia.org/wiki/Forward_secrecy">perfect forward secrecy (PFS)</a>, meaning, even if the client and server long term keys are compromised, the past session keys (used to encrypt TLS traffic, for example) are not compromised.</p>
-<h2><a class="anchor" aria-hidden="true" id="chow-choo-protocol-introduction"></a><a href="#chow-choo-protocol-introduction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 [...]
-<p>The Chow-Choo Protocol was developed by Sherman S.M. Chow and Kim-Kwang Raymond Choo and published in 2007 via a research paper titled Strongly-Secure Identity-based Key Agreement<sup class="footnote-ref"><a href="#fn3" id="fnref3">[3]</a></sup>.  The Chow-Choo Protocol can be technically described as an identity-based key agreement protocol.</p>
-<p>The Chow-Choo Protocol is of these classifications and exploits the features of:</p>
-<ul>
-<li>Elliptic Curve Cryptography</li>
-<li>Pairing Based Cryptography</li>
-<li>Identity Based Encryption</li>
-</ul>
-<p>Because of the characteristics that Chow-Choo inherits from the three techniques above, the Chow-Choo Protocol can deliver:</p>
-<ul>
-<li>Authenticated Key Agreement</li>
-<li>Distribution, or splitting, of Trust Authorities</li>
-</ul>
-<p>Note that the Chow-Choo Protocol is not a Zero Knowledge Proof protocol.</p>
-<h2><a class="anchor" aria-hidden="true" id="bls-signatures-introduction"></a><a href="#bls-signatures-introduction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 1 [...]
-<p>The BLS signature (Boneh-Lynn-Schacham) scheme<sup class="footnote-ref"><a href="#fn4" id="fnref4">[4]</a></sup> uses a bilinear pairing for verification, and signatures are elements of an elliptic curve group. Working in an elliptic curve group provides some defense against index calculus attacks (with the caveat that such attacks are still possible in the target group \( G_{T} \) of the pairing), allowing shorter signatures than other systems for similar levels of security.</p>
-<p>BLS signatures have become the subject of much work as they are seen as being a possible way forward to solve privacy issues within cryptocurrencies through a process of signature aggregation. Apache Milagro uses signature aggregation and key splitting, and further aggregation of signatures from those split keys, as a key component of the Milagro Custody Node digital asset safekeeping protocol.</p>
-<h2><a class="anchor" aria-hidden="true" id="supersingular-isogeny-key-encapsulation-introduction"></a><a href="#supersingular-isogeny-key-encapsulation-introduction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S [...]
-<p>Supersingular isogeny Diffie–Hellman key exchange (SIDH) and the key encapsulation protocol, SIKE<sup class="footnote-ref"><a href="#fn5" id="fnref5">[5]</a></sup> (derived from SIDH), are post-quantum cryptographic algorithms used to establish a secret key between two parties over an otherwise insecure communications channel. SIKE boasts one of the smallest key sizes of all post-quantum key encapsulations; with compression, SIKE uses 2688-bit public keys at a 128-bit quantum security [...]
-<p>SIKE also distinguishes itself from similar systems such as NTRU and Ring-LWE by supporting perfect forward secrecy, a property that prevents compromised long-term keys from compromising the confidentiality of old communication sessions. These properties make SIKE a natural candidate to replace Diffie–Hellman (DHE and elliptic curve Diffie–Hellman (ECDHE), which are widely used in Internet communication.</p>
-<p>Since it is the only post-quantum cryptography protocol which is constructed on elliptic curves, hybrid cryptography protocols can be derived from SIKE and classical elliptic curve cryptography (ECC) to make the transition towards post-quantum cryptography more convenient and practical.</p>
-<p>Milagro Custody Node implements SIKE for key encapsulation within Milagro's encrypted envelope format.</p>
-<hr>
-<table>
-<thead>
-<tr><th>Protocols</th><th>Use Cases</th></tr>
-</thead>
-<tbody>
-<tr><td>M-Pin 1-Pass</td><td>Digital signature authentication in battery or bandwidth constrained environments such as IoT devices, embedded applications and mobile apps. <br>This should be considered the default implementation for client to server authentication suitable for almost all use cases.</td></tr>
-<tr><td>M-Pin 1-Pass + <br>M-Pin 2-Pass</td><td>Digital signature and client to server authentication in smartphones apps, desktop browsers and software applications.</td></tr>
-<tr><td>M-Pin 2-Pass</td><td>Client to server authentication in smartphone apps, desktop browsers and software applications.</td></tr>
-<tr><td>M-Pin FULL</td><td>Mutual client and server authentication with authenticated key agreement for use in smartphone apps, hardware and software applications. <br>Authenticated Key Agreement with PFS can be used as the basis for TLS sessions between clients and servers.</td></tr>
-<tr><td>Chow-Choo</td><td>Mutual peer to peer authentication with authenticated key agreement for use in smartphone apps, hardware and software applications. <br>Authenticated Key Agreement with PFS can be used as the basis for TLS sessions between clients and servers and peer to peer.</td></tr>
-<tr><td>BLS Signing + <br>Key Splitting + <br>Signature Aggregation</td><td>A simple approach for splitting keys and aggregating many BLS signatures (from the shares of keys acting as signing keys) on a common message. Public keys are not needed for verifying the multi-signature. <br>An important property of the construction is that the scheme is secure against a rogue public-key attack without requiring users to prove knowledge of their secret keys.</td></tr>
-<tr><td>SIKE (Key Encapsulation)</td><td>SIKE is a family of post-quantum key encapsulation mechanisms based on the Supersingular Isogeny Diffie-Hellman (SIDH) key exchange protocol. <br>The algorithms use arithmetic operations on elliptic curves defined over finite fields and compute maps, so-called isogenies, between such curves. <br>SIKE can also delivery perfect forward secrecy.</td></tr>
-</tbody>
-</table>
-<hr>
-<h2><a class="anchor" aria-hidden="true" id="protocols-in-depth"></a><a href="#protocols-in-depth" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
-<h3><a class="anchor" aria-hidden="true" id="m-pin-1-pass"></a><a href="#m-pin-1-pass" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
-<p>As opposed to Chow-Choo, which can be used in a client to server as well as a peer to peer setting, M-Pin is strictly a client-server protocol.</p>
-<p>To embellish the security of the client-server protocol, it is important that client and server secrets should be kept distinct.</p>
-<p>A simple way to do this is to exploit the structure of a Type-3 pairing and put client secrets in \( G_1 \) and the server secret in \( G_2 \) as previously noted in the preceding section.</p>
-<p>For a Type-3 pairing there is assumed to be no computable isomorphism between these groups, even though both are of the same order.</p>
-<p>In the original implementation, the client was supplied with a challenge by the server as part of the second step within the protocol, after the first step whereby the client announced her identity to the server.</p>
-<p>In a later proposal, it was realised that an M-Pin 1-Pass Protocol could be obtained if the client itself derived the challenge as \( y \) as \( y=H(U|T) \) where \( T \) is a time-stamp transmitted by the Client along her claimed identity, \( U \) and \( V \).</p>
-<p>The protocol could then be reduced in an obvious way to a secure 1-pass protocol. However, this assumes that the Server checks the accuracy of the time-stamp before completing the protocol.</p>
-<p>This all works thanks to the pairing function \( e(.,.) \) and its remarkable bilinearity property \( e(aP,Q) = e(P,aQ) = e(P,Q)^{a} \).</p>
-<hr>
-<table>
-<thead>
-<tr><th style="text-align:center">Alice - identity \( ID_a \)</th><th style="text-align:center">Server</th></tr>
-</thead>
-<tbody>
-<tr><td style="text-align:center">Generates random \( x&lt;q \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center">\( A=H(ID_a) \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center">\( U=x{A} \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center">\( ID_a \), \( U~~ \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center">\( y=H(U \) | \( T) \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center">\( V=-(x+y){((s-\alpha)A+\alpha A)} \rightarrow \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center"></td><td style="text-align:center">\( A=H(ID_a) \)</td></tr>
-<tr><td style="text-align:center"></td><td style="text-align:center">\( g=e(V,Q).e(U+yA,sQ) \)</td></tr>
-<tr><td style="text-align:center"></td><td style="text-align:center">if \( g \ne 1 \), reject the connection</td></tr>
-</tbody>
-</table>
-<figure>
-  <caption><strong>Figure 1.</strong> M-Pin 1-Pass</caption>
-</figure>
----
-<h3><a class="anchor" aria-hidden="true" id="m-pin-2-pass"></a><a href="#m-pin-2-pass" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
-<p>As you can see below in Fig 2., M-Pin in the two pass operation operates in a challenge (from the Server) to client, who responds to challenge. This implementation obviates the any risk of Key Compromise Impersonation attack vector, at the cost of of a full roundtrip.</p>
-<hr>
-<table>
-<thead>
-<tr><th style="text-align:center">Alice - identity \( ID_a \)</th><th style="text-align:center">Server</th></tr>
-</thead>
-<tbody>
-<tr><td style="text-align:center">Generates random \( x&lt;q \)</td><td style="text-align:center">Generates random \( y&lt;q \)</td></tr>
-<tr><td style="text-align:center">\( A=H(ID_a) \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center">\( U=x{A} \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center">\( ID_a$, $U~~ \rightarrow  \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center"></td><td style="text-align:center">\( \leftarrow y \)</td></tr>
-<tr><td style="text-align:center">\( V=-(x+y){((s-\alpha)A+\alpha A)} \rightarrow \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center"></td><td style="text-align:center">\( A=H(ID_a) \)</td></tr>
-<tr><td style="text-align:center"></td><td style="text-align:center">\( g=e(V,Q).e(U+yA,sQ) \)</td></tr>
-<tr><td style="text-align:center"></td><td style="text-align:center">if \( g \ne 1 \), reject the connection</td></tr>
-</tbody>
-</table>
-<figure>
-  <caption><strong>Figure 2.</strong> M-Pin 2-Pass</caption>
-</figure>
----
-<h3><a class="anchor" aria-hidden="true" id="m-pin-full"></a><a href="#m-pin-full" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
-<p>This more elaborate protocol not only replaces Username/Password, but replaces the functionality of digital certificates being utilised to drive key agreement for TLS or VPN protocols as well.</p>
-<p>Our starting point is the M-Pin protocol as described above.</p>
-<p>The idea is to run it first (to authenticate the client to the server), and then proceed to authenticate the server to the client via an authenticated key exchange, which also establishes the agreed key of 128 bits.</p>
-<p>The first thing to note is that both the client and the server can already calculate a mutual authenticated encryption key!</p>
-<p>This protocol requires another general hash function \( H_g(.) \) which serializes, and hashes its input to a 256-bit value. Both sides can then extract a key from this value \( K \).</p>
-<p>It is left as a simple exercise for the reader to confirm that both client and server end up with the same key.</p>
-<p>Note that since the first part of the protocol is just the original M-Pin protocol, all of its features and extensions still apply.</p>
-<hr>
-<table>
-<thead>
-<tr><th style="text-align:center">Alice - identity \( ID_a \)</th><th style="text-align:center">Server</th></tr>
-</thead>
-<tbody>
-<tr><td style="text-align:center">Generates random \( x&lt;q \)</td><td style="text-align:center">Generates random \( y&lt;q \)</td></tr>
-<tr><td style="text-align:center">\( A=H(ID_a) \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center">\( U=x{A} \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center">\( ID_a$, $U~~ \rightarrow  \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center"></td><td style="text-align:center">\( \leftarrow y \)</td></tr>
-<tr><td style="text-align:center">\( V=-(x+y){((s-\alpha)A+\alpha A)} \rightarrow \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center"></td><td style="text-align:center">\( A=H(ID_a) \)</td></tr>
-<tr><td style="text-align:center"></td><td style="text-align:center">\( g=e(V,Q).e(U+yA,sQ) \)</td></tr>
-<tr><td style="text-align:center"></td><td style="text-align:center">if \( g \ne 1 \), reject the connection</td></tr>
-<tr><td style="text-align:center">\( R=r{A} \rightarrow \)</td><td style="text-align:center">\( \leftarrow W=w{A} \)</td></tr>
-<tr><td style="text-align:center">\( h=H(A,U,y,V,R,W) \)</td><td style="text-align:center">\( h=H(A,U,y,V,R,W) \)</td></tr>
-<tr><td style="text-align:center">\( K=H_g((g_1.{g_2}^\alpha)^{r+h} \ \) | \( x{W}) \)</td><td style="text-align:center">\( K=H_g(e(R+hA,sQ) \ \) | \( w{U}) \)</td></tr>
-</tbody>
-</table>
-<figure>
-  <caption><strong>Figure 3.</strong> M-Pin FULL</caption>
-</figure>
-<hr>
-<p>Note that the transmission of \( R \) from the client to the server can be done at the same time as \( V \) is transmitted, and the transmission of \( W \) from the server to the client can be done at the same time as  \( y \) is transmitted, to avoid introducing any extra flows into the protocol.</p>
-<h3><a class="anchor" aria-hidden="true" id="chow-choo-protocol"></a><a href="#chow-choo-protocol" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
-<p>As initially proposed, the Chow-Choo Protocol was based on a type-1 pairing. Note that in the Milagro framework, the Chow-Choo Protocol is made to work in a Type-3 setting.</p>
-<p>Pairings are usually written as functions of the form \( g=e(A,B) \), where \( A \in G_1 \), \( g \in G_T \), and for a Type-1 pairing \( B \in G_1 \) and for Type-3 \( B \in G_2 \).</p>
-<p>Consider now an application of this protocol to an imagined Internet of Things (IoT) setting.</p>
-<p>Each 'Thing' is issued with a serial number and its own Chow-Choo key (which can double as an M-Pin Key) based on that serial number as an identity.</p>
-<p>These keys may be embedded at the time of manufacture, by the manufacturer acting as a naturally trusted authority.</p>
-<p>When a Thing needs to communicate with another Thing, an action which requires knowing only the identity of the other, both parties can activate the Chow-Choo Protocol to calculate the same key to encrypt their communication.</p>
-<p>For both sending and receiving, Alice is issued with \( sA_1 \) and \( sA_2 \), where \( A_1=H_1 \) and \( A_2=H_2 \) both in the \( ID = Alice \).</p>
-<p>Similarly Bob is issued with \( sB_1 \) and \( sB_2 \). Now if Alice initiates and Bob responds, Alice calculates the key as \( e(sA_1,B_2) \) and Bob can calculate the same key as \( e(A_1,sB_2) \), where by convention the initiator uses their <em>sender</em> key and the responder uses their <em>receiver</em> key.</p>
-<p>One thing we can exploit -- in any communication context there is an initiator and a responder, or a <em>sender</em> and <em>receiver</em>, if you will.</p>
-<p>In the above example, Alice and Bob both were issued <em>sender</em> and <em>receiver</em> keys respectively, as this describes where they can appear in the pairing.</p>
-<p>An obvious advantage is to issue each Thing with two keys, one in \( G_1 \) and the other in \( G_2 \), <strong>if</strong> the Thing is approved to send and receive.</p>
-<p>However, the capability exists to cryptographically bound Things to only receiving information, or only sending information, based upon whether or not a Thing has been issued a sender and / or a receiver key.</p>
-<p>This capability is exploited in the Milagro framework to enable peer to peer authenticated key agreement.</p>
-<hr>
-<!--- This is the Chow Choo protocol in a Mathml table / frame because redering in Math LaTex equations exposes a bug in MathJax. It's just one equation that has this bug!  --->
-<figure>
-    <html>
-    <math xmlns="http://www.w3.org/1998/Math/MathML" display='block'>
-            <mtable frame="solid" rowlines="solid" rowalign="center" mathbackground="white">
-            <mstyle mathsize='.85em'>
-        <mtr>
-            <mtd>
-                <mspace width="0.1em" />
-            </mtd>
-            <mtd columnalign="left">
-                <mtable class="m-matrix">
-                    <mtr>
-                        <mtd>
-                            <mtext>SENDER</mtext>
-                        </mtd>
-                        <mtd>
-                            <mtext>RECEIVER</mtext>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                            <mi>x</mi>
-                            <mo>&#x02208;</mo>
-                            <msubsup>
-                                <mi>&#x02124;</mi>
-                                <mi>q</mi>
-                                <mo>*</mo>
-                            </msubsup>
-                        </mtd>
-                        <mtd>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                            <mi>A</mi>
-                            <mi>G</mi>
-                            <mn>1</mn>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <msub>
-                                <mi>H</mi>
-                                <mn>1</mn>
-                            </msub>
-                            <mrow>
-                                <mo form="prefix">(</mo>
-                                <mi>I</mi>
-                                <mo>&#x02146;</mo>
-                                <mi>A</mi>
-                                <mo form="postfix">)</mo>
-                            </mrow>
-                        </mtd>
-                        <mtd>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                            <mi>P</mi>
-                            <mi>a</mi>
-                            <msub>
-                                <mi>G</mi>
-                                <mn>1</mn>
-                            </msub>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <mi>x</mi>
-                            <mo>&#x022C5;</mo>
-                            <mi>A</mi>
-                            <msub>
-                                <mi>G</mi>
-                                <mn>1</mn>
-                            </msub>
-                        </mtd>
-                        <mtd>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                            <mi>I</mi>
-                            <mo>&#x02146;</mo>
-                            <mi>A</mi>
-                            <mo>,</mo>
-                            <mi>P</mi>
-                            <mi>a</mi>
-                            <msub>
-                                <mi>G</mi>
-                                <mn>1</mn>
-                            </msub>
-                            <mo>&#x027F6;</mo>
-                        </mtd>
-                        <mtd>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                        </mtd>
-                        <mtd>
-                            <mi>y</mi>
-                            <mo>,</mo>
-                            <mi>w</mi>
-                            <mo>&#x02208;</mo>
-                            <msubsup>
-                                <mi>&#x02124;</mi>
-                                <mi>q</mi>
-                                <mo>*</mo>
-                            </msubsup>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                        </mtd>
-                        <mtd>
-                            <mi>A</mi>
-                            <msub>
-                                <mi>G</mi>
-                                <mn>1</mn>
-                            </msub>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <msub>
-                                <mi>H</mi>
-                                <mn>1</mn>
-                            </msub>
-                            <mrow>
-                                <mo form="prefix">(</mo>
-                                <mi>I</mi>
-                                <mo>&#x02146;</mo>
-                                <mi>A</mi>
-                                <mo form="postfix">)</mo>
-                            </mrow>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                        </mtd>
-                        <mtd>
-                            <mi>B</mi>
-                            <msub>
-                                <mi>G</mi>
-                                <mn>2</mn>
-                            </msub>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <msub>
-                                <mi>H</mi>
-                                <mn>2</mn>
-                            </msub>
-                            <mrow>
-                                <mo form="prefix">(</mo>
-                                <mi>I</mi>
-                                <mo>&#x02146;</mo>
-                                <mi>B</mi>
-                                <mo form="postfix">)</mo>
-                            </mrow>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                        </mtd>
-                        <mtd>
-                            <mi>P</mi>
-                            <mi>b</mi>
-                            <msub>
-                                <mi>G</mi>
-                                <mn>2</mn>
-                            </msub>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <mi>y</mi>
-                            <mo>&#x022C5;</mo>
-                            <mi>B</mi>
-                            <msub>
-                                <mi>G</mi>
-                                <mn>2</mn>
-                            </msub>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                        </mtd>
-                        <mtd>
-                            <mi>P</mi>
-                            <mi>g</mi>
-                            <msub>
-                                <mi>G</mi>
-                                <mn>1</mn>
-                            </msub>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <mi>w</mi>
-                            <mo>&#x022C5;</mo>
-                            <mi>A</mi>
-                            <msub>
-                                <mi>G</mi>
-                                <mn>1</mn>
-                            </msub>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                        </mtd>
-                        <mtd>
-                            <mtext>pia</mtext>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <msub>
-                                <mi>H</mi>
-                                <mi>q</mi>
-                            </msub>
-                            <mrow>
-                                <mo form="prefix">(</mo>
-                                <mi>P</mi>
-                                <mi>a</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo>&#x02016;</mo>
-                                <mi>P</mi>
-                                <mi>b</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>2</mn>
-                                </msub>
-                                <mo>&#x02016;</mo>
-                                <mi>P</mi>
-                                <mi>g</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo>&#x02016;</mo>
-                                <mi>I</mi>
-                                <mo>&#x02146;</mo>
-                                <mi>B</mi>
-                                <mo form="postfix">)</mo>
-                            </mrow>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                        </mtd>
-                        <mtd>
-                            <mtext>pib</mtext>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <msub>
-                                <mi>H</mi>
-                                <mi>q</mi>
-                            </msub>
-                            <mrow>
-                                <mo form="prefix">(</mo>
-                                <mi>P</mi>
-                                <mi>b</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>2</mn>
-                                </msub>
-                                <mo>&#x02016;</mo>
-                                <mi>P</mi>
-                                <mi>a</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo>&#x02016;</mo>
-                                <mi>P</mi>
-                                <mi>g</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo>&#x02016;</mo>
-                                <mi>I</mi>
-                                <mo>&#x02146;</mo>
-                                <mi>A</mi>
-                                <mo form="postfix">)</mo>
-                            </mrow>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                        </mtd>
-                        <mtd>
-                            <mi>k</mi>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <mi>e</mi>
-                            <mrow>
-                                <mo form="prefix">(</mo>
-                                <mtext>pia</mtext>
-                                <mo>&#x022C5;</mo>
-                                <mi>A</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo>+</mo>
-                                <mi>P</mi>
-                                <mi>a</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo>,</mo>
-                                <mo form="prefix">(</mo>
-                                <mi>y</mi>
-                                <mo>+</mo>
-                                <mtext>pib</mtext>
-                                <mo form="postfix">)</mo>
-                                <mo>&#x022EF;</mo>
-                                <mo>&#x022C5;</mo>
-                                <mi>B</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>2</mn>
-                                </msub>
-                                <mo form="postfix">)</mo>
-                            </mrow>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                        </mtd>
-                        <mtd>
-                            <mi>K</mi>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <mi>H</mi>
-                            <mrow>
-                                <mo form="prefix">(</mo>
-                                <mi>k</mi>
-                                <mo>,</mo>
-                                <mi>w</mi>
-                                <mo>&#x022C5;</mo>
-                                <mi>P</mi>
-                                <mi>a</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo form="postfix">)</mo>
-                            </mrow>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                        </mtd>
-                        <mtd>
-                            <mo>&#x027F5;</mo>
-                            <mi>I</mi>
-                            <mo>&#x02146;</mo>
-                            <mi>B</mi>
-                            <mo>,</mo>
-                            <mi>P</mi>
-                            <mi>g</mi>
-                            <msub>
-                                <mi>G</mi>
-                                <mn>1</mn>
-                            </msub>
-                            <mo>,</mo>
-                            <mi>P</mi>
-                            <mi>b</mi>
-                            <msub>
-                                <mi>G</mi>
-                                <mn>2</mn>
-                            </msub>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                            <mi>B</mi>
-                            <msub>
-                                <mi>G</mi>
-                                <mn>2</mn>
-                            </msub>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <msub>
-                                <mi>H</mi>
-                                <mn>2</mn>
-                            </msub>
-                            <mrow>
-                                <mo form="prefix">(</mo>
-                                <mi>I</mi>
-                                <mo>&#x02146;</mo>
-                                <mi>B</mi>
-                                <mo form="postfix">)</mo>
-                            </mrow>
-                        </mtd>
-                        <mtd>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                            <mtext>pia</mtext>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <msub>
-                                <mi>H</mi>
-                                <mi>q</mi>
-                            </msub>
-                            <mrow>
-                                <mo form="prefix">(</mo>
-                                <mi>P</mi>
-                                <mi>a</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo>&#x02016;</mo>
-                                <mi>P</mi>
-                                <mi>b</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>2</mn>
-                                </msub>
-                                <mo>&#x02016;</mo>
-                                <mi>P</mi>
-                                <mi>g</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo>&#x02016;</mo>
-                                <mi>I</mi>
-                                <mo>&#x02146;</mo>
-                                <mi>B</mi>
-                                <mo form="postfix">)</mo>
-                            </mrow>
-                        </mtd>
-                        <mtd>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                            <mtext>pib</mtext>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <msub>
-                                <mi>H</mi>
-                                <mi>q</mi>
-                            </msub>
-                            <mrow>
-                                <mo form="prefix">(</mo>
-                                <mi>P</mi>
-                                <mi>b</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>2</mn>
-                                </msub>
-                                <mo>&#x02016;</mo>
-                                <mi>P</mi>
-                                <mi>a</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo>&#x02016;</mo>
-                                <mi>P</mi>
-                                <mi>g</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo>&#x02016;</mo>
-                                <mi>I</mi>
-                                <mo>&#x02146;</mo>
-                                <mi>A</mi>
-                                <mo form="postfix">)</mo>
-                            </mrow>
-                        </mtd>
-                        <mtd>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                            <mi>k</mi>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <mi>e</mi>
-                            <mrow>
-                                <mo form="prefix">(</mo>
-                                <mo form="prefix">(</mo>
-                                <mi>x</mi>
-                                <mo>+</mo>
-                                <mi>p</mi>
-                                <mi>i</mi>
-                                <mi>a</mi>
-                                <mo form="postfix">)</mo>
-                                <mo>&#x022EF;</mo>
-                                <mo>&#x022C5;</mo>
-                                <mi>A</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo>,</mo>
-                                <mtext>pib</mtext>
-                                <mo>&#x022C5;</mo>
-                                <mi>B</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>2</mn>
-                                </msub>
-                                <mo>+</mo>
-                                <mi>P</mi>
-                                <mi>b</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>2</mn>
-                                </msub>
-                                <mo form="postfix">)</mo>
-                            </mrow>
-                        </mtd>
-                        <mtd>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                            <mi>K</mi>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <mi>H</mi>
-                            <mrow>
-                                <mo form="prefix">(</mo>
-                                <mi>k</mi>
-                                <mo>,</mo>
-                                <mi>x</mi>
-                                <mo>&#x022C5;</mo>
-                                <mi>P</mi>
-                                <mi>g</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo form="postfix">)</mo>
-                            </mrow>
-                        </mtd>
-                        <mtd>
-                        </mtd>
-                    </mtr>
-                </mtable>
-            </mtd>
-        </mtr>
-    </mtable>
-    </math>
-    </html>
-</figure>
-<figure>
-  <caption><strong>Figure 4.</strong> Chow-Choo Protocol</caption>
-</figure>
-<hr>
-<p><strong>Notes on Chow-Choo Protocol:</strong></p>
-<ul>
-<li>\( G_1 \): a \( r \)-order cyclic subgroup of \( E(F_p) \).</li>
-<li>\( G_2 \): a subgroup of \( E(F_{p^k}) \), where \( k \) is the embedding degree of the Curve.</li>
-<li>\( H1 \): Maps string value to a point on the curve in \( G_1 \).</li>
-<li>\( H2 \): Maps string value to a point on the curve in \( G_2 \).</li>
-<li>\( Hq \): Hashes inputs to an integer modulo the curve order \( q \).When run in the simple SIDH</li>
-<li>H(): Hash function.</li>
-<li>\( || \): denotes the concatenation of messages.</li>
-</ul>
-<hr>
-<h3><a class="anchor" aria-hidden="true" id="secret-revocation"></a><a href="#secret-revocation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
-<p>We introduce Time Permits to handle the revocation issue. Normally in Identity-Based Encryption the problem of client revocation is solved by date-stamping identities so that the private key issued for an identity becomes useless once the time period expires. Now a new private key must be issued, and we will simply not issue one to a revoked client.</p>
-<p>Milagro achieves a much more immediate revocation capability through the use of Time Permits. The D-TA that is controlled by the application owner is envisioned to be the controlling D-TA to issue Time Permits at the point where a client needs to authenticate to a server, or create an authenticated key agreement between client and server or peer to peer.</p>
-<p>The idea is that the server includes an explicitly described time slot in its construction of Alice's hashed identity. Unless Alice has a corresponding &quot;Time permit&quot; for the same time slot, she cannot complete the protocol.</p>
-<p>In the protocol above we instead calculate \( H(ID_a) + H_T(T_i|ID_a) \) on both sides of the protocol where \( T_i \) is a textual description of the \( i \)-th time slot and \( H_T(.) \) is a hash function distinct from \( H(.) \).</p>
-<p>For the protocol to work correctly Alice must be issued by the Trusted Authority with a permit \( s.H_T(T_i|ID_a) \) which gets added to her combined PIN-plus-token secret \( s.H(ID_a) \).</p>
-<p>Observe that the permit is of no use to any other party, and hence can be issued publicly, uploaded to a public cloud data store (AWS S3), or delivered via the server directly.</p>
-<p>A proof of security for this idea in the context of Boneh and Franklin IBE can be found in Tseng<sup class="footnote-ref"><a href="#fn6" id="fnref6">[6]</a></sup> et al.</p>
-<hr>
-<h3><a class="anchor" aria-hidden="true" id="bls-subgroup-multi-signatures"></a><a href="#bls-subgroup-multi-signatures" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12  [...]
-<p>Dan Boneh, Ben Lynn and Hovav Schacham introduced their paper entitled &quot;Short Signatures from the Weil Pairing&quot; in 2001<sup class="footnote-ref"><a href="#fn4" id="fnref4:1">[4]</a></sup>. The paper described a short signature scheme based on the computational Diffie-Hellman assumption on certain elliptic and hyper-elliptic curves.</p>
-<p>In a simple instantiation, given a secret key \( sk \), a public key \( p k=g^{S k} \), a message \( m \), a hashing-into-the-curve function \( H \), and a bilinear pairing \( e \):</p>
-<ul>
-<li>Key Generation: \( sk \) is a random integer over the field, \( p k=g^{S k} \)</li>
-<li>Signature: \( S=H(m)^{s k} \)</li>
-<li>Verify: \( e(H(m), p k)=e(S, g) \)</li>
-</ul>
-<p>Biliniarity is on display as the signature</p>
-<p>$$ \begin{array}{c}{e(H(m), p k)=e\left(H(m), g^{s k}\right)=e(H(m), g)^{s k}=} \ {=e\left(H(m)^{s k}, g\right)=e(S, g)}\end{array} $$</p>
-<p>but is also unique and deterministic, something missing from ECDSA.</p>
-<p>In June of 2018 Dan Boneh, Manu Drijvers and Gregory Neven released research that constructs the first practical, short accountable-subgroup multi-signature (ASM) scheme based on BLS signatures<sup class="footnote-ref"><a href="#fn7" id="fnref7">[7]</a></sup>.</p>
-<p>An ASM scheme enables any subset \( S \) of a set of \( n \) parties to sign a message \( m \) so that a valid signature discloses which subset generated the signature (hence the subset \( S \) is accountable for signing \( m \)).</p>
-<p>In addition to the ASM scheme, Milagro exploits a unique property of BLS signatures: Signing Keys can be split using Shamir's Secret Sharing<sup class="footnote-ref"><a href="#fn8" id="fnref8">[8]</a></sup> in which the 'shares' of the keys, when distributed to signers, themselves become signing keys. By using a 'key splitter' and 'signature aggregator' role who also performs the Shamir Secret Sharing (SSS) dealer function, several benefits emerge.</p>
-<p>Thresholds can be set on the distribution of key shares just as in a normal SSS routine. So once the shares of the original signing key are distributed, the original signing key can be securely deleted, and is never re-created again. Instead, signatures derived from the shares of the original signing key are created. Again, the properties of BLS enable these shares of signature keys to be themselves used a signature keys. The object of the exercise is for the signature aggregator, who [...]
-<p>In other words, if the aggregator takes m-of-n of these signature shares, and perform the same polynomial interpolation as one would usually do with the secret shares, you’ll recover a complete signature which is identical to what would have been created if the original complete private key would have been used.</p>
-<p>In this context, signing is a single round protocol and is non-interactive.</p>
-<hr>
-<h3><a class="anchor" aria-hidden="true" id="supersingular-isogeny-key-encapsulation-sike"></a><a href="#supersingular-isogeny-key-encapsulation-sike" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v [...]
-<p>A key encapsulation mechanism (KEM) is a set of three algorithms.</p>
-<ul>
-<li>key generation (KeyGen)</li>
-<li>encapsulation (Encaps)</li>
-<li>decapsulation (Decaps)</li>
-</ul>
-<p>and a defined key space, where</p>
-<ul>
-<li>KeyGen(): returns a public and a secret key \( (pk, sk) \).</li>
-<li>Encaps\( (pk) \): takes pk as input and outputs ciphertext \( c \) and a key \( K \) from the key space.</li>
-<li>Decaps\( (sk, c) \): takes \( sk \) and \( c \) as input, and returns a key \( K \) or ERROR. \( K \) is called the session key.</li>
-</ul>
-<p>SIKE uses Hofheinz transformation on SIDH to achieve CCA security. Let \( p=2^{e_{A}} 3^{e_{3}}-1 \), and let \( E \) be a supersingular elliptic curve defined over a field of characteristic \( p \). \( E \) can also be defined over \( \mathbb{F}_{p^{2}} \) up to its isomorphism. An isogeny \( \phi : E \rightarrow E^{\prime} \) is a non-constant map from \( E \) to \( E^{\prime} \) which translates the identity into the identity.</p>
-<p>An isogeny map is defined by its degree and kernel. The degree of an isogeny is its degree as morphism. An isogeny with degree \( \ell \) map is called \( \ell \)-isogeny. Let \( G \) be a subgroup of points on \( E \) which contains \( \ell \) + 1 cyclic subgroups of order \( \ell \). This subgroup is the torsion group \( E[\ell] \) and each element of this group is corresponding to an isogeny of degree \( \ell \); accordingly, an isogeny also can be identified by \( G \), i.e., the  [...]
-<p>This section provides a brief presentation of the SIKE protocol. We refer readers to <sup class="footnote-ref"><a href="#fn9" id="fnref9">[9]</a></sup> and <sup class="footnote-ref"><a href="#fn5" id="fnref5:1">[5]</a></sup> for more detailed explanation of the supersignular isogeny problem and the base key-exchange protocol which the SIKE is constructed upon.</p>
-<hr>
-
-    <div class="admonition admonition-note">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V [...]
-      </div>
-      <div class="admonition-content">
-    <p>Submit a pull request on the development branch of <a href="https://github.com/apache/incubator-milagro">Milagro Website Repo</a>.</p>
-</div></div><!--
-Supported admonition types are: caution, note, important, tip, warning.
---><hr class="footnotes-sep">
-<section class="footnotes">
-<ol class="footnotes-list">
-<li id="fn1"  class="footnote-item"><p><a href="https://eprint.iacr.org/2002/164">M-Pin protocol</a> <a href="#fnref1" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn2"  class="footnote-item"><p><a href="https://eprint.iacr.org/2015/576">The Carnac protocol -- or how to read the contents of a sealed envelope</a> <a href="#fnref2" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn3"  class="footnote-item"><p><a href="https://eprint.iacr.org/2007/018.pdf">Strongly-Secure Identity-based Key Agreement and Anonymous Extension</a> <a href="#fnref3" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn4"  class="footnote-item"><p><a href="https://www.iacr.org/archive/asiacrypt2001/22480516.pdf">Short Signatures from the Weil Pairing</a> <a href="#fnref4" class="footnote-backref">↩</a> <a href="#fnref4:1" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn5"  class="footnote-item"><p><a href="https://sike.org/">Supersingular isogeny key encapsulation - NIST Submission</a> <a href="#fnref5" class="footnote-backref">↩</a> <a href="#fnref5:1" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn6"  class="footnote-item"><p><a href="https://reader.elsevier.com/reader/sd/pii/S2213020915000592?token=5C2E08C17803B9549FB79F3A91A1ED2382360D3E840087C8C065BD06EFCABB55C4A5A300566388A2920786DCC63E631E">A brief review of revocable ID-based public key cryptosystem</a> <a href="#fnref6" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn7"  class="footnote-item"><p><a href="https://eprint.iacr.org/2018/483">Compact Multi-Signatures for Smaller Blockchains</a> <a href="#fnref7" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn8"  class="footnote-item"><p><a href="https://cs.jhu.edu/~sdoshi/crypto/papers/shamirturing.pdf">How to Share a Secret</a> <a href="#fnref8" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn9"  class="footnote-item"><p><a href="https://eprint.iacr.org/2011/506.pdf">Towards quantum-resistant cryptosystems from supersingular elliptic curve isogenies</a> <a href="#fnref9" class="footnote-backref">↩</a></p>
-</li>
-</ol>
-</section>
-</span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/milagro-crypto"><span class="arrow-prev">← </span><span>Milagro Crypto</span></a><a class="docs-next button" href="/docs/milagro-design"><span>Milagro Design</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#m-pin-protocol-introduction"> [...]
\ No newline at end of file
diff --git a/docs/zkp-mfa-api.html b/docs/zkp-mfa-api.html
deleted file mode 100644
index e23845f..0000000
--- a/docs/zkp-mfa-api.html
+++ /dev/null
@@ -1,79 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Zero Knowledge Proof MFA API · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="
-    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
-      &lt;div class=&quot;admonition-heading&quot;&gt;
-        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
-      &lt;/div&gt;
-      &lt;div class=&quot;admonition-content&quot;&gt;
-    &lt;/div&gt;&lt;/div&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Zero Knowledge Proof MFA API · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="
-    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
-      &lt;div class=&quot;admonition-heading&quot;&gt;
-        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
-      &lt;/div&gt;
-      &lt;div class=&quot;admonition-content&quot;&gt;
-    &lt;/div&gt;&lt;/div&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Bl [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Zero Knowledge Proof MFA API</h1></header><article><div><span>
-    <div class="admonition admonition-tip">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2 [...]
-      </div>
-      <div class="admonition-content">
-    <p>Interested in becoming a contributor? Milagro is looking for you.</p>
-<p><a href="/docs/contributor-guide.html">CONTRIBUTOR'S GUIDE</a>.</p>
-</div></div><!--
-Supported admonition types are: caution, note, important, tip, warning.
---></span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zkp-mfa-overview"><span class="arrow-prev">← </span><span>ZKP-MFA Overview</span></a><a class="docs-next button" href="/docs/contributor-guide"><span>Contributor&#x27;s Guide</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="foote [...]
\ No newline at end of file
diff --git a/docs/zkp-mfa-api/index.html b/docs/zkp-mfa-api/index.html
deleted file mode 100644
index e23845f..0000000
--- a/docs/zkp-mfa-api/index.html
+++ /dev/null
@@ -1,79 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Zero Knowledge Proof MFA API · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="
-    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
-      &lt;div class=&quot;admonition-heading&quot;&gt;
-        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
-      &lt;/div&gt;
-      &lt;div class=&quot;admonition-content&quot;&gt;
-    &lt;/div&gt;&lt;/div&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Zero Knowledge Proof MFA API · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="
-    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
-      &lt;div class=&quot;admonition-heading&quot;&gt;
-        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
-      &lt;/div&gt;
-      &lt;div class=&quot;admonition-content&quot;&gt;
-    &lt;/div&gt;&lt;/div&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Bl [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Zero Knowledge Proof MFA API</h1></header><article><div><span>
-    <div class="admonition admonition-tip">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2 [...]
-      </div>
-      <div class="admonition-content">
-    <p>Interested in becoming a contributor? Milagro is looking for you.</p>
-<p><a href="/docs/contributor-guide.html">CONTRIBUTOR'S GUIDE</a>.</p>
-</div></div><!--
-Supported admonition types are: caution, note, important, tip, warning.
---></span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zkp-mfa-overview"><span class="arrow-prev">← </span><span>ZKP-MFA Overview</span></a><a class="docs-next button" href="/docs/contributor-guide"><span>Contributor&#x27;s Guide</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="foote [...]
\ No newline at end of file
diff --git a/docs/zkp-mfa-overview.html b/docs/zkp-mfa-overview.html
deleted file mode 100644
index 9ea6aca..0000000
--- a/docs/zkp-mfa-overview.html
+++ /dev/null
@@ -1,79 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Zero Knowledge Proof MFA Overview · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="
-    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
-      &lt;div class=&quot;admonition-heading&quot;&gt;
-        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
-      &lt;/div&gt;
-      &lt;div class=&quot;admonition-content&quot;&gt;
-    &lt;/div&gt;&lt;/div&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Zero Knowledge Proof MFA Overview · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="
-    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
-      &lt;div class=&quot;admonition-heading&quot;&gt;
-        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
-      &lt;/div&gt;
-      &lt;div class=&quot;admonition-content&quot;&gt;
-    &lt;/div&gt;&lt;/div&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Bl [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Zero Knowledge Proof MFA Overview</h1></header><article><div><span>
-    <div class="admonition admonition-tip">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2 [...]
-      </div>
-      <div class="admonition-content">
-    <p>Interested in becoming a contributor? Milagro is looking for you.</p>
-<p><a href="/docs/contributor-guide.html">CONTRIBUTOR'S GUIDE</a>.</p>
-</div></div><!--
-Supported admonition types are: caution, note, important, tip, warning.
---></span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/d-ta-api"><span class="arrow-prev">← </span><span>D-TA Node API</span></a><a class="docs-next button" href="/docs/zkp-mfa-api"><span>ZKP-MFA API</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a [...]
\ No newline at end of file
diff --git a/docs/zkp-mfa-overview/index.html b/docs/zkp-mfa-overview/index.html
deleted file mode 100644
index 9ea6aca..0000000
--- a/docs/zkp-mfa-overview/index.html
+++ /dev/null
@@ -1,79 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Zero Knowledge Proof MFA Overview · Apache Milagro</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="
-    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
-      &lt;div class=&quot;admonition-heading&quot;&gt;
-        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
-      &lt;/div&gt;
-      &lt;div class=&quot;admonition-content&quot;&gt;
-    &lt;/div&gt;&lt;/div&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Zero Knowledge Proof MFA Overview · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="
-    &lt;div class=&quot;admonition admonition-tip&quot;&gt;
-      &lt;div class=&quot;admonition-heading&quot;&gt;
-        &lt;h5&gt;&lt;div class=&quot;admonition-icon&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;12&quot; height=&quot;16&quot; viewBox=&quot;0 0 12 16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1 [...]
-      &lt;/div&gt;
-      &lt;div class=&quot;admonition-content&quot;&gt;
-    &lt;/div&gt;&lt;/div&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Bl [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle">Zero Knowledge Proof MFA Overview</h1></header><article><div><span>
-    <div class="admonition admonition-tip">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2 [...]
-      </div>
-      <div class="admonition-content">
-    <p>Interested in becoming a contributor? Milagro is looking for you.</p>
-<p><a href="/docs/contributor-guide.html">CONTRIBUTOR'S GUIDE</a>.</p>
-</div></div><!--
-Supported admonition types are: caution, note, important, tip, warning.
---></span></div></article></div><div class="docLastUpdate"><em>Last updated on 25/06/2019 by Brian Spector</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/d-ta-api"><span class="arrow-prev">← </span><span>D-TA Node API</span></a><a class="docs-next button" href="/docs/zkp-mfa-api"><span>ZKP-MFA API</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a [...]
\ No newline at end of file
diff --git a/en/help.html b/en/help.html
deleted file mode 100644
index a01c0c5..0000000
--- a/en/help.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Milagro · Core security infrastructure for decentralized networks</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Core security infrastructure for decentralized networks"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Apache Milagro · Core [...]
-</span></div></h2><div><span><p>Learn more about Milagro. <a href="/docs/en/milagro-intro.html">Read the docs.</a></p>
-</span></div></div></div><div class="blockElement threeByGridBlock"><div class="blockContent"><h2><div><span><p>Like cutting-edge crypto?</p>
-</span></div></h2><div><span><p>Join us. <a href="/docs/en/contributor-guide.html">Become a contributor.</a></p>
-</span></div></div></div><div class="blockElement threeByGridBlock"><div class="blockContent"><h2><div><span><p>Need Status?</p>
-</span></div></h2><div><span><p>We blog. <a href="/docs/en/../blog/">No, really.</a></p>
-</span></div></div></div></div></div></div></div></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof M [...]
\ No newline at end of file
diff --git a/en/help/index.html b/en/help/index.html
deleted file mode 100644
index a01c0c5..0000000
--- a/en/help/index.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Milagro · Core security infrastructure for decentralized networks</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Core security infrastructure for decentralized networks"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Apache Milagro · Core [...]
-</span></div></h2><div><span><p>Learn more about Milagro. <a href="/docs/en/milagro-intro.html">Read the docs.</a></p>
-</span></div></div></div><div class="blockElement threeByGridBlock"><div class="blockContent"><h2><div><span><p>Like cutting-edge crypto?</p>
-</span></div></h2><div><span><p>Join us. <a href="/docs/en/contributor-guide.html">Become a contributor.</a></p>
-</span></div></div></div><div class="blockElement threeByGridBlock"><div class="blockContent"><h2><div><span><p>Need Status?</p>
-</span></div></h2><div><span><p>We blog. <a href="/docs/en/../blog/">No, really.</a></p>
-</span></div></div></div></div></div></div></div></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof M [...]
\ No newline at end of file
diff --git a/en/index.js-old.html b/en/index.js-old.html
deleted file mode 100644
index ad1dfee..0000000
--- a/en/index.js-old.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Milagro · Core security infrastructure for decentralized networks</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Core security infrastructure for decentralized networks"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Apache Milagro · Core [...]
-</span></div></h2><div><span><p>This is the content of my feature</p>
-</span></div></div></div><div class="blockElement alignCenter fourByGridBlock imageAlignTop"><div class="blockImage"><img src="/img/undraw_operating_system.svg"/></div><div class="blockContent"><h2><div><span><p>Decentralized custody of digital assets</p>
-</span></div></h2><div><span><p>The content of my second feature</p>
-</span></div></div></div></div></div></div><div class="productShowcaseSection paddingBottom" style="text-align:center"><h2>Milagro Server</h2><div><span><p>These are features of this project</p>
-</span></div></div><div class="container lightBackground paddingBottom paddingTop"><div class="wrapper"><div class="gridBlock"><div class="blockElement alignCenter imageAlignSide imageAlignRight twoByGridBlock"><div class="blockContent"><h2><div><span><p>Randomly Generated Theme Colors</p>
-</span></div></h2><div><span><p>Each new Docusaurus project has <strong>randomly-generated</strong> theme colors.</p>
-</span></div></div><div class="blockImage"><img src="/img/undraw_youtube_tutorial.svg"/></div></div></div></div></div><div class="container paddingBottom paddingTop" id="try"><div class="wrapper"><div class="gridBlock"><div class="blockElement alignCenter imageAlignSide imageAlignLeft twoByGridBlock"><div class="blockImage"><img src="/img/undraw_code_review.svg"/></div><div class="blockContent"><h2><div><span><p>Wonderful SVG Illustrations</p>
-</span></div></h2><div><span><p>To make your landing page more attractive, use illustrations! Check out <a href="https://undraw.co/"><strong>unDraw</strong></a> which provides you with customizable illustrations which are free to use. The illustrations you see on this page are from unDraw.</p>
-</span></div></div></div></div></div></div></div></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof M [...]
\ No newline at end of file
diff --git a/en/index.js-old/index.html b/en/index.js-old/index.html
deleted file mode 100644
index ad1dfee..0000000
--- a/en/index.js-old/index.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Milagro · Core security infrastructure for decentralized networks</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Core security infrastructure for decentralized networks"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Apache Milagro · Core [...]
-</span></div></h2><div><span><p>This is the content of my feature</p>
-</span></div></div></div><div class="blockElement alignCenter fourByGridBlock imageAlignTop"><div class="blockImage"><img src="/img/undraw_operating_system.svg"/></div><div class="blockContent"><h2><div><span><p>Decentralized custody of digital assets</p>
-</span></div></h2><div><span><p>The content of my second feature</p>
-</span></div></div></div></div></div></div><div class="productShowcaseSection paddingBottom" style="text-align:center"><h2>Milagro Server</h2><div><span><p>These are features of this project</p>
-</span></div></div><div class="container lightBackground paddingBottom paddingTop"><div class="wrapper"><div class="gridBlock"><div class="blockElement alignCenter imageAlignSide imageAlignRight twoByGridBlock"><div class="blockContent"><h2><div><span><p>Randomly Generated Theme Colors</p>
-</span></div></h2><div><span><p>Each new Docusaurus project has <strong>randomly-generated</strong> theme colors.</p>
-</span></div></div><div class="blockImage"><img src="/img/undraw_youtube_tutorial.svg"/></div></div></div></div></div><div class="container paddingBottom paddingTop" id="try"><div class="wrapper"><div class="gridBlock"><div class="blockElement alignCenter imageAlignSide imageAlignLeft twoByGridBlock"><div class="blockImage"><img src="/img/undraw_code_review.svg"/></div><div class="blockContent"><h2><div><span><p>Wonderful SVG Illustrations</p>
-</span></div></h2><div><span><p>To make your landing page more attractive, use illustrations! Check out <a href="https://undraw.co/"><strong>unDraw</strong></a> which provides you with customizable illustrations which are free to use. The illustrations you see on this page are from unDraw.</p>
-</span></div></div></div></div></div></div></div></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof M [...]
\ No newline at end of file
diff --git a/en/users.html b/en/users.html
deleted file mode 100644
index 2d41879..0000000
--- a/en/users.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Milagro · Core security infrastructure for decentralized networks</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Core security infrastructure for decentralized networks"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Apache Milagro · Core [...]
\ No newline at end of file
diff --git a/en/users.js.old b/en/users.js.old
deleted file mode 100644
index 039dc39..0000000
--- a/en/users.js.old
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Copyright (c) 2017-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
-
-const React = require('react');
-
-const CompLibrary = require('../../core/CompLibrary.js');
-
-const Container = CompLibrary.Container;
-
-class Users extends React.Component {
-  render() {
-    const {config: siteConfig} = this.props;
-    if ((siteConfig.users || []).length === 0) {
-      return null;
-    }
-
-    const editUrl = `${siteConfig.repoUrl}/edit/master/website/siteConfig.js`;
-    const showcase = siteConfig.users.map(user => (
-      <a href={user.infoLink} key={user.infoLink}>
-        <img src={user.image} alt={user.caption} title={user.caption} />
-      </a>
-    ));
-
-    return (
-      <div className="mainContainer">
-        <Container padding={['bottom', 'top']}>
-          <div className="showcaseSection">
-            <div className="prose">
-              <h1>Who is Using This?</h1>
-              <p>This project is used by many folks</p>
-            </div>
-            <div className="logos">{showcase}</div>
-            <p>Are you using this project?</p>
-            <a href={editUrl} className="button">
-              Add your company
-            </a>
-          </div>
-        </Container>
-      </div>
-    );
-  }
-}
-
-module.exports = Users;
diff --git a/en/users/index.html b/en/users/index.html
deleted file mode 100644
index 2d41879..0000000
--- a/en/users/index.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Milagro · Core security infrastructure for decentralized networks</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Core security infrastructure for decentralized networks"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Apache Milagro · Core [...]
\ No newline at end of file
diff --git a/files/ApacheCon_12_May.pdf b/files/ApacheCon_12_May.pdf
deleted file mode 100644
index f8c7fda..0000000
Binary files a/files/ApacheCon_12_May.pdf and /dev/null differ
diff --git a/help.html b/help.html
deleted file mode 100644
index 742a60e..0000000
--- a/help.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<!DOCTYPE html><html lang=""><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Milagro · Core security infrastructure for decentralized networks</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Core security infrastructure for decentralized networks"/><meta property="og:title" content="Apache Milagro · Core security infrastructure for decentralized netwo [...]
-</span></div></h2><div><span><p>Learn more about Milagro. <a href="/docs/milagro-intro.html">Read the docs.</a></p>
-</span></div></div></div><div class="blockElement threeByGridBlock"><div class="blockContent"><h2><div><span><p>Like cutting-edge crypto?</p>
-</span></div></h2><div><span><p>Join us. <a href="/docs/contributor-guide.html">Become a contributor.</a></p>
-</span></div></div></div><div class="blockElement threeByGridBlock"><div class="blockContent"><h2><div><span><p>Need Status?</p>
-</span></div></h2><div><span><p>We blog. <a href="/docs/../blog/">No, really.</a></p>
-</span></div></div></div></div></div></div></div></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof M [...]
\ No newline at end of file
diff --git a/help/index.html b/help/index.html
deleted file mode 100644
index 742a60e..0000000
--- a/help/index.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<!DOCTYPE html><html lang=""><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Milagro · Core security infrastructure for decentralized networks</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Core security infrastructure for decentralized networks"/><meta property="og:title" content="Apache Milagro · Core security infrastructure for decentralized netwo [...]
-</span></div></h2><div><span><p>Learn more about Milagro. <a href="/docs/milagro-intro.html">Read the docs.</a></p>
-</span></div></div></div><div class="blockElement threeByGridBlock"><div class="blockContent"><h2><div><span><p>Like cutting-edge crypto?</p>
-</span></div></h2><div><span><p>Join us. <a href="/docs/contributor-guide.html">Become a contributor.</a></p>
-</span></div></div></div><div class="blockElement threeByGridBlock"><div class="blockContent"><h2><div><span><p>Need Status?</p>
-</span></div></h2><div><span><p>We blog. <a href="/docs/../blog/">No, really.</a></p>
-</span></div></div></div></div></div></div></div></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof M [...]
\ No newline at end of file
diff --git a/images/7000x1080&text=Slide-One.png b/images/7000x1080&text=Slide-One.png
deleted file mode 100644
index a7c2736..0000000
Binary files a/images/7000x1080&text=Slide-One.png and /dev/null differ
diff --git a/images/7000x1080&text=Slide-Three.png b/images/7000x1080&text=Slide-Three.png
deleted file mode 100644
index 1a429e9..0000000
Binary files a/images/7000x1080&text=Slide-Three.png and /dev/null differ
diff --git a/images/7000x1080&text=Slide-Two.png b/images/7000x1080&text=Slide-Two.png
deleted file mode 100644
index 329971b..0000000
Binary files a/images/7000x1080&text=Slide-Two.png and /dev/null differ
diff --git a/images/MILAGRO_LOGO.svg b/images/MILAGRO_LOGO.svg
deleted file mode 100644
index 420fc9a..0000000
--- a/images/MILAGRO_LOGO.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="581.8" height="117" viewBox="0 0 581.8 117"><path d="M179.1 95h-6.9L148 34.1V95h-9.9V22.9h15.7l21.9 56.3L198 22.9h15.7V95h-9.9V34.1L179.1 95zm51.5 0V22.9h9.9V95h-9.9zm26.9 0V22.9h9.9v63.2h31.301V95H257.5zm96.5 0l-5.7-15.3h-30.7L312.1 95h-10.8l27.9-72.1h8.699L365.4 95H354zm-33-24.2h24.201L333.1 37.9h-.1l-12 32.9zm87.6-6.9V55h28.2v27.4c-6.9 8.8-17.7 13.8-29.6 13.8-22 0-38.701-14.9-38.701-37.3 0-21.3 17.4-37.3 38.701-37.3 11.1 0 21 4.9 27.898 1 [...]
\ No newline at end of file
diff --git a/images/Milagro-Crypto-Library.png b/images/Milagro-Crypto-Library.png
deleted file mode 100644
index 7c17823..0000000
Binary files a/images/Milagro-Crypto-Library.png and /dev/null differ
diff --git a/images/Milagro-MFA.jpg b/images/Milagro-MFA.jpg
deleted file mode 100644
index ef8a07e..0000000
Binary files a/images/Milagro-MFA.jpg and /dev/null differ
diff --git a/images/Milagro-TLS.jpg b/images/Milagro-TLS.jpg
deleted file mode 100644
index 97f3c8b..0000000
Binary files a/images/Milagro-TLS.jpg and /dev/null differ
diff --git a/images/Milagro-TLS2.png b/images/Milagro-TLS2.png
deleted file mode 100644
index 28531f4..0000000
Binary files a/images/Milagro-TLS2.png and /dev/null differ
diff --git a/images/apache-feather.png b/images/apache-feather.png
deleted file mode 100644
index d7db4f9..0000000
Binary files a/images/apache-feather.png and /dev/null differ
diff --git a/images/apache-incubator.png b/images/apache-incubator.png
deleted file mode 100644
index b37e747..0000000
Binary files a/images/apache-incubator.png and /dev/null differ
diff --git a/images/milagro-footer.png b/images/milagro-footer.png
deleted file mode 100644
index e970c36..0000000
Binary files a/images/milagro-footer.png and /dev/null differ
diff --git a/images/milagro-header.png b/images/milagro-header.png
deleted file mode 100644
index 6beedcf..0000000
Binary files a/images/milagro-header.png and /dev/null differ
diff --git a/images/milagro-hero-inc-subheader.png b/images/milagro-hero-inc-subheader.png
deleted file mode 100644
index 79bf6f0..0000000
Binary files a/images/milagro-hero-inc-subheader.png and /dev/null differ
diff --git a/images/milagro-hero.png b/images/milagro-hero.png
deleted file mode 100644
index 9d4545a..0000000
Binary files a/images/milagro-hero.png and /dev/null differ
diff --git a/images/milagro-mfa-3-things.png b/images/milagro-mfa-3-things.png
deleted file mode 100644
index 2e11599..0000000
Binary files a/images/milagro-mfa-3-things.png and /dev/null differ
diff --git a/img/MILAGRO_LOGO.svg b/img/MILAGRO_LOGO.svg
deleted file mode 100644
index d0172bc..0000000
--- a/img/MILAGRO_LOGO.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="581.8" height="117" viewBox="0 0 581.8 117"><path d="M179.1 95h-6.9L148 34.1V95h-9.9V22.9h15.7l21.9 56.3L198 22.9h15.7V95h-9.9V34.1L179.1 95zm51.5 0V22.9h9.9V95h-9.9zm26.9 0V22.9h9.9v63.2h31.3V95h-41.2zm96.5 0l-5.7-15.3h-30.7L312.1 95h-10.8l27.9-72.1h8.7L365.4 95H354zm-33-24.2h24.2l-12.1-32.9h-.1l-12 32.9zm87.6-6.9V55h28.2v27.4c-6.9 8.8-17.7 13.8-29.6 13.8-22 0-38.7-14.9-38.7-37.3 0-21.3 17.4-37.3 38.7-37.3 11.1 0 21 4.9 27.9 12.8l-7 5.8c-5- [...]
\ No newline at end of file
diff --git a/img/MILAGRO_emblem.svg b/img/MILAGRO_emblem.svg
deleted file mode 100644
index 32afb59..0000000
--- a/img/MILAGRO_emblem.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="90.3" height="117" viewBox="0 0 90.3 117"><path d="M85.9 105.4L1.8 66.2C.7 65.7 0 64.6 0 63.4v-49c0-2.3 2.4-3.8 4.4-2.8l84.1 39.2c1.1.5 1.8 1.6 1.8 2.8v49c0 2.3-2.3 3.8-4.4 2.8z" fill="#c2ff17"/><path d="M88.8 52.3L0 93.7v20.2c0 2.3 2.4 3.8 4.4 2.8l84.1-39.2c1.1-.5 1.8-1.6 1.8-2.8V53.6c0-.7-.2-1.3-.5-1.8-.2-.4-.6-.6-1-.9.2.2.3.4.3.7 0 .3-.1.5-.3.7z" fill="#31bca4"/><path d="M1.6 64.7l88.8-41.4V3.1C90.4.8 88-.7 86 .3L1.8 39.5C.7 40 0 41.1 0 4 [...]
\ No newline at end of file
diff --git a/img/apache-incubator-logo-small.png b/img/apache-incubator-logo-small.png
deleted file mode 100644
index 4186940..0000000
Binary files a/img/apache-incubator-logo-small.png and /dev/null differ
diff --git a/img/apache-logo-small.gif b/img/apache-logo-small.gif
deleted file mode 100644
index aa27713..0000000
Binary files a/img/apache-logo-small.gif and /dev/null differ
diff --git a/img/apache_incubator.svg b/img/apache_incubator.svg
deleted file mode 100644
index 96f31fc..0000000
--- a/img/apache_incubator.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000" viewBox="0 0 1000 1000"><path fill-rule="evenodd" clip-rule="evenodd" fill="#E4E2E1" d="M.04-.04h1000v1000H.04z"/><path fill-rule="evenodd" clip-rule="evenodd" fill="#FFF" d="M200.04 199.96h600v600h-600z"/><path fill-rule="evenodd" clip-rule="evenodd" d="M709.219 458.14h21.215v2.002h-19v11.8h17.083v2.002h-17.083v12.014h19.212v2.002h-21.427zm-68.162 0h2.215v13.845h19.085V458.14h2.215v29.82h-2.215v-13.973h-19.085v13.973h-2. [...]
\ No newline at end of file
diff --git a/img/apache_incubator_white_RGB.png b/img/apache_incubator_white_RGB.png
deleted file mode 100644
index ef8e564..0000000
Binary files a/img/apache_incubator_white_RGB.png and /dev/null differ
diff --git a/img/clint.eps.jpg b/img/clint.eps.jpg
deleted file mode 100644
index a0966dd..0000000
Binary files a/img/clint.eps.jpg and /dev/null differ
diff --git a/img/favicon.ico b/img/favicon.ico
deleted file mode 100644
index d285af7..0000000
Binary files a/img/favicon.ico and /dev/null differ
diff --git a/img/favicon.ico-old.ico b/img/favicon.ico-old.ico
deleted file mode 100644
index be74abd..0000000
Binary files a/img/favicon.ico-old.ico and /dev/null differ
diff --git a/img/feather.svg b/img/feather.svg
deleted file mode 100644
index 3240046..0000000
--- a/img/feather.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2392.5 4226.6"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="-5167.096" y1="697.555" x2="-4570.116" y2="1395.619" gradientTransform="rotate(-65.001 -2052.924 -4777.854)"><stop offset="0" stop-color="#f69923"/><stop offset=".312" stop-color="#f79a23"/><stop offset=".838" stop-color="#e97826"/></linearGradient><path fill="url(#a)" d="M1798.9 20.1C1732.6 59.2 1622.5 170 1491 330.5l120.8 228c84.8-121.3 170.9-230.4 257.8-323.6 6 [...]
\ No newline at end of file
diff --git a/img/language.svg b/img/language.svg
deleted file mode 100644
index 6619593..0000000
--- a/img/language.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-<svg class="language {{include.class}}" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20">
-  <path fill="#ffffff" d="M19.753 10.909c-.624-1.707-2.366-2.726-4.661-2.726-.09 0-.176.002-.262.006l-.016-2.063 3.525-.607c.115-.019.133-.119.109-.231-.023-.111-.167-.883-.188-.976-.027-.131-.102-.127-.207-.109-.104.018-3.25.461-3.25.461l-.013-2.078c-.001-.125-.069-.158-.194-.156l-1.025.016c-.105.002-.164.049-.162.148l.033 2.307s-3.061.527-3.144.543c-.084.014-.17.053-.151.143.019.09.19 1.094.208 1.172.018.08.072.129.188.107l2.924-.504.035 2.018c-1.077.281-1.801.824-2.256 1.303-.768.807- [...]
-</svg>
diff --git a/img/milagro.svg b/img/milagro.svg
deleted file mode 100644
index 32afb59..0000000
--- a/img/milagro.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="90.3" height="117" viewBox="0 0 90.3 117"><path d="M85.9 105.4L1.8 66.2C.7 65.7 0 64.6 0 63.4v-49c0-2.3 2.4-3.8 4.4-2.8l84.1 39.2c1.1.5 1.8 1.6 1.8 2.8v49c0 2.3-2.3 3.8-4.4 2.8z" fill="#c2ff17"/><path d="M88.8 52.3L0 93.7v20.2c0 2.3 2.4 3.8 4.4 2.8l84.1-39.2c1.1-.5 1.8-1.6 1.8-2.8V53.6c0-.7-.2-1.3-.5-1.8-.2-.4-.6-.6-1-.9.2.2.3.4.3.7 0 .3-.1.5-.3.7z" fill="#31bca4"/><path d="M1.6 64.7l88.8-41.4V3.1C90.4.8 88-.7 86 .3L1.8 39.5C.7 40 0 41.1 0 4 [...]
\ No newline at end of file
diff --git a/img/oss_logo.png b/img/oss_logo.png
deleted file mode 100644
index 4e12efb..0000000
Binary files a/img/oss_logo.png and /dev/null differ
diff --git a/img/oss_logo2.png b/img/oss_logo2.png
deleted file mode 100644
index 8183e28..0000000
Binary files a/img/oss_logo2.png and /dev/null differ
diff --git a/img/undraw_code_review.svg b/img/undraw_code_review.svg
deleted file mode 100644
index 4fe96e4..0000000
--- a/img/undraw_code_review.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="1126.194" height="855" viewBox="0 0 1126.194 855"><path d="M544.864 755.938C302.465 737.49 13.394 549.672 28.111 356.28S322.797-17.142 565.196 1.305 947.128 381.167 932.41 574.558s-145.148 199.827-387.547 181.38z" fill="#f2f2f2"/><ellipse cx="565.194" cy="756" rx="506" ry="31" fill="#3f3d56"/><ellipse cx="565.194" cy="755.5" rx="431" ry="20.5" opacity=".1"/><ellipse cx="212.194" cy="836.5" rx="212.194" ry="18.5" fill="#3f [...]
\ No newline at end of file
diff --git a/img/undraw_monitor.svg b/img/undraw_monitor.svg
deleted file mode 100644
index 72b699e..0000000
--- a/img/undraw_monitor.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1094.72" height="788.69" viewBox="0 0 1094.72 788.69"><defs><linearGradient id="a" x1="2938.83" y1="215.4" x2="2938.83" y2="-91.93" gradientTransform="rotate(59.3 1726.545 -1812.88)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="gray" stop-opacity=".25"/><stop offset=".54" stop-color="gray" stop-opacity=".12"/><stop offset="1" stop-color="gray" stop-opacity=".1"/></ [...]
\ No newline at end of file
diff --git a/img/undraw_note_list.svg b/img/undraw_note_list.svg
deleted file mode 100644
index 72811ac..0000000
--- a/img/undraw_note_list.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="974" height="805.02" viewBox="0 0 974 805.02"><path d="M974 768.75v5a19.11 19.11 0 0 1-20.91 19c-39.15-3.72-78.12-10.64-117.4-9.43-72.42 2.21-145.44 31.83-215.54 13.53-19.77-5.16-39.32-14.13-59.66-12.2-18.25 1.73-34.49 12.05-52.17 16.89C454.55 816.3 399.8 779 344.06 780.51c-36.74 1-71.92 18.89-108.62 16.9-21.27-1.14-41.53-8.92-62.28-13.71-51.66-11.94-104.86-5.27-158.09-1.13A14 14 0 0 1 0 768.64v-4.28a14 14 0 0 1 14-14l940 [...]
\ No newline at end of file
diff --git a/img/undraw_online.svg b/img/undraw_online.svg
deleted file mode 100644
index c9f416c..0000000
--- a/img/undraw_online.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1082.19" height="847.94" viewBox="0 0 1082.19 847.94"><defs><linearGradient id="a" x1="276.42" y1="818" x2="276.42" y2="60" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="gray" stop-opacity=".25"/><stop offset=".54" stop-color="gray" stop-opacity=".12"/><stop offset="1" stop-color="gray" stop-opacity=".1"/></linearGradient><linearGradient id="b" x1="891.13" y1="675.0 [...]
\ No newline at end of file
diff --git a/img/undraw_open_source.svg b/img/undraw_open_source.svg
deleted file mode 100644
index 8a38635..0000000
--- a/img/undraw_open_source.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="1028" height="598.997" viewBox="0 0 1028 598.997"><circle cx="332.005" cy="292.004" r="292.004" fill="#f2f2f2"/><path d="M1028 517.997a13.69 13.69 0 0 1-.17 2.12c-7.14 43.76-234.46 78.88-513.83 78.88S7.31 563.877.17 520.117a13.675 13.675 0 0 1-.17-2.12c0-.2 0-.41.02-.61 0-.11.01-.21.01-.32a.49.49 0 0 0 .01-.12c.04-.45.1-.88.18-1.32 3.26-17.89 43.35-34.33 108.74-47.5 53.48-10.77 123.89-19.36 204.93-24.76 61.5-4.1 129.12-6. [...]
\ No newline at end of file
diff --git a/img/undraw_operating_system.svg b/img/undraw_operating_system.svg
deleted file mode 100644
index 76b1184..0000000
--- a/img/undraw_operating_system.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="1100" height="806.74" viewBox="0 0 1100 806.74"><defs><linearGradient id="a" x1="459.23" y1="847.99" x2="459.23" y2="385.75" gradientTransform="translate(250.84)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="gray" stop-opacity=".25"/><stop offset=".54" stop-color="gray" stop-opacity=".12"/><stop offset="1" stop-color="gray" stop-opacity=".1"/></linearGradient></defs><ellipse cx="629.72" cy="780.56" rx="122. [...]
\ No newline at end of file
diff --git a/img/undraw_react.svg b/img/undraw_react.svg
deleted file mode 100644
index ce14b93..0000000
--- a/img/undraw_react.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="1108" height="731.18" viewBox="0 0 1108 731.18"><path d="M767.68 330.79l6.89-2.7c.66-.26 1.31-.54 2-.81a59.85 59.85 0 0 1 15.28-115.77l-4.8 24.2 18.22-23.92h.16a59.87 59.87 0 0 1 51.16 67.45c-.15 1.13-.39 2.23-.6 3.34 5.61-4.43 10.87-9.32 14.81-15 8-11.54 10.71-25.76 13.47-43.17 5.47-34.48 10.4-69.34 14.84-104.18a59.83 59.83 0 0 1-42-65.36c.25-1.82.6-3.59 1-5.34.1-.44.2-.88.31-1.31.43-1.69.91-3.35 1.47-5 .09-.27.21-.52.3- [...]
\ No newline at end of file
diff --git a/img/undraw_tweetstorm.svg b/img/undraw_tweetstorm.svg
deleted file mode 100644
index 491c9b2..0000000
--- a/img/undraw_tweetstorm.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="813.15" height="752" viewBox="0 0 813.15 752"><path fill="#e0e0e0" d="M559.73 403.7l-211.87-51.03V752l211.87-55.46V403.7z"/><path opacity=".1" d="M559.73 403.7l-211.87-51.03V752l211.87-55.46V403.7z"/><path fill="#e0e0e0" d="M135.99 403.7l211.87-51.03V752l-211.87-54.35V403.7z"/><path opacity=".17" d="M135.99 401.93l211.87-51.02V752l-211.87-54.35V401.93z"/><path fill="#e0e0e0" d="M346.09 354.44l111.59-92.73 211.86 54.36-111 [...]
\ No newline at end of file
diff --git a/img/undraw_youtube_tutorial.svg b/img/undraw_youtube_tutorial.svg
deleted file mode 100644
index 98bdd9d..0000000
--- a/img/undraw_youtube_tutorial.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="1130" height="831.56" viewBox="0 0 1130 831.56"><defs><linearGradient id="a" x1="321.68" y1="857.11" x2="321.68" y2="447.21" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="gray" stop-opacity=".25"/><stop offset=".54" stop-color="gray" stop-opacity=".12"/><stop offset="1" stop-color="gray" stop-opacity=".1"/></linearGradient></defs><path d="M656.54 124.69C584.1 122.18 515.1 98.78 449.22 73.2S318.07 19.27 247.3 [...]
\ No newline at end of file
diff --git a/img/words.eps.jpg b/img/words.eps.jpg
deleted file mode 100644
index f197e6e..0000000
Binary files a/img/words.eps.jpg and /dev/null differ
diff --git a/index.html b/index.html
deleted file mode 100644
index e28a92c..0000000
--- a/index.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML>
-<html lang="en-US">
-  <head>
-    <meta charset="UTF-8">
-    <meta http-equiv="refresh" content="0; url=/users.html">
-    <script type="text/javascript">
-      window.location.href = '/users.html';
-    </script>
-    <title>Apache Milagro is core security infrastructure and crypto libraries for decentralized networks and distributed systems.</title>
-  </head>
-  <body>
-    If you are not redirected automatically, follow this <a href="/users.html">link</a>.
-  </body>
-</html>
\ No newline at end of file
diff --git a/index.js-old.html b/index.js-old.html
deleted file mode 100644
index e301593..0000000
--- a/index.js-old.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!DOCTYPE html><html lang=""><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Milagro · Core security infrastructure for decentralized networks</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Core security infrastructure for decentralized networks"/><meta property="og:title" content="Apache Milagro · Core security infrastructure for decentralized netwo [...]
-</span></div></h2><div><span><p>This is the content of my feature</p>
-</span></div></div></div><div class="blockElement alignCenter fourByGridBlock imageAlignTop"><div class="blockImage"><img src="/img/undraw_operating_system.svg"/></div><div class="blockContent"><h2><div><span><p>Decentralized custody of digital assets</p>
-</span></div></h2><div><span><p>The content of my second feature</p>
-</span></div></div></div></div></div></div><div class="productShowcaseSection paddingBottom" style="text-align:center"><h2>Milagro Server</h2><div><span><p>These are features of this project</p>
-</span></div></div><div class="container lightBackground paddingBottom paddingTop"><div class="wrapper"><div class="gridBlock"><div class="blockElement alignCenter imageAlignSide imageAlignRight twoByGridBlock"><div class="blockContent"><h2><div><span><p>Randomly Generated Theme Colors</p>
-</span></div></h2><div><span><p>Each new Docusaurus project has <strong>randomly-generated</strong> theme colors.</p>
-</span></div></div><div class="blockImage"><img src="/img/undraw_youtube_tutorial.svg"/></div></div></div></div></div><div class="container paddingBottom paddingTop" id="try"><div class="wrapper"><div class="gridBlock"><div class="blockElement alignCenter imageAlignSide imageAlignLeft twoByGridBlock"><div class="blockImage"><img src="/img/undraw_code_review.svg"/></div><div class="blockContent"><h2><div><span><p>Wonderful SVG Illustrations</p>
-</span></div></h2><div><span><p>To make your landing page more attractive, use illustrations! Check out <a href="https://undraw.co/"><strong>unDraw</strong></a> which provides you with customizable illustrations which are free to use. The illustrations you see on this page are from unDraw.</p>
-</span></div></div></div></div></div></div></div></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof M [...]
\ No newline at end of file
diff --git a/index.js-old/index.html b/index.js-old/index.html
deleted file mode 100644
index e301593..0000000
--- a/index.js-old/index.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!DOCTYPE html><html lang=""><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Milagro · Core security infrastructure for decentralized networks</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Core security infrastructure for decentralized networks"/><meta property="og:title" content="Apache Milagro · Core security infrastructure for decentralized netwo [...]
-</span></div></h2><div><span><p>This is the content of my feature</p>
-</span></div></div></div><div class="blockElement alignCenter fourByGridBlock imageAlignTop"><div class="blockImage"><img src="/img/undraw_operating_system.svg"/></div><div class="blockContent"><h2><div><span><p>Decentralized custody of digital assets</p>
-</span></div></h2><div><span><p>The content of my second feature</p>
-</span></div></div></div></div></div></div><div class="productShowcaseSection paddingBottom" style="text-align:center"><h2>Milagro Server</h2><div><span><p>These are features of this project</p>
-</span></div></div><div class="container lightBackground paddingBottom paddingTop"><div class="wrapper"><div class="gridBlock"><div class="blockElement alignCenter imageAlignSide imageAlignRight twoByGridBlock"><div class="blockContent"><h2><div><span><p>Randomly Generated Theme Colors</p>
-</span></div></h2><div><span><p>Each new Docusaurus project has <strong>randomly-generated</strong> theme colors.</p>
-</span></div></div><div class="blockImage"><img src="/img/undraw_youtube_tutorial.svg"/></div></div></div></div></div><div class="container paddingBottom paddingTop" id="try"><div class="wrapper"><div class="gridBlock"><div class="blockElement alignCenter imageAlignSide imageAlignLeft twoByGridBlock"><div class="blockImage"><img src="/img/undraw_code_review.svg"/></div><div class="blockContent"><h2><div><span><p>Wonderful SVG Illustrations</p>
-</span></div></h2><div><span><p>To make your landing page more attractive, use illustrations! Check out <a href="https://undraw.co/"><strong>unDraw</strong></a> which provides you with customizable illustrations which are free to use. The illustrations you see on this page are from unDraw.</p>
-</span></div></div></div></div></div></div></div></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof M [...]
\ No newline at end of file
diff --git a/js/codetabs.js b/js/codetabs.js
deleted file mode 100644
index dd01ebf..0000000
--- a/js/codetabs.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Copyright (c) 2017-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
-
-// Turn off ESLint for this file because it's sent down to users as-is.
-/* eslint-disable */
-window.addEventListener('load', function() {
-  // add event listener for all tab
-  document.querySelectorAll('.nav-link').forEach(function(el) {
-    el.addEventListener('click', function(e) {
-      const groupId = e.target.getAttribute('data-group');
-      document
-        .querySelectorAll(`.nav-link[data-group=${groupId}]`)
-        .forEach(function(el) {
-          el.classList.remove('active');
-        });
-      document
-        .querySelectorAll(`.tab-pane[data-group=${groupId}]`)
-        .forEach(function(el) {
-          el.classList.remove('active');
-        });
-      e.target.classList.add('active');
-      document
-        .querySelector(`#${e.target.getAttribute('data-tab')}`)
-        .classList.add('active');
-    });
-  });
-});
diff --git a/js/scrollSpy.js b/js/scrollSpy.js
deleted file mode 100644
index 9d39a7c..0000000
--- a/js/scrollSpy.js
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * Copyright (c) 2017-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
-
-/* eslint-disable prefer-arrow-callback */
-(function scrollSpy() {
-  const OFFSET = 10;
-  let timer;
-  let headingsCache;
-  const findHeadings = function findHeadings() {
-    return headingsCache || document.querySelectorAll('.toc-headings > li > a');
-  };
-  const onScroll = function onScroll() {
-    if (timer) {
-      // throttle
-      return;
-    }
-    timer = setTimeout(function() {
-      timer = null;
-      let activeNavFound = false;
-      const headings = findHeadings(); // toc nav anchors
-      /**
-       * On every call, try to find header right after  <-- next header
-       * the one whose content is on the current screen <-- highlight this
-       */
-      for (let i = 0; i < headings.length; i++) {
-        // headings[i] is current element
-        // if an element is already active, then current element is not active
-        // if no element is already active, then current element is active
-        let currNavActive = !activeNavFound;
-        /**
-         * Enter the following check up only when an active nav header is not yet found
-         * Then, check the bounding rectangle of the next header
-         * The headers that are scrolled passed will have negative bounding rect top
-         * So the first one with positive bounding rect top will be the nearest next header
-         */
-        if (currNavActive && i < headings.length - 1) {
-          const next = headings[i + 1].href.split('#')[1];
-          const nextHeader = document.getElementById(next);
-          const top = nextHeader.getBoundingClientRect().top;
-          currNavActive = top > OFFSET;
-        }
-        /**
-         * Stop searching once a first such header is found,
-         * this makes sure the highlighted header is the most current one
-         */
-        if (currNavActive) {
-          activeNavFound = true;
-          headings[i].classList.add('active');
-        } else {
-          headings[i].classList.remove('active');
-        }
-      }
-    }, 100);
-  };
-  document.addEventListener('scroll', onScroll);
-  document.addEventListener('resize', onScroll);
-  document.addEventListener('DOMContentLoaded', function() {
-    // Cache the headings once the page has fully loaded.
-    headingsCache = findHeadings();
-    onScroll();
-  });
-})();
diff --git a/sitemap.xml b/sitemap.xml
deleted file mode 100644
index 95fef0c..0000000
--- a/sitemap.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:mobile="http://www.google.com/schemas/sitemap-mobile/1.0" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">
-<url> <loc>https://milagro.apache.org/help</loc> <changefreq>weekly</changefreq> <priority>0.5</priority> <xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/en/help" /> </url>
-<url> <loc>https://milagro.apache.org/index.js-old</loc> <changefreq>weekly</changefreq> <priority>0.5</priority> <xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/en/index.js-old" /> </url>
-<url> <loc>https://milagro.apache.org/users</loc> <changefreq>weekly</changefreq> <priority>0.5</priority> <xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/en/users" /> </url>
-<url> <loc>https://milagro.apache.org/blog/2019/06/10/miss-me</loc> <changefreq>weekly</changefreq> <priority>0.3</priority> </url>
-<url> <loc>https://milagro.apache.org/docs/amcl-c-api</loc> <changefreq>hourly</changefreq> <priority>1.0</priority> <xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/amcl-c-api" /> </url>
-<url> <loc>https://milagro.apache.org/docs/amcl-javascript-api</loc> <changefreq>hourly</changefreq> <priority>1.0</priority> <xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/amcl-javascript-api" /> </url>
-<url> <loc>https://milagro.apache.org/docs/amcl-overview</loc> <changefreq>hourly</changefreq> <priority>1.0</priority> <xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/amcl-overview" /> </url>
-<url> <loc>https://milagro.apache.org/docs/contributor-guide</loc> <changefreq>hourly</changefreq> <priority>1.0</priority> <xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/contributor-guide" /> </url>
-<url> <loc>https://milagro.apache.org/docs/d-ta-api</loc> <changefreq>hourly</changefreq> <priority>1.0</priority> <xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/d-ta-api" /> </url>
-<url> <loc>https://milagro.apache.org/docs/d-ta-overview</loc> <changefreq>hourly</changefreq> <priority>1.0</priority> <xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/d-ta-overview" /> </url>
-<url> <loc>https://milagro.apache.org/docs/doc2</loc> <changefreq>hourly</changefreq> <priority>1.0</priority> <xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/doc2" /> </url>
-<url> <loc>https://milagro.apache.org/docs/doc3</loc> <changefreq>hourly</changefreq> <priority>1.0</priority> <xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/doc3" /> </url>
-<url> <loc>https://milagro.apache.org/docs/milagro-crypto</loc> <changefreq>hourly</changefreq> <priority>1.0</priority> <xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/milagro-crypto" /> </url>
-<url> <loc>https://milagro.apache.org/docs/milagro-design</loc> <changefreq>hourly</changefreq> <priority>1.0</priority> <xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/milagro-design" /> </url>
-<url> <loc>https://milagro.apache.org/docs/milagro-intro</loc> <changefreq>hourly</changefreq> <priority>1.0</priority> <xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/milagro-intro" /> </url>
-<url> <loc>https://milagro.apache.org/docs/milagro-protocols</loc> <changefreq>hourly</changefreq> <priority>1.0</priority> <xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/milagro-protocols" /> </url>
-<url> <loc>https://milagro.apache.org/docs/zkp-mfa-api</loc> <changefreq>hourly</changefreq> <priority>1.0</priority> <xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/zkp-mfa-api" /> </url>
-<url> <loc>https://milagro.apache.org/docs/zkp-mfa-overview</loc> <changefreq>hourly</changefreq> <priority>1.0</priority> <xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/zkp-mfa-overview" /> </url>
-</urlset>
\ No newline at end of file
diff --git a/swagger/README.md b/swagger/README.md
deleted file mode 100644
index e69de29..0000000
diff --git a/swagger/favicon-16x16.png b/swagger/favicon-16x16.png
deleted file mode 100644
index 0afbcae..0000000
Binary files a/swagger/favicon-16x16.png and /dev/null differ
diff --git a/swagger/favicon-32x32.png b/swagger/favicon-32x32.png
deleted file mode 100644
index 249737f..0000000
Binary files a/swagger/favicon-32x32.png and /dev/null differ
diff --git a/swagger/index.html b/swagger/index.html
deleted file mode 100755
index 9a4cfb4..0000000
--- a/swagger/index.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<!-- HTML for static distribution bundle build -->
-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="UTF-8">
-    <title>Swagger UI</title>
-    <link rel="stylesheet" type="text/css" href="./swagger-ui.css" >
-    <link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32" />
-    <link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16" />
-    <style>
-      html
-      {
-        box-sizing: border-box;
-        overflow: -moz-scrollbars-vertical;
-        overflow-y: scroll;
-      }
-
-      *,
-      *:before,
-      *:after
-      {
-        box-sizing: inherit;
-      }
-
-      body
-      {
-        margin:0;
-        background: #fafafa;
-      }
-    </style>
-  </head>
-
-  <body>
-    <div id="swagger-ui"></div>
-
-    <script src="./swagger-ui-bundle.js"> </script>
-    <script src="./swagger-ui-standalone-preset.js"> </script>
-    <script>
-    window.onload = function() {
-      // Begin Swagger UI call region
-      const ui = SwaggerUIBundle({        
-        url: "https://raw.githubusercontent.com/apache/incubator-milagro-dta/master/open-api.yaml",
-        dom_id: '#swagger-ui',
-        deepLinking: true,
-        presets: [
-          SwaggerUIBundle.presets.apis,
-          SwaggerUIStandalonePreset
-        ],
-        plugins: [
-          SwaggerUIBundle.plugins.DownloadUrl
-        ],
-        layout: "StandaloneLayout"
-      })
-      // End Swagger UI call region
-
-      window.ui = ui
-    }
-  </script>
-  </body>
-</html>
diff --git a/swagger/oauth2-redirect.html b/swagger/oauth2-redirect.html
deleted file mode 100755
index fb68399..0000000
--- a/swagger/oauth2-redirect.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<!doctype html>
-<html lang="en-US">
-<body onload="run()">
-</body>
-</html>
-<script>
-    'use strict';
-    function run () {
-        var oauth2 = window.opener.swaggerUIRedirectOauth2;
-        var sentState = oauth2.state;
-        var redirectUrl = oauth2.redirectUrl;
-        var isValid, qp, arr;
-
-        if (/code|token|error/.test(window.location.hash)) {
-            qp = window.location.hash.substring(1);
-        } else {
-            qp = location.search.substring(1);
-        }
-
-        arr = qp.split("&")
-        arr.forEach(function (v,i,_arr) { _arr[i] = '"' + v.replace('=', '":"') + '"';})
-        qp = qp ? JSON.parse('{' + arr.join() + '}',
-                function (key, value) {
-                    return key === "" ? value : decodeURIComponent(value)
-                }
-        ) : {}
-
-        isValid = qp.state === sentState
-
-        if ((
-          oauth2.auth.schema.get("flow") === "accessCode"||
-          oauth2.auth.schema.get("flow") === "authorizationCode"
-        ) && !oauth2.auth.code) {
-            if (!isValid) {
-                oauth2.errCb({
-                    authId: oauth2.auth.name,
-                    source: "auth",
-                    level: "warning",
-                    message: "Authorization may be unsafe, passed state was changed in server Passed state wasn't returned from auth server"
-                });
-            }
-
-            if (qp.code) {
-                delete oauth2.state;
-                oauth2.auth.code = qp.code;
-                oauth2.callback({auth: oauth2.auth, redirectUrl: redirectUrl});
-            } else {
-                let oauthErrorMsg
-                if (qp.error) {
-                    oauthErrorMsg = "["+qp.error+"]: " +
-                        (qp.error_description ? qp.error_description+ ". " : "no accessCode received from the server. ") +
-                        (qp.error_uri ? "More info: "+qp.error_uri : "");
-                }
-
-                oauth2.errCb({
-                    authId: oauth2.auth.name,
-                    source: "auth",
-                    level: "error",
-                    message: oauthErrorMsg || "[Authorization failed]: no accessCode received from the server"
-                });
-            }
-        } else {
-            oauth2.callback({auth: oauth2.auth, token: qp, isValid: isValid, redirectUrl: redirectUrl});
-        }
-        window.close();
-    }
-</script>
diff --git a/swagger/swagger-ui-bundle.js b/swagger/swagger-ui-bundle.js
deleted file mode 100755
index 30e0b81..0000000
--- a/swagger/swagger-ui-bundle.js
+++ /dev/null
@@ -1,100 +0,0 @@
-!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.SwaggerUIBundle=t():e.SwaggerUIBundle=t()}("undefined"!=typeof self?self:this,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e, [...]
-/*
-object-assign
-(c) Sindre Sorhus
-@license MIT
-*/var r=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map(function(e){return t[e]}).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach(function(e){r[e]=e}),"abcdefghijkl [...]
-/*!
- * The buffer module from node.js, for the browser.
- *
- * @author   Feross Aboukhadijeh <fe...@feross.org> <http://feross.org>
- * @license  MIT
- */
-var r=n(528),o=n(529),i=n(262);function a(){return s.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function u(e,t){if(a()<t)throw new RangeError("Invalid typed array length");return s.TYPED_ARRAY_SUPPORT?(e=new Uint8Array(t)).__proto__=s.prototype:(null===e&&(e=new s(t)),e.length=t),e}function s(e,t,n){if(!(s.TYPED_ARRAY_SUPPORT||this instanceof s))return new s(e,t,n);if("number"==typeof e){if("string"==typeof t)throw new Error("If encoding is specified then the first argument must be a stri [...]
-/*!
-  Copyright (c) 2016 Jed Watson.
-  Licensed under the MIT License (MIT), see
-  http://jedwatson.github.io/classnames
-*/
-/*!
-  Copyright (c) 2016 Jed Watson.
-  Licensed under the MIT License (MIT), see
-  http://jedwatson.github.io/classnames
-*/
-!function(){"use strict";var n={}.hasOwnProperty;function o(){for(var e=[],t=0;t<arguments.length;t++){var r=arguments[t];if(r){var i=typeof r;if("string"===i||"number"===i)e.push(r);else if(Array.isArray(r))e.push(o.apply(null,r));else if("object"===i)for(var a in r)n.call(r,a)&&r[a]&&e.push(a)}}return e.join(" ")}void 0!==e&&e.exports?e.exports=o:void 0===(r=function(){return o}.apply(t,[]))||(e.exports=r)}()},function(e,t){e.exports=!0},function(e,t,n){var r=n(161),o=Math.min;e.export [...]
-/*!
- * @description Recursive object extending
- * @author Viacheslav Lotsmanov <lo...@gmail.com>
- * @license MIT
- *
- * The MIT License (MIT)
- *
- * Copyright (c) 2013-2018 Viacheslav Lotsmanov
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- * the Software, and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
- * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-function n(e){return e instanceof t||e instanceof Date||e instanceof RegExp}function r(e){if(e instanceof t){var n=t.alloc?t.alloc(e.length):new t(e.length);return e.copy(n),n}if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp)return new RegExp(e);throw new Error("Unexpected situation")}function o(e,t){return"__proto__"===t?void 0:e[t]}var i=e.exports=function(){if(arguments.length<1||"object"!=typeof arguments[0])return!1;if(arguments.length<2)return arguments[0];v [...]
-/**
- * Checks if an event is supported in the current execution environment.
- *
- * NOTE: This will not work correctly for non-generic events such as `change`,
- * `reset`, `load`, `error`, and `select`.
- *
- * Borrows from Modernizr.
- *
- * @param {string} eventNameSuffix Event name, e.g. "click".
- * @param {?boolean} capture Check if the capture phase is supported.
- * @return {boolean} True if the event is supported.
- * @internal
- * @license Modernizr 3.0.0pre (Custom Build) | MIT
- */,e.exports=function(e,t){if(!o.canUseDOM||t&&!("addEventListener"in document))return!1;var n="on"+e,i=n in document;if(!i){var a=document.createElement("div");a.setAttribute(n,"return;"),i="function"==typeof a[n]}return!i&&r&&"wheel"===e&&(i=document.implementation.hasFeature("Events.wheel","3.0")),i}},function(e,t,n){"use strict";var r={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function o(e){var t=this.nativeEvent;if(t.getModifierState)return t.getModifierState( [...]
-/*!
- * https://github.com/Starcounter-Jack/JSON-Patch
- * (c) 2017 Joachim Wester
- * MIT license
- */
-var n=this&&this.__extends||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);function r(){this.constructor=e}e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)},r=Object.prototype.hasOwnProperty;function o(e,t){return r.call(e,t)}function i(e){if(Array.isArray(e)){for(var t=new Array(e.length),n=0;n<t.length;n++)t[n]=""+n;return t}if(Object.keys)return Object.keys(e);t=[];for(var r in e)o(e,r)&&t.push(r);return t}function a(e){return-1===e.indexOf("/")&&-1 [...]
-/*!
- * https://github.com/Starcounter-Jack/JSON-Patch
- * (c) 2017 Joachim Wester
- * MIT license
- */
-var r=n(231),o=n(390),i=n(390);t.applyOperation=i.applyOperation,t.applyPatch=i.applyPatch,t.applyReducer=i.applyReducer,t.getValueByPointer=i.getValueByPointer,t.validate=i.validate,t.validator=i.validator;var a=n(231);t.JsonPatchError=a.PatchError,t.deepClone=a._deepClone,t.escapePathComponent=a.escapePathComponent,t.unescapePathComponent=a.unescapePathComponent;var u=new WeakMap,s=function(){return function(e){this.observers=new Map,this.obj=e}}(),l=function(){return function(e,t){thi [...]
-/*!
- * cookie
- * Copyright(c) 2012-2014 Roman Shtylman
- * Copyright(c) 2015 Douglas Christopher Wilson
- * MIT Licensed
- */t.parse=function(e,t){if("string"!=typeof e)throw new TypeError("argument str must be a string");for(var n={},o=t||{},a=e.split(i),s=o.decode||r,l=0;l<a.length;l++){var c=a[l],f=c.indexOf("=");if(!(f<0)){var p=c.substr(0,f).trim(),d=c.substr(++f,c.length).trim();'"'==d[0]&&(d=d.slice(1,-1)),void 0==n[p]&&(n[p]=u(d,s))}}return n},t.serialize=function(e,t,n){var r=n||{},i=r.encode||o;if("function"!=typeof i)throw new TypeError("option encode is invalid");if(!a.test(e))throw new TypeErro [...]
-/*!
- * repeat-string <https://github.com/jonschlinkert/repeat-string>
- *
- * Copyright (c) 2014-2015, Jon Schlinkert.
- * Licensed under the MIT License.
- */var r,o="";e.exports=function(e,t){if("string"!=typeof e)throw new TypeError("expected a string");if(1===t)return e;if(2===t)return e+e;var n=e.length*t;if(r!==e||void 0===r)r=e,o="";else if(o.length>=n)return o.substr(0,n);for(;n>o.length&&t>1;)1&t&&(o+=e),t>>=1,e+=e;return o=(o+=e).substr(0,n)}},function(e,t,n){var r=n(55);e.exports=function(e){return r(e).toLowerCase()}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=f(n(4)),o=f(n(2)),i=f(n(3)), [...]
-/*!
- * Autolinker.js
- * 0.15.3
- *
- * Copyright(c) 2015 Gregory Jacobs <gr...@greg-jacobs.com>
- * MIT Licensed. http://www.opensource.org/licenses/mit-license.php
- *
- * https://github.com/gregjacobs/Autolinker.js
- */
-var e,t,n,r,o=function(e){o.Util.assign(this,e)};return o.prototype={constructor:o,urls:!0,email:!0,twitter:!0,newWindow:!0,stripPrefix:!0,truncate:void 0,className:"",htmlParser:void 0,matchParser:void 0,tagBuilder:void 0,link:function(e){for(var t=this.getHtmlParser().parse(e),n=0,r=[],o=0,i=t.length;o<i;o++){var a=t[o],u=a.getType(),s=a.getText();if("element"===u)"a"===a.getTagName()&&(a.isClosing()?n=Math.max(n-1,0):n++),r.push(s);else if("entity"===u)r.push(s);else if(0===n){var l=t [...]
-//# sourceMappingURL=swagger-ui-bundle.js.map
\ No newline at end of file
diff --git a/swagger/swagger-ui-bundle.js.map b/swagger/swagger-ui-bundle.js.map
deleted file mode 100755
index 01fe314..0000000
--- a/swagger/swagger-ui-bundle.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 19203fb7b00b076abfac","webpack:///./node_modules/react/react.js","webpack:///./node_modules/prop-types/index.js","webpack:///./node_modules/babel-runtime/helpers/classCallCheck.js","webpack:///./node_modules/babel-runtime/helpers/createClass.js","webpack:///./node_modules/babel-runtime/core-js/object/get-prototype-of.js","webpack:///./node_modules/babel-runtime/helpers/possibleConstructor [...]
\ No newline at end of file
diff --git a/swagger/swagger-ui-standalone-preset.js b/swagger/swagger-ui-standalone-preset.js
deleted file mode 100755
index 1b0d640..0000000
--- a/swagger/swagger-ui-standalone-preset.js
+++ /dev/null
@@ -1,14 +0,0 @@
-!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.SwaggerUIStandalonePreset=e():t.SwaggerUIStandalonePreset=e()}("undefined"!=typeof self?self:this,function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Obje [...]
-/*
-object-assign
-(c) Sindre Sorhus
-@license MIT
-*/var r=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;t.exports=function(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de","5"===Object.getOwnPropertyNames(t)[0])return!1;for(var e={},n=0;n<10;n++)e["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(e).map(function(t){return e[t]}).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach(function(t){r[t]=t}),"abcdefghijkl [...]
-/*!
- * The buffer module from node.js, for the browser.
- *
- * @author   Feross Aboukhadijeh <fe...@feross.org> <http://feross.org>
- * @license  MIT
- */
-var r=n(325),i=n(326),o=n(167);function u(){return s.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function a(t,e){if(u()<e)throw new RangeError("Invalid typed array length");return s.TYPED_ARRAY_SUPPORT?(t=new Uint8Array(e)).__proto__=s.prototype:(null===t&&(t=new s(e)),t.length=e),t}function s(t,e,n){if(!(s.TYPED_ARRAY_SUPPORT||this instanceof s))return new s(t,e,n);if("number"==typeof t){if("string"==typeof e)throw new Error("If encoding is specified then the first argument must be a stri [...]
-//# sourceMappingURL=swagger-ui-standalone-preset.js.map
\ No newline at end of file
diff --git a/swagger/swagger-ui-standalone-preset.js.map b/swagger/swagger-ui-standalone-preset.js.map
deleted file mode 100755
index 2d57708..0000000
--- a/swagger/swagger-ui-standalone-preset.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 8cd1fb190fc7f82ae5fe","webpack:///./node_modules/@kyleshockey/js-yaml/lib/js-yaml/type.js","webpack:///./node_modules/core-js/modules/_wks.js","webpack:///./node_modules/core-js/library/modules/_core.js","webpack:///./node_modules/core-js/modules/_export.js","webpack:///./node_modules/core-js/modules/_string-html.js","webpack:///./node_modules/core-js/modules/_global.js","webpack:///./nod [...]
\ No newline at end of file
diff --git a/swagger/swagger-ui.css.map b/swagger/swagger-ui.css.map
deleted file mode 100755
index 3e2402c..0000000
--- a/swagger/swagger-ui.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":[],"names":[],"mappings":"","file":"swagger-ui.css","sourceRoot":""}
\ No newline at end of file
diff --git a/swagger/swagger-ui.js b/swagger/swagger-ui.js
deleted file mode 100755
index cd0a82b..0000000
--- a/swagger/swagger-ui.js
+++ /dev/null
@@ -1,9 +0,0 @@
-(function webpackUniversalModuleDefinition(root,factory){if(typeof exports==="object"&&typeof module==="object")module.exports=factory();else if(typeof define==="function"&&define.amd)define([],factory);else if(typeof exports==="object")exports["SwaggerUICore"]=factory();else root["SwaggerUICore"]=factory()})(typeof self!=="undefined"?self:this,function(){return function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId]){return installe [...]
-/*!
- * The buffer module from node.js, for the browser.
- *
- * @author   Feross Aboukhadijeh <fe...@feross.org> <http://feross.org>
- * @license  MIT
- */
-var base64=__webpack_require__(383);var ieee754=__webpack_require__(384);var isArray=__webpack_require__(385);exports.Buffer=Buffer;exports.SlowBuffer=SlowBuffer;exports.INSPECT_MAX_BYTES=50;Buffer.TYPED_ARRAY_SUPPORT=global.TYPED_ARRAY_SUPPORT!==undefined?global.TYPED_ARRAY_SUPPORT:typedArraySupport();exports.kMaxLength=kMaxLength();function typedArraySupport(){try{var arr=new Uint8Array(1);arr.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}};return arr.foo()===42&&t [...]
-//# sourceMappingURL=swagger-ui.js.map
\ No newline at end of file
diff --git a/swagger/swagger-ui.js.map b/swagger/swagger-ui.js.map
deleted file mode 100755
index 78b63d5..0000000
--- a/swagger/swagger-ui.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 6cb5c7f86a6d6e7d420d","webpack:///external \"react\"","webpack:///external \"prop-types\"","webpack:///./node_modules/babel-runtime/helpers/classCallCheck.js","webpack:///./node_modules/babel-runtime/helpers/createClass.js","webpack:///./node_modules/babel-runtime/core-js/object/get-prototype-of.js","webpack:///./node_modules/babel-runtime/helpers/possibleConstructorReturn.js","webpack:// [...]
\ No newline at end of file
diff --git a/users.html b/users.html
deleted file mode 100644
index 3d9e290..0000000
--- a/users.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang=""><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Milagro · Core security infrastructure for decentralized networks</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Core security infrastructure for decentralized networks"/><meta property="og:title" content="Apache Milagro · Core security infrastructure for decentralized netwo [...]
\ No newline at end of file
diff --git a/users/index.html b/users/index.html
deleted file mode 100644
index 3d9e290..0000000
--- a/users/index.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang=""><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Milagro · Core security infrastructure for decentralized networks</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Core security infrastructure for decentralized networks"/><meta property="og:title" content="Apache Milagro · Core security infrastructure for decentralized netwo [...]
\ No newline at end of file