Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Symmetric key encryption #53

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
155 changes: 155 additions & 0 deletions demos/sum-presentation/client.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
<html>
<head>
<title>Presentation</title>
<style>
body {
font-family:'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif;
}
.scrollbox {
height:650px;
width:500px;
border:1px solid #CCCCCC;
overflow:auto;
resize:both;
display:inline-block;
}
.i {
display:inline-block;
vertical-align: top;
width:300px;
}
.values {
vertical-align: top;
display:inline-block;
}
.inline {
display:inline-block;
}
.error {
color: #FF0000;
}
</style>
<script src="https://code.jquery.com/jquery-1.11.1.js"></script>
<script src="/socket.io/socket.io.js"></script>
<script src="/lib/sodium.js"></script>
<script src="/lib/jiff-client.js"></script>
<script type="text/javascript">
var jiff_instance;

function connect() {
$('#connectButton').prop('disabled', true);
var computation_id = $('#computation_id').val();
var party_count = parseInt($('#count').val());

if(isNaN(party_count)) {
$("#output").append("<p class='error'>Party count must be a valid number!</p>");
$('#connectButton').prop('disabled', false);
} else {
var options = { party_count: party_count, encryption_type: 'symmetric_key'};
options.onError = function(error) { $("#output").append("<p class='error'>"+error+"</p>"); };
options.onConnect = function() { $("#sumButton").attr("disabled", false); $("#output").append("<p>All parties Connected!</p>"); };
options.logs_box = function(new_line) { $("#logs-box").append("<div>"+new_line+"</div><hr>"); }
options.public_keys_display = function(keys) {
var pkp = "";
for(var i in keys) {
pkp += "(" + i + ") [";
for(var j = 0; j < keys[i].length; ++j)
pkp += keys[i][j] + ", ";
pkp += "]<br/><hr>";
}
$("#public-keys").html(pkp);
}
options.symmetric_keys_display = function(keys) {
var skp = "";
for(var i in keys) {
skp += "(" + i + ") [";
for(var j = 0; j < keys[i].length; ++j)
skp += keys[i][j] +", ";
skp += "]<br/><hr>";
}
$("#symmetric-keys").html(skp);
}
options.id_display = function(id) { $("#jiff_id").html("Party ID: " + id); }
options.public_key_display = function(key){ $("#public_key").html("Public Key: [" + key + "]."); }
options.secret_key_display = function(key){ $("#secret_key").html("Secret Key: [" + key + "]."); }
options.socket_id_display = function(key){ $("#socket_id").html("Socket ID: [" + key + "]."); }

var hostname = window.location.hostname.trim();
var port = window.location.port;
if(port == null || port == '')
port = "80";
if(!(hostname.startsWith("http://") || hostname.startsWith("https://")))
hostname = "http://" + hostname;
if(hostname.endsWith("/"))
hostname = hostname.substring(0, hostname.length-1);
if(hostname.indexOf(":") > -1)
hostanme = hostname.substring(0, hostname.indexOf(":"));

hostname = hostname + ":" + port;
jiff_instance = jiff.make_jiff(hostname, computation_id, options);
}
}

function sum() {
var input = parseInt($("#number").val());

if(isNaN(input))
$("#output").append("<p class='error'>Input a valid number!</p>");
else if(100 < input || input < 0 || input != Math.floor(input))
$("#output").append("<p class='error'>Input a WHOLE number between 0 and 100!</p>");
else if(jiff_instance == null || !jiff_instance.isReady())
alert("Please wait!");
else
MPC(input);
}

function MPC(input) {
$("#sumButton").attr("disabled", true);
$("#output").append("<p>Starting...</p>");
var shares = jiff_instance.share(input);

var sum = shares[1];
for(var i = 2; i <= jiff_instance.party_count; i++)
sum = sum.sadd(shares[i]);

sum.open(handleResult);
}

function handleResult(result) {
$("#output").append("<p>Result is: " + result + "</p>");
$("#sumButton").attr("disabled", false);
}
</script>
</head>
<body>
<h1>Presentation</h1>
<p>This is a sum demo that tries to present what is happening under the hood.</p>
<label for="computation_id">Computation ID</label><input id="computation_id" value="test-sum"></input><br/><br/>
<label for="count">Party Count<label> <input id="count" pattern="[0-9]*"> &nbsp; <button id="connectButton" onclick="connect();">Connect</button><br/><br/>
<hr/>
<h1>Sum Numbers under MPC</h1>
<label for="number">Input Number (between 0 and 100)</label> <input id="number" pattern="[0-9]+"> &nbsp; <button onclick="sum();" disabled="disabled" id="sumButton">Sum</button><br/>
<div id="output"></div><br/>
<hr/><br/>
<div class="values">
<div id="jiff_id">Party ID: </div>
<div id="socket_id">Socket ID: </div>
<div id="public_key">Public Key: []</div>
<div id="secret_key">Secret Key: []</div>
</div>
<br/><br/><br/>
<div>
<div class="scrollBox" id="logs-box">
</div>
<div class="i">
<div>Public Keymap</div><br/>
<div id="public-keys">...</div>
</div>
<div class="i">
<div>Symmetric Key Map</div><br/>
<div id="symmetric-keys">...</div>
</div>
</div>
<br/><br/>
</body>
</html>
14 changes: 14 additions & 0 deletions demos/sum-presentation/server.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
var express = require('express');
var app = express();

Check notice on line 2 in demos/sum-presentation/server.js

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

demos/sum-presentation/server.js#L2

A CSRF middleware was not detected in your express application.
var http = require('http').Server(app);
var jiff_instance = require('../../lib/jiff-server').make_jiff(http, {logs:true});

// Serve static files.
app.use("/demos", express.static("demos"));
app.use("/lib", express.static("lib"));
app.use("/lib/ext", express.static("lib/ext"));
http.listen(8080, function() {
console.log('listening on *:8080');
});

console.log("Direct your browser to *:8080/demos/sum-presentation/client.html.");
2 changes: 1 addition & 1 deletion demos/sum/client.html
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
$("#output").append("<p class='error'>Party count must be a valid number!</p>");
$('#connectButton').prop('disabled', false);
} else {
var options = { party_count: party_count};
var options = { party_count: party_count, encryption_type: 'symmetric_key'};
options.onError = function(error) { $("#output").append("<p class='error'>"+error+"</p>"); };
options.onConnect = function() { $("#sumButton").attr("disabled", false); $("#output").append("<p>All parties Connected!</p>"); };

Expand Down
2 changes: 1 addition & 1 deletion demos/sum/party.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
var jiff_instance;

var options = {party_count: 2};
var options = {party_count: 2, encryption_type: 'symmetric_key'};
options.onConnect = function() {
var shares = jiff_instance.share(3);
var sum = shares[1];
Expand Down
Loading