aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--TODO.md16
-rw-r--r--public/404.html3
-rw-r--r--public/android-chrome-192x192.pngbin0 -> 26249 bytes
-rw-r--r--public/android-chrome-512x512.pngbin0 -> 80376 bytes
-rw-r--r--public/apple-touch-icon.pngbin0 -> 24023 bytes
-rw-r--r--public/block-docs/index.html126
-rw-r--r--public/elasticlunr.min.js10
-rw-r--r--public/favicon-16x16.pngbin0 -> 878 bytes
-rw-r--r--public/favicon-32x32.pngbin0 -> 2463 bytes
-rw-r--r--public/favicon.icobin0 -> 15406 bytes
-rw-r--r--public/gradecoin.pngbin0 -> 197656 bytes
-rw-r--r--public/index.html223
-rw-r--r--public/juice.css1
-rw-r--r--public/jwt/index.html126
-rw-r--r--public/normalize.css349
-rw-r--r--public/register-docs/index.html188
-rw-r--r--public/robots.txt3
-rw-r--r--public/search_index.en.js1
-rw-r--r--public/sitemap.xml18
-rw-r--r--public/transaction-docs/index.html126
-rw-r--r--site/config.toml1
-rw-r--r--site/content/JWT.md38
-rw-r--r--site/content/_index.md61
-rw-r--r--site/public/block-docs/index.html2
-rw-r--r--site/public/index.html134
-rw-r--r--site/public/jwt/index.html62
-rw-r--r--site/public/register-docs/index.html2
-rw-r--r--site/public/search_index.en.js2
-rw-r--r--site/public/transaction-docs/index.html2
-rw-r--r--site/templates/index.html33
30 files changed, 1470 insertions, 57 deletions
diff --git a/TODO.md b/TODO.md
index f57ae7c..0fba155 100644
--- a/TODO.md
+++ b/TODO.md
@@ -2,27 +2,27 @@
2 2
3## Office Hour/Recitation 3## Office Hour/Recitation
4- [ ] Should give a little pointers but not too much, I think at first this is going to seem hard to many students but it should become fairly easy after some little pointers 4- [ ] Should give a little pointers but not too much, I think at first this is going to seem hard to many students but it should become fairly easy after some little pointers
5
5## Docs 6## Docs
6- [ ] Make a better explanation of authorization schema 7- [ ] Make a better explanation of authorization schema
7- [ ] register: give the register message schema(passwd is missing) 8- [ ] register: give the register message schema(passwd is missing)
8- [ ] gradecoin: give narrative explanation
9- [ ] how to bank works 9- [ ] how to bank works
10- [ ] bank public key
11- [ ] how to start(possibly some pointers and links -- blockchain, rest, jwt, rsa, public key)
12- [ ] delete CONSTANTS
13- [ ] register should have AuthRequest in the explanation 10- [ ] register should have AuthRequest in the explanation
14- [ ] link all types in schema.rs to the docs, they need to understand why we have them 11- [ ] link all types in schema.rs to the docs, they need to understand why we have them
15- [ ] explain hash type(MD5 is missing in Claims) 12- [ ] explain hash type(MD5 is missing in Claims)
16- [ ] Initial auth request needs more explanation 13- [ ] Initial auth request needs more explanation
17- [ ] Explain JSON Wrapped 14- [ ] Explain JSON Wrapped
18- [ ] Give links to the functions, their docs are very good. For example, it seems impossible to understand authentication from the first page, but when you go to handlers::authenticate_user many things are clarified. 15- [ ] Give links to the functions, their docs are very good. For example, it seems impossible to understand authentication from the first page, but when you go to handlers::authenticate_user many things are clarified.
19- [ ] There is todo at handlers::authorized_propose_transaction, fix that
20- [ ] authorized_propose_transaction and authorized_propose_block may have more explanation as in the case of 16- [ ] authorized_propose_transaction and authorized_propose_block may have more explanation as in the case of
21 17- [x] how to start(possibly some pointers and links -- blockchain, rest, jwt, rsa, public key)
18- [x] There is todo at handlers::authorized_propose_transaction, fix that
19- [x] gradecoin: give narrative explanation
20- [x] bank public key
21- [X] delete CONSTANTS
22 22
23### Authorization 23### Authorization
24- [ ] Pointer to JWT 24- [x] Pointer to JWT
25- [ ] Pointer to Public Key Sign 25- [x] Pointer to Public Key Sign
26 26
27## Tests 27## Tests
28- [ ] User Authentication/Authentication Tests 28- [ ] User Authentication/Authentication Tests
diff --git a/public/404.html b/public/404.html
new file mode 100644
index 0000000..f8414f0
--- /dev/null
+++ b/public/404.html
@@ -0,0 +1,3 @@
1<!doctype html>
2<title>404 Not Found</title>
3<h1>404 Not Found</h1>
diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png
new file mode 100644
index 0000000..023ddbd
--- /dev/null
+++ b/public/android-chrome-192x192.png
Binary files differ
diff --git a/public/android-chrome-512x512.png b/public/android-chrome-512x512.png
new file mode 100644
index 0000000..4251933
--- /dev/null
+++ b/public/android-chrome-512x512.png
Binary files differ
diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png
new file mode 100644
index 0000000..cd8e4c8
--- /dev/null
+++ b/public/apple-touch-icon.png
Binary files differ
diff --git a/public/block-docs/index.html b/public/block-docs/index.html
new file mode 100644
index 0000000..8331952
--- /dev/null
+++ b/public/block-docs/index.html
@@ -0,0 +1,126 @@
1<!DOCTYPE html>
2<html lang="en">
3
4<head>
5 <meta charset="UTF-8">
6 <title>Blocks | </title>
7 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
8 <style>
9 :root {
10 /* Primary theme color */
11 --primary-color: #F8D12F;
12 /* Primary theme text color */
13 --primary-text-color: #1E2329;
14 /* Primary theme link color */
15 --primary-link-color: #2F57F7;
16 /* Secondary color: the background body color */
17 --secondary-color: #FAFAFA;
18 --secondary-text-color: #303030;
19 /* Highlight text color of table of content */
20 --toc-highlight-text-color: #d46e13;
21 }
22</style>
23
24 <link href="https://fonts.googleapis.com/css?family=Alfa+Slab+One&display=swap" rel="stylesheet">
25 <link href="https://fonts.googleapis.com/css?family=Fira+Sans:400,500,600&display=swap" rel="stylesheet">
26 <link rel="stylesheet" href="/normalize.css">
27 <link rel="stylesheet" href="http:&#x2F;&#x2F;localhost:8080&#x2F;juice.css">
28
29
30</head>
31
32<body>
33
34<header class="box-shadow">
35
36
37<a href="http:&#x2F;&#x2F;localhost:8080&#x2F;">
38 <div class="logo">
39 <img src="http:&#x2F;&#x2F;localhost:8080&#x2F;gradecoin.png" alt="logo">
40 Gradecoin
41 </div>
42</a>
43
44<nav>
45
46 <a class="nav-item subtitle-text" href="http:&#x2F;&#x2F;localhost:8080&#x2F;block-docs&#x2F;">Blocks</a>
47
48 <a class="nav-item subtitle-text" href="http:&#x2F;&#x2F;localhost:8080&#x2F;transaction-docs&#x2F;">Transactions</a>
49
50 <a class="nav-item subtitle-text" href="http:&#x2F;&#x2F;localhost:8080&#x2F;register-docs&#x2F;">Register</a>
51
52 <a class="nav-item subtitle-text" href="http:&#x2F;&#x2F;localhost:8080&#x2F;jwt&#x2F;">JWT</a>
53
54
55
56 <a class="nav-item subtitle-text" href="https:&#x2F;&#x2F;github.com&#x2F;zhuowei&#x2F;nft_ptr#why">why?</a>
57
58
59</nav>
60
61</header>
62
63
64 <main>
65
66
67
68
69
70 <div class="content text">
71
72<div class="heading-text">Block Documentation</div>
73<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
74tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At
75vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd
76ubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>
77
78
79 </div>
80
81
82
83 </main>
84
85
86<footer>
87
88</footer>
89
90</body>
91<script>
92 function highlightNav(heading) {
93 let pathname = location.pathname;
94 document.querySelectorAll(".toc a").forEach((item) => {
95 item.classList.remove("active");
96 });
97 document.querySelector(".toc a[href$='" + pathname + "#" + heading + "']").classList.add("active");
98 }
99
100 let currentHeading = "";
101 window.onscroll = function () {
102 let h = document.querySelectorAll("h1,h2,h3,h4,h5,h6");
103 let elementArr = [];
104
105 h.forEach(item => {
106 if (item.id !== "") {
107 elementArr[item.id] = item.getBoundingClientRect().top;
108 }
109 });
110 elementArr.sort();
111 for (let key in elementArr) {
112 if (!elementArr.hasOwnProperty(key)) {
113 continue;
114 }
115 if (elementArr[key] > 0 && elementArr[key] < 300) {
116 if (currentHeading !== key) {
117 highlightNav(key);
118 currentHeading = key;
119 }
120 break;
121 }
122 }
123 }
124</script>
125
126</html>
diff --git a/public/elasticlunr.min.js b/public/elasticlunr.min.js
new file mode 100644
index 0000000..79dad65
--- /dev/null
+++ b/public/elasticlunr.min.js
@@ -0,0 +1,10 @@
1/**
2 * elasticlunr - http://weixsong.github.io
3 * Lightweight full-text search engine in Javascript for browser search and offline search. - 0.9.6
4 *
5 * Copyright (C) 2017 Oliver Nightingale
6 * Copyright (C) 2017 Wei Song
7 * MIT Licensed
8 * @license
9 */
10!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),t.utils.toString=function(e){return void 0===e||null===e?"":e.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop(),n=e;if("function"!=typeof t)throw new TypeError("last argument must be a function");n.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},t.EventEmitter.prototype.removeListener=function(e,t){if(this.hasHandler(e)){var n=this.events[e].indexOf(t);-1!==n&&(this.events[e].splice(n,1),0==this.events[e].length&&delete this.events[e])}},t.EventEmitter.prototype.emit=function(e){if(this.hasHandler(e)){var t=Array.prototype.slice.call(arguments,1);this.events[e].forEach(function(e){e.apply(void 0,t)},this)}},t.EventEmitter.prototype.hasHandler=function(e){return e in this.events},t.tokenizer=function(e){if(!arguments.length||null===e||void 0===e)return[];if(Array.isArray(e)){var n=e.filter(function(e){return null===e||void 0===e?!1:!0});n=n.map(function(e){return t.utils.toString(e).toLowerCase()});var i=[];return n.forEach(function(e){var n=e.split(t.tokenizer.seperator);i=i.concat(n)},this),i}return e.toString().trim().toLowerCase().split(t.tokenizer.seperator)},t.tokenizer.defaultSeperator=/[\s\-]+/,t.tokenizer.seperator=t.tokenizer.defaultSeperator,t.tokenizer.setSeperator=function(e){null!==e&&void 0!==e&&"object"==typeof e&&(t.tokenizer.seperator=e)},t.tokenizer.resetSeperator=function(){t.tokenizer.seperator=t.tokenizer.defaultSeperator},t.tokenizer.getSeperator=function(){return t.tokenizer.seperator},t.Pipeline=function(){this._queue=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in t.Pipeline.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[n]=e},t.Pipeline.getRegisteredFunction=function(e){return e in t.Pipeline.registeredFunctions!=!0?null:t.Pipeline.registeredFunctions[e]},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.getRegisteredFunction(e);if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i+1,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i,0,n)},t.Pipeline.prototype.remove=function(e){var t=this._queue.indexOf(e);-1!==t&&this._queue.splice(t,1)},t.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,i=this._queue.length,o=0;n>o;o++){for(var r=e[o],s=0;i>s&&(r=this._queue[s](r,o,e),void 0!==r&&null!==r);s++);void 0!==r&&null!==r&&t.push(r)}return t},t.Pipeline.prototype.reset=function(){this._queue=[]},t.Pipeline.prototype.get=function(){return this._queue},t.Pipeline.prototype.toJSON=function(){return this._queue.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.DocumentStore,this.index={},this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},t.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;n._fields=e.fields,n._ref=e.ref,n.documentStore=t.DocumentStore.load(e.documentStore),n.pipeline=t.Pipeline.load(e.pipeline),n.index={};for(var i in e.index)n.index[i]=t.InvertedIndex.load(e.index[i]);return n},t.Index.prototype.addField=function(e){return this._fields.push(e),this.index[e]=new t.InvertedIndex,this},t.Index.prototype.setRef=function(e){return this._ref=e,this},t.Index.prototype.saveDocument=function(e){return this.documentStore=new t.DocumentStore(e),this},t.Index.prototype.addDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.addDoc(i,e),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));this.documentStore.addFieldLength(i,n,o.length);var r={};o.forEach(function(e){e in r?r[e]+=1:r[e]=1},this);for(var s in r){var u=r[s];u=Math.sqrt(u),this.index[n].addToken(s,{ref:i,tf:u})}},this),n&&this.eventEmitter.emit("add",e,this)}},t.Index.prototype.removeDocByRef=function(e){if(e&&this.documentStore.isDocStored()!==!1&&this.documentStore.hasDoc(e)){var t=this.documentStore.getDoc(e);this.removeDoc(t,!1)}},t.Index.prototype.removeDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.hasDoc(i)&&(this.documentStore.removeDoc(i),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));o.forEach(function(e){this.index[n].removeToken(e,i)},this)},this),n&&this.eventEmitter.emit("remove",e,this))}},t.Index.prototype.updateDoc=function(e,t){var t=void 0===t?!0:t;this.removeDocByRef(e[this._ref],!1),this.addDoc(e,!1),t&&this.eventEmitter.emit("update",e,this)},t.Index.prototype.idf=function(e,t){var n="@"+t+"/"+e;if(Object.prototype.hasOwnProperty.call(this._idfCache,n))return this._idfCache[n];var i=this.index[t].getDocFreq(e),o=1+Math.log(this.documentStore.length/(i+1));return this._idfCache[n]=o,o},t.Index.prototype.getFields=function(){return this._fields.slice()},t.Index.prototype.search=function(e,n){if(!e)return[];e="string"==typeof e?{any:e}:JSON.parse(JSON.stringify(e));var i=null;null!=n&&(i=JSON.stringify(n));for(var o=new t.Configuration(i,this.getFields()).get(),r={},s=Object.keys(e),u=0;u<s.length;u++){var a=s[u];r[a]=this.pipeline.run(t.tokenizer(e[a]))}var l={};for(var c in o){var d=r[c]||r.any;if(d){var f=this.fieldSearch(d,c,o),h=o[c].boost;for(var p in f)f[p]=f[p]*h;for(var p in f)p in l?l[p]+=f[p]:l[p]=f[p]}}var v,g=[];for(var p in l)v={ref:p,score:l[p]},this.documentStore.hasDoc(p)&&(v.doc=this.documentStore.getDoc(p)),g.push(v);return g.sort(function(e,t){return t.score-e.score}),g},t.Index.prototype.fieldSearch=function(e,t,n){var i=n[t].bool,o=n[t].expand,r=n[t].boost,s=null,u={};return 0!==r?(e.forEach(function(e){var n=[e];1==o&&(n=this.index[t].expandToken(e));var r={};n.forEach(function(n){var o=this.index[t].getDocs(n),a=this.idf(n,t);if(s&&"AND"==i){var l={};for(var c in s)c in o&&(l[c]=o[c]);o=l}n==e&&this.fieldSearchStats(u,n,o);for(var c in o){var d=this.index[t].getTermFrequency(n,c),f=this.documentStore.getFieldLength(c,t),h=1;0!=f&&(h=1/Math.sqrt(f));var p=1;n!=e&&(p=.15*(1-(n.length-e.length)/n.length));var v=d*a*h*p;c in r?r[c]+=v:r[c]=v}},this),s=this.mergeScores(s,r,i)},this),s=this.coordNorm(s,u,e.length)):void 0},t.Index.prototype.mergeScores=function(e,t,n){if(!e)return t;if("AND"==n){var i={};for(var o in t)o in e&&(i[o]=e[o]+t[o]);return i}for(var o in t)o in e?e[o]+=t[o]:e[o]=t[o];return e},t.Index.prototype.fieldSearchStats=function(e,t,n){for(var i in n)i in e?e[i].push(t):e[i]=[t]},t.Index.prototype.coordNorm=function(e,t,n){for(var i in e)if(i in t){var o=t[i].length;e[i]=e[i]*o/n}return e},t.Index.prototype.toJSON=function(){var e={};return this._fields.forEach(function(t){e[t]=this.index[t].toJSON()},this),{version:t.version,fields:this._fields,ref:this._ref,documentStore:this.documentStore.toJSON(),index:e,pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},t.DocumentStore=function(e){this._save=null===e||void 0===e?!0:e,this.docs={},this.docInfo={},this.length=0},t.DocumentStore.load=function(e){var t=new this;return t.length=e.length,t.docs=e.docs,t.docInfo=e.docInfo,t._save=e.save,t},t.DocumentStore.prototype.isDocStored=function(){return this._save},t.DocumentStore.prototype.addDoc=function(t,n){this.hasDoc(t)||this.length++,this.docs[t]=this._save===!0?e(n):null},t.DocumentStore.prototype.getDoc=function(e){return this.hasDoc(e)===!1?null:this.docs[e]},t.DocumentStore.prototype.hasDoc=function(e){return e in this.docs},t.DocumentStore.prototype.removeDoc=function(e){this.hasDoc(e)&&(delete this.docs[e],delete this.docInfo[e],this.length--)},t.DocumentStore.prototype.addFieldLength=function(e,t,n){null!==e&&void 0!==e&&0!=this.hasDoc(e)&&(this.docInfo[e]||(this.docInfo[e]={}),this.docInfo[e][t]=n)},t.DocumentStore.prototype.updateFieldLength=function(e,t,n){null!==e&&void 0!==e&&0!=this.hasDoc(e)&&this.addFieldLength(e,t,n)},t.DocumentStore.prototype.getFieldLength=function(e,t){return null===e||void 0===e?0:e in this.docs&&t in this.docInfo[e]?this.docInfo[e][t]:0},t.DocumentStore.prototype.toJSON=function(){return{docs:this.docs,docInfo:this.docInfo,length:this.length,save:this._save}},t.stemmer=function(){var e={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},t={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",i="[aeiouy]",o=n+"[^aeiouy]*",r=i+"[aeiou]*",s="^("+o+")?"+r+o,u="^("+o+")?"+r+o+"("+r+")?$",a="^("+o+")?"+r+o+r+o,l="^("+o+")?"+i,c=new RegExp(s),d=new RegExp(a),f=new RegExp(u),h=new RegExp(l),p=/^(.+?)(ss|i)es$/,v=/^(.+?)([^s])s$/,g=/^(.+?)eed$/,m=/^(.+?)(ed|ing)$/,y=/.$/,S=/(at|bl|iz)$/,x=new RegExp("([^aeiouylsz])\\1$"),w=new RegExp("^"+o+i+"[^aeiouwxy]$"),I=/^(.+?[^aeiou])y$/,b=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,E=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,D=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,F=/^(.+?)(s|t)(ion)$/,_=/^(.+?)e$/,P=/ll$/,k=new RegExp("^"+o+i+"[^aeiouwxy]$"),z=function(n){var i,o,r,s,u,a,l;if(n.length<3)return n;if(r=n.substr(0,1),"y"==r&&(n=r.toUpperCase()+n.substr(1)),s=p,u=v,s.test(n)?n=n.replace(s,"$1$2"):u.test(n)&&(n=n.replace(u,"$1$2")),s=g,u=m,s.test(n)){var z=s.exec(n);s=c,s.test(z[1])&&(s=y,n=n.replace(s,""))}else if(u.test(n)){var z=u.exec(n);i=z[1],u=h,u.test(i)&&(n=i,u=S,a=x,l=w,u.test(n)?n+="e":a.test(n)?(s=y,n=n.replace(s,"")):l.test(n)&&(n+="e"))}if(s=I,s.test(n)){var z=s.exec(n);i=z[1],n=i+"i"}if(s=b,s.test(n)){var z=s.exec(n);i=z[1],o=z[2],s=c,s.test(i)&&(n=i+e[o])}if(s=E,s.test(n)){var z=s.exec(n);i=z[1],o=z[2],s=c,s.test(i)&&(n=i+t[o])}if(s=D,u=F,s.test(n)){var z=s.exec(n);i=z[1],s=d,s.test(i)&&(n=i)}else if(u.test(n)){var z=u.exec(n);i=z[1]+z[2],u=d,u.test(i)&&(n=i)}if(s=_,s.test(n)){var z=s.exec(n);i=z[1],s=d,u=f,a=k,(s.test(i)||u.test(i)&&!a.test(i))&&(n=i)}return s=P,u=d,s.test(n)&&u.test(n)&&(s=y,n=n.replace(s,"")),"y"==r&&(n=r.toLowerCase()+n.substr(1)),n};return z}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),t.stopWordFilter=function(e){return e&&t.stopWordFilter.stopWords[e]!==!0?e:void 0},t.clearStopWords=function(){t.stopWordFilter.stopWords={}},t.addStopWords=function(e){null!=e&&Array.isArray(e)!==!1&&e.forEach(function(e){t.stopWordFilter.stopWords[e]=!0},this)},t.resetStopWords=function(){t.stopWordFilter.stopWords=t.defaultStopWords},t.defaultStopWords={"":!0,a:!0,able:!0,about:!0,across:!0,after:!0,all:!0,almost:!0,also:!0,am:!0,among:!0,an:!0,and:!0,any:!0,are:!0,as:!0,at:!0,be:!0,because:!0,been:!0,but:!0,by:!0,can:!0,cannot:!0,could:!0,dear:!0,did:!0,"do":!0,does:!0,either:!0,"else":!0,ever:!0,every:!0,"for":!0,from:!0,get:!0,got:!0,had:!0,has:!0,have:!0,he:!0,her:!0,hers:!0,him:!0,his:!0,how:!0,however:!0,i:!0,"if":!0,"in":!0,into:!0,is:!0,it:!0,its:!0,just:!0,least:!0,let:!0,like:!0,likely:!0,may:!0,me:!0,might:!0,most:!0,must:!0,my:!0,neither:!0,no:!0,nor:!0,not:!0,of:!0,off:!0,often:!0,on:!0,only:!0,or:!0,other:!0,our:!0,own:!0,rather:!0,said:!0,say:!0,says:!0,she:!0,should:!0,since:!0,so:!0,some:!0,than:!0,that:!0,the:!0,their:!0,them:!0,then:!0,there:!0,these:!0,they:!0,"this":!0,tis:!0,to:!0,too:!0,twas:!0,us:!0,wants:!0,was:!0,we:!0,were:!0,what:!0,when:!0,where:!0,which:!0,"while":!0,who:!0,whom:!0,why:!0,will:!0,"with":!0,would:!0,yet:!0,you:!0,your:!0},t.stopWordFilter.stopWords=t.defaultStopWords,t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),t.trimmer=function(e){if(null===e||void 0===e)throw new Error("token should not be undefined");return e.replace(/^\W+/,"").replace(/\W+$/,"")},t.Pipeline.registerFunction(t.trimmer,"trimmer"),t.InvertedIndex=function(){this.root={docs:{},df:0}},t.InvertedIndex.load=function(e){var t=new this;return t.root=e.root,t},t.InvertedIndex.prototype.addToken=function(e,t,n){for(var n=n||this.root,i=0;i<=e.length-1;){var o=e[i];o in n||(n[o]={docs:{},df:0}),i+=1,n=n[o]}var r=t.ref;n.docs[r]?n.docs[r]={tf:t.tf}:(n.docs[r]={tf:t.tf},n.df+=1)},t.InvertedIndex.prototype.hasToken=function(e){if(!e)return!1;for(var t=this.root,n=0;n<e.length;n++){if(!t[e[n]])return!1;t=t[e[n]]}return!0},t.InvertedIndex.prototype.getNode=function(e){if(!e)return null;for(var t=this.root,n=0;n<e.length;n++){if(!t[e[n]])return null;t=t[e[n]]}return t},t.InvertedIndex.prototype.getDocs=function(e){var t=this.getNode(e);return null==t?{}:t.docs},t.InvertedIndex.prototype.getTermFrequency=function(e,t){var n=this.getNode(e);return null==n?0:t in n.docs?n.docs[t].tf:0},t.InvertedIndex.prototype.getDocFreq=function(e){var t=this.getNode(e);return null==t?0:t.df},t.InvertedIndex.prototype.removeToken=function(e,t){if(e){var n=this.getNode(e);null!=n&&t in n.docs&&(delete n.docs[t],n.df-=1)}},t.InvertedIndex.prototype.expandToken=function(e,t,n){if(null==e||""==e)return[];var t=t||[];if(void 0==n&&(n=this.getNode(e),null==n))return t;n.df>0&&t.push(e);for(var i in n)"docs"!==i&&"df"!==i&&this.expandToken(e+i,t,n[i]);return t},t.InvertedIndex.prototype.toJSON=function(){return{root:this.root}},t.Configuration=function(e,n){var e=e||"";if(void 0==n||null==n)throw new Error("fields should not be null");this.config={};var i;try{i=JSON.parse(e),this.buildUserConfig(i,n)}catch(o){t.utils.warn("user configuration parse failed, will use default configuration"),this.buildDefaultConfig(n)}},t.Configuration.prototype.buildDefaultConfig=function(e){this.reset(),e.forEach(function(e){this.config[e]={boost:1,bool:"OR",expand:!1}},this)},t.Configuration.prototype.buildUserConfig=function(e,n){var i="OR",o=!1;if(this.reset(),"bool"in e&&(i=e.bool||i),"expand"in e&&(o=e.expand||o),"fields"in e)for(var r in e.fields)if(n.indexOf(r)>-1){var s=e.fields[r],u=o;void 0!=s.expand&&(u=s.expand),this.config[r]={boost:s.boost||0===s.boost?s.boost:1,bool:s.bool||i,expand:u}}else t.utils.warn("field name in user configuration not found in index instance fields");else this.addAllFields2UserConfig(i,o,n)},t.Configuration.prototype.addAllFields2UserConfig=function(e,t,n){n.forEach(function(n){this.config[n]={boost:1,bool:e,expand:t}},this)},t.Configuration.prototype.get=function(){return this.config},t.Configuration.prototype.reset=function(){this.config={}},lunr.SortedSet=function(){this.length=0,this.elements=[]},lunr.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},lunr.SortedSet.prototype.add=function(){var e,t;for(e=0;e<arguments.length;e++)t=arguments[e],~this.indexOf(t)||this.elements.splice(this.locationFor(t),0,t);this.length=this.elements.length},lunr.SortedSet.prototype.toArray=function(){return this.elements.slice()},lunr.SortedSet.prototype.map=function(e,t){return this.elements.map(e,t)},lunr.SortedSet.prototype.forEach=function(e,t){return this.elements.forEach(e,t)},lunr.SortedSet.prototype.indexOf=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;){if(r===e)return o;e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o]}return r===e?o:-1},lunr.SortedSet.prototype.locationFor=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;)e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o];return r>e?o:e>r?o+1:void 0},lunr.SortedSet.prototype.intersect=function(e){for(var t=new lunr.SortedSet,n=0,i=0,o=this.length,r=e.length,s=this.elements,u=e.elements;;){if(n>o-1||i>r-1)break;s[n]!==u[i]?s[n]<u[i]?n++:s[n]>u[i]&&i++:(t.add(s[n]),n++,i++)}return t},lunr.SortedSet.prototype.clone=function(){var e=new lunr.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},lunr.SortedSet.prototype.union=function(e){var t,n,i;this.length>=e.length?(t=this,n=e):(t=e,n=this),i=t.clone();for(var o=0,r=n.toArray();o<r.length;o++)i.add(r[o]);return i},lunr.SortedSet.prototype.toJSON=function(){return this.toArray()},function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():e.elasticlunr=t()}(this,function(){return t})}();
diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png
new file mode 100644
index 0000000..bd63d34
--- /dev/null
+++ b/public/favicon-16x16.png
Binary files differ
diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png
new file mode 100644
index 0000000..e343587
--- /dev/null
+++ b/public/favicon-32x32.png
Binary files differ
diff --git a/public/favicon.ico b/public/favicon.ico
new file mode 100644
index 0000000..45d8bfe
--- /dev/null
+++ b/public/favicon.ico
Binary files differ
diff --git a/public/gradecoin.png b/public/gradecoin.png
new file mode 100644
index 0000000..eeb670c
--- /dev/null
+++ b/public/gradecoin.png
Binary files differ
diff --git a/public/index.html b/public/index.html
new file mode 100644
index 0000000..0177355
--- /dev/null
+++ b/public/index.html
@@ -0,0 +1,223 @@
1<!DOCTYPE html>
2<html lang="en">
3
4<head>
5 <meta charset="UTF-8">
6 <title></title>
7 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
8 <style>
9 :root {
10 /* Primary theme color */
11 --primary-color: #F8D12F;
12 /* Primary theme text color */
13 --primary-text-color: #1E2329;
14 /* Primary theme link color */
15 --primary-link-color: #2F57F7;
16 /* Secondary color: the background body color */
17 --secondary-color: #FAFAFA;
18 --secondary-text-color: #303030;
19 /* Highlight text color of table of content */
20 --toc-highlight-text-color: #d46e13;
21 }
22</style>
23
24 <link href="https://fonts.googleapis.com/css?family=Alfa+Slab+One&display=swap" rel="stylesheet">
25 <link href="https://fonts.googleapis.com/css?family=Fira+Sans:400,500,600&display=swap" rel="stylesheet">
26 <link rel="stylesheet" href="/normalize.css">
27 <link rel="stylesheet" href="http:&#x2F;&#x2F;localhost:8080&#x2F;juice.css">
28
29
30</head>
31
32<body>
33
34
35 <header class="pos-absolute" style="background-color: transparent">
36
37
38<a href="http:&#x2F;&#x2F;localhost:8080&#x2F;">
39 <div class="logo">
40 <img src="http:&#x2F;&#x2F;localhost:8080&#x2F;gradecoin.png" alt="logo">
41 Gradecoin
42 </div>
43</a>
44
45<nav>
46
47 <a class="nav-item subtitle-text" href="http:&#x2F;&#x2F;localhost:8080&#x2F;block-docs&#x2F;">Blocks</a>
48
49 <a class="nav-item subtitle-text" href="http:&#x2F;&#x2F;localhost:8080&#x2F;transaction-docs&#x2F;">Transactions</a>
50
51 <a class="nav-item subtitle-text" href="http:&#x2F;&#x2F;localhost:8080&#x2F;register-docs&#x2F;">Register</a>
52
53 <a class="nav-item subtitle-text" href="http:&#x2F;&#x2F;localhost:8080&#x2F;jwt&#x2F;">JWT</a>
54
55
56
57 <a class="nav-item subtitle-text" href="https:&#x2F;&#x2F;github.com&#x2F;zhuowei&#x2F;nft_ptr#why">why?</a>
58
59
60</nav>
61
62 </header>
63
64 <div class="hero">
65
66<section class="text-center">
67 <h1 class="heading-text" style="font-size: 50px">
68 Mine your own grades
69 </h1>
70 <h3 class="title-text">
71 <b style="color: deepskyblue">Gradecoin</b> is the latest cutting edge blockchain technology agile grading framework that drives organic engagement and other buzzwords, with big data mining search engine optimization
72 </h3>
73 <div>
74 <!-- <a class="github-button" href="https://github.com/huhu/juice" data-size="large" data-show-count="true" -->
75 <!-- aria-label="Star huhu/juice on GitHub">Star</a> -->
76 <!-- <a class="github-button" href="https://github.com/huhu/juice/fork" data-size="large" -->
77 <!-- data-show-count="true" aria-label="Fork huhu/juice on GitHub">Fork</a> -->
78 </div>
79</section>
80<img class="hero-image" style="width: 50%" src="http:&#x2F;&#x2F;localhost:8080&#x2F;gradecoin.png">
81
82<div class="explore-more text"
83 onclick="document.getElementById('features').scrollIntoView({behavior: 'smooth'})">
84 ⇩ Learn How ⇩
85</div>
86<style>
87.hero section {
88 padding: 0 5rem;
89}
90 @media screen and (max-width: 768px) {
91 .hero section {
92 padding: 0 2rem;
93 }
94
95 .hero-image {
96 display: none
97 }
98 }
99</style>
100
101 </div>
102
103
104
105 <main>
106
107
108
109
110
111 <div class="toc">
112 <div class="toc-sticky">
113
114 <div class="toc-item">
115 <a class="subtext" href="http://localhost:8080/#services">Services</a>
116 </div>
117
118
119 <div class="toc-item-child">
120 <a class="subtext" href="http://localhost:8080/#register"><small>- &#x2F;register</small></a>
121 </div>
122
123 <div class="toc-item-child">
124 <a class="subtext" href="http://localhost:8080/#transaction"><small>- &#x2F;transaction</small></a>
125 </div>
126
127 <div class="toc-item-child">
128 <a class="subtext" href="http://localhost:8080/#block"><small>- &#x2F;block</small></a>
129 </div>
130
131
132
133 </div>
134 </div>
135
136
137
138 <div class="content text">
139
140 <div id="features" class="heading-text">Overview</div>
141 <ul>
142<li>Don't know where to start? Gradecoin uses RESTful API, simple <code>curl</code> commands or even your browser will work! <a href="https://curl.trillworks.com/">This website can help as well</a>.</li>
143<li><a href="https://jwt.io">JWT Debugger</a> and the corresponding <a href="https://tools.ietf.org/html/rfc7519">RFC</a></li>
144</ul>
145<h1 id="services">Services</h1>
146<h2 id="register">/register</h2>
147<ul>
148<li>Student creates their own 2048 bit RSA <code>keypair</code></li>
149<li>Downloads <code>Gradecoin</code>'s Public Key from <a href="https://odtuclass.metu.edu.tr/my/">Moodle</a></li>
150<li>Encrypts their JSON wrapped <code>Public Key</code>, <code>Student ID</code> and one time <code>passwd</code> using Gradecoin's Public Key</li>
151<li>Their public key is now in our database and can be used to sign their JWT's during requests</li>
152</ul>
153<h2 id="transaction">/transaction</h2>
154<ul>
155<li>You can offer a <a href="/transaction">Transaction</a> - POST request
156<ul>
157<li>The request should have <code>Authorization</code></li>
158<li>The request header should be signed by the Public Key of the <code>by</code> field in the transaction</li>
159</ul>
160</li>
161<li>fetch the list of <code>Transaction</code>s - GET request</li>
162</ul>
163<h2 id="block">/block</h2>
164<ul>
165<li>offer a [<code>schema::Block</code>] - POST request
166<ul>
167<li>The request should have <code>Authorization</code></li>
168<li>The [<code>schema::Block::transaction_list</code>] of the block should be a subset of [<code>schema::Db::pending_transactions</code>]</li>
169</ul>
170</li>
171<li>fetch the last accepted [<code>schema::Block</code>] - GET request</li>
172</ul>
173<p><code>Authorization</code>: The request header should have Bearer JWT.Token signed with Student Public Key</p>
174
175
176 </div>
177
178
179
180 </main>
181
182
183<footer>
184
185</footer>
186
187</body>
188<script>
189 function highlightNav(heading) {
190 let pathname = location.pathname;
191 document.querySelectorAll(".toc a").forEach((item) => {
192 item.classList.remove("active");
193 });
194 document.querySelector(".toc a[href$='" + pathname + "#" + heading + "']").classList.add("active");
195 }
196
197 let currentHeading = "";
198 window.onscroll = function () {
199 let h = document.querySelectorAll("h1,h2,h3,h4,h5,h6");
200 let elementArr = [];
201
202 h.forEach(item => {
203 if (item.id !== "") {
204 elementArr[item.id] = item.getBoundingClientRect().top;
205 }
206 });
207 elementArr.sort();
208 for (let key in elementArr) {
209 if (!elementArr.hasOwnProperty(key)) {
210 continue;
211 }
212 if (elementArr[key] > 0 && elementArr[key] < 300) {
213 if (currentHeading !== key) {
214 highlightNav(key);
215 currentHeading = key;
216 }
217 break;
218 }
219 }
220 }
221</script>
222
223</html>
diff --git a/public/juice.css b/public/juice.css
new file mode 100644
index 0000000..219f864
--- /dev/null
+++ b/public/juice.css
@@ -0,0 +1 @@
.text-center{text-align:center}.pos-absolute{right:0;left:0;position:absolute}.box-shadow{box-shadow:0 2px 10px 2px #ddd}.heading-text{font-family:"Fira Sans", sans-serif;font-size:32px;font-weight:600;padding:10px 0 25px 0;color:var(--primary-text-color)}h1,.title-text{font-family:"Fira Sans", sans-serif;font-size:25px;font-weight:500;color:var(--primary-text-color);border-left:var(--primary-color) 8px solid;padding-left:10px}h2,.subtitle-text{font-family:"Fira Sans", sans-serif;font-size:20px;font-weight:500;color:var(--primary-text-color)}.text{font-family:"Fira Sans", sans-serif;font-size:18px;font-weight:400;line-height:26px;letter-spacing:0.2px;color:var(--primary-text-color)}.subtext{font-family:"Fira Sans", sans-serif;font-size:16px;font-weight:400;letter-spacing:0.1px}.content{padding:0 40px;display:flex;flex-direction:column;justify-content:center;overflow-x:auto}.content pre{overflow-x:auto;padding:1.25em 1.5em;white-space:pre;word-wrap:normal;background-color:white;color:#4a4a4a;font-size:.875em;font-family:monospace}.content code{background-color:white;color:#4a4a4a;font-size:.875em;font-weight:normal;padding:0.25em 0.5em;font-family:monospace}.content pre code{padding:0}.content a{color:var(--primary-link-color)}.content a:hover{text-decoration:underline}.content blockquote{border-left:#e2dede 8px solid;margin:0;background-color:#f2f1f0;padding:0 20px}body{padding:0;margin:0;box-sizing:border-box;background-color:var(--secondary-color)}a{text-decoration:none}ul{margin-top:0.5rem}ul>li{padding:0.3rem 0}p>img{width:100%;height:auto}header{background-color:var(--primary-color);color:black;padding:20px 50px;display:flex;align-items:center;justify-content:space-between}.logo{font-family:"Alfa Slab One", serif;font-size:32px;color:var(--primary-text-color);display:flex;align-items:center;margin:0 40px}.logo img{width:60px;margin:0 25px}.nav-item{margin:0 10px;text-decoration:none;font-size:18px;font-weight:bold}.nav-item:hover{color:#000;text-decoration:underline}.hero{display:flex;align-items:center;justify-content:space-evenly;height:100vh;background-color:var(--primary-color);overflow-x:hidden;padding:0 40px}.hero .explore-more{position:absolute;bottom:20px;cursor:pointer}main{display:flex;padding:50px 100px}main .toc{max-width:260px;min-width:240px}main .toc-item{padding:10px 20px;color:#424242}main .toc-item a,main .toc-item-child a{color:var(--secondary-text-color)}main .toc-item a:hover,main .toc-item-child a:hover{cursor:pointer;text-decoration:underline}main .toc-item a.active,main .toc-item-child a.active{color:var(--toc-highlight-text-color)}main .toc-item-child{padding:0 30px 5px;color:#424242}.toc-sticky{border-radius:3px;border-top:5px solid var(--primary-color);background-color:white;position:sticky;position:-webkit-sticky;position:-moz-sticky;position:-ms-sticky;position:-o-sticky;top:10px;padding:10px 0}footer{padding:50px;display:flex;flex-direction:column;justify-content:center;align-items:center;background-color:#202020;color:#fcfcfc}footer a{color:#fcfcfc;text-decoration:underline}@media screen and (min-width: 1280px){.content{max-width:60%;min-width:800px}}@media screen and (max-width: 768px){header{padding:10px 30px;flex-direction:column;align-items:center;justify-content:center}.logo{font-size:28px;margin:10px}.logo img{width:45px;margin:0 10px 0 0}.nav-item{margin:0 5px;font-size:14px}.hero{padding:40px 30px}main{padding:30px}.content{padding:0}.explore-more,.toc{display:none}}
diff --git a/public/jwt/index.html b/public/jwt/index.html
new file mode 100644
index 0000000..899aada
--- /dev/null
+++ b/public/jwt/index.html
@@ -0,0 +1,126 @@
1<!DOCTYPE html>
2<html lang="en">
3
4<head>
5 <meta charset="UTF-8">
6 <title>JWT | </title>
7 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
8 <style>
9 :root {
10 /* Primary theme color */
11 --primary-color: #F8D12F;
12 /* Primary theme text color */
13 --primary-text-color: #1E2329;
14 /* Primary theme link color */
15 --primary-link-color: #2F57F7;
16 /* Secondary color: the background body color */
17 --secondary-color: #FAFAFA;
18 --secondary-text-color: #303030;
19 /* Highlight text color of table of content */
20 --toc-highlight-text-color: #d46e13;
21 }
22</style>
23
24 <link href="https://fonts.googleapis.com/css?family=Alfa+Slab+One&display=swap" rel="stylesheet">
25 <link href="https://fonts.googleapis.com/css?family=Fira+Sans:400,500,600&display=swap" rel="stylesheet">
26 <link rel="stylesheet" href="/normalize.css">
27 <link rel="stylesheet" href="http:&#x2F;&#x2F;localhost:8080&#x2F;juice.css">
28
29
30</head>
31
32<body>
33
34<header class="box-shadow">
35
36
37<a href="http:&#x2F;&#x2F;localhost:8080&#x2F;">
38 <div class="logo">
39 <img src="http:&#x2F;&#x2F;localhost:8080&#x2F;gradecoin.png" alt="logo">
40 Gradecoin
41 </div>
42</a>
43
44<nav>
45
46 <a class="nav-item subtitle-text" href="http:&#x2F;&#x2F;localhost:8080&#x2F;block-docs&#x2F;">Blocks</a>
47
48 <a class="nav-item subtitle-text" href="http:&#x2F;&#x2F;localhost:8080&#x2F;transaction-docs&#x2F;">Transactions</a>
49
50 <a class="nav-item subtitle-text" href="http:&#x2F;&#x2F;localhost:8080&#x2F;register-docs&#x2F;">Register</a>
51
52 <a class="nav-item subtitle-text" href="http:&#x2F;&#x2F;localhost:8080&#x2F;jwt&#x2F;">JWT</a>
53
54
55
56 <a class="nav-item subtitle-text" href="https:&#x2F;&#x2F;github.com&#x2F;zhuowei&#x2F;nft_ptr#why">why?</a>
57
58
59</nav>
60
61</header>
62
63
64 <main>
65
66
67
68
69
70 <div class="content text">
71
72<div class="heading-text">JSON Web Token Documentation</div>
73<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
74tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At
75vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd
76ubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>
77
78
79 </div>
80
81
82
83 </main>
84
85
86<footer>
87
88</footer>
89
90</body>
91<script>
92 function highlightNav(heading) {
93 let pathname = location.pathname;
94 document.querySelectorAll(".toc a").forEach((item) => {
95 item.classList.remove("active");
96 });
97 document.querySelector(".toc a[href$='" + pathname + "#" + heading + "']").classList.add("active");
98 }
99
100 let currentHeading = "";
101 window.onscroll = function () {
102 let h = document.querySelectorAll("h1,h2,h3,h4,h5,h6");
103 let elementArr = [];
104
105 h.forEach(item => {
106 if (item.id !== "") {
107 elementArr[item.id] = item.getBoundingClientRect().top;
108 }
109 });
110 elementArr.sort();
111 for (let key in elementArr) {
112 if (!elementArr.hasOwnProperty(key)) {
113 continue;
114 }
115 if (elementArr[key] > 0 && elementArr[key] < 300) {
116 if (currentHeading !== key) {
117 highlightNav(key);
118 currentHeading = key;
119 }
120 break;
121 }
122 }
123 }
124</script>
125
126</html>
diff --git a/public/normalize.css b/public/normalize.css
new file mode 100644
index 0000000..192eb9c
--- /dev/null
+++ b/public/normalize.css
@@ -0,0 +1,349 @@
1/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
2
3/* Document
4 ========================================================================== */
5
6/**
7 * 1. Correct the line height in all browsers.
8 * 2. Prevent adjustments of font size after orientation changes in iOS.
9 */
10
11html {
12 line-height: 1.15; /* 1 */
13 -webkit-text-size-adjust: 100%; /* 2 */
14}
15
16/* Sections
17 ========================================================================== */
18
19/**
20 * Remove the margin in all browsers.
21 */
22
23body {
24 margin: 0;
25}
26
27/**
28 * Render the `main` element consistently in IE.
29 */
30
31main {
32 display: block;
33}
34
35/**
36 * Correct the font size and margin on `h1` elements within `section` and
37 * `article` contexts in Chrome, Firefox, and Safari.
38 */
39
40h1 {
41 font-size: 2em;
42 margin: 0.67em 0;
43}
44
45/* Grouping content
46 ========================================================================== */
47
48/**
49 * 1. Add the correct box sizing in Firefox.
50 * 2. Show the overflow in Edge and IE.
51 */
52
53hr {
54 box-sizing: content-box; /* 1 */
55 height: 0; /* 1 */
56 overflow: visible; /* 2 */
57}
58
59/**
60 * 1. Correct the inheritance and scaling of font size in all browsers.
61 * 2. Correct the odd `em` font sizing in all browsers.
62 */
63
64pre {
65 font-family: monospace, monospace; /* 1 */
66 font-size: 1em; /* 2 */
67}
68
69/* Text-level semantics
70 ========================================================================== */
71
72/**
73 * Remove the gray background on active links in IE 10.
74 */
75
76a {
77 background-color: transparent;
78}
79
80/**
81 * 1. Remove the bottom border in Chrome 57-
82 * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
83 */
84
85abbr[title] {
86 border-bottom: none; /* 1 */
87 text-decoration: underline; /* 2 */
88 text-decoration: underline dotted; /* 2 */
89}
90
91/**
92 * Add the correct font weight in Chrome, Edge, and Safari.
93 */
94
95b,
96strong {
97 font-weight: bolder;
98}
99
100/**
101 * 1. Correct the inheritance and scaling of font size in all browsers.
102 * 2. Correct the odd `em` font sizing in all browsers.
103 */
104
105code,
106kbd,
107samp {
108 font-family: monospace, monospace; /* 1 */
109 font-size: 1em; /* 2 */
110}
111
112/**
113 * Add the correct font size in all browsers.
114 */
115
116small {
117 font-size: 80%;
118}
119
120/**
121 * Prevent `sub` and `sup` elements from affecting the line height in
122 * all browsers.
123 */
124
125sub,
126sup {
127 font-size: 75%;
128 line-height: 0;
129 position: relative;
130 vertical-align: baseline;
131}
132
133sub {
134 bottom: -0.25em;
135}
136
137sup {
138 top: -0.5em;
139}
140
141/* Embedded content
142 ========================================================================== */
143
144/**
145 * Remove the border on images inside links in IE 10.
146 */
147
148img {
149 border-style: none;
150}
151
152/* Forms
153 ========================================================================== */
154
155/**
156 * 1. Change the font styles in all browsers.
157 * 2. Remove the margin in Firefox and Safari.
158 */
159
160button,
161input,
162optgroup,
163select,
164textarea {
165 font-family: inherit; /* 1 */
166 font-size: 100%; /* 1 */
167 line-height: 1.15; /* 1 */
168 margin: 0; /* 2 */
169}
170
171/**
172 * Show the overflow in IE.
173 * 1. Show the overflow in Edge.
174 */
175
176button,
177input { /* 1 */
178 overflow: visible;
179}
180
181/**
182 * Remove the inheritance of text transform in Edge, Firefox, and IE.
183 * 1. Remove the inheritance of text transform in Firefox.
184 */
185
186button,
187select { /* 1 */
188 text-transform: none;
189}
190
191/**
192 * Correct the inability to style clickable types in iOS and Safari.
193 */
194
195button,
196[type="button"],
197[type="reset"],
198[type="submit"] {
199 -webkit-appearance: button;
200}
201
202/**
203 * Remove the inner border and padding in Firefox.
204 */
205
206button::-moz-focus-inner,
207[type="button"]::-moz-focus-inner,
208[type="reset"]::-moz-focus-inner,
209[type="submit"]::-moz-focus-inner {
210 border-style: none;
211 padding: 0;
212}
213
214/**
215 * Restore the focus styles unset by the previous rule.
216 */
217
218button:-moz-focusring,
219[type="button"]:-moz-focusring,
220[type="reset"]:-moz-focusring,
221[type="submit"]:-moz-focusring {
222 outline: 1px dotted ButtonText;
223}
224
225/**
226 * Correct the padding in Firefox.
227 */
228
229fieldset {
230 padding: 0.35em 0.75em 0.625em;
231}
232
233/**
234 * 1. Correct the text wrapping in Edge and IE.
235 * 2. Correct the color inheritance from `fieldset` elements in IE.
236 * 3. Remove the padding so developers are not caught out when they zero out
237 * `fieldset` elements in all browsers.
238 */
239
240legend {
241 box-sizing: border-box; /* 1 */
242 color: inherit; /* 2 */
243 display: table; /* 1 */
244 max-width: 100%; /* 1 */
245 padding: 0; /* 3 */
246 white-space: normal; /* 1 */
247}
248
249/**
250 * Add the correct vertical alignment in Chrome, Firefox, and Opera.
251 */
252
253progress {
254 vertical-align: baseline;
255}
256
257/**
258 * Remove the default vertical scrollbar in IE 10+.
259 */
260
261textarea {
262 overflow: auto;
263}
264
265/**
266 * 1. Add the correct box sizing in IE 10.
267 * 2. Remove the padding in IE 10.
268 */
269
270[type="checkbox"],
271[type="radio"] {
272 box-sizing: border-box; /* 1 */
273 padding: 0; /* 2 */
274}
275
276/**
277 * Correct the cursor style of increment and decrement buttons in Chrome.
278 */
279
280[type="number"]::-webkit-inner-spin-button,
281[type="number"]::-webkit-outer-spin-button {
282 height: auto;
283}
284
285/**
286 * 1. Correct the odd appearance in Chrome and Safari.
287 * 2. Correct the outline style in Safari.
288 */
289
290[type="search"] {
291 -webkit-appearance: textfield; /* 1 */
292 outline-offset: -2px; /* 2 */
293}
294
295/**
296 * Remove the inner padding in Chrome and Safari on macOS.
297 */
298
299[type="search"]::-webkit-search-decoration {
300 -webkit-appearance: none;
301}
302
303/**
304 * 1. Correct the inability to style clickable types in iOS and Safari.
305 * 2. Change font properties to `inherit` in Safari.
306 */
307
308::-webkit-file-upload-button {
309 -webkit-appearance: button; /* 1 */
310 font: inherit; /* 2 */
311}
312
313/* Interactive
314 ========================================================================== */
315
316/*
317 * Add the correct display in Edge, IE 10+, and Firefox.
318 */
319
320details {
321 display: block;
322}
323
324/*
325 * Add the correct display in all browsers.
326 */
327
328summary {
329 display: list-item;
330}
331
332/* Misc
333 ========================================================================== */
334
335/**
336 * Add the correct display in IE 10+.
337 */
338
339template {
340 display: none;
341}
342
343/**
344 * Add the correct display in IE 10.
345 */
346
347[hidden] {
348 display: none;
349}
diff --git a/public/register-docs/index.html b/public/register-docs/index.html
new file mode 100644
index 0000000..10a4d56
--- /dev/null
+++ b/public/register-docs/index.html
@@ -0,0 +1,188 @@
1<!DOCTYPE html>
2<html lang="en">
3
4<head>
5 <meta charset="UTF-8">
6 <title>Register | </title>
7 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
8 <style>
9 :root {
10 /* Primary theme color */
11 --primary-color: #F8D12F;
12 /* Primary theme text color */
13 --primary-text-color: #1E2329;
14 /* Primary theme link color */
15 --primary-link-color: #2F57F7;
16 /* Secondary color: the background body color */
17 --secondary-color: #FAFAFA;
18 --secondary-text-color: #303030;
19 /* Highlight text color of table of content */
20 --toc-highlight-text-color: #d46e13;
21 }
22</style>
23
24 <link href="https://fonts.googleapis.com/css?family=Alfa+Slab+One&display=swap" rel="stylesheet">
25 <link href="https://fonts.googleapis.com/css?family=Fira+Sans:400,500,600&display=swap" rel="stylesheet">
26 <link rel="stylesheet" href="/normalize.css">
27 <link rel="stylesheet" href="http:&#x2F;&#x2F;localhost:8080&#x2F;juice.css">
28
29
30</head>
31
32<body>
33
34<header class="box-shadow">
35
36
37<a href="http:&#x2F;&#x2F;localhost:8080&#x2F;">
38 <div class="logo">
39 <img src="http:&#x2F;&#x2F;localhost:8080&#x2F;gradecoin.png" alt="logo">
40 Gradecoin
41 </div>
42</a>
43
44<nav>
45
46 <a class="nav-item subtitle-text" href="http:&#x2F;&#x2F;localhost:8080&#x2F;block-docs&#x2F;">Blocks</a>
47
48 <a class="nav-item subtitle-text" href="http:&#x2F;&#x2F;localhost:8080&#x2F;transaction-docs&#x2F;">Transactions</a>
49
50 <a class="nav-item subtitle-text" href="http:&#x2F;&#x2F;localhost:8080&#x2F;register-docs&#x2F;">Register</a>
51
52 <a class="nav-item subtitle-text" href="http:&#x2F;&#x2F;localhost:8080&#x2F;jwt&#x2F;">JWT</a>
53
54
55
56 <a class="nav-item subtitle-text" href="https:&#x2F;&#x2F;github.com&#x2F;zhuowei&#x2F;nft_ptr#why">why?</a>
57
58
59</nav>
60
61</header>
62
63
64 <main>
65
66
67
68
69
70 <div class="toc">
71 <div class="toc-sticky">
72
73 <div class="toc-item">
74 <a class="subtext" href="http://localhost:8080/register-docs/#authentication-process">Authentication Process</a>
75 </div>
76
77
78 <div class="toc-item-child">
79 <a class="subtext" href="http://localhost:8080/register-docs/#gradecoin-side"><small>- Gradecoin Side</small></a>
80 </div>
81
82
83
84 </div>
85 </div>
86
87
88
89 <div class="content text">
90
91<div class="heading-text">Register Documentation</div>
92<p>POST request to /register endpoint
93Lets a [<code>User</code>] (=student) to authenticate themselves to the system
94This <code>request</code> can be rejected if the payload is malformed (=not authenticated properly) or if
95the [<code>AuthRequest.user_id</code>] of the <code>request</code> is not in the list of users that can hold a Gradecoin account</p>
96<h1 id="authentication-process">Authentication Process</h1>
97<ul>
98<li>
99<p>Gradecoin's Public Key (<code>gradecoin_public_key</code>) is listed on moodle.</p>
100</li>
101<li>
102<p>Gradecoin's Private Key (<code>gradecoin_private_key</code>) is loaded here</p>
103</li>
104<li>
105<p>Student picks a short temporary key (<code>k_temp</code>)</p>
106</li>
107<li>
108<p>Creates a JSON object (<code>auth_plaintext</code>) with their <code>metu_id</code> and <code>public key</code> in base64 (PEM) format (<code>S_PK</code>):
109{
110student_id: &quot;e12345&quot;,
111passwd: &quot;15 char secret&quot;
112public_key: &quot;---BEGIN PUBLIC KEY...&quot;
113}</p>
114</li>
115<li>
116<p>Encrypts the serialized string of <code>auth_plaintext</code> with 128 bit block AES in CBC mode with Pkcs7 padding using the temporary key (<code>k_temp</code>), the result is <code>auth_ciphertext</code> TODO should this be base64'd?</p>
117</li>
118<li>
119<p>The temporary key student has picked <code>k_temp</code> is encrypted using RSA with OAEP padding scheme
120using sha256 with <code>gradecoin_public_key</code> (TODO base64? same as above), giving us <code>key_ciphertext</code></p>
121</li>
122<li>
123<p>The payload JSON object (<code>auth_request</code>) can be JSON serialized now:
124{
125c: &quot;auth_ciphertext&quot;
126key: &quot;key_ciphertext&quot;
127}</p>
128</li>
129</ul>
130<h2 id="gradecoin-side">Gradecoin Side</h2>
131<ul>
132<li>Upon receiving, we first RSA decrypt with OAEP padding scheme using SHA256 with <code>gradecoin_private_key</code> as the key and auth_request.key <code>key</code> as the ciphertext, receiving <code>temp_key</code> (this is the temporary key chosen by stu</li>
133<li>With <code>temp_key</code>, we can AES 128 Cbc Pkcs7 decrypt the <code>auth_request.c</code>, giving us
134auth_plaintext</li>
135<li>The <code>auth_plaintext</code> String can be deserialized to [<code>AuthRequest</code>]</li>
136<li>We then verify the payload and calculate the User fingerprint</li>
137<li>Finally, create the new [<code>User</code>] object, insert to users HashMap <code>&lt;fingerprint, User&gt;</code></li>
138</ul>
139
140
141 </div>
142
143
144
145 </main>
146
147
148<footer>
149
150</footer>
151
152</body>
153<script>
154 function highlightNav(heading) {
155 let pathname = location.pathname;
156 document.querySelectorAll(".toc a").forEach((item) => {
157 item.classList.remove("active");
158 });
159 document.querySelector(".toc a[href$='" + pathname + "#" + heading + "']").classList.add("active");
160 }
161
162 let currentHeading = "";
163 window.onscroll = function () {
164 let h = document.querySelectorAll("h1,h2,h3,h4,h5,h6");
165 let elementArr = [];
166
167 h.forEach(item => {
168 if (item.id !== "") {
169 elementArr[item.id] = item.getBoundingClientRect().top;
170 }
171 });
172 elementArr.sort();
173 for (let key in elementArr) {
174 if (!elementArr.hasOwnProperty(key)) {
175 continue;
176 }
177 if (elementArr[key] > 0 && elementArr[key] < 300) {
178 if (currentHeading !== key) {
179 highlightNav(key);
180 currentHeading = key;
181 }
182 break;
183 }
184 }
185 }
186</script>
187
188</html>
diff --git a/public/robots.txt b/public/robots.txt
new file mode 100644
index 0000000..c100df9
--- /dev/null
+++ b/public/robots.txt
@@ -0,0 +1,3 @@
1User-agent: *
2Allow: /
3Sitemap: http://localhost:8080/sitemap.xml
diff --git a/public/search_index.en.js b/public/search_index.en.js
new file mode 100644
index 0000000..03cbfea
--- /dev/null
+++ b/public/search_index.en.js
@@ -0,0 +1 @@
window.searchIndex = {"fields":["title","body"],"pipeline":["trimmer","stopWordFilter","stemmer"],"ref":"id","version":"0.9.5","index":{"body":{"root":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"8":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}},"5":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}},"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,"8":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}}}}},"e":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"y":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}}}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.4142135623730951},"http://localhost:8080/jwt/":{"tf":1.4142135623730951},"http://localhost:8080/transaction-docs/":{"tf":1.4142135623730951}},"df":3}}},"p":{"docs":{},"df":0,"i":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":2.0}},"df":1}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"c":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}}}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.7320508075688772}},"df":1}}},"o":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/":{"tf":1.7320508075688772}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1,"'":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.0}},"df":2}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951},"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.0}},"df":3}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}}},"c":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}},"b":{"docs":{},"df":0,"c":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}}},"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}}}}}}},"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":2}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"g":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.4142135623730951},"http://localhost:8080/jwt/":{"tf":1.4142135623730951},"http://localhost:8080/transaction-docs/":{"tf":1.4142135623730951}},"df":3}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/block-docs/":{"tf":2.0},"http://localhost:8080/jwt/":{"tf":2.0},"http://localhost:8080/transaction-docs/":{"tf":2.0}},"df":3}}},"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"w":{"docs":{},"df":0,"n":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}}},"u":{"docs":{},"df":0,"o":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3},"r":{"docs":{},"df":0,"e":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{},"df":0,"5":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}},"a":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3},"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":2}}}}},"d":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}}},"o":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}},"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}},"t":{"docs":{"http://localhost:8080/block-docs/":{"tf":2.0},"http://localhost:8080/jwt/":{"tf":2.0},"http://localhost:8080/transaction-docs/":{"tf":2.0}},"df":3},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951}},"df":1}}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}}}}},"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951},"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":2,"'":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951},"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":2},"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951}},"df":1}}}},"l":{"docs":{},"df":0,"p":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1},"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}}}}}},"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.4142135623730951},"http://localhost:8080/jwt/":{"tf":1.4142135623730951},"http://localhost:8080/transaction-docs/":{"tf":1.4142135623730951}},"df":3}}}}},"j":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.7320508075688772}},"df":2}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}}},"w":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0}},"df":2,"'":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1},".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}}}}},"k":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.7320508075688772}},"df":1}}}}},"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}},"e":{"docs":{},"df":0,"y":{"docs":{"http://localhost:8080/":{"tf":2.449489742783178},"http://localhost:8080/register-docs/":{"tf":3.3166247903554}},"df":2,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}},"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":2}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.4142135623730951},"http://localhost:8080/jwt/":{"tf":1.4142135623730951},"http://localhost:8080/transaction-docs/":{"tf":1.4142135623730951}},"df":3}}}},"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}},"l":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.0}},"df":2}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}}},"w":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}},"b":{"docs":{},"df":0,"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.7320508075688772}},"df":1}}}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951}},"df":1}}}},"n":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.7320508075688772}},"df":1},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"w":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.0}},"df":2}}}},"y":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.7320508075688772}},"df":1}}}}}},"e":{"docs":{},"df":0,"m":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}},"k":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"7":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951},"http://localhost:8080/register-docs/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"http://localhost:8080/":{"tf":2.449489742783178},"http://localhost:8080/register-docs/":{"tf":1.7320508075688772}},"df":2,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":2}}}},"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":3.0},"http://localhost:8080/register-docs/":{"tf":1.7320508075688772}},"df":2}}}}},"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}},"f":{"docs":{},"df":0,"c":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"a":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":2}}},"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"k":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}},"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}}}},"m":{"docs":{},"df":0,"e":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}}}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951}},"df":1,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"b":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}}}},"e":{"docs":{},"df":0,"a":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3},"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}},"d":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.4142135623730951},"http://localhost:8080/jwt/":{"tf":1.4142135623730951},"http://localhost:8080/transaction-docs/":{"tf":1.4142135623730951}},"df":3},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}},"g":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/":{"tf":1.7320508075688772}},"df":1}},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"t":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.4142135623730951},"http://localhost:8080/jwt/":{"tf":1.4142135623730951},"http://localhost:8080/transaction-docs/":{"tf":1.4142135623730951}},"df":3}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}}},"u":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.7320508075688772},"http://localhost:8080/register-docs/":{"tf":1.7320508075688772}},"df":2,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}},"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}}}}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}}},"o":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"http://localhost:8080/register-docs/":{"tf":2.0}},"df":1}}}}}}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":2.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":2}}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}}}}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}},"s":{"docs":{"http://localhost:8080/":{"tf":1.7320508075688772},"http://localhost:8080/register-docs/":{"tf":2.0}},"df":2,"e":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/register-docs/":{"tf":2.23606797749979}},"df":1,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}},"o":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}}}}}}},"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"l":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}},"title":{"root":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0}},"df":1}}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}}}}},"j":{"docs":{},"df":0,"w":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/jwt/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":1}}}}}}}}}}},"documentStore":{"save":true,"docs":{"http://localhost:8080/":{"body":"\nDon't know where to start? Gradecoin uses RESTful API, simple curl commands or even your browser will work! This website can help as well.\nJWT Debugger and the corresponding RFC\n\nServices\n/register\n\nStudent creates their own 2048 bit RSA keypair\nDownloads Gradecoin's Public Key from Moodle\nEncrypts their JSON wrapped Public Key, Student ID and one time passwd using Gradecoin's Public Key\nTheir public key is now in our database and can be used to sign their JWT's during requests\n\n/transaction\n\nYou can offer a Transaction - POST request\n\nThe request should have Authorization\nThe request header should be signed by the Public Key of the by field in the transaction\n\n\nfetch the list of Transactions - GET request\n\n/block\n\noffer a [schema::Block] - POST request\n\nThe request should have Authorization\nThe [schema::Block::transaction_list] of the block should be a subset of [schema::Db::pending_transactions]\n\n\nfetch the last accepted [schema::Block] - GET request\n\nAuthorization: The request header should have Bearer JWT.Token signed with Student Public Key\n","id":"http://localhost:8080/","title":"Gradecoin"},"http://localhost:8080/block-docs/":{"body":"Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod\ntempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At\nvero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd\nubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.\n","id":"http://localhost:8080/block-docs/","title":"Blocks"},"http://localhost:8080/jwt/":{"body":"Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod\ntempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At\nvero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd\nubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.\n","id":"http://localhost:8080/jwt/","title":"JWT"},"http://localhost:8080/register-docs/":{"body":"POST request to /register endpoint\nLets a [User] (=student) to authenticate themselves to the system\nThis request can be rejected if the payload is malformed (=not authenticated properly) or if\nthe [AuthRequest.user_id] of the request is not in the list of users that can hold a Gradecoin account\nAuthentication Process\n\n\nGradecoin's Public Key (gradecoin_public_key) is listed on moodle.\n\n\nGradecoin's Private Key (gradecoin_private_key) is loaded here\n\n\nStudent picks a short temporary key (k_temp)\n\n\nCreates a JSON object (auth_plaintext) with their metu_id and public key in base64 (PEM) format (S_PK):\n{\nstudent_id: \"e12345\",\npasswd: \"15 char secret\"\npublic_key: \"---BEGIN PUBLIC KEY...\"\n}\n\n\nEncrypts the serialized string of auth_plaintext with 128 bit block AES in CBC mode with Pkcs7 padding using the temporary key (k_temp), the result is auth_ciphertext TODO should this be base64'd?\n\n\nThe temporary key student has picked k_temp is encrypted using RSA with OAEP padding scheme\nusing sha256 with gradecoin_public_key (TODO base64? same as above), giving us key_ciphertext\n\n\nThe payload JSON object (auth_request) can be JSON serialized now:\n{\nc: \"auth_ciphertext\"\nkey: \"key_ciphertext\"\n}\n\n\nGradecoin Side\n\nUpon receiving, we first RSA decrypt with OAEP padding scheme using SHA256 with gradecoin_private_key as the key and auth_request.key key as the ciphertext, receiving temp_key (this is the temporary key chosen by stu\nWith temp_key, we can AES 128 Cbc Pkcs7 decrypt the auth_request.c, giving us\nauth_plaintext\nThe auth_plaintext String can be deserialized to [AuthRequest]\nWe then verify the payload and calculate the User fingerprint\nFinally, create the new [User] object, insert to users HashMap &lt;fingerprint, User&gt;\n\n","id":"http://localhost:8080/register-docs/","title":"Register"},"http://localhost:8080/transaction-docs/":{"body":"Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod\ntempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At\nvero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd\nubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.\n","id":"http://localhost:8080/transaction-docs/","title":"Transactions"}},"docInfo":{"http://localhost:8080/":{"body":99,"title":1},"http://localhost:8080/block-docs/":{"body":48,"title":1},"http://localhost:8080/jwt/":{"body":48,"title":1},"http://localhost:8080/register-docs/":{"body":166,"title":1},"http://localhost:8080/transaction-docs/":{"body":48,"title":1}},"length":5},"lang":"English"}; \ No newline at end of file
diff --git a/public/sitemap.xml b/public/sitemap.xml
new file mode 100644
index 0000000..db9224f
--- /dev/null
+++ b/public/sitemap.xml
@@ -0,0 +1,18 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
3 <url>
4 <loc>http://localhost:8080/</loc>
5 </url>
6 <url>
7 <loc>http://localhost:8080/block-docs/</loc>
8 </url>
9 <url>
10 <loc>http://localhost:8080/jwt/</loc>
11 </url>
12 <url>
13 <loc>http://localhost:8080/register-docs/</loc>
14 </url>
15 <url>
16 <loc>http://localhost:8080/transaction-docs/</loc>
17 </url>
18</urlset>
diff --git a/public/transaction-docs/index.html b/public/transaction-docs/index.html
new file mode 100644
index 0000000..8c35895
--- /dev/null
+++ b/public/transaction-docs/index.html
@@ -0,0 +1,126 @@
1<!DOCTYPE html>
2<html lang="en">
3
4<head>
5 <meta charset="UTF-8">
6 <title>Transactions | </title>
7 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
8 <style>
9 :root {
10 /* Primary theme color */
11 --primary-color: #F8D12F;
12 /* Primary theme text color */
13 --primary-text-color: #1E2329;
14 /* Primary theme link color */
15 --primary-link-color: #2F57F7;
16 /* Secondary color: the background body color */
17 --secondary-color: #FAFAFA;
18 --secondary-text-color: #303030;
19 /* Highlight text color of table of content */
20 --toc-highlight-text-color: #d46e13;
21 }
22</style>
23
24 <link href="https://fonts.googleapis.com/css?family=Alfa+Slab+One&display=swap" rel="stylesheet">
25 <link href="https://fonts.googleapis.com/css?family=Fira+Sans:400,500,600&display=swap" rel="stylesheet">
26 <link rel="stylesheet" href="/normalize.css">
27 <link rel="stylesheet" href="http:&#x2F;&#x2F;localhost:8080&#x2F;juice.css">
28
29
30</head>
31
32<body>
33
34<header class="box-shadow">
35
36
37<a href="http:&#x2F;&#x2F;localhost:8080&#x2F;">
38 <div class="logo">
39 <img src="http:&#x2F;&#x2F;localhost:8080&#x2F;gradecoin.png" alt="logo">
40 Gradecoin
41 </div>
42</a>
43
44<nav>
45
46 <a class="nav-item subtitle-text" href="http:&#x2F;&#x2F;localhost:8080&#x2F;block-docs&#x2F;">Blocks</a>
47
48 <a class="nav-item subtitle-text" href="http:&#x2F;&#x2F;localhost:8080&#x2F;transaction-docs&#x2F;">Transactions</a>
49
50 <a class="nav-item subtitle-text" href="http:&#x2F;&#x2F;localhost:8080&#x2F;register-docs&#x2F;">Register</a>
51
52 <a class="nav-item subtitle-text" href="http:&#x2F;&#x2F;localhost:8080&#x2F;jwt&#x2F;">JWT</a>
53
54
55
56 <a class="nav-item subtitle-text" href="https:&#x2F;&#x2F;github.com&#x2F;zhuowei&#x2F;nft_ptr#why">why?</a>
57
58
59</nav>
60
61</header>
62
63
64 <main>
65
66
67
68
69
70 <div class="content text">
71
72<div class="heading-text">Transaction documentation</div>
73<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
74tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At
75vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd
76ubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>
77
78
79 </div>
80
81
82
83 </main>
84
85
86<footer>
87
88</footer>
89
90</body>
91<script>
92 function highlightNav(heading) {
93 let pathname = location.pathname;
94 document.querySelectorAll(".toc a").forEach((item) => {
95 item.classList.remove("active");
96 });
97 document.querySelector(".toc a[href$='" + pathname + "#" + heading + "']").classList.add("active");
98 }
99
100 let currentHeading = "";
101 window.onscroll = function () {
102 let h = document.querySelectorAll("h1,h2,h3,h4,h5,h6");
103 let elementArr = [];
104
105 h.forEach(item => {
106 if (item.id !== "") {
107 elementArr[item.id] = item.getBoundingClientRect().top;
108 }
109 });
110 elementArr.sort();
111 for (let key in elementArr) {
112 if (!elementArr.hasOwnProperty(key)) {
113 continue;
114 }
115 if (elementArr[key] > 0 && elementArr[key] < 300) {
116 if (currentHeading !== key) {
117 highlightNav(key);
118 currentHeading = key;
119 }
120 break;
121 }
122 }
123 }
124</script>
125
126</html>
diff --git a/site/config.toml b/site/config.toml
index 93e9468..8754d85 100644
--- a/site/config.toml
+++ b/site/config.toml
@@ -13,6 +13,7 @@ build_search_index = true
13# Whether to do syntax highlighting 13# Whether to do syntax highlighting
14# Theme can be customised by setting the `highlight_theme` variable to a theme supported by Zola 14# Theme can be customised by setting the `highlight_theme` variable to a theme supported by Zola
15highlight_code = true 15highlight_code = true
16highlight_theme = "subway-moscow"
16 17
17[extra] 18[extra]
18# Put all your custom variables here 19# Put all your custom variables here
diff --git a/site/content/JWT.md b/site/content/JWT.md
index 91a7a73..f55ab17 100644
--- a/site/content/JWT.md
+++ b/site/content/JWT.md
@@ -4,8 +4,38 @@ description = "JSON Web Token Documentation"
4weight = 5 4weight = 5
5+++ 5+++
6 6
7Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod 7> JSON Web Tokens are representations of claims, or authorization proofs that fit into the `Header` of HTTP requests.
8tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At 8
9vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd 9# How?
10ubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. 10
11JWTs are used as the [MAC](https://en.wikipedia.org/wiki/Message_authentication_code) of operations that require authorization:
12- block proposal
13- transaction proposal.
14
15They are send alongside the JSON request body in the `Header`;
16
17```html
18Authorization: Bearer aaaaaa.bbbbbb.ccccc
19```
20
21Gradecoin uses 3 fields for the JWTs;
22
23```json
24{
25"tha": "Hash of the payload, check invididual references",
26"iat": "Issued At, Unix Time",
27"exp": "Expiration Time, epoch"
28}
29```
30
31- `tha` is explained in [blocks](@/block_docs.md) and [transactions](@/transaction_docs.md) documentations.
32- `iat` when the JWT was created in [Unix Time](https://en.wikipedia.org/wiki/Unix_time) format
33- `exp` when the JWT will expire & be rejected in [Unix Time](https://en.wikipedia.org/wiki/Unix_time)
34
35# Algorithm
36We are using [RS256](https://www.rfc-editor.org/rfc/rfc7518.html#section-3.1), `RSASSA-PKCS1-v1_5 using SHA-256`. The JWTs you encode with your private RSA key will be decoded using the public key you have authenticated with. You can see how the process works [here](https://jwt.io/).
37
38# References
39- [RFC, the ultimate reference](https://tools.ietf.org/html/rfc7519)
40- [JWT Debugger](https://jwt.io/)
11 41
diff --git a/site/content/_index.md b/site/content/_index.md
index 7dd7a7c..bf33eef 100644
--- a/site/content/_index.md
+++ b/site/content/_index.md
@@ -3,8 +3,35 @@ title = "Gradecoin"
3sort_by = "weight" 3sort_by = "weight"
4+++ 4+++
5 5
6- Don't know where to start? Gradecoin uses RESTful API, simple `curl` commands or even your browser will work! [This website can help as well](https://curl.trillworks.com/). 6# Welcome to Gradecoin!
7- [JWT Debugger](https://jwt.io) and the corresponding [RFC](https://tools.ietf.org/html/rfc7519) 7
8Blockchains are incredibly simple yet can appear very complicated, we will see how they work and practice programming _production_ cryptography code.
9
10This server is the sandbox for the PA1, it's currently running the Gradecoin application. Gradecoin is the faux currency we will use to simulate a blockchain network. At the end of the simulation, the amount of Gradecoin you hold will be your PA1 grade.
11
12**A quick summary**: authenticate yourself to the system using public key encryption.
13Craft [Transaction](@/transaction_docs.md) proposals and tag them using [JWTs](@/JWT.md).
14When there are enough transactions then you can propose [Blocks](@/block_docs.md) in the same way.
15Blocks need to be _mined_ beforehand using Proof-of-work, or brute force.
16
17Gradecoin offers 3 endpoints at [/register](/register), [/block](/block) and [/transaction](/transaction). You can only send GET requests to /block and /transaction without authorization.
18The server is programmed in [RESTful](https://www.service-architecture.com/articles/web-services/representational_state_transfer_rest.html) architecture, there are no `DELETE`, `PUT` or `UPDATE` operations, though.
19
20Gradecoin uses a Proof-of-work block accepting mechanism. It uses single round [Blake2s](https://www.blake2.net/) hashing which produces 256-bit (64 hexadecimal characters) output. The [target](https://wiki.bitcoinsv.io/index.php/Target) hash is _24 bits_ or _6 hexadecimal characters_ of 0. During testing, I could mine a block on average around 2-7 minutes.
21
22> We're expecting you to use existing tools and implementations. Standards are hard. [Don't roll your own crypto](https://www.reddit.com/r/crypto/comments/2coqsy/dont_roll_your_own/). Feel free to ask questions. Collaborate.
23
24You might ask,
25
26> But if nobody has any Gradecoin then how do we have transactions?
27
28There is a bank! Their public key is `31415926535897932384626433832795028841971693993751058209749445923` and they have some amount of Gradecoin preloaded. It's also the only account that you can send transactions requests _to_ yourself.
29
30# Coinbase
31The first transactions of a block is called the `coinbase`. They are the **author** of the block proposal and if the block is accepted then they get compensated for their efforts with some Gradecoin.
32
33# Public Key Signatures
34Gradecoin uses 2048 bit RSA keyspairs.
8 35
9# Services 36# Services
10## /register 37## /register
@@ -26,3 +53,33 @@ sort_by = "weight"
26- fetch the last accepted [`schema::Block`] - GET request 53- fetch the last accepted [`schema::Block`] - GET request
27 54
28`Authorization`: The request header should have Bearer JWT.Token signed with Student Public Key 55`Authorization`: The request header should have Bearer JWT.Token signed with Student Public Key
56
57# Questions
58## This all sound complicated!
59- I've drawn inspiration from [actual Bitcoin transactions](https://explorer.bitcoin.com/btc) and [warp](https://github.com/seanmonstar/warp/blob/master/examples/todos.rs). The simplicity of the system is how little interfaces it has.
60- Don't know where to start? Gradecoin uses RESTful API; simple `curl` commands or even your browser will work! [This website can help as well](https://curl.trillworks.com/).
61- [JWT Debugger](https://jwt.io) and the corresponding [RFC](https://tools.ietf.org/html/rfc7519)
62- Remember that you are absolutely encouraged to grab off-the-shelf implementations for every cryptography primitive you will use. You can start by finding a code snippet to generate a RSA keypair?
63
64## I found a bug!
65Thank you! Please [let me know](mailto:yigit@ceng.metu.edu.tr) so we can solve it.
66
67## I hacked the server!
68That wasn't supposed to happen :( I did not place any intentional vulnerabilities to the system so if you cracked something, it was not intended. Please don't abuse it and let me know so I can patch it.
69
70## Submission?
71At the end of the _simulation_, your Gradecoin balance will be your grade. I will also expect a unique client programmed in either;
72- c
73- c++
74- perl
75- rust
76- python
77- random assortment of bash scripts
78
79If your favourite programming language is missing please let me know 🤷?
80
81## Can my friends play?
82Sadly, no. Student's who are enrolled to the class will receive one-time-passwords for authentication.
83
84## How and or Why?
85- [Built](https://xkcd.com/2314/), with [Rust](https://xkcd.com/2418/)
diff --git a/site/public/block-docs/index.html b/site/public/block-docs/index.html
index 8331952..3da4e8b 100644
--- a/site/public/block-docs/index.html
+++ b/site/public/block-docs/index.html
@@ -84,7 +84,7 @@ ubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>
84 84
85 85
86<footer> 86<footer>
87 87Built For CENG489 Introduction to Computer Security
88</footer> 88</footer>
89 89
90</body> 90</body>
diff --git a/site/public/index.html b/site/public/index.html
index 0177355..05a37a0 100644
--- a/site/public/index.html
+++ b/site/public/index.html
@@ -71,31 +71,34 @@
71 <b style="color: deepskyblue">Gradecoin</b> is the latest cutting edge blockchain technology agile grading framework that drives organic engagement and other buzzwords, with big data mining search engine optimization 71 <b style="color: deepskyblue">Gradecoin</b> is the latest cutting edge blockchain technology agile grading framework that drives organic engagement and other buzzwords, with big data mining search engine optimization
72 </h3> 72 </h3>
73 <div> 73 <div>
74 <!-- <a class="github-button" href="https://github.com/huhu/juice" data-size="large" data-show-count="true" -->
75 <!-- aria-label="Star huhu/juice on GitHub">Star</a> -->
76 <!-- <a class="github-button" href="https://github.com/huhu/juice/fork" data-size="large" -->
77 <!-- data-show-count="true" aria-label="Fork huhu/juice on GitHub">Fork</a> -->
78 </div> 74 </div>
79</section> 75</section>
80<img class="hero-image" style="width: 50%" src="http:&#x2F;&#x2F;localhost:8080&#x2F;gradecoin.png"> 76<img class="hero-image" style="width: 45%" src="http:&#x2F;&#x2F;localhost:8080&#x2F;gradecoin.png">
81 77
82<div class="explore-more text" 78<div class="explore-more text"
83 onclick="document.getElementById('features').scrollIntoView({behavior: 'smooth'})"> 79 onclick="document.getElementById('features').scrollIntoView({behavior: 'smooth'})">
84 ⇩ Learn How ⇩ 80 ⇩ Learn How ⇩
85</div> 81</div>
86<style> 82<style>
83
87.hero section { 84.hero section {
88 padding: 0 5rem; 85 padding: 0 5rem;
89} 86}
90 @media screen and (max-width: 768px) { 87
91 .hero section { 88@media screen and (max-width: 768px) {
92 padding: 0 2rem; 89 .hero section {
93 } 90 padding: 0 2rem;
94 91 }
95 .hero-image { 92
96 display: none 93 .hero-image {
97 } 94 display: none
98 } 95 }
96
97}
98footer {
99 color: #8b8b8b;
100}
101
99</style> 102</style>
100 103
101 </div> 104 </div>
@@ -112,6 +115,21 @@
112 <div class="toc-sticky"> 115 <div class="toc-sticky">
113 116
114 <div class="toc-item"> 117 <div class="toc-item">
118 <a class="subtext" href="http://localhost:8080/#welcome-to-gradecoin">Welcome to Gradecoin!</a>
119 </div>
120
121
122 <div class="toc-item">
123 <a class="subtext" href="http://localhost:8080/#coinbase">Coinbase</a>
124 </div>
125
126
127 <div class="toc-item">
128 <a class="subtext" href="http://localhost:8080/#public-key-signatures">Public Key Signatures</a>
129 </div>
130
131
132 <div class="toc-item">
115 <a class="subtext" href="http://localhost:8080/#services">Services</a> 133 <a class="subtext" href="http://localhost:8080/#services">Services</a>
116 </div> 134 </div>
117 135
@@ -130,6 +148,37 @@
130 148
131 149
132 150
151 <div class="toc-item">
152 <a class="subtext" href="http://localhost:8080/#questions">Questions</a>
153 </div>
154
155
156 <div class="toc-item-child">
157 <a class="subtext" href="http://localhost:8080/#this-all-sound-complicated"><small>- This all sound complicated!</small></a>
158 </div>
159
160 <div class="toc-item-child">
161 <a class="subtext" href="http://localhost:8080/#i-found-a-bug"><small>- I found a bug!</small></a>
162 </div>
163
164 <div class="toc-item-child">
165 <a class="subtext" href="http://localhost:8080/#i-hacked-the-server"><small>- I hacked the server!</small></a>
166 </div>
167
168 <div class="toc-item-child">
169 <a class="subtext" href="http://localhost:8080/#submission"><small>- Submission?</small></a>
170 </div>
171
172 <div class="toc-item-child">
173 <a class="subtext" href="http://localhost:8080/#can-my-friends-play"><small>- Can my friends play?</small></a>
174 </div>
175
176 <div class="toc-item-child">
177 <a class="subtext" href="http://localhost:8080/#how-and-or-why"><small>- How and or Why?</small></a>
178 </div>
179
180
181
133 </div> 182 </div>
134 </div> 183 </div>
135 184
@@ -138,10 +187,28 @@
138 <div class="content text"> 187 <div class="content text">
139 188
140 <div id="features" class="heading-text">Overview</div> 189 <div id="features" class="heading-text">Overview</div>
141 <ul> 190 <h1 id="welcome-to-gradecoin">Welcome to Gradecoin!</h1>
142<li>Don't know where to start? Gradecoin uses RESTful API, simple <code>curl</code> commands or even your browser will work! <a href="https://curl.trillworks.com/">This website can help as well</a>.</li> 191<p>Blockchains are incredibly simple yet can appear very complicated, we will see how they work and practice programming <em>production</em> cryptography code.</p>
143<li><a href="https://jwt.io">JWT Debugger</a> and the corresponding <a href="https://tools.ietf.org/html/rfc7519">RFC</a></li> 192<p>This server is the sandbox for the PA1, it's currently running the Gradecoin application. Gradecoin is the faux currency we will use to simulate a blockchain network. At the end of the simulation, the amount of Gradecoin you hold will be your PA1 grade.</p>
144</ul> 193<p><strong>A quick summary</strong>: authenticate yourself to the system using public key encryption.
194Craft <a href="http://localhost:8080/transaction-docs/">Transaction</a> proposals and tag them using <a href="http://localhost:8080/jwt/">JWTs</a>.
195When there are enough transactions then you can propose <a href="http://localhost:8080/block-docs/">Blocks</a> in the same way.
196Blocks need to be <em>mined</em> beforehand using Proof-of-work, or brute force.</p>
197<p>Gradecoin offers 3 endpoints at <a href="/register">/register</a>, <a href="/block">/block</a> and <a href="/transaction">/transaction</a>. You can only send GET requests to /block and /transaction without authorization.
198The server is programmed in <a href="https://www.service-architecture.com/articles/web-services/representational_state_transfer_rest.html">RESTful</a> architecture, there are no <code>DELETE</code>, <code>PUT</code> or <code>UPDATE</code> operations, though.</p>
199<p>Gradecoin uses a Proof-of-work block accepting mechanism. It uses single round <a href="https://www.blake2.net/">Blake2s</a> hashing which produces 256-bit (64 hexadecimal characters) output. The <a href="https://wiki.bitcoinsv.io/index.php/Target">target</a> hash is <em>24 bits</em> or <em>6 hexadecimal characters</em> of 0. During testing, I could mine a block on average around 2-7 minutes.</p>
200<blockquote>
201<p>We're expecting you to use existing tools and implementations. Standards are hard. <a href="https://www.reddit.com/r/crypto/comments/2coqsy/dont_roll_your_own/">Don't roll your own crypto</a>. Feel free to ask questions. Collaborate.</p>
202</blockquote>
203<p>You might ask,</p>
204<blockquote>
205<p>But if nobody has any Gradecoin then how do we have transactions?</p>
206</blockquote>
207<p>There is a bank! Their public key is <code>31415926535897932384626433832795028841971693993751058209749445923</code> and they have some amount of Gradecoin preloaded. It's also the only account that you can send transactions requests <em>to</em> yourself.</p>
208<h1 id="coinbase">Coinbase</h1>
209<p>The first transactions of a block is called the <code>coinbase</code>. They are the <strong>author</strong> of the block proposal and if the block is accepted then they get compensated for their efforts with some Gradecoin.</p>
210<h1 id="public-key-signatures">Public Key Signatures</h1>
211<p>Gradecoin uses 2048 bit RSA keyspairs.</p>
145<h1 id="services">Services</h1> 212<h1 id="services">Services</h1>
146<h2 id="register">/register</h2> 213<h2 id="register">/register</h2>
147<ul> 214<ul>
@@ -171,6 +238,35 @@
171<li>fetch the last accepted [<code>schema::Block</code>] - GET request</li> 238<li>fetch the last accepted [<code>schema::Block</code>] - GET request</li>
172</ul> 239</ul>
173<p><code>Authorization</code>: The request header should have Bearer JWT.Token signed with Student Public Key</p> 240<p><code>Authorization</code>: The request header should have Bearer JWT.Token signed with Student Public Key</p>
241<h1 id="questions">Questions</h1>
242<h2 id="this-all-sound-complicated">This all sound complicated!</h2>
243<ul>
244<li>I've drawn inspiration from <a href="https://explorer.bitcoin.com/btc">actual Bitcoin transactions</a> and <a href="https://github.com/seanmonstar/warp/blob/master/examples/todos.rs">warp</a>. The simplicity of the system is how little interfaces it has.</li>
245<li>Don't know where to start? Gradecoin uses RESTful API; simple <code>curl</code> commands or even your browser will work! <a href="https://curl.trillworks.com/">This website can help as well</a>.</li>
246<li><a href="https://jwt.io">JWT Debugger</a> and the corresponding <a href="https://tools.ietf.org/html/rfc7519">RFC</a></li>
247<li>Remember that you are absolutely encouraged to grab off-the-shelf implementations for every cryptography primitive you will use. You can start by finding a code snippet to generate a RSA keypair?</li>
248</ul>
249<h2 id="i-found-a-bug">I found a bug!</h2>
250<p>Thank you! Please <a href="mailto:yigit@ceng.metu.edu.tr">let me know</a> so we can solve it.</p>
251<h2 id="i-hacked-the-server">I hacked the server!</h2>
252<p>That wasn't supposed to happen :( I did not place any intentional vulnerabilities to the system so if you cracked something, it was not intended. Please don't abuse it and let me know so I can patch it.</p>
253<h2 id="submission">Submission?</h2>
254<p>At the end of the <em>simulation</em>, your Gradecoin balance will be your grade. I will also expect a unique client programmed in either;</p>
255<ul>
256<li>c</li>
257<li>c++</li>
258<li>perl</li>
259<li>rust</li>
260<li>python</li>
261<li>random assortment of bash scripts</li>
262</ul>
263<p>If your favourite programming language is missing please let me know 🤷?</p>
264<h2 id="can-my-friends-play">Can my friends play?</h2>
265<p>Sadly, no. Student's who are enrolled to the class will receive one-time-passwords for authentication.</p>
266<h2 id="how-and-or-why">How and or Why?</h2>
267<ul>
268<li><a href="https://xkcd.com/2314/">Built</a>, with <a href="https://xkcd.com/2418/">Rust</a></li>
269</ul>
174 270
175 271
176 </div> 272 </div>
@@ -181,7 +277,7 @@
181 277
182 278
183<footer> 279<footer>
184 280Built For CENG489 Introduction to Computer Security
185</footer> 281</footer>
186 282
187</body> 283</body>
diff --git a/site/public/jwt/index.html b/site/public/jwt/index.html
index 899aada..c32fb31 100644
--- a/site/public/jwt/index.html
+++ b/site/public/jwt/index.html
@@ -66,14 +66,66 @@
66 66
67 67
68 68
69
70 <div class="toc">
71 <div class="toc-sticky">
72
73 <div class="toc-item">
74 <a class="subtext" href="http://localhost:8080/jwt/#how">How?</a>
75 </div>
76
77
78 <div class="toc-item">
79 <a class="subtext" href="http://localhost:8080/jwt/#algorithm">Algorithm</a>
80 </div>
81
82
83 <div class="toc-item">
84 <a class="subtext" href="http://localhost:8080/jwt/#references">References</a>
85 </div>
86
87
88 </div>
89 </div>
90
91
69 92
70 <div class="content text"> 93 <div class="content text">
71 94
72<div class="heading-text">JSON Web Token Documentation</div> 95<div class="heading-text">JSON Web Token Documentation</div>
73<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod 96<blockquote>
74tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At 97<p>JSON Web Tokens are representations of claims, or authorization proofs that fit into the <code>Header</code> of HTTP requests.</p>
75vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd 98</blockquote>
76ubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p> 99<h1 id="how">How?</h1>
100<p>JWTs are used as the <a href="https://en.wikipedia.org/wiki/Message_authentication_code">MAC</a> of operations that require authorization:</p>
101<ul>
102<li>block proposal</li>
103<li>transaction proposal.</li>
104</ul>
105<p>They are send alongside the JSON request body in the <code>Header</code>;</p>
106<pre style="background-color:#ffffff;">
107<code class="language-html" data-lang="html"><span style="color:#545052;">Authorization: Bearer aaaaaa.bbbbbb.ccccc
108</span></code></pre>
109<p>Gradecoin uses 3 fields for the JWTs;</p>
110<pre style="background-color:#ffffff;">
111<code class="language-json" data-lang="json"><span style="color:#545052;">{
112&quot;</span><span style="color:#009854;">tha</span><span style="color:#545052;">&quot;: &quot;</span><span style="color:#009854;">Hash of the payload, check invididual references</span><span style="color:#545052;">&quot;,
113&quot;</span><span style="color:#009854;">iat</span><span style="color:#545052;">&quot;: &quot;</span><span style="color:#009854;">Issued At, Unix Time</span><span style="color:#545052;">&quot;,
114&quot;</span><span style="color:#009854;">exp</span><span style="color:#545052;">&quot;: &quot;</span><span style="color:#009854;">Expiration Time, epoch</span><span style="color:#545052;">&quot;
115}
116</span></code></pre>
117<ul>
118<li><code>tha</code> is explained in <a href="http://localhost:8080/block-docs/">blocks</a> and <a href="http://localhost:8080/transaction-docs/">transactions</a> documentations.</li>
119<li><code>iat</code> when the JWT was created in <a href="https://en.wikipedia.org/wiki/Unix_time">Unix Time</a> format</li>
120<li><code>exp</code> when the JWT will expire &amp; be rejected in <a href="https://en.wikipedia.org/wiki/Unix_time">Unix Time</a></li>
121</ul>
122<h1 id="algorithm">Algorithm</h1>
123<p>We are using <a href="https://www.rfc-editor.org/rfc/rfc7518.html#section-3.1">RS256</a>, <code>RSASSA-PKCS1-v1_5 using SHA-256</code>. The JWTs you encode with your private RSA key will be decoded using the public key you have authenticated with. You can see how the process works <a href="https://jwt.io/">here</a>.</p>
124<h1 id="references">References</h1>
125<ul>
126<li><a href="https://tools.ietf.org/html/rfc7519">RFC, the ultimate reference</a></li>
127<li><a href="https://jwt.io/">JWT Debugger</a></li>
128</ul>
77 129
78 130
79 </div> 131 </div>
@@ -84,7 +136,7 @@ ubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>
84 136
85 137
86<footer> 138<footer>
87 139Built For CENG489 Introduction to Computer Security
88</footer> 140</footer>
89 141
90</body> 142</body>
diff --git a/site/public/register-docs/index.html b/site/public/register-docs/index.html
index 10a4d56..abf30c1 100644
--- a/site/public/register-docs/index.html
+++ b/site/public/register-docs/index.html
@@ -146,7 +146,7 @@ auth_plaintext</li>
146 146
147 147
148<footer> 148<footer>
149 149Built For CENG489 Introduction to Computer Security
150</footer> 150</footer>
151 151
152</body> 152</body>
diff --git a/site/public/search_index.en.js b/site/public/search_index.en.js
index 03cbfea..7de6e5c 100644
--- a/site/public/search_index.en.js
+++ b/site/public/search_index.en.js
@@ -1 +1 @@
window.searchIndex = {"fields":["title","body"],"pipeline":["trimmer","stopWordFilter","stemmer"],"ref":"id","version":"0.9.5","index":{"body":{"root":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"8":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}},"5":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}},"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,"8":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}}}}},"e":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"y":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}}}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.4142135623730951},"http://localhost:8080/jwt/":{"tf":1.4142135623730951},"http://localhost:8080/transaction-docs/":{"tf":1.4142135623730951}},"df":3}}},"p":{"docs":{},"df":0,"i":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":2.0}},"df":1}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"c":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}}}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.7320508075688772}},"df":1}}},"o":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/":{"tf":1.7320508075688772}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1,"'":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.0}},"df":2}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951},"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.0}},"df":3}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}}},"c":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}},"b":{"docs":{},"df":0,"c":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}}},"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}}}}}}},"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":2}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"g":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.4142135623730951},"http://localhost:8080/jwt/":{"tf":1.4142135623730951},"http://localhost:8080/transaction-docs/":{"tf":1.4142135623730951}},"df":3}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/block-docs/":{"tf":2.0},"http://localhost:8080/jwt/":{"tf":2.0},"http://localhost:8080/transaction-docs/":{"tf":2.0}},"df":3}}},"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"w":{"docs":{},"df":0,"n":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}}},"u":{"docs":{},"df":0,"o":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3},"r":{"docs":{},"df":0,"e":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{},"df":0,"5":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}},"a":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3},"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":2}}}}},"d":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}}},"o":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}},"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}},"t":{"docs":{"http://localhost:8080/block-docs/":{"tf":2.0},"http://localhost:8080/jwt/":{"tf":2.0},"http://localhost:8080/transaction-docs/":{"tf":2.0}},"df":3},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951}},"df":1}}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}}}}},"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951},"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":2,"'":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951},"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":2},"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951}},"df":1}}}},"l":{"docs":{},"df":0,"p":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1},"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}}}}}},"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.4142135623730951},"http://localhost:8080/jwt/":{"tf":1.4142135623730951},"http://localhost:8080/transaction-docs/":{"tf":1.4142135623730951}},"df":3}}}}},"j":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.7320508075688772}},"df":2}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}}},"w":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0}},"df":2,"'":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1},".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}}}}},"k":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.7320508075688772}},"df":1}}}}},"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}},"e":{"docs":{},"df":0,"y":{"docs":{"http://localhost:8080/":{"tf":2.449489742783178},"http://localhost:8080/register-docs/":{"tf":3.3166247903554}},"df":2,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}},"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":2}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.4142135623730951},"http://localhost:8080/jwt/":{"tf":1.4142135623730951},"http://localhost:8080/transaction-docs/":{"tf":1.4142135623730951}},"df":3}}}},"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}},"l":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.0}},"df":2}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}}},"w":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}},"b":{"docs":{},"df":0,"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.7320508075688772}},"df":1}}}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951}},"df":1}}}},"n":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.7320508075688772}},"df":1},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"w":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.0}},"df":2}}}},"y":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.7320508075688772}},"df":1}}}}}},"e":{"docs":{},"df":0,"m":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}},"k":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"7":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951},"http://localhost:8080/register-docs/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"http://localhost:8080/":{"tf":2.449489742783178},"http://localhost:8080/register-docs/":{"tf":1.7320508075688772}},"df":2,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":2}}}},"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":3.0},"http://localhost:8080/register-docs/":{"tf":1.7320508075688772}},"df":2}}}}},"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}},"f":{"docs":{},"df":0,"c":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"a":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":2}}},"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"k":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}},"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}}}},"m":{"docs":{},"df":0,"e":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}}}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951}},"df":1,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"b":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}}}},"e":{"docs":{},"df":0,"a":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3},"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}},"d":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.4142135623730951},"http://localhost:8080/jwt/":{"tf":1.4142135623730951},"http://localhost:8080/transaction-docs/":{"tf":1.4142135623730951}},"df":3},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}},"g":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/":{"tf":1.7320508075688772}},"df":1}},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"t":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.4142135623730951},"http://localhost:8080/jwt/":{"tf":1.4142135623730951},"http://localhost:8080/transaction-docs/":{"tf":1.4142135623730951}},"df":3}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}}},"u":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.7320508075688772},"http://localhost:8080/register-docs/":{"tf":1.7320508075688772}},"df":2,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}},"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}}}}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}}},"o":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"http://localhost:8080/register-docs/":{"tf":2.0}},"df":1}}}}}}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":2.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":2}}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}}}}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}},"s":{"docs":{"http://localhost:8080/":{"tf":1.7320508075688772},"http://localhost:8080/register-docs/":{"tf":2.0}},"df":2,"e":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/register-docs/":{"tf":2.23606797749979}},"df":1,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}},"o":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}}}}}}},"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"l":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}},"title":{"root":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0}},"df":1}}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}}}}},"j":{"docs":{},"df":0,"w":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/jwt/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":1}}}}}}}}}}},"documentStore":{"save":true,"docs":{"http://localhost:8080/":{"body":"\nDon't know where to start? Gradecoin uses RESTful API, simple curl commands or even your browser will work! This website can help as well.\nJWT Debugger and the corresponding RFC\n\nServices\n/register\n\nStudent creates their own 2048 bit RSA keypair\nDownloads Gradecoin's Public Key from Moodle\nEncrypts their JSON wrapped Public Key, Student ID and one time passwd using Gradecoin's Public Key\nTheir public key is now in our database and can be used to sign their JWT's during requests\n\n/transaction\n\nYou can offer a Transaction - POST request\n\nThe request should have Authorization\nThe request header should be signed by the Public Key of the by field in the transaction\n\n\nfetch the list of Transactions - GET request\n\n/block\n\noffer a [schema::Block] - POST request\n\nThe request should have Authorization\nThe [schema::Block::transaction_list] of the block should be a subset of [schema::Db::pending_transactions]\n\n\nfetch the last accepted [schema::Block] - GET request\n\nAuthorization: The request header should have Bearer JWT.Token signed with Student Public Key\n","id":"http://localhost:8080/","title":"Gradecoin"},"http://localhost:8080/block-docs/":{"body":"Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod\ntempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At\nvero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd\nubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.\n","id":"http://localhost:8080/block-docs/","title":"Blocks"},"http://localhost:8080/jwt/":{"body":"Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod\ntempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At\nvero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd\nubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.\n","id":"http://localhost:8080/jwt/","title":"JWT"},"http://localhost:8080/register-docs/":{"body":"POST request to /register endpoint\nLets a [User] (=student) to authenticate themselves to the system\nThis request can be rejected if the payload is malformed (=not authenticated properly) or if\nthe [AuthRequest.user_id] of the request is not in the list of users that can hold a Gradecoin account\nAuthentication Process\n\n\nGradecoin's Public Key (gradecoin_public_key) is listed on moodle.\n\n\nGradecoin's Private Key (gradecoin_private_key) is loaded here\n\n\nStudent picks a short temporary key (k_temp)\n\n\nCreates a JSON object (auth_plaintext) with their metu_id and public key in base64 (PEM) format (S_PK):\n{\nstudent_id: \"e12345\",\npasswd: \"15 char secret\"\npublic_key: \"---BEGIN PUBLIC KEY...\"\n}\n\n\nEncrypts the serialized string of auth_plaintext with 128 bit block AES in CBC mode with Pkcs7 padding using the temporary key (k_temp), the result is auth_ciphertext TODO should this be base64'd?\n\n\nThe temporary key student has picked k_temp is encrypted using RSA with OAEP padding scheme\nusing sha256 with gradecoin_public_key (TODO base64? same as above), giving us key_ciphertext\n\n\nThe payload JSON object (auth_request) can be JSON serialized now:\n{\nc: \"auth_ciphertext\"\nkey: \"key_ciphertext\"\n}\n\n\nGradecoin Side\n\nUpon receiving, we first RSA decrypt with OAEP padding scheme using SHA256 with gradecoin_private_key as the key and auth_request.key key as the ciphertext, receiving temp_key (this is the temporary key chosen by stu\nWith temp_key, we can AES 128 Cbc Pkcs7 decrypt the auth_request.c, giving us\nauth_plaintext\nThe auth_plaintext String can be deserialized to [AuthRequest]\nWe then verify the payload and calculate the User fingerprint\nFinally, create the new [User] object, insert to users HashMap &lt;fingerprint, User&gt;\n\n","id":"http://localhost:8080/register-docs/","title":"Register"},"http://localhost:8080/transaction-docs/":{"body":"Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod\ntempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At\nvero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd\nubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.\n","id":"http://localhost:8080/transaction-docs/","title":"Transactions"}},"docInfo":{"http://localhost:8080/":{"body":99,"title":1},"http://localhost:8080/block-docs/":{"body":48,"title":1},"http://localhost:8080/jwt/":{"body":48,"title":1},"http://localhost:8080/register-docs/":{"body":166,"title":1},"http://localhost:8080/transaction-docs/":{"body":48,"title":1}},"length":5},"lang":"English"}; \ No newline at end of file window.searchIndex = {"fields":["title","body"],"pipeline":["trimmer","stopWordFilter","stemmer"],"ref":"id","version":"0.9.5","index":{"body":{"root":{"docs":{},"df":0,"0":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1},"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"8":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}},"5":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}},"2":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,"8":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951}},"df":1}}},"4":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1},"5":{"docs":{},"df":0,"6":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0}},"df":2}}},"3":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0}},"df":2,"1":{"docs":{},"df":0,"4":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,"9":{"docs":{},"df":0,"2":{"docs":{},"df":0,"6":{"docs":{},"df":0,"5":{"docs":{},"df":0,"3":{"docs":{},"df":0,"5":{"docs":{},"df":0,"8":{"docs":{},"df":0,"9":{"docs":{},"df":0,"7":{"docs":{},"df":0,"9":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"8":{"docs":{},"df":0,"4":{"docs":{},"df":0,"6":{"docs":{},"df":0,"2":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{},"df":0,"8":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{},"df":0,"7":{"docs":{},"df":0,"9":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"8":{"docs":{},"df":0,"8":{"docs":{},"df":0,"4":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{},"df":0,"7":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"9":{"docs":{},"df":0,"3":{"docs":{},"df":0,"9":{"docs":{},"df":0,"9":{"docs":{},"df":0,"3":{"docs":{},"df":0,"7":{"docs":{},"df":0,"5":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{},"df":0,"8":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"9":{"docs":{},"df":0,"7":{"docs":{},"df":0,"4":{"docs":{},"df":0,"9":{"docs":{},"df":0,"4":{"docs":{},"df":0,"4":{"docs":{},"df":0,"5":{"docs":{},"df":0,"9":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"6":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1,"4":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}},"7":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1},"a":{"docs":{},"df":0,"a":{"docs":{},"df":0,"a":{"docs":{},"df":0,"a":{"docs":{},"df":0,"a":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"b":{"docs":{},"df":0,"b":{"docs":{},"df":0,"b":{"docs":{},"df":0,"b":{"docs":{},"df":0,"b":{"docs":{},"df":0,"b":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{"http://localhost:8080/jwt/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"s":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.7320508075688772}},"df":1}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.0}},"df":2}}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":2}}}}},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1},"l":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"m":{"docs":{"http://localhost:8080/jwt/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"y":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":2}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/jwt/":{"tf":1.0}},"df":1}}}}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.4142135623730951},"http://localhost:8080/transaction-docs/":{"tf":1.4142135623730951}},"df":2}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951}},"df":1}}}},"p":{"docs":{"http://localhost:8080/jwt/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"i":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"k":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951}},"df":1},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":2.0}},"df":1}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"c":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}}}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.7320508075688772}},"df":3}}},"o":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/":{"tf":2.23606797749979},"http://localhost:8080/jwt/":{"tf":1.7320508075688772}},"df":2}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}},"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"k":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1,"'":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}},"h":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0}},"df":2}}}},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":2.0},"http://localhost:8080/register-docs/":{"tf":1.0}},"df":2,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"2":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"http://localhost:8080/":{"tf":3.3166247903554},"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.4142135623730951},"http://localhost:8080/register-docs/":{"tf":1.0}},"df":4,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"http://localhost:8080/jwt/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"g":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}},"c":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951},"http://localhost:8080/register-docs/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}},"l":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"b":{"docs":{},"df":0,"c":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951}},"df":1}}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"http://localhost:8080/jwt/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"http://localhost:8080/jwt/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"s":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"a":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":2}}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951}},"df":1}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951}},"df":1}}}}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}},"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951}},"df":1}}}}},"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":2}}}}}}}},"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}},"f":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":3}}},"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1},"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"g":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0}},"df":2}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/jwt/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.4142135623730951},"http://localhost:8080/transaction-docs/":{"tf":1.4142135623730951}},"df":2}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/jwt/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/block-docs/":{"tf":2.0},"http://localhost:8080/transaction-docs/":{"tf":2.0}},"df":2}}},"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.7320508075688772}},"df":1}}},"w":{"docs":{},"df":0,"n":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"o":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":2},"r":{"docs":{},"df":0,"e":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951}},"df":1}}}},"e":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{},"df":0,"5":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}},"a":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":2},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":2}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":2}}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/jwt/":{"tf":1.0}},"df":1},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951},"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":2}}}}},"d":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951}},"df":1,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.0}},"df":2}}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"o":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":2},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"http://localhost:8080/jwt/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":2}}},"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":2}},"t":{"docs":{"http://localhost:8080/block-docs/":{"tf":2.0},"http://localhost:8080/transaction-docs/":{"tf":2.0}},"df":2},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"p":{"docs":{"http://localhost:8080/jwt/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951}},"df":1}}},"i":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/jwt/":{"tf":1.4142135623730951}},"df":1}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/jwt/":{"tf":1.0}},"df":1}}}}}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}},"v":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}}},"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951}},"df":1}}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0}},"df":2}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}},"d":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}}}}},"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.0}},"df":2}}},"t":{"docs":{"http://localhost:8080/jwt/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.0}},"df":2}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1},"d":{"docs":{},"df":0,"e":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951}},"df":1,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/":{"tf":3.605551275463989},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":3,"'":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951},"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":2},"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"h":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951},"http://localhost:8080/jwt/":{"tf":1.0}},"df":2,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951},"http://localhost:8080/jwt/":{"tf":1.4142135623730951}},"df":2}}}},"l":{"docs":{},"df":0,"p":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.0}},"df":2}},"x":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.0}},"df":2}}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{"http://localhost:8080/jwt/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"'":{"docs":{},"df":0,"v":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}},"a":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/jwt/":{"tf":1.4142135623730951}},"df":1}},"d":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1},"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{"http://localhost:8080/jwt/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":2}}}}}}},"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.4142135623730951},"http://localhost:8080/transaction-docs/":{"tf":1.4142135623730951}},"df":2}}}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{"http://localhost:8080/jwt/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"'":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951}},"df":1}}},"j":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.4142135623730951},"http://localhost:8080/register-docs/":{"tf":1.7320508075688772}},"df":3}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":2}}}},"w":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951},"http://localhost:8080/jwt/":{"tf":2.6457513110645907}},"df":2,"'":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1},".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}}}}},"k":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.7320508075688772}},"df":1}}}}},"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":2}}},"e":{"docs":{},"df":0,"y":{"docs":{"http://localhost:8080/":{"tf":3.0},"http://localhost:8080/jwt/":{"tf":1.4142135623730951},"http://localhost:8080/register-docs/":{"tf":3.3166247903554}},"df":3,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951}},"df":1}}}},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"http://localhost:8080/":{"tf":2.0}},"df":1}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":2}}},"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":2}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.4142135623730951},"http://localhost:8080/transaction-docs/":{"tf":1.4142135623730951}},"df":2}}}},"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"http://localhost:8080/jwt/":{"tf":1.0}},"df":1},"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":2}}},"l":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951}},"df":1},"u":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"s":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.0}},"df":2}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}},"w":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":2}}}},"w":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}},"b":{"docs":{},"df":0,"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.7320508075688772}},"df":1}}}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/":{"tf":1.7320508075688772}},"df":1}}}},"n":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951}},"df":1},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0}},"df":2}}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"1":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951}},"df":1},"d":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.7320508075688772}},"df":1},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"w":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.0}},"df":2},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"y":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.7320508075688772}},"df":2}}}}}},"e":{"docs":{},"df":0,"m":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"l":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}},"k":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"1":{"docs":{"http://localhost:8080/jwt/":{"tf":1.0}},"df":1},"7":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}},"y":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"http://localhost:8080/":{"tf":1.7320508075688772}},"df":1}}}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951},"http://localhost:8080/register-docs/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.0}},"df":2}}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.0}},"df":2}}}},"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"http://localhost:8080/":{"tf":2.0}},"df":1}}}},"o":{"docs":{},"df":0,"f":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951},"http://localhost:8080/jwt/":{"tf":1.0}},"df":2}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"s":{"docs":{"http://localhost:8080/":{"tf":1.7320508075688772},"http://localhost:8080/jwt/":{"tf":1.4142135623730951}},"df":2}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"http://localhost:8080/":{"tf":3.0},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.7320508075688772}},"df":3,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}}}},"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}},"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951}},"df":1}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":2}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":2}}}},"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/jwt/":{"tf":1.7320508075688772}},"df":1}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951},"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":2}}}},"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.0}},"df":2}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/jwt/":{"tf":1.0}},"df":1}}}}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":3.3166247903554},"http://localhost:8080/jwt/":{"tf":1.4142135623730951},"http://localhost:8080/register-docs/":{"tf":1.7320508075688772}},"df":3}}},"i":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/jwt/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951}},"df":1},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}},"f":{"docs":{},"df":0,"c":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0}},"df":2}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{"http://localhost:8080/jwt/":{"tf":1.0}},"df":1}}},"a":{"docs":{"http://localhost:8080/":{"tf":1.7320508075688772},"http://localhost:8080/jwt/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":3,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{"http://localhost:8080/jwt/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951}},"df":1}}}},"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"k":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}},"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":2}}}},"l":{"docs":{},"df":0,"i":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"e":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/register-docs/":{"tf":1.0}},"df":2}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":2}}},"d":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951}},"df":1,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"b":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"a":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":2},"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}},"d":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.4142135623730951},"http://localhost:8080/transaction-docs/":{"tf":1.4142135623730951}},"df":2},"e":{"docs":{"http://localhost:8080/":{"tf":1.0},"http://localhost:8080/jwt/":{"tf":1.0}},"df":2},"n":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951},"http://localhost:8080/jwt/":{"tf":1.0}},"df":2}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/":{"tf":1.7320508075688772}},"df":1}},"i":{"docs":{},"df":0,"c":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}},"h":{"docs":{},"df":0,"a":{"docs":{"http://localhost:8080/jwt/":{"tf":1.0}},"df":1,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}},"g":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/":{"tf":1.7320508075688772}},"df":1,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951}},"df":1,"i":{"docs":{},"df":0,"c":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"l":{"docs":{"http://localhost:8080/":{"tf":1.7320508075688772}},"df":1}}},"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"t":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.4142135623730951},"http://localhost:8080/transaction-docs/":{"tf":1.4142135623730951}},"df":2}},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951}},"df":1}}},"e":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":2}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}}},"u":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.7320508075688772},"http://localhost:8080/register-docs/":{"tf":1.7320508075688772}},"df":2,"'":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1},"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}},"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"http://localhost:8080/":{"tf":1.7320508075688772},"http://localhost:8080/register-docs/":{"tf":1.0}},"df":2}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1},"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":2}}}}}},"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}}}},"o":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"http://localhost:8080/register-docs/":{"tf":2.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"h":{"docs":{},"df":0,"a":{"docs":{"http://localhost:8080/jwt/":{"tf":1.4142135623730951}},"df":1,"n":{"docs":{},"df":0,"k":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951},"http://localhost:8080/jwt/":{"tf":2.0}},"df":2}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.4142135623730951}},"df":1}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/jwt/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"l":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":3.4641016151377544},"http://localhost:8080/jwt/":{"tf":1.4142135623730951},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":3}}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":2}}}}}}},"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"http://localhost:8080/jwt/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}},"x":{"docs":{"http://localhost:8080/jwt/":{"tf":1.7320508075688772}},"df":1}}},"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}},"s":{"docs":{"http://localhost:8080/":{"tf":3.4641016151377544},"http://localhost:8080/jwt/":{"tf":2.23606797749979},"http://localhost:8080/register-docs/":{"tf":2.0}},"df":3,"e":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/register-docs/":{"tf":2.23606797749979}},"df":1,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":2}},"v":{"docs":{},"df":0,"1":{"docs":{},"df":0,"_":{"docs":{},"df":0,"5":{"docs":{"http://localhost:8080/jwt/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1,"f":{"docs":{},"df":0,"i":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}},"o":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0},"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":2}}}}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"y":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"'":{"docs":{},"df":0,"r":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}},"b":{"docs":{"http://localhost:8080/jwt/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"l":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"http://localhost:8080/":{"tf":2.0},"http://localhost:8080/jwt/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}},"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"http://localhost:8080/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"title":{"root":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"http://localhost:8080/block-docs/":{"tf":1.0}},"df":1}}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"http://localhost:8080/":{"tf":1.0}},"df":1}}}}}}}}},"j":{"docs":{},"df":0,"w":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/jwt/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/register-docs/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"http://localhost:8080/transaction-docs/":{"tf":1.0}},"df":1}}}}}}}}}}},"documentStore":{"save":true,"docs":{"http://localhost:8080/":{"body":"Welcome to Gradecoin!\nBlockchains are incredibly simple yet can appear very complicated, we will see how they work and practice programming production cryptography code.\nThis server is the sandbox for the PA1, it's currently running the Gradecoin application. Gradecoin is the faux currency we will use to simulate a blockchain network. At the end of the simulation, the amount of Gradecoin you hold will be your PA1 grade.\nA quick summary: authenticate yourself to the system using public key encryption.\nCraft Transaction proposals and tag them using JWTs.\nWhen there are enough transactions then you can propose Blocks in the same way.\nBlocks need to be mined beforehand using Proof-of-work, or brute force.\nGradecoin offers 3 endpoints at /register, /block and /transaction. You can only send GET requests to /block and /transaction without authorization.\nThe server is programmed in RESTful architecture, there are no DELETE, PUT or UPDATE operations, though.\nGradecoin uses a Proof-of-work block accepting mechanism. It uses single round Blake2s hashing which produces 256-bit (64 hexadecimal characters) output. The target hash is 24 bits or 6 hexadecimal characters of 0. During testing, I could mine a block on average around 2-7 minutes.\n\nWe're expecting you to use existing tools and implementations. Standards are hard. Don't roll your own crypto. Feel free to ask questions. Collaborate.\n\nYou might ask,\n\nBut if nobody has any Gradecoin then how do we have transactions?\n\nThere is a bank! Their public key is 31415926535897932384626433832795028841971693993751058209749445923 and they have some amount of Gradecoin preloaded. It's also the only account that you can send transactions requests to yourself.\nCoinbase\nThe first transactions of a block is called the coinbase. They are the author of the block proposal and if the block is accepted then they get compensated for their efforts with some Gradecoin.\nPublic Key Signatures\nGradecoin uses 2048 bit RSA keyspairs.\nServices\n/register\n\nStudent creates their own 2048 bit RSA keypair\nDownloads Gradecoin's Public Key from Moodle\nEncrypts their JSON wrapped Public Key, Student ID and one time passwd using Gradecoin's Public Key\nTheir public key is now in our database and can be used to sign their JWT's during requests\n\n/transaction\n\nYou can offer a Transaction - POST request\n\nThe request should have Authorization\nThe request header should be signed by the Public Key of the by field in the transaction\n\n\nfetch the list of Transactions - GET request\n\n/block\n\noffer a [schema::Block] - POST request\n\nThe request should have Authorization\nThe [schema::Block::transaction_list] of the block should be a subset of [schema::Db::pending_transactions]\n\n\nfetch the last accepted [schema::Block] - GET request\n\nAuthorization: The request header should have Bearer JWT.Token signed with Student Public Key\nQuestions\nThis all sound complicated!\n\nI've drawn inspiration from actual Bitcoin transactions and warp. The simplicity of the system is how little interfaces it has.\nDon't know where to start? Gradecoin uses RESTful API; simple curl commands or even your browser will work! This website can help as well.\nJWT Debugger and the corresponding RFC\nRemember that you are absolutely encouraged to grab off-the-shelf implementations for every cryptography primitive you will use. You can start by finding a code snippet to generate a RSA keypair?\n\nI found a bug!\nThank you! Please let me know so we can solve it.\nI hacked the server!\nThat wasn't supposed to happen :( I did not place any intentional vulnerabilities to the system so if you cracked something, it was not intended. Please don't abuse it and let me know so I can patch it.\nSubmission?\nAt the end of the simulation, your Gradecoin balance will be your grade. I will also expect a unique client programmed in either;\n\nc\nc++\nperl\nrust\npython\nrandom assortment of bash scripts\n\nIf your favourite programming language is missing please let me know 🤷?\nCan my friends play?\nSadly, no. Student's who are enrolled to the class will receive one-time-passwords for authentication.\nHow and or Why?\n\nBuilt, with Rust\n\n","id":"http://localhost:8080/","title":"Gradecoin"},"http://localhost:8080/block-docs/":{"body":"Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod\ntempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At\nvero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd\nubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.\n","id":"http://localhost:8080/block-docs/","title":"Blocks"},"http://localhost:8080/jwt/":{"body":"\nJSON Web Tokens are representations of claims, or authorization proofs that fit into the Header of HTTP requests.\n\nHow?\nJWTs are used as the MAC of operations that require authorization:\n\nblock proposal\ntransaction proposal.\n\nThey are send alongside the JSON request body in the Header;\nAuthorization: Bearer aaaaaa.bbbbbb.ccccc\n\nGradecoin uses 3 fields for the JWTs;\n{\n\"tha\": \"Hash of the payload, check invididual references\",\n\"iat\": \"Issued At, Unix Time\",\n\"exp\": \"Expiration Time, epoch\"\n}\n\n\ntha is explained in blocks and transactions documentations.\niat when the JWT was created in Unix Time format\nexp when the JWT will expire &amp; be rejected in Unix Time\n\nAlgorithm\nWe are using RS256, RSASSA-PKCS1-v1_5 using SHA-256. The JWTs you encode with your private RSA key will be decoded using the public key you have authenticated with. You can see how the process works here.\nReferences\n\nRFC, the ultimate reference\nJWT Debugger\n\n","id":"http://localhost:8080/jwt/","title":"JWT"},"http://localhost:8080/register-docs/":{"body":"POST request to /register endpoint\nLets a [User] (=student) to authenticate themselves to the system\nThis request can be rejected if the payload is malformed (=not authenticated properly) or if\nthe [AuthRequest.user_id] of the request is not in the list of users that can hold a Gradecoin account\nAuthentication Process\n\n\nGradecoin's Public Key (gradecoin_public_key) is listed on moodle.\n\n\nGradecoin's Private Key (gradecoin_private_key) is loaded here\n\n\nStudent picks a short temporary key (k_temp)\n\n\nCreates a JSON object (auth_plaintext) with their metu_id and public key in base64 (PEM) format (S_PK):\n{\nstudent_id: \"e12345\",\npasswd: \"15 char secret\"\npublic_key: \"---BEGIN PUBLIC KEY...\"\n}\n\n\nEncrypts the serialized string of auth_plaintext with 128 bit block AES in CBC mode with Pkcs7 padding using the temporary key (k_temp), the result is auth_ciphertext TODO should this be base64'd?\n\n\nThe temporary key student has picked k_temp is encrypted using RSA with OAEP padding scheme\nusing sha256 with gradecoin_public_key (TODO base64? same as above), giving us key_ciphertext\n\n\nThe payload JSON object (auth_request) can be JSON serialized now:\n{\nc: \"auth_ciphertext\"\nkey: \"key_ciphertext\"\n}\n\n\nGradecoin Side\n\nUpon receiving, we first RSA decrypt with OAEP padding scheme using SHA256 with gradecoin_private_key as the key and auth_request.key key as the ciphertext, receiving temp_key (this is the temporary key chosen by stu\nWith temp_key, we can AES 128 Cbc Pkcs7 decrypt the auth_request.c, giving us\nauth_plaintext\nThe auth_plaintext String can be deserialized to [AuthRequest]\nWe then verify the payload and calculate the User fingerprint\nFinally, create the new [User] object, insert to users HashMap &lt;fingerprint, User&gt;\n\n","id":"http://localhost:8080/register-docs/","title":"Register"},"http://localhost:8080/transaction-docs/":{"body":"Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod\ntempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At\nvero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd\nubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.\n","id":"http://localhost:8080/transaction-docs/","title":"Transactions"}},"docInfo":{"http://localhost:8080/":{"body":371,"title":1},"http://localhost:8080/block-docs/":{"body":48,"title":1},"http://localhost:8080/jwt/":{"body":96,"title":1},"http://localhost:8080/register-docs/":{"body":166,"title":1},"http://localhost:8080/transaction-docs/":{"body":48,"title":1}},"length":5},"lang":"English"}; \ No newline at end of file
diff --git a/site/public/transaction-docs/index.html b/site/public/transaction-docs/index.html
index 8c35895..bf170ba 100644
--- a/site/public/transaction-docs/index.html
+++ b/site/public/transaction-docs/index.html
@@ -84,7 +84,7 @@ ubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>
84 84
85 85
86<footer> 86<footer>
87 87Built For CENG489 Introduction to Computer Security
88</footer> 88</footer>
89 89
90</body> 90</body>
diff --git a/site/templates/index.html b/site/templates/index.html
index 70223a5..997d004 100644
--- a/site/templates/index.html
+++ b/site/templates/index.html
@@ -9,36 +9,39 @@
9 <b style="color: deepskyblue">Gradecoin</b> is the latest cutting edge blockchain technology agile grading framework that drives organic engagement and other buzzwords, with big data mining search engine optimization 9 <b style="color: deepskyblue">Gradecoin</b> is the latest cutting edge blockchain technology agile grading framework that drives organic engagement and other buzzwords, with big data mining search engine optimization
10 </h3> 10 </h3>
11 <div> 11 <div>
12 <!-- <a class="github-button" href="https://github.com/huhu/juice" data-size="large" data-show-count="true" -->
13 <!-- aria-label="Star huhu/juice on GitHub">Star</a> -->
14 <!-- <a class="github-button" href="https://github.com/huhu/juice/fork" data-size="large" -->
15 <!-- data-show-count="true" aria-label="Fork huhu/juice on GitHub">Fork</a> -->
16 </div> 12 </div>
17</section> 13</section>
18<img class="hero-image" style="width: 50%" src="{{ get_url(path="gradecoin.png") }}"> 14<img class="hero-image" style="width: 45%" src="{{ get_url(path="gradecoin.png") }}">
19 15
20<div class="explore-more text" 16<div class="explore-more text"
21 onclick="document.getElementById('features').scrollIntoView({behavior: 'smooth'})"> 17 onclick="document.getElementById('features').scrollIntoView({behavior: 'smooth'})">
22 ⇩ Learn How ⇩ 18 ⇩ Learn How ⇩
23</div> 19</div>
24<style> 20<style>
21
25.hero section { 22.hero section {
26 padding: 0 5rem; 23 padding: 0 5rem;
27} 24}
28 @media screen and (max-width: 768px) { 25
29 .hero section { 26@media screen and (max-width: 768px) {
30 padding: 0 2rem; 27 .hero section {
31 } 28 padding: 0 2rem;
32 29 }
33 .hero-image { 30
34 display: none 31 .hero-image {
35 } 32 display: none
36 } 33 }
34
35}
36footer {
37 color: #8b8b8b;
38}
39
37</style> 40</style>
38{% endblock hero %} 41{% endblock hero %}
39 42
40{% block footer %} 43{% block footer %}
41<footer> 44<footer>
42 45Built For CENG489 Introduction to Computer Security
43</footer> 46</footer>
44{% endblock footer %} 47{% endblock footer %}