summaryrefslogtreecommitdiffstats
path: root/site/public/index.html
diff options
context:
space:
mode:
Diffstat (limited to 'site/public/index.html')
-rw-r--r--site/public/index.html134
1 files changed, 115 insertions, 19 deletions
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>