diff options
Diffstat (limited to 'javascript/demo/one_to_one_demo.html')
-rw-r--r-- | javascript/demo/one_to_one_demo.html | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/javascript/demo/one_to_one_demo.html b/javascript/demo/one_to_one_demo.html new file mode 100644 index 0000000..fc7e654 --- /dev/null +++ b/javascript/demo/one_to_one_demo.html @@ -0,0 +1,141 @@ +<html> +<head> +<script src="../olm.js"></script> +<script> +document.addEventListener("DOMContentLoaded", function (event) { + function progress(who, message) { + var message_element = document.createElement("pre"); + var progress = document.getElementById(who + "_progress"); + var start_content = document.createTextNode(message + "..."); + var done_content = document.createTextNode(message + "... Done"); + function start() { + message_element.appendChild(start_content); + progress.appendChild(message_element); + } + function done() { + message_element.replaceChild(done_content, start_content); + } + return {start:start, done:done}; + } + + window.alice = new Olm.Account(); + window.bob = new Olm.Account(); + var a_session = new Olm.Session(); + var b_session = new Olm.Session(); + var message_1; + var tasks = []; + + tasks.push(["alice", "Creating account", function() { alice.create() }]); + tasks.push(["bob", "Creating account", function() { bob.create() }]); + tasks.push(["bob", "Generate one time keys", function() { + bob.generate_one_time_keys(1); + }]); + tasks.push(["alice", "Create outbound session", function() { + var bobs_id_keys = JSON.parse(bob.identity_keys()); + var bobs_id_key = bobs_id_keys.curve25519; + var bobs_ot_keys = JSON.parse(bob.one_time_keys()); + var bobs_ot_key; + for (key in bobs_ot_keys.curve25519) { + bobs_ot_key = bobs_ot_keys.curve25519[key]; + } + a_session.create_outbound(alice, bobs_id_key, bobs_ot_key); + }]); + tasks.push(["alice", "Encrypt first message", function() { + message_1 = a_session.encrypt(""); + }]); + tasks.push(["bob", "Create inbound session", function() { + b_session.create_inbound(bob, message_1.body); + }]); + tasks.push(["bob", "Decrypt first message", function() { + b_session.decrypt(message_1.type, message_1.body); + }]); + + function glue_encrypt(from, to, from_session) { + var plain_input = document.getElementById(from + "_plain_input"); + var cipher_output = document.getElementById(from + "_cipher_output"); + var cipher_input = document.getElementById(to + "_cipher_input"); + var encrypt = document.getElementById(from + "_encrypt"); + + encrypt.addEventListener("click", function() { + var message = from_session.encrypt(plain_input.value); + var message_element = document.createElement("pre"); + var content = document.createTextNode(JSON.stringify(message)); + message_element.appendChild(content); + cipher_output.appendChild(message_element); + message_element.addEventListener("click", function() { + cipher_input.value = JSON.stringify(message); + }, false); + }, false); + } + + function glue_decrypt(to, to_session) { + var cipher_input = document.getElementById(to + "_cipher_input"); + var plain_output = document.getElementById(to + "_plain_output"); + var decrypt = document.getElementById(to + "_decrypt"); + + decrypt.addEventListener("click", function() { + var message = JSON.parse(cipher_input.value); + try { + var plaintext = to_session.decrypt(message.type, message.body); + } catch (e) { + var plaintext = "ERROR: " + e.message; + } + var message_element = document.createElement("pre"); + var message_content = document.createTextNode(plaintext); + message_element.appendChild(message_content); + plain_output.appendChild(message_element); + }, false); + } + + function do_tasks(next) { + if (tasks.length > 0) { + var task = tasks.shift(); + var p = progress(task[0], task[1]) + p.start(); + window.setTimeout(function() { + task[2](); + p.done(); + window.setTimeout(do_tasks, 50, next); + }, 50) + } else { + next(); + } + } + + do_tasks(function() { + glue_encrypt("alice", "bob", a_session); + glue_decrypt("bob", b_session); + + glue_encrypt("bob", "alice", b_session); + glue_decrypt("alice", a_session); + }); + }, false); + +</script> +<body> +<div id="alice"> + <h1>Alice</h1> + <div id="alice_progress"></div> + <h2>Encryption</h2> + <textarea id="alice_plain_input"></textarea> + <button id="alice_encrypt">Encrypt</button> + <div id="alice_cipher_output"></div> + <h2>Decryption</h2> + <textarea id="alice_cipher_input"></textarea> + <button id="alice_decrypt">Decrypt</button> + <div id="alice_plain_output"></div> +</div> +<div id="bob"> + <h1>Bob</h1> + <div id="bob_progress"></div> + <h2>Encryption</h2> + <textarea id="bob_plain_input"></textarea> + <button id="bob_encrypt">Encrypt</button> + <div id="bob_cipher_output"></div> + <h2>Decryption</h2> + <textarea id="bob_cipher_input"></textarea> + <button id="bob_decrypt">Decrypt</button> + <div id="bob_plain_output"></div> +</div> +</body> +</html> |