forked from mystiq/hydrogen-web
make prototype work on ie11
This commit is contained in:
parent
6edbec45eb
commit
baa9879234
1 changed files with 85 additions and 0 deletions
85
prototypes/olmtest-ie11.html
Normal file
85
prototypes/olmtest-ie11.html
Normal file
|
@ -0,0 +1,85 @@
|
|||
<!DOCTYPE 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">
|
||||
if (!Math.imul) Math.imul = function(a, b) {
|
||||
var aHi = (a >>> 16) & 0xffff;
|
||||
var aLo = a & 0xffff;
|
||||
var bHi = (b >>> 16) & 0xffff;
|
||||
var bLo = b & 0xffff;
|
||||
// the shift by 0 fixes the sign on the high part
|
||||
// the final |0 converts the unsigned value into a signed value
|
||||
return ((aLo * bLo) + (((aHi * bLo + aLo * bHi) << 16) >>> 0) | 0);
|
||||
};
|
||||
|
||||
if (!Math.clz32) Math.clz32 = (function(log, LN2){
|
||||
return function(x) {
|
||||
// Let n be ToUint32(x).
|
||||
// Let p be the number of leading zero bits in
|
||||
// the 32-bit binary representation of n.
|
||||
// Return p.
|
||||
var asUint = x >>> 0;
|
||||
if (asUint === 0) {
|
||||
return 32;
|
||||
}
|
||||
return 31 - (log(asUint) / LN2 | 0) |0; // the "| 0" acts like math.floor
|
||||
};
|
||||
})(Math.log, Math.LN2);
|
||||
</script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/promise-polyfill@8/dist/polyfill.min.js"></script>
|
||||
<script type="text/javascript" src="../lib/olm/olm_legacy.js"></script>
|
||||
<script type="text/javascript">
|
||||
function main() {
|
||||
if (window.msCrypto && !window.crypto) {
|
||||
window.crypto = window.msCrypto;
|
||||
}
|
||||
Olm.init( ).then(function() {
|
||||
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 otkName = Object.getOwnPropertyNames(bobOneTimeKeys.curve25519)[0];
|
||||
const bobOneTimeKey = bobOneTimeKeys.curve25519[otkName];
|
||||
// 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>
|
||||
|
Loading…
Reference in a new issue