58 lines
2.2 KiB
HTML
58 lines
2.2 KiB
HTML
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<style type="text/css">
|
|
pre {
|
|
font-family: monospace;
|
|
display: block;
|
|
white-space: pre;
|
|
font-size: 2em;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<script type="text/javascript" src="../lib/olm/olm.js"></script>
|
|
<script type="module">
|
|
|
|
async function main() {
|
|
const Olm = window.Olm;
|
|
await Olm.init({
|
|
locateFile: () => "../lib/olm/olm.wasm",
|
|
});
|
|
const alice = new Olm.Account();
|
|
alice.create();
|
|
console.log("alice", alice.identity_keys());
|
|
|
|
const bob = new Olm.Account();
|
|
bob.unpickle("secret", "EWfA87or4GgQ+wqVkyuFiW9gUk3FI6QSXgp8E2dS5RFLvXgy4oFvxwQ1gVnbMkdJz2Hy9ex9UmJ/ZyuRU0aRt0IwXpw/SUNq4IQeVJ7J/miXW7rV4Ep+4RSEf945KbDrokDCS2CoL5PIfv/NYyey32gA0hMi8wWIfIlOxFBV4SBJYSC+Qd54VjprwCg0Sn9vjQouKVrM/+5jzsv9+JK5OpWW0Vrb3qrXwyAOEAQ4WlOQcqZHAyPQIw");
|
|
console.log("bob", bob.identity_keys());
|
|
// generate OTK on receiver side
|
|
bob.generate_one_time_keys(1);
|
|
const bobOneTimeKeys = JSON.parse(bob.one_time_keys());
|
|
const bobOneTimeKey = Object.values(bobOneTimeKeys.curve25519)[0];
|
|
// encrypt
|
|
const aliceSession = new Olm.Session();
|
|
aliceSession.create_outbound(
|
|
alice,
|
|
JSON.parse(bob.identity_keys()).curve25519,
|
|
bobOneTimeKey,
|
|
);
|
|
const message = aliceSession.encrypt("hello secret world");
|
|
console.log("message", message);
|
|
// decrypt
|
|
const bobSession = new Olm.Session();
|
|
bobSession.create_inbound(bob, message.body);
|
|
const plaintext = bobSession.decrypt(message.type, message.body);
|
|
console.log("plaintext", plaintext);
|
|
// remove Bob's OTK as it was used to start an olm session
|
|
console.log("bob OTK before removing", bob.one_time_keys());
|
|
bob.remove_one_time_keys(bobSession);
|
|
console.log("bob OTK after removing", bob.one_time_keys());
|
|
}
|
|
|
|
main();
|
|
</script>
|
|
</body>
|
|
</html>
|
|
|